エンタープライズクラスの第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ペアを取得します。
手順
models-oss-secret.yamlという名前のファイルを作成し、次の内容をファイルに追加します。
apiVersion: v1 kind: 秘密 メタデータ: 名前: models-oss-secret namespace: デフォルト stringData: akId: <yourAccessKeyID> # RAMユーザーのAccessKey IDに置き換えます。 akSecret: <yourAccessKeySecret> # RAMユーザーのAccessKey secretに置き換えます。
次のコマンドを実行して、シークレットを作成します。
kubectl create -f models-oss-secret.yaml
期待される出力:
secret/models-oss-secret created
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を作成する」をご参照ください。
次のコマンドを実行して、静的にプロビジョニングされた永続ボリューム (PV) を作成します。
kubectl create -f models-oss-pv.yaml
期待される出力:
persistentvolume/models-oss-pv created
models-oss-pvc.yamlという名前のファイルを作成し、次のコンテンツをファイルに追加します。
apiVersion: v1 kind: PersistentVolumeClaim メタデータ: 名前: models-oss-pvc spec: accessModes: -ReadOnlyMany resources: requests: ストレージ: 50Gi セレクタ: matchLabels: alicloud-pvname: models-oss-pv
次のコマンドを実行して、永続ボリュームクレーム (PVC) を作成します。
kubectl create -f models-oss-pvc.yaml
期待される出力:
persistentvolumeclaim/models-oss-pvc created
values.yamlという名前のファイルを作成し、次の内容をファイルに追加します。
ノードプールのインスタンスタイプに基づいてリソース設定を変更できます。
リソース: limits: cpu: "16" memory: 32Gi requests: cpu: "14" メモリ: 24Gi useCustomModels: true ボリューム: モデル: name: data-volume persistentVolumeClaim: claimName: モデル-oss-pvc
values.yamlのサービス展開構成
手順2: サンプルサービスのデプロイ
次のコマンドを実行して、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
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: サンプルサービスのテスト
手順
次のコマンドを実行して、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
からの転送
テキストプロンプトを使用して、画像の生成をサービスに要求します。
この例では、サービスは
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
ラベルをノードプールに追加します。
手順
tdx_values.yamlという名前のファイルを作成し、次の内容をファイルに追加します。
values.yamlファイルの詳細については、「values.yamlのサービス展開構成」をご参照ください。
説明この例では、
nodepool-label=tdx-vm-pool
ラベルがノードプールに追加されます。 他のラベルを追加するには、nodeSelector
セクションのnodepool-label
の値を置き換えます。nodeSelector: nodepool-label: tdx-vm-pool
次のコマンドを実行して、安定拡散モデルをノードプールに移行します。
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
10分待ってから、ポッドのステータスを照会します。 ポッドが実行されていることを確認します。
kubectl get pod |grep stable-diffusion-ipex
期待される出力:
stable-diffusion-ipex-7f8c4f88f5-r478t 1/1 Running 0 1m44s
手順3: サンプルサービスのテストを繰り返して、ノードプールで安定拡散モデルをテストします。
API情報
APIパラメーター
stabilityai/sdxl-Turbo
モデルからStable Diffusion XL turboサービスをデプロイすると、このサービスはパブリックにアクセス可能なテキストからイメージへのAPIを生成します。 次の表に、APIパラメーターについて説明します。
リクエスト構文
POST /api/text2image
リクエストパラメーター
サンプルリクエスト
応答パラメーター
サンプル応答
パフォーマンス比較
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のランディングページが優先されます。