部署NGC容器环境构建深度学习开发环境

更新时间:
复制 MD 格式

NGC(NVIDIA GPU CLOUD)是NVIDIA开发的一套深度学习生态系统,方便您免费访问深度学习软件堆栈,建立适合深度学习的开发环境。本文以搭建TensorFlow深度学习框架为例,为您介绍如何在GPU实例上部署NGC环境以实现深度学习开发环境的预安装。

背景信息

  • NGC网站提供了目前主流深度学习框架不同版本的镜像,例如Caffe、Caffe2、CNTK、MxNet、TensorFlow、Theano、Torch,您可以选择需要的镜像部署NGC容器环境。本文以搭建TensorFlow深度学习框架为例。

  • 阿里云在云市场镜像中提供了针对NVIDIA Pascal GPU优化的NGC容器镜像,创建GPU实例时选择NGC容器镜像,可以简单快速地部署NGC容器环境,即时访问优化后的深度学习框架,极大程度缩减产品开发以及业务部署时间,实现开发环境的预安装;同时该NGC容器镜像支持调优后的算法框架,并且阿里云会对其持续更新。

使用限制

仅以下GPU实例规格族支持部署NGC环境:

  • gn5i、gn6v、gn6i、gn6e、gn7i、gn7e、gn7s

  • ebmgn6i、ebmgn6v、ebmgn6e、ebmgn7i、ebmgn7e、ebmgn7ex、sccgn7ex

更多信息,请参见GPU计算型(gn/ebm/scc系列)

准备工作

说明

在操作本文前,请您提前在NGC网站注册自己的NGC账号。

在部署NGC环境前,请提前获取TensorFlow容器镜像路径。

  1. 登录NGC网站

  2. 在搜索区域输入TensorFlow后,选择并单击TensorFlow

    搜索结果中,第一个卡片即为目标 TensorFlow 容器(标准开源机器学习平台),单击进入。

  3. TensorFlow页面,单击Tags页签,复制对应版本的TensorFlow容器镜像。

    以下载TensorFlow22.05-tf1-py3镜像为例,TensorFlow容器镜像路径为nvcr.io/nvidia/tensorflow:22.05-tf1-py3,该路径用于后续在GPU实例中下载TensorFlow镜像时使用。

    重要

    TensorFlow镜像中的CUDA版本必须与GPU实例的驱动版本相匹配,否则会导致部署TensorFlow开发环境时失败。关于TensorFlow镜像版本、CUDA版本以及GPU实例的驱动版本对应匹配关系,请参见TensorFlow Release Notes

操作步骤

本文以gn7i实例为例,为您演示创建GPU实例时部署NGC环境的操作步骤。

  1. 创建GPU实例。

    具体操作,请参见自定义购买实例。主要配置参数说明如下:

    配置参数

    说明

    地域

    请根据GPU实例可购买地域,选择相应地域。

    您可以前往ECS实例可购买地域,查看GPU实例在各地域的可购情况。

    实例

    选择实例规格,本示例以gn7i为例。

    镜像

    1. 云市场镜像页签下,单击从云市场获取更多选择(含操作系统)

    2. 在弹出的镜像市场页面,输入NVIDIA GPU Cloud VM Image并单击搜索

    3. 找到对应镜像后并单击使用

    公网IP

    选择分配公网IPv4地址

    说明

    如果这里没有分配公网IP地址,则在GPU实例创建成功后,需要绑定EIP地址。具体操作,请参见绑定EIP

    安全组

    选择一个安全组。安全组里必须开放TCP 22端口。如果您的实例需要支持HTTPSDIGITS 6服务,必须开放TCP 443(用于HTTPS)或TCP 5000(用于DIGITS 6)端口。

  2. 选择以下任一方式远程连接GPU实例。

    连接方式

    操作指引

    Workbench

    使用Workbench登录Linux实例

    VNC

    通过VNC连接实例

  3. 执行nvidia-smi命令,查看当前GPU相关信息。

    查看Driver Version515.48.07,该GPU实例的驱动版本(515版本或更高版本)与22.05-tf1-py3版本的TensorFlow镜像中的11.7版本CUDA相匹配。

    root@xxxszfZ:~# nvidia-smi
    Sun Apr  7 11:01:55 2024
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 515.48.07    Driver Version: 515.48.07    CUDA Version: 11.7     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |                               |                      |               MIG M. |
    |===============================+======================+======================|
    |   0  Tesla T4            On   | 00000000:00:07.0 Off |                    0 |
    | N/A   32C    P8    14W /  70W |      2MiB / 15360MiB |      0%      Default |
    |                               |                      |                  N/A |
    +-------------------------------+----------------------+----------------------+
    +-----------------------------------------------------------------------------+
    | Processes:                                                                  |
    |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
    |        ID   ID                                                   Usage      |
    |=============================================================================|
    |  No running processes found                                                 |
    +-----------------------------------------------------------------------------+
  4. 执行以下命令,下载对应版本的TensorFlow容器镜像。

    docker pull nvcr.io/nvidia/tensorflow:22.05-tf1-py3
    重要

    下载TensorFlow容器镜像可能需要较长时间,请您耐心等待。

  5. 执行以下命令,查看下载的TensorFlow容器镜像信息。

    docker image ls

    命令执行后返回镜像信息,其中 TAG 为 22.05-tf1-py3,即当前下载的镜像版本标签。

    root@xxx lz:~# docker image ls
    REPOSITORY                    TAG              IMAGE ID       CREATED        SIZE
    nvcr.io/nvidia/tensorflow     22.05-tf1-py3    7c92d95961e9   2 years ago    14.4GB
  6. 执行以下命令,运行容器完成TensorFlow开发环境的部署。

    docker run --gpus all --rm -it nvcr.io/nvidia/tensorflow:22.05-tf1-py3

    命令执行成功后,返回如下类似信息。

    ================
    == TensorFlow ==
    ================
    NVIDIA Release 22.05-tf1 (build 18410160)
    TensorFlow Version 1.15.5
    Container image Copyright (c) 2020, NVIDIA CORPORATION.  All rights reserved.
    Copyright 2017-2020 The TensorFlow Authors.  All rights reserved.
    NVIDIA Deep Learning Profiler (dlprof) Copyright (c) 2020, NVIDIA CORPORATION.  All rights reserved.
    Various files include modifications (c) NVIDIA CORPORATION.  All rights reserved.
    NVIDIA modifications are covered by the license terms that apply to the underlying project or file.
    NOTE: MOFED driver for multi-node communication was not detected.
          Multi-node communication performance may be reduced.
  7. 依次执行以下命令,简单测试TensorFlow。

    python
    import tensorflow as tf
    hello = tf.constant('Hello, TensorFlow!')
    with tf.compat.v1.Session() as sess:
        result = sess.run(hello)
        print(result.decode())
                

    如果TensorFlow正确加载了GPU设备,会成功返回Hello, TensorFlow!字符串,如下所示。

    2024-08-21 04:17:14.076698: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1351] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 20427 MB memory) -> physical GPU (device: 0, name: NVIDIA A10, pci bus id: 0000:00:07.0, compute capability: 8.6)
    2024-08-21 04:17:14.077064: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1082] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
    2024-08-21 04:17:14.077724: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1351] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:1 with 20427 MB memory) -> physical GPU (device: 1, name: NVIDIA A10, pci bus id: 0000:00:08.0, compute capability: 8.6)
    2024-08-21 04:17:14.078021: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1082] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
    2024-08-21 04:17:14.078688: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1351] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:2 with 20427 MB memory) -> physical GPU (device: 2, name: NVIDIA A10, pci bus id: 0000:00:09.0, compute capability: 8.6)
    2024-08-21 04:17:14.078955: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1082] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
    2024-08-21 04:17:14.079624: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1351] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:3 with 20427 MB memory) -> physical GPU (device: 3, name: NVIDIA A10, pci bus id: 0000:00:0a.0, compute capability: 8.6)
    Hello, TensorFlow!
    >>>
  8. 保存修改后的TensorFlow镜像。

    1. GPU连接页面,打开一个新的远程连接窗口。

    2. 执行以下命令,查询容器ID(即CONTAINER_ID)。

      docker ps
      root@xxxg9dZ:~# docker ps
      CONTAINER ID   IMAGE                                        COMMAND                  CREATED          STATUS          PORTS                                NAMES
      f76a5a4347df   nvcr.io/nvidia/tensorflow:22.05-tf1-py3      "/opt/nvidia/nvidia_..."  46 seconds ago   Up 45 seconds   6006/tcp, 6064/tcp, 8888/tcp         reverent_brattain
      68xxxxxxfba    nvcr.io/nvidia/tensorflow:22.05-tf1-py3      "/opt/nvidia/nvidia_..."  9 minutes ago    Up 9 minutes    6006/tcp, 6064/tcp, 8888/tcp         jolly_liskov
    3. 执行以下命令,保存修改后的TensorFlow镜像。

      # CONTAINER_ID请替换为通过docker ps命令查询的容器ID,例如f76a5a4347d。
      docker commit   -m "commit docker" CONTAINER_ID  nvcr.io/nvidia/tensorflow:20.01-tf1-py3
      重要

      请您妥善保存修改后的TensorFlow镜像,否则会导致下次登录时配置丢失。