Was ist NEU! |
---|
Neueste Veröffentlichung: 15. November 2024. kaito v0.3.2. |
Erste Veröffentlichung: 15. November 2023. kaito v0.1.0. |
kaito ist ein Operator, der die AI/ML-Modellinferenz oder die Optimierungsarbeitslast in einem Kubernetes-Cluster automatisiert. Die Zielmodelle sind beliebte Open-Source-Großmodelle wie Falcon und Phi-3. kaito weist im Vergleich zu den meisten Mainstream-Modellbereitstellungsmethoden, die auf virtuellen Maschineninfrastrukturen basieren, die folgenden wesentlichen Unterschiede auf:
Mit kaito wird der Workflow beim Onboarding großer KI-Inferenzmodelle in Kubernetes erheblich vereinfacht.
kaito folgt dem klassischen Kubernetes Custom Resource Definition (CRD)/Controller-Entwurfsmuster. Der Benutzer verwaltet eine benutzerdefinierte workspace
, die die GPU-Anforderungen und die Inferenz- oder Optimierungsspezifikation beschreibt. kaito -Controller automatisieren die Bereitstellung, indem sie die benutzerdefinierten workspace
abgleichen.
Die obige Abbildung zeigt die Übersicht über die kaito -Architektur. Seine Hauptbestandteile bestehen aus:
workspace
Ressourcen ab, erstellt benutzerdefinierte machine
(siehe unten), um die automatische Knotenbereitstellung auszulösen, und erstellt die Inferenz- oder Optimierungsarbeitslast ( deployment
, statefulset
oder job
) basierend auf den voreingestellten Modellkonfigurationen.machine
-CRD, um mit dem Workspace-Controller zu interagieren. Es lässt sich in die REST-APIs von Azure Resource Manager integrieren, um dem AKS- oder AKS Arc-Cluster neue GPU-Knoten hinzuzufügen.Hinweis: Der GPU-Provisioner ist eine Open-Source-Komponente. Es kann durch andere Controller ersetzt werden, wenn diese Karpenter-Core-APIs unterstützen.
Bitte lesen Sie die Installationsanleitung hier für die Bereitstellung mit Azure CLI und hier für die Bereitstellung mit Terraform.
Nach der Installation kaito kann man die folgenden Befehle ausprobieren, um einen Falcon-7b-Inferenzdienst zu starten.
$ 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
Der Arbeitsbereichsstatus kann durch Ausführen des folgenden Befehls verfolgt werden. Wenn die Spalte WORKSPACEREADY True
wird, wurde das Modell erfolgreich bereitgestellt.
$ kubectl get workspace workspace-falcon-7b
NAME INSTANCE RESOURCEREADY INFERENCEREADY JOBSTARTED WORKSPACESUCCEEDED AGE
workspace-falcon-7b Standard_NC12s_v3 True True True True 10m
Als Nächstes kann man die Cluster-IP des Inferenzdienstes ermitteln und einen temporalen curl
Pod verwenden, um den Dienstendpunkt im Cluster zu testen.
$ 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 " } "
Die detaillierte Verwendung für kaito unterstützte Modelle finden Sie HIER . Falls Benutzer ihre eigenen Containermodelle bereitstellen möchten, können sie die Pod-Vorlage im inference
der benutzerdefinierten Arbeitsbereichsressource bereitstellen (Einzelheiten finden Sie in den API-Definitionen). Der Controller erstellt einen Bereitstellungsworkload unter Verwendung aller bereitgestellten GPU-Knoten. Beachten Sie, dass der Controller derzeit KEINE automatische Modellaktualisierung durchführt. Es erstellt nur dann Inferenz-Workloads basierend auf den voreingestellten Konfigurationen, wenn die Workloads nicht vorhanden sind.
Die Zahl der unterstützten Modelle in kaito wächst! Bitte lesen Sie dieses Dokument, um zu erfahren, wie Sie ein neues unterstütztes Modell hinzufügen.
Ab Version v0.3.0 unterstützt kaito die Feinabstimmung von Modellen und die Verwendung fein abgestimmter Adapter im Inferenzdienst. Weitere Informationen finden Sie im Tuning-Dokument und im Inferenzdokument.
Stellen Sie für die Verwendung bevorzugter Knoten sicher, dass der Knoten über die im labelSelector unter matchLabels angegebene Bezeichnung verfügt. Wenn Ihr labelSelector beispielsweise Folgendes ist:
labelSelector:
matchLabels:
apps: falcon-7b
Dann sollte der Knoten die Bezeichnung haben: apps=falcon-7b
.
Bei Verwendung gehosteter öffentlicher Modelle kann ein Benutzer den vorhandenen Inferenz-Workload ( Deployment
von StatefulSet
) manuell löschen, und der Workspace-Controller erstellt einen neuen mit der neuesten voreingestellten Konfiguration (z. B. der Image-Version), die in der aktuellen Version definiert ist. Für private Modelle wird empfohlen, in der Spezifikation einen neuen Arbeitsbereich mit einer neuen Bildversion zu erstellen.
kaito bietet eine eingeschränkte Möglichkeit, voreingestellte Konfigurationen für Modelle zu überschreiben, die transformer
Laufzeit manuell verwenden. Um Parameter für ein bereitgestelltes Modell zu aktualisieren, führen Sie kubectl edit
für die Arbeitslast durch, bei der es sich entweder um StatefulSet
oder Deployment
handeln kann. Um beispielsweise die 4-Bit-Quantisierung für eine falcon-7b-instruct
Bereitstellung zu aktivieren, würden Sie Folgendes ausführen:
kubectl edit deployment workspace-falcon-7b-instruct
Suchen und ändern Sie in der Bereitstellungsspezifikation das Befehlsfeld.
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
Derzeit erlauben wir Benutzern, die folgenden Parameter manuell zu ändern:
pipeline
: Bei Textgenerierungsmodellen kann dies entweder text-generation
oder conversational
sein.load_in_4bit
oder load_in_8bit
: Modellquantisierungsauflösung.Sollten Sie andere Parameter anpassen müssen, reichen Sie bitte ein Problem für eine mögliche zukünftige Aufnahme ein.
Der Hauptunterschied liegt in den beabsichtigten Anwendungsfällen. Instruct-Modelle sind fein abgestimmte Versionen, die für interaktive Chat-Anwendungen optimiert sind. Aufgrund ihrer verbesserten Leistung in Gesprächskontexten sind sie in der Regel die bevorzugte Wahl für die meisten Implementierungen. Auf der anderen Seite sind Nicht-Instruktions- oder Rohmodelle für eine weitere Feinabstimmung konzipiert.
Mehr lesen
Dieses Projekt freut sich über Beiträge und Vorschläge. Für die Beiträge müssen Sie einem Contributor License Agreement (CLA) zustimmen, in dem Sie erklären, dass Sie das Recht haben, uns die Rechte zur Nutzung Ihres Beitrags zu gewähren, und dies auch tatsächlich tun. Einzelheiten finden Sie unter CLAs für CNCF.
Wenn Sie eine Pull-Anfrage einreichen, ermittelt ein CLA-Bot automatisch, ob Sie eine CLA bereitstellen müssen, und schmückt die PR entsprechend (z. B. Statusprüfung, Kommentar). Folgen Sie einfach den Anweisungen des Bots. Sie müssen dies nur einmal für alle Repos tun, die unsere CLA verwenden.
Dieses Projekt hat die CLAs für CNCF übernommen. Bitte unterzeichnen Sie die CLA elektronisch über https://easycla.lfx.linuxfoundation.org. Wenn Sie auf Probleme stoßen, können Sie über die Linux Foundation-Support-Website ein Ticket bei der Linux Foundation-ID-Gruppe einreichen.
Siehe MIT-Lizenz.
kaito hat den Verhaltenskodex der Cloud Native Compute Foundation übernommen. Weitere Informationen finden Sie im kaito Verhaltenskodex.
„ kaito devs“ kaito [email protected]