Nutzung fraktionaler GPUs auf Kubernetes

Auf Geschwindigkeit ausgelegt: ~ 10 ms Latenz, auch unter Last
Unglaublich schnelle Methode zum Erstellen, Verfolgen und Bereitstellen Ihrer Modelle!
- Verarbeitet mehr als 350 RPS auf nur 1 vCPU — kein Tuning erforderlich
- Produktionsbereit mit vollem Unternehmenssupport
Warum fraktionierte GPUs?
Fraktionierte GPUs ermöglichen es uns, einer einzelnen GPU mehrere Workloads zuzuweisen, was in den folgenden Szenarien nützlich sein kann:
- Die Workloads benötigen etwa 2-3 GB VRAM. Sie können also mehrere Replikate dieses Workloads auf einer einzigen GPU mit etwa 16 GB VRAM oder mehr zuweisen.
- Jeder Workload hat wenig Verkehr und kann die GPU-Auslastung nicht maximal ausschöpfen.
Wie benutzt man Fractional GPUs?
- Zeitliches Slicing: Bei diesem Ansatz können Sie eine GPU in eine feste Anzahl von Bruchteilen aufteilen und dann einen Bruchteil der GPU für diese Arbeitslast auswählen. Beispielsweise können wir beschließen, eine GPU in 10 Abschnitte zu unterteilen und dann 3 Abschnitte für eine Arbeitslast, 5 Abschnitte für Workload2 und 2 Schichten für die Workload3 anzufordern. Das bedeutet, dass Workload1 0,3 GPU (Rechenleistung + 30% des VRAM), Workload2 0,5 GPU und Workload3 0,2 GPU verwendet. Timeslicing wird jedoch nur für die Planung der Workloads auf derselben Maschine verwendet — es bedeutet keine tatsächliche Isolierung auf der Maschine. Wenn die GPU-Maschine beispielsweise über 16 GB VRAM verfügt, muss der Benutzer sicherstellen, dass Workload1 weniger als 4,8 GB VRAM benötigt, Workload2 weniger als 8 GB VRAM benötigt und Workload3 weniger als 3,2 GB VRAM benötigt. Wenn ein Workload plötzlich mehr Speicher beansprucht, kann dies zum Absturz der anderen Prozesse führen. Die Rechenleistung wird ebenfalls gemeinsam genutzt, aber ein Workload kann die gesamte GPU beanspruchen, wenn die anderen Workloads inaktiv sind — es handelt sich im Grunde genommen um einen Kontextwechsel zwischen den drei Workloads. Sie können mehr darüber lesen hier.
- MIG (Mehrinstanz-GPUs): Diese Funktion wird von Nvidia nur auf den A100- und H100-GPUs bereitgestellt. Sie funktioniert nicht auf anderen GPUs. Wir können die GPUs in eine feste Anzahl konfigurierbarer Teile unterteilen, wie in der folgenden Tabelle erwähnt. Die Workloads können einen der Slices auswählen und sie erhalten eine Rechen- und Speicherisolierung. Bei den Instanzen handelt es sich nicht genau um die vollständigen Bruchteile der GPU, sondern um diskretere Einheiten, wie in der folgenden Tabelle erwähnt. Nehmen wir zum Beispiel an, wir teilen eine A100-GPU mit 40 GB in 7 Teile auf — dann können wir 7 Workloads platzieren, wobei jeweils etwa 1/7 GPU und 5 GB VRAM verwendet werden. Bitte beachten Sie, dass wir in diesem Fall nicht einfach 2 Slices für einen Workload bereitstellen können und erwarten, dass dieser 2/7 GPU und 10 GB VRAM erhält. In diesem Fall kann jeder Workload nur ein Slice enthalten.

Voraussetzungen für Fractional GPU
Cloud-Integration hinzufügen
Um fraktionierte GPUs zu aktivieren, müssen wir einen separaten Nodepool der GPUs erstellen. Dies funktioniert nicht über die standardmäßige dynamische Knotenbereitstellung in AWS/ GCP. Damit Truefoundry diese Nodepools lesen kann, müssen wir sicherstellen, dass die Cloud-Integration bereits mit Truefoundry abgeschlossen ist.
Wenn es noch nicht aktiviert ist, bitte folge dieser Anleitung um die Cloud-Integration zu aktivieren.
Sobald die Cloud-Integration hinzugefügt wurde, müssen Sie „Nodepools“ für MIG- oder TimeSlicing-fähige GPUs erstellen. Diese Konfiguration ist für verschiedene Cloud-Anbieter unterschiedlich. Bitte folgen Sie der nachstehenden Anleitung, um fraktionierte GPUs in Ihrem Cluster zu aktivieren.
Installieren Sie die neueste Version von tfy-gpu-operator
- Gehe zu
Bereitstellungen -> Helm -> tfy-gpu-Operator. - Klicke auf Bearbeiten (drei Punkte auf der rechten Seite)
- Wählen Sie die neueste Version des Diagramms (ganz oben) aus dem Drop-down-Menü aus und klicken Sie auf Senden.
MIG aktivieren
Azurblau
1. Erstellen Sie mithilfe des Arguments einen Nodepool mit aktivierter MIG --gpu-instanzprofil von Azure CLI. Hier ist ein Beispielbefehl, um dasselbe zu tun:
als auch nodepool add\
<your cluster name>--Clustername\
<your resource group>--Ressourcengruppe\
--keine Wartezeit\
--enable-cluster-autoscaler\
--eviction-policy Löschen\
--node-count 0\
--max. Anzahl 20\
--min-Anzahl 1\
--node-osdisk-size 200\
--scale-down-mode Löschen\
--os-type Linux\
--node-taints „nvidia.com/gpu=present:noschedule“\
--name a100mig7\
--node-vm-size Standard_NC24ADS_A100_v4\
--priority Spot\
--os-sku Ubuntu\
--gpu-instanzprofil mig1G
2. Aktualisieren Sie die Nodepools im Truefoundry-Cluster.
3. Stellen Sie Ihren Workload bereit, indem Sie GPU (mit Zählung 1) und den richtigen Nodepool auswählen.
GCP
Erstellen Sie einen Nodepool und übergeben Sie das mig_profile Gaspedal durch Passieren gpu_partition_size=1g.5gb[ODER einen der zulässigen Werte für das MIG-Profil finden Sie oben auf dieser Seite]
gcloud-Container-Knotenpools erstellen a100-40-mig-1g5gb\ INT ✘
<enter your project name>--projekt=\
<enter your region>--region=\
<enter your cluster name here>--cluster=\
--machine-type=a2-highgpu-1g\
--accelerator type=nvidia-tesla-a100, anzahl=1, gpu-partitionsgröße=1g.5gb\
--enable-autoscaling\
--total-min-nodes 0\
--total-max-Knoten 4\
--min-Provision-Knoten 0\
--num-nodes 0
AWS
Es ist nicht trivial, MIG-GPUs auf AWS derzeit auf verwaltete Weise zu unterstützen. Wenn Sie die Funktion jedoch ausprobieren möchten, lesen Sie bitte diese Dokumente
Timeslicing aktivieren
Azurblau
- Stellen Sie sicher, dass
Nvidia-Geräte-PluginDie Konfiguration ist korrekt eingestellttfy-gpu-OperatorDiagramm.
Gehe zuHelm -> tfy-gpu-Operator, klicken Sie auf Bearbeiten und stellen Sie sicher, dass die folgenden Zeilen in derWerte
azure-aks-gpu-Operator:
Geräte-Plugin:
Konfiguration:
daten:
alle: „“
time-Sliced-10: |-
Ausführung: v1
teilen:
Zeitliches Aufschneiden:
renameByDefault: wahr
Ressourcen:
- Name: nvidia.com/gpu
Repliken: 10
Name: Time-Slicing-Konfiguration
erstellen: wahr
Standard: alle
- Erstellen Sie einen Nodepool mit
Gerät-Plugin.configzeigt auf die richtige Time-Slicing-Konfiguration mit Azure CLI. Hier ist ein Beispielbefehl, um dasselbe zu tun.
als auch nodepool add\
<your cluster name>--Clustername\
<your resource group>--Ressourcengruppe\
--keine Wartezeit\
--enable-cluster-autoscaler\
--eviction-policy Löschen\
--node-count 0\
--max. Anzahl 20\
--min-Anzahl 0\
--node-osdisk-size 200\
--scale-down-mode Löschen\
--os-type Linux\
--node-taints „nvidia.com/gpu=present:noschedule“\
--name a100mig7\
--node-vm-size Standard_NC24ADS_A100_v4\
--priority Spot\
--os-sku Ubuntu\
--labels nvidia.com/device-plugin.config=time-Sliced-10
- Aktualisieren Sie die Nodepools auf dem Truefoundry-Cluster.
- Stellen Sie Ihren Workload bereit, indem Sie GPU (mit Zählung 1) und den richtigen Nodepool auswählen.
GCP
gcloud-Container-Knotenpools erstellen a100-40-frac-10\ ✔
--project=tfy-devtest\
--region=us-zentral1\
--cluster=tfy-gtl-b-us-central-1\
--machine-type=a2-highgpu-1g\
--accelerator type=nvidia-tesla-a100, count=1, gpu-sharing-strategy=Zeitteilung, maximal gemeinsam genutzte Clients pro GPU=10\
--enable-autoscaling\
--total-min-nodes 0\
--total-max-Knoten 4\
--min-Provision-Knoten 0\
--num-nodes 0
AWS
1. Stellen Sie sicher, dass Nvidia-Geräte-Plugin Die Konfiguration ist korrekt eingestellt tfy-gpu-OperatorDiagramm.
Gehe zu Helm -> tfy-gpu-Operator, klicken Sie auf Bearbeiten und stellen Sie sicher, dass die folgenden Zeilen in der Werte
aws-eks-gpu-Operator:
Geräte-Plugin:
Konfiguration:
daten:
alle: „“
time-Sliced-10: |-
Ausführung: v1
teilen:
Zeitliches Aufschneiden:
renameByDefault: wahr
Ressourcen:
- Name: nvidia.com/gpu
Repliken: 10
Name: Time-Slicing-Konfiguration
erstellen: wahr
Standard: alle
2. Erstellen Sie eine Knotengruppe auf AWS EKS mit der folgenden Bezeichnung:
Beschriftungen:
„nvidia.com/device-plugin.config“: „zeitversetzt-10"
Verwenden von fraktionierten GPUs in Ihrem Service
So verwenden Sie fraktionierte GPUs in Ihrem Service:
1. Stellen Sie sicher, dass Sie die gewünschten Nodepools hinzugefügt haben.
2. Bitte synchronisieren Sie die Cluster-Nodepools von Ihrem Cloud-Konto aus, indem Sie wie unten gezeigt zu Integrationen -> Clusters -> Sync gehen:

3. Sie können die Bereitstellung entweder über die Benutzeroberfläche von Truefoundry oder über das Python SDK durchführen.
Hinweis: Autoscaling von Nodepools funktioniert nur in GCP Cluster. Sie müssen Nodepools in Azure/AWS manuell hoch-/herunterskalieren.
Bereitstellung mit UI
1. Um einen Workload bereitzustellen, der einen Bruchteil der GPU nutzt, beginnen Sie mit der Bereitstellung Ihres Dienstes/Jobs auf Truefoundry und wählen Sie im Abschnitt „Ressourcen“ die Option nodepool selector
2. Sobald Sie den Nodepool Selector oben rechts im Abschnitt Ressourcen ausgewählt haben, können Sie nun die Fractional GPUs auf der Benutzeroberfläche sehen, die Sie auswählen können (wie unten gezeigt)


Bereitstellung mit Python-SDK
Sie können fraktionierte GPUs mithilfe des Python-SDK verwenden, wobei sich die Ressourcen wie folgt ändern:
1. Verwenden von MIG-GPUs
von servicefoundry import (
...
Bedienung,
Nvidia-MigGPU,
Knotenpool-Selektor,
)
Dienst = Dienst (
...
Resources=Ressourcen (
...
node=NodePoolSelector (
<add your nodepool name>nodepools = [“ „],
),
Geräte = [
NvidiaMigGPU (profile="1g.5gb“)
],
),
)
2. Verwenden der Timeslicing-GPU
von servicefoundry import (
Bedienung,
NVIDIA Timeslicing-GPU,
Knotenpool-Selektor,
)
Dienst = Dienst (
...
Resources=Ressourcen (
...
node=NodePoolSelector (
<add your nodepool name>nodepools = [“ „],
),
Geräte = [
NVIDIA TimeSlicing-GPU (gpu_memory=4000),
],
),
)
Wir bei Wahre Gießerei unterstützt Fractional GPUs auf extrem optimierte Weise.
TrueFoundry AI Gateway bietet eine Latenz von ~3—4 ms, verarbeitet mehr als 350 RPS auf einer vCPU, skaliert problemlos horizontal und ist produktionsbereit, während LiteLM unter einer hohen Latenz leidet, mit moderaten RPS zu kämpfen hat, keine integrierte Skalierung hat und sich am besten für leichte Workloads oder Prototyp-Workloads eignet.
Der schnellste Weg, deine KI zu entwickeln, zu steuern und zu skalieren



















.png)


.webp)




.webp)







