
# 部署NGC容器环境以构建深度学习开发环境
#### 应用场景
华为云支持使用Docker容器来部署深度学习框架，并且可以通过NVIDIA Docker来启动支持GPU加速的容器，您可以从NVIDIA NGC下载适合的容器镜像，并在华为云的GPU实例上运行。
本文以搭建TensorFlow深度学习框架为例，为您介绍如何在GPU实例上，使用容器化解决方案部署NGC容器环境以实现深度学习开发环境的预安装。
#### 背景信息
NGC容器镜像（NVIDIA GPU Cloud 容器镜像）是NVIDIA提供的一系列优化过的Docker容器镜像。
- 预配置环境：这些容器镜像内已集成了CUDA、cuDNN、深度学习框架及其他相关依赖，使用时无需进行繁琐的环境配置，直接拉取镜像运行即可。
- GPU加速：这些镜像经过优化，能够充分利用NVIDIA GPU进行计算，尤其是在深度学习、大规模数据处理和高性能计算任务中，能够显著提升计算效率。
- 优化设计：容器镜像针对特定的任务（如深度学习框架、AI 任务等）进行优化，保证了性能和兼容性。
- 多种深度学习框架：NVIDIA提供了多个常用的深度学习框架的容器镜像，包括TensorFlow、PyTorch、MXNet、Caffe等，可以根据需求选择使用。
 
#### 方案优势
- 无需手动配置环境：容器镜像已经集成了CUDA、cuDNN、深度学习框架（如TensorFlow、PyTorch等），以及其他常见的工具库。
- 轻松迁移：你可以将容器镜像在不同的云环境中运行，确保开发和生产环境的一致性。
- 版本控制：NGC上有多个版本的容器镜像，你可以选择适合自己需求的版本（例如，不同的TensorFlow或PyTorch版本）。
 
#### 部署NGC容器环境以构建深度学习开发环境
部署NGC容器环境以构建深度学习开发环境的操作步骤如下：
1. [创建GPU实例]
2. [安装Docker]
3. [安装NVIDIADocker]
4. [拉取NGC容器镜像]
5. [运行NGC容器]
6. [测试TensorFlow]
 
#### 实施步骤
1. 创建GPU实例
   
   1. 登录并进入[购买弹性云服务器](https://console.huaweicloud.com/ecm/?locale=zh-cn#/ecs/createVm)页面。
   
   2. 选择支持GPU加速型的实例（例如 Pi2系列，支持NVIDIA Tesla T4 、A30、L2等GPU）。 本文以创建pi2.2xlarge.4为例。
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002170666806.png "点击放大")
      
      
   
   3. 选择已经安装CUDA和NVIDIA驱动的镜像。 本文以Ubuntu 22.04 server 64bit with Tesla Driver 470.223.02 and CUDA 11.4镜像为例。
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002170826534.png "点击放大")
      
      
   
   4. 选择一种方式远程连接GPU实例。（如VNC登录、CloudShell登录等）。 本文以VNC登录为例。
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002206032989.png "点击放大")
      
      
   
   
   
   
2. 安装Docker
   
   NGC容器基于Docker，因此您需要安装Docker和NVIDIA Docker，以便能够使用GPU加速的容器。
   本文以Ubuntu系统为例，在其他Linux操作系统或Windows、Mac上安装Docker，请参考Docker官方文档：<https://docs.docker.com/get-docker/>）。
   1. 更新包索引并安装Docker。
      ```
      sudo apt update
      sudo apt install -y docker.io
      ```
      
   
   2. 启动Docker服务并设置开机启动。
      ```
      sudo systemctl start docker
      sudo systemctl enable docker
      ```
      
   
   3. 验证Docker安装。
      ```
      docker --version
      ```
      回显如下类似信息，表示Docker安装成功。
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002180612286.png "点击放大")
      
   
   4. 验证Docker状态
      ```
      sudo systemctl status docker
      ```
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002180771994.png "点击放大")
      
    
   
   
3. 安装NVIDIA Docker
   
   1. 添加NVIDIA Docker存储库 # 获取并添加[NVIDIA Docker GPG密钥](https://nvidia.github.io/nvidia-docker/gpgkey)
      ```
      curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
      ```
      # 添加 NVIDIA Docker 存储库
      ```
      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
      ```
      
   
   2. 安装NVIDIA Docker。 # 更新包列表
      ```
      sudo apt update
      ```
      # 安装nvidia-docker2和相关的依赖项
      ```
      sudo apt install nvidia-docker2
      ```
      # 重启Docker服务
      ```
      sudo systemctl restart docker
      ```
      
   
   3. 验证NVIDIA Docker配置 # 检查是否已安装 nvidia-docker2
      ```
      dpkg -l | grep nvidia-docker2
      ```
      回显如下类似信息，表示安装成功。
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002216018201.png "点击放大")
      
   
   
   
   
4. 拉取NGC容器镜像
   
   1. 使用Docker拉取你需要的容器镜像 # 拉取TensorFlow容器镜像
      ```
      docker pull nvcr.io/nvidia/tensorflow:xx.xx-py3
      ```
      - 其中，*xx.xx-py3*表示TensorFlow的版本号和Python版本。例如：docker pull nvcr.io/nvidia/tensorflow:21.07-tf1-py3
      
      - TensorFlow镜像中的CUDA版本必须与GPU实例的驱动版本相匹配，否则会导致部署TensorFlow开发环境时失败。关于TensorFlow镜像版本、CUDA版本以及GPU实例的驱动版本对应匹配关系，请参见<https://docs.nvidia.com/deeplearning/frameworks/tensorflow-release-notes/index.html>。
      
      - 下载TensorFlow容器镜像可能需要较长时间，请您耐心等待。
       
   
   2. 查看下载的TensorFlow容器镜像信息。
      ```
      docker image ls
      ```
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002215932633.png "点击放大")
      
   
   
   
   
5. 运行NGC容器
   
   使用NVIDIA GPU运行容器。以下是一个启动 TensorFlow 容器的示例命令：
   ```
   docker run --gpus all -it --rm nvcr.io/nvidia/tensorflow:xx.xx-py3
   ```
   例如：
   ```
   docker run --gpus all -it --rm nvcr.io/nvidia/tensorflow:21.07-tf1-py3
   ```
   ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002180612306.png "点击放大")
   
   
6. 测试TensorFlow
   
   依次执行以下命令，简单测试TensorFlow。
   ```
   python
   ```
   
   ```
   import tensorflow as tf
   print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))
   ```
   回显如下类似信息，返回信息中包含GPU的数量。
   ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002180772010.png "点击放大")
   
   
 
