Blade EAS Plugin secara otomatis mengoptimalkan model selama penerapan layanan EAS melalui pengaturan file konfigurasi.
Prasyarat dan batasan
Prosesor TensorFlow dan PyTorch di EAS telah mengintegrasikan Blade runtime SDK. Konfigurasikan file konfigurasi layanan EAS untuk mengoptimalkan model yang diterapkan menggunakan prosesor tersebut.
Blade EAS Plugin mengoptimalkan model sebelum penerapan EAS. Proses optimasi memakan waktu 3 hingga 10 menit, tergantung pada kompleksitas model. Plugin ini dijalankan sekali selama penerapan layanan EAS awal. Operasi skala keluar (scale-out) dan skala-masuk (scale-in) berikutnya menggunakan model yang telah dioptimalkan.
Aktifkan Blade EAS Plugin hanya saat membuat layanan menggunakan klien eascmd. Untuk konfigurasi klien eascmd, lihat Unduh dan autentikasi klien dan Referensi perintah.
Tambahkan bidang plugins ke file konfigurasi layanan EAS untuk mengaktifkan Blade EAS Plugin. Untuk detailnya, lihat bidang plugins. Contoh berikut menunjukkan konfigurasi Blade EAS Plugin:
bidang plugins
Tambahkan bidang plugins ke file konfigurasi layanan EAS untuk mengaktifkan Blade EAS Plugin. Bidang ini berisi daftar satu atau beberapa elemen dictionary. Untuk detail bidang, lihat Buat layanan.
Setiap elemen dictionary berisi kunci-kunci berikut:
Tabel 1. Bidang dalam plugins
|
Kunci |
Wajib |
Deskripsi |
|
command |
Ya |
Perintah optimasi yang akan dijalankan. Untuk nilai-nilainya, lihat Pemetaan antara prosesor dan citra runtime plugin. |
|
image |
Ya |
Alamat registri citra runtime Blade EAS Plugin. Blade EAS Plugin mendukung framework TensorFlow dan PyTorch pada perangkat CPU dan GPU (CUDA 10.0). Lihat Pemetaan antara prosesor dan citra runtime plugin untuk nama prosesor dan alamat registri plugin. |
|
resource |
Tidak |
Kelompok sumber daya untuk menjalankan optimasi. Ini berbeda dari bidang resource tingkat atas dalam file deskripsi layanan, yang menentukan kelompok sumber daya untuk layanan EAS. Wajib untuk optimasi GPU. Di wilayah China (Hangzhou) dan China (Shanghai), gunakan kelompok sumber daya T4_8CORE. Di China (Shanghai), kelompok sumber daya V100_8CORE atau P4_8CORE juga didukung. Catatan
Untuk GPU, kelompok sumber daya yang menjalankan Blade EAS Plugin harus menggunakan jenis kartu yang sama dengan kelompok sumber daya untuk layanan EAS. |
|
gpu |
Tidak |
Jumlah GPU untuk optimasi. Biasanya 1. |
|
config |
Tidak |
Item konfigurasi optimasi lanjutan. Saat ini hanya mendukung subkunci model_info untuk mengonfigurasi satu model. Kuncinya adalah nama file model. Nilainya mendukung beberapa item optimasi yang sesuai dengan parameter antarmuka |
Tabel 2. Pemetaan antara prosesor dan citra runtime plugin
|
Jenis perangkat |
Kunci |
Nilai |
|
CPU |
image (Alamat Registri Blade EAS Plugin) |
|
|
command (Perintah optimasi plugin) |
|
|
|
processor |
|
|
|
GPU |
image (Alamat Registri Blade EAS Plugin) |
|
|
command (Perintah optimasi plugin) |
|
|
|
processor |
|
Tabel 3. Daftar item optimasi
|
Item optimasi |
Deskripsi |
|
optimization_level |
Tingkat optimasi. Tersedia dua tingkat:
|
|
test_data |
File data uji. Opsional. File data uji harus disertakan dalam path atau paket terkompresi yang ditentukan oleh model_path. Sediakan data uji untuk inferensi model normal, terutama untuk optimasi model PyTorch. Untuk pembuatan file data uji, lihat Data tambahan untuk optimasi. |
|
calibration_dataset |
File data kalibrasi kuantisasi. Opsional. File data kalibrasi kuantisasi harus disertakan dalam path atau paket terkompresi yang ditentukan oleh model_path. Jika tidak ditentukan, Blade melakukan kuantisasi INT8 online. Jika ditentukan, Blade melakukan kuantisasi INT8 offline. Sediakan lebih dari 100 data kalibrasi. Untuk pembuatan file data kalibrasi, lihat Data tambahan untuk optimasi. |
|
inputs |
Daftar string. Opsional. Menentukan nama node input model. Jika tidak ditentukan, Blade menggunakan node tanpa node hulu sebagai node input. Tidak diperlukan untuk model PyTorch. |
|
outputs |
Daftar string. Opsional. Menentukan nama node output model. Jika tidak ditentukan, Blade menggunakan node tanpa node hilir sebagai node output. Tidak diperlukan untuk model PyTorch. |
|
input_shapes |
Bentuk-bentuk tensor input yang mungkin. Digunakan untuk meningkatkan optimasi dalam skenario tertentu. Jumlah elemen dalam daftar dalam harus sama dengan jumlah tensor input. Setiap elemen adalah string yang merepresentasikan bentuk input, seperti Untuk beberapa set bentuk yang mungkin, tambahkan elemen ke daftar luar. Misalnya, model dengan dua input mungkin memiliki contoh nilai berikut:
|
|
input_ranges |
Rentang nilai untuk elemen-elemen setiap tensor input. Jumlah elemen dalam daftar dalam harus sama dengan jumlah tensor input. Setiap elemen adalah string yang merepresentasikan rentang nilai. Rentang nilai menggunakan tanda kurung siku dengan bilangan real atau karakter, seperti Untuk beberapa set rentang nilai yang mungkin, tambahkan elemen ke daftar luar. Misalnya, model dengan dua input mungkin memiliki contoh nilai berikut:
|
|
quantization |
Dictionary JSON. Saat ini hanya mendukung kunci weight_adjustment. Kunci ini menunjukkan apakah akan menyesuaikan parameter model untuk mengurangi kehilangan presisi akibat kuantisasi. Nilai yang didukung:
|
Data tambahan untuk optimasi
Pada tingkat optimasi O1, penyediaan test_data membuat optimasi lebih terarah. Pada tingkat optimasi O2, penyediaan calibration_dataset memandu Blade untuk melakukan optimasi INT8 offline. Kedua parameter tersebut harus sesuai dengan format data tambahan Blade. Format data tambahan untuk TensorFlow dan PyTorch:
-
Data tambahan TensorFlow berupa daftar dalam format feed dict. Kunci feed dict berupa string, dan nilainya berupa numpy ndarray. Simpan file data tambahan sebagai file .npy.
-
Data tambahan PyTorch berupa daftar dalam format tuple tensor. Simpan sebagai file .pth.
Kode contoh berikut menghasilkan file data tambahan untuk TensorFlow:
import numpy as np
calib_data = list()
for i in range(10):
feed_dict = {
'image_placeholder:0': np.ones((8, 3, 224, 224), dtype=np.float32),
'threshold_placeholder:0': np.float32(0.5),
}
calib_data.append(feed_dict)
np.save("calib_data.npy", calib_data)
Kode contoh berikut menghasilkan file data tambahan untuk PyTorch:
import numpy as np
import torch
calib_data = list()
for i in range(10):
image = torch.ones(8, 3, 224, 224)
threshold = torch.tensor(0.5)
feed_tuple = (image, threshold)
calib_data.append(feed_tuple)
torch.save(calib_data, 'calib_data.pth')
Tanpa Blade EAS Plugin
Berikut ini adalah contoh sederhana file konfigurasi layanan EAS tanpa Blade EAS Plugin:
{
"name": "blade_eas_plugin_test",
"model_path": "oss://<yourBucket>/<pathToYourModel>/",
"processor": "tensorflow_cpu_1.15",
"metadata": {
"instance": 1,
"memory": 4000
},
"resource": "<yourEASResource>"
}
Untuk detail bidang dalam file konfigurasi layanan EAS, lihat Buat layanan.
Simpan file konfigurasi layanan sebagai service.json. Jalankan perintah berikut untuk membuat layanan TensorFlow 1.15 yang diterapkan pada CPU:
eascmd create service.json
Contoh output:
+-------------------+-------------------------------------------------------------------------------------------------+
| Internet Endpoint | http://123456789012****.cn-shanghai.pai-eas.aliyuncs.com/api/predict/blade_eas_plugin_test |
| Intranet Endpoint | http://123456789012****.vpc.cn-shanghai.pai-eas.aliyuncs.com/api/predict/blade_eas_plugin_test |
| Token | owic823JI3kRmMDZlOTQzMTA3ODhmOWIzMmVkZmZmZGQyNmQ1N2M5**** |
+-------------------+-------------------------------------------------------------------------------------------------+
[OK] Service is now creating
[OK] Schedule process to node cn-shanghai.i-uf6hv6kfua25q1k8****
[OK] Fetching processor from [http://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/release/3.18.0/py3.6.8_cpu_tf1.15.0_torch1.6.0_abiprecxx11/TENSORFLOW_SDK_CPU.d12d3dc-91024d0-1.15.0-Linux.tar.gz]
[OK] Successfully downloaded all artifacts
[OK] Building image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117170541
[OK] Pushing image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117170541
[OK] Successfully pushed image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117170541
[OK] Successfully created ingress
[OK] Successfully synchronized resources
[OK] Waiting [Total: 1, Pending: 1, Running: 0]
[OK] Running [Total: 1, Pending: 0, Running: 1]
[OK] Service is running
Konfigurasi dasar
Untuk mengaktifkan Blade EAS Plugin, tambahkan bidang plugins ke file konfigurasi layanan EAS. Bidang ini berupa daftar. Pada contoh berikut, daftar berisi satu elemen dictionary untuk plugin optimasi Blade:
{
"name": "blade_eas_plugin_test",
"model_path": "oss://<yourBucket>/<pathToYourModel>/",
"processor": "tensorflow_cpu_1.15",
"metadata": {
"instance": 1,
"memory": 4000
},
"plugins": [
{
"command": "blade --mode eas_plugin --optimize_for cpu",
"image": "registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:cpu_latest"
}
],
"resource": "<yourEASResource>"
}
Pada contoh ini, bidang selain plugins mengikuti format file konfigurasi layanan PAI-EAS. Untuk detailnya, lihat Buat layanan. Elemen dictionary dalam daftar plugins berisi dua kunci:
-
command: Perintah optimasi yang akan dijalankan.
--mode eas_pluginmenunjukkan pola optimasi plugin EAS.--optimize_for cpumenunjukkan optimasi inferensi CPU. -
image: Alamat registri citra runtime Blade EAS Plugin. Semua optimasi CPU menggunakan citra runtime
registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:cpu_latest.
Contoh ini menyelesaikan konfigurasi optimasi pada perangkat CPU tanpa data uji. Simpan file konfigurasi layanan sebagai service1.json. Buat layanan menggunakan perintah create dalam alat klien eascmd:
eascmd create service1.json
Contoh output:
+-------------------+-------------------------------------------------------------------------------------------------+
| Internet Endpoint | http://123456789012****.cn-shanghai.pai-eas.aliyuncs.com/api/predict/blade_eas_plugin_test |
| Intranet Endpoint | http://123456789012****.vpc.cn-shanghai.pai-eas.aliyuncs.com/api/predict/blade_eas_plugin_test |
| Token | owic823JI3kRmMDZlOTQzMTA3ODhmOWIzMmVkZmZmZGQyNmQ1N2M5**** |
+-------------------+-------------------------------------------------------------------------------------------------+
[OK] Service is now creating
[OK] Fetching processor from [http://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/release/3.18.0/py3.6.8_cpu_tf1.15.0_torch1.6.0_abiprecxx11/TENSORFLOW_SDK_CPU.d12d3dc-91024d0-1.15.0-Linux.tar.gz]
[OK] Successfully downloaded all artifacts
[OK] Executing plugin eas-plugin-73d70d54: registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:cpu_latest
[OK] Building image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117172259
[OK] Pushing image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117172259
[OK] Successfully pushed image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117172259
[OK] Successfully created ingress
[OK] Successfully patch resources
[OK] Waiting [Total: 1, Pending: 1, Running: 0]
[OK] Running [Total: 1, Pending: 0, Running: 1]
[OK] Service is running
Dibandingkan dengan konfigurasi tanpa Blade EAS Plugin, log berisi baris tambahan yang menunjukkan eksekusi optimasi Blade berhasil:
[OK] Executing plugin eas-plugin-73d70d54: registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:cpu_latest
Konfigurasi lanjutan
Menyediakan informasi model yang lebih lengkap meningkatkan akurasi optimasi dan rasio akselerasi. Contoh berikut menunjukkan file deskripsi layanan GPU dengan parameter optimasi tambahan:
{
"name": "blade_eas_plugin_test",
"metadata": {
"cpu": 4,
"gpu": 1,
"instance": 1,
"memory": 4096,
"cuda": "10.0"
},
"model_path": "oss://<yourBucket>/<pathToYourModel>/",
"plugins": [
{
"command": "blade --mode eas_plugin --optimize_for gpu",
"image": "registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:gpu_latest",
"resource": "T4_8CORE",
"gpu": 1,
"config": {
"model_info": {
"frozen.pb": {
"optimization_level": "o1",
"inputs": [
"input_ids_a_1"
],
"outputs": [
"l2_normalize"
],
"test_data": "test_len9240_bc1.npy"
}
}
}
}
],
"processor": "tensorflow_gpu_1.15",
"resource": "<yourEASResource>"
}
Pada contoh ini, bidang selain plugins mengikuti format file konfigurasi layanan EAS. Untuk detailnya, lihat Buat layanan dan Bidang dalam plugins. frozen.pb adalah nama file model. Ini menunjukkan optimasi model TensorFlow dalam file frozen.pb.
Simpan file konfigurasi layanan sebagai service2.json. Buat layanan menggunakan perintah create dalam alat klien eascmd:
eascmd create service2.json
Contoh output:
+-------------------+-------------------------------------------------------------------------------------------------+
| Internet Endpoint | http://123456789012****cn-shanghai.pai-eas.aliyuncs.com/api/predict/blade_eas_plugin_test |
| Intranet Endpoint | http://123456789012****.vpc.cn-shanghai.pai-eas.aliyuncs.com/api/predict/blade_eas_plugin_test |
| Token | owic823JI3kRmMDZlOTQzMTA3ODhmOWIzMmVkZmZmZGQyNmQ1N2M5**** |
+-------------------+-------------------------------------------------------------------------------------------------+
[OK] Service is now creating
[OK] Schedule process to node cn-shanghai.i-uf642ocg20xinsme****
[OK] Downloading oss file: oss://blade-qa/test_assets/tf_security_textcnn/
[OK] Fetching processor from [http://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/release/3.18.0/py3.6.8_cu100_tf1.15.0_torch1.6.0_abiprecxx11/TENSORFLOW_SDK_GPU.d12d3dc-91024d0-1.15.0-Linux.tar.gz]
[OK] Successfully downloaded all artifacts
[OK] Executing plugin eas-plugin-7126ee68: registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:gpu_latest
[OK] Building image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117191732
[OK] Pushing image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117191732
[OK] Successfully pushed image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117191732
[OK] Successfully created ingress
[OK] Successfully synchronized resources
[OK] Waiting [Total: 1, Pending: 1, Running: 0]
[OK] Running [Total: 1, Pending: 0, Running: 1]
[OK] Service is running
Log berisi entri tambahan dibandingkan dengan konfigurasi tanpa Blade EAS Plugin. Entri ini menunjukkan eksekusi optimasi Blade berhasil:
[OK] Executing plugin eas-plugin-7126ee68: registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:gpu_latest