次のオプションを使用して、仮想マシン(VM)インスタンスの GPU のパフォーマンスを向上させることができます。
- NVIDIA A100、T4、L4 または V100 GPU を使用する VM で、より高速のネットワーク帯域幅を使用する。
- NVIDIA A100、T4、L4 または V100 GPU を使用する VM で、Fast Socket を使用して、より高速のネットワーク帯域幅を使用する。
最大 100 Gbps のネットワーク帯域幅の使用
より高いネットワーク帯域幅を使用すると、Compute Engine 上で NVIDIA A100、T4、L4 または V100 GPU を使用する VM で分散ワークロードのパフォーマンスを向上させることができます。
GPU インスタンスでサポートされているネットワーク帯域幅の詳細については、ネットワーク帯域幅と GPU をご覧ください。
より高い帯域幅を使用する VM の作成
GPU が接続され、最大 100 Gbps のネットワーク帯域幅を持つ VM を作成するには:
- 使用可能な最大帯域幅を取得するために必要な CPU、GPU、メモリの最小構成を確認します。
A100、T4、L4、または V100 GPU がアタッチされた VM を作成します。GPU が接続された VM を作成するをご覧ください。この GPU VM には、次の設定も必要です。
- GPU ドライバのインストール。詳細については、GPU ドライバのインストールをご覧ください。
- Google Virtual NIC(gVNIC)の有効化。詳細については、Google Virtual NIC の使用をご覧ください。
あるいは、Deep Learning VM(DLVM)イメージ プロジェクトにある GPU 対応イメージを使用して VM を作成することもできます。GPU 対応の DLVM イメージには、GPU ドライバ、ML ソフトウェア、gVNIC がプリインストールされています。DLVM イメージの一覧については、イメージの選択をご覧ください。
例
たとえば、最大帯域幅が 100 Gbps で、8 個の V100 GPU が接続され、
tf-latest-gpu
DLVM イメージを使用する VM を作成するには、次のコマンドを実行します。gcloud compute instances create VM_NAME \ --project PROJECT_ID \ --custom-cpu 96 \ --custom-memory 624 \ --image-project=deeplearning-platform-release \ --image-family=tf-latest-gpu \ --accelerator type=nvidia-tesla-v100,count=8 \ --maintenance-policy TERMINATE \ --metadata="install-nvidia-driver=True" \ --boot-disk-size 200GB \ --network-interface=nic-type=GVNIC \ --zone=ZONE
例
たとえば、最大帯域幅が 100 Gbps で、8 個の A100 GPU が接続され、
tf-latest-gpu
DLVM イメージを使用する VM を作成するには、次のコマンドを実行します。gcloud compute instances create VM_NAME \ --project=PROJECT_ID \ --zone=ZONE \ --machine-type=a2-highgpu-8g \ --maintenance-policy=TERMINATE --restart-on-failure \ --image-family=tf-latest-gpu \ --image-project=deeplearning-platform-release \ --boot-disk-size=200GB \ --network-interface=nic-type=GVNIC \ --metadata="install-nvidia-driver=True,proxy-mode=project_editors" \ --scopes=https://www.googleapis.com/auth/cloud-platform
次のように置き換えます。
VM_NAME
: VM の名前。PROJECT_ID
: プロジェクト IDZONE
: VM のゾーン。このゾーンは、特定の GPU タイプをサポートしている必要があります。ゾーンの詳細については、GPU のリージョンとゾーンをご覧ください。
VM を作成すると、ネットワーク帯域幅を確認できます。
ネットワーク帯域幅の確認
高帯域幅の GPU を使用する場合、iperf2 などのネットワーク トラフィック ツールを使用してネットワーク帯域幅を測定できます。
帯域幅速度を確認するには、GPU が接続されていて、テストしている帯域幅速度をサポートしている少なくとも 2 つの VM が必要です。特定の帯域幅の VM の最小構成の推奨については、VM の構成をご覧ください。
Debian ベースのシステムで iPerf を使用してベンチマークを実行します。
必要な帯域幅速度に対応できる 2 つの VM を作成します。
両方の VM を実行したら、SSH を使用していずれかの VM に接続します。
gcloud compute ssh VM_NAME \ --project=PROJECT_ID
次のように置き換えます。
VM_NAME
: 最初の VM の名前PROJECT_ID
: プロジェクト ID
最初の VM で次の手順を行います。
iperf
をインストールします。sudo apt-get update && sudo apt-get install iperf
この VM の内部 IP アドレスを取得します。アドレスを書き留めておいてください。
ip a
iPerf サーバーを起動します。
iperf -s
これにより、ベンチマークを実行するために接続をリッスンするサーバーが起動します。テスト中は稼働したままにします。
新しいクライアント ターミナルから、SSH を使用して 2 番目の VM に接続します。
gcloud compute ssh VM_NAME \ --project=PROJECT_ID
次のように置き換えます。
VM_NAME
: 2 番目の VM の名前PROJECT_ID
: プロジェクト ID
2 番目の VM で次の手順を行います。
iPerf をインストールします。
sudo apt-get update && sudo apt-get install iperf
iperf テストを実行し、最初の VM の IP アドレスをターゲットとして指定します。
iperf -t 30 -c internal_ip_of_instance_1 -P 16
これにより、30 秒のテストが開始し、次のような出力が生成されます。iPerf が他の VM に到達できない場合は、VM 上、または Google Cloud コンソールでネットワークやファイアウォール設定の調整が必要になることがあります。
最大 100 Gbps の帯域幅を使用する場合は、次の点に留意してください。
仮想化スタック上のイーサネット、IP、TCP などのプロトコルのヘッダーのオーバーヘッドにより、
netperf
で測定されたスループットは約 90 Gbps が上限となります。TCP では 100 Gbps のネットワーク速度を実現できます。UDP などのその他のプロトコルは現時点でより低速です。
プロトコルのオーバーヘッドやネットワークの輻輳などの理由により、データ ストリームのエンドツーエンドのパフォーマンスは 100 Gbps よりわずかに低い場合があります。
VM インスタンス間で最大帯域幅を実現するには、複数の TCP ストリームを使用する必要があります。Google では 4~16 ストリームを推奨しています。16 のフローでは、スループットが最大限に達することがよくあります。アプリケーションやソフトウェア スタックに応じて、設定やコードを調整して複数のストリームを設定する必要があります。
100 Gbps のネットワーク帯域幅は一方向にのみ実現できます。TX + RX の合計は約 100 Gbps と予測されます。
Fast Socket でより高速のネットワーク帯域幅を使用する
NVIDIA Collective Communications Library(NCCL)は、TensorFlow、PyTorch、Holoods などのディープ ラーニング フレームワークでマルチ GPU やマルチノード トレーニングを行う場合に使用されます。
Fast Socket は NCCL 用の Google 独自のネットワーク トランスポートです。Compute Engine で Fast Socket を使用すると、複数の TCP 接続間の競合が減り、100 Gbps ネットワーク上の NCCL パフォーマンスが向上します。NCCL の操作の詳細については、NCCL ユーザーガイドをご覧ください。
現在の評価では、Fast Socket を使用すると、all-reduce のスループットがメッセージのサイズに応じて 30%~60% 向上します。
Fast Socket 環境を設定するには、Deep Learning VM Image または Compute Engine 公開イメージを使用します。
Deep Learning VM Image の使用
Fast Socket を設定するには、Deep Learning VM を使用します。Deep Learning VM イメージには、GPU ドライバ、ML ソフトウェア、Fast Socket、gVNIC がプリインストールされています。
これらのイメージには次のものが含まれます。
tf-latest-gpu-debian-10
tf-latest-gpu-ubuntu-1804
V100 の例
たとえば、最大帯域幅が 100 Gbps で V100 GPU が接続された Debian 10 VM を作成し、Fast Socket で Deep Learning VM Image を使用する場合は、次のコマンドを実行します。
gcloud compute instances create VM_NAME \ --project=PROJECT_ID \ --zone=ZONE \ --custom-cpu=96 \ --custom-memory=624 \ --image-project=deeplearning-platform-release \ --image-family=tf-latest-gpu-debian-10 \ --accelerator=type=nvidia-tesla-v100,count=8 \ --maintenance-policy=TERMINATE \ --metadata="install-nvidia-driver=True" \ --network-interface=nic-type=GVNIC \ --boot-disk-size=200GB
A100 の例
たとえば、最大帯域幅が 100 Gbps で、8 個の A100 GPU が接続され、Fast Socket で Deep Learning VM Image を使用する Ubuntu 18.04 VM を作成する場合は、次のコマンドを実行します。
gcloud compute instances create VM_NAME \ --project=PROJECT_ID \ --zone=ZONE \ --machine-type=a2-highgpu-8g \ --maintenance-policy=TERMINATE --restart-on-failure \ --image-family=tf-latest-gpu-ubuntu-1804 \ --image-project=deeplearning-platform-release \ --boot-disk-size=200GB \ --network-interface=nic-type=GVNIC \ --metadata="install-nvidia-driver=True,proxy-mode=project_editors" \ --scopes=https://www.googleapis.com/auth/cloud-platform
次のように置き換えます。
VM_NAME
: VM の名前。PROJECT_ID
: プロジェクト ID。ZONE
: VM のゾーン。このゾーンは、特定の GPU タイプをサポートしている必要があります。ゾーンの詳細については、GPU のリージョンとゾーンをご覧ください。
環境を設定したら、Fast Socket が有効であることを確認できます。
Compute Engine の公開イメージの使用
Fast Socket を設定するには、Compute Engine の公開イメージを使用できます。Compute Engine の公開イメージを使用するには、次の手順を行います。
A100、T4、L4、または V100 GPU がアタッチされた VM を作成します。GPU が接続された VM を作成するをご覧ください。
このイメージを使用して、A100、T4、L4、または V100 GPU が接続された VM を作成します。詳細については、GPU が接続された VM を作成するをご覧ください。
GPU ドライバをインストールします。詳細については、GPU ドライバのインストールをご覧ください。
Fast Socket をインストールします。手順については、Fast Socket を手動でインストールするをご覧ください。
Fast Socket が有効になっていることを確認します。手順については、Fast Socket が有効になっていることを確認するをご覧ください。
Fast Socket を手動でインストールする
Linux VM に Fast Socket をインストールする前に、NCCL をインストールする必要があります。詳細な手順については、NVIDIA NCCL のドキュメントをご覧ください。
CentOS / RHEL
CentOS または RHEL VM で Fast Socket をダウンロードしてインストールするには、次の手順を行います。
パッケージ リポジトリを追加し、公開鍵をインポートします。
sudo tee /etc/yum.repos.d/google-fast-socket.repo << EOM [google-fast-socket] name=Fast Socket Transport for NCCL baseurl=https://packages.cloud.google.com/yum/repos/google-fast-socket enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOM
Fast Socket をインストールします。
sudo yum install google-fast-socket
Fast Socket が有効になっていることを確認します。
SLES
SLES VM に Fast Socket をダウンロードしてインストールするには、次の手順を行います。
パッケージ リポジトリを追加します。
sudo zypper addrepo https://packages.cloud.google.com/yum/repos/google-fast-socket google-fast-socket
リポジトリキーを追加します。
sudo rpm --import https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
Fast Socket をインストールします。
sudo zypper install google-fast-socket
Fast Socket が有効になっていることを確認します。
Debian / Ubuntu
Debian または Ubuntu VM で Fast Socket をダウンロードしてインストールするには、次の手順を行います。
パッケージ リポジトリを追加します。
echo "deb https://packages.cloud.google.com/apt google-fast-socket main" | sudo tee /etc/apt/sources.list.d/google-fast-socket.list
リポジトリキーを追加します。
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
Fast Socket をインストールします。
sudo apt update && sudo apt install google-fast-socket
Fast Socket が有効になっていることを確認します。
Fast Socket が有効になっていることを確認する
VM で、次の手順を行います。
NCCL ホーム ディレクトリを探します。
sudo ldconfig -p | grep nccl
たとえば、DLVM イメージの場合、次の出力が表示されます。
libnccl.so.2 (libc6,x86-64) => /usr/local/nccl2/lib/libnccl.so.2 libnccl.so (libc6,x86-64) => /usr/local/nccl2/lib/libnccl.so libnccl-net.so (libc6,x86-64) => /usr/local/nccl2/lib/libnccl-net.so
この例では、NCCL ホーム ディレクトリが
/usr/local/nccl2
になっています。NCCL が Fast Socket プラグインを読み込むことを確認します。確認するには、NCCL テスト パッケージをダウンロードする必要があります。テスト パッケージをダウンロードするには、次のコマンドを実行します。
git clone https://github.com/NVIDIA/nccl-tests.git && \ cd nccl-tests && make NCCL_HOME=NCCL_HOME_DIRECTORY
NCCL_HOME_DIRECTORY
は NCCL ホーム ディレクトリに置き換えます。nccl-tests
ディレクトリからall_reduce_perf
プロセスを実行します。NCCL_DEBUG=INFO build/all_reduce_perf
Fast Socket が有効になっている場合、出力ログに
FastSocket plugin initialized
メッセージが表示されます。# nThread 1 nGpus 1 minBytes 33554432 maxBytes 33554432 step: 1048576(bytes) warmup iters: 5 iters: 20 validation: 1 # # Using devices # Rank 0 Pid 63324 on fast-socket-gpu device 0 [0x00] Tesla V100-SXM2-16GB ..... fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket : Flow placement enabled. fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket : queue skip: 0 fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket : Using [0]ens12:10.240.0.24 fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket plugin initialized ......
次のステップ
- GPU のパフォーマンスをモニタリングするには、GPU パフォーマンスのモニタリングをご覧ください。
- GPU ホスト メンテナンスを処理する。GPU ホスト メンテナンス イベントの処理をご覧ください。