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
更多資訊,請參見GPU計算型(gn/ebm/scc系列)。
準備工作
在操作本文前,請您提前在NGC網站註冊自己的NGC帳號。
在部署NGC環境前,請提前擷取TensorFlow容器鏡像路徑。
-
登入NGC網站。
-
在搜尋地區輸入TensorFlow後,選擇並單擊TensorFlow。
搜尋結果中,第一個卡片即為目標 TensorFlow 容器(標準開源Machine Learning Platform for AI),單擊進入。
-
在TensorFlow頁面,單擊Tags頁簽,複製對應版本的TensorFlow容器鏡像。
以下載TensorFlow
22.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環境的操作步驟。
-
建立GPU執行個體。
具體操作,請參見自訂購買執行個體。主要配置參數說明如下:
配置參數
說明
地區
請根據GPU執行個體可購買地區,選擇相應地區。
您可以前往ECS執行個體可購買地區,查看GPU執行個體在各地區的可購情況。
實例
選擇執行個體規格,本樣本以gn7i為例。
鏡像
-
在雲市場鏡像頁簽下,單擊從雲市場擷取更多選擇(含作業系統)。
-
在彈出的鏡像市場頁面,輸入NVIDIA GPU Cloud Virtual Machine Image並單擊搜索。
-
找到對應鏡像後並單擊選擇。
公網IP
選擇分配公網IPv4地址。
說明如果這裡沒有分配公網IP地址,則在GPU執行個體建立成功後,需要綁定EIP地址。具體操作,請參見綁定EIP。
安全性群組
選擇一個安全性群組。安全性群組裡必須開放TCP 22連接埠。如果您的執行個體需要支援HTTPS或DIGITS 6服務,必須開放TCP 443(用於HTTPS)或TCP 5000(用於DIGITS 6)連接埠。
-
-
選擇以下任一方式遠端連線GPU執行個體。
串連方式
操作指引
Workbench
VNC
-
執行
nvidia-smi命令,查看當前GPU相關資訊。查看Driver Version為515.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 | +-----------------------------------------------------------------------------+ -
執行以下命令,下載對應版本的TensorFlow容器鏡像。
docker pull nvcr.io/nvidia/tensorflow:22.05-tf1-py3重要下載TensorFlow容器鏡像可能需要較長時間,請您耐心等待。
-
執行以下命令,查看下載的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 -
執行以下命令,運行容器完成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. -
依次執行以下命令,簡單測試TensorFlow。
pythonimport 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! >>> -
儲存修改後的TensorFlow鏡像。
-
在GPU串連頁面,開啟一個新的遠端連線視窗。
-
執行以下命令,查詢容器ID(即
CONTAINER_ID)。docker psroot@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 -
執行以下命令,儲存修改後的TensorFlow鏡像。
# CONTAINER_ID請替換為通過docker ps命令查詢的容器ID,例如f76a5a4347d。 docker commit -m "commit docker" CONTAINER_ID nvcr.io/nvidia/tensorflow:20.01-tf1-py3重要請您妥善儲存修改後的TensorFlow鏡像,否則會導致下次登入時配置丟失。
-