GPU パフォーマンスの最適化

次のオプションを使用して、仮想マシン(VM)インスタンスの GPU のパフォーマンスを向上させることができます。

自動ブーストの無効化

NVIDIA® Tesla ®K80 の GPU でオートブースト機能を使用すると、自動的にクロック速度を調整し、指定のアプリケーションに最適な速度を検出します。ただし、クロック速度を常に調整すると、GPU のパフォーマンスが低下することもあります。自動ブーストの詳細については、Increase Performance with GPU Boost and K80 Autoboost(GPU Boost と K80 Autoboost でパフォーマンスを向上)をご覧ください。

Compute Engine で NVIDIA® Tesla® K80 の GPU を実行する場合は、自動ブーストを無効にすることをおすすめします。

NVIDIA® Tesla® K80 の GPU が接続されたインスタンスで自動ブーストを無効にするには、次のコマンドを実行します。

sudo nvidia-smi --auto-boost-default=DISABLED

出力は次のようになります。

All done.

GPU クロック速度を最大周波数に設定

NVIDIA® Tesla® K80 の GPU が接続されたインスタンスで GPU クロック速度を最大周波数に設定するには、次のコマンドを実行します。

sudo nvidia-smi --applications-clocks=2505,875

最大 100 Gbps のネットワーク帯域幅の使用

より高い帯域幅を使用する VM インスタンスの作成

より高いネットワーク帯域幅を使用して、NVIDIA® Tesla® T4 または V100 の GPU を使用する Compute Engine 上の VM インスタンスで分散ワークロードのパフォーマンスを向上させることができます。

GPU インスタンスでサポートされているネットワーク帯域幅の詳細については、ネットワーク帯域幅と GPU をご覧ください。

GPU が接続され、最大 100 Gbps のネットワーク帯域幅を持つ VM インスタンスを作成するには、次を行います。

  1. 使用可能な最大帯域幅を取得するために必要な CPU、GPU、メモリの最小構成を確認する。
  2. T4 または V100 の GPU が接続された VM インスタンスを作成し、GPU の追加または削除を確認する。

    VM インスタンスの作成に使用するイメージには、Compute Engine 仮想ネットワーク インターフェース(gVNIC)がインストールされている必要があります。Compute Engine 仮想ネットワーク インターフェースをサポートする VM インスタンスの作成の詳細については、Compute Engine 仮想ネットワーク インターフェースを使用する VM インスタンスの作成をご覧ください。

    または、GPU ドライバ、ML ソフトウェア、Compute Engine ネットワーク ドライバがすでにプリインストールされている Google ディープ ラーニング VM イメージ カタログからの tf-latest-gpu-gvnic イメージを使用できます。

    たとえば、最大帯域幅が 100 Gbps で、V100 GPU が 8 個接続され、ディープ ラーニング VM イメージを使用している test-instance という名前の VM インスタンスを作成する場合は、次のコマンドを実行します。

    gcloud compute instances create test-instance \
       --custom-cpu 96 \
       --custom-memory 624 \
       --image-project=deeplearning-platform-release \
       --image-family=tf-latest-gpu-gvnic \
       --accelerator type=nvidia-tesla-v100,count=8 \
       --maintenance-policy TERMINATE \
       --metadata="install-nvidia-driver=True"  \
       --boot-disk-size 200GB \
       --zone=us-central1-f
    
  3. VM インスタンスを作成すると、ネットワーク帯域幅を確認できます。

ネットワーク帯域幅の確認

高帯域幅の GPU を使用する場合、iperf2 などのネットワーク トラフィック ツールを使用してネットワーク帯域幅を測定できます。

帯域幅速度を確認するには、GPU が接続されていて、テストしている帯域幅速度をサポートしている少なくとも 2 つの VM インスタンスが必要です。

ネットワーク帯域幅を測定する手順は次のとおりです。

  1. 1 つの VM インスタンスで、次のコマンドを実行します。

    iperf -s
  2. 別の VM インスタンスで、次のコマンドを実行します。server_dns_or_internal_ip を VM インスタンスの DNS または内部 IP アドレスと置き換えます。

    iperf -c server_dns_or_internal_ip -P 16 -t 30

最大 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 と予測されます。

次のステップ