Di EAS, Anda dapat mendefinisikan dan menerapkan layanan inferensi online menggunakan berkas konfigurasi JSON.
Mulai cepat
1. Siapkan berkas konfigurasi JSON
Untuk menerapkan layanan, Anda memerlukan berkas JSON yang mendefinisikan konfigurasi yang diperlukan. Untuk pengguna baru, kami menyarankan membuka Custom Model Deployment > Custom Deployment untuk mengonfigurasi parameter. Sistem akan secara otomatis menghasilkan konfigurasi JSON yang dapat Anda gunakan sebagai templat.
Kode berikut merupakan contoh berkas service.json. Untuk daftar lengkap parameter, lihat Lampiran: Referensi Parameter JSON.
{
"metadata": {
"name": "demo",
"instance": 1,
"workspace_id": "your-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
}
]
}2. Terapkan layanan dengan JSON
-
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. Kemudian, pada bagian Custom Model Deployment, pilih JSON Deployment.
Tempel konfigurasi JSON Anda dan klik Deploy. Status layanan Berjalan menunjukkan bahwa penerapan berhasil.
Lampiran: Parameter JSON
Parameter | Wajib | Deskripsi |
metadata | Ya | Metadata layanan. Untuk informasi selengkapnya, lihat parameter metadata. |
cloud | Tidak | Konfigurasi sumber daya komputasi dan VPC. Untuk informasi selengkapnya, lihat parameter cloud. |
containers | Tidak | Konfigurasi image. Untuk informasi selengkapnya, lihat parameter containers. |
dockerAuth | Tidak | Parameter ini diperlukan untuk mengakses repositori pribadi yang memerlukan otentikasi. Nilainya adalah string Base64 dari |
networking | Tidak | Konfigurasi pemanggilan layanan. Untuk informasi selengkapnya, lihat parameter networking. |
storage | Tidak | Memasang data dari layanan penyimpanan seperti OSS atau NAS ke dalam kontainer. Untuk detail konfigurasi, lihat pemasangan storage. |
token | Tidak | Token akses untuk otentikasi layanan. Jika tidak ditentukan, sistem akan menghasilkan token tersebut secara otomatis. |
aimaster | Tidak | Mengaktifkan pemeriksaan daya komputasi dan toleransi kesalahan untuk layanan inferensi terdistribusi multi-node. |
model_path | Ya | Diperlukan saat menerapkan layanan dengan prosesor. Parameter model_path dan processor_path menentukan lokasi sumber data input untuk model dan prosesor, masing-masing. Format berikut didukung:
|
oss_endpoint | Tidak | Titik akhir OSS, misalnya, oss-cn-beijing.aliyuncs.com. Untuk nilai valid lainnya, lihat Wilayah dan titik akhir. Catatan Secara default, Anda tidak perlu menentukan parameter ini. Layanan menggunakan titik akhir OSS internal wilayah saat ini untuk mengunduh file model atau file Processor. Anda harus menentukan parameter ini saat mengakses OSS lintas wilayah. Misalnya, jika Anda menerapkan layanan di wilayah Hangzhou dan menentukan alamat OSS di wilayah Beijing untuk model_path, Anda harus menggunakan parameter ini untuk menentukan titik akhir OSS publik wilayah Beijing. |
model_entry | Tidak | Berkas entri model, yang dapat berupa file apa pun dalam paket model. Jika tidak ditentukan, nilai default-nya adalah nama file dari model_path. Jalur ke berkas entri ini diteruskan ke fungsi initialize() prosesor. |
model_config | Tidak | Konfigurasi untuk model, yang dapat berupa teks apa pun. Nilai ini diteruskan sebagai argumen kedua ke fungsi initialize() prosesor. |
processor | Tidak |
|
processor_path | Tidak | Jalur ke paket prosesor. Untuk format jalur yang didukung, lihat deskripsi parameter model_path. |
processor_entry | Tidak | Berkas entri prosesor, seperti libprocessor.so atau app.py. Berkas ini harus mengimplementasikan fungsi Parameter ini wajib jika processor_type diatur ke cpp atau python. |
processor_mainclass | Tidak | Kelas utama prosesor dalam paket JAR. Misalnya, com.aliyun.TestProcessor. Parameter ini wajib jika processor_type diatur ke java. |
processor_type | Tidak | Bahasa implementasi processor. Nilai yang valid adalah sebagai berikut:
|
warm_up_data_path | Tidak | Jalur ke berkas permintaan yang digunakan untuk pemanasan model. Untuk informasi selengkapnya tentang fitur ini, lihat pemanasan model. |
runtime.enable_crash_block | Tidak | Menentukan apakah instans yang crash karena pengecualian kode prosesor secara otomatis dimulai ulang. Nilai yang valid:
|
autoscaler | Tidak | Konfigurasi untuk auto scaling horizontal. Untuk deskripsi parameter terperinci, lihat auto scaling horizontal. |
labels | Tidak | Label yang diterapkan pada layanan. Gunakan format |
unit.size | Tidak | Jumlah mesin per instans dalam konfigurasi inferensi terdistribusi. Nilai default adalah 2. |
sinker | Tidak | Menyimpan semua permintaan dan respons layanan ke MaxCompute atau Log Service (SLS). Untuk deskripsi parameter terperinci, lihat parameter sinker. |
confidential | Tidak | Mengonfigurasi Trustee untuk memastikan bahwa informasi seperti data, model, dan kode tetap terenkripsi selama penerapan dan pemanggilan layanan. Ini mengaktifkan layanan inferensi yang aman dan terenkripsi. Formatnya sebagai berikut: Catatan Lingkungan enkripsi aman terutama melindungi file yang dipasang. Pastikan Anda telah memasang file-file tersebut sebelum mengaktifkan fitur ini. .
|
Parameter metadata
Parameter lanjutan
Parameter cloud
Parameter | Wajib | Deskripsi | |
computing | instances | Tidak | Menentukan daftar tipe instans yang digunakan saat menerapkan layanan di kelompok sumber daya publik. Jika penawaran untuk instans spot gagal atau tipe instans kehabisan stok, sistem membuat layanan menggunakan tipe instans berikutnya dalam daftar.
|
disable_spot_protection_period | Tidak | Menentukan apakah akan menonaktifkan periode perlindungan untuk instans spot. Parameter ini hanya berlaku untuk instans spot. Nilai yang valid:
| |
networking | vpc_id | Tidak | ID VPC. |
vswitch_id | Tidak | ID VSwitch. | |
security_group_id | Tidak | ID grup keamanan. | |
destination_cidrs | Tidak | Jika Blok CIDR dari VSwitch yang dikonfigurasi bertentangan dengan Blok CIDR manajemen EAS (10.224.0.0/16 atau 10.240.0.0/12), Anda harus secara eksplisit mengatur parameter ini ke Blok CIDR VSwitch Anda. Ganti | |
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*****"
}
}
}Parameter container
Untuk menerapkan layanan menggunakan custom image, lihat Custom Images.
Parameter | Wajib | Deskripsi | |
image | Ya | Alamat image untuk layanan model. Wajib saat menerapkan menggunakan image. | |
env | name | Tidak | Nama variabel lingkungan. |
value | Tidak | Nilai variabel lingkungan. | |
command | Anda harus menentukan salah satu dari command atau script. | Perintah entry point untuk image. Parameter ini hanya mendukung satu perintah tunggal. Untuk skrip kompleks, seperti | |
script | Skrip entry point untuk image. Anda dapat menentukan skrip kompleks dengan beberapa baris. Pisahkan perintah dengan | ||
port | Tidak | Port kontainer. Penting
| |
prepare | pythonRequirements | Tidak | Daftar dependensi Python yang akan diinstal sebelum instans dimulai. Image harus memiliki perintah python dan pip yang tersedia di PATH sistem. Contoh: |
pythonRequirementsPath | Tidak | Jalur ke berkas requirements.txt untuk menginstal paket Python sebelum instans dimulai. Image harus memiliki perintah python dan pip yang tersedia di PATH sistem. Berkas ini dapat disertakan dalam image atau dipasang dari penyimpanan eksternal. Contoh: | |
Parameter networking
Parameter | Wajib | Deskripsi |
gateway | Tidak | Menentukan gateway khusus untuk layanan EAS. |
gateway_policy | Tidak |
Contoh konfigurasi: |
Parameter sinker
Parameter | Wajib | Deskripsi | |
type | Tidak | Menentukan layanan penyimpanan tujuan. Nilai yang didukung:
| |
config | maxcompute.project | Tidak | Nama proyek MaxCompute. |
maxcompute.table | Tidak | Nama tabel MaxCompute. | |
sls.project | Tidak | Nama proyek Log Service (SLS). | |
sls.logstore | Tidak | Nama penyimpanan log. | |
Contoh konfigurasi:
Sink ke MaxCompute
"sinker": {
"type": "maxcompute",
"config": {
"maxcompute": {
"project": "cl****",
"table": "te****"
}
}
}Sink ke SLS
"sinker": {
"type": "sls",
"config": {
"sls": {
"project": "k8s-log-****",
"logstore": "d****"
}
}
}Contoh konfigurasi JSON
Berikut ini adalah contoh konfigurasi 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,
"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*******"
}