专业编程基础技术教程

网站首页 > 基础教程 正文

NVIDIA Jetson 系列文章(5):使用Docker容器的入门技巧

ccvgpt 2024-10-12 14:13:32 基础教程 7 ℃

上一篇内容为大家介绍了从 NVIDIA NGC 下载 DeepStream 6.1 的容器版镜像到本地在 Jetson 上设备的基础指令,不过在正式使用容器版 DeepStream 6.1 之前,我们还是需要为入门用户提供基本的使用方式与一些小技巧。


NVIDIA Jetson 系列文章(5):使用Docker容器的入门技巧

Jetson Orin 开发套件内置 64GB EMMC 存储,并且很容易扩充 64G 甚至更大的 NVME 存储设备,可以有非常充沛的空间,在这种情况下就非常推荐使用 Docker 容器技术,能有效简化应用软件的安装与调试工作,非常适合用来开发与部署较为复杂的多功能智能应用,并且在 NVIDIA NGC 上提供了非常丰富的 Docker 版本应用镜像文件,用户只要一条指令便可轻松下载使用,这是边缘计算非常重要的一项应用技术。


Docker 是一种比较新的 “容器” 技术,是 NVIDIA 近年来非常大力推广的应用重点,越来越多的 GPU 开发环境都以 Docker 镜像(或称为 “仓” )形式提供,具备以下的优点与特性:


1、轻量级:这是相较于虚拟机的比对,容器内不需要独立操作系统,它是基于主机上的操作系统,透过一些映射指令去指向资源路径。大部分的容器镜像都在数十 MB 到数 GB 大小规模。


2、硬件调度能力:这是 NVIDIA 非常喜欢 Docker 容器技术的重点之一,虚拟机环境对 GPU 支持能力并不好,得透过底层穿透(pass through)方式调用,但容易影响系统稳定性。Docker 容器直接与操作系统交互运作,只要主机上操作系统装好 NVIDIA GPU 的驱动,甚至不需要安装 CUDA 开发包,在 Docker 容器内就能轻松用上 GPU 并行计算的功能。


3、封装完整:相较于 conda 或 virtualenv 这类环境虚拟技术而言,Docker 容器的封装更为完整而且独立,这在开发 Python 相关应用时更加明显,因为 Python 版本升级太频繁,相关依赖包之间的版本牵动关系复杂,而 Docker 容器的封装就显得非常有效,并且移植十分简便。


Docker 作为一个开源的应用容器引擎,允许开发者很方便地打包应用程序和依赖库到可移植的容器中,然后发布到任何流行的 Linux 设备上,Docker 完全使用沙箱机制,容器之间相互独立,不存在任何接口,因此,允许开发者在同一台机器上,运行不同环境的应用程序与服务,大大简化应用程序(或者服务)的运维操作,同时也提高了开发与测试效率。


对于 CUDA 设备的调用,需要 NVIDIA 自行开发的 nvidia-docker2 指令转换插件的协助,在 x86 设备上都需要自行安装 Docker 管理机制与 nvidia-docker2 界面,不过 JetPack 都为 Jetson 安装好了这两个元件,我们只要使用就可以。


现在就开始教大家如何使用 Docker 容器,以及从 NVIDIA NGC 中心下载可以在 Jetson 设备上使用的镜像。


1、检查 Docker 环境与修改储存路径:

用 JetPack 安装好系统之后,直接输入以下指令,就能检查目前系统中 Docker 的所有状态信息:

sudo  docker  info

可以看到一长串关于 Docker 环境的内容,由于信息量较大就不在这里单独列出所有内容。如果要单纯查看版本号,只要执行以下指令就可以:

sudo  docker  version

现在会看到如下版本信息,包括用户(Client)端与服务(Server)端:



如果要看最简单的版本信息,那么下面指令是最适合的:


sudo  docker  --version


要检查目前 Docker 系统放置镜像文件的路径,可以执行以下指令:


sudo  docker  info  |  grep  -i  root


系统预设的存放路径为 /var/lib/docker,如果有自己添加的额外 NVME 存储设备,可以在 /etc/docker/daemon.json 文件中添加以下指令,调整存放路径:


# 文件 /etc/docker/daemon.json
{
"data-root": "<自己指定路径>",
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

修改完后执行以下指令,让新的设定值生效:

sudo  systemctl  daemon-reload
sudo  systemctl  restart  docker.service

现在可以检查看看存储的路径是否更新。


2、简化 Docker 指令:

这个应用完全依赖指令操作,在 Ubuntu 操作系统时又需要 “sudo” 取得操作权限,例如执行 “docker info” 指令,会出现下面信息,表示权限不足。

我们可以执行以下步骤,在执行 Docker 指令时可以不需要使用 “sudo”:

sudo  groupadd  docker
sudo  gpasswd  -a  ${USER}  docker
sudo  service  docker  restart
newgrp  -  docker

当然,这只是简化权限的问题,仅提供一个参考。


3、从 NGC 寻找合适的镜像文件:

访问 http://ngc.nvidia.com/ 会出现如下画面,在左上方 “搜索栏(漏斗图标)” 中输入 “l4t” 关键字,就会列出能在 Jetson 上运行的镜像列表。

目前已经提供近 20 个容器镜像,分为以下 6 大类别:


(1)基础类:

  • NVIDIA L4T Base:

https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-base

  • NVIDIA L4T CUDA:

https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-cuda

  • NVIDIA Container Toolkit:

https://catalog.ngc.nvidia.com/orgs/nvidia/teams/k8s/containers/container-toolkit


(2)深度学习类:

  • NVIDIA L4T ML:深度学习综合开发环境

https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-ml

  • NVIDIA L4T PyTorch:

https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-pytorch

  • NVIDIA L4T TensorFlow:

https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-tensorflow

  • NVIDIA L4T TensorRT:

https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-tensorrt


(3)视觉类:

  • DeepStream-l4t

https://catalog.ngc.nvidia.com/orgs/nvidia/containers/deepstream-l4t

  • DeepStream L4T - Intelligent Video Analytics Demo

https://catalog.ngc.nvidia.com/orgs/nvidia/helm-charts/video-analytics-demo-l4t

  • DeepStream People Detection Demo on Jetson

https://catalog.ngc.nvidia.com/orgs/nvidia/containers/deepstream-peopledetection

  • Gaze Demo for Jetson/L4T

https://catalog.ngc.nvidia.com/orgs/nvidia/containers/jetson-gaze

  • Pose Demo for Jetson/L4T

https://catalog.ngc.nvidia.com/orgs/nvidia/containers/jetson-pose


(4)对话类:

  • Voice Demo for Jetson/L4T

https://catalog.ngc.nvidia.com/orgs/nvidia/containers/jetson-voice

  • Riva Speech Skills

https://catalog.ngc.nvidia.com/orgs/nvidia/teams/riva/containers/riva-speech


(5)教学类:

  • DLI Getting Started with AI on Jetson Nano

https://catalog.ngc.nvidia.com/orgs/nvidia/teams/dli/containers/dli-nano-ai

  • DLI Building Video AI Applications at the Edge on Jetson Nano

https://catalog.ngc.nvidia.com/orgs/nvidia/teams/dli/containers/dli-nano-deepstream


(6)医疗类:专属于 Clara AGX 的应用容器镜像。


4、下载 NVIDIA L4T ML 镜像并创建容器

这是能在 Jetson 设备上执行的最完整的机器学习(Machine Learning)软件栈镜像,访问 https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-ml 之后就能看到容器内所包含的内容,以 l4t-ml:r32.6.1-py3 版本为例,其打包的工具与功能库如下:


  • TensorFlow 1.15.5
  • PyTorch v1.9.0
  • torchvision v0.10.0
  • torchaudio v0.9.0
  • onnx 1.8.0
  • CuPy 9.2.0
  • numpy 1.19.5
  • numba 0.53.1
  • OpenCV 4.5.0 (with CUDA)
  • pandas 1.1.5
  • scipy 1.5.4
  • scikit-learn 0.23.2
  • JupyterLab 2.2.9


这已经涵盖我们所需要的绝大部分内容,只要下载镜像后生成执行的容器,就能直接使用里面的开发环境,这样能节省非常大量的安装与调试的时间。


点击页面右上角 “Pull Tag” 按钮,会列出目前可下载版本的镜像文件,最好选择配合目前 JetPack 版本的镜像,例如用 JetPack 5.0 DP 安装的 Jetson Orin 开发套件,其 L4T 版本为 34.1.1,就用下面指令下载 r34.1.1-py3 镜像:


docker  pull  nvcr.io/nvidia/l4t-ml:r34.1.1-py3


下载完成之后可以用以下指令检查:


docker  images


如果出现以下信息,则表示下载完成。


REPOSITORY        TAG           IMAGE ID       CREATED      SIZE
nvcr.io/nvidia/l4t-ml   r34.1.1-py3   93c715e8751b   6 weeks ago   16.2GB


这个方法可以用在任何 L4T 版本镜像文件上。


下一篇文章我们将进一步带着大家用这个镜像文件去创建容器,并且开始执行演示或开发的内容。

Tags:

最近发表
标签列表