Kaito_Inference.md
February 1, 2026 · View on GitHub
Inferens med Kaito
Kaito är en operator som automatiserar driftsättningen av AI/ML-inferensmodeller i en Kubernetes-kluster.
Kaito har följande viktiga skillnader jämfört med de flesta mainstream-metoder för modellutplacering som är byggda ovanpå virtual machine-infrastrukturer:
- Hantera modelfiler med hjälp av containerbilder. En http-server tillhandahålls för att utföra inferensanrop med modellbiblioteket.
- Undvik att justera driftsättningsparametrar för att passa GPU-hårdvara genom att erbjuda förinställda konfigurationer.
- Automatisk tilldelning av GPU-noder baserat på modellens krav.
- Värd för stora modellbilder i det offentliga Microsoft Container Registry (MCR) om licensen tillåter.
Med Kaito förenklas arbetsflödet för att onboarda stora AI-inferensmodeller i Kubernetes avsevärt.
Arkitektur
Kaito följer det klassiska Kubernetes Custom Resource Definition (CRD) / controller-designmönstret. Användaren hanterar en workspace custom resource som beskriver GPU-kraven och inferensspecifikationen. Kaito-kontroller automatiserar driftsättningen genom att synkronisera workspace custom resource.
Figuren ovan visar en översikt över Kaito-arkitekturen. Dess huvudsakliga komponenter består av:
- Workspace controller: Den synkroniserar
workspacecustom resource, skaparmachine(förklaras nedan) custom resources för att trigga automatisk nodtilldelning, och skapar inferensarbetsbelastningen (deploymentellerstatefulset) baserat på modellens förinställda konfigurationer. - Node provisioner controller: Kontrollerens namn är gpu-provisioner i gpu-provisioner helm chart. Den använder
machineCRD från Karpenter för att interagera med workspace-kontrollern. Den integreras med Azure Kubernetes Service (AKS) API:er för att lägga till nya GPU-noder i AKS-klustret.
Obs: gpu-provisioner är en öppen källkods-komponent. Den kan ersättas av andra kontroller om de stöder Karpenter-core API:er.
Installation
Se installationsanvisningarna här.
Snabbstart 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" # Inställning av utgångs-ACR-väg
imagePushSecret: ACR_REGISTRY_SECRET_HERE
$ kubectl apply -f examples/inference/kaito_workspace_phi_3.yaml
Status för workspace kan följas genom att köra följande kommando. När kolumnen WORKSPACEREADY blir True har modellen driftsatts framgångsrikt.
$ 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
Därefter kan man hitta kluster-IP för inferenstjänsten och använda en temporär curl-pod för att testa tjänstens slutpunkt i klustret.
$ 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\"}"
Snabbstart Inferens Phi-3 med adaptrar
Efter installation av Kaito kan man prova följande kommandon för att starta en inferenstjänst.
Exempelkod Inferens Phi-3 med Adaptrar
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" # Justerar utgångens ACR-väg
imagePushSecret: ACR_REGISTRY_SECRET_HERE
$ kubectl apply -f examples/inference/kaito_workspace_phi_3_with_adapters.yaml
Status för workspace kan följas genom att köra följande kommando. När kolumnen WORKSPACEREADY blir True har modellen driftsatts framgångsrikt.
$ 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
Därefter kan man hitta kluster-IP för inferenstjänsten och använda en temporär curl-pod för att testa tjänstens slutpunkt i klustret.
$ 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\"}"
Ansvarsfriskrivning: Detta dokument har översatts med hjälp av AI-översättningstjänsten Co-op Translator. Även om vi strävar efter noggrannhet, vänligen var medveten om att automatiska översättningar kan innehålla fel eller brister. Det ursprungliga dokumentet på dess originalspråk ska betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för några missförstånd eller feltolkningar som uppstår till följd av användningen av denna översättning.