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-libavgstreamer1.0-plugins-goodgstreamer1.0-plugins-badgstreamer1.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

先决条件#

  1. 按照官方说明安装 docker-ce

    安装 docker-ce 后,按照安装后步骤操作,以确保 Docker 可以在没有 sudo 的情况下运行。

  2. 按照安装指南安装 nvidia-container-toolkit

  3. 获取 NGC 帐户和 API 密钥

    1. 转到 NGC 并在 Container 选项卡中搜索 DeepStream。将显示此消息:“登录以访问此存储库的 PULL 功能”。

    2. 输入您的电子邮件地址,然后单击 Next,或单击 Create an Account

    3. 当提示 Organization/Team 时,选择您的组织。

    4. 单击 Sign In

  4. 使用命令 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 内部执行以下步骤来实现此解决方法

  1. 按照上述步骤启动 Docker。

  2. 安装 cuda-toolkit-12-2。请按照这些说明进行操作

  3. 请注意:从上面链接中提到的 Cuda-12 安装说明中,请替换:sudo apt-get -y install cudasudo apt-get -y install cuda-toolkit-12-2

  4. 使用 update alternatives 将默认 CUDA 版本更改为指向 Docker 内部的 Cuda-12.2:update-alternatives --set cuda /usr/local/cuda-12.2

  5. 要检查当前在 Docker 内部使用的 CUDA 版本,请运行:update-alternatives --display cuda

注意

对于驱动程序 550 的 dGPU 也存在类似的限制,该驱动程序默认附带 Cuda-12.4,以及需要使用/启用显示的基于 Cuda-12.6 的 Docker 容器。
对于需要在使用驱动程序 550 的 dGPU 的系统上使用/启用显示的用户,请按照上述类似步骤,除了 Docker 容器内部的 Cuda-12.6 之外,还启用 cuda-toolkit-12-4。
将步骤 2 替换为 此处找到的 cuda-toolkit-12-4 安装说明

用于 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 指南