EAS Plugin adalah mekanisme pra-pemrosesan yang disediakan oleh Elastic Algorithm Service (EAS) dari Machine Learning Platform for AI (PAI). Anda dapat menggunakan EAS Plugin untuk memproses model secara seragam sebelum menerapkannya. Berdasarkan EAS Plugin, PAI meluncurkan Plugin EAS Blade untuk mengoptimalkan model sebelum penerapan. Secara tradisional, Anda dapat menggunakan paket wheel Python PAI-Blade untuk mengoptimalkan model. Jika Anda mengaktifkan Plugin EAS Blade, plugin ini akan otomatis berjalan untuk mengoptimalkan model sebelum diterapkan, mengurangi overhead integrasi PAI-Blade. Topik ini menjelaskan cara mengaktifkan Plugin EAS Blade dengan mengonfigurasi file konfigurasi layanan di EAS sehingga Anda dapat menggunakannya untuk mengoptimalkan dan menerapkan model.
Informasi latar belakang
SDK PAI-Blade terintegrasi ke dalam prosesor TensorFlow dan PyTorch dari EAS. Jika Anda menggunakan prosesor TensorFlow atau PyTorch untuk menerapkan model, Anda dapat mengonfigurasi file konfigurasi layanan untuk mengaktifkan Plugin EAS Blade. Dengan cara ini, Anda dapat menggunakan Plugin EAS Blade untuk mengoptimalkan model.
Jika Anda mengaktifkan Plugin EAS Blade, plugin ini akan mengoptimalkan model sebelum diterapkan di EAS. Proses optimasi membutuhkan waktu 3 hingga 10 menit, tergantung pada kompleksitas model. Plugin EAS Blade hanya dijalankan sekali saat Anda menerapkan model di EAS. Operasi penskalaan sumber daya di masa mendatang dilakukan berdasarkan model yang telah dioptimalkan.
Anda hanya dapat mengaktifkan Plugin EAS Blade jika menggunakan klien EASCMD untuk membuat layanan. Untuk informasi lebih lanjut tentang cara mengonfigurasi dan menggunakan klien EASCMD, lihat Unduh Klien EASCMD dan Lengkapi Autentikasi Pengguna dan Jalankan Perintah untuk Menggunakan Klien EASCMD.
Untuk mengaktifkan Plugin EAS Blade, tambahkan parameter plugins ke file konfigurasi layanan. Untuk informasi lebih lanjut tentang parameter plugins, lihat bagian Parameter Plugins dalam topik ini. Topik ini juga menyediakan contoh pengaturan file konfigurasi layanan baik dengan atau tanpa aktivasi Plugin EAS Blade. Untuk detail lebih lanjut, lihat bagian-bagian berikut:
Parameter plugins
Untuk mengaktifkan Plugin EAS Blade, tambahkan parameter plugins ke file konfigurasi layanan. Nilai parameter plugins adalah daftar yang terdiri dari satu atau lebih kamus. Untuk informasi lebih lanjut tentang parameter dalam file konfigurasi layanan, lihat Buat Layanan.
Tabel berikut menjelaskan kunci dari kamus-kamus tersebut.
Kunci | Diperlukan | Deskripsi |
command | Ya | Perintah yang Anda jalankan untuk mengoptimalkan model. Untuk informasi tentang nilai-nilai yang valid, lihat bagian Pemetaan antara nama-nama prosesor dan URL gambar Plugin EAS Blade dalam topik ini. |
image | Ya | URL gambar Plugin EAS Blade. Plugin EAS Blade mendukung prosesor TensorFlow dan PyTorch. Plugin ini juga mendukung CPU dan GPU dengan CUDA 10.0. Untuk informasi tentang pemetaan antara nama-nama prosesor dan URL gambar Plugin EAS Blade, lihat bagian Pemetaan antara nama-nama prosesor dan URL gambar Plugin EAS Blade dalam topik ini. |
resource | Tidak | Grup sumber daya yang digunakan untuk mengoptimalkan model. Anda harus membedakan parameter ini dari parameter resource di lapisan paling luar file konfigurasi layanan. Parameter resource di lapisan paling luar file konfigurasi layanan menentukan grup sumber daya yang digunakan untuk menjalankan model di EAS. Parameter ini diperlukan jika Anda ingin mengoptimalkan model pada GPU. Anda dapat menggunakan grup sumber daya T4_8CORE untuk menjalankan Plugin EAS Blade di wilayah China (Hangzhou) dan China (Shanghai). Anda juga dapat menggunakan grup sumber daya V100_8CORE atau P4_8CORE di wilayah China (Shanghai). Catatan Jenis GPU dalam grup sumber daya yang digunakan untuk menjalankan Plugin EAS Blade harus sama dengan yang ada di grup sumber daya yang digunakan untuk membuat layanan di EAS. |
gpu | Tidak | Jumlah GPU yang digunakan untuk mengoptimalkan model. Dalam banyak kasus, atur parameter ini menjadi 1. |
config | Tidak | Item konfigurasi tingkat lanjut untuk optimasi model. Dalam versi ini, hanya parameter model_info yang bersarang di dalam parameter config. Anda dapat mengatur parameter model_info untuk mengonfigurasi item optimasi untuk satu atau beberapa model. Dalam versi ini, Anda dapat mengonfigurasi item optimasi hanya untuk satu model. Kunci model adalah nama file model, dan nilainya bisa berupa item optimasi yang berbeda. Item optimasi harus sesuai dengan parameter metode |
Jenis perangkat | Kunci | Nilai |
CPU | image |
|
command |
| |
processor |
| |
GPU | image |
|
command |
| |
processor |
|
Item optimasi | Deskripsi |
optimization_level | Tingkat optimasi. Nilai valid:
|
test_data | Opsional. File data uji. File tersebut harus berada di direktori atau paket kompresi yang ditentukan oleh parameter model_path. Kami sarankan Anda menggunakan set data uji yang dapat digunakan untuk inferensi model, terutama ketika Anda mengoptimalkan model PyTorch. Untuk informasi lebih lanjut tentang cara menghasilkan file data uji, lihat bagian Data tambahan untuk optimasi model dalam topik ini. |
calibration_dataset | Opsional. File data kalibrasi yang digunakan untuk mengkuantisasi model. File tersebut harus berada di direktori atau paket kompresi yang ditentukan oleh parameter model_path. Jika Anda tidak menentukan parameter ini, model dikuantisasi ke INT8 secara online. Jika Anda menentukan parameter ini, model dikuantisasi ke INT8 secara offline. Kami sarankan Anda menggunakan lebih dari 100 potongan data kalibrasi. Untuk informasi lebih lanjut tentang cara menghasilkan file data kalibrasi yang digunakan untuk mengkuantisasi model, lihat Data tambahan untuk optimasi model. |
inputs | Opsional. Nama node input untuk model. Nilainya adalah daftar string. Jika Anda tidak menentukan parameter ini, PAI-Blade menggunakan node yang tidak memiliki node upstream sebagai node input. Parameter ini tidak diperlukan untuk model PyTorch. |
outputs | Opsional. Nama node output untuk model. Nilainya adalah daftar string. Jika Anda tidak menentukan parameter ini, PAI-Blade menggunakan node yang tidak memiliki node downstream sebagai node output. Parameter ini tidak diperlukan untuk model PyTorch. |
input_shapes | Bentuk tensor input yang mungkin. Anda dapat menentukan parameter ini untuk meningkatkan efek optimasi dalam skenario tertentu. Jumlah elemen dalam daftar dalam harus sama dengan jumlah tensor input dalam model. Setiap elemen adalah string yang menentukan bentuk input. Contoh: Jika Anda ingin menentukan beberapa kelompok bentuk yang mungkin, Anda dapat menambahkan elemen ke daftar luar. Misalnya, Anda perlu menentukan satu kelompok bentuk yang mungkin untuk satu model dan beberapa kelompok bentuk yang mungkin untuk model lain. Kode sampel berikut memberikan contoh:
|
input_ranges | Rentang nilai tensor input. Jumlah elemen dalam daftar dalam harus sama dengan jumlah tensor input dalam model. Setiap elemen adalah string yang menentukan rentang nilai. Rentang nilai dapat ditentukan menggunakan tanda kurung ([]), bilangan real, dan karakter. Contoh: '[1,2]', '[0.3,0.9]', dan '[a,f]'. Jika Anda ingin menentukan beberapa kelompok rentang nilai, Anda dapat menambahkan elemen ke daftar luar. Misalnya, Anda perlu menentukan satu kelompok rentang nilai untuk satu model dan beberapa kelompok rentang nilai untuk model lain. Kode sampel berikut memberikan contoh:
|
quantization | Nilai parameter ini adalah kamus JSON. Hanya kunci weight_adjustment yang didukung. Kunci ini menentukan apakah akan mengurangi kehilangan presisi dengan menyesuaikan parameter model. Nilai valid untuk kunci weight_adjustment:
|
Data tambahan untuk optimasi model
Jika Anda mengatur tingkat optimasi ke o1, Anda dapat mengatur parameter test_data untuk meningkatkan kinerja optimasi. Jika Anda mengatur tingkat optimasi ke o2, Anda dapat mengatur parameter calibration_dataset untuk mengkuantisasi model ke INT8 secara offline. Nilai yang ditentukan untuk parameter test_data dan calibration_dataset harus mematuhi format data tambahan berikut yang diperlukan oleh PAI-Blade:
Data tambahan model TensorFlow harus berupa feed dicts. Kunci setiap feed dict harus berupa string, dan nilainya bertipe numpy.ndarray. Data tambahan model TensorFlow harus disimpan dalam file .npy.
Data tambahan model PyTorch harus berupa tupel tensor dan disimpan dalam file .pth.
Kode sampel berikut memberikan contoh cara menghasilkan file data tambahan untuk model 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 sampel berikut memberikan contoh cara menghasilkan file data tambahan untuk model 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')Contoh 1: Jangan aktifkan Plugin EAS Blade
Kode sampel berikut memberikan contoh cara mengonfigurasi file konfigurasi layanan tanpa mengaktifkan Plugin EAS Blade:
{
"name": "blade_eas_plugin_test",
"model_path": "oss://<yourBucket>/<pathToYourModel>/",
"processor": "tensorflow_cpu_1.15",
"metadata": {
"instance": 1,
"memory": 4000
},
"resource": "<yourEASResource>"
}Untuk informasi lebih lanjut tentang parameter dalam file konfigurasi layanan, lihat Buat Layanan.
Simpan file konfigurasi layanan sebagai service.json. Kemudian, jalankan perintah berikut untuk membuat layanan TensorFlow 1.15 yang diterapkan pada CPU:
eascmd create service.jsonOutput Sampel:
+-------------------+-------------------------------------------------------------------------------------------------+
| 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] Layanan sedang dibuat
[OK] Mengambil prosesor dari [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] Berhasil mengunduh semua artefak
[OK] Membangun image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117170541
[OK] Mendorong image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117170541
[OK] Berhasil mendorong image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117170541
[OK] Berhasil membuat ingress
[OK] Berhasil menyinkronkan sumber daya
[OK] Menunggu [Total: 1, Pending: 1, Running: 0]
[OK] Berjalan [Total: 1, Pending: 0, Running: 1]
[OK] Layanan sedang berjalanContoh 2: Aktifkan Plugin EAS Blade untuk melakukan optimasi sederhana
Untuk mengaktifkan Plugin EAS Blade, tambahkan parameter plugins ke file konfigurasi layanan. Nilai parameter plugins adalah daftar yang terdiri dari satu atau lebih kamus. Dalam kode sampel berikut, hanya satu plugin optimasi PAI-Blade yang digunakan, sehingga daftar dalam kode sampel hanya berisi satu kamus.
{
"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>"
}Dalam kode sampel, nilai parameter selain plugins harus mematuhi format data yang diperlukan dalam file konfigurasi layanan. Untuk informasi lebih lanjut, lihat Buat Layanan. Kamus yang ditentukan dalam parameter plugins berisi dua kunci berikut:
command: Perintah yang dijalankan untuk mengoptimalkan model. Dalam perintah tersebut,
--mode eas_pluginmenunjukkan mode optimasi, dan--optimize_for cpumenunjukkan optimasi untuk inferensi model pada CPU.image: URL gambar Plugin EAS Blade. Untuk optimasi model pada CPU, URL gambar adalah
registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:cpu_latest.
Contoh ini cocok untuk skenario di mana Anda mengoptimalkan model pada CPU tanpa menyediakan data uji. Simpan file konfigurasi layanan sebagai service1.json. Kemudian, jalankan perintah berikut di klien EASCMD untuk membuat layanan TensorFlow 1.15 yang diterapkan pada CPU:
eascmd create service1.jsonOutput Sampel:
+-------------------+-------------------------------------------------------------------------------------------------+
| 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] Layanan sedang dibuat
[OK] Mengambil prosesor dari [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] Berhasil mengunduh semua artefak
[OK] Menjalankan plugin eas-plugin-73d70d54: registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:cpu_latest
[OK] Membangun image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117172259
[OK] Mendorong image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117172259
[OK] Berhasil mendorong image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117172259
[OK] Berhasil membuat ingress
[OK] Berhasil memperbaiki sumber daya
[OK] Menunggu [Total: 1, Pending: 1, Running: 0]
[OK] Berjalan [Total: 1, Pending: 0, Running: 1]
[OK] Layanan sedang berjalanDibandingkan dengan output sampel dalam Contoh 1, output sampel dalam contoh ini berisi baris log tambahan berikut, yang menunjukkan bahwa model dioptimalkan menggunakan Plugin EAS Blade.
[OK] Menjalankan plugin eas-plugin-73d70d54: registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:cpu_latestContoh 3: Aktifkan Plugin EAS Blade untuk melakukan optimasi rumit
Saat menggunakan Plugin EAS Blade untuk mengoptimalkan model, memberikan lebih banyak informasi tentang model dapat meningkatkan akurasi dan efisiensi optimasi. Kode sampel berikut memberikan contoh file konfigurasi layanan untuk optimasi model pada GPU. Dibandingkan dengan kode sampel dalam contoh sebelumnya, kode sampel ini berisi lebih banyak parameter tentang optimasi model.
{
"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>"
}Dalam kode sampel, nilai parameter selain plugins harus mematuhi format data yang diperlukan dalam file konfigurasi layanan. Untuk informasi lebih lanjut, lihat Buat Layanan. Untuk informasi lebih lanjut tentang kunci parameter plugins, lihat bagian Kunci Plugins dalam topik ini. Dalam kode sampel, frozen.pb adalah nama file model TensorFlow yang akan dioptimalkan.
Simpan file konfigurasi layanan sebagai service2.json. Kemudian, jalankan perintah berikut di klien EASCMD untuk membuat layanan TensorFlow 1.15 yang diterapkan pada GPU:
eascmd create service2.jsonOutput Sampel:
+-------------------+-------------------------------------------------------------------------------------------------+
| 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] Layanan sedang dibuat
[OK] Menjadwalkan proses ke node cn-shanghai.i-uf642ocg20xinsme****
[OK] Mengunduh file oss: oss://blade-qa/test_assets/tf_security_textcnn/
[OK] Mengambil prosesor dari [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] Berhasil mengunduh semua artefak
[OK] Menjalankan plugin eas-plugin-7126ee68: registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:gpu_latest
[OK] Membangun image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117191732
[OK] Mendorong image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117191732
[OK] Berhasil mendorong image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117191732
[OK] Berhasil membuat ingress
[OK] Berhasil menyinkronkan sumber daya
[OK] Menunggu [Total: 1, Pending: 1, Running: 0]
[OK] Berjalan [Total: 1, Pending: 0, Running: 1]
[OK] Layanan sedang berjalanDibandingkan dengan output sampel dalam Contoh 1, output sampel dalam contoh ini berisi baris log tambahan berikut, yang menunjukkan bahwa model dioptimalkan menggunakan Plugin EAS Blade.
[OK] Menjalankan plugin eas-plugin-7126ee68: registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:gpu_latest