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.
Nainstalujte GPU NVIDIA fyzicky na příslušné servery podle pokynů výrobce OEM a doporučení systému BIOS.
Zapněte každý server.
Přihlaste se pomocí účtu s oprávněními správce k serverům s nainstalovanou grafickou kartou NVIDIA.
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".
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í.
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.
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
Ověřte, že je zařízení uvedené v části systémová zařízení v Správce zařízení jako Odpojené.
Vytvoření a konfigurace virtuálního počítače s Ubuntu
Stáhněte si ubuntu desktopovou verzi 18.04.02 ISO.
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.
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.
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:
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.
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č.
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:
Přihlaste se k Ubuntu a otevřete terminál pro instalaci SSH:
$ sudo apt install openssh-server
Pomocí příkazu ifconfig vyhledejte adresu TCP/IP pro instalaci Ubuntu a zkopírujte IP adresu pro rozhraní eth0 .
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.
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.
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 .
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:
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
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
Nainstalujte nvidia-docker2 a znovu načtěte konfiguraci démona Dockeru:
sudo apt-get install -y nvidia-docker2 sudo pkill -SIGHUP dockerd
Restartujte virtuální počítač:
sudo /sbin/shutdown -r now
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:
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.
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.
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:
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).
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
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
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:
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
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:
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:
V části moduly IoT Edge klikněte a zvolte modul IoT Edge:
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.
Ujistěte se, že je modul NvidiaDeepStreamSDK uvedený v části moduly IoT Edge:
Klikněte na modul NVIDIADeepStreamSDK a zvolte Možnosti vytvoření kontejneru. Výchozí konfigurace je zobrazená tady:
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/" }
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í:
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
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.
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
sudo iotedge logs -f NVIDIADeepStreamSDK
nvidia-smi
Pomocí příkazu ifconfig ověřte adresu TCP/IP pro virtuální počítač s Ubuntu a vyhledejte adresu TCP/IP vedle rozhraní eth0 .
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.
Další kroky
Další informace o grafických procesorech (GPU) a DDA najdete také v tématech:
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro