インスタンスへの GPU の追加

Google Compute Engine は、仮想マシン インスタンスに追加できるグラフィック プロセッシング ユニット(GPU)を備えています。これらの GPU を使用して、機械学習やデータ処理などの特定のワークロードをインスタンス上で高速化することができます。

GPU の機能と、使用できる GPU ハードウェアのタイプの詳細については、Compute Engine の GPU をご覧ください。

始める前に

GPU を使用するインスタンスの作成

GPU を使用するインスタンスを作成する前に、インスタンスに使用するブートディスク イメージを選択します。必要に応じて任意の公開イメージまたはカスタム イメージも使用できますが、一部のイメージには、このガイドでは説明していない独自のドライバやインストール プロセスが必要な場合があります。イメージに適したドライバを選択する必要があります。ドライバは、デフォルトでは公開イメージにインストールされません。詳細については、GPU ドライバのインストールをご覧ください。

1 つ以上の GPU を使用するインスタンスを作成するときには、インスタンスがホスト メンテナンス時に終了するように設定する必要があります。GPU を使用するインスタンスは、特定のハードウェア デバイスに割り当てられているため、ライブ マイグレーションができません。詳細については、GPU の制限をご覧ください。

1 つ以上の GPU があるインスタンスを作成するには、Google Cloud Platform Consolegcloud コマンドライン ツール、または API を使用します。

Console

  1. [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. [インスタンスを作成] をクリックします。
  3. GPU で使用可能なゾーンを選択します。使用可能なゾーンと GPU のリストをご覧ください。
  4. [マシンタイプ] セクションで、このインスタンスで使用するマシンタイプを選択します。あるいは、カスタムマシンのタイプ設定は後で行うこともできます。
  5. [マシンタイプ] セッションで、[カスタマイズ] をクリックします。詳細なマシンタイプのオプションと使用可能な GPU が表示されます。
  6. [GPU] をクリックすると、使用可能な GPU のリストが表示されます。
  7. GPU のタイプと必要な GPU の数を指定します。
  8. 必要な GPU 設定に合わせてマシンタイプを調整します。値を変更しないと、マシンタイプのカスタマイズ画面を開く前に指定した事前定義のマシンタイプが使用されます。
  9. ブートディスクを構成するには、[ブートディスク] セクションで [変更] をクリックします。
  10. [OS イメージ] タブで、イメージを選択します。
  11. [選択] をクリックして、ブートディスクのオプションを確認します。
  12. インスタンスの起動中に GPU ドライバをインストールする起動スクリプトを追加することもできます。[自動化] の [起動スクリプト] に起動スクリプトのコンテンツを追加します。スクリプトの例については、GPU ドライバのインストールをご覧ください。
  13. 必要なその他のインスタンス設定を構成します。たとえば、[プリエンプティブ] 設定を変更して、インスタンスをプリエンプティブ インスタンスとして構成できます。これにより、インスタンスおよび接続される GPU のコストが削減されます。詳細については、プリエンプティブ インスタンスの GPU をご覧ください。
  14. ページの下部にある [作成] をクリックして、インスタンスを作成します。

gcloud

regions describe コマンドを使用することにより、GPU を使用するインスタンスを作成する領域に十分な GPU 割り当てがあることを確認します。

gcloud compute regions describe [REGION]

[REGION] は、GPU の割り当てを確認するリージョンです。

イメージ ファミリーの最新のイメージを使用してインスタンスを開始します。

gcloud compute instances create [INSTANCE_NAME] \
    --machine-type [MACHINE_TYPE] --zone [ZONE] \
    --accelerator type=[ACCELERATOR_TYPE],count=[ACCELERATOR_COUNT] \
    --image-family [IMAGE_FAMILY] --image-project [IMAGE_PROJECT] \
    --maintenance-policy TERMINATE --restart-on-failure \
    --metadata startup-script='[STARTUP_SCRIPT]' \
    [--preemptible]

ここで:

  • [INSTANCE_NAME] は、新しいインスタンスの名前です。
  • [MACHINE_TYPE] は、インスタンス用に選択したマシンタイプです。希望する GPU 数に応じて使用可能なマシンタイプについては、Compute Engine の GPU をご覧ください。
  • [ZONE] は、このインスタンスのゾーンです。
  • [IMAGE_FAMILY] は、使用可能なイメージ ファミリーの 1 つです。
  • [ACCELERATOR_COUNT] は、インスタンスに追加する GPU の数です。インスタンスのマシンタイプに応じた GPU 制限の一覧については、Compute Engine の GPU をご覧ください。
  • [ACCELERATOR_TYPE] は使用する GPU モデルです。使用可能な GPU モデル一覧については、Compute Engine の GPU をご覧ください。
  • [IMAGE_PROJECT] は、イメージ ファミリーが属するイメージ プロジェクトです。
  • [STARTUP_SCRIPT] は、インスタンスが起動しているときに GPU ドライバをインストールするために使用できるオプションの起動スクリプトです。GPU ドライバのインストールで例を確認できます。
  • --preemptible は、実行中のインスタンスからイメージを作成するためのオプションのフラグです。これにより、インスタンスおよび接続される GPU のコストが削減されます。詳細については、プリエンプティブ インスタンスの GPU をご覧ください。

たとえば、次の gcloud コマンドで、us-east1-d ゾーンで 1 つの NVIDIA® Tesla® K80 GPU と 2 つの vCPU を使用する Ubuntu 1604 インスタンスを開始します。startup-script メタデータは、パッケージを更新し、推奨のドライバ バージョンを使用して CUDA ツールキットをインストールするようにインスタンスに指示します。

gcloud compute instances create gpu-instance-1 \
    --machine-type n1-standard-2 --zone us-east1-d \
    --accelerator type=nvidia-tesla-k80,count=1 \
    --image-family ubuntu-1604-lts --image-project ubuntu-os-cloud \
    --maintenance-policy TERMINATE --restart-on-failure \
    --metadata startup-script='#!/bin/bash
    echo "Checking for CUDA and installing."
    # Check for CUDA and try to install.
    if ! dpkg-query -W cuda-8-0; then
      curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
      dpkg -i ./cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
      apt-get update
      apt-get install cuda-8-0 -y
    fi'

この例のコマンドでインスタンスが開始されますが、CUDA とドライバのインストールが終了するまで数分かかります。

API

インスタンスに追加する GPU タイプを指定します。GET リクエストを発行し、特定のゾーンのプロジェクトで使用可能な GPU タイプをリストします。

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/acceleratorTypes

ここで:

  • [PROJECT_ID] はプロジェクト ID です。
  • [ZONE] は、使用可能な GPU タイプをリストするゾーンです。

API で、POST リクエストを作成して新しいインスタンスを作成します。使用する GPU タイプを指定するには acceleratorType パラメータ、追加する GPU の数を指定するには acceleratorCount パラメータを含めます。さらに、onHostMaintenance パラメータを TERMINATE に設定します。

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances?key={YOUR_API_KEY}
{
  "machineType": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/machineTypes/n1-highmem-2",
  "disks":
  [
    {
      "type": "PERSISTENT",
      "initializeParams":
      {
        "diskSizeGb": "[DISK_SIZE]",
        "sourceImage": "https://www.googleapis.com/compute/v1/projects/[IMAGE_PROJECT]/global/images/family/[IMAGE_FAMILY]"
      },
      "boot": true
    }
  ],
  "name": "[INSTANCE_NAME]",
  "networkInterfaces":
  [
    {
      "network": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/[NETWORK]"
    }
  ],
  "guestAccelerators":
  [
    {
      "acceleratorCount": [ACCELERATOR_COUNT],
      "acceleratorType": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/acceleratorTypes/[ACCELERATOR_TYPE]"
    }
  ],
  "scheduling":
  {
    "onHostMaintenance": "terminate",
    "automaticRestart": true,
    ["preemptible": true]
  },
  "metadata":
  {
    "items":
    [
      {
        "key": "startup-script",
        "value": "[STARTUP_SCRIPT]"
      }
    ]
  }
}

ここで:

  • [INSTANCE_NAME] はインスタンスの名前です。
  • [PROJECT_ID] はプロジェクト ID です。
  • [ZONE] は、このインスタンスのゾーンです。
  • [MACHINE_TYPE] は、インスタンス用に選択したマシンタイプです。希望する GPU 数に応じて使用可能なマシンタイプについては、Compute Engine の GPU をご覧ください。
  • [IMAGE_PROJECT] は、イメージが属するイメージ プロジェクトです。
  • [IMAGE_FAMILY] は、インスタンスの起動ディスク イメージです。使用可能な公開イメージのリストから、イメージ ファミリーを指定します。
  • [DISK_SIZE] は、起動ディスクのサイズ(GB 単位)です。
  • [NETWORK] は、このインスタンスに使用する VPC ネットワークです。デフォルトのネットワークを使用する場合は default を指定します。
  • [ACCELERATOR_COUNT] は、インスタンスに追加する GPU の数です。インスタンスのマシンタイプに応じた GPU 制限の一覧については、Compute Engine の GPU をご覧ください。
  • [ACCELERATOR_TYPE] は使用する GPU モデルです。使用可能な GPU モデル一覧については、Compute Engine の GPU をご覧ください。
  • [STARTUP_SCRIPT] は、インスタンスが起動しているときに GPU ドライバをインストールするために使用できるオプションの起動スクリプトです。GPU ドライバのインストールで例を確認できます。
  • "preemptible": true は、インスタンスをプリエンプティブなインスタンスとして構成するためのオプションのパラメータです。これにより、インスタンスおよび接続される GPU のコストが削減されます。詳細については、プリエンプティブ インスタンスの GPU をご覧ください。

起動スクリプトを使用して GPU デバイス ドライバを自動的にインストールするには、GPU ドライバが正しくインストールされていることを確認します。

インスタンスの作成時に GPU ドライバのインストールに起動スクリプトを使用しなかった場合は、システムがデバイスを使用できるように、インスタンスに GPU ドライバを手動でインストールします。

既存のインスタンスでの GPU の追加または削除

既存のインスタンスに GPU を追加したり、切り離したりできますが、まずインスタンスを停止してホストのメンテナンス設定を変更し、インスタンスがライブ マイグレーションを実行するのではなく終了するようにする必要があります。GPU を使用するインスタンスは、特定のハードウェア デバイスに割り当てられているため、ライブ マイグレーションができません。詳細については、GPU の制限をご覧ください。

また、GPU を追加した後、このインスタンスに GPU ドライバをインストールする必要があることにも注意してください。このインスタンスの作成に使用したブートディスク イメージによって、必要なドライバが決まります。インスタンスの永続ブートディスク イメージのオペレーティング システムに適したドライバを特定する必要があります。詳細については、GPU ドライバのインストールをご覧ください。

Google Cloud Platform Console または API を使用して、GPU をインスタンスに追加したり、インスタンスから削除したりできます。

Console

インスタンスを停止し、インスタンスの構成を編集することで、GPU をインスタンスに追加したり、インスタンスから削除したりできます。

  1. インスタンス上のすべての重要なアプリケーションが停止していることを確認します。GPU を追加する前にインスタンスを停止する必要があります。

  2. [VM インスタンス] ページに移動し、インスタンスのリストを確認します。

    [VM インスタンス] ページに移動

  3. インスタンスのリストで、GPU を追加するインスタンスの名前をクリックします。インスタンスの詳細ページが開きます。

  4. インスタンスの詳細ページの上部にある [停止] をクリックしてインスタンスを停止します。

  5. インスタンスの実行が停止したら、[編集] をクリックしてインスタンスのプロパティを変更します。

  6. インスタンスのマシンタイプが共有コア マシンタイプである場合は、1 つ以上の vCPU を搭載されたマシンタイプに変更する必要があります。共有コア マシンタイプのインスタンスにアクセラレータを追加することはできません。

  7. [マシンタイプ] 設定で、[GPU] をクリックして GPU 選択リストを展開します。

  8. インスタンスに追加する GPU の数と GPU モデルを選択します。または、GPU の数を [なし] に設定して、インスタンスから既存の GPU を削除することもできます。

  9. GPU をインスタンスに追加した場合は、ホストのメンテナンス設定を [終了] に設定します。インスタンスから GPU を削除した場合は、必要に応じてホスト メンテナンス設定を [VM インスタンスを移行] に戻すことができます。

  10. インスタンスの詳細ページの下部で、[保存] をクリックして変更を適用します。

  11. インスタンス設定が保存されたら、インスタンスの詳細ページの上部にある [開始] をクリックして、インスタンスを再度開始します。

API

API を使用して、インスタンスを停止しインスタンスの構成を変更することで、GPU をインスタンスに追加したりインスタンスから削除したりできます。

  1. インスタンス上のすべての重要なアプリケーションが停止していることを確認し、インスタンスを停止する POST コマンドを作成して、GPU が使用可能なホストシステムにインスタンスが移動できるようにます。

    POST https://www.googleapis.com/compute/v1/projects/compute/zones/[ZONE]/instances/[INSTANCE_NAME]/stop
    

    ここで:

    • [INSTANCE_NAME] は、GPU を追加するインスタンスの名前です。
    • [ZONE] は、インスタンスが存在する場所のゾーンです。
  2. インスタンスに追加する GPU タイプを指定します。GET リクエストを発行し、特定のゾーンのプロジェクトで使用可能な GPU タイプをリストします。

    GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/acceleratorTypes
    

    ここで:

    • [PROJECT_ID] はプロジェクト ID です。
    • [ZONE] は、使用可能な GPU タイプをリストするゾーンです。
  3. インスタンスのマシンタイプが共有コア マシンタイプである場合は、1 つ以上の vCPU を搭載されたマシンタイプに変更する必要があります。共有コア マシンタイプのインスタンスにアクセラレータを追加することはできません。

  4. インスタンスが停止したら、1 つ以上の GPU をインスタンスに追加またはインスタンスから削除する POST リクエストを作成します。

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setMachineResources
    
    {
     "guestAccelerators": [
      {
        "acceleratorCount": [ACCELERATOR_COUNT],
        "acceleratorType": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/acceleratorTypes/[ACCELERATOR_TYPE]"
      }
     ]
    }
    

    ここで:

    • [INSTANCE_NAME] はインスタンスの名前です。
    • [PROJECT_ID] はプロジェクト ID です。
    • [ZONE] は、このインスタンスのゾーンです。
    • [ACCELERATOR_COUNT] は、インスタンスに必要な GPU の数です。インスタンスから GPU を削除するには、この値を 0 に設定します。インスタンスのマシンタイプに応じた GPU 制限の一覧については、Compute Engine の GPU をご覧ください。
    • [ACCELERATOR_TYPE] は使用する GPU モデルです。使用可能な GPU モデル一覧については、Compute Engine の GPU をご覧ください。
  5. インスタンスのスケジューリング オプションを設定する POST コマンドを作成します。インスタンスに GPU を追加する場合は、"onHostMaintenance": "TERMINATE" を指定する必要があります。必要に応じて、インスタンスから GPU を削除する場合は、"onHostMaintenance": "MIGRATE" を指定します。

    POST https://www.googleapis.com/compute/v1/projects/compute/zones/[ZONE]/instances/[INSTANCE_NAME]/setScheduling
    
    {
     "onHostMaintenance": "[MAINTENANCE_TYPE]",
     "automaticRestart": true
    }
    

    ここで:

    • [INSTANCE_NAME] は、GPU を追加するインスタンスの名前です。
    • [ZONE] は、インスタンスが存在する場所のゾーンです。
    • [MAINTENANCE_TYPE] は、ホスト メンテナンスが必要なときにインスタンスに実行させるアクションです。インスタンスに GPU を追加する場合は、TERMINATE を指定します。あるいは、インスタンスからすべての GPU を削除し、インスタンスがホスト メンテナンス イベントで移行を再開するようにする場合は、"onHostMaintenance": "MIGRATE" を指定します。
  6. インスタンスを起動します。

    POST https://www.googleapis.com/compute/v1/projects/compute/zones/[ZONE]/instances/[INSTANCE_NAME]/start
    

    ここで:

    • [INSTANCE_NAME] は、GPU を追加するインスタンスの名前です。
    • [ZONE] は、インスタンスが存在する場所のゾーンです。

次に、システムがデバイスを使用できるように、インスタンスに GPU ドライバをインストールします

インスタンス テンプレートを使用して GPU インスタンスのグループを作成する

インスタンス テンプレートを使用して、各インスタンスに GPU が追加されたマネージド インスタンス グループを作成できます。マネージド インスタンス グループは、テンプレートを使用して同一インスタンスを複数作成します。グループ内のインスタンスの数は、ワークロードに合わせてスケールできます。GPU のあるインスタンス テンプレートを作成するには、gcloud beta コマンドライン ツールを使用する必要があります。

ガイドに沿ってインスタンス テンプレートを作成し、--accelerators--maintenance-policy TERMINATE フラグを指定します。必要に応じて、--metadata startup-script フラグを含めて、インスタンスの起動中に GPU ドライバをインストールする起動スクリプトを指定します。GPU インスタンスで作動するスクリプトの例については、GPU ドライバのインストールをご覧ください。

例として、2 つの vCPU、Ubuntu 1604 を使用する 250 GB の起動ディスク、NVIDIA® Tesla® K80 GPU、起動スクリプトを含むをインスタンス テンプレートを作成することができます。起動スクリプトは、推奨のドライバ バージョンを使用して CUDA ツールキットをインストールするようにインスタンスに指示します。

gcloud beta compute instance-templates create gpu-template \
    --machine-type n1-standard-2 \
    --boot-disk-size 250GB \
    --accelerator type=nvidia-tesla-k80,count=1 \
    --image-family ubuntu-1604-lts --image-project ubuntu-os-cloud \
    --maintenance-policy TERMINATE --restart-on-failure \
    --metadata startup-script='#!/bin/bash
    echo "Checking for CUDA and installing."
    # Check for CUDA and try to install.
    if ! dpkg-query -W cuda-8-0; then
      curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
      dpkg -i ./cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
      apt-get update
      apt-get install cuda-8-0 -y
    fi'

テンプレートを作成したら、そのテンプレートを使用してインスタンス グループを作成します。グループにインスタンスを追加するたびに、インスタンス テンプレートの設定を使用してそのインスタンスが開始されます。

インスタンスのグループの管理とスケーリングの詳細については、マネージド インスタンス グループの作成をご覧ください。

GPU を使用するプリエンプティブ インスタンスの作成

GPU ドライバのインストール

1 つ以上の GPU を使用してインスタンスを作成したら、アプリケーションがデバイスにアクセスできるようにするため、システムにデバイス ドライバが必要となります。このガイドでは、公開イメージを使用するインスタンスに NVIDIA の独自ドライバをインストールするための基本的な手順を示します。

次のオプションのいずれかを使用して GPU ドライバをインストールできます。

スクリプトを使用して GPU ドライバをインストールする

Google Compute Engine で動作する NVIDIA GPU には、次のバージョンのドライバを使用する必要があります。

+ Linux instances:
    + R384 branch: NVIDIA 384.111 driver or greater
    + R390 branch: Not yet available
+ Windows Server instances:
    + R384 branch: NVIDIA 386.07 driver or greater
    + R390 branch: Not yet available

ほとんどのドライバのインストールでは、NVIDIA CUDA ツールキットをインストールすることにより、これらのドライバを入手することができます。

一部のイメージでは、スクリプトを使用してドライバのインストール プロセスを簡素化できます。これらのスクリプトを起動スクリプトとしてインスタンスで使用するか、インスタンスにスクリプトをコピーして sudo 権限のあるユーザーで端末から実行することができます。

選択した起動ディスク イメージでスクリプトが機能するように、スクリプトを作成する必要があります。インスタンスに対応するカスタム起動ディスク イメージをインポートした場合、そのカスタム イメージで正しく機能するように、起動スクリプトのカスタマイズが必要になる場合があります。

Windows Server インスタンスや、ドライバのインストール プロセスを自動化できない SLES 12 インスタンスでは、ドライバを手動でインストールします。

公開イメージの場合は、次のサンプル スクリプトを使用して、NVIDIA® Tesla® K80 GPU に関連付けられているドライバと CUDA をインストールできます。

CentOS

このスクリプトは既存の CUDA インストールの有無を確認し、CUDA 8 フルパッケージと関連する独自のドライバをインストールします。

CentOS 7 - CUDA 8:

#!/bin/bash
echo "Checking for CUDA and installing."
# Check for CUDA and try to install.
if ! rpm -q cuda-8-0; then
  curl -O http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-repo-rhel7-8.0.61-1.x86_64.rpm
  rpm -i --force ./cuda-repo-rhel7-8.0.61-1.x86_64.rpm
  yum clean all
  yum install epel-release -y
  yum update -y
  yum install cuda-8-0 -y
fi
# Verify that CUDA installed; retry if not.
if ! rpm -q cuda-8-0; then
  yum install cuda-8-0 -y
fi
# Enable persistence mode
nvidia-smi -pm 1

CentOS 7 のイメージからインストールすると、スクリプトがドライバと CUDA パッケージのインストールを完了した後でインスタンスの再起動が必要になることがあります。スクリプトが完了し、nvidia-smi コマンドが次のエラーを返した場合には、インスタンスを再起動してください。

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA
driver. Make sure that the latest NVIDIA driver is installed and
running.

CentOS 6 - CUDA 8:

#!/bin/bash
echo "Checking for CUDA and installing."
# Check for CUDA and try to install.
if ! rpm -q cuda-8-0; then
  curl -O http://developer.download.nvidia.com/compute/cuda/repos/rhel6/x86_64/cuda-repo-rhel6-8.0.61-1.x86_64.rpm
  rpm -i --force ./cuda-repo-rhel6-8.0.61-1.x86_64.rpm
  yum clean all
  yum install epel-release -y
  yum update -y
  yum install cuda-8-0 -y
fi
# Verify that CUDA installed; retry if not.
if ! rpm -q cuda-8-0; then
  yum install cuda-8-0 -y
fi
# Enable persistence mode
nvidia-smi -pm 1

RHEL

このスクリプトは既存の CUDA インストールの有無を確認し、CUDA 8 フルパッケージと関連する独自のドライバをインストールします。

RHEL 7 - CUDA 8:

#!/bin/bash
echo "Checking for CUDA and installing."
# Check for CUDA and try to install.
if ! rpm -q cuda-8-0; then
  curl -O http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-repo-rhel7-8.0.61-1.x86_64.rpm
  rpm -i --force ./cuda-repo-rhel7-8.0.61-1.x86_64.rpm
  curl -O https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
  rpm -i --force ./epel-release-latest-7.noarch.rpm
  yum clean all
  yum update -y
  yum install cuda-8-0 -y
fi
# Verify that CUDA installed; retry if not.
if ! rpm -q cuda-8-0; then
  yum install cuda-8-0 -y
fi
# Enable persistence mode
nvidia-smi -pm 1

RHEL 7 のイメージからインストールすると、スクリプトがドライバと CUDA パッケージのインストールを完了した後でインスタンスの再起動が必要になることがあります。スクリプトが完了し、nvidia-smi コマンドが次のエラーを返した場合には、インスタンスを再起動してください。

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA
driver. Make sure that the latest NVIDIA driver is installed and
running.

RHEL 6 - CUDA 8:

#!/bin/bash
echo "Checking for CUDA and installing."
# Check for CUDA and try to install.
if ! rpm -q  cuda-8-0; then
  curl -O http://developer.download.nvidia.com/compute/cuda/repos/rhel6/x86_64/cuda-repo-rhel6-8.0.61-1.x86_64.rpm
  rpm -i --force ./cuda-repo-rhel6-8.0.61-1.x86_64.rpm
  curl -O https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
  rpm -i --force ./epel-release-latest-6.noarch.rpm
  yum clean all
  yum update -y
  yum install cuda-8-0 -y
fi
# Verify that CUDA installed; retry if not.
if ! rpm -q  cuda-8-0; then
  yum install cuda-8-0 -y
fi
# Enable persistence mode
nvidia-smi -pm 1

SLES

このスクリプトは既存の CUDA インストールの有無を確認し、CUDA 8 フルパッケージと関連する独自のドライバをインストールします。

SLES 12 - CUDA 8:

SLES 12 インスタンスでは、ドライバを手動でインストールします。

SLES 11 - CUDA 8:

#!/bin/bash
echo "Checking for CUDA and installing."
# Check for CUDA and try to install.
if ! rpm -q cuda-8-0; then
  curl -O http://developer.download.nvidia.com/compute/cuda/repos/sles114/x86_64/cuda-repo-sles114-8.0.61-1.x86_64.rpm
  rpm -i --force ./cuda-repo-sles114-8.0.61-1.x86_64.rpm
  zypper --gpg-auto-import-keys refresh
  zypper install -ny cuda
fi
# Verify that CUDA installed; retry if not.
if ! rpm -q cuda-8-0; then
  zypper install -ny cuda
fi
# Enable persistence mode
nvidia-smi -pm 1

Ubuntu

このスクリプトは既存の CUDA インストールの有無を確認し、CUDA 8 フルパッケージと関連する独自のドライバをインストールします。

Ubuntu 16.04 LTS または 17.10 - CUDA 8:

#!/bin/bash
echo "Checking for CUDA and installing."
# Check for CUDA and try to install.
if ! dpkg-query -W cuda-8-0; then
  # The 16.04 installer works with 16.10.
  curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
  dpkg -i ./cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
  apt-get update
  apt-get install cuda-8-0 -y
fi
# Enable persistence mode
nvidia-smi -pm 1

Ubuntu 14.04 LTS - CUDA 8:

#!/bin/bash
echo "Checking for CUDA and installing."
# Check for CUDA and try to install.
if ! dpkg-query -W cuda-8-0; then
  curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1404/x86_64/cuda-repo-ubuntu1404_8.0.61-1_amd64.deb
  dpkg -i ./cuda-repo-ubuntu1404_8.0.61-1_amd64.deb
  apt-get update
  apt-get install cuda-8-0 -y
  apt-get install linux-headers-$(uname -r) -y
fi
# Enable persistence mode
nvidia-smi -pm 1

Windows Server

Windows Server インスタンスでは、ドライバを手動でインストールします。

スクリプトの実行が終了したら、GPU ドライバがインストールされたことを確認できます。

GPU ドライバを手動でインストールする

GPU のドライバのインストールにスクリプトを使用できない場合は、ユーザー自身がドライバを手動でインストールできます。アプリケーションに対して最も効率的に機能するインストーラとドライバのバージョンを選択するのは、ユーザーの責任となります。特定のドライバが必要な場合、またはいずれかのインストール スクリプトが機能しないカスタム イメージまたは公開イメージにドライバをインストールする必要がある場合、このインストール方法を使用します。

このプロセスを使用すると、ほとんどの公開イメージのインスタンスにドライバを手動でインストールできます。カスタム イメージの場合は、固有環境で機能するようにプロセスの変更が必要になることがあります。

CentOS

  1. ドライバをインストールするインスタンスに接続します。

  2. ドライバ レポジトリを選択し、それをインスタンスに追加します。たとえば、curl を使用して CUDA ツールキットをダウンロードし、rpm コマンドでレポジトリをシステムに追加します。

    • CentOS 7

      $ curl -O http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-repo-rhel7-8.0.61-1.x86_64.rpm
      
      $ sudo rpm -i cuda-repo-rhel7-8.0.61-1.x86_64.rpm
      

    • CentOS 6

      $ curl -O http://developer.download.nvidia.com/compute/cuda/repos/rhel6/x86_64/cuda-repo-rhel6-8.0.61-1.x86_64.rpm
      
      $ sudo rpm -i cuda-repo-rhel6-8.0.61-1.x86_64.rpm
      

  3. epel-release レポジトリをインストールします。このレポジトリには DKMS パッケージが含まれています。これは CentOS に NVIDIA ドライバをインストールするために必要です。

    $ sudo yum install epel-release
    

  4. Yum キャッシュを消去します。

    $ sudo yum clean all
    

  5. NVIDIA ドライバが含まれる CUDA 8 をインストールします。

    $ sudo yum install cuda-8-0
    

  6. 永続モードを有効にします。

    $ sudo nvidia-smi -pm 1
    Enabled persistence mode for GPU 00000000:00:04.0.
    Enabled persistence mode for GPU 00000000:00:05.0.
    All done.
    

RHEL

  1. ドライバをインストールするインスタンスに接続します。

  2. ドライバ レポジトリを選択し、それをインスタンスに追加します。たとえば、curl を使用して CUDA ツールキットをダウンロードし、rpm コマンドでレポジトリをシステムに追加します。

    • RHEL 7

      $ curl -O http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-repo-rhel7-8.0.61-1.x86_64.rpm
      
      $ sudo rpm -i cuda-repo-rhel7-8.0.61-1.x86_64.rpm
      

    • RHEL 6

      $ curl -O http://developer.download.nvidia.com/compute/cuda/repos/rhel6/x86_64/cuda-repo-rhel6-8.0.61-1.x86_64.rpm
      
      $ sudo rpm -i cuda-repo-rhel6-8.0.61-1.x86_64.rpm
      

  3. epel-release レポジトリをインストールします。このレポジトリには、NVIDIA ドライバのインストールに必要な DKMS パッケージが含まれています。RHEL では、このレポジトリの .rpmfedoraproject.org からダウンロードしてシステムに追加します。

    • RHEL 7

      $ curl -O https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
      
      $ sudo rpm -i epel-release-latest-7.noarch.rpm
      

    • RHEL 6

      $ curl -O https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
      
      $ sudo rpm -i epel-release-latest-6.noarch.rpm
      

  4. Yum キャッシュを消去します。

    $ sudo yum clean all
    

  5. NVIDIA ドライバが含まれる CUDA 8 をインストールします。

    $ sudo yum install cuda-8-0
    

  6. 永続モードを有効にします。

    $ sudo nvidia-smi -pm 1
    Enabled persistence mode for GPU 00000000:00:04.0.
    Enabled persistence mode for GPU 00000000:00:05.0.
    All done.
    

SLES

  1. ドライバをインストールするインスタンスに接続します。

  2. ドライバ レポジトリを選択し、それをインスタンスに追加します。たとえば、curl を使用して CUDA ツールキットをダウンロードし、rpm コマンドでレポジトリをシステムに追加します。

    • SLES 12

      $ curl -O http://developer.download.nvidia.com/compute/cuda/repos/sles12/x86_64/cuda-repo-sles12-8.0.61-1.x86_64.rpm
      
      $ sudo rpm -i cuda-repo-sles12-8.0.61-1.x86_64.rpm
      

    • SLES 11

      $ curl -O http://developer.download.nvidia.com/compute/cuda/repos/sles114/x86_64/cuda-repo-sles114-8.0.61-1.x86_64.rpm
      
      $ sudo rpm -i cuda-repo-sles114-8.0.61-1.x86_64.rpm
      

  3. Zypper を更新します。

    $ sudo zypper refresh
    

  4. NVIDIA が含まれる CUDA をインストールします。

    $ zypper install cuda-8-0
    

  5. 永続モードを有効にします。

    $ sudo nvidia-smi -pm 1
    Enabled persistence mode for GPU 00000000:00:04.0.
    Enabled persistence mode for GPU 00000000:00:05.0.
    All done.
    

Ubuntu

  1. ドライバをインストールするインスタンスに接続します。

  2. ドライバ レポジトリを選択し、それをインスタンスに追加します。たとえば、curl を使用して CUDA ツールキットをダウンロードし、dpkg コマンドでレポジトリをシステムに追加します。

    • Ubuntu 16.04 LTS と 17.10

      $ curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
      
      $ sudo dpkg -i cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
      

    • Ubuntu 14.04 LTS

      $ curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1404/x86_64/cuda-repo-ubuntu1404_8.0.61-1_amd64.deb
      
      $ sudo dpkg -i cuda-repo-ubuntu1404_8.0.61-1_amd64.deb
      

  3. パッケージ リストを更新します。

    $ sudo apt-get update
    

  4. NVIDIA ドライバが含まれる CUDA 8 をインストールします。

    $ sudo apt-get install cuda-8-0
    

  5. Ubuntu 14.04 では、ドライバが正しく初期化されるように、現在のカーネル バージョンに対応するヘッダーのインストールが必要になることがあります。

    $ sudo apt-get install linux-headers-$(uname -r)
    

  6. 永続モードを有効にします。

    $ sudo nvidia-smi -pm 1
    Enabled persistence mode for GPU 00000000:00:04.0.
    Enabled persistence mode for GPU 00000000:00:05.0.
    All done.
    

Windows Server

  1. ドライバをインストールするインスタンスに接続します。

  2. R384 ブランチ: NVIDIA 386.07 またはそれ以上を含む .exe インストーラ ファイルをダウンロードして、インスタンスに保存します。ほとんどの Windows Server インスタンスでは、次のオプションのいずれかを使用できます。

    たとえば、管理者として PowerShell ターミナルを開き、wget コマンドを使用して、必要なドライバのインストーラをダウンロードします。

    PS C:> wget https://developer.nvidia.com/compute/cuda/8.0/prod/network_installers/cuda_8.0.44_windows_network-exe -o cuda_8.0.44_windows_network.exe
    

  3. .exe インストーラを実行します。たとえば、管理者として PowerShell ターミナルを開き、次のコマンドを実行します。

    PS C:> .\cuda_8.0.44_windows_network.exe
    

インストーラの実行が終了したら、GPU ドライバがインストールされたことを確認できます。

GPU ドライバのインストールの確認

ドライバのインストールが終了したら、ドライバのインストールと初期化が正しく行われたことを確認します。

Linux

Linux インスタンスに接続し、nvidia-smi コマンドを使用して、ドライバが正しく実行されていることを確認します。

$ nvidia-smi

Mon Jan 26 10:23:26 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.111                Driver Version: 384.111                   |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla K80           Off  | 0000:00:04.0     Off |                    0 |
| N/A   43C    P0    72W / 149W |      0MiB / 11439MiB |    100%      Default |
+-------------------------------+----------------------+----------------------+

Windows Server

Windows Server インスタンスに接続し、nvidia-smi.exe コマンドを使用して、ドライバが正しく実行されていることを確認します。

PS C:> & 'C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe'

Mon Jan 27 13:06:50 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 369.30                 Driver Version: 369.30                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name            TCC/WDDM | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla K80           TCC  | 0000:00:04.0     Off |                    0 |
| N/A   52C    P8    30W / 149W |      0MiB / 11423MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

ドライバが機能せず、ドライバをインストールするためにスクリプトを使用していた場合、起動スクリプトのログを確認し、スクリプトが完了していて、インストール プロセス時に失敗していないことを確認します。

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

一般に、次の設定を使用して、Linux インスタンス上の GPU デバイスのパフォーマンスを最適化することができます。

  • 永続モードを有効にします。この設定は、インスタンス上のすべての GPU に適用されます。

    $ sudo nvidia-smi -pm 1
    Enabled persistence mode for GPU 00000000:00:04.0.
    Enabled persistence mode for GPU 00000000:00:05.0.
    All done.
    

  • GPU のクロック速度と GPU メモリのクロック速度を固定最大速度に設定します。

    • NVIDIA® Tesla® P100 GPU が搭載されたインスタンスの場合:

      $ sudo nvidia-smi -ac 715,1328
      Applications clocks set to "(MEM 715, SM 1328)" for GPU 00000000:00:04.0
      Applications clocks set to "(MEM 715, SM 1328)" for GPU 00000000:00:05.0
      All done.
      

    • NVIDIA® Tesla® K80 GPU が搭載されたインスタンスの場合:

      $ sudo nvidia-smi -ac 2505,875
      Applications clocks set to "(MEM 715, SM 1328)" for GPU 00000000:00:04.0
      Applications clocks set to "(MEM 715, SM 1328)" for GPU 00000000:00:05.0
      All done.
      

  • NVIDIA® Tesla® K80 GPU が搭載されたインスタンスでは、自動ブーストを無効にしてください。

    $ sudo nvidia-smi --auto-boost-default=DISABLED
    All done.
    

ホスト メンテナンス イベントの処理

GPU インスタンスは、ホスト メンテナンス イベントの場合に終了する必要がありますが、自動再起動が可能です。これらのメンテナンス イベントは、通常、週に 1 回実行しますが、必要に応じて頻繁に実行することもできます。

以下の手順を使用して保守イベントを処理することができます。

  • アプリケーションにとって便利なスケジュールでインスタンスを定期的に再起動することにより、それらの中断を回避できます。
  • インスタンスがホスト メンテナンスのためにスケジュールされているタイミングを確認し、システムの再起動でワークロードを移行する準備を整えます。

ホスト メンテナンス イベントについて事前に通知を受け取るようにするには、/computeMetadata/v1/instance/maintenance-event メタデータ値をモニタリングします。メタデータ サーバーへのリクエストから NONE が返された場合、インスタンスは終了するようにスケジュールされません。たとえば、インスタンス内から次のコマンドを実行します。

$ curl http://metadata.google.internal/computeMetadata/v1/instance/maintenance-event -H "Metadata-Flavor: Google"

NONE

メタデータ サーバーからタイムスタンプが返された場合、そのタイムスタンプは、インスタンスを強制的に終了する時期を示します。Compute Engine は GPU インスタンスに 1 時間の終了通知を送信します。一方、通常のインスタンスは 60 秒の通知のみ受け取ります。メンテナンス イベントを通じて移行するよう、アプリケーションを設定します。たとえば、次のいずれかの方法を使用できます。

  • 進行中の作業を Google Cloud Storage バケットに一時的に移動するようにアプリケーションを設定し、インスタンスの再起動後にそのデータを取り出します。

  • セカンダリ永続ディスクにデータを書き込みます。インスタンスが自動再起動した時点で、永続ディスクを再接続してアプリケーションを再開することができます。

ポーリングなしでこのメタデータ値の変更についての通知を受け取ることもできます。ポーリングなしでホスト メンテナンス イベントの高度な通知を受け取る方法の例については、ライブ マイグレーションの通知取得をお読みください。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Compute Engine ドキュメント