KServe, sebelumnya dikenal sebagai KFServing, adalah layanan model AI dan mesin inferensi untuk lingkungan cloud-native yang mendukung autoscaling, scale-to-zero, serta canary deployment. Service Mesh (ASM) mengintegrasikan kemampuan Knative Serving yang diterapkan di kluster ACK atau ACK Serverless dan menyediakan fitur KServe on ASM untuk integrasi KServe satu klik. Fluid adalah orchestrator dataset terdistribusi open source berbasis Kubernetes dan akselerator untuk aplikasi intensif data dalam skenario cloud-native, seperti big data dan AI. Anda dapat langsung mengintegrasikan Fluid dengan fitur KServe on ASM untuk mempercepat pemuatan model.
Topik ini menjelaskan langkah-langkah mengintegrasikan KServe on ASM dengan Fluid guna menerapkan layanan inferensi AI yang didukung oleh Object Storage Service (OSS).
Cara kerja
Integrasi ini menghubungkan tiga komponen:
Fluid menyimpan cache file model dari bucket OSS ke penyimpanan SSD lokal di seluruh node kluster. Resource kustom (CR) JindoRuntime mengelola cache terdistribusi tersebut, sedangkan CR DataLoad melakukan prefetch data sebelum pod inferensi dimulai.
KServe on ASM menerapkan CR InferenceService yang mereferensikan data yang telah di-cache melalui persistent volume claim (PVC). Kontainer inferensi memuat model dari titik mount yang dikelola Fluid, bukan mengunduhnya dari OSS.
Service Mesh (ASM) mengarahkan lalu lintas melalui gerbang masuk (ingress gateway) ke layanan inferensi KServe. Knative Serving menangani autoscaling dan scale-to-zero.
Ketika permintaan tiba dan Knative menskalakan pod dari nol, model sudah tersedia di cache lokal. Pod tersebut langsung dimulai dan melayani prediksi tanpa perlu mengunduh dari jarak jauh.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Instans ASM versi 1.17 atau lebih baru dengan kluster Kubernetes yang telah ditambahkan. Untuk informasi lebih lanjut, lihat Buat instans ASM dan Tambahkan kluster ke instans ASM.
Salah satu jenis kluster Kubernetes berikut yang telah ditambahkan ke instans ASM:
Kluster Container Service for Kubernetes (ACK) versi 1.22 atau lebih baru. Untuk inferensi berbasis GPU, kluster harus mencakup node yang dipercepat GPU seperti
ecs.gn6i-c16g1.4xlarge. Untuk informasi lebih lanjut, lihat Buat kluster ACK yang dikelola atau Perbarui kluster ACK.Kluster ACK Serverless versi 1.18 atau lebih baru dengan komponen CoreDNS yang telah diinstal. Untuk informasi lebih lanjut, lihat Buat kluster ACK Serverless dan Kelola komponen sistem.
Akses API Kubernetes ke resource Istio yang diaktifkan untuk instans ASM. Untuk informasi lebih lanjut, lihat Gunakan API Kubernetes kluster pada bidang data untuk mengakses resource Istio.
Gerbang masuk (ingress gateway) ASM bernama
ingressgatewaydengan port 80 dan 443 yang diekspos. Untuk informasi lebih lanjut, lihat Buat gerbang masuk.Komponen Knative Serving yang telah diterapkan di kluster dengan fitur Knative on ASM diaktifkan. Untuk informasi lebih lanjut, lihat Gunakan Knative on ASM untuk menerapkan aplikasi serverless.
Langganan OSS aktif dengan setidaknya satu bucket yang telah dibuat. Untuk informasi lebih lanjut, lihat Aktifkan OSS dan Buat bucket.
Untuk memperbarui instans ASM yang sudah ada, lihat Perbarui instans ASM.
Langkah 1: Aktifkan KServe on ASM
Login ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih Ecosystem > KServe on ASM.
Pada halaman KServe on ASM, konfigurasikan opsi CertManager lalu klik Enable KServe on ASM. KServe bergantung pada cert-manager untuk manajemen siklus hidup sertifikat. Komponen CertManager akan diinstal secara otomatis bersama KServe.
Jika CertManager belum diinstal di kluster, aktifkan Automatically install the CertManager component in the cluster.
Jika CertManager sudah diinstal di kluster, nonaktifkan Automatically install the CertManager component in the cluster.
Langkah 2: Instal Fluid dan siapkan caching model
Instal komponen ack-fluid
Terapkan komponen ack-fluid (versi 0.9.10 atau lebih baru) di kluster bidang data.
Untuk kluster ACK, instal suite AI cloud-native dan terapkan komponen ack-fluid:
Jika suite AI cloud-native belum diinstal, aktifkan Fluid acceleration selama instalasi. Untuk informasi lebih lanjut, lihat Terapkan suite AI cloud-native.
Jika suite AI cloud-native sudah diinstal, login ke Konsol Container Service for Kubernetes, klik kluster tersebut, lalu pilih Applications > Cloud-native AI Suite untuk menerapkan komponen ack-fluid.
Uninstal Fluid open source sebelum menginstal komponen ack-fluid. Keduanya tidak dapat berjalan bersamaan.
Untuk kluster ACK Serverless, lihat bagian Terapkan komponen lapisan kontrol Fluid pada topik Accelerate Jobs.
Unggah model AI ke OSS
Tutorial ini menggunakan model BLOOM-560m, sebuah LLM Transformer open source berbasis PyTorch.
Unduh file model dari Hugging Face.
Unggah file tersebut ke bucket OSS Anda dan catat jalur penyimpanannya.
Format jalurnya adalah
oss://<bucket>/<path>. Misalnya, jika bucket-nya adalahfluid-demodan file-nya berada di direktorimodels/bloom, maka jalur penyimpanannya adalahoss://fluid-demo/models/bloom.
Gunakan ossutil untuk mengunggah file. Untuk informasi lebih lanjut, lihat Instal ossutil.
Buat namespace dan konfigurasikan akses OSS
Hubungkan ke kluster bidang data dengan kubectl. Untuk informasi lebih lanjut, lihat Hubungkan ke kluster ACK menggunakan kubectl.
Buat namespace untuk cache Fluid dan beban kerja inferensi:
kubectl create ns kserve-fluid-demoBuat file bernama
oss-secret.yamldengan konten berikut:Ganti placeholder berikut dengan nilai aktual:
Placeholder Description Example <your-access-key-id>ID AccessKey dari Akun Alibaba Cloud dengan akses OSS LTAI5tXxx <your-access-key-secret>Rahasia AccessKey dari akun tersebut xXxXxXx apiVersion: v1 kind: Secret metadata: name: access-key stringData: fs.oss.accessKeyId: <your-access-key-id> # ID AccessKey dari akun dengan akses OSS fs.oss.accessKeySecret: <your-access-key-secret> # Rahasia AccessKey dari akun tersebutTerapkan Secret:
kubectl apply -f oss-secret.yaml -n kserve-fluid-demo
Deklarasikan data model di Fluid
Kirimkan CR Dataset dan CR JindoRuntime untuk mendeklarasikan data model. Dataset menggambarkan lokasi penyimpanan jarak jauh. JindoRuntime mengonfigurasi sistem cache dan konfigurasi spesifiknya.
Buat file bernama
oss-jindo.yamldengan konten berikut.Ganti placeholder berikut dengan nilai aktual. Untuk daftar endpoint yang tersedia, lihat Wilayah dan endpoint.
Placeholder Description Example <bucket>/<path>Jalur penyimpanan OSS untuk file model fluid-demo/models/bloom<endpoint>Endpoint OSS untuk wilayah tempat bucket berada oss-cn-hangzhou-internal.aliyuncs.comTabel berikut menjelaskan parameter konfigurasi JindoRuntime:
Parameter Value Description replicas2 Jumlah replika worker cache mediumtypeSSD Media penyimpanan untuk cache lokal quota50Gi Kapasitas cache maksimum per node worker high/low0.95 / 0.7 Watermark eviksi cache (high memicu eviksi, low adalah target) cleanPolicyOnDemand Kebijakan pembersihan sidecar Fuse Terapkan Dataset dan JindoRuntime:
kubectl create -f oss-jindo.yaml -n kserve-fluid-demoVerifikasi penerapan:
kubectl get jindoruntime,dataset -n kserve-fluid-demoOutput yang diharapkan:
NAME MASTER PHASE WORKER PHASE FUSE PHASE AGE jindoruntime.data.fluid.io/oss-data Ready Ready Ready 3m NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE dataset.data.fluid.io/oss-data 3.14GiB 0.00B 100.00GiB 0.0% Bound 3mPHASEDataset menunjukkanBounddanFUSE PHASEJindoRuntime menunjukkanReady, yang mengonfirmasi penerapan berhasil.
Pra-ambil data model
Prefetching memuat file model ke cache lokal sebelum pod inferensi dimulai, sehingga menghilangkan latensi unduhan jarak jauh saat startup pod.
Buat file bernama
oss-dataload.yamldengan konten berikut:apiVersion: data.fluid.io/v1alpha1 kind: DataLoad metadata: name: oss-dataload spec: dataset: name: oss-data namespace: kserve-fluid-demo target: - path: /bloom-560m replicas: 2Terapkan DataLoad:
kubectl create -f oss-dataload.yaml -n kserve-fluid-demoPeriksa progres prefetch:
kubectl get dataload -n kserve-fluid-demoOutput yang diharapkan:
NAME DATASET PHASE AGE DURATION oss-dataload oss-data Complete 1m 45sTunggu hingga
PHASEmenunjukkanCompletesebelum melanjutkan ke langkah berikutnya.
Langkah 3: Terapkan layanan inferensi
Buat file bernama
oss-fluid-isvc.yamldengan konfigurasi InferenceService yang sesuai dengan jenis kluster Anda.Kluster ACK
apiVersion: "serving.kserve.io/v1beta1" kind: "InferenceService" metadata: name: "fluid-bloom" spec: predictor: timeout: 600 minReplicas: 0 containers: - name: kserve-container image: registry.cn-hangzhou.aliyuncs.com/acs/kserve-fluid:bloom-gpu resources: limits: cpu: "12" memory: 48Gi nvidia.com/gpu: 1 # Jumlah GPU yang diperlukan. Hapus baris ini jika tidak menggunakan GPU. requests: cpu: "12" memory: 48Gi env: - name: STORAGE_URI value: "pvc://oss-data/bloom-560m" - name: MODEL_NAME value: "bloom" - name: GPU_ENABLED value: "True" # Atur ke "False" jika tidak menggunakan GPU.Kluster ACK Serverless
apiVersion: "serving.kserve.io/v1beta1" kind: "InferenceService" metadata: name: "fluid-bloom" labels: alibabacloud.com/fluid-sidecar-target: "eci" annotations: k8s.aliyun.com/eci-use-specs: "ecs.gn6i-c16g1.4xlarge" # Tipe instans ECS knative.aliyun.com/reserve-instance-eci-use-specs: "ecs.gn6i-c16g1.4xlarge" # Tipe instans ECS spec: predictor: timeout: 600 minReplicas: 0 containers: - name: kserve-container image: registry.cn-hangzhou.aliyuncs.com/acs/kserve-fluid:bloom-gpu resources: limits: cpu: "12" memory: 48Gi requests: cpu: "12" memory: 48Gi env: - name: STORAGE_URI value: "pvc://oss-data/bloom-560m" - name: MODEL_NAME value: "bloom" - name: GPU_ENABLED value: "True" # Atur ke "False" jika tidak menggunakan GPU.Tabel berikut menjelaskan parameter InferenceService:
Parameter Value Description imageregistry.cn-hangzhou.aliyuncs.com/acs/kserve-fluid:bloom-gpuImage contoh dengan antarmuka pemuatan dan inferensi model. Untuk menyesuaikan, lihat Contoh Docker KServe Fluid STORAGE_URIpvc://oss-data/bloom-560mURI penyimpanan berbasis PVC yang mengarah ke cache yang dikelola Fluid MODEL_NAMEbloomNama model yang digunakan di endpoint API prediksi GPU_ENABLEDTrueAtur ke Falsejika tidak menggunakan GPUresources12 CPU, 48 GiB memori Alokasi resource untuk model BLOOM-560m. Sesuaikan berdasarkan ukuran model dan kapasitas kluster Anda Terapkan layanan inferensi:
kubectl create -f oss-fluid-isvc.yaml -n kserve-fluid-demoVerifikasi penerapan:
kubectl get inferenceservice -n kserve-fluid-demoOutput yang diharapkan:
NAME URL READY PREV LATEST PREVROLLEDOUTREVISION LATESTREADYREVISION AGE fluid-bloom http://fluid-bloom.kserve-fluid-demo.example.com True 100 fluid-bloom-predictor-00001 2dREADYmenunjukkanTrue, yang mengonfirmasi layanan inferensi sedang berjalan.
Langkah 4: Kirim permintaan prediksi
Dapatkan alamat gerbang masuk (ingress gateway) ASM.
Login ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih ASM Gateways > Ingress Gateway.
Di bagian Service address pada ingressgateway, salin alamat layanan tersebut.
Kirim permintaan uji. Ganti
<gateway-address>dengan alamat dari langkah sebelumnya.curl -v \ -H "Content-Type: application/json" \ -H "Host: fluid-bloom.kserve-fluid-demo.example.com" \ "http://<gateway-address>:80/v1/models/bloom:predict" \ -d '{"prompt": "It was a dark and stormy night", "result_length": 50}'Output yang diharapkan:
* Trying xxx.xx.xx.xx:80... * Connected to xxx.xx.xx.xx (xxx.xx.xx.xx) port 80 (#0) > POST /v1/models/bloom:predict HTTP/1.1 > Host: fluid-bloom-predictor.kserve-fluid-demo.example.com > Content-Type: application/json > < HTTP/1.1 200 OK < content-type: application/json < server: istio-envoy < { "result": "It was a dark and stormy night, and the wind was blowing in the\ndirection of the west. The wind was blowing in the direction of the\nwest, and the wind was blowing in the direction of the west. The\nwind was" }Tanggapan
200 OKdengan teks yang dihasilkan mengonfirmasi bahwa layanan inferensi berfungsi.
Pembersihan
Untuk menghapus semua resource yang dibuat dalam tutorial ini, jalankan perintah berikut secara berurutan:
kubectl delete inferenceservice fluid-bloom -n kserve-fluid-demo
kubectl delete dataload oss-dataload -n kserve-fluid-demo
kubectl delete dataset oss-data -n kserve-fluid-demo
kubectl delete jindoruntime oss-data -n kserve-fluid-demo
kubectl delete secret access-key -n kserve-fluid-demo
kubectl delete ns kserve-fluid-demo