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

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

sudo cos-extensions list

K80 GPU の互換性

NVIDIA R470 ドライバは、K80 GPU をサポートする最後のドライバ ファミリーです。K80 GPU を搭載したインスタンスにこれより新しいバージョンをインストールする場合、cos-extensions によって呼び出される cos-gpu-installer:v2(v2.0.26 以降)は、使用可能な R470 バージョンに自動的にフォールバックします。

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

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

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

GPU をインストールするには、シェルコマンド、起動スクリプト、cloud-init のいずれかを使用します。どの方法でも、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 を使用する方法については、インスタンスの作成と構成のページをご覧ください。

場合によっては、デフォルトのドライバが CUDA ツールキットまたは GPU モデルの最小ドライバ要件を満たさないことがあります。特定のドライバ バージョンの GPU ドライバをインストールするには、バージョン フラグを追加します。DRIVER_VERSION は、GPU モデルに必要な最小 GPU バージョンで、Container-Optimized OS でサポートされているバージョンに置き換えます。Container-Optimized OS は、一部の NVIDIA ドライバのみをサポートしています。

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

インストールを確認する

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 カスタマーケアでリクエストを送信できます。

次のステップ