Gunakan KServe pada ACK Knative untuk menerapkan model AI sebagai layanan inferensi tanpa server. Pendekatan ini menyediakan fitur utama seperti auto-scaling, manajemen versi, dan rilis canary.
Langkah 1: Instal dan konfigurasikan komponen KServe
Untuk memastikan integrasi tanpa hambatan dengan
ALB Ingress
atau
Kourier gateway, instal komponen KServe dan ubah pengaturannya untuk menonaktifkan pembuatan sumber daya Istio VirtualService bawaan.
-
Instal komponen KServe.
-
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
Pada tab Add-ons, temukan dan terapkan komponen KServe di bagian Add-on Komponen.
-
-
Nonaktifkan pembuatan Istio VirtualHost.
Edit ConfigMap
inferenceservice-configuntuk mengaturdisableIstioVirtualHostmenjaditrue.kubectl get configmap inferenceservice-config -n kserve -o yaml \ | sed 's/"disableIstioVirtualHost": false/"disableIstioVirtualHost": true/g' \ | kubectl apply -f -Output yang diharapkan:
configmap/inferenceservice-config configured -
Verifikasi konfigurasi.
kubectl get configmap inferenceservice-config -n kserve -o yaml \ | grep '"disableIstioVirtualHost":' \ | tail -n1 \ | awk -F':' '{gsub(/[ ,]/,"",$2); print $2}'Output berupa
truemenunjukkan bahwa konfigurasi telah diperbarui. -
Lakukan restart controller KServe agar perubahan konfigurasi diterapkan.
kubectl rollout restart deployment kserve-controller-manager -n kserve
Langkah 2: Terapkan InferenceService
Contoh ini menerapkan model klasifikasi scikit-learn yang dilatih menggunakan dataset bunga Iris. Model menerima empat pengukuran bunga sebagai input dan memprediksi spesies yang sesuai.
|
Input berupa array empat fitur numerik terurut:
|
Output berupa indeks kelas yang diprediksi:
|
-
Buat file inferenceservice.yaml untuk menerapkan layanan inferensi.
apiVersion: "serving.kserve.io/v1beta1" kind: "InferenceService" metadata: name: "sklearn-iris" spec: predictor: model: # Format model. Dalam kasus ini, sklearn. modelFormat: name: sklearn image: "kube-ai-registry.cn-shanghai.cr.aliyuncs.com/ai-sample/kserve-sklearn-server:v0.12.0" command: - sh - -c - "python -m sklearnserver --model_name=sklearn-iris --model_dir=/models --http_port=8080" -
Terapkan InferenceService.
kubectl apply -f inferenceservice.yaml -
Periksa status layanan.
kubectl get inferenceservices sklearn-irisStatus
READYbernilaiTruemenunjukkan bahwa layanan berjalan dengan baik.NAME URL READY PREV LATEST PREVROLLEDOUTREVISION LATESTREADYREVISION AGE sklearn-iris http://sklearn-iris-predictor-default.default.example.com True 100 sklearn-iris-predictor-default-00001 51s
Langkah 3: Akses layanan
Kirim permintaan inferensi ke layanan melalui gerbang masuk (ingress gateway) kluster.
-
Pada halaman Knative, di tab Services, peroleh Gateway dari ALB Ingress atau Kourier gateway dan Default Domain layanan tersebut.
Contoh ini menggunakan ALB Ingress. Antarmuka pengguna untuk Kourier gateway serupa.
Dalam daftar layanan, status sklearn-iris-predictor adalah Ready, dan default domain-nya adalah
sklearn-iris-predictor.default.example.com. Alamat gateway ALB Ingress ditampilkan di bagian atas halaman. Catat alamat dan default domain tersebut. -
Siapkan data permintaan.
Di terminal lokal Anda, buat file bernama
./iris-input.jsonyang berisi dua array. Setiap array merepresentasikan satu sampel untuk prediksi.cat <<EOF > "./iris-input.json" { "instances": [ [6.8, 2.8, 4.8, 1.4], [6.0, 3.4, 4.5, 1.6] ] } EOF -
Kirim permintaan inferensi dari terminal lokal Anda untuk mengakses layanan.
Ganti
${INGRESS_DOMAIN}dengan Gateway dari langkah 1 bagian ini.curl -H "Content-Type: application/json" -H "Host: sklearn-iris-predictor.default.example.com" "http://${INGRESS_DOMAIN}/v1/models/sklearn-iris:predict" -d @./iris-input.jsonOutput menunjukkan bahwa model memprediksi indeks kelas 1 untuk kedua sampel input, yang sesuai dengan Iris versicolour.
{"predictions":[1,1]}
Penagihan
Komponen KServe dan Knative tidak dikenai biaya. Namun, Anda akan dikenai biaya untuk sumber daya komputasi, seperti instans ECS dan ECI, serta sumber daya jaringan, seperti instans ALB dan CLB, yang Anda gunakan. Untuk informasi lebih lanjut, lihat Harga sumber daya cloud.
FAQ
Mengapa InferenceService saya terjebak dalam status Not Ready?
Untuk memecahkan masalah ini, lakukan langkah-langkah berikut:
-
Jalankan perintah
kubectl describe inferenceservice <yourServiceName>untuk memeriksa event guna mencari pesan error. -
Jalankan
kubectl get podsuntuk memeriksa apakah ada Pod yang terkait dengan layanan (biasanya dimulai dengan nama layanan) berada dalam statusErroratauCrashLoopBackOff. -
Jika sebuah Pod berada dalam status tidak normal, jalankan perintah
kubectl logs <pod-name> -c kserve-containeruntuk memeriksa log kontainer yang menjalankan model guna mencari kegagalan pemuatan model, seperti ketidakmampuan mengunduh model karena masalah jaringan atau penggunaan format file model yang salah.
Bagaimana cara menerapkan model yang telah saya latih sendiri?
Anda dapat mengunggah file model ke Bucket OSS. Saat membuat InferenceService, atur bidang spec.predictor.model.storageUri ke URI file model tersebut. Pada saat yang sama, atur dengan benar bidang modelFormat berdasarkan framework model (misalnya, tensorflow, pytorch, atau onnx).
Bagaimana cara mengonfigurasi sumber daya GPU untuk layanan model?
Jika model memerlukan GPU untuk inferensi, Anda dapat menambahkan bidang resources ke predictor dalam file YAML InferenceService untuk meminta sumber daya GPU. Berikut contohnya.
Untuk informasi selengkapnya tentang cara menggunakan sumber daya GPU di Knative, lihat Gunakan sumber daya GPU.
spec:
predictor:
resources:
requests:
nvidia.com/gpu: "1"
limits:
nvidia.com/gpu: "1"
Topik terkait
-
Untuk saran mengenai konfigurasi layanan inferensi model AI di Knative, lihat Praktik terbaik untuk menerapkan layanan inferensi model AI di Knative.
-
ACK Knative mencakup templat aplikasi untuk Stable Diffusion. Untuk informasi selengkapnya, lihat Terapkan layanan Stable Diffusion siap produksi dengan Knative.