本チュートリアルは、AIや機械学習ワークロードに最適なNVIDIA A100 40/80 GB 8枚と100 GbpsのRDMA対応ネットワークインタフェースを16ポート搭載するUbuntuをOSとするGPUノード( BM.GPU4.8/BM.GPU.A100-v2.8 )を クラスタ・ネットワーク を使用してノード間接続し、1ノードでは搭載しきれないGPUを必要とする大規模な分散機械学習ワークロードを実行するためのGPUクラスタを構築、複数ノードに跨るGPU間の通信性能を NCCL(NVIDIA Collective Communication Library) テストプログラム( NCCL Tests )で検証します。

本チュートリアルは、 OCI HPCテクニカルTips集 の以下2本のコンテンツを組合せ、 クラスタ・ネットワーク とGPUを使用するためのソフトウェアをインストール・セットアップし、GPUクラスタを構築します。

これらソフトウェアのインストールは、手順が多く相応の所要時間が必要なため、予め最小ノード(2ノード)のクラスタを構築してこのGPUノードにソフトウェアをインストール、このGPUノードの カスタム・イメージ を使用して、実際に使用するGPUクラスタを構築します。

以上より、UbuntuをOSとするGPUクラスタの構築は、以下の手順を経て行います。

  • カスタム・イメージ 取得用2ノードGPUクラスタ構築
  • クラスタ・ネットワーク 接続用ソフトウェアインストール
  • クラスタ・ネットワーク 接続・確認
  • GPU関連ソフトウェアインストール
  • CUDA Samples によるGPU動作確認
  • NCCL 通信性能検証
  • カスタム・イメージ 取得
  • cloud-init 設定ファイル(cloud-config)作成
  • インスタンス構成 作成
  • クラスタ・ネットワーク 作成

以降は、機械学習ワークロード向けベアメタルシェイプ BM.GPU4.8 とUbuntu 20.04の組合せを取り上げ、具体的な手順を解説します。
本テクニカルTipsでは BM.GPU4.8 を使用しますが、 BM.GPU.A100-v2.8 の場合も同様の手順を適用することが可能です。

システム構成図

所要時間 : 約4時間

前提条件 : GPUクラスタを収容するコンパートメント(ルート・コンパートメントでもOKです)の作成と、このコンパートメントに対する必要なリソース管理権限がユーザーに付与されていること。

注意 : チュートリアル内の画面ショットについては、OCIの現在のコンソール画面と異なっている場合があります。


1. カスタム・イメージ取得用2ノードGPUクラスタ構築

本章は、 クラスタ・ネットワーク に接続するためのソフトウェアとGPUを利用するためのソフトウェアをインストールした カスタム・イメージ を取得するため、2ノードのGPUクラスタを構築します。

具体的には、 OCI HPCテクニカルTips集クラスタ・ネットワーク非対応OSイメージを使ったクラスタ・ネットワーク接続方法1. カスタム・イメージ取得用2ノードHPC/GPUクラスタ構築 の手順を BM.GPU4.8 とUbuntuの組合せで実施します。

この手順を完了すると、以下のリソースがデプロイされた状態になります。

  • 仮想クラウド・ネットワーク
  • Bastionノード
  • クラスタ・ネットワーク
  • BM.GPU4.8 x 2(OS:Ubuntu 20.04)

2. クラスタ・ネットワーク接続用ソフトウェアインストール

本章は、 クラスタ・ネットワーク に接続するための以下ソフトウェアをインストールします。

  • Mellanox OFED
  • wpa_supplicant
  • oci-cn-auth

具体的には、 OCI HPCテクニカルTips集クラスタ・ネットワーク非対応OSイメージを使ったクラスタ・ネットワーク接続方法2. クラスタ・ネットワーク接続用ソフトウェアインストール2-3. Ubuntu 20.04の場合 を実施します。


3. クラスタ・ネットワーク接続・確認

本章は、GPUノードの クラスタ・ネットワーク への接続に必要な設定とその接続確認のため、以下の手順を実施します。

  • クラスタ・ネットワーク 接続用ネットワークインターフェース作成
  • Intel MPI Benchmark 実行

具体的には、 OCI HPCテクニカルTips集クラスタ・ネットワーク非対応OSイメージを使ったクラスタ・ネットワーク接続方法3. クラスタ・ネットワーク接続・確認BM.GPU4.8 とUbuntu 20.04の組合わせで実施します。


4. GPU関連ソフトウェアインストール

本章は、GPU関連ソフトウェアをインストールします。

具体的には、 OCI HPCテクニカルTips集UbuntuをOSとする機械学習ワークロード向けGPUノード構築方法2. GPU関連ソフトウェアインストール を実施し、以下のソフトウェアをインストールします。

  • NVIDIA Driver
  • NVIDIA CUDA
  • NVIDIA Fabric Manager

その後、以下コマンドをGPUノードのubuntuユーザで実行し、 NCCL をインストールします。

$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb
$ sudo dpkg -i cuda-keyring_1.0-1_all.deb
$ sudo apt install libnccl2=2.15.5-1+cuda11.8 libnccl-dev=2.15.5-1+cuda11.8

なお本章の作業は、2ノードに跨る NCCL 通信性能検証を行う必要から、2台のGPUノードの何れにも実施します。


5. CUDA SamplesによるGPU動作確認

本章は、 CUDA Samples で先のGPU関連ソフトウェアのインストールが正しく行われたかを確認します。

具体的には、 OCI HPCテクニカルTips集UbuntuをOSとする機械学習ワークロード向けGPUノード構築方法3. CUDA Samplesによる動作確認 を実施します。

なお本章の作業は、2ノードに跨る NCCL 通信性能検証を行う必要から、2台のGPUノードの何れにも実施します。


6. NCCL通信性能検証

6-0. 概要

本章は、 NCCL Tests を使用し、GPUクラスタ内の NCCL によるGPU間通信性能を確認します。
ここで使用する NCCL Tests は、ソースコードからビルドします。

以上より、本章で実施する NCCL 通信性能検証は、以下の手順を経て行います。

  • NCCL Tests ビルド
  • NCCL Tests 実行

6-1. NCCL Testsビルド

本章は、 NCCL TestsGitHub からダウンロード、ビルドします。

以下コマンドを2台のGPUノードのubuntuユーザで実行し、 NCCL Tests をビルドします。

$ cd ~; git clone https://github.com/NVIDIA/nccl-tests.git
$ cd nccl-tests; make MPI=1 MPI_HOME=/usr/mpi/gcc/openmpi-4.1.7a1 CUDA_HOME=/usr/local/cuda NCCL_HOME=/usr/lib/x86_64-linux-gnu

6-2. NCCL Tests実行

本章は、 NCCL Tests プログラムを実行します。

2ノードのGPUノードのうち1ノードのubuntuユーザで以下のコマンドを実行し、16枚のGPUと16個のRDMAネットワークポートを使用した、2ノードに跨る NCCL のAll-Reduce通信性能を計測します。

$ mpirun -n 16 -N 8 -hostfile ~/hostlist.txt --bind-to numa -x NCCL_IB_QPS_PER_CONNECTION=4 -x NCCL_IB_GID_INDEX=3 -x UCX_NET_DEVICES=enp45s0f0np0 -x NCCL_IB_HCA="mlx5_0,mlx5_1,mlx5_2,mlx5_3,mlx5_6,mlx5_7,mlx5_8,mlx5_9,mlx5_10,mlx5_11,mlx5_12,mlx5_13,mlx5_14,mlx5_15,mlx5_16,mlx5_17" ./build/all_reduce_perf -b 10G -e 10G -t 1 -g 1

7. カスタム・イメージ取得

本章は、 カスタム・イメージ 取得用2ノードGPUクラスタのGPUノードのうちどちらか一台で、 カスタム・イメージ を取得します。

具体的には、 OCI HPCテクニカルTips集クラスタ・ネットワーク非対応OSイメージを使ったクラスタ・ネットワーク接続方法4. カスタム・イメージ取得BM.GPU4.8 とUbuntu 20.04の組合わせで実施します。


8. cloud-config作成

本章は、実際に利用するGPUクラスタ構築のための cloud-init 設定ファイル(cloud-config)を作成します。

具体的には、 OCI HPCテクニカルTips集クラスタ・ネットワーク非対応OSイメージを使ったクラスタ・ネットワーク接続方法5. cloud-config作成BM.GPU4.8 とUbuntu 20.04の組合わせで実施します。


9. インスタンス構成作成

本章は、実際に利用するGPUクラスタ構築のための インスタンス構成 を作成します。

具体的には、 OCI HPCテクニカルTips集クラスタ・ネットワーク非対応OSイメージを使ったクラスタ・ネットワーク接続方法6. インスタンス構成作成BM.GPU4.8 で実施します。


10. クラスタ・ネットワーク作成

本章は、実際に利用するGPUクラスタ構築のための クラスタ・ネットワーク を作成します。

具体的には、 OCI HPCテクニカルTips集クラスタ・ネットワーク非対応OSイメージを使ったクラスタ・ネットワーク接続方法7. クラスタ・ネットワーク作成BM.GPU4.8 とUbuntu 20.04の組合わせで実施します。

本章の手順を完了すると、実際に利用するGPUクラスタが構築されています。


11. GPUクラスタの削除

本章は、 クラスタ・ネットワーク を終了することで、作成した クラスタ・ネットワーク とGPUノードを削除します。

  1. OCIコンソールメニューから コンピュートクラスタ・ネットワーク を選択し、表示される以下画面で作成した クラスタ・ネットワーク終了 メニューをクリックします。

画面ショット

クラスタ・ネットワーク状態終了済 となれば、削除が完了しています。

以上で、本チュートリアルは終了です。

更新日時: