IoT Edge-számítási feladat üzembe helyezése GPU-megosztással az Azure Stack Edge Pro-on
Ez a cikk azt ismerteti, hogy a tárolóalapú számítási feladatok hogyan oszthatják meg a GPU-kat az Azure Stack Edge Pro GPU-eszközön. A megközelítés magában foglalja a többfolyamatos szolgáltatás (MPS) engedélyezését, majd a GPU-számítási feladatok IoT Edge-alapú üzembe helyezésen keresztüli megadását.
Előfeltételek
Mielőtt hozzákezd, győződjön meg az alábbiakról:
Hozzáféréssel rendelkezik egy aktivált és számítási konfigurált Azure Stack Edge Pro GPU-eszközhöz. Rendelkezik a Kubernetes API-végponttal , és hozzáadta ezt a végpontot ahhoz a fájlhoz az
hosts
ügyfélen, amely hozzáfér az eszközhöz.Egy támogatott operációs rendszerrel rendelkező ügyfélrendszerhez fér hozzá. Windows-ügyfél használata esetén a rendszernek a PowerShell 5.0-s vagy újabb verzióját kell futtatnia az eszköz eléréséhez.
Mentse a következő üzembe helyezést
json
a helyi rendszeren. A fájlból származó információkat fogja használni az IoT Edge üzembe helyezésének futtatásához. Ez az üzembe helyezés az Nvidia által nyilvánosan elérhető egyszerű CUDA-tárolókon alapul.{ "modulesContent": { "$edgeAgent": { "properties.desired": { "modules": { "cuda-sample1": { "settings": { "image": "nvidia/samples:nbody", "createOptions": "{\"Entrypoint\":[\"/bin/sh\"],\"Cmd\":[\"-c\",\"/tmp/nbody -benchmark -i=1000; while true; do echo no-op; sleep 10000;done\"],\"HostConfig\":{\"IpcMode\":\"host\",\"PidMode\":\"host\"}}" }, "type": "docker", "version": "1.0", "env": { "NVIDIA_VISIBLE_DEVICES": { "value": "0" } }, "status": "running", "restartPolicy": "never" }, "cuda-sample2": { "settings": { "image": "nvidia/samples:nbody", "createOptions": "{\"Entrypoint\":[\"/bin/sh\"],\"Cmd\":[\"-c\",\"/tmp/nbody -benchmark -i=1000; while true; do echo no-op; sleep 10000;done\"],\"HostConfig\":{\"IpcMode\":\"host\",\"PidMode\":\"host\"}}" }, "type": "docker", "version": "1.0", "env": { "NVIDIA_VISIBLE_DEVICES": { "value": "0" } }, "status": "running", "restartPolicy": "never" } }, "runtime": { "settings": { "minDockerVersion": "v1.25" }, "type": "docker" }, "schemaVersion": "1.1", "systemModules": { "edgeAgent": { "settings": { "image": "mcr.microsoft.com/azureiotedge-agent:1.0", "createOptions": "" }, "type": "docker" }, "edgeHub": { "settings": { "image": "mcr.microsoft.com/azureiotedge-hub:1.0", "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"443/tcp\":[{\"HostPort\":\"443\"}],\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}]}}}" }, "type": "docker", "status": "running", "restartPolicy": "always" } } } }, "$edgeHub": { "properties.desired": { "routes": { "route": "FROM /messages/* INTO $upstream" }, "schemaVersion": "1.1", "storeAndForwardConfiguration": { "timeToLiveSecs": 7200 } } }, "cuda-sample1": { "properties.desired": {} }, "cuda-sample2": { "properties.desired": {} } } }
GPU-illesztőprogram, CUDA-verzió ellenőrzése
Az első lépés annak ellenőrzése, hogy az eszköz a szükséges GPU-illesztőt és CUDA-verziókat futtatja-e.
Csatlakozás az eszköz PowerShell-felületére.
Futtassa az alábbi parancsot:
Get-HcsGpuNvidiaSmi
Az Nvidia smi kimenetében jegyezze fel a GPU-verziót és a CUDA-verziót az eszközön. Ha Azure Stack Edge 2102-es szoftvert futtat, ez a verzió a következő illesztőprogram-verzióknak felel meg:
- GPU-illesztőprogram verziója: 460.32.03
- CUDA-verzió: 11.2
Íme egy példakimenet:
[10.100.10.10]: PS>Get-HcsGpuNvidiaSmi K8S-1HXQG13CL-1HXQG13: Tue Feb 23 10:34:01 2021 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 460.32.03 Driver Version: 460.32.03 CUDA Version: 11.2 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla T4 On | 0000041F:00:00.0 Off | 0 | | N/A 40C P8 15W / 70W | 0MiB / 15109MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+ [10.100.10.10]: PS>
Tartsa nyitva ezt a munkamenetet, mivel a cikk során az Nvidia smi kimenetének megtekintésére fogja használni.
Üzembe helyezés környezetmegosztás nélkül
Most már telepítheti az alkalmazást az eszközön, ha a többfolyamatos szolgáltatás nem fut, és nincs környezetmegosztás. Az üzembe helyezés az Azure Portalon keresztül történik az iotedge
eszközön található névtérben.
Felhasználó létrehozása az IoT Edge-névtérben
Először létrehoz egy felhasználót, aki csatlakozik a iotedge
névtérhez. Az IoT Edge-modulok az iotedge névtérben vannak üzembe helyezve. További információ: Kubernetes-névterek az eszközön.
Az alábbi lépéseket követve hozzon létre egy felhasználót, és adjon hozzáférést a felhasználónak a iotedge
névtérhez.
Csatlakozás az eszköz PowerShell-felületére.
Hozzon létre egy új felhasználót a
iotedge
névtérben. Futtassa az alábbi parancsot:New-HcsKubernetesUser -UserName <user name>
Íme egy példakimenet:
[10.100.10.10]: PS>New-HcsKubernetesUser -UserName iotedgeuser apiVersion: v1 clusters: - cluster: certificate-authority-data: ===========================//snipped //======================// snipped //============================= server: https://compute.myasegpudev.wdshcsso.com:6443 name: kubernetes contexts: - context: cluster: kubernetes user: iotedgeuser name: iotedgeuser@kubernetes current-context: iotedgeuser@kubernetes kind: Config preferences: {} users: - name: iotedgeuser user: client-certificate-data: ===========================//snipped //======================// snipped //============================= client-key-data: ===========================//snipped //======================// snipped ============================ PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
Másolja ki az egyszerű szövegben megjelenő kimenetet. Mentse a kimenetet konfigurációs fájlként (kiterjesztés nélkül) a
.kube
felhasználói profil mappájába a helyi gépen, példáulC:\Users\<username>\.kube
.Adjon hozzáférést a létrehozott felhasználónak a
iotedge
névtérhez. Futtassa az alábbi parancsot:Grant-HcsKubernetesNamespaceAccess -Namespace iotedge -UserName <user name>
Íme egy példakimenet:
[10.100.10.10]: PS>Grant-HcsKubernetesNamespaceAccess -Namespace iotedge -UserName iotedgeuser [10.100.10.10]: PS>
Részletes útmutatásért tekintse meg a Kubernetes-fürtök Azure Stack Edge Pro GPU-eszközön való kubectlen keresztüli kezelését Csatlakozás.
Modulok üzembe helyezése a portálon keresztül
IoT Edge-modulok üzembe helyezése az Azure Portalon keresztül. Nyilvánosan elérhető Nvidia CUDA-mintamodulokat fog üzembe helyezni, amelyek n-body szimulációt futtatnak.
Győződjön meg arról, hogy az IoT Edge szolgáltatás fut az eszközön.
Válassza ki az IoT Edge csempét a jobb oldali panelen. Nyissa meg az IoT Edge-tulajdonságokat>. A jobb oldali panelen válassza ki az eszközhöz társított IoT Hub-erőforrást.
Az IoT Hub-erőforrásban nyissa meg az Automatikus Eszközkezelés > IoT Edge-et. A jobb oldali panelen válassza ki az eszközhöz társított IoT Edge-eszközt.
Válassza a Set modules (Modulok beállítása) lehetőséget.
Válassza a + Hozzáadás > + IoT Edge modult.
A Modul Gépház lapon adja meg az IoT Edge-modul nevét és az image URI-t. Kép lekérési szabályzatának beállítása On create értékre.
A Környezeti változók lapon adja meg a NVIDIA_VISIBLE_DEVICES 0 értékként.
A Tároló létrehozása beállításai lapon adja meg a következő beállításokat:
{ "Entrypoint": [ "/bin/sh" ], "Cmd": [ "-c", "/tmp/nbody -benchmark -i=1000; while true; do echo no-op; sleep 10000;done" ], "HostConfig": { "IpcMode": "host", "PidMode": "host" } }
A beállítások az alábbiak szerint jelennek meg:
Select Add.
A hozzáadott modulnak futásként kell megjelennie.
Ismételje meg az összes lépést egy olyan modul hozzáadásához, amelyet az első modul hozzáadásakor követett. Ebben a példában adja meg a modul nevét.
cuda-sample2
Használja ugyanazt a környezeti változót, mint a két modul ugyanazt a GPU-t fogja használni.
Használja az első modulhoz megadott tároló-létrehozási beállításokat, és válassza a Hozzáadás lehetőséget.
A Modulok beállítása lapon válassza a Véleményezés + Létrehozás, majd a Létrehozás lehetőséget.
A két modul futtatókörnyezeti állapotának most futásként kell megjelennie.
Számítási feladatok üzembe helyezésének figyelése
Nyisson meg egy új PowerShell-munkamenetet.
Sorolja fel a névtérben
iotedge
futó podokat. Futtassa az alábbi parancsot:kubectl get pods -n iotedge
Íme egy példakimenet:
PS C:\WINDOWS\system32> kubectl get pods -n iotedge --kubeconfig C:\GPU-sharing\kubeconfigs\configiotuser1 NAME READY STATUS RESTARTS AGE cuda-sample1-869989578c-ssng8 2/2 Running 0 5s cuda-sample2-6db6d98689-d74kb 2/2 Running 0 4s edgeagent-79f988968b-7p2tv 2/2 Running 0 6d21h edgehub-d6c764847-l8v4m 2/2 Running 0 24h iotedged-55fdb7b5c6-l9zn8 1/1 Running 1 6d21h PS C:\WINDOWS\system32>
Két pod
cuda-sample1-97c494d7f-lnmns
cuda-sample2-d9f6c4688-2rld9
fut az eszközön.Bár mindkét tároló n-body szimulációt futtat, tekintse meg a GPU-kihasználtságot az Nvidia smi kimenetéből. Lépjen az eszköz PowerShell-felületére, és futtassa a parancsot
Get-HcsGpuNvidiaSmi
.Íme egy példakimenet, ha mindkét tároló az n-body szimulációt futtatja:
[10.100.10.10]: PS>Get-HcsGpuNvidiaSmi K8S-1HXQG13CL-1HXQG13: Fri Mar 5 13:31:16 2021 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 460.32.03 Driver Version: 460.32.03 CUDA Version: 11.2 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla T4 On | 00002C74:00:00.0 Off | 0 | | N/A 52C P0 69W / 70W | 221MiB / 15109MiB | 100% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | 0 N/A N/A 188342 C /tmp/nbody 109MiB | | 0 N/A N/A 188413 C /tmp/nbody 109MiB | +-----------------------------------------------------------------------------+ [10.100.10.10]: PS>
Mint látható, két tároló fut n-body szimulációval a GPU 0-n. Megtekintheti a megfelelő memóriahasználatukat is.
Miután a szimuláció befejeződött, az Nvidia smi kimenete azt mutatja, hogy nincsenek folyamatok futnak az eszközön.
[10.100.10.10]: PS>Get-HcsGpuNvidiaSmi K8S-1HXQG13CL-1HXQG13: Fri Mar 5 13:54:48 2021 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 460.32.03 Driver Version: 460.32.03 CUDA Version: 11.2 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla T4 On | 00002C74:00:00.0 Off | 0 | | N/A 34C P8 9W / 70W | 0MiB / 15109MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+ [10.100.10.10]: PS>
Az n-törzsszimuláció befejezése után tekintse meg a naplókat, hogy megismerje az üzembe helyezés részleteit és a szimuláció befejezéséhez szükséges időt.
Íme egy példakimenet az első tárolóból:
PS C:\WINDOWS\system32> kubectl -n iotedge --kubeconfig C:\GPU-sharing\kubeconfigs\configiotuser1 logs cuda-sample1-869989578c-ssng8 cuda-sample1 Run "nbody -benchmark [-numbodies=<numBodies>]" to measure performance. ==============// snipped //===================// snipped //============= > Windowed mode > Simulation data stored in video memory > Single precision floating point simulation > 1 Devices used for simulation GPU Device 0: "Turing" with compute capability 7.5 > Compute 7.5 CUDA device: [Tesla T4] 40960 bodies, total time for 10000 iterations: 170171.531 ms = 98.590 billion interactions per second = 1971.801 single-precision GFLOP/s at 20 flops per interaction no-op PS C:\WINDOWS\system32>
Íme egy példa a második tároló kimenetére:
PS C:\WINDOWS\system32> kubectl -n iotedge --kubeconfig C:\GPU-sharing\kubeconfigs\configiotuser1 logs cuda-sample2-6db6d98689-d74kb cuda-sample2 Run "nbody -benchmark [-numbodies=<numBodies>]" to measure performance. ==============// snipped //===================// snipped //============= > Windowed mode > Simulation data stored in video memory > Single precision floating point simulation > 1 Devices used for simulation GPU Device 0: "Turing" with compute capability 7.5 > Compute 7.5 CUDA device: [Tesla T4] 40960 bodies, total time for 10000 iterations: 170054.969 ms = 98.658 billion interactions per second = 1973.152 single-precision GFLOP/s at 20 flops per interaction no-op PS C:\WINDOWS\system32>
Állítsa le a modul üzembe helyezését. Az eszköz IoT Hub-erőforrásában:
Nyissa meg az automatikus eszköztelepítésI > IoT Edge-et. Válassza ki az eszköznek megfelelő IoT Edge-eszközt.
Nyissa meg a Modulok beállítása lehetőséget, és válasszon ki egy modult.
A Modulok lapon válasszon ki egy modult.
A Modul beállításai lapon állítsa le a kívánt állapotot. Select Update.
Ismételje meg a lépéseket az eszközön üzembe helyezett második modul leállításához. Válassza az Áttekintés + létrehozás, majd a Létrehozás lehetőséget. Ennek frissítenie kell az üzembe helyezést.
A Modulok beállítása lap többszöri frissítése. amíg a modul futtatókörnyezetének állapotale nem áll.
Üzembe helyezés környezetmegosztással
Most már üzembe helyezheti az n-body szimulációt két CUDA-tárolón, amikor az MPS fut az eszközön. Először engedélyeznie kell az MPS-t az eszközön.
Csatlakozás az eszköz PowerShell-felületére.
Ha engedélyezni szeretné az MPS-t az eszközön, futtassa a
Start-HcsGpuMPS
parancsot.[10.100.10.10]: PS>Start-HcsGpuMPS K8S-1HXQG13CL-1HXQG13: Set compute mode to EXCLUSIVE_PROCESS for GPU 0000191E:00:00.0. All done. Created nvidia-mps.service [10.100.10.10]: PS>
Kérje le az Nvidia smi kimenetét az eszköz PowerShell-felületéről. Láthatja a
nvidia-cuda-mps-server
folyamatot, vagy az MPS szolgáltatás fut az eszközön.Íme egy példakimenet:
[10.100.10.10]: PS>Get-HcsGpuNvidiaSmi K8S-1HXQG13CL-1HXQG13: Thu Mar 4 12:37:39 2021 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 460.32.03 Driver Version: 460.32.03 CUDA Version: 11.2 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla T4 On | 00002C74:00:00.0 Off | 0 | | N/A 36C P8 9W / 70W | 28MiB / 15109MiB | 0% E. Process | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | 0 N/A N/A 122792 C nvidia-cuda-mps-server 25MiB | +-----------------------------------------------------------------------------+ [10.100.10.10]: PS>Get-HcsGpuNvidiaSmi
Telepítse a korábban leállított modulokat. Állítsa be a Kívánt állapotot úgy, hogy a Modulok beállítása parancson keresztül fusson.
Íme a példakimenet:
PS C:\WINDOWS\system32> kubectl get pods -n iotedge --kubeconfig C:\GPU-sharing\kubeconfigs\configiotuser1 NAME READY STATUS RESTARTS AGE cuda-sample1-869989578c-2zxh6 2/2 Running 0 44s cuda-sample2-6db6d98689-fn7mx 2/2 Running 0 44s edgeagent-79f988968b-7p2tv 2/2 Running 0 5d20h edgehub-d6c764847-l8v4m 2/2 Running 0 27m iotedged-55fdb7b5c6-l9zn8 1/1 Running 1 5d20h PS C:\WINDOWS\system32>
Láthatja, hogy a modulok üzembe vannak helyezve és futnak az eszközön.
A modulok üzembe helyezésekor az n-body szimuláció is elindul mindkét tárolón. Íme a példakimenet, amikor a szimuláció befejeződött az első tárolón:
PS C:\WINDOWS\system32> kubectl -n iotedge logs cuda-sample1-869989578c-2zxh6 cuda-sample1 Run "nbody -benchmark [-numbodies=<numBodies>]" to measure performance. ==============// snipped //===================// snipped //============= > Windowed mode > Simulation data stored in video memory > Single precision floating point simulation > 1 Devices used for simulation GPU Device 0: "Turing" with compute capability 7.5 > Compute 7.5 CUDA device: [Tesla T4] 40960 bodies, total time for 10000 iterations: 155256.062 ms = 108.062 billion interactions per second = 2161.232 single-precision GFLOP/s at 20 flops per interaction no-op PS C:\WINDOWS\system32>
Íme a példakimenet, amikor a szimuláció befejeződött a második tárolón:
PS C:\WINDOWS\system32> kubectl -n iotedge --kubeconfig C:\GPU-sharing\kubeconfigs\configiotuser1 logs cuda-sample2-6db6d98689-fn7mx cuda-sample2 Run "nbody -benchmark [-numbodies=<numBodies>]" to measure performance. ==============// snipped //===================// snipped //============= > Windowed mode > Simulation data stored in video memory > Single precision floating point simulation > 1 Devices used for simulation GPU Device 0: "Turing" with compute capability 7.5 > Compute 7.5 CUDA device: [Tesla T4] 40960 bodies, total time for 10000 iterations: 155366.359 ms = 107.985 billion interactions per second = 2159.697 single-precision GFLOP/s at 20 flops per interaction no-op PS C:\WINDOWS\system32>
Kérje le az Nvidia smi kimenetét az eszköz PowerShell-felületéről, amikor mindkét tároló n-body szimulációt futtat. Íme egy példakimenet. Három folyamat létezik, a
nvidia-cuda-mps-server
folyamat (C típus) az MPS szolgáltatásnak, a/tmp/nbody
folyamatok (M + C típus) pedig a modulok által üzembe helyezett n-törzs számítási feladatoknak felelnek meg.[10.100.10.10]: PS>Get-HcsGpuNvidiaSmi K8S-1HXQG13CL-1HXQG13: Thu Mar 4 12:59:44 2021 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 460.32.03 Driver Version: 460.32.03 CUDA Version: 11.2 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla T4 On | 00002C74:00:00.0 Off | 0 | | N/A 54C P0 69W / 70W | 242MiB / 15109MiB | 100% E. Process | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | 0 N/A N/A 56832 M+C /tmp/nbody 107MiB | | 0 N/A N/A 56900 M+C /tmp/nbody 107MiB | | 0 N/A N/A 122792 C nvidia-cuda-mps-server 25MiB | +-----------------------------------------------------------------------------+ [10.100.10.10]: PS>Get-HcsGpuNvidiaSmi