1、NGC 简介
NGC 全称 NVIDIA GPU Cloud,是面向深度学习和科学计算优化的 GPU 加速云平台,包括 NGC 容器、registry 以及平台软件,是 Nvidia 向所有 GPU 用户提供的免费的、针对深度学习优化过的容器镜像,目的是帮助 Nvidia GPU 用户快速搭建深度学习环境,并尽可能高效利用硬件的计算能力。
NGC 支持多种 AI 计算框架(NVCaffe、Caffe2、TensorFlow、MXNet、PyTorch……)和主流 GPU(包括 Tesla 系列卡和消费级卡 GTX、RTX),常用的 AI 框架镜像每个月都会更新以适配社区的迭代速度,省去手动编译的复杂流程,开箱即用。
NGC 镜像内置了 CUDA、cuDNN、TensorRT 等基础计算库,NCCL、OpenMPI、Horovod 等通信库和 TF/Caffe/MXNet/... 等框架,众所周知这些软件变化速度非常快,每个月都会有更新,自己维护一套环境需要有极大的耐心和极强的适应能力,熟悉每个版本的特性和缺陷。NGC 则由 Nvidia 维护库之间的兼容性和依赖性,无需用户再花大量精力去做各种版本库的适配性测试。
2、如何在滴滴云 GPU 服务器上搭建 NGC 环境
步骤 1:购买滴滴云 GPU 服务器
注意选择 GPU 云服务器(目前型号有 P4、P40、P100、T4)。
OS 镜像可以选择 CentOS 7.5 或 Ubuntu 16.04,根据个人喜好来定(推荐使用 CUDA-10.0 后缀镜像)。
注意目前 NGC 只支持 Linux。Windows 系统无法运行。
注意 GPU 驱动版本需要 418 以上,如果已选镜像中 GPU 驱动版本较低,则需要用户按如下步骤手动安装较高版本 Nvidia GPU 驱动(驱动文件通过滴滴云内网下载,速度快):
【CentOS】
sudo yum -y install pciutils sudo yum -y install gcc gcc-c++ kernel-headers kernel-devel wget http://mirrors.intra.didiyun.com/gpu_resource/NVIDIA-Linux-x86_64-430.34.run chmod 755 NVIDIA-Linux-x86_64-430.34.run sudo ./NVIDIA-Linux-x86_64-430.34.run
【Ubuntu】
sudo apt update sudo apt -y install pciutils sudo apt -y install build-essential linux-headers-$(uname -r) wget http://mirrors.intra.didiyun.com/gpu_resource/NVIDIA-Linux-x86_64-430.34.run chmod 755 NVIDIA-Linux-x86_64-430.34.run sudo ./NVIDIA-Linux-x86_64-430.34.run
安装过程可以选默认设置。
安装完成后运行 nvidia-smi 检查是否正常(这里以 P100 为例,其他型号输出类似):
官方步骤参考:https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html
由于 NGC 镜像内置了 CUDA、cuDNN、TensorRT 等加速库,我们无需再单独安装。
步骤 2:安装 nvidia-docker
Nvidia 利用容器来开发、测试、评测、部署深度学习框架和 HPC 应用,为此专门为 docker 开发了 runtime 以更好地支持 Nvidia GPU,即为 nvidia-docker。
本节命令全部使用 root 权限执行,需要先 sudo su。
【CentOS】
#!/bin/bash ## 1. Install docker-ce yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum -y install docker-ce docker-ce-cli containerd.io systemctl restart docker systemctl enable docker ### verification docker version ## 2. Install nvidia-docker curl -s -L https://nvidia.github.io/nvidia-docker/centos7/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo yum install -y nvidia-docker2 systemctl restart docker ### verification nvidia-docker run hello-world
【Ubuntu】
#!/bin/bash ## 1. Install docker-ce apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" apt update apt install -y docker-ce docker-ce-cli containerd.io docker version ## 2. Install nvidia-docker curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list apt update apt install -y nvidia-docker2 systemctl daemon-reload systemctl restart docker
步骤 3:获取 NGC image
NGC 镜像拉取需要首先在官网注册 API Key 并登录,之后运行 docker pull 镜像名。实际使用中我们发现从官方 pull 镜像速度很慢而且很不稳定,经常无缘无故断开连接。为此,我们利用滴滴云 Docker Hub 构建了国内 NGC 镜像加速器,滴滴云用户可直接通过内网 pull 镜像,极大缩短了环境初始化时间。
在滴滴云 GPU 云服务器上,按照前面步骤正常安装 GPU 驱动(>418)、nvidia-docker 之后,运行如下命令可获取 pytorch 镜像,版本号为 19.08-py3:
【CentOS & Ubuntu】
## 1. Login to Didiyun Docker hub docker login --username=public --password=ddy_public hub.didiyun.com ## 2. Pull images docker pull hub.didiyun.com/ngc/pytorch:19.08-py3
滴滴云 NGC 镜像只是官方镜像的一个子集,如缺少您所需的镜像版本,可联系滴滴工程师协助。
以下为滴滴云 NGC 镜像内网链接汇总表(持续更新):
框架名 | 版本号 | 内网链接 |
---|---|---|
TensorFlow | 19.06-py3 | hub.didiyun.com/ngc/tensorflow:19.06-py3 hub.didiyun.com/ngc/tensorflow:19.07-py3 hub.didiyun.com/ngc/tensorflow:19.08-py3 hub.didiyun.com/ngc/tensorflow:19.09-py3 hub.didiyun.com/ngc/tensorflow:19.10-py3 hub.didiyun.com/ngc/tensorflow:19.11-tf2-py3 hub.didiyun.com/ngc/tensorflow:19.11-tf1-py3 hub.didiyun.com/ngc/tensorflow:19.12-tf2-py3 hub.didiyun.com/ngc/tensorflow:19.12-tf1-py3 |
PyTorch | 19.06-py3 19.07-py3 19.08-py3 19.09-py3 19.10-py3 19.11-py3 19.12-py3 | hub.didiyun.com/ngc/pytorch:19.06-py3 hub.didiyun.com/ngc/pytorch:19.07-py3 hub.didiyun.com/ngc/pytorch:19.08-py3 hub.didiyun.com/ngc/pytorch:19.09-py3 hub.didiyun.com/ngc/pytorch:19.10-py3 hub.didiyun.com/ngc/pytorch:19.11-py3 hub.didiyun.com/ngc/pytorch:19.12-py3 |
MXNet | 19.06-py3 19.07-py3 19.08-py3 19.09-py3 19.10-py3 19.11-py3 19.12-py3 | hub.didiyun.com/ngc/mxnet:19.06-py3 hub.didiyun.com/ngc/mxnet:19.07-py3 hub.didiyun.com/ngc/mxnet:19.08-py3 hub.didiyun.com/ngc/mxnet:19.09-py3 hub.didiyun.com/ngc/mxnet:19.10-py3 hub.didiyun.com/ngc/mxnet:19.11-py3 hub.didiyun.com/ngc/mxnet:19.12-py3 |
NVCaffe | 19.06-py2 19.07-py2 19.08-py2 19.09-py2 19.10-py2 19.11-py3 19.12-py3 | hub.didiyun.com/ngc/nvcaffe:19.06-py2 |
Kaldi | 19.08-py3 | hub.didiyun.com/ngc/kaldi:19.08-py3 hub.didiyun.com/ngc/kaldi:19.09-py3 hub.didiyun.com/ngc/kaldi:19.10-py3 |
TensorRT | 19.07-py3 19.08-py3 19.09-py3 19.10-py3 19.12-py3 | hub.didiyun.com/ngc/tensorrt:19.07-py3 hub.didiyun.com/ngc/tensorrt:19.08-py3 hub.didiyun.com/ngc/tensorrt:19.09-py3 hub.didiyun.com/ngc/tensorrt:19.10-py3 hub.didiyun.com/ngc/tensorrt:19.12-py3 |
TensorRT Server | 19.07-py3 19.08-py3 19.09-py3 19.10-py3 19.12-py3 | hub.didiyun.com/ngc/tensorrtserver:19.07-py3 |
DeepStream | hub.didiyun.com/ngc/deepstream:4.0-19.07 | |
DeepStream-l4t* | hub.didiyun.com/ngc/deepstream-l4t:4.0-19.07 hub.didiyun.com/ngc/deepstream-l4t:4.0.1-19.09-samples | |
RAPIDS | hub.didiyun.com/ngc/rapids:0.9-cuda10.0-runtime-ubuntu18.04 hub.didiyun.com/ngc/rapidsai:0.10-cuda10.0-runtime-ubuntu18.04 | |
Transfer Learning Toolkit | hub.didiyun.com/ngc/tlt-streamanalytics:v1.0_py2 |
*注:DeepStream-l4t 只能在 Jetson 平台上运行
注:从 19.11 版本开始,TensorFlow 分为 2.0、1.x 两个分支;
注:从 19.11 版本开始,NVCaffe 从 Python2 切换到 Python3;
步骤 4:启动 NGC 容器
运行命令
nvidia-docker run -ti --rm -v /data:/data hub.didiyun.com/ngc/tensorflow:19.08-py3 /bin/bash
其中 -v /data:/data 表示将云服务器的 /mnt 目录映射到 Docker /mnt 位置,方便 Docker 与云服务器之间互拷文件。
如果运行有问题,请检查驱动版本是否满足 >418 的条件。
步骤 5:NGC 示例——运行 ResNet 50 训练
在 Docker 中运行如下命令:
cd /workspace/nvidia-examples/cnn mpirun --allow-run-as-root -np 1 python -u ./resnet.py --batch_size 160 --num_iter 800 --preci fp16 --iter_unit batch --layers 50
运行期间会打印训练速度,单位为 img/s。