Topik ini menyediakan referensi API lengkap untuk Python SDK resmi dan mencakup contoh kode lengkap untuk format input dan output umum.
Untuk mempelajari kasus penggunaan dan prinsip kerja SDK, lihat SDK untuk panggilan layanan.
Prasyarat
pip install -U eas-prediction --userMulai cepat
Pilih kelas Request yang sesuai dengan format data input model Anda. Kode berikut menunjukkan contoh minimal panggilan layanan end-to-end yang menggunakan permintaan berbasis string. Untuk contoh lainnya, lihat Contoh.
#!/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', 'my_service')
client.set_token('YOUR_SERVICE_TOKEN')
client.init()
request = StringRequest('[{}]')
resp = client.predict(request)
print(resp)Referensi API
Python SDK menyediakan kelas-kelas berikut, yang dikelompokkan berdasarkan tujuan:
Grup | Deskripsi |
Klien utama |
|
Input dan output |
|
Layanan antrian |
|
Parameter umum
Endpoint: Alamat endpoint server.
Untuk layanan standar, atur parameter ini ke endpoint gateway default. Contoh:
182848887922***.cn-shanghai.pai-eas.aliyuncs.com.Untuk permintaan koneksi langsung VPC, atur parameter ini ke endpoint koneksi langsung VPC layanan. Formatnya adalah
<uid>.vpc.<region-id>.pai-eas.aliyuncs.com. Contoh:182848887922****.vpc.cn-shanghai.pai-eas.aliyuncs.com.
Kelas PredictClient
Metode | Deskripsi |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Inisialisasi objek PredictClient. Setelah Anda mengatur parameter, Anda perlu memanggil metode |
|
|
Kelas StringRequest
Metode | Deskripsi |
|
|
Kelas StringResponse
Metode | Deskripsi |
|
|
Kelas TFRequest
Metode | Deskripsi |
|
|
|
|
|
|
|
|
Kelas TFResponse
Metode | Deskripsi |
|
|
|
|
Kelas TorchRequest
Metode | Deskripsi |
| Membuat objek |
|
|
|
|
|
|
Kelas TorchResponse
Metode | Deskripsi |
|
|
|
|
Kelas QueueClient
Metode | Deskripsi |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kelas Watcher
Metode | Deskripsi |
|
|
| Deskripsi: Menutup objek Watcher untuk menghentikan koneksi data back-end. Catatan Klien hanya dapat memiliki satu Watcher aktif sekaligus. Anda harus menutup Watcher saat ini sebelum memulai yang baru. |
Contoh
Contoh inferensi sinkron (berdasarkan format input/output)
Pilih kode contoh berdasarkan tipe input dan output layanan.
String
Pengguna yang menerapkan layanan dengan prosesor kustom biasanya menggunakan string untuk panggilan layanan, seperti pada layanan model PMML. Kode berikut menunjukkan program contohnya.
#!/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)TensorFlow
Jika Anda menggunakan TensorFlow, gunakan TFRequest dan TFResponse sebagai format data input dan output. Kode berikut menunjukkan contohnya.
#!/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)PyTorch
Jika Anda menggunakan PyTorch, gunakan TorchRequest dan TorchResponse sebagai format data input dan output. Kode berikut menunjukkan contohnya.
#!/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) )BladeProcessor
Jika Anda menggunakan BladeProcessor, gunakan BladeRequest dan BladeResponse sebagai format data input dan output. Kode berikut menunjukkan contohnya.
#!/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) )BladeProcessor kompatibel dengan antarmuka TensorFlow default
Pengguna BladeProcessor dapat menggunakan TFRequest dan TFResponse sebagai format data input dan output. Format ini kompatibel dengan antarmuka TensorFlow default Elastic Algorithm Service (EAS). Kode berikut menunjukkan contohnya.
#!/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) )Contoh memanggil layanan menggunakan koneksi langsung VPC
Untuk menggunakan koneksi langsung, konfigurasikan Virtual Private Cloud (VPC) untuk layanan. Untuk informasi lebih lanjut, lihat Gunakan kelompok sumber daya Elastic Algorithm Service (EAS) dan Akses sumber daya publik atau internal dari EAS. Metode pemanggilan ini hanya memerlukan satu baris kode tambahan dibandingkan metode normal: client.set_endpoint_type(ENDPOINT_TYPE_DIRECT). Metode ini ideal untuk layanan dengan trafik dan konkurensi tinggi. Kode berikut memberikan contohnya.
#!/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__':
# Format endpoint koneksi langsung VPC adalah <uid>.vpc.<region-id>.pai-eas.aliyuncs.com. Anda dapat menemukan endpoint di tab Informasi Pemanggilan pada halaman detail layanan di Konsol EAS.
client = PredictClient('http://182848887922****.vpc.cn-hangzhou.pai-eas.aliyuncs.com', 'mnist_saved_model_example')
client.set_token('M2FhNjJlZDBmMzBmMzE4NjFiNzZhMmUxY2IxZjkyMDczNzAzYjFi****')
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)Contoh: Mengirim dan berlangganan data dalam layanan antrian
Anda dapat menggunakan QueueClient untuk mengirim data ke layanan antrian, mengkueri data, memeriksa status layanan, dan berlangganan dorongan data. Demo berikut menunjukkan contoh dengan dua thread. Satu thread mengirim data ke layanan antrian, sedangkan thread lain menggunakan Watcher untuk berlangganan data yang didorong.
#!/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)
# hapus 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 menonton 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()Penyelesaian masalah
Untuk informasi tentang gejala, penyebab, dan penyelesaian masalah pengecualian dari panggilan Python SDK, lihat bagian 'Penyelesaian Masalah Pengecualian Panggilan' dalam SDK Panggilan Layanan. Pengecualian ini mencakup masalah umum terkait otentikasi, routing, koneksi, dan server.
Untuk daftar lengkap kode status layanan, deskripsi pesan error, dan solusi yang disarankan, lihat Lampiran: Kode Status Layanan dan Error Umum.