Megosztás a következőn keresztül:


GPU-k használata nagy számítási igényű számítási feladatokhoz

A következőkre vonatkozik: AKS az Azure Stack HCI 22H2-n, AKS Windows Serveren

A grafikus feldolgozási egységeket (GPU) nagy számítási igényű számítási feladatokhoz, például gépi tanuláshoz, mély tanuláshoz és sok máshoz használják. Ez a cikk azt ismerteti, hogyan használhat GPU-kat nagy számítási igényű számítási feladatokhoz az Azure Arc által engedélyezett AKS-ben.

Előkészületek

Ha az AKS-t a GPU-kompatibilis csomópontkészleteket futtató, 2022 októberénél régebbi előzetes verzióról frissíti, a kezdés előtt mindenképpen távolítsa el az összes GPU-t futtató számítási feladatfürtöt. Kövesse az ebben a szakaszban ismertetett lépéseket.

1. lépés: Az Nvidia-gazdagép illesztőprogramjának eltávolítása

Minden gazdagépen lépjen a Vezérlőpult > Programok hozzáadása vagy eltávolítása lapra, távolítsa el az NVIDIA-gazdaillesztőt, majd indítsa újra a gépet. A gép újraindítása után ellenőrizze, hogy az illesztőprogram sikeresen el lett-e távolítva. Nyisson meg egy emelt szintű PowerShell-terminált, és futtassa a következő parancsot:

Get-PnpDevice  | select status, class, friendlyname, instanceid | findstr /i /c:"3d video" 

A GPU-eszközöknek hibaállapotban kell megjelennie az alábbi példakimenetben látható módon:

Error       3D Video Controller                   PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000 
Error       3D Video Controller                   PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000 

2. lépés: A gazdagép illesztőprogramjának leválasztása a gazdagépről

A gazdaillesztő eltávolításakor a fizikai GPU hibaállapotba kerül. Az összes GPU-eszközt le kell választania a gazdagépről.

Minden GPU-eszközhöz (3D videovezérlő) futtassa a következő parancsokat a PowerShellben. Másolja ki a példányazonosítót; például PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000 az előző parancs kimenetéből:

$id1 = "<Copy and paste GPU instance id into this string>"
$lp1 = (Get-PnpDeviceProperty -KeyName DEVPKEY_Device_LocationPaths -InstanceId $id1).Data[0]
Disable-PnpDevice -InstanceId $id1 -Confirm:$false
Dismount-VMHostAssignableDevice -LocationPath $lp1 -Force

Annak ellenőrzéséhez, hogy a GPU-k megfelelően lettek-e leválasztva a gazdagépről, futtassa a következő parancsot. A GPU-kat a következő állapotba Unknown kell helyezni:

Get-PnpDevice  | select status, class, friendlyname, instanceid | findstr /i /c:"3d video"
Unknown       3D Video Controller               PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000 
Unknown       3D Video Controller               PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000 

3. lépés: Az NVIDIA kockázatcsökkentési illesztőprogram letöltése és telepítése

A szoftver tartalmazhat olyan összetevőket, amelyeket az NVIDIA Corporation vagy annak licencadói fejlesztettek ki és birtokoltak. Ezeknek az összetevőknek a használatára az NVIDIA végfelhasználói licencszerződése vonatkozik.

Az NVIDIA-kockázatcsökkentési illesztőprogram letöltéséhez tekintse meg az NVIDIA adatközpont dokumentációját . Az illesztőprogram letöltése után bontsa ki az archívumot, és telepítse a kockázatcsökkentési illesztőprogramot minden gazdagépen.

Invoke-WebRequest -Uri "https://docs.nvidia.com/datacenter/tesla/gpu-passthrough/nvidia_azure_stack_inf_v2022.10.13_public.zip" -OutFile "nvidia_azure_stack_inf_v2022.10.13_public.zip"
mkdir nvidia-mitigation-driver
Expand-Archive .\nvidia_azure_stack_inf_v2022.10.13_public.zip .\nvidia-mitigation-driver\

A kockázatcsökkentési illesztőprogram telepítéséhez keresse meg a kibontott fájlokat tartalmazó mappát, kattintson a jobb gombbal a nvidia_azure_stack_T4_base.inf fájlra, és válassza a Telepítés parancsot. Ellenőrizze, hogy a megfelelő illesztőprogramot használja-e; Az AKS jelenleg csak az NVIDIA Tesla T4 GPU-t támogatja.

A parancssorból is telepíthet, ha a mappára lép, és a következő parancsokat futtatja a kockázatcsökkentési illesztőprogram telepítéséhez:

pnputil /add-driver nvidia_azure_stack_T4_base.inf /install 
pnputil /scan-devices 

A kockázatcsökkentési illesztőprogram telepítése után a GPU-k ok állapotban jelennek meg az Nvidia T4_base – Leválasztva területen:

Get-PnpDevice  | select status, class, friendlyname, instanceid | findstr /i /c:"nvidia"
OK       Nvidia T4_base - Dismounted               PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000 
OK       Nvidia T4_base - Dismounted               PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000

4. lépés: Ismételje meg az 1–3. lépést

Ismételje meg az 1–3. lépést a feladatátvevő fürt minden csomópontjához.

Fontos

A GPU-kompatibilis virtuális gépek nem lesznek hozzáadva a feladatátvételi fürtszolgáltatáshoz a Windows Server 2019, a Windows Server 2022 vagy az Azure Stack HCI rendszerben.

Az AKS telepítése vagy frissítése

Tekintse meg az AKS rövid útmutatóját a PowerShell használatával, vagy az Arc által engedélyezett AKS telepítéséhez vagy frissítéséhez Windows Admin Center használatával.

új számításifeladat-fürt Létrehozás GPU-kompatibilis csomópontkészlettel

Jelenleg a GPU-kompatibilis csomópontkészletek használata csak Linux-csomópontkészletekhez érhető el.

New-AksHciCluster -Name "gpucluster" -nodePoolName "gpunodepool" -nodeCount 2 -osType linux -nodeVmSize Standard_NK6 

A számításifeladat-fürt telepítése után futtassa a következő parancsot a Kubeconfig lekéréséhez:

Get-AksHciCredential -Name gpucluster

Ellenőrizze, hogy be tudja-e ütemezni a GPU-kat

A GPU-csomópontkészlet létrehozása után győződjön meg arról, hogy a GPU-kat ütemezheti a Kubernetesben. Először listázhatja a fürtön lévő csomópontokat a kubectl get nodes paranccsal:

kubectl get nodes
NAME             STATUS  ROLES                 AGE   VERSION
moc-l9qz36vtxzj  Ready   control-plane,master  6m14s  v1.22.6
moc-lhbkqoncefu  Ready   <none>                3m19s  v1.22.6
moc-li87udi8l9s  Ready   <none>                3m5s  v1.22.6

Most használja a kubectl describe node parancsot annak ellenőrzéséhez, hogy a GPU-k ütemezhetők-e. A Kapacitás szakaszban a GPU-nak a következőként kell megjelennie: nvidia.com/gpu: 1.

kubectl describe <node> | findstr "gpu" 

A kimenetnek meg kell jelenítenie a gpu(ka)t a feldolgozó csomópontról, és az alábbihoz hasonlóan kell kinéznie:

         nvidia.com/gpu.compute.major=7
         nvidia.com/gpu.compute.minor=5
         nvidia.com/gpu.count=1
         nvidia.com/gpu.family=turing
         nvidia.com/gpu.machine=Virtual-Machine
         nvidia.com/gpu.memory=16384
         nvidia.com/gpu.product=Tesla-T4
Annotations:    cluster.x-k8s.io/cluster-name: gpucluster
                cluster.x-k8s.io/machine: gpunodepool-md-58d9b96dd9-vsdbl
                cluster.x-k8s.io/owner-name: gpunodepool-md-58d9b96dd9
         nvidia.com/gpu:   1
         nvidia.com/gpu:   1
ProviderID:         moc://gpunodepool-97d9f5667-49lt4
kube-system         gpu-feature-discovery-gd62h       0 (0%)    0 (0%)   0 (0%)      0 (0%)     7m1s
         nvidia.com/gpu   0     0

GPU-kompatibilis számítási feladat futtatása

Az előző lépések elvégzése után hozzon létre egy új YAML-fájlt teszteléshez; például gpupod.yaml. Másolja és illessze be a következő YAML-fájlt a gpupod.yaml nevű új fájlba, majd mentse:

apiVersion: v1
kind: Pod
metadata:
  name: cuda-vector-add
spec:
  restartPolicy: OnFailure
  containers:
  - name: cuda-vector-add
    image: "k8s.gcr.io/cuda-vector-add:v0.1"
    resources:
      limits:
        nvidia.com/gpu: 1

Futtassa a következő parancsot a mintaalkalmazás üzembe helyezéséhez:

kubectl apply -f gpupod.yaml

Ellenőrizze, hogy a pod elindult-e, befejeződött-e a futtatás, és hogy a GPU hozzá van-e rendelve:

kubectl describe pod cuda-vector-add | findstr 'gpu'

Az előző parancsnak egy hozzárendelt GPU-t kell megjelenítenie:

nvidia.com/gpu: 1
nvidia.com/gpu: 1

Ellenőrizze a pod naplófájljában, hogy a teszt sikeres volt-e:

kubectl logs cuda-vector-add

Az alábbi példakimenet az előző parancsból származik:

[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done

Ha verzióeltérési hibát kap az illesztőprogramok meghívásakor, például "A CUDA-illesztő verziója nem elegendő a CUDA-futtatókörnyezet verziójához", tekintse át az NVIDIA-illesztőmátrix kompatibilitási diagramját.

GYIK

Mi történik a GPU-kompatibilis csomópontkészlet frissítése során?

A GPU-kompatibilis csomópontkészletek frissítése ugyanazt a működés közbeni frissítési mintát követi, mint a normál csomópontkészletekhez. Ahhoz, hogy egy új virtuális gépen a GPU-kompatibilis csomópontkészletek sikeresen létre legyenek hozva a fizikai gazdagépen, egy vagy több fizikai GPU-nak rendelkezésre kell állnia a sikeres eszköz-hozzárendeléshez. Ez a rendelkezésre állás biztosítja, hogy az alkalmazások továbbra is futni tudjanak, amikor a Kubernetes podokat ütemez ezen a frissített csomóponton.

Frissítés előtti teendők:

  1. Tervezze meg az állásidőt a frissítés során.
  2. Fizikai gazdagépenként egy további GPU-val kell rendelkeznie, ha a Standard_NK6 vagy 2 további GPU-t futtat, ha Standard_NK12 fut. Ha teljes kapacitással fut, és nem rendelkezik további GPU-val, javasoljuk, hogy a frissítés előtt skálázzon le egy csomópontkészletet egyetlen csomópontra, majd a frissítés sikerességét követően skálázzon fel.

Mi történik, ha nem rendelkezem további fizikai GPU-kkal a fizikai gépemen a frissítés során?

Ha a frissítés olyan fürtön aktiválódik, amely nem rendelkezik további GPU-erőforrásokkal a működés közbeni frissítés megkönnyítése érdekében, a frissítési folyamat lefagy, amíg el nem érhető egy GPU. Ha teljes kapacitással fut, és nem rendelkezik további GPU-val, javasoljuk, hogy a frissítés előtt skálázzon le egy csomópontkészletet egyetlen csomópontra, majd a frissítés sikerességét követően skálázzon fel.

Következő lépések