Di EAS, Anda dapat mendefinisikan dan menerapkan layanan inferensi online melalui berkas konfigurasi JSON.
Lihat konfigurasi JSON layanan yang telah diterapkan
Jika Anda telah menerapkan layanan di Konsol—termasuk layanan yang diterapkan melalui penerapan satu klik di Model Gallery—Anda tidak perlu membuat berkas konfigurasi JSON dari awal. Layanan yang diterapkan dari Model Gallery merupakan layanan EAS dan menggunakan struktur konfigurasi JSON yang sama seperti penerapan JSON. Anda dapat melihat konfigurasi JSON lengkap dari layanan yang telah diterapkan, menyalinnya, lalu menggunakannya sebagai titik awal untuk penerapan kustom.
Untuk melihat konfigurasi JSON layanan yang telah diterapkan, ikuti langkah-langkah berikut:
Buka tab Inference Service di Konsol EAS.
Klik nama layanan target untuk membuka halaman detail layanan.
Klik tab Service Configuration. Konfigurasi JSON lengkap layanan akan ditampilkan. Anda dapat melihat dan menyalin konfigurasinya.
Anda dapat menyesuaikan konfigurasi JSON yang disalin sebagaimana dijelaskan dalam Apendiks: Parameter JSON, lalu menggunakannya dalam prosedur penerapan JSON pada bagian Quick start.
Citra runtime, perintah titik masuk (command atau script), serta tipe instans layanan yang sedang berjalan semuanya termasuk dalam konfigurasi JSON ini dan dapat dilihat pada tab Service Configuration. Tab tersebut menampilkan konfigurasi lengkap tanpa bidang tersembunyi tambahan, sehingga Anda tidak perlu memperoleh parameter-parameter ini secara terpisah. Anda dapat menggunakan konfigurasi JSON yang diekspor untuk beralih ke penerapan kustom dan mengelola layanan secara detail halus.
Quick start
1. Siapkan berkas konfigurasi JSON
Untuk menerapkan layanan, Anda memerlukan berkas JSON yang mendefinisikan konfigurasi yang diperlukan. Untuk pengguna pertama kali, kami sarankan membuka Custom Model Deployment > Custom Deployment untuk mengonfigurasi parameter. Sistem akan secara otomatis menghasilkan konfigurasi JSON yang dapat Anda gunakan sebagai templat.
Kode berikut adalah contoh berkas service.json. Untuk daftar lengkap parameter, lihat Apendiks: 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 menandakan penerapan berhasil.
Apendiks: Parameter JSON
Parameter | Wajib | Deskripsi |
metadata | Ya | Metadata layanan. Untuk informasi lebih lanjut, lihat parameter metadata. |
cloud | Tidak | Konfigurasi sumber daya komputasi dan VPC. Untuk informasi lebih lanjut, lihat parameter cloud. |
containers | Tidak | Konfigurasi citra. Untuk informasi lebih lanjut, 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 lebih lanjut, 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 menghasilkannya 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 masing-masing menentukan lokasi sumber data input untuk model dan prosesor. 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 | File 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 file 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 | File entri prosesor, seperti libprocessor.so atau app.py. File 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 file permintaan yang digunakan untuk pemanasan model. Untuk informasi lebih lanjut tentang fitur ini, lihat pemanasan model. |
runtime.enable_crash_block | Tidak | Menentukan apakah instans yang crash karena pengecualian kode prosesor secara otomatis restart. Nilai yang valid:
|
autoscaler | Tidak | Konfigurasi untuk auto scaling horizontal. Untuk deskripsi parameter detail, 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 | Mempertahankan semua permintaan dan respons layanan ke MaxCompute atau Log Service (SLS). Untuk deskripsi parameter detail, lihat parameter sinker. |
confidential | Tidak | Mengonfigurasi Trustee untuk memastikan bahwa informasi seperti data, model, dan kode tetap terenkripsi selama penerapan dan pemanggilan layanan. Ini memungkinkan layanan inferensi yang aman dan terenkripsi. Formatnya sebagai berikut: Catatan Lingkungan enkripsi aman terutama melindungi file penyimpanan yang dimasang. Pastikan Anda telah memasang file-file ini 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 citra kustom, lihat Citra Kustom.
Parameter | Wajib | Deskripsi | |
image | Ya | Alamat citra untuk layanan model. Wajib saat menerapkan menggunakan citra. | |
env | name | Tidak | Nama variabel lingkungan. |
value | Tidak | Nilai variabel lingkungan. | |
command | Anda harus menentukan salah satu dari command atau script. | Perintah titik masuk untuk citra. Parameter ini hanya mendukung satu perintah tunggal. Untuk skrip kompleks, seperti | |
script | Skrip titik masuk untuk citra. Anda dapat menentukan skrip kompleks dengan beberapa baris. Pisahkan perintah dengan | ||
port | Tidak | Port kontainer. Penting
| |
prepare | pythonRequirements | Tidak | Daftar kebutuhan Python yang akan diinstal sebelum instans dimulai. Citra harus memiliki perintah python dan pip tersedia di PATH sistem. Contoh: |
pythonRequirementsPath | Tidak | Jalur ke file requirements.txt untuk menginstal paket Python sebelum instans dimulai. Citra harus memiliki perintah python dan pip tersedia di PATH sistem. File ini dapat disertakan dalam citra atau dimasang 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 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*******"
}