使用Docker容器的最大好处就是“独立性强”,在前面文章中我们教大家如何使用NVIDIA在NGC提供创建好的l4t-ml系列镜像为基础,去创建各种机器学习/深度学习的开发或部署用途的独立容器,包括各种基于TensorRT的推理应用、基于Pytorch的各种YOLO相关应用等等。
但是l4t-ml容器内将大部分深度学习所需要的工具全部涵盖进去,使得这个容器镜像变得十分庞大,例如配合JetPack 5.0DP版本的nvcr.io/nvidia/l4t-ml:r34.1.1-py3镜像需要占用16.2G空间,这对大部分存储空间较为紧凑的Jetson边缘设备来说是个不小的负担,需要进一步的优化。
熟悉Docker创建容器的人都知道,只要使用“docker build -f DOCKERFILE”方式就能创建容器,不过Dockerfile内容是有复杂度的,至少包含以下两大部分:
这是相对神奇的环节,我们至少得先在一个“以操作系统为基础”的基础镜像文件之上去创建新的容器,不过还好操作系统源头都会提供这些基础镜像,只要我们能找到这些基础镜像的发行位置,就能在Dockerfile一开始使用“FROM”指令进行导入。
在Jetson设备上使用的L4T(Linxun for Tegra)版本Ubuntu操作系统是由NVIDIA所维护,因此操作系统基础镜像也由NVIDIA所提供,并且存放在NGC云中心提供下载,可以在https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-base/tags上找到详细的内容与下载的指令。
l4t-base容器内只有最基础的操作系统、驱动与Python开发环境,并未安装CUDA、cuDNN或TensorRT等开发库,L4T版本与JetPack版本是对应的,请参考下表:
如果要使用l4t-base镜像为基础,去创建与深度学习相关应用的镜像文件,就需要自行在Dockerfile内加入CUDA/cuDNN/TensorRT以及其他所需要的依赖库与软件的安装步骤,以下整理出不同Jetpack版本所对应的CUDA/cuDNN/TensorRT/OpenCV的版本,提供读者在创建相关镜像时候可以参考:
从上面简表可以看出,在JetPack 4.4至4.6版本的操作系统都是Ubuntu 18.04、CUDA版本都是10.2、Python3的版本都是3.6、OpenCV版本都是4.1.1,至于cuDNN与TensoRT则有些微的差异,基本上镜像文件的兼容性比较高。不过到了JetPack 5.0之后,操作系统升级至Ubuntu 20.04版之后,包括Python、OpenCV、CUDA版本的变化就比较大,与JetPack 4.x版本的镜像
基础容器的版本编号是对应L4T版本号,如下图:
因此要创建Jetson容器的首要工作,就是先确认系统的L4T版本,然后再挑选合适的基础镜像来进行创建的任务。
这部分就是将平常安装软件的正确步骤加入Dockerfile,使用“RUN”指令来执行所有安装内容,为了要让容器结构更加简化,通常会将所有需要的依赖库全部放在一个“RUN”指令里操作,因此创建者需要先收集并确认所需要的内容。
由于创建的容器会以root用户进行操作,因此过程都不需要用“sudo”去取得权限,可以直接使用apt-get、pip或dpkg等安装方式,有些需要预先下载的.deb、.whl或压缩文件,在使用过后最好删除以减少空间的占用。
这部分的细节内容相当繁琐,需要比较多的执行经验与整理过程,对初学者来说难度较大,因此本文特别挑选NVIDIA高级工程师所维护的jetson-container开源项目,针对在Jetson设备上创建深度学习与ROS两大类应用,提供各种对应的Dockerfile参考内容,包括安装CUDA、cuDNN、TensorRT、OpenCV、PyTorch、Tensorflow以及ROS相关环境的细节,读者可以参考这些内容再进行调整。
接下来就是下载jetson-container项目,并且以创建l4t-ml容为示范来进行讲解其操作的重点,读者只要比照相同的逻辑进行调整与修改,就能轻松地创建自己的应用与开发用途的容器镜像。
项目开源仓位置在 https://github.com/dusty-nv/jetson-containers,请执行以下指令下载到Jetson设备上:
$ $ |
git clone https://github.com/dusty-nv/jetson-containers cd jetson-containers |
项目仓的内容总共有将近60个文件,主要分为以下三大类:
接下来分析执行的重点。
这个项目主要提供深度学习与ROS两大应用类别的容器创建资源,真正的使用入口就是scripts目录下的docker_build_ml.sh与docker_build_ros.sh这两个脚本,其余脚本多是辅助用途的,用来协助判断相关软件版本,然后甚至对应变量给执行脚本进行完整的镜像创建步骤。
现在以docker_build_ml.sh为例来进行说明,后面可以加上all、tensorflow或pytorch等机器学习框架选项,现在来看看脚本的主要内容:
前面说过,创建Docker镜像的首要任务就是要确认L4T版本,然后指定NGC中合适的基础镜像版本,作为Dockerfile中第一个“FROM”的参数,在“docker build”过程中下载这个镜像。
然后传回给docker_bash.sh脚本使用;
脚本第6、7行分别执行opencv_version.sh与python_version.sh,去决定这两个部分的版本。
其中OpenCV部分经过作者修改之后固定为4.5.0版本,并以$OPENCV_DEB与$OPENCV_URL变量存放安装包的下载路径与名称。而Python版本则指定于所使用的Jetson设备上的版本,如果是JetPack 4.x版本的设备则Python版本为3.6,如果是Jetpack 5.0以后版本的设备则Python版本为3.8。
这部分主要是PyTorch与Tensorflow的版本,因为这两个是目前深度学习领域使用率最高的框架,因此这里就以这两个工具为主来创建深度学习的容器镜像。
脚本第37~137行与160~221行的内容,会根据$L4T_RELEASE变量,分别针对创建PyTorch与TensorFlow镜像所需要的配套资源,提供完整的对应参数,包括需要赋予对应的下载链接、文件名称、镜像标签(tag)等等信息,在PyTorch部分还需要提供torchvision与torchaudio的版本。
下表是根据NGC提供的l4t-ml镜像所整理的各项版本信息:
前面判断好相关版本信息之后,就会分别调用第14行build_pytorch()与第142行build_tensorflow()分别创建l4t-pytorch与l4t-tensorflow容器镜像。
下面截屏是build_pytorch()的主要内容,会调用scripts/docker_build.sh脚本与目录下的Dockerfile.pytorch配置文件,然后套用6个“--build-arg”参数进行实际创建的工作,这样就完成对l4t-pytorch镜像的创建任务。
创建l4t-tensorflow镜像的方式也是大致相同,就不重复说明。脚本最后第229~235行是创建包含PyTorch与Tensorflow两种框架的l4t-ml镜像,主要指令如下:
这样就完成在Jetson上从头创建深度学习相关的容器镜像任务,另一个创建ROS应用的docker_build_ros.sh脚本内容也是雷同,所有的关键就是先确认$L4T_RELEASE版本信息,其他的软件版本都会根据这个参数进行调整。
本文先讲解这个开源项目内的脚本内容,下一篇文章会进一步说明Dockerfile的主要细节,这样就能很轻松地掌握容器镜像的创建过程。
好文章,需要你的鼓励
OpenAI 本周为 ChatGPT 添加了 AI 图像生成功能,用户可直接在对话中创建图像。由于使用量激增,CEO Sam Altman 表示公司的 GPU "正在融化",不得不临时限制使用频率。新功能支持工作相关图像创建,如信息图表等,但在图像编辑精确度等方面仍存在限制。值得注意的是,大量用户正在使用该功能创作吉卜力动画风格的图像。
Synopsys 近期推出了一系列基于 AMD 最新芯片的硬件辅助验证和虚拟原型设计工具,包括 HAPS-200 原型系统和 ZeBu-200 仿真系统,以及面向 Arm 硬件的 Virtualizer 原生执行套件。这些创新工具显著提升了芯片设计和软件开发的效率,有助于加快产品上市速度,满足当前 AI 时代下快速迭代的需求。
人工智能正在深刻改变企业客户关系管理 (CRM) 的方方面面。从销售自动化、营销内容生成到客服智能化,AI不仅提升了运营效率,还带来了全新的服务模式。特别是自主代理AI (Agentic AI) 的出现,有望在多渠道无缝接管客户服务职能,开创CRM发展新纪元。
数据孤岛长期困扰着组织,影响着人工智能的可靠性。它们导致信息分散、模型训练不完整、洞察力不一致。解决方案包括实施强大的数据治理、促进跨部门协作、采用现代数据集成技术等。克服数据孤岛对于充分发挥AI潜力至关重要。