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


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

  1. 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.

  2. Energiaellátás minden kiszolgálón.

  3. Jelentkezzen be egy rendszergazdai jogosultságokkal rendelkező fiókkal a kiszolgáló(ok)ba, amelyen telepítve van az NVIDIA GPU.

  4. Nyissa meg Eszközkezelő, és lépjen a többi eszköz szakaszra. Egy eszköznek "3D videovezérlő" néven kell megjelennie.

  5. 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.

  6. 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.

    Hely elérési útja képernyőképe.

  7. 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
    
  8. Ellenőrizze, hogy az eszköz szerepel-e a Eszközkezelő rendszereszközök listájában Dismounted (Leválasztott) állapotban.

    Leválasztott eszköz képernyőképe.

Ubuntu virtuális gép létrehozása és konfigurálása

  1. Töltse le az Ubuntu 18.04.02 ISO-s asztali kiadását.

  2. 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.

  3. 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.

  4. 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:

    GPU-képernyőkép hozzárendelése.

    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.

  5. 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.

  6. 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:

    A vendég operációs rendszer leállításának képernyőképe.

  7. Jelentkezzen be az Ubuntu-ba, és nyissa meg a terminált az SSH telepítéséhez:

     $ sudo apt install openssh-server
    
  8. 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.

  9. 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.

  10. 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.

  11. 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.

    Illesztőprogram telepítési képernyőképe.

  12. 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:

    Képernyőkép az nvidia-smi parancs kimenetéről.

  13. 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

  1. 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
    
  2. 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
    
  3. Indítsa újra a virtuális gépet:

    sudo /sbin/shutdown -r now
    
  4. Ú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:

    A Docker sikeres telepítési képernyőképe.

  5. 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.

  6. 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.

  7. 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:

    Manuális kiépítési konfiguráció képernyőképe.

    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).

  8. 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
    
  9. 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
    
  10. 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:

    Egyéni streamek képernyőképe.

  11. 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
    
  12. 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:

    Automatikus Eszközkezelés képernyőkép.

  13. 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:

    Modulok beállítása képernyőkép.

  14. A IoT Edge Modulok területen kattintson a IoT Edge Modul elemre:

    IoT Edge modul képernyőképének hozzáadása.

  15. 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.

    A DeepStream SDK képernyőképe.

  16. Győződjön meg arról, hogy az NvidiaDeepStreamSDK modul szerepel a IoT Edge Modulok területen:

    IoT Edge modulok képernyőképe.

  17. 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ó:

    Tároló létrehozása beállítások képernyőképe.

    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/"
    }
    
  18. 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:

    Modulok és IoT Edge Hub Connections képernyőképe.

  19. Csatlakozzon az Ubuntu virtuális géphez az SSH-ügyféllel, és ellenőrizze, hogy a megfelelő modulok futnak-e:

    sudo iotedge list
    

    Képernyőkép az iotedge listából származó kimenetről.

    nvidia-smi
    

    nvidia-smi képernyőkép.

    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.

  20. 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
    

    Képernyőkép az NvdiaDeepStreem-tároló működőképes állapotáról.

    sudo iotedge logs -f NVIDIADeepStreamSDK
    

    Képernyőkép az iotedge logs -f NVIDIADeepStreamSDK parancs kimenetéről.

    nvidia-smi
    

    Képernyőkép az nvidia-smi parancs további kimenetéről.

  21. 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.

  22. 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.

    VLC-lejátszó képernyőképe.

Következő lépések

Gpu-kkal és DDA-val kapcsolatos további információkért lásd még: