如何运行具有奇点的NGC深度学习容器
如何运行具有奇点的NGC深度学习容器
How to Run NGC Deep Learning Containers with Singularity
高性能计算机和人工智能的融合使新的科学突破成为可能。现在需要在同一个系统上同时部署HPC和AI工作负载。
支持HPC和AI工作负载所需的软件环境的复杂性是巨大的。应用软件依赖于许多相互依赖的软件包。仅仅获得一个成功的构建是一个挑战,更不用说确保构建得到优化,以利用最新的硬件和软件功能。
容器是一种广泛采用的降低HPC和AI软件部署复杂性的方法。整个软件环境,从深度学习框架本身,到性能所必需的数学和通信库,都打包成一个包。由于容器中的工作负载总是使用相同的环境,因此性能是可复制和可移植的。
NGC是一个GPU优化软件的注册中心,通过提供定期更新和验证的HPC和AI应用程序容器,使科学家和研究人员受益匪浅。NGC最近宣布从19.11版开始,支持在Singularity容器运行时使用deep learning容器。这大大简化了使用奇点的HPC站点采用人工智能方法的过程。
这文说明了NGC和Singularity是如何极大地简化在HPC系统上部署深度学习工作负载的。
Training ResNet-50 with TensorFlow
ResNet首次用于赢得2015年ImageNet比赛,至今仍是一种流行的图像分类模型,被广泛用作深度学习训练的基准。在几个简单的步骤中,将演示如何使用TensorFlow和ImageNet数据库中的图像训练ResNet-50v1.5模型。尽管目前ResNet模型的训练几乎是微不足道的,但这里所示的相同方法可以用于扩展更大模型的训练,也可以用于其深度学习框架。

Figure 1: ResNet-50 architecture (source)
除了作为一个容器注册表,NGC还提供完整的人工智能工作流,包括预先训练的模型和脚本。一个例子是TensorFlow的ResNet-50v1.5模型;对于这个例子,严格遵循快速入门指南。 该示例使用Singularity版本3,并假设已经从集群资源管理器中获得了交互式节点分配。
1. 下载并提取ImageNet数据集,如《快速入门指南》的步骤2“下载数据”所述。请注意,ResNet-50的总体性能对用于存储映像的文件系统的性能敏感,因此总体性能将有所不同。在运行中,使用了一个本地SSD。
2.NGC TensorFlow 19.11容器映像已经包含ResNet-50模型脚本,位于/workspace/nvidia examples/resnet50v1.5中,所以使用了。或者,可以从NGC模型脚本页面下载模型脚本。 3. 使用奇点拉动NGC TensorFlow容器。这是一个简单的命令,可以作为非特权用户运行。(注意:如果IT管理员已经设置了NGC容器复制器,则TensorFlow容器可能已经位于系统中。)
$ singularity pull tensorflow-19.11-tf1-py3.sif docker://nvcr.io/nvidia/tensorflow:19.11-tf1-py3
4. 容器下载完成后,第四步也是最后一步是训练模型。让从使用一个GPU和FP16开始。NGC模型脚本页的Performance选项卡上的相应Python命令行需要包装在命令中,以启动在上一步中下载的Singularity容器图像。
$ singularity run --nv -B /local/imagenet:/data/imagenet pytorch-19.11-tf1-py3.sif python /workspace/nvidia-examples/resnet50v1.5/main.py --mode=training_benchmark --use_tf_amp --warmup_steps=200 --batch_size=256 --data_dir=/data/imagenet --results_dir=/tmp/resnet
使用了两个具有奇点的选项,-nv和-B。第一个选项,-nv在奇点中启用NVIDIA GPU支持。第二个,-B,bind将/local/imagenet目录挂载到提取imagenet数据库的主机上,挂载到容器中的/data/imagenet位置。修改此项以使用提取ImageNet数据库的位置。python命令取自1gpu/FP16案例的NGC模型脚本页面,只需稍作修改即可使用NGC容器中包含的模型脚本。
在运行中,使用Singularity获得了大约每秒980张图像,Docker的结果几乎相同,都使用了一个NVIDIA V100 GPU和19.11 TensorFlow NGC容器图像。
Multi-node Training with TensorFlow and Horovod
分布式计算是高性能计算的重要组成部分。像Horovod这样的框架支持分布式深度学习。TensorFlow NGC容器包括Horovod,以实现多节点的开箱即用训练。在本节中,将展示Singularity作为HPC容器运行时的起源如何使执行多节点训练变得容易。在这里,从集群资源管理器中分配了两个集群节点,每个节点都有4xV100 gpu。
使用Singularity扩展MPI工作负载的通常方法是使用容器外部的MPI运行时在容器实例内部启动分布式任务(也称为“outside in”或“hybrid”)。与运行本机MPI工作负载相比,此方法所需的更改最少,但确实需要主机上的MPI运行时与容器中的MPI库兼容。19.11 NGC TensorFlow映像捆绑了OpenMPI版本3.1.4,因此任何大于3.0的主机OpenMPI版本都应该可以工作,但是版本越接近匹配越好。
启动一个两节点的训练运行,每个节点使用4xgpu的奇点和NGC容器是很简单的。像往常一样使用mpirun并使用命令从上面启动Singularity容器。实际上,与上一个示例中的单个GPU命令行相比,唯一的区别是使用mpirun启动。
$ mpirun singularity run --nv -B /local/imagenet:/data/imagenet tensorflow-19.11-tf1-py3.sif python /workspace/nvidia-examples/resnet50v1.5/main.py --mode=training_benchmark --use_tf_amp --warmup_steps=200 --batch_size=256 --data_dir=/data/imagenet --results_dir=/tmp/resnet
注意:在这种情况下,主机上的MPI运行时可以识别资源管理器,因此不需要手动指定要启动多少MPI列组或如何放置。MPI运行时能够从交互式SLURM作业分配(srun--nodes 2--ntasks 8--pty--time=15:00bash-i)中推断出此信息。如果MPI运行时不是这样设置的,或者集群使用不同的资源管理器,则需要手动告诉MPI运行时使用两个节点,每个节点具有4个列组/GPU,例如mpirun-n 8--n per node 4--hostfile hostfile其中hostfile包含已分配的节点的名称,每行一个,或者mpirun-n 8-H node1:4,node2:4,用分配给节点的名称替换node1和node2。
应该注意到,在两个节点上已使用总共8个GPU(每个节点4个GPU)启动了8个训练任务。在使用的特定系统上,分布式训练性能大约为每秒6800个图像,相对于单个GPU,大约加速6.9倍。使用XLA(-use-XLA)和/或DALI(-use-DALI)可以进一步提高性能,这两个都包含在NGC容器图像中。
使用Singularity扩展MPI工作负载的另一种方法是在容器中使用MPI运行时(也称为“inside out”或“self-contained”)。这消除了对兼容主机MPI运行时的依赖,但需要额外的配置来手动指定作业的大小和形状,以及在容器中启动所有任务。这两种方法,以及优缺点,在网络研讨会“用奇点扩展NGC工作负载”中有更详细的描述。
前面的示例假设有一个交互式会话,但是也可以通过一个可以提交给资源管理器的作业脚本(例如,使用SLURM的sbatch)来部署训练。
#!/bin/bash
#SBATCH -J resnet50
#SBATCH -t 15:00
#SBATCH -N 2
#SBATCH -n 8
# site specific
module load singularity openmpi/3.1.0
# dataset staging, if necessary
# ...
mpirun singularity run --nv -B /local/imagenet:/data/imagenet tensorflow-19.11-tf1-py3.sif python /workspace/nvidia-examples/resnet50v1.5/main.py --mode=training_benchmark --use_tf_amp --warmup_steps=200 --batch_size=256 --data_dir=/data/imagenet --results_dir=/tmp/resnet
立即快速部署人工智能工作负载
NGC提供的容器图像经过验证、优化,并定期更新为所有流行的深度学习框架的最新版本。随着奇点支持的增加,NGC容器现在可以更广泛地部署,包括HPC中心,个人GPU支持的工作站,以及喜欢的云。
下载一个NGC容器并运行
如何运行具有奇点的NGC深度学习容器的更多相关文章
- 惊不惊喜, 用深度学习 把设计图 自动生成HTML代码 !
如何用前端页面原型生成对应的代码一直是我们关注的问题,本文作者根据 pix2code 等论文构建了一个强大的前端代码生成模型,并详细解释了如何利用 LSTM 与 CNN 将设计原型编写为 HTML 和 ...
- 知识图谱与机器学习 | KG入门 -- Part1-b 图深度学习
介绍 我们正在定义一种新的机器学习方法,专注于一种新的范式 -- Data Fabric. 在上一篇文章中,我们对机器学习给出了新的定义: 机器学习是一种自动发现Data Fabric中隐藏的&quo ...
- 《深度学习框架PyTorch:入门与实践》的Loss函数构建代码运行问题
在学习陈云的教程<深度学习框架PyTorch:入门与实践>的损失函数构建时代码如下: 可我运行如下代码: output = net(input) target = Variable(t.a ...
- 使用colab运行深度学习gpu应用(Mask R-CNN)实践
1,目的 Google Colaboratory(https://colab.research.google.com)是谷歌开放的一款研究工具,主要用于机器学习的开发和研究.这款工具现在可以免费使用, ...
- 【神经网络与深度学习】chainer边运行边定义的方法使构建深度学习网络变的灵活简单
Chainer是一个专门为高效研究和开发深度学习算法而设计的开源框架. 这篇博文会通过一些例子简要地介绍一下Chainer,同时把它与其他一些框架做比较,比如Caffe.Theano.Torch和Te ...
- [源码解析] 深度学习流水线并行 PipeDream(4)--- 运行时引擎
[源码解析] 深度学习流水线并行 PipeDream(4)--- 运行时引擎 目录 [源码解析] 深度学习流水线并行 PipeDream(4)--- 运行时引擎 0x00 摘要 0x01 前言 1.1 ...
- NVIDIA数据中心深度学习产品性能
NVIDIA数据中心深度学习产品性能 在现实世界的应用程序中部署AI,需要训练网络以指定的精度融合.这是测试AI系统的最佳方法-准备将其部署在现场,因为网络随后可以提供有意义的结果(例如,对视频流正确 ...
- NVIDIA GPUs上深度学习推荐模型的优化
NVIDIA GPUs上深度学习推荐模型的优化 Optimizing the Deep Learning Recommendation Model on NVIDIA GPUs 推荐系统帮助人在成倍增 ...
- 基于NVIDIA GPUs的深度学习训练新优化
基于NVIDIA GPUs的深度学习训练新优化 New Optimizations To Accelerate Deep Learning Training on NVIDIA GPUs 不同行业采用 ...
随机推荐
- php 日志处理工具 SeasLog 的使用
首先附上seaslog github地址: https://github.com/Neeke/SeasLog/blob/master/README_zh.md php官方文档地址: https://w ...
- UVA10020(最小区间覆盖)
题意: 给你一个区间[0,m]和一些小的区间[l,r]让你选择最少的小区间个数去把整个区间覆盖起来. 思路: 算是比较经典的贪心题目吧(经典于难度没什么对应关系),大体思路可以 ...
- hdu2276 矩阵构造
题意: 给了n个灯泡的状态,他们绕成一个环,0是灭,1是亮,每一秒灯泡的状态都会改变,规则是如果当前这个灯泡的左边的灯泡当前是状态1,那么下一秒当前的这个灯泡状态就改变0变1,1变0,最后问 ...
- hdu 4891 模拟
题意: 给你一个串,问你有几种意思,有两个规则 (1) { } 答案乘以 ({}之间"|"的个数 + 1) (2) && 答案乘以 (&a ...
- Windows中的工作组和域
目录 工作组 工作组的访问 工作组的优缺点 域 域结构 域的原理 部署域架构 如何加入域 域中主机的登录 SRV出错及解决办法 SRV记录注册不成功的可能原因 禁用域中的账户 将计算机退出域 工作组 ...
- <JVM从入门到精通>导航
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...
- h5基本内容
一 简介 html 超文本标记语言 W3C 中立技术标准机构 W3C标准包括 结构化标准语言(HTML,XML) 表现标准语言(CSS) 行为标准(DOM,ECMAScript) 二 入门例子 < ...
- Github镜像网站
https://hub.fastgit.org
- SpringBoot JPA + 分页 + 单元测试SpringBoot JPA条件查询
application.properties 新增数据库链接必须的参数 spring.jpa.properties.hibernate.hbm2ddl.auto=update 表示会自动更新表结构,所 ...
- C++逆向分析----多重继承和菱形继承
多重继承 多重继承是指C++类同时继承两个类或两个以上的类. class Test { public: int num1; Test() { num1 = 1; } virtual void Proc ...