Sdílet prostřednictvím


Připojení GPU k virtuálnímu počítači s Ubuntu Linuxem ve službě Azure Stack HCI

Platí pro: Azure Stack HCI verze 23H2 a 22H2

Poznámka

Doporučeným způsobem vytváření a správy virtuálních počítačů v Azure Stack HCI 23H2 je použití řídicí roviny Azure Arc. Níže popsaný mechanismus použijte ke správě virtuálních počítačů jenom v případě, že potřebujete funkce, které nejsou na virtuálních počítačích Azure Arc dostupné.

Toto téma obsahuje podrobné pokyny, jak nainstalovat a nakonfigurovat grafickou procesorovou jednotku (GPU) NVIDIA s Azure Stack HCI pomocí technologie DDA (Discrete Device Assignment) pro virtuální počítač s Ubuntu. Tento dokument předpokládá, že máte nasazený cluster Azure Stack HCI a nainstalované virtuální počítače.

Nainstalujte GPU a pak ho odpojte v PowerShellu.

  1. Nainstalujte GPU NVIDIA fyzicky na příslušné servery podle pokynů výrobce OEM a doporučení systému BIOS.

  2. Zapněte každý server.

  3. Přihlaste se pomocí účtu s oprávněními správce k serverům s nainstalovanou grafickou kartou NVIDIA.

  4. Otevřete Správce zařízení a přejděte do části další zařízení. Zařízení by se mělo zobrazit jako "3D Video Controller".

  5. Kliknutím pravým tlačítkem na 3D Video Controller zobrazíte stránku Vlastnosti . Klikněte na Podrobnosti. V rozevíracím seznamu Vlastnost vyberte Cesty k umístění.

  6. Všimněte si hodnoty s řetězcem PCIRoot zvýrazněnou na následujícím snímku obrazovky. Klikněte pravým tlačítkem na Hodnotu a zkopírujte ji nebo uložte.

    Snímek obrazovky s cestou k umístění

  7. Otevřete Windows PowerShell se zvýšenými oprávněními a spuštěním Dismount-VMHostAssignableDevice rutiny odpojte zařízení GPU pro DDA k virtuálnímu počítači. Nahraďte hodnotu LocationPath hodnotou pro vaše zařízení získanou v kroku 6.

    Dismount-VMHostAssignableDevice -LocationPath "PCIROOT(16)#PCI(0000)#PCI(0000)" -force
    
  8. Ověřte, že je zařízení uvedené v části systémová zařízení v Správce zařízení jako Odpojené.

    Snímek obrazovky odpojeného zařízení

Vytvoření a konfigurace virtuálního počítače s Ubuntu

  1. Stáhněte si ubuntu desktopovou verzi 18.04.02 ISO.

  2. Otevřete Správce technologie Hyper-V na uzlu systému s nainstalovaným GPU.

    Poznámka

    DDA nepodporuje převzetí služeb při selhání. Jedná se o omezení virtuálního počítače s DDA. Proto doporučujeme k nasazení virtuálního počítače na uzel použít Správce technologie Hyper-V místo Správce clusteru s podporou převzetí služeb při selhání. Použití Správce clusteru s podporou převzetí služeb při selhání s DDA selže s chybovou zprávou, že virtuální počítač má zařízení, které nepodporuje vysokou dostupnost.

  3. Pomocí ubuntu ISO staženého v kroku 1 vytvořte nový virtuální počítač pomocí Průvodce novým virtuálním počítačem ve Správci technologie Hyper-V a vytvořte virtuální počítač s Ubuntu Gen1 s 2 GB paměti a připojenou síťovou kartou.

  4. V PowerShellu přiřaďte k virtuálnímu počítači odpojené zařízení GPU pomocí následujících rutin a nahraďte hodnotu LocationPath hodnotou pro vaše zařízení.

    # 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
    

    Úspěšné přiřazení GPU k virtuálnímu počítači zobrazí následující výstup:

    Přiřaďte snímek obrazovky GPU.

    Další hodnoty nakonfigurujte podle dokumentace k GPU:

     # 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
    

    Poznámka

    Hodnota 33280 MB by měla stačit pro většinu grafických procesorů, ale měla by být nahrazena hodnotou větší, než je vaše paměť GPU.

  5. Pomocí Správce technologie Hyper-V se připojte k virtuálnímu počítači a spusťte instalaci operačního systému Ubuntu. Zvolte výchozí nastavení pro instalaci operačního systému Ubuntu na virtuální počítač.

  6. Po dokončení instalace pomocí Správce technologie Hyper-V virtuální počítač vypněte a nakonfigurujte pro virtuální počítač automatickou akci zastavení , která vypne hostovaný operační systém, jak je znázorněno na následujícím snímku obrazovky:

    Snímek obrazovky s vypnutím hostovaného operačního systému

  7. Přihlaste se k Ubuntu a otevřete terminál pro instalaci SSH:

     $ sudo apt install openssh-server
    
  8. Pomocí příkazu ifconfig vyhledejte adresu TCP/IP pro instalaci Ubuntu a zkopírujte IP adresu pro rozhraní eth0 .

  9. Pokud se chcete připojit k virtuálnímu počítači s Ubuntu, použijte klienta SSH, jako je OpenSSH (ssh.exe ve výchozím nastavení nainstalovaný s Windows 10) nebo Putty.

  10. Po přihlášení přes klienta SSH vydejte příkaz lspci a ověřte, že nvidia GPU je uvedený jako "3D kontroler".

    Důležité

    Pokud gpu NVIDIA není považováno za "3D řadič", nepokračujte dále. Než budete pokračovat, ujistěte se, že jste provedli výše uvedené kroky.

  11. Ve virtuálním počítači vyhledejte a otevřete Software & Aktualizace. Přejděte na Další ovladače a pak vyberte uvedené nejnovější ovladače NVIDIA GPU. Dokončete instalaci ovladače kliknutím na tlačítko Použít změny .

    Snímek obrazovky s instalací ovladače

  12. Po dokončení instalace ovladače restartujte virtuální počítač s Ubuntu. Po spuštění virtuálního počítače se připojte přes klienta SSH a spusťte příkaz nvidia-smi , abyste ověřili, že se instalace ovladače NVIDIA GPU úspěšně dokončila. Výstup by se měl podobat následujícímu snímku obrazovky:

    Snímek obrazovky znázorňující výstup příkazu nvidia-smi

  13. Pomocí klienta SSH nastavte úložiště a nainstalujte modul Docker CE:

    $ sudo apt-get update
    $ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
    

    Přidejte oficiální klíč GPG Dockeru:

    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    

    Ověřte, že teď máte klíč s otiskem prstu 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 vyhledáním posledních osmi znaků otisku prstu:

    $ sudo apt-key fingerprint 0EBFCD88
    

    Výstup by měl vypadat nějak takto:

    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]
    

    Nastavení stabilního úložiště pro architekturu Ubuntu AMD64:

    $ sudo add-apt-repository \
    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) \
    stable"
    

    Aktualizace balíčků a instalace Dockeru CE:

    $ sudo apt-get update
    $ sudo apt-get install docker-ce docker-ce-cli containerd.io
    

    Ověřte instalaci Dockeru CE:

    $ sudo docker run hello-world
    

Konfigurace Azure IoT Edge

Pokud se chcete na tuto konfiguraci připravit, projděte si nejčastější dotazy obsažené v úložišti GITHub NVIDIA-Deepstream-Azure-IoT-Edge-on-a-NVIDIA-Jetson-Nano , kde je vysvětleno, že je potřeba nainstalovat Docker místo Moby. Po kontrole přejděte k následujícím krokům.

Instalace NVIDIA Dockeru

  1. Z klienta SSH přidejte úložiště balíčků:

    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. Nainstalujte nvidia-docker2 a znovu načtěte konfiguraci démona Dockeru:

    sudo apt-get install -y nvidia-docker2
    sudo pkill -SIGHUP dockerd
    
  3. Restartujte virtuální počítač:

    sudo /sbin/shutdown -r now
    
  4. Po restartování ověřte úspěšnou instalaci NVIDIA Dockeru:

    sudo docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi
    

    Úspěšná instalace bude vypadat jako výstup na následujícím snímku obrazovky:

    Snímek obrazovky s úspěšnou instalací Dockeru

  5. Podle těchto pokynů pokračujte instalací Azure IoT Edge a přeskočíte instalaci modulu runtime:

    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
    

    Poznámka

    Po instalaci Azure IoT Edge ověřte, že se soubor config.yaml nachází na virtuálním počítači s Ubuntu na adrese /etc/iotedge/config.yaml.

  6. Vytvořte IoT Edge identitu zařízení v Azure Portal následujících doprovodných materiálech. Potom zkopírujte připojovací řetězec zařízení pro nově vytvořený IoT Edge.

  7. Pomocí klienta SSH aktualizujte připojovací řetězec zařízení v souboru config.yaml na virtuálním počítači s Ubuntu:

    sudo nano /etc/iotedge/config.yaml
    

    Vyhledejte konfigurace zřizování souboru a zrušte komentář v části Konfigurace ručního zřizování. Aktualizujte hodnotu device_connection_string pomocí připojovací řetězec z IoT Edge zařízení. Ujistěte se, že jsou všechny ostatní oddíly zřizování zakomentované. Ujistěte se, že řádek zřizování: neobsahuje žádné předchozí prázdné znaky a že jsou vnořené položky odsazené o dvě mezery:

    Snímek obrazovky s konfigurací ručního zřizování

    Pokud chcete obsah schránky vložit do Nano, stiskněte shift a klikněte pravým tlačítkem nebo stiskněte shift+insert. Uložte a zavřete soubor (Ctrl + X, Y, Enter).

  8. Pomocí klienta SSH restartujte proces démon IoT Edge:

    sudo systemctl restart iotedge
    

    Ověřte instalaci a zkontrolujte stav procesu démon IoT Edge:

    systemctl status iotedge
    
    journalctl -u iotedge --no-pager --no-full
    
  9. Pomocí klienta SSH vytvořte na virtuálním počítači s Ubuntu následující adresářovou strukturu:

    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. Ujistěte se, že je váš pracovní adresář /var/deepstream/custom_streams a stáhněte si soubor s ukázkovými videi spuštěním následujícího příkazu v klientovi SSH:

    wget -O cars-streams.tar.gz --no-check-certificate https://onedrive.live.com/download?cid=0C0A4A69A0CDCB4C&resid=0C0A4A69A0CDCB4C%21588371&authkey=AAavgrxG95v9gu0
    

    Zrušení komprese videosouborů:

    tar -xzvf cars-streams.tar.gz
    

    Obsah adresáře /var/deepstream/custom_streams by se měl podobat následujícímu snímku obrazovky:

    Snímek obrazovky s vlastními streamy

  11. V adresáři /var/deepstream/custom_configs vytvořte nový soubor s názvem test5_config_file_src_infer_azure_iotedge_edited.txt. Pomocí textového editoru otevřete soubor a vložte následující kód a pak soubor uložte a zavřete.

    # 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. Přejděte na Azure Portal. Vyberte IoT Hub Zřízeno, klikněte na Automatické Správa zařízení a pak klikněte na IoT Edge:

    Snímek obrazovky automatického Správa zařízení

  13. V pravém podokně vyberte identitu zařízení, jehož připojovací řetězec zařízení bylo použito výše. Klikněte na nastavit moduly:

    Snímek obrazovky s nastavením modulů

  14. V části moduly IoT Edge klikněte a zvolte modul IoT Edge:

    Snímek obrazovky s přidáním modulu IoT Edge

  15. V podokně Přidat modul IoT Edge vyberte kartu Nastavení modulu a pak zadejte nebo vyberte následující hodnoty:

    • název modulu IoT Edge: NVIDIADeepStreamSDK

    • Identifikátor URI obrázku: marketplace.azurecr.io/nvidia/deepstream-iot2

    • Zásady restartování: vždy

    • Požadovaný stav: spuštěno

    • Zásady vyžádání image: prázdné

    Vyberte Přidat.

    Snímek obrazovky sady DeepStream SDK

  16. Ujistěte se, že je modul NvidiaDeepStreamSDK uvedený v části moduly IoT Edge:

    IoT Edge snímek obrazovky s moduly

  17. Klikněte na modul NVIDIADeepStreamSDK a zvolte Možnosti vytvoření kontejneru. Výchozí konfigurace je zobrazená tady:

    Snímek obrazovky s možnostmi vytvoření kontejneru

    Nahraďte výše uvedenou konfiguraci následující konfigurací:

    {
      "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. Klikněte na Zkontrolovat a vytvořit a na další stránce klikněte na Vytvořit. V Azure Portal byste teď měli vidět následující tři moduly pro IoT Edge zařízení:

    Moduly a IoT Edge Hub Connections Snímek obrazovky

  19. Připojte se k virtuálnímu počítači s Ubuntu pomocí klienta SSH a ověřte, že jsou spuštěné správné moduly:

    sudo iotedge list
    

    Snímek obrazovky znázorňující výstup ze seznamu iotedge

    nvidia-smi
    

    snímek obrazovky nvidia-smi.

    Poznámka

    Stažení kontejneru NvidiaDeepstream bude trvat několik minut. Stažení můžete ověřit pomocí příkazu journalctl -u iotedge --no-pager --no-full a podívat se na protokoly démona iotedge.

  20. Ověřte, že je kontejner NvdiaDeepStreem funkční. Výstup příkazu na snímcích obrazovky níže značí úspěch.

    sudo iotedge list
    

    Snímek obrazovky s výstupem, který ukazuje, že kontejner NvdiaDeepStreem je funkční

    sudo iotedge logs -f NVIDIADeepStreamSDK
    

    Snímek obrazovky s výstupem příkazu iotedge logs -f NVIDIADeepStreamSDK

    nvidia-smi
    

    Snímek obrazovky znázorňující další výstup příkazu nvidia-smi

  21. Pomocí příkazu ifconfig ověřte adresu TCP/IP pro virtuální počítač s Ubuntu a vyhledejte adresu TCP/IP vedle rozhraní eth0 .

  22. Nainstalujte přehrávač VLC Player na pracovní stanici. V přehrávači VLC Player klikněte na Média –> otevřete síťový stream a zadejte adresu v tomto formátu:

    rtsp://ipaddress:8554/ds-test

    kde ipaddress je adresa TCP/IP vašeho virtuálního počítače.

    Snímek obrazovky přehrávače VLC.

Další kroky

Další informace o grafických procesorech (GPU) a DDA najdete také v tématech: