• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • 3 月 19 日下午 2 點,鎖定 NVIDIA AI 網絡中文專場。立即注冊觀看
    模擬/建模/設計

    直接在 NVIDIA DRIVE AGX Orin 上運行 Docker 容器

    NGC 上的 NVIDIA DRIVE OS 主機端 Docker 容器為在主機開發機上安裝 Debian 軟件包提供了一種快速而簡單的替代方案。

    使用 NVIDIA DRIVE 平臺的開發人員要求能夠直接在 NVIDIA DRIVE AGX 硬件上運行 Docker 容器,以便快速設置環境以運行具有許多包依賴性的應用程序。

    NVIDIA DRIVE OS 6.0.6 Linux 現在包括 NVIDIA Container Toolkit 運行時,作為閃存到板上的目標根文件系統( RFS )的一部分。它使開發人員能夠直接在目標 NVIDIA DRIVE AGX 硬件上運行 Docker 容器。

    本文介紹了如何在目標 NVIDIA DRIVE AGX 硬件上運行的 Docker 容器中運行一些示例應用程序。

    安裝程序

    在主機上安裝 NVIDIA DRIVE 操作系統,并對目標板進行閃存。詳見 NVIDIA DRIVE OS 6.0 Installation Guide

    使用 NVIDIA DRIVE OS 6.0.6 閃爍 NVIDIA DRIVE AGX Orin 后,您可以從 NGC 或 Docker Hub 提取目標側 Docker 映像,并在目標上立即運行 GPU – 加速容器。

    在目標側 Docker 容器內運行 CUDA 樣本

    RFS 使用 NVIDIA DRIVE OS 6.0.6 閃存到目標硬件上,在/usr/local/cuda-11.4/samples提供 CUDA 樣本。矩陣乘法 CUDA 示例在 Ubuntu 20.04 Docker 容器中運行,以演示容器中 NVIDIA DRIVE AGX Orin 上 GPU 的可訪問性。

    $ cd /usr/local/cuda-11.4/samples/0_Simple/matrixMul && sudo make
    $ sudo docker run --rm --runtime nvidia --gpus all -v $(pwd):$(pwd) -w $(pwd) ubuntu:20.04 ./matrixMul

    以下輸出顯示 CUDA 示例的成功運行:

    nvidia@tegra-ubuntu:/usr/local/cuda-11.4/samples/0_Simple/matrixMul$ sudo docker run --rm --runtime nvidia --gpus all -v $(pwd):$(pwd) -w $(pwd) ubuntu:20.04 ./matrixMul
    [sudo] password for nvidia: 
    [Matrix Multiply Using CUDA] - Starting...
    GPU Device 0: "Ampere" with compute capability 8.7
    
    MatrixA(320,320), MatrixB(640,320)
    Computing result using CUDA Kernel...
    done
    Performance= 617.91 GFlop/s, Time= 0.212 msec, Size= 131072000 Ops, WorkgroupSize= 1024 threads/block
    Checking computed result for correctness: Result = PASS
    
    NOTE: The CUDA samples are not meant for performance measurements. Results may vary when GPU Boost is enabled.

    在目標端 Docker 容器中運行自定義應用程序

    RFS 中提供的兩個文件 -devices.csv 和 drivers.sv-are 閃存到板上,供 Docker 容器內的應用程序訪問設備、驅動程序和共享庫。這些文件都有一個設備、驅動程序和共享庫的列表,這些列表是應用程序在 Docker 容器中成功運行所需的。

    這些文件必須經過編輯,以反映應用程序在 Docker 容器中運行自定義應用程序所需的所有設備、驅動程序和共享庫。要訪問這兩個文件,請參閱/etc/nvidia-container-runtime/host-files-for-container.d/

    例如,與cudaNvSci樣本不同, CUDA 樣本cudaNvSci不會開箱即用。嘗試在 Docker 容器內運行 CUDA 樣本而不對 drivers.csv 進行任何更改,會導致以下錯誤:

    nvidia@tegra-ubuntu:cd /usr/local/cuda-11.4/samples/0_Simple/cudaNvSci && sudo make
    nvidia@tegra-ubuntu:/usr/local/cuda-11.4/samples/0_Simple/cudaNvSci$ sudo docker run --rm --runtime nvidia --gpus all -v $(pwd):$(pwd) -w $(pwd) ubuntu:20.04 ./cudaNvSci
    ./cudaNvSci: error while loading shared libraries: libnvscibuf.so.1: cannot open shared object file: No such file or directory

    CUDA 樣本確實在 Docker 容器之外工作。直接在目標上運行樣本的輸出如下所示:

    nvidia@tegra-ubuntu:/usr/local/cuda-11.4/samples/0_Simple/cudaNvSci$ ./cudaNvSci
    1 GPUs found
    Loaded './lenaRGB.ppm', 1024 x 1024 pixels
    [cudaNvSciSignal] GPU Device 0: "Ampere" with compute capability 8.7
     
    [cudaNvSciWait] GPU Device 0: "Ampere" with compute capability 8.7
     
    created NvSciBufObj
    created NvSciBufImageObj
    created NvSciSyncObj
    Wrote 'lenaRGB_out.ppm'

    如果樣本在 Docker 容器中運行,則應該會產生輸出(如上)。相反,加載共享庫libnvscibuf.so.1會導致錯誤。要修復此錯誤,請查看 drivers.csv 的內容:

    dir, /usr/lib/firmware/tegra23x
     
    lib, /usr/lib/libcuda.so.1
    lib, /usr/lib/libnvrm_gpu.so
    lib, /usr/lib/libnvrm_mem.so
    lib, /usr/lib/libnvrm_sync.so
    lib, /usr/lib/libnvrm_host1x.so
    lib, /usr/lib/libnvos.so
    lib, /usr/lib/libnvsocsys.so
    lib, /usr/lib/libnvtegrahv.so
    lib, /usr/lib/libnvsciipc.so
    lib, /usr/lib/libnvrm_chip.so
    lib, /usr/lib/libnvcucompat.so

    此列表不包括樣本在 Docker 容器中運行所需的libnvscibuf.so.1

    此時,lddobjdump 等工具可以幫助確定示例所需的共享庫,以便可以編輯 drivers.csv 文件以包含它們。

    cudaNvSci上運行ldd會產生以下輸出:

    nvidia@tegra-ubuntu:/usr/local/cuda-11.4/samples/0_Simple/cudaNvSci$ ldd ./cudaNvSci
        	linux-vdso.so.1 (0x0000ffffa9f2b000)
        	libcuda.so.1 => /usr/lib/libcuda.so.1 (0x0000ffffa8933000)
        	libnvscibuf.so.1 => /usr/lib/libnvscibuf.so.1 (0x0000ffffa88c1000)
        	libnvscisync.so.1 => /usr/lib/libnvscisync.so.1 (0x0000ffffa888f000)
        	librt.so.1 => /lib/aarch64-linux-gnu/librt.so.1 (0x0000ffffa8877000)
        	libpthread.so.0 => /lib/aarch64-linux-gnu/libpthread.so.0 (0x0000ffffa8846000)
        	libdl.so.2 => /lib/aarch64-linux-gnu/libdl.so.2 (0x0000ffffa8832000)
        	libstdc++.so.6 => /lib/aarch64-linux-gnu/libstdc++.so.6 (0x0000ffffa864d000)
        	libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x0000ffffa8629000)
        	libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000ffffa84b6000)
        	/lib/ld-linux-aarch64.so.1 (0x0000ffffa9efb000)
        	libnvrm_gpu.so => /usr/lib/libnvrm_gpu.so (0x0000ffffa844a000)
        	libnvrm_mem.so => /usr/lib/libnvrm_mem.so (0x0000ffffa8431000)
        	libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x0000ffffa8386000)
        	libnvos.so => /usr/lib/libnvos.so (0x0000ffffa8365000)
        	libnvscicommon.so.1 => /usr/lib/libnvscicommon.so.1 (0x0000ffffa8350000)
        	libnvsciipc.so => /usr/lib/libnvsciipc.so (0x0000ffffa8325000)
        	libnvrm_host1x.so => /usr/lib/libnvrm_host1x.so (0x0000ffffa8303000)
        	libnvsocsys.so => /usr/lib/libnvsocsys.so (0x0000ffffa82ef000)
        	libnvtegrahv.so => /usr/lib/libnvtegrahv.so (0x0000ffffa82dc000)
        	libnvrm_sync.so => /usr/lib/libnvrm_sync.so (0x0000ffffa82c4000)
        	libnvrm_chip.so => /usr/lib/libnvrm_chip.so (0x0000ffffa82b0000)

    此列表顯示cudaNvSci示例所需的所有共享庫,包括libnvscibuf.so.1

    現在,編輯 drivers.csv 以包括列表中尚未存在的共享庫。添加所需庫后, drivers.csv 的內容如下(新增粗體行):

    dir, /usr/lib/firmware/tegra23x
     
    lib, /usr/lib/libcuda.so.1
    lib, /usr/lib/libnvrm_gpu.so
    lib, /usr/lib/libnvrm_mem.so
    lib, /usr/lib/libnvrm_sync.so
    lib, /usr/lib/libnvrm_host1x.so
    lib, /usr/lib/libnvos.so
    lib, /usr/lib/libnvsocsys.so
    lib, /usr/lib/libnvtegrahv.so
    lib, /usr/lib/libnvsciipc.so
    lib, /usr/lib/libnvrm_chip.so
    lib, /usr/lib/libnvcucompat.so
    lib, /usr/lib/libnvscibuf.so.1
    lib, /usr/lib/libnvscisync.so.1
    lib, /lib/aarch64-linux-gnu/librt.so.1,
    lib, /lib/aarch64-linux-gnu/libpthread.so.0
    lib, /lib/aarch64-linux-gnu/libdl.so.2
    lib, /lib/aarch64-linux-gnu/libstdc++.so.6
    lib, /lib/aarch64-linux-gnu/libgcc_s.so.1
    lib, /lib/aarch64-linux-gnu/libc.so.6
    lib, /lib/aarch64-linux-gnu/libm.so.6,
    lib, /usr/lib/libnvscicommon.so.1

    編輯 drivers.csv 文件后,cudaNvSci示例現在可以在 Docker 容器中運行:

    nvidia@tegra-ubuntu:/usr/local/cuda-11.4/samples/0_Simple/cudaNvSci$ sudo docker run --rm --runtime nvidia --gpus all -v $(pwd):$(pwd) -w $(pwd) ubuntu:20.04 ./cudaNvSci
    1 GPUs found
    Loaded './lenaRGB.ppm', 1024 x 1024 pixels
    [cudaNvSciSignal] GPU Device 0: "Ampere" with compute capability 8.7
     
    [cudaNvSciWait] GPU Device 0: "Ampere" with compute capability 8.7
     
    created NvSciBufObj
    created NvSciBufImageObj
    created NvSciSyncObj
    Wrote 'lenaRGB_out.ppm'

    類似地,您可以編輯 dell.csv 和 drivers.csv 來添加自定義應用程序所需的設備和驅動程序,以便在目標設備的 Docker 容器中運行它們。

    結論

    NVIDIA DRIVE OS 6.0.6 Linux 現在支持直接在 NVIDIA DRIVE AGX Orin 硬件上運行 Docker 容器。許多示例應該在閃爍后立即在 Docker 容器中運行,但有些應用程序可能需要訪問其他設備和驅動程序,這可以通過編輯 dell.csv 和 drivers.csv 文件來實現。

    ?

    0

    標簽

    人人超碰97caoporen国产