Skip to content

Latest commit

 

History

History
170 lines (134 loc) · 8.2 KB

Kaito_Inference.md

File metadata and controls

170 lines (134 loc) · 8.2 KB

Inference avec Kaito

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é.

Architecture

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.

Architecture de Kaito

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ées machine (expliquées ci-dessous) pour déclencher l'auto-provisionnement des nœuds, et crée la charge de travail d'inférence (deployment ou statefulset) 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.

Installation

Veuillez consulter le guide d'installation ici.

Démarrage rapide de l'inférence Phi-3

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\"}"

Démarrage rapide de l'inférence Phi-3 avec adaptateurs

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.