Kaito_Inference.md
February 1, 2026 ยท View on GitHub
Inferens dengan Kaito
Kaito adalah operator yang mengautomasikan penyebaran model inferens AI/ML dalam kluster Kubernetes.
Kaito mempunyai pembezaan utama berikut berbanding kebanyakan metodologi penyebaran model arus perdana yang dibina di atas infrastruktur mesin maya:
- Mengurus fail model menggunakan imej kontena. Pelayan http disediakan untuk melakukan panggilan inferens menggunakan perpustakaan model.
- Mengelakkan pelarasan parameter penyebaran untuk menyesuaikan perkakasan GPU dengan menyediakan konfigurasi pratetap.
- Penyediaan nod GPU secara automatik berdasarkan keperluan model.
- Mengehoskan imej model besar dalam Microsoft Container Registry (MCR) awam jika lesen membenarkan.
Dengan menggunakan Kaito, aliran kerja pemuatan model inferens AI besar dalam Kubernetes menjadi lebih mudah.
Senibina
Kaito mengikuti corak reka bentuk Custom Resource Definition (CRD)/pengawal Kubernetes klasik. Pengguna menguruskan sumber tersuai workspace yang menerangkan keperluan GPU dan spesifikasi inferens. Pengawal Kaito akan mengautomasikan penyebaran dengan merekonsiliasi sumber tersuai workspace.
Rajah di atas mempersembahkan gambaran keseluruhan senibina Kaito. Komponen utamanya terdiri daripada:
- Pengawal Workspace: Ia merekonsiliasi sumber tersuai
workspace, mencipta sumber tersuaimachine(diterangkan di bawah) untuk mencetuskan penyediaan nod automatik, dan mencipta beban kerja inferens (deploymentataustatefulset) berdasarkan konfigurasi pratetap model. - Pengawal penyedia nod: Nama pengawal ini adalah gpu-provisioner dalam graf helm gpu-provisioner. Ia menggunakan
machineCRD yang berasal dari Karpenter untuk berinteraksi dengan pengawal workspace. Ia berintegrasi dengan API Azure Kubernetes Service (AKS) untuk menambah nod GPU baru ke kluster AKS.
Nota: gpu-provisioner adalah komponen sumber terbuka. Ia boleh digantikan oleh pengawal lain jika menyokong API Karpenter-core.
Pemasangan
Sila semak panduan pemasangan di sini.
Mula Pantas Inferens Phi-3
apiVersion: kaito.sh/v1alpha1
kind: Workspace
metadata:
name: workspace-phi-3-mini
resource:
instanceType: "Standard_NC6s_v3"
labelSelector:
matchLabels:
apps: phi-3
inference:
preset:
name: phi-3-mini-4k-instruct
# Note: This configuration also works with the phi-3-mini-128k-instruct preset
$ cat examples/inference/kaito_workspace_phi_3.yaml
apiVersion: kaito.sh/v1alpha1
kind: Workspace
metadata:
name: workspace-phi-3-mini
resource:
instanceType: "Standard_NC6s_v3"
labelSelector:
matchLabels:
app: phi-3-adapter
tuning:
preset:
name: phi-3-mini-4k-instruct
method: qlora
input:
urls:
- "https://huggingface.co/datasets/philschmid/dolly-15k-oai-style/resolve/main/data/train-00000-of-00001-54e3756291ca09c6.parquet?download=true"
output:
image: "ACR_REPO_HERE.azurecr.io/IMAGE_NAME_HERE:0.0.1" # Menyelaraskan Laluan Output ACR
imagePushSecret: ACR_REGISTRY_SECRET_HERE
$ kubectl apply -f examples/inference/kaito_workspace_phi_3.yaml
Status workspace boleh dijejak dengan menjalankan arahan berikut. Apabila lajur WORKSPACEREADY menjadi True, model telah berjaya disebarkan.
$ kubectl get workspace kaito_workspace_phi_3.yaml
NAME INSTANCE RESOURCEREADY INFERENCEREADY WORKSPACEREADY AGE
workspace-phi-3-mini Standard_NC6s_v3 True True True 10m
Seterusnya, seseorang boleh mencari ip kluster perkhidmatan inferens dan menggunakan pod curl temporari untuk menguji titik akhir perkhidmatan dalam kluster.
$ kubectl get svc workspace-phi-3-mini
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
workspace-phi-3-mini-adapter ClusterIP <CLUSTERIP> <none> 80/TCP,29500/TCP 10m
export CLUSTERIP=$(kubectl get svc workspace-phi-3-mini-adapter -o jsonpath="{.spec.clusterIPs[0]}")
$ kubectl run -it --rm --restart=Never curl --image=curlimages/curl -- curl -X POST http://$CLUSTERIP/chat -H "accept: application/json" -H "Content-Type: application/json" -d "{\"prompt\":\"YOUR QUESTION HERE\"}"
Mula Pantas Inferens Phi-3 dengan penyesuai
Selepas memasang Kaito, seseorang boleh cuba arahan berikut untuk memulakan perkhidmatan inferens.
Contoh Kod Inferens Phi-3 dengan Penyesuai
apiVersion: kaito.sh/v1alpha1
kind: Workspace
metadata:
name: workspace-phi-3-mini-adapter
resource:
instanceType: "Standard_NC6s_v3"
labelSelector:
matchLabels:
apps: phi-3-adapter
inference:
preset:
name: phi-3-mini-128k-instruct
adapters:
- source:
name: "phi-3-adapter"
image: "ACR_REPO_HERE.azurecr.io/ADAPTER_HERE:0.0.1"
strength: "1.0"
$ cat examples/inference/kaito_workspace_phi_3_with_adapters.yaml
apiVersion: kaito.sh/v1alpha1
kind: Workspace
metadata:
name: workspace-phi-3-mini-adapter
resource:
instanceType: "Standard_NC6s_v3"
labelSelector:
matchLabels:
app: phi-3-adapter
tuning:
preset:
name: phi-3-mini-128k-instruct
method: qlora
input:
urls:
- "https://huggingface.co/datasets/philschmid/dolly-15k-oai-style/resolve/main/data/train-00000-of-00001-54e3756291ca09c6.parquet?download=true"
output:
image: "ACR_REPO_HERE.azurecr.io/IMAGE_NAME_HERE:0.0.1" # Melaras Laluan Output ACR
imagePushSecret: ACR_REGISTRY_SECRET_HERE
$ kubectl apply -f examples/inference/kaito_workspace_phi_3_with_adapters.yaml
Status workspace boleh dijejak dengan menjalankan arahan berikut. Apabila lajur WORKSPACEREADY menjadi True, model telah berjaya disebarkan.
$ kubectl get workspace kaito_workspace_phi_3_with_adapters.yaml
NAME INSTANCE RESOURCEREADY INFERENCEREADY WORKSPACEREADY AGE
workspace-phi-3-mini-adapter Standard_NC6s_v3 True True True 10m
Seterusnya, seseorang boleh mencari ip kluster perkhidmatan inferens dan menggunakan pod curl temporari untuk menguji titik akhir perkhidmatan dalam kluster.
$ kubectl get svc workspace-phi-3-mini-adapter
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
workspace-phi-3-mini-adapter ClusterIP <CLUSTERIP> <none> 80/TCP,29500/TCP 10m
export CLUSTERIP=$(kubectl get svc workspace-phi-3-mini-adapter -o jsonpath="{.spec.clusterIPs[0]}")
$ kubectl run -it --rm --restart=Never curl --image=curlimages/curl -- curl -X POST http://$CLUSTERIP/chat -H "accept: application/json" -H "Content-Type: application/json" -d "{\"prompt\":\"YOUR QUESTION HERE\"}"
Penafian: Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI Co-op Translator. Walaupun kami berusaha untuk ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang sah. Untuk maklumat penting, terjemahan profesional oleh manusia adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.