すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:TDX機密VMをサポートするノードプールでCPUアクセラレーションを使用して、テキストからイメージへの推論のためにStable Diffusion XL Turboモデルを高速化する

最終更新日:Nov 14, 2024

エンタープライズクラスの第8世代インスタンスファミリーg8iのElastic Compute Service (ECS) インスタンスをContainer Service for Kubernetes (ACK) クラスターにワーカーノードとして追加し、Intelを採用できます。®テキストから画像への推論を高速化するためのPyTorch (IPEX) テクノロジーの拡張。 Trust Domain Extensions (TDX) 機密VMをサポートするノードプールを作成し、推論サービスをノードプールに移行して、推論サービスのセキュリティを強化することもできます。 このトピックでは、CPUアクセラレーションポリシーとg8iインスタンスファミリーを使用して、GPU高速化ECSインスタンスを使用するのと同じ高速化モデル推論エクスペリエンスを取得する方法を例として、Stable Diffusion XL Turboモデルを使用して説明します。 これにより、安定した、高性能で、費用対効果の高い、安全なテキストからイメージへの推論サービスを開発できます。

背景情報

エンタープライズクラスの第8世代インスタンスファミリーg8i

第8世代の汎用ECSインスタンスファミリーg8iは、Cloud Infrastructure Processing Unit (CIPU) とApsara Stackによって強化されています。 それは第5世代Intelを使用します®Xeon®パフォーマンスを向上させるスケーラブルなプロセッサ (コードネームEmerald Rapids) 。 さらに、g8iインスタンスファミリーは、AIのパフォーマンスとセキュリティを強化するAdvanced Matrix Extensions (AMX) を採用しています。 g8iインスタンスファミリーのすべてのECSインスタンスはIntelをサポート®TDXだ このテクノロジを使用すると、アプリケーションに対応する変更を加えることなく、ワークロードを信頼できる実行環境 (TEE) にデプロイできます。 初心者向けのテクノロジーギャップを解消し、パフォーマンスの低下を最小限に抑えながら、大規模な言語モデルなどのAIアプリケーションの機密性を高めます。 詳細については、「g8i, general-purpose instance family」をご参照ください。

インテル ®TDX

インテル ®TDXは、CPUレジスタ、メモリデータ、割り込みインジェクションなどのランタイムデータを保護するために、ECSインスタンスにハードウェア支援による分離と暗号化を提供するCPUハードウェアベースのテクノロジーです。 インテル®TDXは、より高いレベルのデータプライバシーを実現し、実行中のプロセスや処理中の機密データへの不正アクセスに関連するリスクを軽減します。 インテルの詳細については®TDX、Intelを参照®ドメイン拡張機能を信頼する (Intel)®TDX)

インテル ®TDXは、ECSインスタンスとアプリケーションのデフォルトの保護を提供します。 アプリケーションコードを変更することなく、TDX対応インスタンスにアプリケーションを移行できます。

IPEX

インテル ®Extension for PyTorch (IPEX) は、Intelが管理するオープンソースのPyTorch拡張機能です。 PyTorchを使用し、Intelプロセッサで実行されるAIアプリケーションのパフォーマンスが大幅に向上します。 Intelは、最先端のハードウェアおよびソフトウェアテクノロジーを使用してIPEXを継続的に最適化し、PyTorchコミュニティを強化します。 詳細については、「IPEX」をご参照ください。

重要
  • Alibaba Cloudは、サードパーティモデル「Stable Diffusion」および「stabilityai/sdxl-turbo」の正当性、セキュリティ、および正確性を保証するものではありません。 Alibaba Cloudは、これらのモデルの使用に起因する損失または損害について責任を負いません。

  • サードパーティモデルのユーザー契約、使用法の仕様、および関連する法律および規制を遵守する必要があります。 あなたは、サードパーティ制モデルの使用があなたの唯一のリスクにあることに同意します。

  • このトピックのサンプルサービスは、学習、テスト、概念実証 (POC) 専用であり、統計は参照専用です。 実際の統計は、環境によって異なる場合があります。

前提条件

  • 中国 (北京) リージョンにACK Proクラスターが作成されています。 詳細については、「ACK管理クラスターの作成」をご参照ください。

  • ノードプールが作成されます。

    • 通常のノードプール: g8iインスタンスファミリーのECSインスタンスを含み、次の要件を満たすノードプールを作成します。

      • リージョンとゾーン: ノードプールは、ECSがサポートするリージョンとゾーンにあります。 詳細については、「各リージョンで使用可能なインスタンスタイプ」をご参照ください。

      • インスタンスタイプ: 16個以上のvCPUを提供するインスタンスタイプを選択します。 ecs.g8i.4xlarge、ecs.g8i.8xlarge、またはecs.g8i.12xlargeを選択することを推奨します。

      • ディスク容量: ノードプール内の各ノードのディスク容量は少なくとも200 GiBです。 200 GiBを超えるシステムディスクまたはデータディスクを使用できます。

    • TDX機密VMをサポートするノードプール: TDX機密VMをサポートするノードプールにアプリケーションをシームレスに移行して、推論サービスのセキュリティを強化することもできます。 これを行うには、前提条件が満たされていることを確認します。

  • kubectlクライアントがACKクラスターに接続されています。 詳細については、「kubectlを使用したACKクラスターへの接続」をご参照ください。

ステップ1: 安定した拡散XLターボモデルを準備する

この例では、Stable Diffusion XL Turboモデルstabilityai/sdxl-turboを使用します。

手順

公式のstabilityai/sdxl-turboモデルを使用する

values.yamlという名前のファイルを作成し、次の内容をファイルに追加します。 ノードプールのインスタンスタイプに基づいてリソース設定を変更できます。

resources:
   limits:
     cpu: "16"
     memory: 32Gi
   requests:
     cpu: "14"
     memory: 24Gi

カスタムのstabilityai/sdxl-turboモデルを使用する

Object Storage Service (OSS) に保存されているカスタムのstabilityai/sdxl-turboモデルを使用することもできます。 OSSアクセス権限を持つRAM (Resource Access Management) ユーザーを作成し、RAMユーザーのAccessKeyペアを取得します。

手順

  1. models-oss-secret.yamlという名前のファイルを作成し、次の内容をファイルに追加します。

    apiVersion: v1
    kind: 秘密
    メタデータ:
      名前: models-oss-secret
      namespace: デフォルト
    stringData:
      akId: <yourAccessKeyID> # RAMユーザーのAccessKey IDに置き換えます。 
      akSecret: <yourAccessKeySecret> # RAMユーザーのAccessKey secretに置き換えます。

  2. 次のコマンドを実行して、シークレットを作成します。

    kubectl create -f models-oss-secret.yaml

    期待される出力:

    secret/models-oss-secret created
  3. models-oss-pv.yamlという名前のファイルを作成し、次の内容をファイルに追加します。

    apiVersion: v1
    kind: PersistentVolume
    メタデータ:
      名前: models-oss-pv
      labels:
        alicloud-pvname: models-oss-pv
    spec:
      capacity:
        ストレージ: 50Gi
      accessModes:
        -ReadOnlyMany
      persistentVolumeReclaimPolicy: Retain
      csi:
       driver: ossplugin.csi.alibabacloud.com
       volumeHandle: モデル-oss-pv
       nodePublishSecretRef:
         名前: models-oss-secret
         NAMESPACE:デフォルト
       volumeAttributes:
         bucket: "<yourBucketName>"# マウントするOSSバケットの名前に置き換えます。 
         url: "<yourOssEndpoint>"# マウントするOSSバケットのエンドポイントに置き換えます。 内部エンドポイントを使用することを推奨します。 この例では、エンドポイントiがs oss-cn-beijing-internal.aliyuncs.comします。 
         otherOpts: "-o umask=022 -o max_stat_cache_size=0 -o allow_other"
         path: "/models"# モデルのパス。 stabilityai/sdxl-turboディレクトリがこのパスにあることを確認してください。

    OSSパラメーターの詳細については、「方法1: シークレットを使用してPVとPVCを作成する」をご参照ください。

  4. 次のコマンドを実行して、静的にプロビジョニングされた永続ボリューム (PV) を作成します。

    kubectl create -f models-oss-pv.yaml

    期待される出力:

    persistentvolume/models-oss-pv created
  5. models-oss-pvc.yamlという名前のファイルを作成し、次のコンテンツをファイルに追加します。

    apiVersion: v1
    kind: PersistentVolumeClaim
    メタデータ:
      名前: models-oss-pvc
    spec:
      accessModes:
        -ReadOnlyMany
      resources:
        requests:
          ストレージ: 50Gi
      セレクタ:
        matchLabels:
          alicloud-pvname: models-oss-pv 
  6. 次のコマンドを実行して、永続ボリュームクレーム (PVC) を作成します。

    kubectl create -f models-oss-pvc.yaml

    期待される出力:

    persistentvolumeclaim/models-oss-pvc created
  7. values.yamlという名前のファイルを作成し、次の内容をファイルに追加します。

    ノードプールのインスタンスタイプに基づいてリソース設定を変更できます。

    リソース:
       limits:
         cpu: "16"
         memory: 32Gi
       requests:
         cpu: "14"
         メモリ: 24Gi
    
    useCustomModels: true
    ボリューム:
      モデル:
        name: data-volume
        persistentVolumeClaim:
          claimName: モデル-oss-pvc 

values.yamlのサービス展開構成

values.yamlの内容を表示

# The number of replicated pods.
replicaCount: 1

# The container image.
image:
  repository: registry-vpc.cn-beijing.aliyuncs.com/eric-dev/stable-diffusion-ipex
  pullPolicy: IfNotPresent
  tag: "v0.1.5"             # The container image contains the stabilityai/sdxl-turbo model file.
  tagOnlyApi: "v0.1.5-lite"  # The container image does not contain the official stabilityai/sdxl-turbo model file. You need to manually mount the model file. For more information, see the comment for the useCustomModels parameter.

# Specify the Secret that stores the credentials used to pull a custom private container image.
imagePullSecrets: []

# The path of images in containers.
outputDirPath: /tmp/sd

# Specify whether to use a custom stabilityai/sdxl-turbo model.
useCustomModels: false

volumes:
  # The mount configuration corresponding to outputDirPath.
  output:
    name: output-volume
    emptyDir: {}
  # The mount configuration of the custom stabilityai/sdxl-turbo model when useCustomModels is set to true.
  # Place the model file in the stabilityai/sdxl-turbo subdirectory in the mount path.
  models:
    name: data-volume
    persistentVolumeClaim:
      claimName: models-oss-pvc
#    hostPath:
#      path: /data/models
#      type: DirectoryOrCreate


# The configuration for exposing the service.
service:
  type: ClusterIP
  port: 5000

# The container resource configuration.
resources:
   limits:
     cpu: "16"
     memory: 32Gi
   requests:
     cpu: "14"
     memory: 24Gi

# The workload update policy.
strategy:
  type: RollingUpdate

# The workload scheduling configuration.
nodeSelector: {}
tolerations: []
affinity: {}

# The container security configuration.
securityContext:
   capabilities:
     drop:
     - ALL
   runAsNonRoot: true
   runAsUser: 1000

# Specify whether to enable the Horizontal Pod Autoscaler (HPA).
# https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
autoscaling:
  enabled: false
  minReplicas: 1
  maxReplicas: 3
  targetCPUUtilizationPercentage: 80
  targetMemoryUtilizationPercentage: 90

手順2: サンプルサービスのデプロイ

  1. 次のコマンドを実行して、IPEX-accelerated Stable Diffusion XL Turboモデルをデプロイします。

    helm install stable-diffusion-ipex https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/pre/charts-incubator/stable-diffusion-ipex-0.1.7.tgz -f values.yaml

    期待される出力:

    NAME: stable-diffusion-ipex
    LAST DEPLOYED: Mon Jan 22 20:42:35 2024
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
  2. 10分待ち、次のコマンドを実行してポッドのステータスを照会します。 ポッドが実行されていることを確認します。

    kubectl get pod | grep stable-diffusion-ipex

    期待される出力:

    stable-diffusion-ipex-65d98cc78-vmj49   1/1     Running            0                1m44s

サービスがデプロイされたら、パブリックにアクセス可能なtext-to-image APIを生成します。 APIの詳細については、「APIパラメーター」をご参照ください。

ステップ3: サンプルサービスのテスト

手順

  1. 次のコマンドを実行して、Stable Diffusion XL Turboモデルサービスのポートをローカルポートにマッピングします。

    kubectl port-forward svc/stable-diffusion-ipex 5000:5000

    期待される出力:

    Forwarding from 127.0.0.1:5000 -> 5000
    Forwarding from [::1]:5000 -> 5000

    からの転送

  2. テキストプロンプトを使用して、画像の生成をサービスに要求します。

    この例では、サービスは512x51 2または1024x102 4イメージを生成します。

    512x512画像

    次のコマンドを実行して、テキストプロンプトに基づいて画像を生成するようにサービスに要求します。 非常に詳細、8k。:

    curl -X POST http://127.0.0.1:5000/api/text2image \
    	-d '{"prompt": "A panda listening to music with headphones. highly detailed, 8k.", "number": 1}'

    期待される出力:

    {
      "averageImageGenerationTimeSeconds": 2.0333826541900635、
      "generationTimeSeconds": 2.0333826541900635、
      "id": "9ae43577-170b-45c9-ab80-69c783b41a70" 、
      "meta": {
        "input": {
          "バッチ": 1、
          "model": "stabilityai/sdxl-turbo" 、
          "number": 1、
          "prompt": "ヘッドフォンで音楽を聴くパンダ。 非常に詳細、8k。"、
          "サイズ": "512x512" 、
          "ステップ": 4
        }
      },
      "output": [
        {
          "latencySeconds": 2.0333826541900635、
          "url": "http:// 127.0.0.1:5000/images/9ae43577-170b-45c9-ab80-69c783b41a70/0_0.png"
        }
      ],
      "status": "success"
    } 

    返されたURLをブラウザのアドレスバーに入力して、画像を表示できます。

    1024x1024画像

    次のコマンドを実行して、テキストプロンプトに基づいて画像を生成するようにサービスに要求します。 非常に詳細、8k。:

    curl -X POST http://127.0.0.1:5000/api/text2image \
    	-d '{"prompt": "A panda listening to music with headphones. highly detailed, 8k.", "number": 1, "size": "1024x1024"}'

    期待される出力:

    {
      "averageImageGenerationTimeSeconds": 8.635204315185547,
      "generationTimeSeconds": 8.635204315185547,
      "id": "ac341ced-430d-4952-b9f9-efa57b4eeb60",
      "meta": {
        "input": {
          "batch": 1,
          "model": "stabilityai/sdxl-turbo",
          "number": 1,
          "prompt": "A panda listening to music with headphones. highly detailed, 8k.",
          "size": "1024x1024",
          "step": 4
        }
      },
      "output": [
        {
          "latencySeconds": 8.635204315185547,
          "url": "http://127.0.0.1:5000/images/ac341ced-430d-4952-b9f9-efa57b4eeb60/0_0.png"
        }
      ],
      "status": "success"
    }

    返されたURLをブラウザのアドレスバーに入力して、画像を表示できます。

テストデータ

次の表に、g8iインスタンスファミリーのさまざまなECSインスタンスタイプで512x512および1024x1024イメージを生成するStable Diffusion XL Turboモデルの期間統計を示します。 统计は参照だけのためです。 実際の統計は、環境によって異なる場合があります。

インスタンスタイプ

ポッドのリクエスト /制限

パラメーター

各時間の平均期間

(512x512)

各時間の平均期間

(1024x1024)

ecs.g8i.4xlarge

(16 vCPU、64 GiB)

14/16

バッチ: 1

ステップ: 4

2.2s

8.8s

ecs.g8i.8xlarge

(32 vCPU、128 GiB)

24/32

バッチ: 1

ステップ: 4

1.3s

4.7s

ecs.g8i.12xlarge

(48 vCPU、192 GiB)

32/32

バッチ: 1

ステップ: 4

1.1s

3.9s

(オプション) 手順4: TDX機密VMをサポートするノードプールにサービスを移行する

サンプルサービスのデプロイ後、TDX機密VMをサポートするノードプールにサービスをシームレスに移行して、推論サービスのセキュリティを強化できます。

前提条件

  • TDX機密VMをサポートするノードプールがACKクラスターに作成され、ノードプールが要件を満たしています。 詳細については、「TDX機密VMをサポートするノードプールの作成」をご参照ください。

    さらに、ノードプールは次の要件を満たしています。

    • インスタンスタイプ: 16個以上のvCPUを提供するインスタンスタイプを選択します。 ecs.g8i.4xlargeを選択することを推奨します。

    • ディスク容量: ノードプール内の各ノードのディスク容量は少なくとも200 GiBです。 200 GiBを超えるシステムディスクまたはデータディスクを使用できます。

    • ノードラベル: nodepool-label=tdx-vm-poolラベルをノードプールに追加します。

手順

  1. tdx_values.yamlという名前のファイルを作成し、次の内容をファイルに追加します。

    values.yamlファイルの詳細については、「values.yamlのサービス展開構成」をご参照ください。

    説明

    この例では、nodepool-label=tdx-vm-poolラベルがノードプールに追加されます。 他のラベルを追加するには、nodeSelectorセクションのnodepool-labelの値を置き換えます。

    nodeSelector:
      nodepool-label: tdx-vm-pool 
  2. 次のコマンドを実行して、安定拡散モデルをノードプールに移行します。

    helm upgrade stable-diffusion-ipex https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/pre/charts-incubator/stable-diffusion-ipex-0.1.7.tgz -f tdx_values.yaml 

    期待される出力:

    Release "stable-diffusion-ipex" has been upgraded. Happy Helming!
    NAME: stable-diffusion-ipex
    LAST DEPLOYED: Wed Jan 24 16:38:04 2024
    NAMESPACE: default
    STATUS: deployed
    REVISION: 2
    TEST SUITE: None
  3. 10分待ってから、ポッドのステータスを照会します。 ポッドが実行されていることを確認します。

    kubectl get pod |grep stable-diffusion-ipex

    期待される出力:

    stable-diffusion-ipex-7f8c4f88f5-r478t   1/1     Running            0                1m44s
  4. 手順3: サンプルサービスのテストを繰り返して、ノードプールで安定拡散モデルをテストします。

API情報

APIパラメーター

stabilityai/sdxl-TurboモデルからStable Diffusion XL turboサービスをデプロイすると、このサービスはパブリックにアクセス可能なテキストからイメージへのAPIを生成します。 次の表に、APIパラメーターについて説明します。

リクエスト構文

POST /api/text2image

リクエストパラメーター

パラメーター

タイプ

説明

プロンプト

String

テキストプロンプト。

数値

integer

画像の数。 画像の最終的な数は、以下の式: × バッチに基づいて計算される。

size

String

各画像のサイズ。 デフォルト値: 512x51 2

有効な値:

  • 512x51 2

  • 1024x102 4

step

integer

ステップ設定。 デフォルト値: 4

バッチ

integer

バッチサイズ。 既定値:1

サンプルリクエスト

{
  "prompt": "A panda listening to music with headphones. highly detailed, 8k.",
  "number": 1
}

応答パラメーター

パラメーター

タイプ

説明

id

String

ジョブの ID

averageImageGenerationTimeSeconds

フロート

画像を生成するのに必要な平均時間。 単位は秒です。

generationTimeSeconds

フロート

すべての画像を生成するのに必要な合計時間。 単位は秒です。

meta

object

ジョブのメタデータ。

meta.input

object

ジョブの入力データ。

meta.input.model

String

モデルの名前。

meta.input.batch

integer

バッチサイズ。

meta.input.step

integer

ステップ設定。

meta.input.number

integer

画像の数。 画像の最終的な数は、以下の式: × バッチに基づいて計算される。

アウトプット

array

イメージ情報。

numberの値が1より大きい場合、すべての画像をマージした追加画像が生成されます。 画像の名前はimage_grid.pngです。

output[].url

String

画像のURL。 レプリケートされたポッドの数が1場合にのみ、ブラウザでイメージを表示できます。

output[].latencySeconds

フロート

バッチの生成に必要な時間。 単位は秒です。

status

String

ジョブのステータス。

サンプル応答

{
  "averageImageGenerationTimeSeconds": 2.0333826541900635,
  "generationTimeSeconds": 2.0333826541900635,
  "id": "9ae43577-170b-45c9-ab80-69c783b41a70",
  "meta": {
    "input": {
      "batch": 1,
      "model": "stabilityai/sdxl-turbo",
      "number": 1,
      "prompt": "A panda listening to music with headphones. highly detailed, 8k.",
      "size": "512x512",
      "step": 4
    }
  },
  "output": [
    {
      "latencySeconds": 2.0333826541900635,
      "url": "http://127.0.0.1:5000/images/9ae43577-170b-45c9-ab80-69c783b41a70/0_0.png"
    }
  ],
  "status": "success"
}

パフォーマンス比較

TDX機密VMをサポートするノードプールには、AMXおよびIPEXによって権限を与えられたg8iインスタンスファミリーのECSインスタンスが含まれています。 テキストから画像への推論を効率的に高速化し、TEEを有効にしてセキュリティを強化できます。 この例では、第5世代Intelを搭載したECS. g8i.4xlargeタイプのecsインスタンス®Xeon®スケーラブルなプロセッサを使用して、stabilityai/sdxl-turboモデルを実行および微調整します。 この例では、費用対効果が高く安全なテキストイメージ推論サービスを開発する方法を示します。

画像生成速度の観点では、GPUアクセラレーション (A10) は依然としてCPUアクセラレーションを上回っています。 インスタンスタイプがecs.g8i.8xlarge、stepが30、バッチサイズが16の場合、イメージは0.14イメージ /sの割合で生成されます。 インスタンスタイプがA10 GPUアクセラレーションインスタンスで、ステップが30、バッチサイズが16の場合、画像は0.4画像 /秒の速度で生成されます。 ただし、最適な画質の観点から、インスタンスタイプがecs.g8i.8xlarge、stepが4、バッチサイズが16の場合、1.2イメージ /sの割合でイメージが生成されます。 これは、画質を損なうことなく毎秒1つの画像を生成できることを意味する。

したがって、このソリューションは、安定した、高性能で、費用対効果の高い、安全なテキストからイメージへの推論サービスの開発に役立つGPUアクセラレーションの代替手段を提供します。

費用対効果、TEE機密コンピューティング、および大規模なリソース供給が必要な場合は、ecs.g8i.4xlargeインスタンスタイプを使用してstabilityai/sdxl-turboモデルを実行および微調整することを推奨します。

  • ecs.g8i.8xlargeをecs.gn7i-c8g1.2xlargeの代わりに使用すると、コストが9% 削減され、1.2画像 /秒の画像生成レートが保証されます。

  • ecs.gn7i-c8g1.2xlargeの代わりにecs.g8i.4xlargeを使用すると、画像生成が0.5画像 /秒に遅くなりますが、コストが53% 以上削減されます。

説明

[料金] タブの異なるリージョンのECSインスタンスの実際の料金 Elastic Compute Serviceのランディングページが優先されます。

CPUおよびGPUアクセラレーション統計の表示

CPUアクセラレーション

さまざまな推論モデルのベンチマークデータは、ecs.g8i.8xlargeインスタンスタイプに基づいて生成されます。 次の表に、ベンチマークデータを示します。 詳細については、「ベンチマークツール: lambda-diffusers」をご参照ください。

ベンチマークデータは参考用です。 実際のデータは環境によって異なる場合があります。

インスタンスタイプ

Alibaba Cloud ecs.g8i.8xlarge 32vCPU、128 GiB VM、EMR

Alibaba Cloud ecs.g8i.8xlarge 32vCPU、128 GiB VM、EMR

step

4

30

モデル

sdxl-ターボ

stable-diffusion-2-1-ベース

コマンド

python sd_pipe_sdxl_turbo.py -- bf16 -- バッチ1-高さ512-幅512-繰り返し5-ステップ4-プロンプト "ヘッドフォンで音楽を聴いているパンダ。 非常に詳細、8k"

python sd_pipe_infer.py -- model /data/models/stable-diffusion-2-1-base-bf16-batch 1-高さ512-幅512-繰り返し5-ステップ30-プロンプト "ヘッドフォンで音楽を聴くパンダ。 非常に詳細、8k"

パフォーマンス

image

image

GPUアクセラレーション

重要

この例で使用されるベンチマークデータは、Lambda Diffusersからのものです。 実際のベンチマークデータは異なる場合があります。 詳細については、「Lambda Diffusersベンチマーク推論」をご参照ください。

image

image

関連ドキュメント

TDX機密VMをサポートするノードプールの作成