GPU の追加または削除

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

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

始める前に

  • このガイドのコマンドラインのサンプルを使用する場合は、以下を行ってください。
    1. gcloud コマンドライン ツールの最新バージョンをインストールするか、最新バージョンに更新します。
    2. デフォルトのリージョンとゾーンを設定します。
  • このガイドの API の例を使用する場合、API アクセスを設定します。
  • お使いのインスタンスで GPU を使用する場合のコストについては、Compute Engine での GPU の料金をご覧ください。
  • このインスタンスと、多くのインスタンスとの機能面の違いについては、GPU を使用したインスタンスに関する制限をご覧ください。
  • ホスト メンテナンス イベントに対してインスタンスを停止するようにスケジュールしたときに、インスタンスがどのように機能するかについて学びます。GPU をインスタンスに追加する場合は、ホスト メンテナンス中にインスタンスを停止するように設定する必要もあります。
  • [割り当て] ページで、プロジェクトで使用できる GPU が十分であることを確認します。追加の GPU 割り当てが必要な場合は、割り当ての増加をリクエストします。
  • オペレーティング システム イメージを選択します。
    • 機械学習に GPU を使用している場合は、インスタンスに Deep Learning VM Image を使用できます。Deep Learning VM Image には GPU ドライバがあらかじめインストールされており、TensorFlow や PyTorch などのパッケージも含まれています。一般的な GPU ワークロードに Deep Learning VM Image を使用することもできます。使用可能なイメージと、イメージにインストールされたパッケージの詳細については、Deep Learning VM のドキュメントをご覧ください。
    • 公開イメージカスタム イメージを使用することもできますが、一部のイメージでは、このガイドで説明されていない独自のドライバやインストール プロセスが必要な場合があります。イメージに適したドライバを確認する必要があります。ドライバをインストールする手順については、GPU ドライバのインストールをご覧ください。

GPU を使用したインスタンスの作成

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

Google Cloud Consolegcloud コマンドライン ツール、または Compute Engine API を使用して、1 つ以上の GPU を含むインスタンスを作成します。

Console

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

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

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

gcloud

regions describe コマンドを使用して、GPU を持つインスタンスを作成するリージョンに十分な GPU 割り当てがあることを確認します。region は、GPU 割り当てを確認するリージョンに置き換えます。

gcloud compute regions describe region

インスタンスを作成して起動するには、次のフラグを指定して、gcloud compute instances create コマンドを使用します。

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 \
    [--preemptible]

以下を置き換えます。

  • instance-name: 新しいインスタンスの名前です。
  • machine-type: インスタンスに選択したマシンタイプです。希望する GPU 数に基づいた使用可能なマシンタイプについては、Compute Engine の GPU をご覧ください。
  • zone: インスタンスのゾーンです。
  • image-family: GPU をサポートするイメージ ファミリーです。
  • image-project: イメージ ファミリーが属するイメージ プロジェクトです。
  • accelerator-count: インスタンスに追加する GPU の数です。インスタンスのマシンタイプごとの GPU 制限の一覧については、Compute Engine の GPU をご覧ください。
  • accelerator-type: 使用する GPU モデルです。次の値のいずれかを使用できます。

    • NVIDIA® Tesla® T4: nvidia-tesla-t4
    • NVIDIA® Tesla® T4 Virtual Workstation with NVIDIA® GRID®: nvidia-tesla-t4-vws
    • NVIDIA® Tesla® P4: nvidia-tesla-p4
    • NVIDIA® Tesla® P4 Virtual Workstation with NVIDIA® GRID®: nvidia-tesla-p4-vws
    • NVIDIA® Tesla® P100: nvidia-tesla-p100
    • NVIDIA® Tesla® P100 Virtual Workstation with NVIDIA® GRID®: nvidia-tesla-p100-vws
    • NVIDIA® Tesla® V100: nvidia-tesla-v100
    • NVIDIA® Tesla® K80: nvidia-tesla-k80

    使用可能な GPU モデルのリストについては、Compute Engine の GPU をご覧ください。

  • --preemptible は、インスタンスをプリエンプティブル インスタンスとして構成する省略可能なフラグです。これにより、インスタンスと接続される GPU のコストが削減されます。詳細については、プリエンプティブル インスタンスの GPU をご覧ください。

たとえば、次の gcloud コマンドを使用して、us-east1-d ゾーンで 1 つの NVIDIA Tesla K80 GPU と 2 つの vCPU を使用する Ubuntu 16.04 インスタンスを開始できます。

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

この例のコマンドでインスタンスが開始されますが、CUDA とドライバを事前にインスタンスにインストールする必要があります。

API

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

GET https://compute.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://compute.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/machine-type",
  "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]
  },
}

以下を置き換えます。

  • instance-name: インスタンスの名前
  • project-id: 実際のプロジェクト ID。
  • zone: インスタンスのゾーン
  • machine-type: インスタンスに選択したマシンタイプです。希望する GPU 数に基づいた使用可能なマシンタイプについては、Compute Engine の GPU をご覧ください。
  • image-family: インスタンスの起動ディスク イメージです。使用可能な公開イメージのリストから、イメージ ファミリーを指定します。
  • image-project: イメージ ファミリーが属するイメージ プロジェクトです。
  • disk-size: 起動ディスクのサイズ(GB 単位)です。
  • network: インスタンスに使用する VPC ネットワークです。default を指定して、デフォルト ネットワークを使用できます。
  • accelerator-count: インスタンスに追加する GPU の数です。インスタンスのマシンタイプごとの GPU 制限の一覧については、Compute Engine の GPU をご覧ください。
  • accelerator-type: 使用する GPU モデルです。使用可能な GPU モデルのリストについては、Compute Engine の GPU をご覧ください。
  • "preemptible": true は、インスタンスをプリエンプティブル インスタンスとして構成する省略可能なパラメータです。これにより、インスタンスと接続される GPU のコストが削減されます。詳細については、プリエンプティブル インスタンスの GPU をご覧ください。

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

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

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

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

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

Console

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

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

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

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

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

  4. [VM インスタンスの詳細] ページで次の手順を行います。

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

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

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

    4. [マシンの構成] セクションで [CPU プラットフォームと GPU] をクリックして、マシンタイプの詳細オプションと使用可能な GPU を確認します。

    5. [GPU を追加] をクリックします。既存の GPU がある場合は、[GPU を追加] セクションの代わりにそれらの GPU が表示されます。

    6. [GPU のタイプ] をクリックすると、使用可能な GPU のリストが表示されます。

    7. インスタンスに追加する GPU の数と GPU モデルを選択します。または、既存の GPU の横にある [X] をクリックして GPU を削除することもできます。

    8. [ホスト メンテナンス時] セクションを確認します。

      • インスタンスに GPU を追加した場合、ホスト メンテナンス設定は自動的に [VM インスタンスを終了] に設定されます。GPU ホスト メンテナンス イベントの処理をご覧ください。
      • インスタンスから GPU を削除した場合は、必要に応じてホスト メンテナンス設定を [VM インスタンスを移行] に戻すことができます。
    9. ページの下部にある [保存] をクリックして変更を適用します。

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

API

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

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

    POST https://compute.googleapis.com/compute/v1/projects/compute/zones/zone/instances/instance-name/stop
    

    以下を置き換えます。

    • instance-name: 停止するインスタンスの名前。これは、GPU を接続するインスタンスです。
    • zone: インスタンスが配置される場所のゾーンです。
  2. インスタンスに追加する GPU タイプを指定します。GET リクエストを発行し、特定のゾーンのプロジェクトで使用可能な GPU タイプをリストします。

    GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/acceleratorTypes
    

    以下を置き換えます。

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

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

    POST https://compute.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 制限のリストについては、Compute Engine の GPU をご覧ください。
    • accelerator-type: 使用する GPU モデルです。使用可能な GPU モデルのリストについては、Compute Engine の GPU をご覧ください。
  5. インスタンスのスケジューリング オプションを設定する POST コマンドを作成します。インスタンスに GPU を追加する場合は、"onHostMaintenance": "TERMINATE" を指定する必要があります。オプションで、インスタンスから GPU を削除する場合は、"onHostMaintenance": "MIGRATE" を指定できます。

    POST https://compute.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://compute.googleapis.com/compute/v1/projects/compute/zones/zone/instances/instance-name/start
    

    以下を置き換えます。

    • instance-name: GPU を追加するインスタンスの名前です。
    • zone : インスタンスが配置されているゾーンです。

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

次のステップ