Quoi de NOUVEAU ! |
---|
Dernière version : 15 novembre 2024. kaito v0.3.2. |
Première version : 15 novembre 2023. kaito v0.1.0. |
kaito est un opérateur qui automatise l'inférence de modèle AI/ML ou la charge de travail de réglage dans un cluster Kubernetes. Les modèles cibles sont de grands modèles open source populaires tels que Falcon et phi-3. kaito présente les différenciations clés suivantes par rapport à la plupart des méthodologies de déploiement de modèles traditionnels construites sur des infrastructures de machines virtuelles :
Grâce à kaito , le flux de travail d'intégration de grands modèles d'inférence d'IA dans Kubernetes est largement simplifié.
kaito suit le modèle de conception classique de définition de ressources personnalisées (CRD)/contrôleur Kubernetes. L'utilisateur gère une ressource personnalisée workspace
qui décrit les exigences du GPU et la spécification d'inférence ou de réglage. Les contrôleurs kaito automatiseront le déploiement en réconciliant la ressource personnalisée workspace
.
La figure ci-dessus présente l'aperçu de l'architecture kaito . Ses principaux composants sont les suivants :
workspace
, crée des ressources personnalisées machine
(expliquées ci-dessous) pour déclencher le provisionnement automatique des nœuds et crée la charge de travail d'inférence ou de réglage ( deployment
, statefulset
ou job
) en fonction des configurations prédéfinies du modèle.machine
provenant de Karpenter pour interagir avec le contrôleur de l'espace de travail. Il s'intègre aux API REST Azure Resource Manager pour ajouter de nouveaux nœuds GPU au cluster AKS ou AKS Arc.Remarque : Gpu-provisioner est un composant open source. Il peut être remplacé par d'autres contrôleurs s'ils prennent en charge les API Karpenter-core.
Veuillez consulter les instructions d'installation ici pour le déploiement à l'aide d'Azure CLI et ici pour le déploiement à l'aide de Terraform.
Après avoir installé kaito , on peut essayer les commandes suivantes pour démarrer un service d'inférence Falcon-7b.
$ cat examples/inference/ kaito _workspace_falcon_7b.yaml
apiVersion: kaito .sh/v1alpha1
kind: Workspace
metadata:
name: workspace-falcon-7b
resource:
instanceType: " Standard_NC12s_v3 "
labelSelector:
matchLabels:
apps: falcon-7b
inference:
preset:
name: " falcon-7b "
$ kubectl apply -f examples/inference/ kaito _workspace_falcon_7b.yaml
L'état 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 workspace-falcon-7b
NAME INSTANCE RESOURCEREADY INFERENCEREADY JOBSTARTED WORKSPACESUCCEEDED AGE
workspace-falcon-7b Standard_NC12s_v3 True True True True 10m
Ensuite, on peut trouver l'adresse IP du cluster du service d'inférence et utiliser un pod curl
temporel pour tester le point de terminaison du service dans le cluster.
$ kubectl get svc workspace-falcon-7b
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
workspace-falcon-7b ClusterIP < CLUSTERIP > < none > 80/TCP,29500/TCP 10m
export CLUSTERIP= $( kubectl get svc workspace-falcon-7b -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 " } "
L'utilisation détaillée des modèles pris en charge kaito peut être trouvée ICI . Si les utilisateurs souhaitent déployer leurs propres modèles conteneurisés, ils peuvent fournir le modèle de pod dans le champ inference
de la ressource personnalisée de l'espace de travail (veuillez consulter les définitions d'API pour plus de détails). Le contrôleur créera une charge de travail de déploiement en utilisant tous les nœuds GPU provisionnés. Notez qu'actuellement, le contrôleur ne gère PAS la mise à niveau automatique du modèle. Il crée uniquement des charges de travail d'inférence basées sur les configurations prédéfinies si les charges de travail n'existent pas.
Le nombre de modèles pris en charge dans kaito augmente ! Veuillez consulter ce document pour voir comment ajouter un nouveau modèle pris en charge.
À partir de la version v0.3.0, kaito prend en charge le réglage fin du modèle et l'utilisation d'adaptateurs affinés dans le service d'inférence. Reportez-vous au document de réglage et au document d'inférence pour plus d'informations.
Pour utiliser des nœuds préférés, assurez-vous que le nœud possède l'étiquette spécifiée dans labelSelector sous matchLabels. Par exemple, si votre labelSelector est :
labelSelector:
matchLabels:
apps: falcon-7b
Ensuite, le nœud doit avoir le label : apps=falcon-7b
.
Lors de l'utilisation de modèles publics hébergés, un utilisateur peut supprimer manuellement la charge de travail d'inférence existante ( Deployment
de StatefulSet
) et le contrôleur d'espace de travail en créera une nouvelle avec la dernière configuration prédéfinie (par exemple, la version de l'image) définie dans la version actuelle. Pour les modèles privés, il est recommandé de créer un nouvel espace de travail avec une nouvelle version d'image dans la Spec.
kaito offre une capacité limitée pour remplacer les configurations prédéfinies pour les modèles qui utilisent manuellement l'exécution transformer
. Pour mettre à jour les paramètres d'un modèle déployé, effectuez kubectl edit
sur la charge de travail, qui peut être soit un StatefulSet
, soit Deployment
. Par exemple, pour activer la quantification 4 bits sur un déploiement falcon-7b-instruct
, vous devez exécuter :
kubectl edit deployment workspace-falcon-7b-instruct
Dans la spécification de déploiement, recherchez et modifiez le champ de commande.
accelerate launch --num_processes 1 --num_machines 1 --machine_rank 0 --gpu_ids all inference_api.py --pipeline text-generation --torch_dtype bfloat16
accelerate launch --num_processes 1 --num_machines 1 --machine_rank 0 --gpu_ids all inference_api.py --pipeline text-generation --torch_dtype bfloat16 --load_in_4bit
Actuellement, nous permettons aux utilisateurs de modifier manuellement les paramètres suivants :
pipeline
: pour les modèles de génération de texte, il peut s'agir soit text-generation
, soit conversational
.load_in_4bit
ou load_in_8bit
: Résolution de quantification du modèle.Si vous devez personnaliser d'autres paramètres, veuillez déposer un problème pour une éventuelle inclusion future.
La principale distinction réside dans les cas d’utilisation prévus. Les modèles Instruct sont des versions affinées et optimisées pour les applications de chat interactif. Ils constituent généralement le choix préféré pour la plupart des implémentations en raison de leurs performances améliorées dans des contextes conversationnels. D’un autre côté, les modèles sans instruction, ou modèles bruts, sont conçus pour un réglage plus précis.
En savoir plus
Ce projet accueille les contributions et suggestions. Les contributions nécessitent que vous acceptiez un contrat de licence de contributeur (CLA) déclarant que vous avez le droit de nous accorder et que vous nous accordez effectivement le droit d'utiliser votre contribution. Pour plus de détails, visitez les CLA pour CNCF.
Lorsque vous soumettez une pull request, un robot CLA déterminera automatiquement si vous devez fournir un CLA et décorera le PR de manière appropriée (par exemple, vérification du statut, commentaire). Suivez simplement les instructions fournies par le bot. Vous n’aurez besoin de le faire qu’une seule fois pour tous les dépôts utilisant notre CLA.
Ce projet a adopté les CLA pour CNCF, veuillez signer électroniquement le CLA via https://easycla.lfx.linuxfoundation.org. Si vous rencontrez des problèmes, vous pouvez soumettre un ticket avec le groupe Linux Foundation ID via le site Web Linux Foundation Support.
Voir Licence MIT.
kaito a adopté le code de conduite de la Cloud Native Compute Foundation. Pour plus d'informations, consultez le Code de conduite kaito .
"développeurs kaito " kaito [email protected]