- Artikel
- 11 minuter att läsa
Den här artikeln beskriver hur containeriserade arbetsbelastningar kan dela GPU:er på din Azure Stack Edge Pro GPU-enhet. Metoden innebär att du aktiverar multi-threading-tjänsten (MPS) och sedan specificerar GPU-arbetsbelastningarna genom en IoT Edge-implementering.
Klaga
Innan du börjar, kontrollera följande:
Så du har tillgång till en Azure Stack Edge Pro GPU-enhetaktiverasoch harkonfigurerad beräkning. Du harKubernetes API-slutpunktoch du lade till denna slutpunkt
värd
Fil på klienten som kommer åt enheten.Logga in på ett kundsystem med enOperativsystem som stöds. Om du använder en Windows-klient måste ditt system köra PowerShell 5.0 eller senare för att komma åt enheten.
Spara följande distribution
json
på det lokala systemet. Informationen i den här filen används för att köra IoT Edge-distributionen. Denna fördelning baseras påenkla CUDA-behållaresom är allmänt tillgängliga från Nvidia.{ "modulesContent": { "$edgeAgent": { "properties.desired": { "modules": { "cuda-sample1": { "settings": { "image": "nvidia/samples:nbody", "createOptions ": "{\"Einstiegspunkt\":[\"/bin/sh\"],\"Cmd\":[\"-c\",\"/tmp/nbody -benchmark -i=1000; während wahr; eko no-op; sleep 10000;done\"],\"HostConfig\":{\"IpcMode\":\"host\",\"PidMode\":\"host\"}}" }, "type": "docker" , "version": "1.0", "env": { "NVIDIA_VISIBLE_DEVICES": { "value": "0" } }, "state": "kör", "restartPolicy": "aldrig" }, "cuda-sample2 ": { "settings": { "image": "nvidia/samples:nbody", "createOptions": "{\"Entrypoint\":[\"/bin/sh\"],\"Cmd\": [ „-c“, „/tmp/nbody -benchmark -i=1000; under tiden; echo no-op; sleep 10000;done\"],\"HostConfig\":{\"IpcMode\":\"host\" ",\"PidMode\":\"host\"}}" }, "type": "docker" , "version": "1.0", "env": { "NVIDIA_VISIBLE_DEVICES": { "value": "0 " } }, "state": "kör", "restartPolicy": "nie" } }, "Zeitausführung ": { "configuration": { "minDockerVersion": "v1.25" }, "type": "docker" }, "schemaVersion": "1.1", "systemModules": { "edgeAgent": { "configuration": { "image": "mcr.microsoft.com/azureiotedge-agent:1.0", "createOptions": "" } , "type": "docker" }, "edgeHub": { "configuration": { "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": "kör", "restartPolicy": "alltid" } } } }, "$edgeHub": { "Eigenschaften. Gewünscht" : { "routes": { "route": "FRÅN /meddelanden/* INTO $uppströms" }, "schemaVersion": "1.1", "storeAndForwardConfiguration": { "t imeToLiveSecs": 7200 } } }, "cuda -sample1": { "properties.desired": {} }, "cuda-sample2": { "properties.desired": {} } }}
Kontrollera GPU-drivrutinen, CUDA-version
Det första steget är att verifiera att enheten kör de nödvändiga GPU-drivrutinerna och CUDA-versionerna.
Anslut till enhetens PowerShell-gränssnitt.
Kör följande kommando:
Skaffa HcsGpuNvidiaSmi
Lägg märke till GPU-versionen och CUDA-versionen av enheten i Nvidia-smi-utgången. Om du kör programvaran Azure Stack Edge 2102, motsvarar denna version följande drivrutinsversioner:
- GPU-drivrutinversion: 460.32.03
- CUDA-version: 11.2
Här är ett exempel på utgången:
[10.100.10.10]: PS>Get-HcsGpuNvidiaSmiK8S-1HXQG13CL-1HXQG13: Tis 23 feb 10:34:01 2021+------------------------ ------------ - -------------------------------------------- -------------------------- - ------------------+| NVIDIA SMI 460.32.03 Drivrutinsversion: 460.32.03 CUDA Version: 11.2 ||-------------------------------------- + - ----------------------+----------------------------- - ---- - ------+| GPU-namn persistence-M| Buss ID No.A | Att rita. flyktigt ECC || Fläkttemperatur Perf Pwr:Use/Cap| Minnesanvändning | GPU Util Beräkning M. || | | ||===========================+================== === =+========================|| 0 Tesla T4 på | 0000041F:00:00.0 Av | 0 || Ej tillämpligt 40C P8 15W / 70W | 0MiB / 15109MiB | 0% standard || | | N/A |+----------------------------------------+---- --------------- ----------+-------------------- ----- -------------------------------------------------------------- -------------------------------------------------------------- -+| Processer: || GPU GI CI PID Typ Processnamn GPU-minne || ID Användning av ID ||============================================= =================================|| Inga pågående processer hittades |+---------------------------------------------------- ------------------------------------------------------------ -------------------------- ------ +[ 10.100.10.10]:PS>
Håll den här sessionen öppen eftersom du kommer att använda den för att se Nvidias smi-utdata genom hela artikeln.
Implementering utan kontextdelning
Du kan nu distribuera en app till enheten när den flertrådade tjänsten inte körs och sammanhanget inte delas. Distributionen görs via Azure-portalen i namnområdetskall
det beror på enheten.
Skapa användare i IoT Edge-namnområdet
Skapa först en användare att ansluta tillskall
Namnutrymme IoT Edge-moduler implementeras i iotedge-namnutrymmet. För mer information, seKubernetes namnrymder på din enhet.
Följ dessa steg för att skapa en användare och ge dem åtkomstskall
namnutrymme
Anslut till enhetens PowerShell-gränssnitt.
Skapa en ny användare i
skall
Namnutrymme Kör följande kommando:Ny - HcsKubernetesUser - Användarnamn <användarnamn>
Här är ett exempel på utgången:
[10.100.10.10]: PS>New-HcsKubernetesUser -UserName iotedgeuserapiVersion: v1clusters:- Kluster: Certifikatutfärdare Data: ================================== //cut //======================// cut //================ === ========== Server: https://compute.myasegpudev.wdshcsso.com:6443 Namn: kubernetescontexts:- Kontext: Kluster: kubernetes Användare: iotedgeuser Namn: iotedgeuser@kubernetescontextcurrent : iotedgepreferenceskind @fkubigerneteskind: : {}users:- name: iotedgeuser user: client-certificate-data: ============================/ /truncate // =======================// trunkera //==================== === ======= klient-nyckel-data: ===========================//cut off / /== === ==================// Trunkera =============================== = PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
Kopiera utdata som visas i vanlig text. Spara utdata somkonfigurationsfil(inget tillägg) I
.varelse
Din användarprofilmapp på den lokala datorn,C:\Users\<användarnamn>\.be
till exempel .Ge åtkomst till användaren du skapade
skall
Namnutrymme Kör följande kommando:See AlsoDirekt migrering till Azure Managed Instance för Apache Cassandra med Apache Spark och en dubbelskrivproxyKapitel 2: Installera och använda Azure RTOS NetX Duo DHCP-klientenAnvända en hanterad identitet med en applikation i ett Service Fabric-hanterat kluster - Azure Service FabricBilaga A: Funktionsbeskrivning av Azure RTOS NetX Duo DHCP-klienttjänster för att återställa tillståndGrant-HcsKubernetesNamespace Access -Namespace iotedge -Användarnamn <Benutzername>
Här är ett exempel på utgången:
[10.100.10.10]: PS>Grant-HcsKubernetesNamespace Access -Namespace iotedge -UserName iotedgeuser[10.100.10.10]: PS>
För detaljerade instruktioner seAnslut till och hantera ett Kubernetes-kluster med kubectl på din Azure Stack Edge Pro GPU-enhet.
Distribuera moduler via portalen
Distribuera IoT Edge-moduler via Azure-portalen. De distribuerar allmänt tillgängliga exempel på Nvidia CUDA-moduler som kör en N-Body-simulering. För mer information, seSchein-N-Body-Text.
Se till att IoT Edge-tjänsten körs på enheten.
I den högra rutan väljer du panelen IoT Edge. Gå tillIoT Edge > Egenskaper. I den högra rutan väljer du IoT Hub-resursen som är kopplad till enheten.
Gå till IoT Hub-resursenAutomatisk enhetshantering > IoT Edge. I den högra rutan väljer du den IoT Edge-enhet som är kopplad till din enhet.
Väljamodulär ängel.
Välja+ Lägg till > + IoT Edge-modul.
i flikenmodulkonfigurationdu berusadIoT Edge-ModuljBild-URI. EngelPrincipen för bildåterställningfram tillsvid skapandet.
i flikenMiljövariablerdu berusadNVIDIA_VISIBLE_DEVICESom0.
i flikenMöjlighet att skapa en containerAnge följande alternativ:
{ "Einstiegspunkt": [ "/bin/sh" ], "Cmd": [ "-c", "/tmp/nbody -benchmark -i=1000; while true; echo no-op; sleep 10000; done" ] , "HostConfig": { "IpcMode": "anfügt", "PidMode": "anfügt" }}
Alternativen visas enligt följande:
VäljaLägg till.
Modulen du lade till ska visas somAnnan.
See AlsoTutorial: Develop C modules for Windows with Azure IoT EdgeKapitel 4 - Beskrivning av Azure RTOS NetX Duo ServicesSet up your account for offline streaming of protected Widevine content - AzureMigrera Windows-användare och grupper från SQL Server till SQL Managed Instance med T-SQL - Azure SQL Managed InstanceFör att lägga till en modul, upprepa alla steg du följde när du lade till den första modulen. I det här exemplet anger du modulnamnet som
cuda-Probe2
.Använd samma miljövariabel eftersom båda modulerna använder samma GPU.
Använd samma skapa containeralternativ som du angav för den första modulen och välj denLägg till.
På hemsidanmodulär ängeldu väljerGranska + Skapaoch såSkapa.
Arbetstillståndetför båda modulerna ska det nu visas somAnnan.
Övervaka arbetsbelastningsfördelningen
Öppna en ny PowerShell-session.
Se en lista över pågående poddsändningar
skall
Namnutrymme Kör följande kommando:kubectl obtener pods -n iotedge
Här är ett exempel på utgången:
PS C:\WINDOWS\system32> kubectl get pods -n iotedge --kubeconfig C:\GPU-sharing\kubeconfigs\configiotuser1NAME READY STATE OMSTARTAR AGecuda-sample1-869989578c-ssng8 2/5 2scud-6kd-6bd-6bd-8bd-9bd-6bd-9b / 2 Körs 0 4sedgeagent-79f988968b-7p2tv 2/2 Körs 0 6d21hedgehub-d6c764847-l8v4m 2/2 Körs 0 24hiotedged-55fdb7b5c6-l9zn8 1/16d 1/6dS2system\PS2system\1/1PS2system 1/1PS2system
Det finns två baljor
cuda-muestra1-97c494d7f-lnmns
jcuda-muestra2-d9f6c4688-2rld9
körs på din enhet.Medan båda behållarna kör n-body-simuleringen kan du se GPU-användningen från Nvidias smi-utgång. Gå till enhetens PowerShell-gränssnitt och kör det
Skaffa HcsGpuNvidiaSmi
.Det här är ett exempel på utdata när båda behållarna kör n-kroppssimuleringen:
[10.100.10.10]: PS>Get-HcsGpuNvidiaSmiK8S-1HXQG13CL-1HXQG13: Fre Mar 5 13:31:16 2021+--------------------- - -------------------------------------------------- - --------------- ----+| NVIDIA SMI 460.32.03 Drivrutinsversion: 460.32.03 CUDA Version: 11.2 ||-------------------------------------- + - ----------------------+----------------------------- - ---- - ------+| GPU-namn persistence-M| Buss ID No.A | Att rita. flyktigt ECC || Fläkttemperatur Perf Pwr:Use/Cap| Minnesanvändning | GPU Util Beräkning M. || | | ||===========================+================== === =+========================|| 0 Tesla T4 på | 00002C74:00:00.0 Av | 0 || Ej tillgängligt 52C P0 69W / 70W | 221MB / 15109MB | 100 % standard || | | N/A |+----------------------------------------+---- --------------- ----------+-------------------- ----- -------------------------------------------------------------- -------------------------------------------------------------- -+| Processer: || GPU GI CI PID Typ Processnamn GPU-minne || ID Användning av ID ||============================================= =================================|| 0 n/a n/a 188342 C /tmp/nbody 109 MiB || 0 n/a n/a 188413 C /tmp/nbody 109 MiB |+---------------------------------------- -------------------------------------------------- - -------+[10.100.10.10]: PS >
Som du kan se två behållare som kör n-kroppssimulering på GPU 0. Du kan också se motsvarande minnesanvändning.
När simuleringen är klar visar Nvidias smi-utgång att det inte finns några processer som körs på enheten.
[10.100.10.10]: PS>Get-HcsGpuNvidiaSmiK8S-1HXQG13CL-1HXQG13: Fre Mar 5 13:54:48 2021+---------------------- - -------------------------------------------------- - --------------- ----+| NVIDIA SMI 460.32.03 Drivrutinsversion: 460.32.03 CUDA Version: 11.2 ||-------------------------------------- + - ----------------------+----------------------------- - ---- - ------+| GPU-namn persistence-M| Buss ID No.A | Att rita. flyktigt ECC || Fläkttemperatur Perf Pwr:Use/Cap| Minnesanvändning | GPU Util Beräkning M. || | | ||===========================+================== === =+========================|| 0 Tesla T4 på | 00002C74:00:00.0 Av | 0 || Ej tillämpligt 34C P8 9W / 70W | 0MiB / 15109MiB | 0% standard || | | N/A |+----------------------------------------+---- --------------- ----------+-------------------- ----- -------------------------------------------------------------- -------------------------------------------------------------- -+| Processer: || GPU GI CI PID Typ Processnamn GPU-minne || ID Användning av ID ||============================================= =================================|| Inga pågående processer hittades |+---------------------------------------------------- ------------------------------------------------------------ -------------------------- ------ +[ 10.100.10.10]:PS>
När n-kroppssimuleringen är klar kan du visa loggarna för att få information om implementeringen och den tid det tar att slutföra simuleringen.
Här är ett exempel på utdata från den första behållaren:
PS C:\WINDOWS\system32> kubectl -n iotedge --kubeconfig C:\GPU-sharing\kubeconfigs\configuratuser1 register cuda-sample1-869989578c-ssng8 cuda-sample1Kör "nbody -benchmark=]<antal Bodies>" power.==============// klippa //====================// klippa //=== == = ========> Fönsterläge > Simuleringsdata lagrad i videominne > Flyttalssimulering med enkel precision > 1 Enheter som används för simulering GPU-enhet 0: "Turing" Compute Capable 7.5 > Compute 7.5 CUDA-enhet: [Tesla T4 ]40960 kroppar, total tid för 10000 iterationer: 170171.531 ms= 98.590 miljarder interaktioner per sekund= 1971.801 GFLOP/s enkel precision vid 20 floppar per iteration utan opPS C:\WINDOWS\system32>
Här är ett exempel på utdata från den andra behållaren:
See AlsoAzure Compute – Linux-Diagnostiktillägg 3.0 – Azure Virtual MachinesLägg till filer till versionskontrollserver - Azure ReposInstall TmaxSoft OpenFrame and Azure Virtual Machines - Azure Virtual MachinesPS C:\WINDOWS\system32> kubectl -n iotedge --kubeconfig C:\GPU-sharing\kubeconfigs\configuratuser1 register cuda-sample2-6db6d98689-d74kb cuda-sample2Kör "nbody -benchmark" [-numbods>] Mät effekt.==============// klipp //====================// klipp //=== == =========> Fönsterläge > Simuleringsdata lagrad i videominne > Flyttalssimulering med enkel precision > 1 Enheter som används för simulering GPU-enhet 0: "Turing" Compute Capable 7.5 > Compute 7.5 CUDA-enhet: [ Tesla T4 ]40960 kroppar, total tid för 10 000 iterationer: 170054,969 ms= 98,658 miljarder interaktioner per sekund= 1973,152 GFLOP/s enkel precision vid 20 floppar per iteration utan opPS C:\WINDOWS\system32>
Avsluta moduldistributionen. I IoT Hub-resursen för din enhet:
Gå tillAutomatiserad enhetsprovision > IoT Edge. Välj den IoT Edge-enhet som motsvarar enheten.
Gå tillmodulär ängeloch välj en modul.
i flikenModulDu väljer en modul.
i flikenmodulkonfigurationdu berusadönskat tillståndslutade ringaAtt uppdatera.
Upprepa stegen för att slutföra driftsättningen av den andra modulen till enheten. VäljaGranska + Skapaoch välj sedanSkapa. Detta bör uppdatera distributionen.
Uppdateringssidanställa in modulerupprepas. fram tillsexekveringsstatus för modulenvisas somStört.
Implementering med kontextdelning
Du kan nu implementera N-kroppssimulering i två CUDA-behållare när du kör MPS på enheten. Aktivera först MPS på enheten.
Anslut till PowerShell-gränssnittet på enheten.
Kör för att aktivera MPS på enheten
Hem-HcsGpuMPS
Kommandot .[10.100.10.10]: PS>Start-HcsGpuMPSK8S-1HXQG13CL-1HXQG13: Ställ in beräkningsläge till EXCLUSIVE_PROCESS för GPU 0000191E:00:00.0.All set.Created nvidia-mps.100 service:[10mps.100].
Få Nvidia-smi-utgången från Device PowerShell-gränssnittet. kan du se det
nvidia-cuda-mps-server
MPS-processen eller -tjänsten körs på enheten.Här är ett exempel på utgången:
[10.100.10.10]: PS>Get-HcsGpuNvidiaSmiK8S-1HXQG13CL-1HXQG13: Torsdag 4 mars 12:37:39 2021+----------- -------------------------------------------------- -- --------+| NVIDIA SMI 460.32.03 Drivrutinsversion: 460.32.03 CUDA Version: 11.2 ||-------------------------------------- + - ----------------------+----------------------------- - ---- - ------+| GPU-namn persistence-M| Buss ID No.A | Att rita. flyktigt ECC || Fläkttemperatur Perf Pwr:Use/Cap| Minnesanvändning | GPU Util Beräkning M. || | | ||===========================+================== === =+========================|| 0 Tesla T4 på | 00002C74:00:00.0 Av | 0 || Ej tillämpligt 36C P8 9W / 70W | 28MB / 15109MB | 0% E. Process || | | N/A |+----------------------------------------+---- --------------- ----------+-------------------- ----- -------------------------------------------------------------- -------------------------------------------------------------- -+| Processer: || GPU GI CI PID Typ Processnamn GPU-minne || ID Användning av ID ||============================================= =================================|| 0 N/A N/A 122792 C nvidia-cuda-mps-server 25 MiB |+-------------------------------------- ----------------------------------------------------+[10.100.10.10 ]: PS>Get-HcsGpuNvidiaSmi
Distribuera de tidigare stoppade modulerna. Att uttryckaönskat tillståndutförasStäll in moduler (Ange moduler).
Här är ett exempel på utdata:
PD C:\WINDOWS\system32> kubectl get pods -n iotedge --kubeconfig C:\GPU-sharing\kubeconfigs\configuratuser1NAME READY STATE OMSTARTAR AGEcuda-sample1-869989578c-2zxh6 02/42scu 6b-sample 9/42scu 6b-9/42scu 6b-9/42scu 6b / 2 Kör 0 44sedgeagent-79f988968b-7p2tv 2/2 Kör 0 5d20hedgehub-d6c764847-l8v4m 2/2 Kör 0 27miotedged-55fdb7b5c6-l9zn2system
Du kan se modulerna distribueras och körs på din enhet.
När modulerna är utplacerade börjar n-kroppssimuleringen också köras i båda behållarna. Här är exemplet när simuleringen för den första behållaren är klar:
PS C:\WINDOWS\system32> kubectl -n iotedge loggar cuda-sample1-869989578c-2zxh6 cuda-sample1 Kör "nbody -benchmark [-numbodies=<numBodies>]" för att mäta prestanda.===== ==== = = ====// Klipp //====================// Klipp //==============> Fönster läge > Simuleringsdata lagrad i videominne > Flyttalssimulering med enkel precision > 1 Enheter som används för simulering GPU-enhet 0: "Turing" med Compute 7.5-kapacitet > Compute 7.5 CUDA-enhet: [Tesla T4] 40960-kropp, total tid för 10000 iterationer: 155256.062 ms = 108.062 miljarder interaktioner per sekund = 2161.232 GFLOP/s med enkel precision vid 20 floppar per interactiono-opPS C:\WINDOWS\system32>
Här är exempelutdata när simuleringen för den andra behållaren är klar:
PS C:\WINDOWS\system32> kubectl -n iotedge --kubeconfig C:\GPU-sharing\kubeconfigs\configuratuser1 register cuda-sample2-6db6d98689-fn7mx cuda-sample2Kör "nbody -benchmark" [-numbodies>] Mät effekt.==============// klipp //====================// klipp //=== == =========> Fönsterläge > Simuleringsdata lagrad i videominne > Flyttalssimulering med enkel precision > 1 Enheter som används för simulering GPU-enhet 0: "Turing" Compute Capable 7.5 > Compute 7.5 CUDA-enhet: [ Tesla T4 ]40960 kroppar, total tid för 10 000 iterationer: 155366,359 ms = 107,985 miljarder iterationer per sekund = 2159,697 GFLOP/s med enkel precision vid 20 floppar per iteration utan c-ops :\32>
Få Nvidia-smi-utdata från PowerShell-gränssnittet på enheten när båda behållarna kör n-body-simuleringen. Här är ett exempel på utgången. Det finns tre processer
nvidia-cuda-mps-server
processen (typ C) motsvarar MPS-tjänsten och processerna/tmp/nbody
(Typ M+C) motsvarar arbetsbelastningen för n kroppar fördelade av modulerna.[10.100.10.10]: PS>Get-HcsGpuNvidiaSmiK8S-1HXQG13CL-1HXQG13: Torsdag 4 mars 12:59:44 2021+---------------- -- - -------------------------------------------------- -- --------+| NVIDIA SMI 460.32.03 Drivrutinsversion: 460.32.03 CUDA Version: 11.2 ||-------------------------------------- + - ----------------------+----------------------------- - ---- - ------+| GPU-namn persistence-M| Buss ID No.A | Att rita. flyktigt ECC || Fläkttemperatur Perf Pwr:Use/Cap| Minnesanvändning | GPU Util Beräkning M. || | | ||===========================+================== === =+========================|| 0 Tesla T4 på | 00002C74:00:00.0 Av | 0 || N/A 54C P0 69W / 70W | 242MB / 15109MB | 100 % E. Process || | | N/A |+----------------------------------------+---- --------------- ----------+-------------------- ----- -------------------------------------------------------------- -------------------------------------------------------------- -+| Processer: || GPU GI CI PID Typ Processnamn GPU-minne || ID Användning av ID ||============================================= =================================|| 0 n/a n/a 56832 M+C /tmp/nbody 107 MiB || 0 N/A N/A 56900 M+C /tmp/nbody 107 MiB || 0 N/A N/A 122792 C nvidia-cuda-mps-server 25 MiB |+-------------------------------------- ----------------------------------------------------+[10.100.10.10 ]: PS>Get-HcsGpuNvidiaSmi
Nästa steg
- Distribuera en delad Kubernetes GPU-arbetsbelastning på Azure Stack Edge Pro.