0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Docker容器的入门技巧

NVIDIA英伟达企业解决方案 来源:NVIDIA英伟达企业解决方案 作者:NVIDIA英伟达企业解 2022-07-27 09:43 次阅读

上一篇内容为大家介绍了从 NVIDIA NGC 下载 DeepStream 6.1 的容器版镜像到本地在 Jetson 上设备的基础指令,不过在正式使用容器版 DeepStream6.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)端:

cd5e4032-0ce3-11ed-ba43-dac502259ad0.png

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

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-reloadsudosystemctlrestartdocker.service

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

2、简化 Docker 指令:

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

cd98575e-0ce3-11ed-ba43-dac502259ad0.png

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

sudo  groupadd  dockersudo  gpasswd  -a  ${USER}  dockersudo  service  docker  restartnewgrp-docker

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

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

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

cdb8c9a8-0ce3-11ed-ba43-dac502259ad0.png

目前已经提供近 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

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 设备上执行的最完整的机器学习(MachineLearning)软件栈镜像,访问 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 版本的镜像,例如用 JetPack5.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      SIZEnvcr.io/nvidia/l4t-mlr34.1.1-py393c715e8751b6weeksago16.2GB

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

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

审核编辑:汤梓红


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • NVIDIA
    +关注

    关注

    14

    文章

    5075

    浏览量

    103668
  • 容器
    +关注

    关注

    0

    文章

    499

    浏览量

    22113
  • Docker
    +关注

    关注

    0

    文章

    492

    浏览量

    11952

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

文章出处:【微信号:NVIDIA-Enterprise,微信公众号:NVIDIA英伟达企业解决方案】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何使用 Docker容器化技术

    对于开发人员来说,Docker肯定都不陌生,今天小编带大家重新学习一下Docker。 什么是 Docker 官话: Docker 是一种开源的容器
    的头像 发表于 09-30 11:24 1.6w次阅读

    ARM平台实现Docker容器技术

    本帖最后由 Tronlong创龙科技 于 2024-7-19 16:50 编辑 什么是Docker? (1)Docker的架构Docker是一个开源的应用容器引擎,让开发者可打包
    发表于 07-17 11:05

    ARM平台实现Docker容器技术

    本帖最后由 Tronlong创龙科技 于 2024-7-26 08:51 编辑 什么是Docker? (1)Docker的架构Docker是一个开源的应用容器引擎,让开发者可打包
    发表于 07-25 14:36

    如何在Docker中创建容器

    Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal
    发表于 01-03 15:58

    理解Docker容器并畅玩docker

    !命令行!玩docker,简单几句命令就够了。Docker容器响应迅速,执行迅速,回忆一下VM启动要多久?最佳的试验场所,想怎么玩怎么玩,rm -rf /* 根本不是大问题。主机上删掉容器
    发表于 11-05 09:54

    请问docker容器如何查看日志?

    docker容器如何查看日志
    发表于 11-19 07:29

    Docker容器管理命令(一)

    1、Docker容器管理命令的使用方法查看当前主机本地docker镜像:启动容器必须依赖镜像,所以要获取到镜像的唯一标识docker
    发表于 04-20 17:55

    Docker容器管理命令(二)

    1、Docker容器管理命令的使用方法批量删除docker 容器docker cp命令docker
    发表于 04-21 11:31

    Docker入门指南

    •简化Arm硬件的应用程序开发•在开始之前在云中工作并在边缘部署本指南假设您熟悉容器概念。如果你不熟悉容器的概念,你可以在Docker入门中了解更多。 您还需要以下内容: •访问Git
    发表于 08-02 06:09

    Docker:微容器的优势与构建教程

    非必要的东西也打包进去,所以最后构建出来的镜像就很庞大,直接导致我们的容器也变得很大。对于刚入门Docker新手来说,大家一开始基本都是用的Docker官方镜像仓库里提供的基础镜像,
    发表于 10-10 11:32 0次下载

    docker技术入门与实战

    入门docker的首本书,系统化掌握容器技术栈
    发表于 06-09 14:38 0次下载

    docker容器删除后数据还在吗

    Docker作为一个容器化平台,提供了轻量级的虚拟化解决方案,能够方便地创建、部署和管理应用程序。然而,对于Docker容器的数据持久性是一个令人关注的问题。当我们删除一个
    的头像 发表于 11-23 09:32 1938次阅读

    docker容器容器之间通信

    Docker是一种轻量级容器化技术,能够将应用程序及其依赖项封装在一个独立、可移植的容器中。而容器化的应用程序通常是以分布式方式设计的,因此实现容器
    的头像 发表于 11-23 09:36 1619次阅读

    docker进入容器的方法有哪些

    Docker是一种流行的容器化平台,它能够快速构建、交付和运行应用程序。在使用Docker时,我们经常需要进入容器进行调试、管理和运行命令等操作。本文将详细介绍
    的头像 发表于 11-23 09:45 1.1w次阅读

    docker容器有几种状态

    Docker 是一种流行的容器化平台,它能够帮助开发人员将应用程序和其依赖打包成一个独立的容器,并且能够在不同的环境中进行部署和运行。在 Docker 中,
    的头像 发表于 11-23 09:50 2366次阅读