GPU アクセラレータを使用してインスタンスを実行する

このページでは、Container-Optimized OS 仮想マシン(VM)インスタンスで NVIDIA グラフィック プロセッシング ユニット(GPU)ハードウェア アクセラレータを使用する方法について説明します。

概要

Compute Engine を使用すると、GPU が接続された、Container-Optimized OS を実行する VM インスタンスを作成できます。Compute Engine で GPU を実行する場合、使用できるマシン ファミリーはアクセラレータ最適化と N1 汎用の 2 つだけです。

  • アクセラレータ最適化マシンタイプの場合、各マシンタイプには特定モデルの NVIDIA GPU が接続されています。

    • A3 アクセラレータ最適化マシンタイプには、NVIDIA H100 80 GB GPU が接続されています。
    • A2 アクセラレータ最適化マシンタイプには、NVIDIA A100 GPU がアタッチされています。これらは、A100 40 GB と A100 80 GB の両方のオプションで利用できます。
    • G2 アクセラレータ最適化マシンタイプには、NVIDIA L4 GPU がアタッチされています。
  • N1 汎用マシンタイプには、次の GPU を接続できます。

GPU は、画像認識や自然言語処理などのディープ ラーニング タスク、さらに動画のコード変換や画像処理などの多くのコンピューティング処理を必要とするタスクの実行を促進するためのコンピューティング能力を備えています。

Google Cloud では、Container-Optimized OS VM インスタンス上のコンテナ内で GPU ワークロードをシームレスに実行できるため、セキュリティや信頼性など、Container-Optimized OS の他の機能をさらに活用できます。

GPU のユースケースの詳細については、Cloud GPU をご覧ください。

Google Kubernetes Engine(GKE)での GPU の使用方法については、GKE で GPU を実行するをご覧ください。

要件

Container-Optimized OS VM インスタンスで GPU を実行するには、次の要件があります。

  • Container-Optimized OS x86 イメージ: x86 ベースの Container-Optimized OS イメージのみが GPU の実行をサポートします。Arm ベースの Container-Optimized OS イメージは、この機能をサポートしていません。

  • Container-Optimized OS のバージョン: Container-Optimized OS VM インスタンスで GPU を実行するには、Container-Optimized OS リリース マイルストーンが LTS マイルストーンであり、マイルストーン番号が 85 以降であることが必要です。

  • GPU の割り当て: GPU を使用する Container-Optimized OS VM インスタンスを作成する前に、目的のゾーンに Compute Engine GPU の割り当てが必要です。プロジェクトに十分な GPU 割り当てがあることを確認するには、Google Cloud コンソールの割り当てをご覧ください。

    追加の GPU 割り当てが必要な場合は、Google Cloud コンソールで GPU 割り当てをリクエストする必要があります。請求先アカウントが設定されている場合、割り当てリクエストを送信すると、プロジェクトに自動的に GPU の割り当てが付与されます。

  • NVIDIA GPU ドライバ: Container-Optimized OS VM インスタンスに、自分で NVIDIA GPU ドライバをインストールする必要があります。このセクションでは、Container-Optimized OS VM インスタンスにドライバをインストールする方法について説明します。

VM の作成

以降のセクションでは、Container-Optimized OS VM で GPU を実行する方法について説明します。

まず、GPU を搭載した Container-Optimized OS VM インスタンスが必要です。 VM の作成に使用されるメソッドは GPU のモデルによって異なります。

既存の Container-Optimized OS VM インスタンスに GPU を追加することもできます。

VM を作成する際は、cos-cloud イメージ プロジェクトからイメージまたはイメージ ファミリーを選択するようにしてください。

現在の Container-Optimized OS VM インスタンスに搭載されている GPU をすべて確認するには、次のコマンドを実行します。

gcloud compute instances describe INSTANCE_NAME \
    --project=PROJECT_ID \
    --zone ZONE \
    --format="value(guestAccelerators)"

以下のように置き換えます。

NVIDIA GPU デバイス ドライバをインストールする

1 つ以上の GPU を使用するインスタンスを作成したら、アプリケーションがデバイスにアクセスできるようにするため、システムにデバイス ドライバが必要となります。このガイドでは、Container-Optimized OS VM インスタンスに NVIDIA の独自ドライバをインストールする方法を紹介します。

Container-Optimized OS には、NVIDIA ドライバのインストール プロセスを簡素化するための組み込みユーティリティ cos-extensions が用意されています。このユーティリティを実行すると、ユーザーは NVIDIA ライセンス契約に同意したことになります。

GPU ドライバのバージョンを特定する

Container-Optimized OS イメージの各バージョンには、各 GPU タイプのサポートされている NVIDIA GPU ドライバ バージョンのリストと、各タイプのデフォルト ドライバがあります。サポートされているバージョンの一覧については、主要な Container-Optimized OS LTS マイルストーンのリリースノートをご覧ください。

Container-Optimized OS VM インスタンスの GPU でサポートされているすべての GPU ドライバのバージョンを確認するには、次のコマンドを実行します。

sudo cos-extensions list

必要な CUDA ツールキットのバージョンを特定する

アプリケーションで CUDA を使用する場合は、NVIDIA の CUDA ツールキットをコンテナにインストールします。CUDA のバージョンごとに、最低限必要な GPU ドライバのバージョンがあります。ご使用の CUDA に最低限必要な GPU ドライバのバージョンを確認するには、CUDA ツールキットと互換ドライバのバージョンをご覧ください。使用している Container-Optimized OS のバージョンで、使用している CUDA のバージョンの GPU ドライバのバージョンが正しいことを確認します。

ドライバをインストールする

GPU をインストールするには、シェルコマンド、起動スクリプト、または cloud-init を使用します。この 3 つの方法はすべて sudo cos-extensions install gpu コマンドを使用して、Container-Optimized OS LTS バージョン用のデフォルトの GPU ドライバをインストールします。

Shell

Container-Optimized OS VM インスタンスに接続した後、次のコマンドを手動で実行してドライバをインストールできます。

sudo cos-extensions install gpu

起動スクリプト

起動スクリプトで GPU ドライバをインストールすることもできます。VM インスタンスの作成時に起動スクリプトを指定するか、実行中の VM インスタンスにスクリプトを適用してから VM を再起動します。これにより、VM に接続せずにドライバをインストールできます。また、VM が再起動するたびに GPU ドライバが構成されるようになります。

ドライバをインストールするための起動スクリプトの例を次に示します。

#! /bin/bash

sudo cos-extensions install gpu

cloud-init

cloud-init は起動スクリプトと類似していますが、より強力です。次の例は、cloud-init を介して GPU ドライバをインストールする方法を示しています。

#cloud-config

runcmd:
  - cos-extensions install gpu

cloud-init を使用すると、ドライバをインストールした後にのみ GPU アプリケーションを実行するように、依存関係を指定できます。詳細については、エンドツーエンド: Container-Optimized OS での GPU アプリケーションの実行をご覧ください。

Container-Optimized OS VM インスタンスで cloud-init を使用する方法については、インスタンスの作成と構成のページをご覧ください。

場合によっては、Container-Optimized OS に含まれるデフォルトのドライバが CUDA ツールキットや GPU モデルの最小ドライバ要件を満たしていないことがあります。特定のタイプの GPU のバージョン要件については、必要な NVIDIA ドライバのバージョンをご覧ください。

特定の GPU ドライバのバージョンをインストールするには、次のコマンドを実行します。

sudo cos-extensions install gpu -- -version=DRIVER_VERSION

DRIVER_VERSION は、次のいずれかのオプションに置き換えます。

  • default: Container-Optimized OS リリースで指定されたデフォルトのドライバをインストールします。このバージョンには、バグ修正とセキュリティ アップデートが含まれています。
  • latest: Container-Optimized OS リリースで利用可能な最新のドライバをインストールします。COS リリース全体でメジャー バージョンが更新されるため、互換性が変更される可能性があることにご注意ください。
  • 完全バージョン: ドライバ変更の影響を受けやすいワークロードの場合、特定のバージョンに固定します。たとえば、バージョン 535.183.01 を指定します。
  • NVIDIA ドライバ ブランチ: 特定の NVIDIA ブランチ内に安定性のある最新ドライバをインストールして、そのブランチ内のセキュリティ アップデートとバグ修正を最新の状態に保ちます。たとえば、ブランチ R535 を指定します。 このオプションは cos-gpu-installer:v2.2.1 以降で利用できます。

これらの各オプションで使用可能なバージョンを確認するには、GPU ドライバのバージョンを特定するコマンドを実行します。

ドライバをプリロードする

GPU デバイスが接続されていない場合でも、Container-Optimized OS インスタンスに GPU ドライバをプリロードできます。これは、物理 GPU ハードウェアを接続する前に環境を準備したり、構成をテストしたりする場合に便利です。

GPU ドライバをプリロードするには、次のコマンドを実行します。

sudo cos-extensions install gpu -- -no-verify -target-gpu=GPU_DEVICE

このコマンドは cos-gpu-installer:v2.3.0 以降でサポートされています。次のフラグが適用されます。

  • -no-verify: ドライバ ファイルをダウンロードして準備しますが、カーネル モジュールの読み込みとインストールの検証はスキップします。

  • -target-gpu: GPU デバイスを指定して、適切なドライバがプリロードされ、後で GPU デバイスが接続されたときに互換性の問題が発生しないようにします。GPU_DEVICE は、概要に記載されている特定の GPU モデル(NVIDIA_L4 など)に置き換えます。-target-gpu が指定されていない場合、デフォルトの GPU ドライバがプリロードされます。

インストールを確認する

Container-Optimized OS の VM インスタンスで次のコマンドを実行し、GPU ドライバのインストールを手動で確認できます。コマンドの出力には、デバイスの状態やドライバのバージョンなどの GPU デバイスに関する情報が表示されます。

# Make the driver installation path executable by re-mounting it.
sudo mount --bind /var/lib/nvidia /var/lib/nvidia
sudo mount -o remount,exec /var/lib/nvidia
/var/lib/nvidia/bin/nvidia-smi

GPU を使用するようにコンテナを構成する

GPU ドライバをインストールした後、GPU を使用するようにコンテナを構成できます。次の例は、/dev/nvidia0 を使用する Docker コンテナで CUDA アプリケーションを実行する方法を示しています。

docker run \
  --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64 \
  --volume /var/lib/nvidia/bin:/usr/local/nvidia/bin \
  --device /dev/nvidia0:/dev/nvidia0 \
  --device /dev/nvidia-uvm:/dev/nvidia-uvm \
  --device /dev/nvidiactl:/dev/nvidiactl \
  gcr.io/google_containers/cuda-vector-add:v0.1

cloud-init を使用して Docker コンテナを実行し、ドライバのインストールと Docker コンテナの間の依存関係を指定できます。詳細については、エンドツーエンド: Container-Optimized OS での GPU アプリケーションの実行をご覧ください。

エンドツーエンド: Container-Optimized OS での GPU アプリケーションの実行

次のエンドツーエンドの例は、cloud-init を使用して、GPU ドライバをインストールした後に GPU アプリケーション コンテナ myapp:latest をプロビジョニングする Container-Optimized OS VM インスタンスを構成する方法を示しています。

#cloud-config

users:
- name: myuser
  uid: 2000

write_files:
  - path: /etc/systemd/system/install-gpu.service
    permissions: 0644
    owner: root
    content: |
      [Unit]
      Description=Install GPU drivers
      Wants=gcr-online.target docker.socket
      After=gcr-online.target docker.socket

      [Service]
      User=root
      Type=oneshot
      ExecStart=cos-extensions install gpu
      StandardOutput=journal+console
      StandardError=journal+console
  - path: /etc/systemd/system/myapp.service
    permissions: 0644
    owner: root
    content: |
      [Unit]
      Description=Run a myapp GPU application container
      Requires=install-gpu.service
      After=install-gpu.service

      [Service]
      User=root
      Type=oneshot
      RemainAfterExit=true
      ExecStart=/usr/bin/docker run --rm -u 2000 --name=myapp --device /dev/nvidia0:/dev/nvidia0 myapp:latest
      StandardOutput=journal+console
      StandardError=journal+console

runcmd:
  - systemctl daemon-reload
  - systemctl start install-gpu.service
  - systemctl start myapp.service

NVIDIA CUDA-X ライブラリについて

CUDA® は、NVIDIA の GPU 用並列コンピューティング プラットフォームおよびプログラミング モデルです。CUDA アプリケーションを使用するには、使用しているイメージにライブラリが存在している必要があります。NVIDIA CUDA-X ライブラリを追加するには、次のいずれかを行います。

  • NVIDIA CUDA-X ライブラリがプリインストールされたイメージを使用します。たとえば、Google の Deep Learning Containers を使用できます。これらのコンテナには、主要なデータ サイエンス フレームワーク、NVIDIA CUDA-X ライブラリ、ツールがプリインストールされています。また、NVIDIA の CUDA イメージには NVIDIA CUDA-X ライブラリのみが含まれます。

  • 独自のイメージをビルドして使用します。この場合、LD_LIBRARY_PATH 環境変数に NVIDIA CUDA-X ライブラリがある /usr/local/cuda-XX.X/lib64 と NVIDIA デバイス ドライバがある /usr/local/nvidia/lib64 を含めます。/usr/local/cuda-XX.X/lib64 の場合、ディレクトリの名前は、使用したイメージのバージョンによって異なります。たとえば、Docker コンテナの NVIDIA CUDA-X ライブラリとデバッグ ユーティリティはそれぞれ、/usr/local/cuda-11.0/lib64/usr/local/nvidia/bin にあります。

セキュリティ

Container-Optimized OS 上の他のカーネル モジュールの場合とまったく同様に、GPU ドライバは、Container-Optimized OS カーネルに組み込まれている鍵によって暗号署名されて検証されます。他の一部のディストリビューションとは異なり、Container-Optimized OS はユーザーがマシン所有者キー(MOK)を登録し、その鍵を使用してカスタム カーネル モジュールに署名することを許可しません。これは、Container-Optimized OS カーネルの整合性を確保し、攻撃対象領域を削減することを目的とします。

制限事項

Container-Optimized OS のバージョン制限

Container-Optimized OS LTS リリース マイルストーン 85 以降では、NVIDIA GPU デバイス ドライバのインストール セクションで説明されている cos-extensions ユーティリティのみがサポートされます。以前の Container-Optimized OS リリース マイルストーンの場合は、cos-gpu-installer オープンソース ツールを使用して GPU ドライバを手動でインストールします。

VM インスタンスの制限

GPU を使用する VM インスタンスには固有の制約があり、他のインスタンス タイプとは異なる動作をします。詳細については、Compute Engine の GPU の制限ページをご覧ください。

割り当てと可用性

GPU は特定のリージョンとゾーンで利用できます。 GPU 割り当てをリクエストするときは、Container-Optimized OS VM インスタンスを実行するリージョンについて考慮してください。

該当するリージョンとゾーンの一覧については、Compute Engine の GPU をご覧ください。Google Cloud CLI を使用して、ゾーンで利用可能な GPU を確認することもできます。

gcloud compute accelerator-types list

料金

GPU の料金については、Compute Engine の料金のページをご覧ください。

サポート性

Container-Optimized OS のリリース バージョンには、サポートされる NVIDIA GPU ドライバのバージョンが少なくとも 1 つ含まれます。Container-Optimized OS チームは、サポート対象の GPU ドライバをリリース前に Container-Optimized OS バージョンと照合して、互換性があることを確認しています。NVIDIA GPU ドライバの新しいバージョンは、随時提供される可能性があります。一部の GPU ドライバのバージョンは Container-Optimized OS の条件を満たしておらず、認定タイムラインは保証されません。

Container-Optimized OS チームによってリリース マイルストーンで新しいバージョンがリリースされた場合は、Google では対応するドライバ ブランチで最新の GPU ドライバのバージョンをサポートできるよう努めます。これは、GPU ドライバで検出された CVE を可能な限り早期に修正することを目的とします。

Container-Optimized OS のユーザーが NVIDIA GPU ドライバに関する問題を発見した場合、ユーザーはサポートについて NVIDIA と直接交渉する必要があります。問題がドライバに固有でない場合、ユーザーは Cloud カスタマーケアでリクエストを送信できます。

次のステップ