Kaito est un opérateur qui automatise le déploiement de modèles d'inférence AI/ML dans un cluster Kubernetes.
Kaito présente les différenciations clés suivantes par rapport à la plupart des méthodologies de déploiement de modèles courantes basées sur des infrastructures de machines virtuelles :
- Gérer les fichiers de modèle en utilisant des images de conteneur. Un serveur http est fourni pour effectuer des appels d'inférence en utilisant la bibliothèque de modèles.
- Éviter de régler les paramètres de déploiement pour s'adapter au matériel GPU en fournissant des configurations prédéfinies.
- Auto-provisionner des nœuds GPU en fonction des exigences du modèle.
- Héberger de grandes images de modèles dans le registre public Microsoft Container Registry (MCR) si la licence le permet.
Avec Kaito, le workflow d'intégration de grands modèles d'inférence AI dans Kubernetes est largement simplifié.
Kaito suit le schéma de conception classique de la Définition de Ressource Personnalisée (CRD)/contrôleur de Kubernetes. L'utilisateur gère une ressource personnalisée workspace
qui décrit les exigences GPU et la spécification d'inférence. Les contrôleurs Kaito automatiseront le déploiement en conciliant la ressource personnalisée workspace
.
La figure ci-dessus présente une vue d'ensemble de l'architecture de Kaito. Ses principaux composants sont :
- Contrôleur de l'espace de travail : Il concilie la ressource personnalisée
workspace
, crée des ressources personnaliséesmachine
(expliquées ci-dessous) pour déclencher l'auto-provisionnement des nœuds, et crée la charge de travail d'inférence (deployment
oustatefulset
) en fonction des configurations prédéfinies du modèle. - Contrôleur de provisionnement de nœuds : Le nom du contrôleur est gpu-provisioner dans le gpu-provisioner helm chart. Il utilise le CRD
machine
provenant de Karpenter pour interagir avec le contrôleur de l'espace de travail. Il s'intègre aux APIs Azure Kubernetes Service (AKS) pour ajouter de nouveaux nœuds GPU au cluster AKS.
Note : Le gpu-provisioner est un composant open source. Il peut être remplacé par d'autres contrôleurs s'ils supportent les APIs Karpenter-core.
Veuillez consulter le guide d'installation ici.
Code d'exemple pour l'inférence 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" # Tuning Output ACR Path
imagePushSecret: ACR_REGISTRY_SECRET_HERE
$ kubectl apply -f examples/inference/kaito_workspace_phi_3.yaml
Le statut de l'espace de travail peut être suivi en exécutant la commande suivante. Lorsque la colonne WORKSPACEREADY devient True
, le modèle a été déployé avec succès.
$ 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
Ensuite, on peut trouver l'ip du cluster du service d'inférence et utiliser un pod curl
temporaire pour tester le point de terminaison du service dans le cluster.
$ 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\"}"
Après avoir installé Kaito, on peut essayer les commandes suivantes pour démarrer un service d'inférence.
Code d'exemple pour l'inférence Phi-3 avec adaptateurs
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" # Tuning Output ACR Path
imagePushSecret: ACR_REGISTRY_SECRET_HERE
$ kubectl apply -f examples/inference/kaito_workspace_phi_3_with_adapters.yaml
Le statut de l'espace de travail peut être suivi en exécutant la commande suivante. Lorsque la colonne WORKSPACEREADY devient True
, le modèle a été déployé avec succès.
$ 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
Ensuite, on peut trouver l'ip du cluster du service d'inférence et utiliser un pod curl
temporaire pour tester le point de terminaison du service dans le cluster.
$ 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\"}"
Avertissement: Ce document a été traduit en utilisant des services de traduction basés sur l'IA. Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de faire appel à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction.