GPU csatlakoztatása Ubuntu Linux rendszerű virtuális géphez az Azure Stack HCI-n
A következőkre vonatkozik: Azure Stack HCI, 23H2 és 22H2 verzió
Megjegyzés
Az Azure Stack HCI 23H2-n futó virtuális gépek létrehozásának és kezelésének ajánlott módja az Azure Arc vezérlősík használata. Az alábbi mechanizmussal csak akkor kezelheti a virtuális gépeket, ha olyan funkciókra van szüksége, amelyek nem érhetők el az Azure Arc-alapú virtuális gépeken.
Ez a témakör lépésről lépésre ismerteti, hogyan telepíthető és konfigurálható egy NVIDIA grafikus feldolgozó egység (GPU) az Azure Stack HCI-vel diszkrét eszköz-hozzárendelési (DDA) technológiával egy Ubuntu virtuális géphez (VM). Ez a dokumentum feltételezi, hogy telepítette az Azure Stack HCI-fürtöt és a virtuális gépeket.
Telepítse a GPU-t, majd válassza le a PowerShellben
Telepítse az NVIDIA GPU(ka)t fizikailag a megfelelő kiszolgáló(ok)ba az OEM-utasítások és a BIOS-javaslatok alapján.
Energiaellátás minden kiszolgálón.
Jelentkezzen be egy rendszergazdai jogosultságokkal rendelkező fiókkal a kiszolgáló(ok)ba, amelyen telepítve van az NVIDIA GPU.
Nyissa meg Eszközkezelő, és lépjen a többi eszköz szakaszra. Egy eszköznek "3D videovezérlő" néven kell megjelennie.
Kattintson a jobb gombbal a "3D videovezérlő" elemre a Tulajdonságok lap megjelenítéséhez. Kattintson a Részletek gombra. A Tulajdonság alatti legördülő listában válassza a "Hely elérési útjai" lehetőséget.
Jegyezze fel az alábbi képernyőképen kiemelt PCIRoot sztringgel rendelkező értéket. Kattintson a jobb gombbal az Érték elemre, és másolja/mentse.
Nyissa meg a Windows PowerShell emelt szintű jogosultságokkal, és futtassa a
Dismount-VMHostAssignableDevice
parancsmagot a DDA GPU-eszközének virtuális gépre való leválasztásához. Cserélje le a LocationPath értéket az eszköz 6. lépésben beszerzett értékére.Dismount-VMHostAssignableDevice -LocationPath "PCIROOT(16)#PCI(0000)#PCI(0000)" -force
Ellenőrizze, hogy az eszköz szerepel-e a Eszközkezelő rendszereszközök listájában Dismounted (Leválasztott) állapotban.
Ubuntu virtuális gép létrehozása és konfigurálása
Töltse le az Ubuntu 18.04.02 ISO-s asztali kiadását.
Nyissa meg a Hyper-V Kezelőt a rendszer csomópontján, amelyen telepítve van a GPU.
Megjegyzés
A DDA nem támogatja a feladatátvételt. Ez egy virtuálisgép-korlátozás a DDA-val. Ezért azt javasoljuk, hogy a Feladatátvevőfürt-kezelő helyett a Hyper-V Managerrel helyezze üzembe a virtuális gépet a csomóponton. A feladatátvevőfürt-kezelő DDA-val való használata egy hibaüzenettel meghiúsul, amely azt jelzi, hogy a virtuális gép olyan eszközzel rendelkezik, amely nem támogatja a magas rendelkezésre állást.
Az 1. lépésben letöltött Ubuntu ISO használatával hozzon létre egy új virtuális gépet a Hyper-V ManagerÚj virtuális gép varázslójával egy 2 GB memóriát és egy hálózati kártyát tartalmazó Ubuntu Gen 1 virtuális gép létrehozásához.
A PowerShellben rendelje hozzá a leválasztott GPU-eszközt a virtuális géphez az alábbi parancsmagok használatával, és cserélje le a LocationPath értéket az eszköz értékére.
# Confirm that there are no DDA devices assigned to the VM Get-VMAssignableDevice -VMName Ubuntu # Assign the GPU to the VM Add-VMAssignableDevice -LocationPath "PCIROOT(16)#PCI(0000)#PCI(0000)" -VMName Ubuntu # Confirm that the GPU is assigned to the VM Get-VMAssignableDevice -VMName Ubuntu
A GPU virtuális géphez való sikeres hozzárendelése az alábbi kimenetet jeleníti meg:
Itt konfiguráljon további értékeket a GPU-dokumentációt követve:
# Enable Write-Combining on the CPU Set-VM -GuestControlledCacheTypes $true -VMName VMName # Configure the 32 bit MMIO space Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VMName # Configure greater than 32 bit MMIO space Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName VMName
Megjegyzés
A 33280 Mb-os értéknek elegendőnek kell lennie a legtöbb GPU esetében, de a GPU-memóriánál nagyobb értékre kell cserélni.
A Hyper-V Kezelővel csatlakozzon a virtuális géphez, és indítsa el az Ubuntu operációs rendszer telepítését. Válassza ki az alapértelmezett beállításokat az Ubuntu operációs rendszer virtuális gépre való telepítéséhez.
A telepítés befejezése után a Hyper-V Kezelővel állítsa le a virtuális gépet, és konfigurálja a virtuális gép automatikus leállítási műveletét a vendég operációs rendszer leállításához az alábbi képernyőképen látható módon:
Jelentkezzen be az Ubuntu-ba, és nyissa meg a terminált az SSH telepítéséhez:
$ sudo apt install openssh-server
Keresse meg az Ubuntu-telepítés TCP/IP-címét az ifconfig paranccsal, és másolja ki az eth0 felület IP-címét.
Az Ubuntu virtuális géphez való csatlakozáshoz használjon SSH-ügyfelet, például openSSH-t (ssh.exe alapértelmezés szerint Windows 10 telepítve) vagy Puttyt.
Az SSH-ügyfélen keresztül történő bejelentkezéskor adja ki az lspci parancsot, és ellenőrizze, hogy az NVIDIA GPU "3D vezérlőként" szerepel-e.
Fontos
Ha az NVIDIA GPU nem tekinthető "3D vezérlőnek", ne folytassa tovább. A folytatás előtt győződjön meg arról, hogy a fenti lépéseket követi.
A virtuális gépen keresse meg és nyissa meg a Szoftver & Frissítések. Lépjen a További illesztőprogramok elemre, majd válassza ki a felsorolt legújabb NVIDIA GPU-illesztőprogramokat. Az illesztőprogram telepítésének befejezéséhez kattintson a Módosítások alkalmazása gombra.
Az illesztőprogram telepítése után indítsa újra az Ubuntu virtuális gépet. A virtuális gép elindítása után csatlakozzon az SSH-ügyfélen keresztül, és adja ki az nvidia-smi parancsot annak ellenőrzéséhez, hogy az NVIDIA GPU-illesztő telepítése sikeresen befejeződött-e. A kimenetnek az alábbi képernyőképhez hasonlónak kell lennie:
Az SSH-ügyfél használatával állítsa be az adattárat, és telepítse a Docker CE-motort:
$ sudo apt-get update $ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common
Adja hozzá a Docker hivatalos GPG-kulcsát:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Ellenőrizze, hogy rendelkezik-e a kulccsal a 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 ujjlenyomattal az ujjlenyomat utolsó nyolc karakterének keresésével:
$ sudo apt-key fingerprint 0EBFCD88
A kimenetnek a következőhöz hasonlóan kell kinéznie:
pub rsa4096 2017-02-22 [SCEA] 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid [ unknown] Docker Release (CE deb) <docker@docker.com> sub rsa4096 2017-02-22 [S]
Állítsa be a stabil adattárat az Ubuntu AMD64 architektúrához:
$ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
Csomagok frissítése és a Docker CE telepítése:
$ sudo apt-get update $ sudo apt-get install docker-ce docker-ce-cli containerd.io
Ellenőrizze a Docker CE telepítését:
$ sudo docker run hello-world
Az Azure IoT Edge konfigurálása
A konfiguráció előkészítéséhez tekintse át az NVIDIA-Deepstream-Azure-IoT-Edge-on-a-NVIDIA-Jetson-Nano GitHub adattárban található gyakori kérdéseket, amelyekből megtudhatja, hogy a Dockert kell telepíteni a Moby helyett. A felülvizsgálat után folytassa az alábbi lépésekkel.
Az NVIDIA Docker telepítése
Az SSH-ügyfélből adja hozzá a csomagtárakat:
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \ sudo apt-key add - distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \ sudo tee /etc/apt/sources.list.d/nvidia-docker.list sudo apt-get update
Telepítse az nvidia-docker2-t, és töltse be újra a Docker démonkonfigurációját:
sudo apt-get install -y nvidia-docker2 sudo pkill -SIGHUP dockerd
Indítsa újra a virtuális gépet:
sudo /sbin/shutdown -r now
Újraindításkor ellenőrizze az NVIDIA Docker sikeres telepítését:
sudo docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi
A sikeres telepítés az alábbi képernyőkép kimenetéhez hasonlóan fog kinézni:
Az itt található utasításokat követve folytassa az Azure IoT Edge telepítésével, kihagyva a futtatókörnyezet telepítését:
curl https://packages.microsoft.com/config/ubuntu/18.04/multiarch/prod.list > ./microsoft-prod.list sudo cp ./microsoft-prod.list /etc/apt/sources.list.d/ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg sudo cp ./microsoft.gpg /etc/apt/trusted.gpg.d/ sudo apt-get update sudo apt-get install iotedge
Megjegyzés
Az Azure IoT Edge telepítése után ellenőrizze, hogy a config.yaml megtalálható-e az Ubuntu virtuális gépen a /etc/iotedge/config.yaml címen.
Hozzon létre egy IoT Edge eszközidentitást az alábbi Azure Portal útmutatóban. Ezután másolja ki az újonnan létrehozott IoT Edge eszköz kapcsolati karakterlánc.
Az SSH-ügyfél használatával frissítse az eszköz kapcsolati karakterlánc a config.yaml fájlban az Ubuntu virtuális gépen:
sudo nano /etc/iotedge/config.yaml
Keresse meg a fájl kiépítési konfigurációit, és törölje a "Manuális kiépítési konfiguráció" szakaszt. Frissítse a device_connection_string értékét a IoT Edge eszközről származó kapcsolati karakterlánc. Győződjön meg arról, hogy a többi kiépítési szakasz megjegyzést tartalmaz. Győződjön meg arról, hogy a kiépítés: sor nem rendelkezik korábbi szóközzel, és hogy a beágyazott elemeket két szóköz behúzva:
A vágólap tartalmának Nano-ba való beillesztéséhez kattintson a shift+jobb gombbal, vagy nyomja le a shift+insert billentyűkombinációt. Mentse és zárja be a fájlt (Ctrl + X, Y, Enter).
Az SSH-ügyfél használatával indítsa újra a IoT Edge démont:
sudo systemctl restart iotedge
Ellenőrizze a telepítést, és ellenőrizze a IoT Edge démon állapotát:
systemctl status iotedge journalctl -u iotedge --no-pager --no-full
Az SSH-ügyfél használatával hozza létre a következő könyvtárstruktúrát az Ubuntu virtuális gépen:
cd /var sudo mkdir deepstream mkdir ./deepstream/custom_configs cd /var/deepstream sudo mkdir custom_streams sudo chmod -R 777 /var/deepstream cd ./custom_streams
Győződjön meg arról, hogy a munkakönyvtár /var/deepstream/custom_streams, és töltse le a bemutatóvideófájlt az SSH-ügyfél következő parancsának végrehajtásával:
wget -O cars-streams.tar.gz --no-check-certificate https://onedrive.live.com/download?cid=0C0A4A69A0CDCB4C&resid=0C0A4A69A0CDCB4C%21588371&authkey=AAavgrxG95v9gu0
A videofájlok tömörítésének megszüntetése:
tar -xzvf cars-streams.tar.gz
A /var/deepstream/custom_streams könyvtár tartalmának hasonlónak kell lennie az alábbi képernyőképhez:
Hozzon létre egy test5_config_file_src_infer_azure_iotedge_edited.txt nevű új fájlt a /var/deepstream/custom_configs könyvtárban. Egy szövegszerkesztővel nyissa meg a fájlt, és illessze be a következő kódot, majd mentse és zárja be a fájlt.
# Copyright (c) 2018 NVIDIA Corporation. All rights reserved. # # NVIDIA Corporation and its licensors retain all intellectual property # and proprietary rights in and to this software, related documentation # and any modifications thereto. Any use, reproduction, disclosure or # distribution of this software and related documentation without an express # license agreement from NVIDIA Corporation is strictly prohibited. [application] enable-perf-measurement=1 perf-measurement-interval-sec=5 #gie-kitti-output-dir=streamscl [tiled-display] enable=1 rows=2 columns=2 width=1280 height=720 gpu-id=0 #(0): nvbuf-mem-default - Default memory allocated, specific to particular platform #(1): nvbuf-mem-cuda-pinned - Allocate Pinned/Host cuda memory, applicable for Tesla #(2): nvbuf-mem-cuda-device - Allocate Device cuda memory, applicable for Tesla #(3): nvbuf-mem-cuda-unified - Allocate Unified cuda memory, applicable for Tesla #(4): nvbuf-mem-surface-array - Allocate Surface Array memory, applicable for Jetson nvbuf-memory-type=0 [source0] enable=1 #Type - 1=CameraV4L2 2=URI 3=MultiURI type=3 uri=file://../../../../../samples/streams/sample_1080p_h264.mp4 num-sources=2 gpu-id=0 nvbuf-memory-type=0 [source1] enable=1 #Type - 1=CameraV4L2 2=URI 3=MultiURI type=3 uri=file://../../../../../samples/streams/sample_1080p_h264.mp4 num-sources=2 gpu-id=0 nvbuf-memory-type=0 [sink0] enable=0 [sink3] enable=1 #Type - 1=FakeSink 2=EglSink 3=File 4=RTSPStreaming type=4 #1=h264 2=h265 codec=1 sync=0 bitrate=4000000 # set below properties in case of RTSPStreaming rtsp-port=8554 udp-port=5400 [sink1] enable=1 #Type - 1=FakeSink 2=EglSink 3=File 4=UDPSink 5=nvoverlaysink 6=MsgConvBroker type=6 msg-conv-config=../configs/dstest5_msgconv_sample_config.txt #(0): PAYLOAD_DEEPSTREAM - Deepstream schema payload #(1): PAYLOAD_DEEPSTREAM_MINIMAL - Deepstream schema payload minimal #(256): PAYLOAD_RESERVED - Reserved type #(257): PAYLOAD_CUSTOM - Custom schema payload msg-conv-payload-type=1 msg-broker-proto-lib=/opt/nvidia/deepstream/deepstream-4.0/lib/libnvds_azure_edge_proto.so topic=mytopic #Optional: #msg-broker-config=../../../../libs/azure_protocol_adaptor/module_client/cfg_azure.txt [sink2] enable=0 type=3 #1=mp4 2=mkv container=1 #1=h264 2=h265 3=mpeg4 ## only SW mpeg4 is supported right now. codec=3 sync=1 bitrate=2000000 output-file=out.mp4 source-id=0 [osd] enable=1 gpu-id=0 border-width=1 text-size=15 text-color=1;1;1;1; text-bg-color=0.3;0.3;0.3;1 font=Arial show-clock=0 clock-x-offset=800 clock-y-offset=820 clock-text-size=12 clock-color=1;0;0;0 nvbuf-memory-type=0 [streammux] gpu-id=0 ##Boolean property to inform muxer that sources are live live-source=0 batch-size=4 ##time out in usec, to wait after the first buffer is available ##to push the batch even if the complete batch is not formed batched-push-timeout=40000 ## Set muxer output width and height width=1920 height=1080 ##Enable to maintain aspect ratio wrt source, and allow black borders, works ##along with width, height properties enable-padding=0 nvbuf-memory-type=0 [primary-gie] enable=1 gpu-id=0 batch-size=4 ## 0=FP32, 1=INT8, 2=FP16 mode bbox-border-color0=1;0;0;1 bbox-border-color1=0;1;1;1 bbox-border-color2=0;1;1;1 bbox-border-color3=0;1;0;1 nvbuf-memory-type=0 interval=0 gie-unique-id=1 model-engine-file=../../../../../samples/models/Primary_Detector/resnet10.caffemodel_b4_int8.engine labelfile-path=../../../../../samples/models/Primary_Detector/labels.txt config-file=../../../../../samples/configs/deepstream-app/config_infer_primary.txt #infer-raw-output-dir=../../../../../samples/primary_detector_raw_output/ [tracker] enable=1 tracker-width=600 tracker-height=300 ll-lib-file=/opt/nvidia/deepstream/deepstream-4.0/lib/libnvds_mot_klt.so #ll-config-file required for DCF/IOU only #ll-config-file=tracker_config.yml #ll-config-file=iou_config.txt gpu-id=0 #enable-batch-process applicable to DCF only enable-batch-process=0 [tests] file-loop=1
Lépjen az Azure Portalra. Válassza a IoT Hub Kiépített lehetőséget, kattintson az Automatikus Eszközkezelés elemre, majd kattintson a IoT Edge:
A jobb oldali panelen válassza ki azt az eszközidentitást, amelynek az eszközét kapcsolati karakterlánc a fenti módon használták. Kattintson a modulok beállítására:
A IoT Edge Modulok területen kattintson a IoT Edge Modul elemre:
Az Add IoT Edge Module (Modul hozzáadása) panelen válassza a Modulbeállítások lapot, majd adja meg vagy válassza ki a következő értékeket:
IoT Edge modul neve: NVIDIADeepStreamSDK
Kép URI-ja: marketplace.azurecr.io/nvidia/deepstream-iot2
Újraindítási szabályzat: mindig
Kívánt állapot: fut
Kép lekérési szabályzata: üres
Válassza a Hozzáadás lehetőséget.
Győződjön meg arról, hogy az NvidiaDeepStreamSDK modul szerepel a IoT Edge Modulok területen:
Kattintson az "NVIDIADeepStreamSDK" modulra, és válassza a "Tároló létrehozási beállításai" lehetőséget. Az alapértelmezett konfiguráció itt látható:
Cserélje le a fenti konfigurációt az alábbi konfigurációra:
{ "ExposedPorts": { "8554/tcp": {} }, "Entrypoint": [ "/usr/bin/deepstream-test5-app", "-c", "test5_config_file_src_infer_azure_iotedge_edited.txt", "-p", "1", "-m", "1" ], "HostConfig": { "runtime": "nvidia", "Binds": [ "/var/deepstream/custom_configs:/root/deepstream_sdk_v4.0.2_x86_64/sources/apps/sample_apps/deepstream-test5/custom_configs/", "/var/deepstream/custom_streams:/root/deepstream_sdk_v4.0.2_x86_64/sources/apps/sample_apps/deepstream-test5/custom_streams/" ], "PortBindings": { "8554/tcp": [ { "HostPort": "8554" } ] } }, "WorkingDir": "/root/deepstream_sdk_v4.0.2_x86_64/sources/apps/sample_apps/deepstream-test5/custom_configs/" }
Kattintson a Véleményezés és létrehozás elemre, majd a következő lapon kattintson a Létrehozás gombra. Most az alábbi három modulnak kell megjelennie az IoT Edge eszközhöz a Azure Portal:
Csatlakozzon az Ubuntu virtuális géphez az SSH-ügyféllel, és ellenőrizze, hogy a megfelelő modulok futnak-e:
sudo iotedge list
nvidia-smi
Megjegyzés
Az NvidiaDeepstream tároló letöltése néhány percet vesz igénybe. A letöltést a "journalctl -u iotedge --no-pager --no-full" paranccsal ellenőrizheti az iotedge démonnaplók megtekintéséhez.
Győződjön meg arról, hogy az NvdiaDeepStreem tároló működőképes. Az alábbi képernyőképek parancskimenete a sikert jelzi.
sudo iotedge list
sudo iotedge logs -f NVIDIADeepStreamSDK
nvidia-smi
Ellenőrizze az Ubuntu virtuális gép TCP/IP-címét az ifconfig paranccsal, és keresse meg a TCP/IP-címet az eth0 interfész mellett.
Telepítse a VLC Playert a munkaállomásra. A VLC-lejátszón belül kattintson a Média –> hálózati stream megnyitása elemre, és írja be a címet a következő formátumban:
rtsp://ipaddress:8554/ds-test
ahol az ipaddress a virtuális gép TCP/IP-címe.
Következő lépések
Gpu-kkal és DDA-val kapcsolatos további információkért lásd még:
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: