NVIDIA GPU Cloud (NGC) は、NVIDIA が開発したディープラーニングエコシステムで、開発環境を構築するためのディープラーニングソフトウェアスタックへの無料アクセスを提供します。このトピックでは、TensorFlow を例として、GPU 加速インスタンスに NGC 環境をデプロイする手順を説明します。
背景
-
NGC ウェブサイトでは、Caffe、Caffe2、Microsoft Cognitive Toolkit (CNTK)、MXNet、TensorFlow、Theano、Torch などの主流のディープラーニングフレームワークのさまざまなバージョンのイメージを提供しています。要件に基づいてイメージを選択し、NGC コンテナ環境をデプロイします。このトピックでは TensorFlow を例に説明します。
-
Alibaba Cloud は、Alibaba Cloud Marketplace で NVIDIA Pascal GPU に最適化された NGC コンテナイメージを提供しています。GPU 加速インスタンスを作成する際にこれらのイメージを選択すると、最適化され定期的に更新されるディープラーニングフレームワークを備えた NGC コンテナ環境を迅速にデプロイできます。
制限
NGC 環境は、次のインスタンスファミリーのインスタンスにデプロイできます。
-
gn5i、gn6v、gn6i、gn6e、gn7i、gn7e、および gn7s
-
ebmgn6i、ebmgn6v、ebmgn6e、ebmgn7i、および ebmgn7e
詳細については、「GPU コンピューティング最適化インスタンスファミリー」をご参照ください。
前提条件
開始する前に、NGC ウェブサイトで NGC アカウントが作成済みであることを確認してください。
開始する前に、TensorFlow コンテナイメージの URL を取得しておきます。
-
検索ボックスに TensorFlow と入力します。
検索結果で、TensorFlow コンテナカードをクリックします。
-
TensorFlow ページで Tags タブをクリックし、目的の TensorFlow コンテナイメージバージョンのパスをコピーします。
この例では、
22.05-tf1-py3イメージの URL である nvcr.io/nvidia/tensorflow:22.05-tf1-py3 を使用して、GPU 高速化インスタンスにイメージをダウンロードします。重要TensorFlow イメージの CUDA バージョンは、GPU 加速インスタンスのドライバーバージョンと一致している必要があります。一致しない場合、デプロイは失敗します。バージョンの互換性の詳細については、「TensorFlow リリースノート」をご参照ください。
操作手順
次の例では、gn7i インスタンスを使用して NGC 環境をデプロイします。
-
GPU 加速インスタンスを作成します。
詳細については、「カスタム起動タブでのインスタンスの作成」をご参照ください。次の主要なパラメーターを設定します。
パラメーター
説明
[リージョン]
GPU 加速インスタンスを提供するリージョンを選択します。
各リージョンでの GPU 加速インスタンスの利用可否を確認するには、「各リージョンで利用可能なインスタンスタイプ」をご参照ください。
[インスタンス]
インスタンスタイプを選択します。この例では、gn7i を使用します。
[イメージ]
-
Marketplace イメージ タブで、[Alibaba Cloud マーケットプレイスから選択] をクリックします。
-
表示されるダイアログボックスに、NVIDIA GPU Cloud Virtual Machine Image と入力し、検索 をクリックします。
-
イメージを見つけ、選択をクリックします。
[パブリック IP アドレス]
[パブリック IPv4 アドレスの割り当て] を選択します。
説明パブリック IP アドレスが割り当てられていない場合は、インスタンスの作成後に Elastic IP アドレス (EIP) をインスタンスに関連付けます。詳細については、「1 つ以上の EIP をインスタンスに関連付ける」をご参照ください。
[セキュリティグループ]
TCP ポート 22 が有効になっているセキュリティグループを選択します。インスタンスで HTTPS または Deep Learning GPU Training System (DIGITS) 6 が必要な場合は、HTTPS 用の TCP ポート 443 または DIGITS 6 用の TCP ポート 5000 も有効にします。
-
-
次の表に示すいずれかの方法で、インスタンスに接続します。
方法
参考
Workbench
VNC
-
nvidia-smiコマンドを実行して、現在の GPU に関する情報を表示します。出力から、ドライバーバージョンが 515.48.07 で、
22.05-tf1-py3TensorFlow イメージで要求される CUDA 11.7 と互換性があることがわかります。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 NVIDIA A10 On | 00000000:00:07.0 Off | 0 | | N/A 32C P8 14W / 150W | 2MiB / 23028MiB | 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 接続ページで、リモート接続用の新しいウィンドウを開きます。
-
次のコマンドを実行して
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:22.05-tf1-py3重要変更した TensorFlow イメージが保存されていることを確認してください。保存しない場合、次回インスタンスにログインしたときに変更が失われる可能性があります。
-