KServe, sebelumnya bernama KFServing, adalah mesin penyajian dan inferensi model AI untuk lingkungan cloud-native yang mendukung fitur seperti autoscaling, scale-to-zero, dan penerapan canary. Alibaba Cloud Service Mesh (ASM) terintegrasi dengan komponen Knative Serving dan menyediakan KServe on ASM, memungkinkan penyiapan KServe untuk penyajian AI hanya dalam satu klik. Fluid adalah orchestrator dan akselerator dataset terdistribusi open-source yang native untuk Kubernetes, dirancang khusus untuk aplikasi intensif data seperti beban kerja big data dan AI. Anda dapat mengintegrasikan langsung KServe on ASM dengan Fluid untuk mempercepat proses pemuatan model. Topik ini menjelaskan cara menggunakan KServe dan Fluid pada ASM guna mempercepat akses data untuk penyajian AI.
Prasyarat
-
Kluster Kubernetes telah ditambahkan ke instans ASM. Untuk informasi selengkapnya, lihat Buat instans ASM dan Tambahkan kluster ke instans ASM.
Catatan-
Instans ASM harus versi 1.17 atau lebih baru. Untuk informasi tentang cara melakukan upgrade instans, lihat Upgrade instans ASM.
-
Persyaratan kluster Kubernetes:
-
Kluster ACK harus versi 1.22 atau lebih baru. Untuk informasi selengkapnya, lihat Buat kluster ACK yang dikelola atau Upgrade kluster ACK. Jika Anda menggunakan graphics processing unit (GPU) untuk menjalankan layanan AI, kluster ACK harus berisi node berakselerasi GPU, seperti ecs.gn6i-c16g1.4xlarge.
-
Kluster ACK Serverless harus versi 1.18 atau lebih baru, dan komponen CoreDNS telah diinstal. Untuk informasi selengkapnya, lihat Buat kluster ACK Serverless dan Kelola komponen.
-
-
-
Akses resource Istio melalui API Kubernetes dari kluster bidang data harus diaktifkan untuk instans ASM. Untuk informasi selengkapnya, lihat Gunakan API Kubernetes kluster bidang data untuk mengakses resource Istio.
-
Gerbang masuk (ingress gateway) telah dibuat untuk kluster. Topik ini menggunakan gerbang masuk ASM bernama
ingressgatewayyang membuka port 80 dan 443. Untuk informasi selengkapnya, lihat Buat gerbang masuk. -
Komponen Knative Serving telah diterapkan di kluster ACK atau kluster ACK Serverless, dan Knative on ASM telah diaktifkan. Untuk informasi selengkapnya, lihat Gunakan Knative on ASM untuk menerapkan aplikasi serverless.
-
Layanan Penyimpanan Objek (OSS) telah diaktifkan dan bucket telah dibuat. Untuk informasi selengkapnya, lihat Aktifkan OSS dan Buat bucket.
Langkah 1: Aktifkan KServe on ASM
-
Login ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
-
Di halaman KServe on ASM, aktifkan atau nonaktifkan sakelar Automatically install the CertManager component in the cluster, lalu klik Enable KServe on ASM.
cert-manager adalah sistem manajemen siklus hidup sertifikat yang mengotomatiskan penerbitan dan penerapan sertifikat. KServe on ASM bergantung pada komponen cert-manager. Saat Anda menginstal KServe, komponen cert-manager akan diinstal secara otomatis.
-
Jika cert-manager belum diinstal di kluster Anda, aktifkan sakelar Automatically install the CertManager component in the cluster.
-
Jika cert-manager sudah diinstal di kluster bidang data Anda, nonaktifkan sakelar Automatically install the CertManager component in the cluster.
-
Langkah 2: Instal Fluid dan percepat caching
-
Terapkan komponen ack-fluid versi 0.9.10 atau lebih baru di kluster Anda.
-
Jika kluster bidang data Anda adalah kluster ACK, instal suite AI cloud-native dan terapkan komponen ack-fluid.
CatatanJika Anda telah menginstal Fluid versi open-source, uninstall terlebih dahulu sebelum menerapkan komponen ack-fluid.
-
Jika Anda belum menginstal suite AI cloud-native, aktifkan Fluid Data Acceleration saat instalasi. Untuk informasi selengkapnya, lihat Terapkan suite AI cloud-native.
-
Jika Anda telah menginstal suite AI cloud-native, login ke Konsol ACK. Buka halaman dan terapkan ack-fluid.
-
-
Jika kluster bidang data Anda adalah kluster ACK Serverless, terapkan komponen ack-fluid. Untuk informasi selengkapnya, lihat bagian Terapkan komponen lapisan kontrol Fluid dalam topik Percepat akses data untuk aplikasi Job.
-
-
Siapkan model AI dan unggah ke bucket OSS.
-
Siapkan data dari model AI yang telah dilatih.
Topik ini menggunakan model BLOOM, yaitu model bahasa besar (LLM) open-source berbasis Transformer yang dibangun di atas PyTorch, sebagai contoh. Untuk informasi lebih lanjut tentang data model tersebut, lihat Hugging Face.
-
Unggah file data model yang telah diunduh ke bucket OSS dan catat jalur penyimpanannya.
Format jalur penyimpanan adalah
oss://{bucket}/{path}. Misalnya, jika Anda membuat bucket bernama fluid-demo dan mengunggah semua file data model ke direktorimodels/bloomdi dalamnya, maka jalur penyimpanannya adalahoss://fluid-demo/models/bloom.CatatanAnda dapat menggunakan ossutil, tool klien yang disediakan oleh OSS, untuk mengunggah data. Untuk informasi selengkapnya, lihat Instal ossutil.
-
-
Buat namespace untuk cache Fluid dan layanan AI, serta konfigurasikan izin akses OSS.
-
Gunakan kubectl untuk menghubungkan ke kluster bidang data. Untuk informasi selengkapnya, lihat Hubungkan ke kluster ACK menggunakan kubectl.
-
Jalankan perintah berikut untuk membuat namespace
kserve-fluid-demountuk cache Fluid dan layanan AI KServe:kubectl create ns kserve-fluid-demo -
Buat file bernama oss-secret.yaml dengan konten berikut.
Field
fs.oss.accessKeyIddanfs.oss.accessKeySecretadalah ID AccessKey dan rahasia untuk mengakses OSS.apiVersion: v1 kind: Secret metadata: name: access-key stringData: fs.oss.accessKeyId: xxx # Ganti dengan ID AccessKey Alibaba Cloud yang dapat mengakses OSS. fs.oss.accessKeySecret: xxx # Ganti dengan rahasia AccessKey yang sesuai. -
Jalankan perintah berikut untuk menerapkan Secret dan mengonfigurasi kredensial akses OSS:
kubectl apply -f oss-secret.yaml -n kserve-fluid-demo
-
-
Deklarasikan data model AI yang akan diakses di Fluid.
Kirimkan custom resource (CR) Dataset dan CR JindoRuntime. CR Dataset mendefinisikan URL data di sistem penyimpanan eksternal, sedangkan CR JindoRuntime menjelaskan sistem caching beserta konfigurasinya.
-
Buat file bernama oss-jindo.yaml dengan konten berikut.
Pada CR Dataset, ganti
oss://{bucket}/{path}dengan jalur penyimpanan data model yang telah Anda catat di langkah 2.b, dan ganti{endpoint}dengan endpoint OSS. Untuk informasi tentang endpoint OSS di berbagai wilayah, lihat Wilayah dan endpoint. -
Jalankan perintah berikut untuk menerapkan CR Dataset dan JindoRuntime:
kubectl create -f oss-jindo.yaml -n kserve-fluid-demo -
Jalankan perintah berikut untuk memeriksa status penerapan Dataset dan JindoRuntime:
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 3mOutput menunjukkan bahwa
PHASEDataset adalahBounddanFUSE PHASEJindoRuntime adalahReady, yang mengindikasikan penerapan berhasil.
-
-
Lakukan pra-ambil (prefetch) data dengan Fluid untuk meningkatkan kinerja akses.
-
Buat file bernama oss-dataload.yaml dengan 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: 2 -
Jalankan perintah berikut untuk menerapkan CR DataLoad dan melakukan pra-ambil data:
kubectl create -f oss-dataload.yaml -n kserve-fluid-demo -
Jalankan perintah berikut untuk memeriksa progres pra-ambil data:
kubectl get dataload -n kserve-fluid-demoOutput yang diharapkan:
NAME DATASET PHASE AGE DURATION oss-dataload oss-data Complete 1m 45sOutput menunjukkan bahwa pra-ambil data membutuhkan waktu sekitar
45s. Anda harus menunggu hingga proses selesai.
-
Langkah 3: Terapkan layanan inferensi
-
Buat file bernama oss-fluid-isvc.yaml berdasarkan 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 # Jika Anda menggunakan GPU, tentukan jumlah yang diperlukan. Jika tidak, field ini dapat dihilangkan. requests: cpu: "12" memory: 48Gi env: - name: STORAGE_URI value: "pvc://oss-data/bloom-560m" - name: MODEL_NAME value: "bloom" # Atur parameter ini ke "True" jika Anda menggunakan GPU. Jika tidak, atur ke "False". - name: GPU_ENABLED value: "True"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" # Ganti dengan tipe instans ECS yang diinginkan. knative.aliyun.com/reserve-instance-eci-use-specs: "ecs.gn6i-c16g1.4xlarge" # Ganti dengan tipe instans ECS yang diinginkan. 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" # Atur parameter ini ke "True" jika Anda menggunakan GPU. Jika tidak, atur ke "False". - name: GPU_ENABLED value: "True"Catatan-
Contoh ini menggunakan model bahasa besar dan meminta sumber daya signifikan (12 core CPU, memori 48 GiB). Sesuaikan field
resourcesdalam konfigurasiInferenceServiceberdasarkan beban kerja kluster Anda. -
Contoh ini mengatur field
imageke contoh gambarregistry.cn-hangzhou.aliyuncs.com/acs/kserve-fluid:bloom-gpu. Gambar ini menyediakan antarmuka untuk pemuatan model dan inferensi. Lihat kode untuk contoh gambar ini di komunitas open-source KServe untuk menyesuaikan gambar Anda sendiri. Untuk informasi selengkapnya, lihat contoh Docker KServe di sini.
-
-
Jalankan perintah berikut untuk menerapkan layanan inferensi model AI:
kubectl create -f oss-fluid-isvc.yaml -n kserve-fluid-demo -
Jalankan perintah berikut untuk memeriksa status penerapan layanan inferensi model AI:
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 2dSaat field
READYmenampilkanTrue, layanan inferensi model AI telah berhasil diterapkan.
Langkah 4: Akses layanan inferensi
-
Dapatkan alamat gerbang masuk ASM.
-
Login ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
-
Di bagian Service Address gerbang ingressgateway, lihat dan salin alamat layanan gerbang ASM.
-
-
Jalankan perintah berikut untuk mengakses layanan inferensi model AI contoh,
bloom. Ganti {ASM gateway service address} dengan alamat gerbang masuk ASM yang Anda peroleh di langkah sebelumnya.curl -v -H "Content-Type: application/json" -H "Host: fluid-bloom.kserve-fluid-demo.example.com" "http://{ASM gateway service 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 > User-Agent: curl/7.84.0 > Accept: */* > Content-Type: application/json > Content-Length: 65 > * Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < content-length: 227 < content-type: application/json < date: Thu, 20 Apr 2023 09:49:00 GMT < server: istio-envoy < x-envoy-upstream-service-time: 1142 < { "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" } * Connection # 0 to host xxx.xx.xx.xx left intactOutput menunjukkan bahwa layanan inferensi model AI berhasil menghasilkan teks berdasarkan input contoh dan mengembalikan hasil inferensi.