上一篇内容为大家介绍了从 NVIDIA NGC 下载 DeepStream 6.1 的容器版镜像到本地在 Jetson 上设备的基础指令,不过在正式使用容器版 DeepStream 6.1 之前,我们还是需要为入门用户提供基本的使用方式与一些小技巧。
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.co... - NVIDIA L4T CUDA:
https://catalog.ngc.nvidia.co... - NVIDIA Container Toolkit: https://catalog.ngc.nvidia.co...
(2)深度学习类:
- NVIDIA L4T ML:深度学习综合开发环境
https://catalog.ngc.nvidia.co... - NVIDIA L4T PyTorch:
https://catalog.ngc.nvidia.co... - NVIDIA L4T TensorFlow:
https://catalog.ngc.nvidia.co... - NVIDIA L4T TensorRT:
https://catalog.ngc.nvidia.co...
(3)视觉类:
- DeepStream-l4t
https://catalog.ngc.nvidia.co... - DeepStream L4T - Intelligent Video Analytics Demo
https://catalog.ngc.nvidia.co... - DeepStream People Detection Demo on Jetson
https://catalog.ngc.nvidia.co... - Gaze Demo for Jetson/L4T
https://catalog.ngc.nvidia.co... - Pose Demo for Jetson/L4T
https://catalog.ngc.nvidia.co...
(4)对话类:
- Voice Demo for Jetson/L4T
https://catalog.ngc.nvidia.co... - Riva Speech Skills
https://catalog.ngc.nvidia.co...
(5)教学类:
- DLI Getting Started with AI on Jetson Nano
https://catalog.ngc.nvidia.co... - DLI Building Video AI Applications at the Edge on Jetson Nano
https://catalog.ngc.nvidia.co...
(6)医疗类:专属于 Clara AGX 的应用容器镜像。
4、下载 NVIDIA L4T ML 镜像并创建容器
这是能在 Jetson 设备上执行的最完整的机器学习(Machine Learning)软件栈镜像,访问 https://catalog.ngc.nvidia.co... 之后就能看到容器内所包含的内容,以 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 版本镜像文件上。
下一篇文章我们将进一步带着大家用这个镜像文件去创建容器,并且开始执行演示或开发的内容。