KServe (sebelumnya KFServing) adalah server model cloud-native dan mesin inferensi yang mendukung skalabilitas otomatis, scale-to-zero, serta penerapan canary. Topik ini menjelaskan cara men-deploy layanan inferensi model KServe dalam mode serverless menggunakan Alibaba Cloud Service Mesh (ASM) dan Arena.
Prasyarat
Sebelum memulai, pastikan Anda telah:
-
Memiliki kluster Container Service for Kubernetes (ACK) dengan node berakselerasi GPU
-
Instans ASM versi 1.17.2.7 atau lebih baru telah dibuat atau ditingkatkan.
-
KServe telah diintegrasikan dengan ASM.
-
Klien Arena versi 0.9.11 atau lebih baru telah diinstal.
Langkah 1: Siapkan data model
Simpan data model menggunakan NAS atau Object Storage Service (OSS). Lihat Memasang volume NAS yang disediakan secara statis dan Menggunakan volume yang disediakan secara statis dengan ossfs 1.0. Contoh ini menggunakan NAS.
1.1 Dapatkan titik pemasangan NAS
-
Masuk ke Konsol File Storage NAS. Di panel navigasi kiri, pilih File System > File System List. Pilih wilayah sistem file NAS tersebut.
-
Pada halaman File System List, klik ID sistem file target. Di halaman detail, klik Mount Targets. Arahkan kursor ke ikon
pada kolom Mount Target untuk melihat dan mencatat titik pemasangan beserta perintah mount-nya.
1.2 Konfigurasikan PV dan PVC
-
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Pada halaman Clusters, klik nama kluster target. Di panel navigasi kiri, pilih Volumes > Persistent Volumes.
-
Pada halaman Persistent Volumes, klik Create.
-
Pada dialog Create PV, atur parameter berikut lalu klik Create untuk membuat PV bernama training-data. Lihat Memasang volume NAS yang disediakan secara statis.
Parameter Nilai PV Type NAS Volume Name training-data Mount Target Domain Name Pilih titik pemasangan dari langkah 1.1 -
Di panel navigasi kiri, pilih Volumes > Persistent Volume Claims. Pada halaman Persistent Volume Claims, klik Create.
-
Pada dialog Create PVC, atur parameter berikut lalu klik Create untuk membuat PVC bernama training-data. Lihat Memasang volume NAS yang disediakan secara statis.
Parameter Nilai PVC Type NAS Name training-data Allocation Mode Existing Volumes Existing Volumes Klik Select PV untuk memilih PV yang telah Anda buat
1.3 Unduh data model ke sistem file NAS
-
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Pada halaman Clusters, klik nama kluster target. Di panel navigasi kiri, pilih Nodes > Nodes.
-
Pada halaman Nodes, klik ID instans node target. Di halaman Instance Details, klik More > Workbench Remote Access > Log in.
-
Jalankan perintah mount dari langkah 1.1 untuk memasang sistem file NAS.
-
Unduh model
bloom-560mdari Hugging Face dan simpan dipvc://training-data/bloom-560m.
Langkah 2: Deploy layanan inferensi
-
Periksa sumber daya GPU yang tersedia di kluster:
arena top nodeOutput yang diharapkan:
NAME IPADDRESS ROLE STATUS GPU(Total) GPU(Allocated) cn-beijing.192.1xx.x.xx 192.1xx.x.xx <none> Ready 0 0 cn-beijing.192.1xx.x.xx 192.1xx.x.xx <none> Ready 0 0 cn-beijing.192.1xx.x.xx 192.1xx.x.xx <none> Ready 0 0 cn-beijing.192.1xx.x.xx 192.1xx.x.xx <none> Ready 1 0 cn-beijing.192.1xx.x.xx 192.1xx.x.xx <none> Ready 1 0 --------------------------------------------------------------------------------------------------- Allocated/Total GPUs In Cluster: 0/2 (0.0%)Tersedia dua node berakselerasi GPU.
-
Jalankan layanan inferensi bernama bloom-560m. PVC
training-datadipasang ke/mnt/modelsdi dalam kontainer.arena serve kserve \ --name=bloom-560m \ --image=ghcr.io/huggingface/text-generation-inference:1.0.2 \ --gpus=1 \ --cpu=6 \ --memory=20Gi \ --port=8080 \ --env=STORAGE_URI=pvc://training-data \ "text-generation-launcher --disable-custom-kernels --model-id /mnt/models/bloom-560m --num-shard 1 -p 8080"Output yang diharapkan:
inferenceservice.serving.kserve.io/bloom-560m created INFO[0013] The Job bloom-560m has been submitted successfully INFO[0013] You can run `arena serve get bloom-560m --type kserve -n default` to check the job statusParameter:
Parameter Wajib Deskripsi --nameYa Nama pekerjaan. Harus unik secara global. --imageYa Gambar kontainer untuk layanan inferensi. --gpusTidak Jumlah GPU yang dibutuhkan. Nilai default: 0. --cpuTidak Jumlah CPU yang dibutuhkan. --memoryTidak Jumlah memori yang dibutuhkan. --portTidak Port yang diekspos untuk akses eksternal. --envTidak Variabel lingkungan dalam bentuk pasangan kunci-nilai. Di sini, STORAGE_URImengarah ke PVC model.
Langkah 3: Verifikasi layanan inferensi
-
Periksa status penerapan layanan inferensi KServe:
arena serve get bloom-560mOutput yang diharapkan:
Name: bloom-560m Namespace: default Type: KServe Version: 00001 Desired: 1 Available: 1 Age: 9m Address: http://bloom-560m.default.example.com Port: :80 GPU: 1 LatestRevision: bloom-560m-predictor-00001 LatestPrecent: 100 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- bloom-560m-predictor-00001-deployment-ff4c49bf6-twrlp Running 9m 2/2 0 1 cn-hongkong.192.1xx.x.xxxLayanan inferensi telah diterapkan. Alamat akses:
http://bloom-560m.default.example.com. -
Dapatkan alamat IP gerbang masuk ASM. Lihat Mendapatkan alamat IP gerbang masuk ASM.
-
Kirim permintaan uji ke layanan inferensi menggunakan alamat IP gerbang masuk ASM:
# Ganti ${ASM_GATEWAY} dengan alamat IP gerbang masuk ASM. curl -H "Host: bloom-560m.default.example.com" http://${ASM_GATEWAY}:80/generate \ -X POST \ -d '{"inputs":"What is Deep Learning?","parameters":{"max_new_tokens":17}}' \ -H 'Content-Type: application/json'Output yang diharapkan:
{"generated_text":" Deep Learning is a new type of machine learning that is used to solve complex problems."}
Langkah 4: Perbarui layanan inferensi
Gunakan penerapan canary untuk mengalihkan trafik secara bertahap ke versi model baru.
-
Buat versi baru model dan salin file model di PVC ke path baru
bloom-560m-v2. -
Deploy versi baru dengan 10% trafik dialihkan ke versi tersebut:
arena serve update kserve \ --name bloom-560m \ --canary-traffic-percent=10 \ "text-generation-launcher --disable-custom-kernels --model-id /mnt/models/bloom-560m-v2 --num-shard 1 -p 8080" -
Periksa status layanan inferensi:
arena serve get bloom-560mOutput yang diharapkan:
Name: bloom-560m Namespace: default Type: KServe Version: 00002 Desired: 2 Available: 2 Age: 36m Address: http://bloom-560m.default.example.com Port: :80 GPU: 2 LatestRevision: bloom-560m-predictor-00002 LatestPrecent: 10 PrevRevision: bloom-560m-predictor-00001 PrevPrecent: 90 Instances: NAME STATUS AGE READY RESTARTS GPU NODE ---- ------ --- ----- -------- --- ---- bloom-560m-predictor-00001-deployment-ff4c49bf6-twrlp Running 36m 2/2 0 1 cn-hongkong.192.1xx.x.xxx bloom-560m-predictor-00002-deployment-5b7bb66cfb-nqprp Running 6m 2/2 0 1 cn-hongkong.192.1xx.x.xxx10% trafik dialihkan ke
bloom-560m-predictor-00002(versi baru) dan 90% kebloom-560m-predictor-00001(versi sebelumnya). -
Setelah versi baru lolos pengujian, alihkan seluruh trafik ke versi tersebut:
arena serve update kserve \ --name bloom-560m \ --canary-traffic-percent=100
(Opsional) Langkah 5: Hapus layanan inferensi
Hapus layanan inferensi untuk melepaskan semua sumber daya GPU dan komputasi:
arena serve delete bloom-560m