Docker 容器#
DeepStream 7.1 为 x86 和 ARM 平台(如 SBSA、GH100 等)以及 Jetson 平台上的 dGPU 提供 Docker 容器。这些容器提供了一种方便的开箱即用的方式来部署 DeepStream 应用程序,方法是将所有相关的依赖项打包在容器内。相关的 Docker 镜像托管在 NGC Web 门户的 NVIDIA 容器注册表中,网址为 https://ngc.nvidia.com。它们使用 nvidia-docker
包,该包允许从容器访问所需的 GPU 资源。本节介绍 x86 和 ARM 以及 Jetson 平台上 dGPU 的 DeepStream Docker 容器支持的功能。
注意
用于 x86 和 ARM (SBSA) 上 dGPU 的 DeepStream 7.1 容器以及 Jetson 的容器是不同的,因此您必须为您的平台获取正确的镜像。
注意
对于 DS 7.1,DeepStream Docker 容器不打包某些多媒体操作所需的库,例如音频数据解析、CPU 解码和 CPU 编码。此更改可能会影响处理某些包含音轨的视频流/文件,例如 mp4。在 Docker 镜像内部运行以下脚本以安装可能需要使用的所有 DeepStreamSDK 功能的附加软件包(例如 gstreamer1.0-libav、gstreamer1.0-plugins-good、gstreamer1.0-plugins-bad、gstreamer1.0-plugins-ugly,根据需要):
/opt/nvidia/deepstream/deepstream/user_additional_install.sh
注意
位于
/opt/nvidia/deepstream/deepstream/samples
的脚本prepare_classification_test_video.sh
需要安装ffmpeg
。一些底层编解码器库需要与 ffmpeg 一起重新安装。使用以下命令安装/重新安装 ffmpeg:
apt-get install --reinstall libflac8 libmp3lame0 libxvidcore4 ffmpeg
先决条件#
按照官方说明安装
docker-ce
。安装 docker-ce 后,按照安装后步骤操作,以确保 Docker 可以在没有
sudo
的情况下运行。按照安装指南安装
nvidia-container-toolkit
。获取 NGC 帐户和 API 密钥
转到 NGC 并在 Container 选项卡中搜索 DeepStream。将显示此消息:“登录以访问此存储库的 PULL 功能”。
输入您的电子邮件地址,然后单击 Next,或单击 Create an Account。
当提示 Organization/Team 时,选择您的组织。
单击 Sign In。
使用命令
docker login nvcr.io
登录到 NGC Docker 注册表 (nvcr.io
),然后输入以下凭据a. Username: "$oauthtoken" b. Password: "YOUR_NGC_API_KEY"
其中
YOUR_NGC_API_KEY
对应于您从步骤 3 生成的密钥。
运行 Docker 容器的示例命令
# Pull the required docker. Refer Docker Containers table to get docker container name.
$ docker pull <required docker container name>
# Step to run the docker
$ export DISPLAY=:0
$ xhost +
$ docker run -it --rm --net=host --gpus all -e DISPLAY=$DISPLAY --device /dev/snd -v /tmp/.X11-unix/:/tmp/.X11-unix <required docker container name>
用于 dGPU 的 Docker 容器#
NGC Web 门户中的容器页面提供了有关拉取和运行容器的说明,以及对其内容的描述。dGPU 容器称为 deepstream
,Jetson 容器称为 deepstream-l4t
。与 DeepStream 3.0 中的容器不同,dGPU DeepStream 7.1 容器支持在容器内进行 DeepStream 应用程序开发。它包含与 DeepStream 7.1 SDK 相同的构建工具和开发库。在典型情况下,您在 DeepStream 容器内构建、执行和调试 DeepStream 应用程序。应用程序准备就绪后,您可以将 DeepStream 7.1 容器用作基础镜像,以创建您自己的 Docker 容器,其中包含您的应用程序文件(二进制文件、库、模型、配置文件等)。以下是用于创建您自己的 Docker 容器的 Dockerfile 的示例代码片段
FROM nvcr.io/nvidia/deepstream:7.1-<container type>
COPY myapp /root/apps/myapp
# To get video driver libraries at runtime (libnvidia-encode.so/libnvcuvid.so)
ENV NVIDIA_DRIVER_CAPABILITIES $NVIDIA_DRIVER_CAPABILITIES,video
此 Dockerfile 将您的应用程序(从目录 mydsapp
)复制到容器中(pathname /root/apps
)。请注意,您必须确保 NGC 中的 DeepStream 7.1 镜像位置准确。
下表列出了 DeepStream 7.1 随附发布的用于 dGPU 的 Docker 容器
用于 dGPU 的 Docker 容器# 容器
容器拉取命令
Triton devel Docker(包含整个 SDK 以及用于构建 DeepStream 应用程序和 Graph Composer 的开发环境)
docker pull nvcr.io/nvidia/deepstream:7.1-gc-triton-devel
Triton Inference Server Docker,其中安装了 Triton Inference Server 和依赖项,以及用于构建 DeepStream 应用程序的开发环境
docker pull nvcr.io/nvidia/deepstream:7.1-triton-multiarch
DeepStream 示例 Docker(包含运行时库、GStreamer 插件、参考应用程序和示例流、模型和配置)
docker pull nvcr.io/nvidia/deepstream:7.1-samples-multiarch
有关 nvcr.io
身份验证和更多信息,请参阅 DeepStream 7.1 发行说明。
注意
有关更多详细信息和运行 dGPU 容器的说明,请参阅 NGC 上的dGPU 容器。
x86 dGPU Docker 上视频子系统的建议设置#
注意
这不会影响在 RTX 系列上使用 Nvidia Driver 560 系列的 dGPU。
DeepStream 7.1 默认在计算堆栈以及 Docker 容器中支持 Cuda-12.6。数据中心 GPU 目前仅受驱动程序 535.183.06 支持,该驱动程序默认附带 Cuda-12.2 驱动程序。
即使 CUDA 支持与更新的运行时版本(如 Cuda-12.6)向前兼容,但其他组件(如 Cuda-GL Interop)不支持向前兼容,并且可能无法按预期工作,而显示接收器需要这些组件才能工作。因此,为了使其他组件(如 Cuda-GL Interop)能够工作,除了 Docker 容器内部的默认 Cuda-12.6 运行时之外,还必须安装 Cuda-12.2 工具包。
对于需要使用/启用显示输出的用户,建议在 Docker 内部执行以下步骤来实现此解决方法
按照上述步骤启动 Docker。
安装 cuda-toolkit-12-2。请按照这些说明进行操作
请注意
:从上面链接中提到的 Cuda-12 安装说明中,请替换:sudo apt-get -y install cuda
为sudo apt-get -y install cuda-toolkit-12-2
使用 update alternatives 将默认 CUDA 版本更改为指向 Docker 内部的 Cuda-12.2:
update-alternatives --set cuda /usr/local/cuda-12.2
要检查当前在 Docker 内部使用的 CUDA 版本,请运行:
update-alternatives --display cuda
注意
用于 Jetson 的 Docker 容器#
从 JetPack 4.2.1 版本开始,已添加用于 Jetson 的 NVIDIA 容器运行时,使您能够在 Jetson 设备上运行启用 GPU 的容器。使用此功能,DeepStream 7.1 可以在 Jetson 设备上的容器内使用 NGC 上的 Docker 镜像运行。按照 NGC 容器页面上的说明拉取并执行容器。DeepStream 容器不再期望在 Jetson 设备上安装 CUDA、TensorRT,因为它包含在容器镜像中。在启动 DeepStream 容器之前,请确保使用 JetPack 安装 BSP,并从 Jetpack 或 apt 服务器安装 nvidia-container 工具(请参阅以下说明)。Jetson Docker 容器仅用于部署。它们不支持在容器内进行 DeepStream 软件开发。您可以在 Jetson 目标上本地构建应用程序,并通过将二进制文件添加到 Docker 镜像来为其创建容器。或者,您可以使用 NVIDIA Container Runtime for Jetson 文档中在 x86 工作站上构建 Jetson 容器部分中的说明从工作站生成 Jetson 容器。下表列出了 DeepStream 7.1 随附发布的用于 Jetson 的 Docker 容器
用于 Jetson 的 Docker 容器# 容器
容器拉取命令
DeepStream 示例 Docker(包含运行时库、GStreamer 插件、参考应用程序和示例流、模型和配置)
docker pull nvcr.io/nvidia/deepstream:7.1-samples-multiarch
DeepStream Triton Docker(包含示例 Docker 的内容,外加 devel 库和 Triton Inference Server 后端)
docker pull nvcr.io/nvidia/deepstream:7.1-triton-multiarch
注意
对于 Jetson Triton Container,在运行 Docker 时会打印错误消息“Failed to detect NVIDIA driver version”。目前未观察到对功能有任何影响。
有关 nvcr.io
身份验证和更多信息,请参阅 DeepStream 7.1 发行说明。
注意
有关更多详细信息和运行 Jetson 容器的说明,请参阅 NGC 上的Jetson 容器。
用于 ARM (IGX/dGPU, GH100, GH200, SBSA) 上 dGPU 的 Docker 容器#
NGC Web 门户中的容器页面提供了有关拉取和运行容器的说明,以及对其内容的描述。ARM 上 dGPU 容器称为 deepstream:<version>-triton-arm-sbsa
,Jetson 容器称为 deepstream-l4t
。与 DeepStream 3.0 中的容器不同,dGPU DeepStream 7.1 容器支持在容器内进行 DeepStream 应用程序开发。它包含与 DeepStream 7.1 SDK 相同的构建工具和开发库。在典型情况下,您在 DeepStream 容器内构建、执行和调试 DeepStream 应用程序。应用程序准备就绪后,您可以将 DeepStream 7.1 容器用作基础镜像,以创建您自己的 Docker 容器,其中包含您的应用程序文件(二进制文件、库、模型、配置文件等)。以下是用于创建您自己的 Docker 容器的 Dockerfile 的示例代码片段
FROM nvcr.io/nvidia/deepstream:7.1-<container type>
COPY myapp /root/apps/myapp
# To get video driver libraries at runtime (libnvidia-encode.so/libnvcuvid.so)
ENV NVIDIA_DRIVER_CAPABILITIES $NVIDIA_DRIVER_CAPABILITIES,video
此 Dockerfile 将您的应用程序(从目录 mydsapp
)复制到容器中(pathname /root/apps
)。请注意,您必须确保 NGC 中的 DeepStream 7.1 镜像位置准确。
下表列出了 DeepStream 7.1 随附发布的用于 ARM 上 dGPU 的 Docker 容器
用于 ARM 上 dGPU 的 Docker 容器# 容器
容器拉取命令
Triton Inference Server Docker,其中安装了 Triton Inference Server 和依赖项,以及用于构建 DeepStream 应用程序的开发环境
docker pull nvcr.io/nvidia/deepstream:7.1-triton-arm-sbsa
有关 nvcr.io
身份验证和更多信息,请参阅 DeepStream 7.1 发行说明。
注意
有关更多详细信息和运行 ARM (SBSA) 上 dGPU 容器的说明,请参阅 NGC 上的ARM 上 dGPU 容器。
视频子系统的已知限制和解决方法#
对于 DS 7.1 arm sbsa Docker,默认情况下,视频显示在 ARM 系统上的 dGPU 上将无法工作。有关详细信息和解决方法,请参阅视频子系统的已知限制和解决方法部分。
使用 DeepStreamSDK 包为 dGPU 或 Jetson 创建自定义 DeepStream Docker#
注意
有关更多详细信息,请参阅 GitHub 上的DeepStream Dockerfile 指南。
在 Jetson 上运行新 Docker 镜像所需的建议最低 L4T 设置#
建议用户仅从 Jetpack 安装 L4T BSP,然后使用命令行从 Debian 仓库安装 NVIDIA Container Runtime,以节省 Jetson 设备上的空间。
1. 在 sdkmanager Jetpack 设置的步骤 02 中,选择“Jetson OS”并取消选择“Jetson SDK Components”以仅刷写 BSP。请参阅下面的屏幕截图以供参考。

从命令行安装 nvidia-container 的说明
Flash BSP from Jetpack and boot Run "sudo apt update" Run "sudo apt install docker.io" Run "sudo apt install nvidia-container" Run "sudo apt install nvidia-l4t-gstreamer" Run "sudo apt install nvidia-l4t-dla-compiler" Run "sudo service docker restart"