如何运行具有奇点的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 不同行业采用 ...
随机推荐
- hdu4046 不错的线段树单点更新
题意: 给一个字符串,两种操作 0 a b 询问a,b之间有多少个wbw, 1 a c 就是把第a个改成c. 思路: 这个题目我们可以用线段树的点更新来做,一开始写了个好长好长 ...
- React-条件渲染
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title&g ...
- React-列表 & Key
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title&g ...
- 分布式事务与Seate框架(1)——分布式事务理论
前言 虽然在实际工作中,由于公司与项目规模限制,实际上所谓的微服务分布式事务都不会涉及,更别提单独部署构建Seata集群.但是作为需要不断向前看的我,还是有必要记录下相关的分布式事务理论与Seate框 ...
- 一、postman基础
- 将文件服务器及域控制器从2003迁移至Windows Server 2008 R2
(一)背景环境: 当前,多数小企业仍然使用windows server2003 系统做域控制器及文件服务器,由于windows server 2003在多年使用之后变得卡顿,且存在异常的系统错误及诟病 ...
- File & Directory
新开一节IO(Input/Output)的用法. 这节主要讲一下操作文件和文件目录的两个静态类:File 和 Directory. 在进入正题之前,先理解一下相对路径和绝对路径这两个概念: 绝对路径, ...
- BUAA软件工程个人项目
写在前面 项目 内容 所属课程 2020春季计算机学院软件工程(罗杰 任健) (北航) 作业要求 [个人项目作业](<https://edu.cnblogs.com/campus/buaa/BU ...
- MzzTxx——团队贡献分分配方案
项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 团队贡献分分配规则制定 我在这个课程的目标是 进一步提升工程化开发能力,积累团队协作经验,熟悉全栈 ...
- 持续集成和持续交付工具-jenkins
jenkins说明 jenkins是一款由Java编写的开源的持续集成工具,它运行在Servlet容器中(例如Apache Tomcat).它支持软件配置管理(SCM)工具(包括AccuRev SCM ...