ワークロードをデプロイする

ワークロード オペレーターは、Confidential Space ワークロード VM インスタンスにオプションを渡して、実行前に動作を判断できます。一部のフラグには変更されない必須の値がありますが、次の選択を行う必要があります。

  • VM インスタンスを本番環境またはデバッグの Confidential Space イメージのどちらに基づいて作成するか。

  • ワークロード データのプライバシーを保護するために、AMD SEV、Intel TDX、または NVIDIA Confidential Computing を使用した Intel TDX を使用するかどうか。

  • 渡す必要がある VM メタデータ変数。これには、実行するワークロード コンテナ イメージ、Cloud Logging にログを記録するかどうか、設定する環境変数などの詳細が含まれます。

  • ワークロードを実行するために VM に関連付けるサービス アカウントと、他のプロジェクトの機密データにアクセスして結果を書き込むために必要な権限。

  • VM インスタンスが実行されるゾーン。

Confidential VM を作成し、WORKLOAD_CONTAINER_NAME という Docker コンテナを実行する例を次に示します。

CPU ベースのワークロード

gcloud compute instances create INSTANCE_NAME \
    --confidential-compute-type=CONFIDENTIAL_COMPUTING_TECHNOLOGY \
    --machine-type=MACHINE_TYPE_NAME \
    --maintenance-policy=MAINTENANCE_POLICY \
    --shielded-secure-boot \
    --image-project=confidential-space-images \
    --image-family=IMAGE_FAMILY \
    --metadata="^~^tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest" \
    --service-account=WORKLOAD_SERVICE_ACCOUNT_NAME@WORKLOAD_OPERATOR_PROJECT_ID.iam.gserviceaccount.com \
    --scopes=cloud-platform \
    --zone=ZONE_NAME \
    --project=PROJECT_ID

次の値を指定します。

  • INSTANCE_NAME: 新しい VM インスタンスの名前。

  • CONFIDENTIAL_COMPUTING_TECHNOLOGY: 使用する Confidential Computing テクノロジーのタイプ。次のいずれかの値を選択します。

    • SEV

    • TDX

  • MACHINE_TYPE_NAME: VM のマシンタイプ(例: n2d-standard-2)。Confidential VM インスタンスの有効なマシンタイプは、選択した Confidential Computing テクノロジー(AMD SEV または Intel TDX)によって決まります。マシンタイプ、CPU、ゾーンをご覧ください。

  • MAINTENANCE_POLICY: SEV を使用する N2D マシンタイプの場合は、ライブ マイグレーションをサポートするために MIGRATE に設定します。他のすべてのマシンタイプでは、ライブ マイグレーションをサポートしていないため、この値を TERMINATE に設定します。

  • IMAGE_FAMILY_NAME: Confidential Space イメージのファミリー。次のいずれかを選択します。

    • 本番環境ワークロードの confidential-space

    • デバッグ ワークロード用の confidential-space-debug

  • WORKLOAD_AUTHOR_PROJECT: ワークロード コンテナが保存されている Artifact Registry リポジトリをホストするプロジェクトの ID。

  • REPOSITORY_NAME: ワークロード コンテナが保存されている Artifact Registry リポジトリ名。

  • WORKLOAD_CONTAINER_NAME: ワークロード コンテナの名前。

  • WORKLOAD_SERVICE_ACCOUNT_NAME: ワークロードを実行するサービス アカウントの名前。

  • WORKLOAD_OPERATOR_PROJECT_ID: ワークロードを実行するプロジェクトの ID。

  • ZONE_NAME: VM インスタンスが実行されるゾーン(us-west1-b など)。Confidential Space には、特定のロケーションで使用可能な次のサービスが必要です。

  • PROJECT_ID: 省略可。VM インスタンスを作成するプロジェクトの ID。

GPU ベースのワークロード

始める前に

  • Confidential Space は、H100 GPU での NVIDIA Confidential Computing のみをサポートしています。

  • リクエストするリソースに十分な GPU 割り当てがあることを確認するには、GPU 割り当てを確認します。GPU を使用する Confidential VM インスタンスの場合は、リソースを使用するためにプリエンプティブル GPU 割り当てをリクエストします。GPU 割り当てをリクエストするときは、各リージョンで作成する GPU モデルに対する割り当てと、すべてのリージョンにおけるすべてのタイプの GPU の合計数に対する追加のグローバル割り当て(GPUs (all regions))をリクエストする必要があります。

  • 割り当ての使用量については、GPU VM とプリエンプティブルの数量に基づく割り当てをご覧ください。

  • MIG でサイズ変更リクエストを作成する際の制限事項を確認します。

  • NVIDIA Confidential Computing に必要なドライバをインストールするには、値が trueメタデータ変数 tee-install-gpu-driver を渡す必要があります。

  • NVIDIA ドライバと CUDA ツールキットには、30 GB 以上の容量の VM ブートディスクをおすすめします。

既知の問題

GPU 構成証明が失敗し、インデックス 9 で測定レコードの不一致が報告されることがあります。Google と NVIDIA はこの問題の修正に取り組んでいます。

この問題を回避するには、Confidential VM の完全な停止と再起動を行います。VM のゲスト OS から VM を再起動しても、問題は解決しません。

GPU ベースのワークロードをデプロイする

GPU ベースのワークロードをデプロイするには、Spot または Flex Start プロビジョニング モデルを使用して Confidential VM インスタンスを作成する必要があります。

スポット

Spot プロビジョニング モデルを使用するには、アクセラレータ最適化 VM インスタンスを作成します。

gcloud compute instances create INSTANCE_NAME \
    --provisioning-model=SPOT \
    --confidential-compute-type=TDX \
    --machine-type=a3-highgpu-1g \
    --maintenance-policy=TERMINATE \
    --shielded-secure-boot \
    --image-project=confidential-space-images \
    --image-family=IMAGE_FAMILY_NAME \
    --metadata="^~^tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest~tee-install-gpu-driver=true" \
    --service-account=WORKLOAD_SERVICE_ACCOUNT_NAME@WORKLOAD_OPERATOR_PROJECT_ID.iam.gserviceaccount.com \
    --scopes=cloud-platform \
    --boot-disk-size=30G \
    --zone=ZONE_NAME \
    --project=PROJECT_ID

次の値を指定します。

  • INSTANCE_NAME: 新しい VM インスタンスの名前。

  • IMAGE_FAMILY_NAME: Confidential Space イメージのファミリー。次のいずれかを選択します。

    • 本番環境ワークロードの confidential-space

    • デバッグ ワークロード用の confidential-space-debug

  • WORKLOAD_AUTHOR_PROJECT: ワークロードが実行されているプロジェクト ID。

  • REPOSITORY_NAME: Artifact Registry リポジトリ名。

  • WORKLOAD_CONTAINER_NAME: ワークロード コンテナの名前。

  • WORKLOAD_SERVICE_ACCOUNT_NAME: ワークロードを実行するサービス アカウントの名前。

  • WORKLOAD_OPERATOR_PROJECT_ID: ワークロードを実行するプロジェクトの ID。

  • ZONE_NAME: NVIDIA Confidential Computing をサポートするゾーンのいずれか。

  • PROJECT_ID: 省略可。VM インスタンスを作成するプロジェクトの ID。

Flex Start

Flex Start プロビジョニング モデルを使用するには、インスタンス テンプレートを作成してから、マネージド インスタンス グループ(MIG)を作成します。

  1. インスタンス テンプレートの作成:

    gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \
        --provisioning-model=FLEX_START \
        --confidential-compute-type=TDX \
        --machine-type=a3-highgpu-1g \
        --maintenance-policy=TERMINATE \
        --shielded-secure-boot \
        --image-project=confidential-space-images \
        --image-family=IMAGE_FAMILY_NAME \
        --metadata="^~^tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest~tee-install-gpu-driver=true" \
        --service-account=WORKLOAD_SERVICE_ACCOUNT_NAME@WORKLOAD_OPERATOR_PROJECT_ID.iam.gserviceaccount.com \
        --scopes=cloud-platform \
        --boot-disk-size=30G \
        --reservation-affinity=none \
        --max-run-duration=RUN_DURATION \
        --instance-termination-action=DELETE \
        --project=PROJECT_ID
    

    次の値を指定します。

    • INSTANCE_TEMPLATE_NAME: 新しい VM インスタンス テンプレートの名前。

    • IMAGE_FAMILY_NAME: Confidential Space イメージのファミリー。次のいずれかを選択します。

      • 本番環境ワークロードの confidential-space

      • デバッグ ワークロード用の confidential-space-debug

    • WORKLOAD_AUTHOR_PROJECT: ワークロードが実行されているプロジェクト ID。

    • REPOSITORY_NAME: Artifact Registry リポジトリ名。

    • WORKLOAD_CONTAINER_NAME: ワークロード コンテナの名前。

    • WORKLOAD_SERVICE_ACCOUNT_NAME: ワークロードを実行するサービス アカウントの名前。

    • WORKLOAD_OPERATOR_PROJECT_ID: ワークロードを実行するプロジェクトの ID。

    • RUN_DURATION: リクエストされた VM インスタンスを実行する期間。値は、日数、時間、分、秒として指定し、その後にそれぞれ dhms を続ける必要があります。たとえば、30 分の場合は 30m を指定し、1 日と 2 時間 3 分 4 秒の場合は 1d2h3m4s を指定します。値は 10 分~ 7 日の範囲で指定してください。

    • PROJECT_ID: 省略可。VM インスタンスを作成するプロジェクトの ID。

  2. instance-groups managed create コマンドを使用して、ゾーン MIG を作成します。

    gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
        --template=INSTANCE_TEMPLATE_NAME \
        --size=0 \
        --zone=ZONE_NAME \
        --default-action-on-vm-failure=do_nothing
    

    次の値を指定します。

  3. MIG で、サイズ変更リクエストを作成します。必要な GPU VM インスタンスの数と、それらの VM インスタンスを実行する期間を指定します。

    gcloud compute instance-groups managed resize-requests create INSTANCE_GROUP_NAME \
        --resize-request=RESIZE_REQUEST_NAME \
        --resize-by=COUNT \
        --zone=ZONE_NAME
    

    次の値を指定します。

    • INSTANCE_GROUP_NAME: MIG の名前。

    • INSTANCE_TEMPLATE_NAME: GPU VM インスタンスのインスタンス テンプレートの名前。

    • ZONE_NAME: NVIDIA Confidential Computing をサポートするゾーンのいずれか。

    • RESIZE_REQUEST_NAME: サイズ変更リクエストの名前。

    • COUNT: グループに一度にすべて追加する VM インスタンスの数。

    作成するサイズ変更リクエストは、MIG がリクエストされたすべての GPU VM インスタンスを作成するまで ACCEPTED 状態で保持されます。グループ内にすべての GPU VM インスタンスが作成されると、リクエストの状態が SUCCEEDED に変わります。

  4. サイズ変更リクエストに十分なリソースが使用可能になると、VM インスタンスが MIG に追加され、ワークロードを実行するために起動されます。MIG に存在するインスタンスを一覧表示するには、次のコマンドを実行します。

    gcloud compute instance-groups managed list-instances INSTANCE_GROUP_NAME \
        --zone=ZONE_NAME \
        --project=PROJECT_ID
    

    次の値を指定します。

    • INSTANCE_GROUP_NAME: MIG の名前。

    • ZONE_NAME: VM インスタンスのリストを取得するサポートされているゾーン

    • PROJECT_ID: 省略可。VM インスタンスのリストを取得するプロジェクトの ID。

関連付けられたサービス アカウント

ワークロードを実行するには、サービス アカウントをワークロードの Confidential VM に接続する必要があります。サービス アカウントは次のように設定する必要があります。

  • 次のロールが付与されている。

    • roles/confidentialcomputing.workloadUser を使用して証明書トークンを生成します。

    • roles/artifactregistry.reader: Artifact Registry に保存されているワークロード コンテナ イメージを取得します。

    • STDOUTSTDERRCloud Logging にリダイレクトする場合は、roles/logging.logWriter

  • データ コラボレーターが機密データを保存する場所(Cloud Storage バケットや BigQuery テーブルなど)への読み取りアクセス権。

  • ワークロードがデータを出力する場所(Cloud Storage バケットなど)への書き込みアクセス権。データ コラボレーターには、この場所に対する読み取りアクセス権が必要です。

また、データ コラボレーターとワークロード オペレーターは、次の設定を行う必要があります。

  • データ コラボレーターがリソースへの直接アクセスではなくサービス アカウントの権限借用を使用している場合は、サービス アカウントを属性条件として Workload Identity プール プロバイダに追加する必要があります。

    'WORKLOAD_SERVICE_ACCOUNT_NAME@DATA_COLLABORATOR_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts
    
  • ワークロード オペレーターがサービス アカウントの権限を借用するには、roles/iam.serviceAccountUser ロールが必要です。これにより、ワークロード VM インスタンスにアタッチしてワークロードを実行できます。

メタデータ変数

VM の作成時に --metadata オプションに変数を渡すことで、Confidential Space ワークロード VM の動作を変更できます。

複数の変数を渡すには、まず --metadata 値の前に ^~^ を付けて区切り文字を設定します。これは、, が変数で使用されているため、区切り文字を ~ に設定します。

次に例を示します。

metadata="^~^tee-restart-policy=Always~tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest"

次の表に、ワークロード VM に設定できるメタデータ変数を示します。

メタデータキー Type 説明と値

tee-image-reference

連携するサービス:

文字列

必須。これは、ワークロード コンテナの場所を指します。

tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest

tee-added-capabilities

連携するサービス:

JSON 文字列配列

ワークロード コンテナに Linux 機能を追加します。

tee-added-capabilities="[\"CAP_SYS_ADMIN\", \"CAP_SYS_CHROOT\"]"

tee-cgroup-ns

連携するサービス:

ブール値

デフォルトは false です。true に設定すると、/sys/fs/cgroup で名前空間付き cgroup マウントが有効になります。

tee-cgroup-ns=true

tee-cmd

連携するサービス:

JSON 文字列配列

ワークロード コンテナの Dockerfile で指定された CMD 命令をオーバーライドします。

tee-cmd="[\"params1\", \"params2\"]"

tee-container-log-redirect

連携するサービス:

  • ワークロード作成者: log_redirect 起動ポリシー。
列挙

ワークロード コンテナの confidential-space-launcher フィールドで STDOUTSTDERR を Cloud Logging またはシリアル コンソールに出力します。

有効な値は次のとおりです。

  • false: (デフォルト)ロギングは行われません。
  • true: シリアル コンソールと Cloud Logging に出力します。
  • cloud_logging: Cloud Logging にのみ出力します。
  • serial: シリアル コンソールにのみ出力します。

シリアル コンソールのログ量が多いと、ワークロードのパフォーマンスに影響する可能性があります。

tee-container-log-redirect=true

tee-dev-shm-size-kb

Integer

/dev/shm 共有メモリ マウントのサイズを kB 単位で設定します。

tee-dev-shm-size-kb=65536

tee-env-ENVIRONMENT_VARIABLE_NAME

連携するサービス:

文字列

ワークロード コンテナの環境変数を設定します。ワークロード作成者は、環境変数名を allow_env_override 起動ポリシーに追加する必要があります。そうしないと、設定されません。

tee-env-example-env-1='value-1'~tee-env-example-env-2='value-2'

tee-impersonate-service-accounts

連携するサービス:

文字列

ワークロード オペレーターによって権限を借用できるサービス アカウントのリスト。ワークロード オペレーターが、 サービス アカウントの権限借用を許可されている必要があります。

複数のサービス アカウントをカンマで区切って指定できます。

tee-impersonate-service-accounts=SERVICE_ACCOUNT_NAME_1@WORKLOAD_OPERATOR_PROJECT_ID.iam.gserviceaccount.com,SERVICE_ACCOUNT_NAME_2@WORKLOAD_OPERATOR_PROJECT_ID.iam.gserviceaccount.com

tee-install-gpu-driver

連携するサービス:

ブール値

NVIDIA の Confidential Computing GPU ドライバをインストールするかどうか。NVIDIA Confidential Computing をサポートするマシンタイプが必要です。

tee-install-gpu-driver=true

tee-monitoring-memory-enable

連携するサービス:

ブール値

デフォルトは false です。true に設定すると、メモリ使用量のモニタリングが有効になります。Confidential VM によって収集された指標は guest/memory/bytes_used タイプで、Cloud Logging または Metrics Explorer で表示できます。

tee-monitoring-memory-enable=true

tee-mount

連携するサービス:

文字列

セミコロンで区切られたマウント定義のリスト。マウント定義は、Key-Value ペアのカンマ区切りのリストで構成され、typesourcedestination が必要です。destination は絶対パスで、type/sourcetmpfs である必要があります。

type=tmpfs,source=tmpfs,destination=/tmp/tmpfs,size=12345;type=tmpfs,source=tmpfs,destination=/run/workload

tee-restart-policy

連携するサービス:

列挙

ワークロードが停止したときのコンテナ ランチャーの再起動ポリシー。

有効な値は次のとおりです。

  • Never(デフォルト)
  • Always
  • OnFailure

この変数は、本番環境の Confidential Space イメージでのみサポートされています。

tee-restart-policy=OnFailure

tee-signed-image-repos

連携するサービス:

文字列

Sigstore Cosign によって生成された署名を保存するコンテナ リポジトリのカンマ区切りのリスト。

tee-signed-image-repos=us-docker.pkg.dev/projectA/repo/example,us-docker.pkg.dev/projectB/repo/example,us-docker.pkg.dev/projectC/repo/example

スケーリング

本番環境の Confidential Space ワークロードのスケーリングと高可用性については、マネージド インスタンス グループをご覧ください。