SDK Resmi Elastic Algorithm Service (EAS) disediakan untuk memanggil layanan yang diterapkan berdasarkan model mereka. SDK EAS mengurangi waktu yang diperlukan untuk mendefinisikan logika pemanggilan dan meningkatkan stabilitas pemanggilan. Topik ini menjelaskan EAS SDK untuk Go. Demo disediakan untuk menunjukkan cara menggunakan EAS SDK untuk Go memanggil layanan. Dalam demo ini, input dan output adalah tipe yang umum digunakan.
Informasi latar belakang
Anda tidak perlu menginstal EAS SDK untuk Go terlebih dahulu. SDK secara otomatis diunduh dari GitHub oleh manajer paket bahasa GO selama kompilasi kode. Untuk menyesuaikan bagian tertentu dari logika pemanggilan, Anda dapat mengunduh EAS SDK untuk Go dan memodifikasi kode. Untuk mengunduh SDK, kunjungi eas-golang-sdk.
Metode
Kelas | Metode | Deskripsi |
PredictClient |
|
|
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
| Menginisialisasi objek klien. Saat salah satu metode sebelumnya yang digunakan untuk menetapkan parameter dipanggil, parameter tersebut tidak berlaku sampai Anda memanggil metode | |
|
| |
|
| |
|
| |
|
| |
TFRequest |
|
|
|
| |
|
| |
TFResponse |
|
|
|
| |
TorchRequest |
| Membuat objek dari kelas TFRequest. |
|
| |
|
| |
TorchResponse |
|
|
|
| |
QueueClient |
|
|
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
types.Watcher |
|
|
| Menghentikan watcher untuk menutup koneksi backend. Catatan Hanya satu watcher yang dapat dimulai untuk satu klien. Anda harus menutup watcher sebelum dapat memulai watcher lainnya. |
Demo
Input and output as strings
Jika Anda menggunakan prosesor kustom untuk menerapkan model sebagai layanan, string sering digunakan untuk memanggil layanan, seperti layanan yang diterapkan berdasarkan model Predictive Model Markup Language (PMML). Untuk informasi lebih lanjut, lihat demo berikut:
package main import ( "fmt" "github.com/pai-eas/eas-golang-sdk/eas" ) func main() { client := eas.NewPredictClient("182848887922****.cn-shanghai.pai-eas.aliyuncs.com", "scorecard_pmml_example") client.SetToken("YWFlMDYyZDNmNTc3M2I3MzMwYmY0MmYwM2Y2MTYxMTY4NzBkNzdj****") client.Init() req := "[{\"fea1\": 1, \"fea2\": 2}]" for i := 0; i < 100; i++ { resp, err := client.StringPredict(req) if err != nil { fmt.Printf("failed to predict: %v\n", err.Error()) } else { fmt.Printf("%v\n", resp) } } }Input and output as tensors
Jika Anda menggunakan TensorFlow untuk menerapkan model sebagai layanan, Anda harus menggunakan kelas TFRequest dan TFResponse untuk memanggil layanan. Untuk informasi lebih lanjut, lihat demo berikut:
package main import ( "fmt" "github.com/pai-eas/eas-golang-sdk/eas" ) func main() { client := eas.NewPredictClient("182848887922****.cn-shanghai.pai-eas.aliyuncs.com", "mnist_saved_model_example") client.SetToken("YTg2ZjE0ZjM4ZmE3OTc0NzYxZDMyNmYzMTJjZTQ1YmU0N2FjMTAy****") client.Init() tfreq := eas.TFRequest{} tfreq.SetSignatureName("predict_images") tfreq.AddFeedFloat32("images", []int64{1, 784}, make([]float32, 784)) for i := 0; i < 100; i++ { resp, err := client.TFPredict(tfreq) if err != nil { fmt.Printf("failed to predict: %v", err) } else { fmt.Printf("%v\n", resp) } } }Call a PyTorch model
Jika Anda menggunakan PyTorch untuk menerapkan model sebagai layanan, Anda harus menggunakan kelas TorchRequest dan TorchResponse untuk memanggil layanan. Untuk informasi lebih lanjut, lihat demo berikut:
package main import ( "fmt" "github.com/pai-eas/eas-golang-sdk/eas" ) func main() { client := eas.NewPredictClient("182848887922****.cn-shanghai.pai-eas.aliyuncs.com", "pytorch_resnet_example") client.SetTimeout(500) client.SetToken("ZjdjZDg1NWVlMWI2NTU5YzJiMmY5ZmE5OTBmYzZkMjI0YjlmYWVl****") client.Init() req := eas.TorchRequest{} req.AddFeedFloat32(0, []int64{1, 3, 224, 224}, make([]float32, 150528)) req.AddFetch(0) for i := 0; i < 10; i++ { resp, err := client.TorchPredict(req) if err != nil { fmt.Printf("failed to predict: %v", err) } else { fmt.Println(resp.GetTensorShape(0), resp.GetFloatVal(0)) } } }Use a VPC direct connection channel to call a service
Anda dapat menggunakan saluran koneksi langsung VPC untuk mengakses hanya layanan yang diterapkan dalam grup sumber daya khusus untuk EAS. Selain itu, untuk menggunakan saluran tersebut, grup sumber daya khusus untukEAS dan vSwitch yang ditentukan harus terhubung ke VPC. Untuk informasi lebih lanjut, lihat Bekerja dengan grup sumber daya EAS dan Konfigurasi konektivitas jaringan. Dibandingkan dengan mode reguler, mode ini berisi satu baris kode tambahan:
client.SetEndpointType(eas.EndpointTypeDirect). Anda dapat menggunakan mode ini dalam skenario konkurensi tinggi dan lalu lintas berat. Untuk informasi lebih lanjut, lihat demo berikut:package main import ( "fmt" "github.com/pai-eas/eas-golang-sdk/eas" ) func main() { client := eas.NewPredictClient("pai-eas-vpc.cn-shanghai.aliyuncs.com", "scorecard_pmml_example") client.SetToken("YWFlMDYyZDNmNTc3M2I3MzMwYmY0MmYwM2Y2MTYxMTY4NzBkNzdj****") client.SetEndpointType(eas.EndpointTypeDirect) client.Init() req := "[{\"fea1\": 1, \"fea2\": 2}]" for i := 0; i < 100; i++ { resp, err := client.StringPredict(req) if err != nil { fmt.Printf("failed to predict: %v\n", err.Error()) } else { fmt.Printf("%v\n", resp) } } }Set the connection parameters of the client
Anda dapat menetapkan parameter koneksi klien dengan menggunakan atribut
http.Transport. Untuk informasi lebih lanjut, lihat demo berikut:package main import ( "fmt" "github.com/pai-eas/eas-golang-sdk/eas" "net/http" "time" ) func main() { client := eas.NewPredictClient("pai-eas-vpc.cn-shanghai.aliyuncs.com", "network_test") client.SetToken("MDAwZDQ3NjE3OThhOTI4ODFmMjJiYzE0MDk1NWRkOGI1MmVhMGI0****") client.SetEndpointType(eas.EndpointTypeDirect) client.SetHttpTransport(&http.Transport{ MaxConnsPerHost: 300, TLSHandshakeTimeout: 100 * time.Millisecond, ResponseHeaderTimeout: 200 * time.Millisecond, ExpectContinueTimeout: 200 * time.Millisecond, }) }Use the queuing service to send and subscribe to data
Anda dapat mengirim dan meminta data dalam antrian, meminta status antrian, dan berlangganan data yang didorong oleh antrian. Dalam demo berikut, sebuah thread mendorong data ke antrian, dan thread lainnya menggunakan watcher untuk berlangganan data yang didorong. Untuk informasi lebih lanjut, lihat demo berikut:
CatatanSaat menerapkan layanan inferensi asinkron di EAS, antrian input dan output akan secara otomatis dibuat dalam format berikut:
Antrian input: <domain>/api/predict/<service_name>
Antrian output: <domain>/api/predict/<service_name>/sink
Buat QueueClient menggunakan <service_name> atau <service_name>/sink sesuai dengan kebutuhan Anda.
const ( QueueEndpoint = "182848887922****.cn-shanghai.pai-eas.aliyuncs.com" // Sebagai contoh: Jika nama layanan EAS adalah test_qservice, maka nama antrian input akan menjadi test_qservice, dan nama antrian output akan menjadi test_qservice/sink. QueueName = "test_qservice" QueueToken = "YmE3NDkyMzdiMzNmMGM3ZmE4ZmNjZDk0M2NiMDA3OTZmNzc1MTUx****" ) queue, err := NewQueueClient(QueueEndpoint, QueueName, QueueToken) // potong semua pesan dalam antrian attrs, err := queue.Attributes() if index, ok := attrs["stream.lastEntry"]; ok { idx, _ := strconv.ParseUint(index, 10, 64) queue.Truncate(context.Background(), idx+1) } ctx, cancel := context.WithCancel(context.Background()) // buat goroutine untuk mengirim pesan ke antrian go func() { i := 0 for { select { case <-time.NewTicker(time.Microsecond * 1).C: _, _, err := queue.Put(context.Background(), []byte(strconv.Itoa(i)), types.Tags{}) if err != nil { fmt.Printf("Error occurred, retry to handle it: %v\n", err) } i += 1 case <-ctx.Done(): break } } }() // buat watcher untuk memantau pesan dari antrian watcher, err := queue.Watch(context.Background(), 0, 5, false, false) if err != nil { fmt.Printf("Failed to create a watcher to watch the queue: %v\n", err) return } // baca pesan dari antrian dan komit secara manual for i := 0; i < 100; i++ { df := <-watcher.FrameChan() err := queue.Commit(context.Background(), df.Index.Uint64()) if err != nil { fmt.Printf("Failed to commit index: %v(%v)\n", df.Index, err) } } // semuanya selesai, tutup watcher watcher.Close() cancel()