Di Elastic Algorithm Service (EAS), Anda dapat mendefinisikan dan menerapkan layanan online menggunakan file konfigurasi JSON. Setelah menyiapkan file konfigurasi tersebut, Anda dapat menerapkan layanan melalui Konsol EAS, klien EASCMD, atau kit pengembangan perangkat lunak (SDK).
Persiapkan file konfigurasi JSON
Untuk menerapkan layanan, buat file JSON yang berisi seluruh konfigurasi yang diperlukan. Jika Anda pengguna baru, Anda dapat mengonfigurasi pengaturan dasar pada halaman penerapan layanan di Konsol. Sistem akan secara otomatis menghasilkan konten JSON yang sesuai, yang kemudian dapat Anda modifikasi dan perluas.
Berikut contoh file service.json. Untuk deskripsi semua parameter, lihat Lampiran: Deskripsi parameter JSON.
{
"metadata": {
"name": "demo",
"instance": 1,
"workspace_id": "****"
},
"cloud": {
"computing": {
"instances": [
{
"type": "ecs.c7a.large"
}
]
}
},
"containers": [
{
"image": "eas-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-eas/python-inference:py39-ubuntu2004",
"script": "python app.py",
"port": 8000
}
]
}Terapkan layanan menggunakan file JSON
Konsol
Masuk ke Konsol PAI. Pilih Wilayah di bagian atas halaman, lalu pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (EAS).
Pada tab Inference Service, klik Deploy Service. Di halaman Deploy Service, pilih .
Masukkan konten file JSON yang telah disiapkan, lalu klik Deploy. Tunggu hingga status layanan berubah menjadi Running, yang menunjukkan bahwa layanan telah berhasil diterapkan.
EASCMD
Anda dapat menggunakan klien EASCMD untuk mengelola layanan model, termasuk membuat, melihat, menghapus, dan memperbarui layanan. Prosedurnya sebagai berikut:
Unduh dan autentikasi klien
Jika Anda menggunakan lingkungan pengembangan Distribution Switch (DSW) dengan image resmi, klien EASCMD telah dipra-instal di
/etc/dsw/eascmd64. Jika tidak, unduh dan autentikasi klien.Jalankan perintah deployment
Di direktori tempat file JSON berada, jalankan perintah berikut untuk menerapkan layanan. Contoh berikut menggunakan versi Windows 64-bit. Untuk informasi lebih lanjut tentang operasi, lihat Referensi perintah.
eascmdwin64.exe create <service.json>Ganti <service.json> dengan nama file JSON Anda.
CatatanJika Anda menggunakan lingkungan pengembangan DSW dan perlu mengunggah file konfigurasi JSON, lihat Unggah dan unduh file.
Sistem mengembalikan hasil yang mirip dengan berikut ini.
[RequestId]: 1651567F-8F8D-4A2B-933D-F8D3E2DD**** +-------------------+----------------------------------------------------------------------------+ | Intranet Endpoint | http://166233998075****.cn-shanghai.pai-eas.aliyuncs.com/api/predict/test_eascmd | | Token | YjhjOWQ2ZjNkYzdiYjEzMDZjOGEyNGY5MDIxMzczZWUzNGEyMzhi**** | +-------------------+--------------------------------------------------------------------------+ [OK] Creating api gateway [OK] Building image [registry-vpc.cn-shanghai.aliyuncs.com/eas/test_eascmd_cn-shanghai:v0.0.1-20221122114614] [OK] Pushing image [registry-vpc.cn-shanghai.aliyuncs.com/eas/test_eascmd_cn-shanghai:v0.0.1-20221122114614] [OK] Waiting [Total: 1, Pending: 1, Running: 0] [OK] Waiting [Total: 1, Pending: 1, Running: 0] [OK] Service is running
Lampiran: Deskripsi parameter JSON
Parameter | Wajib | Deskripsi |
metadata | Ya | Metadata layanan. Untuk informasi lebih lanjut tentang pengaturan parameter, lihat deskripsi parameter metadata. |
cloud | Tidak | Konfigurasi sumber daya komputasi dan virtual private cloud (VPC). Untuk informasi selengkapnya, lihat deskripsi parameter cloud. |
containers | Tidak | Konfigurasi image. Untuk informasi selengkapnya, lihat deskripsi parameter containers. |
dockerAuth | Tidak | Jika image berasal dari repositori pribadi, Anda harus mengonfigurasi dockerAuth. Nilainya adalah string Base64 dari |
networking | Tidak | Konfigurasi pemanggilan layanan. Untuk informasi lebih lanjut tentang pengaturan parameter, lihat deskripsi parameter networking. |
storage | Tidak | Informasi mount penyimpanan untuk layanan. Untuk petunjuk konfigurasi terperinci, lihat Mount storage. |
token | Tidak | String token untuk autentikasi akses. Jika Anda tidak menentukan parameter ini, sistem akan secara otomatis menghasilkan token. |
aimaster | Tidak | Mengaktifkan deteksi daya komputasi dan toleransi kesalahan untuk layanan inferensi terdistribusi multi-mesin. |
model_path | Ya | Parameter ini wajib saat Anda menerapkan layanan menggunakan prosesor. model_path dan processor_path masing-masing menentukan alamat data sumber untuk model dan prosesor. Format alamat berikut didukung:
|
oss_endpoint | Tidak | Endpoint OSS, seperti oss-cn-beijing.aliyuncs.com. Untuk nilai lainnya, lihat Wilayah dan Endpoint. Catatan Secara default, Anda tidak perlu menentukan parameter ini. Sistem menggunakan alamat OSS jaringan internal di wilayah saat ini untuk mengunduh file model atau file prosesor. Anda harus menentukan parameter ini untuk akses lintas wilayah ke OSS. Misalnya, jika Anda menerapkan layanan di wilayah China (Hangzhou) dan model_path menentukan alamat OSS di wilayah China (Beijing), Anda harus menggunakan parameter ini untuk menentukan alamat akses jaringan publik untuk OSS di wilayah China (Beijing). |
model_entry | Tidak | File entri model. Dapat berisi file apa pun. Jika Anda tidak menentukan parameter ini, nama file dalam model_path akan digunakan. Path file utama diteruskan ke fungsi initialize() dalam prosesor. |
model_config | Tidak | Konfigurasi model. Mendukung teks apa pun. Nilai parameter ini diteruskan sebagai argumen kedua ke fungsi initialize() dalam prosesor. |
processor | Tidak |
|
processor_path | Tidak | Path paket file yang terkait dengan prosesor. Untuk informasi selengkapnya, lihat deskripsi parameter model_path. |
processor_entry | Tidak | File utama prosesor, seperti libprocessor.so atau app.py. Berisi implementasi fungsi Parameter ini wajib saat processor_type diatur ke cpp atau python. |
processor_mainclass | Tidak | File utama prosesor, yaitu kelas utama dalam paket JAR. Misalnya, com.aliyun.TestProcessor. Parameter ini wajib saat processor_type diatur ke java. |
processor_type | Tidak | Bahasa yang digunakan untuk mengimplementasikan processor. Nilai yang valid:
|
warm_up_data_path | Tidak | Path file permintaan yang digunakan untuk pra-ambil model. Untuk informasi lebih lanjut tentang fitur pra-ambil model, lihat Pra-ambil layanan model. |
runtime.enable_crash_block | Tidak | Menentukan apakah instans layanan secara otomatis restart setelah crash karena pengecualian dalam kode prosesor. Nilai yang valid:
|
autoscaler | Tidak | Informasi konfigurasi untuk skalabilitas horizontal otomatis layanan model. Untuk informasi lebih lanjut tentang pengaturan parameter, lihat Skalabilitas horizontal otomatis. |
labels | Tidak | Mengonfigurasi tag untuk layanan EAS. Formatnya adalah |
unit.size | Tidak | Jumlah mesin tempat satu instans diterapkan dalam konfigurasi inferensi terdistribusi. Nilai default adalah 2. |
sinker | Tidak | Menyimpan semua catatan permintaan dan tanggapan layanan ke MaxCompute atau Simple Log Service (SLS). Untuk informasi lebih lanjut tentang pengaturan parameter, lihat deskripsi parameter sinker. |
confidential | Tidak | Dengan mengonfigurasi layanan manajemen kepercayaan sistem, Anda dapat memastikan bahwa informasi seperti data, model, dan kode dienkripsi secara aman selama penerapan dan pemanggilan layanan. Hal ini mencapai layanan inferensi yang aman dan dapat diverifikasi. Formatnya sebagai berikut: Catatan Lingkungan enkripsi aman terutama ditujukan untuk file penyimpanan yang Anda mount. Mount file penyimpanan sebelum mengaktifkan fitur ini. Tabel berikut menjelaskan parameter.
|
Deskripsi parameter metadata
Parameter lanjutan
Deskripsi parameter cloud
Parameter | Wajib | Deskripsi | |
computing | instances | Tidak | Saat menerapkan layanan menggunakan kelompok sumber daya publik, Anda harus mengatur parameter ini. Parameter ini menentukan daftar spesifikasi sumber daya yang akan digunakan. Jika penawaran untuk tipe instans gagal atau inventaris tidak mencukupi, sistem akan mencoba menggunakan tipe instans berikutnya dalam urutan yang dikonfigurasi untuk membuat layanan.
|
disable_spot_protection_period | Tidak | Saat menggunakan instans spot, Anda harus mengatur parameter ini. Nilai yang valid:
| |
networking | vpc_id | Tidak | Virtual private cloud (VPC), vSwitch, dan grup keamanan yang akan di-bind ke layanan EAS. |
vswitch_id | Tidak | ||
security_group_id | Tidak | ||
Contoh:
{
"cloud": {
"computing": {
"instances": [
{
"type": "ecs.c8i.2xlarge",
"spot_price_limit": 1
},
{
"type": "ecs.c8i.xlarge",
"capacity": "20%"
}
],
"disable_spot_protection_period": false
},
"networking": {
"vpc_id": "vpc-bp1oll7xawovg9*****",
"vswitch_id": "vsw-bp1jjgkw51nsca1e****",
"security_group_id": "sg-bp1ej061cnyfn0b*****"
}
}
}Deskripsi parameter containers
Saat menerapkan layanan menggunakan custom image, lihat Custom images.
Parameter | Wajib | Deskripsi | |
image | Ya | Wajib saat menerapkan dengan image. Alamat image yang digunakan untuk menerapkan layanan model. | |
env | name | Tidak | Nama variabel lingkungan untuk eksekusi image. |
value | Tidak | Nilai variabel lingkungan untuk eksekusi image. | |
command | Salah satu dari dua wajib diisi | Perintah entri untuk image. Hanya mendukung satu perintah tunggal dan tidak mendukung skrip kompleks, seperti `cd xxx && python app.py`. Untuk skrip kompleks, gunakan parameter `script`. Bidang `command` cocok untuk skenario di mana image tidak berisi perintah `/bin/sh`. | |
script | Skrip entri yang akan dieksekusi untuk image. Anda dapat menentukan skrip kompleks. Gunakan `\n` atau titik koma untuk memisahkan beberapa baris. | ||
port | Tidak | Port kontainer. Penting
| |
prepare | pythonRequirements | Tidak | Daftar persyaratan Python yang akan diinstal sebelum instans dimulai. Image harus memiliki perintah `python` dan `pip` di path sistem. Formatnya adalah daftar. Contoh: |
pythonRequirementsPath | Tidak | Path ke file `requirements.txt` yang akan diinstal sebelum instans dimulai. Image harus memiliki perintah `python` dan `pip` di path sistem. File `requirements.txt` dapat disertakan langsung dalam image atau dimount ke instans layanan dari penyimpanan eksternal. Contoh: | |
Deskripsi parameter networking
Parameter | Wajib | Deskripsi |
gateway | Tidak | Gateway khusus yang dikonfigurasi untuk layanan EAS. |
gateway_policy | Tidak |
Contoh konfigurasi pembatasan laju: |
Deskripsi parameter sinker
Parameter | Wajib | Deskripsi | |
type | Tidak | Dua kelas penyimpanan berikut didukung:
| |
config | maxcompute.project | Tidak | Nama proyek MaxCompute. |
maxcompute.table | Tidak | Tabel data MaxCompute. | |
sls.project | Tidak | Nama proyek SLS. | |
sls.logstore | Tidak | Penyimpanan log SLS. | |
Contoh konfigurasi:
Simpan di MaxCompute
"sinker": {
"type": "maxcompute",
"config": {
"maxcompute": {
"project": "cl****",
"table": "te****"
}
}
}Simpan di Simple Log Service (SLS)
"sinker": {
"type": "sls",
"config": {
"sls": {
"project": "k8s-log-****",
"logstore": "d****"
}
}
}Lampiran: Contoh konfigurasi JSON
Contoh berikut menunjukkan cara mengonfigurasi parameter di atas dalam file JSON:
{
"token": "****M5Mjk0NDZhM2EwYzUzOGE0OGMx****",
"processor": "tensorflow_cpu_1.12",
"model_path": "oss://examplebucket/exampledir/",
"oss_endpoint": "oss-cn-beijing.aliyuncs.com",
"model_entry": "",
"model_config": "",
"processor_path": "",
"processor_entry": "",
"processor_mainclass": "",
"processor_type": "",
"warm_up_data_path": "",
"runtime": {
"enable_crash_block": false
},
"unit": {
"size": 2
},
"sinker": {
"type": "maxcompute",
"config": {
"maxcompute": {
"project": "cl****",
"table": "te****"
}
}
},
"cloud": {
"computing": {
"instances": [
{
"capacity": 800,
"type": "dedicated_resource"
},
{
"capacity": 200,
"type": "ecs.c7.4xlarge",
"spot_price_limit": 3.6
}
],
"disable_spot_protection_period": true
},
"networking": {
"vpc_id": "vpc-bp1oll7xawovg9t8****",
"vswitch_id": "vsw-bp1jjgkw51nsca1e****",
"security_group_id": "sg-bp1ej061cnyfn0b****"
}
},
"autoscaler": {
"min": 2,
"max": 5,
"strategies": {
"qps": 10
}
},
"storage": [
{
"mount_path": "/data_oss",
"oss": {
"endpoint": "oss-cn-shanghai-internal.aliyuncs.com",
"path": "oss://bucket/path/"
}
}
],
"confidential": {
"trustee_endpoint": "xx",
"decryption_key": "xx"
},
"metadata": {
"name": "test_eascmd",
"resource": "eas-r-9lkbl2jvdm0puv****",
"instance": 1,
"workspace_id": "1405**",
"gpu": 0,
"cpu": 1,
"memory": 2000,
"gpu_memory": 10,
"gpu_core_percentage": 10,
"qos": "",
"cuda": "11.2",
"enable_grpc": false,
"enable_webservice": false,
"rdma": 1,
"rpc": {
"batching": false,
"keepalive": 5000,
"io_threads": 4,
"max_batch_size": 16,
"max_batch_timeout": 50,
"max_queue_size": 64,
"worker_threads": 5,
"rate_limit": 0,
"enable_sigterm": false
},
"rolling_strategy": {
"max_surge": 1,
"max_unavailable": 1
},
"eas.termination_grace_period": 30,
"scheduling": {
"spread": {
"policy": "host"
}
},
"resource_rebalancing": false,
"workload_type": "elasticjob",
"shm_size": 100
},
"features": {
"eas.aliyun.com/extra-ephemeral-storage": "100Gi",
"eas.aliyun.com/gpu-driver-version": "tesla=550.127.08"
},
"networking": {
"gateway": "gw-m2vkzbpixm7mo****"
},
"containers": [
{
"image": "registry-vpc.cn-shanghai.aliyuncs.com/xxx/yyy:zzz",
"prepare": {
"pythonRequirements": [
"numpy==1.16.4",
"absl-py==0.11.0"
]
},
"command": "python app.py",
"port": 8000
}
],
"dockerAuth": "dGVzdGNhbzoxM*******"
}