在 NVIDIA Developer Kits 上同时使用集成 GPU 和独立 GPU
NVIDIA Developer Kits,例如 NVIDIA IGX Orin 或 NVIDIA Clara AGX,同时具有独立 GPU (dGPU - 在 IGX Orin 上为可选) 和集成 GPU (iGPU - Tegra SoC)。
在此版本中,当这些开发者套件被刷写为利用 dGPU 时,有两个限制因素阻止 iGPU 的使用
dGPU 内核模式驱动程序和 iGPU 显示内核驱动程序(均名为
nvidia.ko
)之间存在冲突。此冲突目前无法解决,这意味着当 dGPU 启用时,iGPU 不能用于显示。dGPU 和 iGPU 的用户模式驱动程序库(例如:
libcuda.so
)和计算堆栈(例如:libcuda_rt.so
)之间存在冲突。
我们提供了实用程序来解决第二个冲突
从为 dGPU 刷写的 IGX 开发者套件中,运行以下命令以启用 iGPU 容器支持
sudo /opt/nvidia/l4t-igpu-container-on-dgpu-host-config/l4t-igpu-container-on-dgpu-host-config.sh configure
有关详细信息,请参阅 IGX 用户指南。
要在 Holoscan 中同时利用两个 GPU,您可以选择
创建并发运行的单独 Holoscan 应用程序,其中 iGPU 应用程序必须在 Holoscan iGPU 容器中运行,而 dGPU 应用程序可以在裸机或 Holoscan dGPU 容器中运行。有关如何使用 iGPU 启动 Holoscan 容器的详细信息,请参阅 IGX 用户指南。
创建一个利用 iGPU 和 dGPU 的单一分布式应用程序,方法是在 iGPU 和 dGPU 上执行单独的片段。
下面的示例显示了使用 Holoscan 容器在 iGPU 和 dGPU 之间进行 ping 分布式应用程序
COMMON_DOCKER_FLAGS="--rm -i --init --net=host
--runtime=nvidia -e NVIDIA_DRIVER_CAPABILITIES=all
--cap-add CAP_SYS_PTRACE --ipc=host --ulimit memlock=-1 --ulimit stack=67108864
"
HOLOSCAN_VERSION=2.9.0
HOLOSCAN_IMG="nvcr.io/nvidia/clara-holoscan/holoscan:v$HOLOSCAN_VERSION"
HOLOSCAN_DGPU_IMG="$HOLOSCAN_IMG-dgpu"
HOLOSCAN_IGPU_IMG="$HOLOSCAN_IMG-igpu"
# Pull images
docker pull $HOLOSCAN_DGPU_IMG
docker pull $HOLOSCAN_IGPU_IMG
# Run ping distributed (python) in dGPU container
# - Making this one the `driver`, but could be igpu too
# - Using & to not block the terminal to run igpu afterwards. Could run igpu in separate terminal instead.
docker run \
$COMMON_DOCKER_FLAGS \
$HOLOSCAN_DGPU_IMG \
bash -c "python3 ./examples/ping_distributed/python/ping_distributed.py --gpu --worker --driver" &
# Run ping distributed (c++) in iGPU container
docker run \
$COMMON_DOCKER_FLAGS \
-e NVIDIA_VISIBLE_DEVICES=nvidia.com/igpu=0 \
$HOLOSCAN_IGPU_IMG \
bash -c "./examples/ping_distributed/cpp/ping_distributed --gpu --worker"
L4T Compute Assist 是 NGC 上的一个容器,它通过包含 L4T BSP 软件包来隔离 iGPU 堆栈,以便在为 dGPU 配置的开发者套件上启用 iGPU 计算。其他应用程序可以同时在 dGPU 上本地或在另一个容器中运行。
这些实用程序仅支持将 iGPU 用于显示以外的功能,因为它们没有解决上面列出的第一个冲突。