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:
- Tervezze meg az állásidőt a frissítés során.
- 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.