このトピックでは、Serverless Kubernetes クラスターに Stable Diffusion アプリケーションをデプロイする方法について説明します。コンソールまたは kubectl を使用してアプリケーションをデプロイできます。アプリケーションがデプロイされると、外部エンドポイントを介して Stable Diffusion にアクセスし、人工知能生成コンテンツ (AIGC) を使用してテキストから画像を生成できます。
前提条件
中国 (北京)、中国 (杭州)、中国 (上海)、または中国 (深圳) リージョンに Serverless Kubernetes クラスターを作成済みであること。詳細については、「ACK Serverless クラスターの作成」をご参照ください。
Stable Diffusion の概要
Stable Diffusion WebUI は、テキストプロンプトから画像を生成できる GitHub 上で人気のオープンソースプロジェクトです。Stable Diffusion は、テキスト理解コンポーネントと画像生成コンポーネントで構成されています。Stable Diffusion は、CLIP モデルを使用してプロンプトをエンコードし、拡散モデルを使用して画像を生成します。
Alibaba Cloud は、サードパーティモデルである Stable Diffusion の合法性、セキュリティ、または正確性を保証しません。Alibaba Cloud は、Stable Diffusion の使用によって生じたいかなる損害についても責任を負いません。
お客様は、Stable Diffusion のユーザー契約、使用仕様、および関連する法律や規制を遵守する必要があります。お客様は、Stable Diffusion の使用から生じるすべての結果に対して責任を負います。
ステップ 1: Stable Diffusion アプリケーションのデプロイ
コンソールから Stable Diffusion アプリケーションをデプロイできます。または、kubectl を使用して Kubernetes クラスターに接続し、YAML ファイルを作成してアプリケーションをデプロイすることもできます。
コンソール
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、管理するクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[Stateless] ページで、[イメージから作成] をクリックします。
[アプリケーションの基本情報] ページで、[アプリケーション名] を stable-diffusion に、[レプリカ数] を 1 に設定します。次に、[次へ] をクリックします。
[コンテナー設定] ページで、次のパラメーターを設定し、[次へ] をクリックします。
次の表に、コンテナーパラメーター設定の例を示します。記載されていないパラメーターは、デフォルト値のままにすることができます。
設定エリア
設定項目
値の例
基本設定
イメージ名
インターネット: yunqi-registry.cn-shanghai.cr.aliyuncs.com/lab/stable-diffusion:v1.2.0
内部ネットワーク: registry-vpc.<Region ID>.aliyuncs.com/yunqi-lab/stable-diffusion:v1.2.0
説明<Region ID> をクラスターのリージョン ID に置き換えます。サポートされているリージョンは cn-beijing、cn-shanghai、cn-hangzhou、cn-shenzhen です。
必須リソース
CPU: 8 vCPU
メモリ: 16 GB
ヘルスチェック
Readiness Probe
[Readiness Probe] を選択し、[TCP ソケット] を選択して、[ポート] を 7860 に設定します。
ライフサイクル
開始実行
コンテナーの起動コマンドと引数を次のように設定します。
コマンド:
["python3", "launch.py"]引数:
["--listen", "--skip-torch-cuda-test", "--no-half"]
[高度な設定] ページで、[サービス] の右側にある [作成] をクリックし、サービスパラメーターを設定して Stable Diffusion アプリケーションを公開します。
次の表に、サービスパラメーター設定の例を示します。記載されていないパラメーターは、デフォルト値のままにすることができます。
設定項目
値の例
名前
stable-diffusion-svc
サービスタイプ
[Server Load Balancer (LoadBalancer)] を選択します。
Server Load Balancer タイプ: Classic Load Balancer (CLB)
リソースの選択: リソースの作成
ポートマッピング
名前: example-port
サービスポート: 7860
コンテナーポート: 7860
プロトコル: TCP
[高度な設定] ページに戻り、[作成] をクリックします。
[Stateless] ページに戻り、アプリケーション名をクリックしてアプリケーション詳細ページに移動します。[Pod] タブで、Pod のステータスが [実行中] に変わるまで待ちます。次に、[アクセス方法] タブをクリックし、[外部エンドポイント] フィールドから外部サービスの IP アドレスを取得します。
kubectl
kubectl を使用して Serverless Kubernetes クラスターに接続します。詳細については、「kubectl を使用して Kubernetes クラスターに接続する」をご参照ください。
stable-diffusion.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。
次のサンプルコードでは、
imageの値はパブリックエンドポイントです。内部ネットワーク経由でイメージをプルするには、imageの値をクラスターリージョンに対応するエンドポイントに置き換えます。中国 (北京): registry-vpc.cn-beijing.aliyuncs.com/yunqi-lab/stable-diffusion:v1.2.0
中国 (上海): registry-vpc.cn-shanghai.aliyuncs.com/yunqi-lab/stable-diffusion:v1.2.0
中国 (杭州): registry-vpc.cn-hangzhou.aliyuncs.com/yunqi-lab/stable-diffusion:v1.2.0
中国 (深圳): registry-vpc.cn-shenzhen.aliyuncs.com/yunqi-lab/stable-diffusion:v1.2.0
apiVersion: apps/v1 kind: Deployment metadata: labels: app: stable-diffusion name: stable-diffusion namespace: default spec: replicas: 1 selector: matchLabels: app: stable-diffusion template: metadata: labels: app: stable-diffusion spec: containers: - args: - --listen - --skip-torch-cuda-test - --no-half command: - python3 - launch.py image: yunqi-registry.cn-shanghai.cr.aliyuncs.com/lab/stable-diffusion:v1.2.0 imagePullPolicy: IfNotPresent name: stable-diffusion ports: - containerPort: 7860 protocol: TCP readinessProbe: tcpSocket: port: 7860 resources: limits: cpu: "8" memory: 16Gi ephemeral-storage: 50Gi --- apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: internet service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type: PayByCLCU name: stable-diffusion-svc namespace: default spec: externalTrafficPolicy: Local ports: - port: 7860 protocol: TCP targetPort: 7860 selector: app: stable-diffusion type: LoadBalancer次のコマンドを実行して、Stable Diffusion アプリケーションをデプロイします。
kubectl apply -f stable-diffusion.yaml次のコマンドを実行して、アプリケーションのステータスが Normal であるかどうかを確認します。
kubectl get deployment stable-diffusion期待される出力:
NAME READY UP-TO-DATE AVAILABLE AGE stable-diffusion 1/1 1 1 103m
ステップ 2: サービスへのアクセス
ブラウザで、サービスの外部 IP アドレス (EXTERNAL-IP) を入力して、Stable Diffusion アプリケーションにアクセスします。
たとえば、「Black and white photo of a beautiful city」と入力し、[生成] をクリックして Stable Diffusion によって生成された画像を表示します。
ステップ 3: リソースの解放
チュートリアルが完了したら、不要な料金が発生しないように、リソースを適時に削除してください。
作成したアプリケーションとサービスの削除
ACK コンソールの [クラスター] ページで、ターゲットクラスターの名前をクリックします。
左側のナビゲーションウィンドウで、[ワークロード] > [Stateless] を選択します。作成した Stable Diffusion アプリケーションを選択し、[一括削除] をクリックし、画面の指示に従って削除を確認します。
クラスターの削除
Serverless Kubernetes クラスターはパブリックプレビュー中で、無料トライアルを提供しています。ただし、Serverless Kubernetes クラスターで使用される他の Alibaba Cloud サービスについては、サービスの課金ルールに基づいて料金を支払う必要があります。料金はこれらの Alibaba Cloud サービスによって別途請求されます。設定が完了したら、次のいずれかの方法でクラスターを管理できます。
クラスターが不要になった場合は、ACK コンソールにログインします。[クラスター] ページで、クラスターの [アクション] 列で [その他] > [削除] を選択してクラスターを削除します。[クラスターの削除] ダイアログボックスで、[クラスターによって作成された ALB インスタンスを削除]、[クラスターによって作成された Alibaba Cloud DNS PrivateZone インスタンスを削除]、および [上記情報を理解し、指定したクラスターを削除します] を選択し、[OK] をクリックします。Serverless Kubernetes クラスターの削除方法の詳細については、「ACK Serverless クラスターの削除」をご参照ください。
クラスターを引き続き使用する場合は、トライアル期間が終了する少なくとも 1 時間前に Alibaba Cloud アカウントにチャージし、アカウントの残高が 100 元以上であることを確認してください。ACK Serverless Pro クラスターで使用される Alibaba Cloud サービスの課金の詳細については、「クラウドサービス料金」をご参照ください。
お問い合わせ
ACK の AIGC サービス有効化に関するご質問は、DingTalk グループ 31850017754 にご参加ください。