Kami merekomendasikan penggunaan Elastic Algorithm Service (EAS) SDK resmi untuk mengurangi waktu dalam menentukan logika pemanggilan dan meningkatkan stabilitas pemanggilan. Topik ini menjelaskan EAS SDK untuk Python serta menyediakan input, output, dan demo umum untuk menunjukkan cara menggunakan EAS SDK untuk Python guna memanggil layanan.
Instalasi SDK
pip install -U eas-prediction --userMetode
Deskripsi parameter umum
endpoint: Titik akhir server.
Untuk memanggil layanan dalam mode reguler, atur parameter ini ke titik akhir gateway default. Contoh:
182848887922***.cn-shanghai.pai-eas.aliyuncs.com.Untuk memanggil layanan melalui koneksi langsung Virtual Private Cloud (VPC), atur parameter ini ke titik akhir umum wilayah tersebut. Sebagai contoh, di wilayah China (Shanghai), atur parameter ini ke
pai-eas-vpc.cn-shanghai.aliyuncs.com.
PredictClient
Metode | Deskripsi |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Deskripsi: menginisialisasi objek klien. Setelah semua metode sebelumnya dipanggil, Anda harus memanggil metode |
|
|
StringRequest
Metode | Deskripsi |
|
|
StringResponse
Metode | Deskripsi |
|
|
TFRequest
Metode | Deskripsi |
|
|
|
|
|
|
|
|
TFResponse
Metode | Deskripsi |
|
|
|
|
TorchRequest
Metode | Deskripsi |
| Deskripsi: membuat objek dari kelas TorchRequest. |
|
|
|
|
|
|
TorchResponse
Metode | Deskripsi |
|
|
|
|
QueueClient
Metode | Deskripsi |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Watcher
Metode | Deskripsi |
|
|
| Deskripsi: menutup watcher untuk mengakhiri koneksi backend. null 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 layanan, string sering digunakan untuk memanggil layanan, seperti layanan yang diterapkan berdasarkan model Predictive Model Markup Language (PMML). Berikut adalah contoh kode demo:
#!/usr/bin/env python from eas_prediction import PredictClient from eas_prediction import StringRequest if __name__ == '__main__': client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'scorecard_pmml_example') client.set_token('YWFlMDYyZDNmNTc3M2I3MzMwYmY0MmYwM2Y2MTYxMTY4NzBkNzdj****') client.init() request = StringRequest('[{"fea1": 1, "fea2": 2}]') for x in range(0, 1000000): resp = client.predict(request) print(resp)Input and output as tensors
Jika Anda menggunakan TensorFlow untuk menerapkan layanan, Anda harus menggunakan kelas TFRequest dan TFResponse untuk memanggil layanan. Berikut adalah contoh kode demo:
#!/usr/bin/env python from eas_prediction import PredictClient from eas_prediction import StringRequest from eas_prediction import TFRequest if __name__ == '__main__': client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'mnist_saved_model_example') client.set_token('YTg2ZjE0ZjM4ZmE3OTc0NzYxZDMyNmYzMTJjZTQ1YmU0N2FjMTAy****') client.init() #request = StringRequest('[{}]') req = TFRequest('predict_images') req.add_feed('images', [1, 784], TFRequest.DT_FLOAT, [1] * 784) for x in range(0, 1000000): resp = client.predict(req) print(resp)Use a VPC direct connection channel to call a service
Anda dapat menggunakan saluran koneksi langsung VPC untuk mengakses layanan yang diterapkan dalam grup sumber daya khusus EAS. Untuk menggunakan saluran koneksi langsung VPC, grup sumber daya khusus EAS dan vSwitch yang ditentukan harus berada dalam VPC yang sama. Untuk informasi lebih lanjut tentang cara membeli grup sumber daya khusus EAS dan cara mengonfigurasi konektivitas jaringan, lihat Bekerja dengan grup sumber daya khusus dan Konfigurasikan konektivitas jaringan. Dibandingkan dengan mode reguler, mode ini mencakup satu baris kode tambahan:
client.set_endpoint_type(ENDPOINT_TYPE_DIRECT). Mode ini cocok untuk skenario dengan konkurensi tinggi dan lalu lintas berat. Berikut adalah contoh kode demo:#!/usr/bin/env python from eas_prediction import PredictClient from eas_prediction import StringRequest from eas_prediction import TFRequest from eas_prediction import ENDPOINT_TYPE_DIRECT if __name__ == '__main__': client = PredictClient('http://pai-eas-vpc.cn-hangzhou.aliyuncs.com', 'mnist_saved_model_example') client.set_token('M2FhNjJlZDBmMzBmMGM3ZmE4ZmNjZDk0M2NiMDA3OTZmNzc1MTUx****') client.set_endpoint_type(ENDPOINT_TYPE_DIRECT) client.init() request = TFRequest('predict_images') request.add_feed('images', [1, 784], TFRequest.DT_FLOAT, [1] * 784) for x in range(0, 1000000): resp = client.predict(request) print(resp)Call a PyTorch model
Jika Anda menggunakan PyTorch untuk menerapkan layanan, Anda harus menggunakan kelas TorchRequest dan TorchResponse untuk memanggil layanan. Berikut adalah contoh kode demo:
#!/usr/bin/env python from eas_prediction import PredictClient from eas_prediction import TorchRequest if __name__ == '__main__': client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'pytorch_gpu_wl') client.init() req = TorchRequest() req.add_feed(0, [1, 3, 224, 224], TorchRequest.DT_FLOAT, [1] * 150528) # req.add_fetch(0) import time st = time.time() timer = 0 for x in range(0, 10): resp = client.predict(req) timer += (time.time() - st) st = time.time() print(resp.get_tensor_shape(0)) # print(resp) print("average response time: %s s" % (timer / 10) )Call a Blade processor-based model
Jika Anda menggunakan prosesor Blade untuk menerapkan layanan, Anda harus menggunakan kelas BladeRequest dan BladeResponse untuk memanggil layanan. Berikut adalah contoh kode demo:
#!/usr/bin/env python from eas_prediction import PredictClient from eas_prediction import BladeRequest if __name__ == '__main__': client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'nlp_model_example') client.init() req = BladeRequest() req.add_feed('input_data', 1, [1, 360, 128], BladeRequest.DT_FLOAT, [0.8] * 85680) req.add_feed('input_length', 1, [1], BladeRequest.DT_INT32, [187]) req.add_feed('start_token', 1, [1], BladeRequest.DT_INT32, [104]) req.add_fetch('output', BladeRequest.DT_FLOAT) import time st = time.time() timer = 0 for x in range(0, 10): resp = client.predict(req) timer += (time.time() - st) st = time.time() # print(resp) # print(resp.get_values('output')) print(resp.get_tensor_shape('output')) print("average response time: %s s" % (timer / 10) )Call an EAS Blade processor-based model that is compatible with default TensorFlow methods
Anda dapat menggunakan kelas TFRequest dan TFResponse untuk memanggil model berbasis prosesor Blade yang kompatibel dengan metode TensorFlow default yang didukung oleh EAS. Berikut adalah contoh kode demo:
#!/usr/bin/env python from eas_prediction import PredictClient from eas_prediction.blade_tf_request import TFRequest # Perlu Mengimpor blade TFRequest if __name__ == '__main__': client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'nlp_model_example') client.init() req = TFRequest(signature_name='predict_words') req.add_feed('input_data', [1, 360, 128], TFRequest.DT_FLOAT, [0.8] * 85680) req.add_feed('input_length', [1], TFRequest.DT_INT32, [187]) req.add_feed('start_token', [1], TFRequest.DT_INT32, [104]) req.add_fetch('output') import time st = time.time() timer = 0 for x in range(0, 10): resp = client.predict(req) timer += (time.time() - st) st = time.time() # print(resp) # print(resp.get_values('output')) print(resp.get_tensor_shape('output')) print("average response time: %s s" % (timer / 10) )Use the queuing service to send and subscribe to data
Anda dapat mengirim dan memeriksa data dalam antrian, memeriksa status antrian, serta 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. Berikut adalah contoh kode demo:
#!/usr/bin/env python from eas_prediction import QueueClient import threading if __name__ == '__main__': endpoint = '182848887922****.cn-shanghai.pai-eas.aliyuncs.com' queue_name = 'test_group.qservice/sink' token = 'YmE3NDkyMzdiMzNmMGM3ZmE4ZmNjZDk0M2NiMDA3OTZmNzc1MTUx****' queue = QueueClient(endpoint, queue_name) queue.set_token(token) queue.init() queue.set_timeout(30000) # potong semua pesan dalam antrian attributes = queue.attributes() if 'stream.lastEntry' in attributes: queue.truncate(int(attributes['stream.lastEntry']) + 1) count = 100 # buat thread untuk mengirim pesan ke antrian def send_thread(): for i in range(count): index, request_id = queue.put('[{}]') print('send: ', i, index, request_id) # buat thread untuk melihat pesan dari antrian def watch_thread(): watcher = queue.watch(0, 5, auto_commit=True) i = 0 for x in watcher.run(): print('recv: ', i, x.index, x.tags['requestId']) i += 1 if i == count: break watcher.close() thread1 = threading.Thread(target=watch_thread) thread2 = threading.Thread(target=send_thread) thread1.start() thread2.start() thread1.join() thread2.join()