Skapa en multiinstans-GPU-nodpool med mixad strategi i Azure Kubernetes Service (AKS) (förhandsversion)

Multi-instance GPU (MIG) delar upp en kompatibel NVIDIA GPU i partitioner med dedikerade beräknings- och minnesresurser. I ett AKS-kluster begär arbetslaster om dessa partitioner via Kubernetes utökade resurser. Använd mig-strategin (Mixed Multi-Instance GPU) för att matcha GPU-partitionsstorlekar med dina arbetsbelastningar. I stället för att fördela en hel GPU till en mindre arbetsbelastning eller använda samma partitionsstorlek för varje arbetsbelastning, kör du arbetsbelastningar med olika beräknings- och minnesbehov på samma GPU. Varje partition har isolerade beräknings- och minnesresurser. Den här metoden kan förbättra utnyttjandet av GPU:n genom att låta mindre arbetslaster dela på GPU-kapaciteten med större arbetslaster.

Till exempel kan en NVIDIA A100 80 GB GPU tillhandahålla en stor partition, en medelhög partition och två små partitioner. Fyra arbetsbelastningar kan köras samtidigt, var och en med en partition dimensionerad efter sina behov, enligt följande exempel på blandad layout.

Diagram som visar en exempellayout för GPU-partitionering med flera instanser med blandad strategi.

Den här artikeln visar hur du skapar en blandad MIG-nodpool, verifierar partitionsallokering och kör exempelarbetsbelastningar.

Se GPU-strategier för flera instanser i AKS för strategival. För uniforma partitioner, se Skapa en MIG-nodpool med en enda strategi.

Important

AKS-förhandsversionsfunktioner är tillgängliga via självbetjäning och frivillig registrering. Förhandsversioner tillhandahålls "i befintligt skick" och "i mån av tillgång," och de är undantagna från servicenivåavtal och begränsad garanti. AKS-förhandsversioner stöds delvis av kundsupport efter bästa förmåga. Därför är dessa funktioner inte avsedda för produktionsanvändning. Mer information finns i följande supportartiklar:

Innan du börjar

Innan du konfigurerar en blandad MIG-nodpool kontrollerar du att du har följande förutsättningar:

  • Den här artikeln förutsätter att du har ett befintligt AKS-kluster. Om du inte har något kluster skapar du ett med hjälp av Azure CLI, Azure PowerShell eller Azure portalen.
  • Du har installerat Azure CLI med version 2.85.0 eller senare och tilläggsversionen aks-preview22.0.0b15 eller senare. Kör az --version för att kontrollera din Azure CLI version.
  • En MIG-kompatibel GPU VM-storlek som stöds i den valda AKS-regionen. Se till att du har tillräckligt med regional och GPU-familj vCPU-kvot för den VM-storlek och det nodantal som du planerar att distribuera.
  • En kompatibel mixed MIG-layout för den valda GPU:n. Välj partitioneringsprofiler som stöds och som uppfyller GPU:ns kapacitet och placeringskrav. Mer information finns i Förstå blandade MIG-profiler.
  • MIG-nodpoolen använder en AKS Linux-nodbild baserad på VHD-version 202609.01.0 eller senare.
  • Funktionerna ManagedGPUExperiencePreview och MixedMIGStrategyPreview har registrerats i din prenumeration. Anvisningar finns i artikeln Registrera förhandsgranskningsfunktionerna.

Limitations

  • Nodpooler med AzureContainerLinux och Windows OS-SKU:er stöds för närvarande inte med den här funktionen.
  • Den här funktionen stöder för närvarande inte automatisk skalning av MIG-noder med blandad strategi med hjälp av AKS Cluster Autoscaler.
  • En konfiguration med blandad strategi måste uppfylla GPU:ns partitioneringskapacitet och placeringsbegränsningar.
  • Du kan inte ändra profilkonfigurationen efter att MIG-nodpoolen har skapats. Skapa en ersättningspool för att ändra layouten eller sluta använda MIG. Försök inte inaktivera MIG genom att uppdatera strategin till None.

Förstå blandade MIG-profiler

En profil, till exempel MIG3g, definierar storleken på en GPU-partition. En layout är den uppsättning profiler som du konfigurerar på en nodpool. Varje profil i layouten skapar en partition som arbetsbelastningar begär som en utökad resurs.

MIG-strategin styr både den kompatibla profilkonfigurationen och de resursnamn som arbetsbelastningar begär.

Strategy Profilkonfiguration Arbetsbelastningsresurs
Enskild Ange exakt en profil och sedan skapar AKS en enhetlig partitionslayout. nvidia.com/gpu: Varje enhet representerar en MIG-partition, inte hela den fysiska GPU:n.
Blandat Ange en eller flera kompatibla profiler som utgör en layout som stöds. Upprepa en profil för att begära flera partitioner av den storleken. En profilspecifik resurs, till exempel nvidia.com/mig-1g.10gb.

Profilvärdena som stöds är MIG1g, MIG2g, MIG3g, MIG4goch MIG7g. Följande tabell visar partitionen som varje profil skapar på en NVIDIA A100 80 GB GPU, till exempel GPU:n i Standard_NC24ads_A100_v4. GPU-minne per profil beror på NVIDIA GPU-modellen.

Profile beräkningssegment Partition Arbetsbelastningsresurs
MIG1g 1 1g.10gb nvidia.com/mig-1g.10gb
MIG2g 2 2g.20gb nvidia.com/mig-2g.20gb
MIG3g 3 3g.40gb nvidia.com/mig-3g.40gb
MIG4g 4 4g.40gb nvidia.com/mig-4g.40gb
MIG7g 7 7g.80gb nvidia.com/mig-7g.80gb

Förbered din miljö

Ange miljövariabler, registrera förhandsversionsfunktionerna och anslut till ditt befintliga kluster innan du lägger till den blandade MIG-nodpoolen.

Ange miljövariabler

  1. Ange följande miljövariabler för ditt befintliga kluster. Exempelmanifesten senare i den här artikeln använder migmixed för MIXED_POOL.

    export SUBSCRIPTION_ID="<subscription-id>"
    export RESOURCE_GROUP="<my-resource-group>"
    export CLUSTER_NAME="<my-cluster-name>"
    export MIXED_POOL="<mig-pool-name>"
    

Registrera förhandsgranskningsfunktionerna

  1. Installera eller uppdatera aks-preview tillägget.

    az extension add --name aks-preview --upgrade --yes
    
  2. Registrera funktionen ManagedGPUExperiencePreview .

    az feature register \
      --namespace Microsoft.ContainerService \
      --name ManagedGPUExperiencePreview
    
  3. Registrera funktionen MixedMIGStrategyPreview .

    az feature register \
      --namespace Microsoft.ContainerService \
      --name MixedMIGStrategyPreview
    
  4. Bekräfta statusen för registreringen av funktionen Hanterad GPU.

    az feature show \
      --namespace Microsoft.ContainerService \
      --name ManagedGPUExperiencePreview \
      --query properties.state --output tsv
    
  5. Bekräfta registreringstillståndet för blandad MIG-funktion.

    az feature show \
      --namespace Microsoft.ContainerService \
      --name MixedMIGStrategyPreview \
      --query properties.state --output tsv
    
  6. När båda tillstånden har returnerat Registered, uppdaterar du resursproviderregistreringen.

    az provider register --namespace Microsoft.ContainerService
    

Ansluta till ditt AKS-kluster

  1. Hämta autentiseringsuppgifterna för klustret.

    az aks get-credentials \
      --resource-group "$RESOURCE_GROUP" \
      --name "$CLUSTER_NAME"
    
  2. Kontrollera anslutningen och den befintliga nodstatusen.

    kubectl get nodes
    

Aktivera mixed MIG på en ny nodpool

Använd Azure CLI för att skapa en blandad MIG-nodpool. Välj fliken för nodens OS SKU.

Om du vill använda os-standard-SKU:n skapar du nodpoolen utan att ange en OS-SKU. Nodpoolen är konfigurerad för standardoperativsystemet baserat på Kubernetes-versionen av klustret.

Skapa en blandad MIG-nodpool med hjälp av följande A100-layout. Ange --enable-managed-gpu=true, --gpu-mig-strategy Mixedoch MIG-profillistan tillsammans. AKS bevarar den angivna listordningen och hanterar placeringsordningen under nodkonfigurationen.

az aks nodepool add \
  --resource-group "$RESOURCE_GROUP" \
  --cluster-name "$CLUSTER_NAME" \
  --name "$MIXED_POOL" \
  --node-vm-size "Standard_NC24ads_A100_v4" \
  --enable-managed-gpu=true \
  --gpu-mig-strategy Mixed \
  --gpu-mig-profiles MIG3g MIG2g MIG1g MIG1g \
  --node-count 1

Verifiera den blandade MIG-konfigurationen

Kontrollera nodpoolens konfiguration, nodberedskap och annonserade resurser separat. Lyckad etablering av GPU-noder bekräftar inte att en arbetsbelastning kan använda en partition.

  1. Granska poolkonfigurationen och nodbilden.

    az aks nodepool show \
      --resource-group "$RESOURCE_GROUP" \
      --cluster-name "$CLUSTER_NAME" \
      --name "$MIXED_POOL" \
      --query "{state:provisioningState,image:nodeImageVersion,gpu:gpuProfile.nvidia}" \
      --output json
    

    Bekräfta att utdata matchar följande värden:

    Utdatafält Förväntat värde
    state Succeeded
    gpu.managementMode Managed
    gpu.driverMode DevicePlugin
    gpu.migStrategy Mixed
    gpu.migProfiles MIG3g, MIG2g, MIG1g, MIG1g (båda MIG1g posterna)
  2. Vänta tills noderna i den blandade MIG-nodpoolen blir Ready.

    kubectl wait --for=condition=Ready node \
      -l agentpool="$MIXED_POOL" --timeout=600s
    
  3. Granska de allokerbara NVIDIA-resurserna på varje nod i poolen.

     kubectl describe nodes -l agentpool="$MIXED_POOL"
    

    För Standard_NC24ads_A100_v4 med layouten MIG3g MIG2g MIG1g MIG1g bör varje nods Allocatable avsnitt innehålla följande resursantal tillsammans med dess CPU, minne och andra resurser:

    Allocatable:
       nvidia.com/mig-1g.10gb:  2
       nvidia.com/mig-2g.20gb:  1
       nvidia.com/mig-3g.40gb:  1
    

    Dessa antal är allokerbar kapacitet, inte en rapport över för närvarande oanvända partitioner. Granska schemalagda poddbegäranden för att fastställa återstående kapacitet.

Kör arbetsbelastningar på olika partitionsstorlekar

Använd exakt de utökade resursnamn som dina noder annonserar. I följande exempel begär du en 3g.40gb partition och en 1g.10gb partition. Varje container kör nvidia-smi en gång för att rapportera GPU-enhetsinformation och avslutas sedan.

  1. Skapa en fil med namnet mixed-mig-workloads.yaml med följande manifest. Väljarna agentpool använder migmixed poolnamnet. Om du använde ett annat namn för MIXED_POOL, uppdaterar du båda väljarna.

    apiVersion: v1
    kind: Pod
    metadata:
      name: mixed-mig-pod-3g
    spec:
      restartPolicy: Never
      nodeSelector:
        agentpool: migmixed
      containers:
        - name: gpu-test
          image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu
          command: ["nvidia-smi"]
          resources:
            limits:
              nvidia.com/mig-3g.40gb: "1"
    ---
    apiVersion: v1
    kind: Pod
    metadata:
      name: mixed-mig-pod-1g
    spec:
      restartPolicy: Never
      nodeSelector:
        agentpool: migmixed
      containers:
        - name: gpu-test
          image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu
          command: ["nvidia-smi"]
          resources:
            limits:
              nvidia.com/mig-1g.10gb: "1"
    

    Kubernetes använder en utökad resursgräns som begäran när du utelämnar en separat begäran. Ange partitionstal som heltal. Om du anger både begäranden och gränser för samma GPU-resurs använder du lika värden.

  2. Distribuera exempelpoddarna.

    kubectl apply -f mixed-mig-workloads.yaml
    
  3. Vänta tills podden med den större partitionen har slutförts utan fel.

    kubectl wait --for=jsonpath='{.status.phase}'=Succeeded \
      pod/mixed-mig-pod-3g --timeout=300s
    
  4. Vänta tills podden för den mindre partitionen har slutförts.

    kubectl wait --for=jsonpath='{.status.phase}'=Succeeded \
      pod/mixed-mig-pod-1g --timeout=300s
    
  5. Kontrollera poddernas nodtilldelningar.

    kubectl get pods mixed-mig-pod-3g mixed-mig-pod-1g -o wide
    
  6. Läs GPU-enhetsinformationen för podden med den större partitionen.

    kubectl logs mixed-mig-pod-3g
    

    Kontrollera att nvidia-smi rapporterar GPU:n och en tilldelad MIG-enhet utan fel. Podden begär nodens annonserade nvidia.com/mig-3g.40gb resurs.

  7. Läs GPU-enhetsinformationen för den mindre partitionspodden.

    kubectl logs mixed-mig-pod-1g
    

    Kontrollera att nvidia-smi rapporterar GPU:n och en tilldelad MIG-enhet utan fel. Podden begär nodens annonserade nvidia.com/mig-1g.10gb resurs. Utdataformatering beror på drivrutinsversionen; standardkommandot visar inte nödvändigtvis profilnamn. Fysisk GPU-information är inte bevis för att podden har åtkomst till hela GPU:n.

    Poddar som har slutförts visas Completed i kubectl get pods. De förblir inte redo eller behåller sin partitionsallokering när containern har avslutats. Om väntetiden är slut kontrollerar du poddens status, loggar och händelser för att skilja schemaläggningsproblem från avbildnings- eller containerfel.

För en Single strategipool begär du nvidia.com/gpu: "1" i stället för en profilspecifik resurs. Återanvänd inte resursnamnet för att begära en partition från den blandade poolen i det här exemplet.

Skala och underhålla nodpoolen

Skalning bevarar den blandade MIG-nodpoolens ursprungliga strategi- och profillista. Kontrollera att du har kvot- och GPU-kapacitet innan du lägger till noder.

az aks nodepool scale \
  --resource-group "$RESOURCE_GROUP" \
  --cluster-name "$CLUSTER_NAME" \
  --name "$MIXED_POOL" \
  --node-count 2

Upprepa nodberedskapen och allokeringsbara resurskontroller för alla noder. Med Standard_NC24ads_A100_v4 och layouten MIG3g MIG2g MIG1g MIG1g annonserar varje nod samma fyra partitioner: en 3g.40gb, en 2g.20gboch två 1g.10gb. Fler noder lägger till kapacitet för de konfigurerade partitionstyperna. de lägger inte till saknade typer.

Uppdatera nodbilden med hjälp av node-image-only uppgraderingskommandot. Planera för störningar i arbetsbelastningen samt GPU-kvot och kapacitet för ersättningsnoder under underhåll.

az aks nodepool upgrade \
  --resource-group "$RESOURCE_GROUP" \
  --cluster-name "$CLUSTER_NAME" \
  --name "$MIXED_POOL" \
  --node-image-only

Optimera partitionsanvändningen för utvärdering av produktionsarbetsbelastningar

Använd följande metoder för att utvärdera din produktionsarbetsbelastningsmix i en AKS-testmiljö innan du planerar en produktionsdistribution.

  • Dimensionera partitioner utifrån mätningar. Benchmarka representativa inferens-, batch- och träningsarbetslaster. Mät enhetens maximala minnesanvändning, beräkningsutnyttjande, dataflöde och svarstid under realistisk samtidighet. Välj den minsta partition som uppfyller dina arbetsbelastningskrav med minnesutrymme.
  • Anpassa layouten till samtidig efterfrågan. Layouten MIG3g MIG2g MIG1g MIG1g på Standard_NC24ads_A100_v4 ger en stor, en medelstor och två små partitioner per nod. Två samtidiga begäranden för en stor partition behöver två noder även om mindre partitioner är inaktiva. Välj layouter utifrån fördelningen av samtidig efterfrågan, inte bara totalt GPU-minne.
  • Behandla kapacitet som separata resurstyper. Spåra begärd och tillgänglig kapacitet för varje nvidia.com/mig-*-resurs. Kubernetes kombinerar inte små partitioner till en större eller ändrar storlek på den konfigurerade layouten för att uppfylla en väntande podd.
  • Använd separata pooler för olika arbetsbelastningsklasser. Behåll arbetsbelastningar som behöver en icke-partitionerad GPU på en pool som skapats utan MIG-inställningar. Använd en enhetlig enskild strategi när alla jobb behöver samma partitionsstorlek och blandade layouter när arbetsbelastningar behöver olika storlekar. Jämför prestanda för distribuerade arbetsbelastningar eller arbetsbelastningar med flera GPU:er separat i stället för att anta att de fungerar som fullständiga GPU-arbetsbelastningar.
  • Ange processor- och minnesbegäranden samt GPU-gränser. En tillgänglig GPU-partition säkerställer inte att en nod har tillräckligt med värdminne eller PROCESSOR för att köra arbetsbelastningen. Använd en Deployment eller ett Job som passar programmets livscykel i stället för inspektionspoddarna i den här artikeln.
  • Övervaka arbetsbelastningsresultat och partitionsanvändning tillsammans. Jämför svarstid, dataflöde, GPU-minnestryck och schemaläggningsfel efter MIG-profil.
  • Verifiera programstacken. Testa kompatibiliteten för testramverk, CUDA, drivrutin och partition. Lås verifierade versioner eller digest för programavbilder och använd inte inspektionsavbilden som en programavbild för produktion.

Felsöka konfiguration och schemaläggning

Om en exempelpodd stannar Pendingska du kontrollera dess schemaläggningshändelser och nodens allokerade resurser.

Granska schemaläggningshändelserna för en väntande exempelpodd, till exempel mixed-mig-pod-3g från Kör arbetsbelastningar på olika partitionsstorlekar:

kubectl describe pod mixed-mig-pod-3g

Granska de allokerade resursbegäranden på den blandade MIG-nodpoolens noder:

kubectl describe nodes -l agentpool="$MIXED_POOL"

Vanliga orsaker är bland annat:

  • Podden begär en resurs som poolen inte annonserar. En begäran om nvidia.com/mig-4g.40gb väntar till exempel på en pool som skapats med MIG3g MIG2g MIG1g MIG1g, eftersom poolen inte annonserar den resursen. Att skala poolen löser inte det här matchningsfelet.
  • Noden saknar andra resurser. Om GPU-partitionerna verkar vara tillgängliga, kontrollera CPU, värdminne, taints och tillhörighet.

Relaterad vägledning finns i felsökning för MIG med enskild strategi och hanterad GPU-verifiering. Konfigurationskraven i den här artikeln gäller för den nya förhandsversionen av mixad profil.

Inaktivera mixed MIG-strategi och ta bort exempelresurser

Inaktivera blandad MIG-användning genom att migrera arbetsbelastningar och ta bort den blandade MIG-nodpoolen. Förhandsgranskningen tillhandahåller inte någon ändring av layouten på plats eller en None strategi. Att avregistrera en prenumerationsfunktion konverterar inte befintliga noder eller ersätta borttagning av nodpooler.

Ta bort eller ersätt den blandade MIG-nodpoolen

Innan du tar bort en nodpool som kör programarbetsbelastningar, etablerar du en ersättnings-MIG-pool med tillräcklig kapacitet, uppdaterar resursbegäranden och väljare för arbetsbelastningar och kontrollerar programmets hälsa. Om du vill skapa en icke-partitionerad GPU-pool utelämnar du både --gpu-mig-strategy och --gpu-mig-profiles. Om du vill gå över till en enda strategi skapar du en ny nodpool med --gpu-mig-strategy Single och exakt en profil.

Skapa en hanterad ersättningsnodpool med full GPU, till exempel, endast om dina applikationer fortfarande behöver GPU-kapacitet:

az aks nodepool add \
   --resource-group "$RESOURCE_GROUP" \
   --cluster-name "$CLUSTER_NAME" \
   --name gpufull \
   --node-vm-size "Standard_NC24ads_A100_v4" \
   --enable-managed-gpu=true \
   --node-count 1

Kontrollera att ersättningsnoden är Ready och annonserar nvidia.com/gpu i stället för MIG-partitionsresurser:

kubectl describe nodes -l agentpool=gpufull

Bekräfta att True är Conditions i varje nods Ready-avsnitt. I avsnittet Allocatable bekräftar du att nvidia.com/gpu finns och att MIG-partitionsresurser inte annonseras.

Uppdatera migrerade arbetsbelastningar för att begära nvidia.com/gpu och välj agentpool: gpufull. Verifiera på nytt programmets storlek och beteende på den fullständiga GPU:n innan du tar bort den gamla nodpoolen. Om du inte behöver ersätta GPU-kapacitet hoppar du över det här exemplet och tar bort exempelpoolen direkt.

Ta bort exempelpoddar och den blandade MIG-nodpoolen

  1. Ta bort inspektionspoddarna.

    kubectl delete pod mixed-mig-pod-3g mixed-mig-pod-1g \
      --ignore-not-found=true
    
  2. Kontrollera att exempelpoddarna är borta.

    kubectl get pods \
      --field-selector metadata.name=mixed-mig-pod-3g
    
    kubectl get pods \
      --field-selector metadata.name=mixed-mig-pod-1g
    
  3. När du har migrerat andra arbetsbelastningar tar du bort den blandade MIG-nodpoolen. Vänta tills åtgärden har slutförts innan du påbörjar en annan klusteråtgärd.

    az aks nodepool delete \
      --resource-group "$RESOURCE_GROUP" \
      --cluster-name "$CLUSTER_NAME" \
      --name "$MIXED_POOL"
    
  4. Kontrollera att den borttagna nodpoolen inte längre visas.

    az aks nodepool list \
      --resource-group "$RESOURCE_GROUP" \
      --cluster-name "$CLUSTER_NAME" \
      --query "[?name=='$MIXED_POOL'].name" \
      --output json
    

    Utdata ska vara [].

  5. Kontrollera att inga Kubernetes-noder finns kvar för den nodpoolen.

    kubectl get nodes -l agentpool="$MIXED_POOL"
    

    Kommandot bör rapportera att det inte finns några matchande resurser när borttagningen har slutförts.

Nästa steg