EAS menyediakan processor PyTorch bawaan untuk menerapkan model PyTorch dalam format TorchScript sebagai layanan inferensi online. Topik ini menjelaskan cara memilih versi processor, menerapkan layanan model, dan mengirim permintaan inferensi.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
-
Model PyTorch yang diekspor ke format TorchScript (file
.pt) -
Klien eascmd yang telah diinstal dan dikonfigurasi
-
Bucket Alibaba Cloud Object Storage Service (OSS) untuk menyimpan file model
Pilih versi processor
EAS menyediakan varian processor CPU dan GPU untuk PyTorch versi 1.6 hingga 1.10. Pilih nama processor yang sesuai dengan versi PyTorch dan target perangkat keras Anda.
| Nama processor | Versi PyTorch | Dukungan GPU |
|---|---|---|
| pytorch_cpu_1.6 | PyTorch 1.6 | Tidak |
| pytorch_cpu_1.7 | PyTorch 1.7 | Tidak |
| pytorch_cpu_1.9 | PyTorch 1.9 | Tidak |
| pytorch_cpu_1.10 | PyTorch 1.10 | Tidak |
| pytorch_gpu_1.6 | PyTorch 1.6 | Ya |
| pytorch_gpu_1.7 | PyTorch 1.7 | Ya |
| pytorch_gpu_1.9 | PyTorch 1.9 | Ya |
| pytorch_gpu_1.10 | PyTorch 1.10 | Ya |
Nama processor mengikuti pola pytorch_{cpu|gpu}_{version}. Gunakan processor _cpu_ untuk instans hanya-CPU dan processor _gpu_ untuk instans GPU.
Langkah 1: Terapkan layanan
Pilih salah satu metode penerapan berikut:
-
eascmd (disarankan): Cocok untuk penerapan berbasis skrip atau otomatis
-
Konsol: Cocok untuk penerapan satu kali atau jika Anda lebih suka antarmuka visual
Terapkan menggunakan eascmd
Buat file konfigurasi layanan dan atur processor ke nama processor yang telah Anda pilih. Contoh berikut menerapkan model ResNet-18 menggunakan processor PyTorch 1.6 CPU.
{
"name": "pytorch_resnet_example",
"model_path": "http://examplebucket.oss-cn-shanghai.aliyuncs.com/models/resnet18.pt",
"processor": "pytorch_cpu_1.6",
"metadata": {
"cpu": 1,
"instance": 1,
"memory": 1000
}
}
Teruskan file konfigurasi ini ke eascmd untuk menerapkan layanan. Untuk referensi penerapan lengkap, lihat Penerapan layanan: EASCMD & DSW.
Terapkan menggunakan Konsol
Untuk petunjuk penerapan langkah demi langkah melalui Konsol, lihat Penerapan layanan: Konsol.
Langkah 2: Panggil layanan
Layanan PyTorch menggunakan Protocol Buffers (Protobuf) untuk input dan output. Alat debugging online di Konsol EAS hanya mendukung teks biasa dan tidak dapat digunakan dengan layanan PyTorch. Sebagai gantinya, gunakan SDK EAS atau buat permintaan Protobuf mentah.
SDK EAS menangani serialisasi permintaan dan mencakup toleransi kesalahan bawaan serta dukungan koneksi langsung. Contoh Python berikut mengirim sepuluh permintaan inferensi ke layanan PyTorch yang telah diterapkan:
#!/usr/bin/env python
from eas_prediction import PredictClient
from eas_prediction import TorchRequest
if __name__ == '__main__':
# Ganti dengan titik akhir layanan dan nama layanan Anda
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)
for x in range(0, 10):
resp = client.predict(req)
print(resp.get_tensor_shape(0))
Metode utama SDK:
| Metode | Deskripsi |
|---|---|
add_feed(index, shape, dtype, data) |
Menambahkan tensor input pada indeks tertentu dengan bentuk, tipe data, dan nilai yang ditentukan |
add_fetch(index) |
Memilih tensor output tertentu untuk dikembalikan. Abaikan pemanggilan ini untuk mengembalikan semua output |
get_tensor_shape(index) |
Mengambil bentuk tensor output pada indeks tertentu |
Untuk pengaturan otentikasi dan pola permintaan lanjutan, lihat Gunakan SDK Python.
Format permintaan
Processor PyTorch EAS menggunakan format Protobuf untuk input dan output. Saat menggunakan SDK, permintaan akan diserialisasi secara otomatis—Anda hanya perlu memanggil add_feed dan add_fetch seperti yang ditunjukkan di atas.
Untuk membuat permintaan Protobuf mentah tanpa SDK, hasilkan kode klien dari definisi .proto berikut. Untuk panduan pembuatan, lihat Buat permintaan untuk layanan TensorFlow.
syntax = "proto3";
package pytorch.eas;
option cc_enable_arenas = true;
enum ArrayDataType {
// Bukan nilai legal untuk DataType. Digunakan untuk menandakan bahwa bidang DataType
// belum diatur
DT_INVALID = 0;
// Tipe data yang diharapkan didukung oleh semua perangkat komputasi
DT_FLOAT = 1;
DT_DOUBLE = 2;
DT_INT32 = 3;
DT_UINT8 = 4;
DT_INT16 = 5;
DT_INT8 = 6;
DT_STRING = 7;
DT_COMPLEX64 = 8; // Bilangan kompleks presisi tunggal
DT_INT64 = 9;
DT_BOOL = 10;
DT_QINT8 = 11; // int8 terkuantisasi
DT_QUINT8 = 12; // uint8 terkuantisasi
DT_QINT32 = 13; // int32 terkuantisasi
DT_BFLOAT16 = 14; // Float32 dipotong menjadi 16 bit. Hanya untuk operasi cast
DT_QINT16 = 15; // int16 terkuantisasi
DT_QUINT16 = 16; // uint16 terkuantisasi
DT_UINT16 = 17;
DT_COMPLEX128 = 18; // Bilangan kompleks presisi ganda
DT_HALF = 19;
DT_RESOURCE = 20;
DT_VARIANT = 21; // Tipe data C++ arbitrer
}
// Dimensi array
message ArrayShape {
repeated int64 dim = 1 [packed = true];
}
// Buffer protokol yang merepresentasikan array
message ArrayProto {
// Tipe Data
ArrayDataType dtype = 1;
// Bentuk array.
ArrayShape array_shape = 2;
// DT_FLOAT
repeated float float_val = 3 [packed = true];
// DT_DOUBLE
repeated double double_val = 4 [packed = true];
// DT_INT32, DT_INT16, DT_INT8, DT_UINT8.
repeated int32 int_val = 5 [packed = true];
// DT_STRING
repeated bytes string_val = 6;
// DT_INT64.
repeated int64 int64_val = 7 [packed = true];
}
message PredictRequest {
// Tensor input.
repeated ArrayProto inputs = 1;
// Filter output.
repeated int32 output_filter = 2;
}
// Respons untuk PredictRequest saat berhasil dijalankan.
message PredictResponse {
// Tensor output.
repeated ArrayProto outputs = 1;
}
Langkah selanjutnya
-
Gunakan SDK Python — otentikasi, opsi koneksi, dan pola permintaan lanjutan
-
Penerapan layanan: EASCMD & DSW — referensi penerapan eascmd lengkap
-
Buat permintaan untuk layanan TensorFlow — membuat permintaan Protobuf mentah