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


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

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

  • ワークロード データのプライバシーを保護するために、AMD SEV、インテル TDX、または NVIDIA Confidential Computing を使用したインテル 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 ベースのワークロードをデプロイする

GPU ベースのワークロードをデプロイするには、スポットまたは 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-preview-cgpu

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

  • 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-preview-cgpu

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

    • 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

連携するサービス:

定義された文字列

ワークロード コンテナの 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 ワークロードのスケーリングと高可用性については、マネージド インスタンス グループをご覧ください。