イメージを使用してコンテナーを作成すると、通常、コンテナーの起動に必要なリソースがいくつかある場合でも、イメージのパッケージ全体がダウンロードされて解凍されます。 これには通常長い時間がかかる。 Container Registry Enterprise Editionを使用して、加速バージョンのコンテナイメージをデプロイできます。 アクセラレーションバージョンでは、イメージパッケージ全体をダウンロードする必要なく、必要なリソースのみをダウンロードおよび解凍できます。 これは、アプリケーション展開を加速し、高い弾性を提供する。 このトピックでは、Stable Diffusionアプリケーションを例として、Container Registry Enterprise Editionを使用してAIイメージを構築し、イメージプルを高速化する方法について説明します。
前提条件
インスタンスタイプがStandardまたはAdvancedのContainer Registry Enterprise Editionインスタンスが作成されます。 詳細については、「Container Registry Enterprise Editionのインスタンスの作成」をご参照ください。
Container Registry Enterprise Editionインスタンスを使用するための準備が完了しました。これには、ソースコードホスティングプラットフォームのバインド、名前空間の作成、イメージレジストリの作成などが含まれます。 詳細については、「Container Registry Enterprise Editionインスタンスを使用したイメージの作成」の手順1 ~ 3をご参照ください。
ACK Proクラスターが作成されました。 詳細については、「ACK管理クラスターの作成」をご参照ください。
kubectlクライアントがクラスターに接続されています。 詳細については、「クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続する」をご参照ください。
制限
オンデマンドイメージロード機能は、Alibaba Finance CloudおよびAlibaba Gov Cloudのリージョンではサポートされていません。
はじめに安定した拡散
Stable Diffusion WebUIはGithubで人気のあるプロジェクトで、プロンプトから画像を生成できます。 安定拡散は、テキスト理解コンポーネントと画像生成コンポーネントで構成されます。 安定拡散は、CLIPモデルを使用してプロンプトをエンコードし、拡散モデルを使用して画像を生成します。
Alibaba Cloudは、サードパーティモデルのStable Diffusionの正当性、セキュリティ、または正確性を保証するものではありません。 Alibaba Cloudは、安定拡散の使用によって生じたいかなる損害についても責任を負わないものとします。
安定した拡散のユーザーの同意、使用法の指定および関連した法律および規則によって従わなければなりません。 安定した拡散の正当性とコンプライアンスの要件から生じるすべての結果に耐えます。
手順1: ソースコードホストプラットフォームでDockerfileを作成する
Container Registry Enterprise Editionインスタンスを使用してイメージを作成するには、まずインスタンスをソースコードホストプラットフォームにバインドする必要があります。 Container Registryは、次のソースコードホスティングプラットフォームをサポートしています。 Gitee、GitHub、およびGitLab。
前提条件の説明に従って、ソースコードホスティングプラットフォームをバインドした後、プラットフォーム上にDockerfileを作成します。 Dockerfileは、Stable Diffusionアプリケーションイメージをプルするために使用されます。 次のコードブロックは例です。
FROM yunqi-registry.cn-shanghai.cr.aliyuncs.com/lab/stable-diffusion:model-only-v1.5 as model
FROM docker.io/nvidia/cuda:12.1.0-cudnn8-runtime-ubuntu22.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y --no-install-recommends \
libgl1 libglib2.0-0 wget git curl vim python3.10 python3-venv && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
RUN git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git && \
cd stable-diffusion-webui && git checkout v1.6.0
COPY --from=model /data/v1-5-pruned-emaonly.safetensors /stable-diffusion-webui/models/Stable-diffusion/
COPY --from=model /root/.cache/huggingface /root/.cache/huggingface
WORKDIR /stable-diffusion-webui/
RUN ./webui.sh -f can_run_as_root --exit --skip-torch-cuda-test
ENV VIRTUAL_ENV=/stable-diffusion-webui/venv
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
CMD ["python3", "launch.py", "--listen --skip-torch-cuda-test --no-half"]
ステップ2: Container Registry Enterprise Editionを使用して安定した拡散アプリケーションのイメージ構築
このセクションでは、イメージアクセラレーションをサポートするContainer Registry Enterprise Editionインスタンスが作成されます。 イメージアクセラレーションを有効にすると、イメージレジストリにプッシュされたイメージは自動的にアクセラレーションされたイメージに変換されます。
Container Registryコンソールにログインします。
上部のナビゲーションバーで、リージョンを選択します。
作成したContainer Registry Enterprise Editionインスタンスをクリックします。 左側のナビゲーションウィンドウで、[リポジトリ] > [リポジトリ] を選択します。
[リポジトリの作成] をクリックし、表示されるダイアログボックスでパラメーターを設定し、[リポジトリの作成] をクリックします。
次の表に、主要なパラメーターを示します。 詳細については、「手順3: イメージリポジトリの作成」をご参照ください。
パラメーター
説明と例
レイアウトのコンソール
名前空間
名前空間を選択します。
リポジトリ名
イメージリポジトリの名前を入力します。
高速イメージ
イメージアクセラレーションを有効にすると、イメージリポジトリにプッシュされたイメージは自動的にアクセラレーションイメージに変換されます。
このトピックでは、イメージアクセラレーションが有効になっています。
概要
サマリーを入力します。
コードソース
Container Registry Enterprise Editionインスタンスにバインドされ、Dockerfileを含むソースコードホスティングプラットフォームを選択します。
ビルド設定
コードが変更されたときにイメージを自動的にビルドし、中国本土以外に配置されたサーバーでビルドします。
コードが変更されたときにイメージを自動的にビルドする: コードがブランチからコミットされると、ビルドルールが自動的にトリガーされます。
中国本土外に配置されたサーバーを使用したビルド: イメージは中国本土外のサーバー上にビルドされ、指定されたリージョンのリポジトリにプッシュされます。 プロジェクトで使用されるDockerfileを中国本土以外のサイトからダウンロードする必要があるが、国境を越えたネットワーク接続が不安定な場合は、中国本土以外に配置されたサーバーでビルドを有効にできます。
イメージリポジトリの詳細ページに移動します。 左側のナビゲーションウィンドウで、[ビルド] をクリックします。 [ビルドルール] セクションで、[ビルドルールの追加] をクリックします。 ウィザードでパラメーターを設定し、[OK] をクリックします。
次の表に、主要なパラメーターを示します。 詳細については、「手順4: イメージの作成」をご参照ください。
パラメーター
説明と例
レイアウトのコンソール
必須
ソースコードリポジトリのタイプを指定します。 有効な値: BranchとTag。
ブランチ /タグ
ブランチまたはタグを選択または入力します。 正規表現に対応しています。 release-(?<imageTag>\w *) 正規表現を指定すると、release-v1ブランチのソースコードが更新されると、システムは自動的にV1のイメージを構築します。 イメージを手動でビルドすることはできません。 正規表現を指定する方法の詳細については、「名前付きキャプチャグループでの正規表現の使用」をご参照ください。
説明正規表現を指定すると、イメージはシステムによってのみ作成できます。 イメージを手動で作成することはできません。
ビルドコンテキストディレクトリ
Dockerfileが存在するディレクトリを指定します。 ブランチまたはタグディレクトリのサブディレクトリです。 たとえば、ブランチディレクトリがmaster /で、Dockerfileがmaster /ディレクトリにある場合、値はmaster/Dockerfileです。
Dockerfileファイル名
Dockerfileの名前を指定します。 デフォルトの名前はDockerfileです。
画像タグ
イメージタグ (1.0.0など) を指定します。 名前付きキャプチャグループを有効にできます。 たとえば、Branch/Tagに名前付きキャプチャグループを指定した場合、キャプチャされたコンテンツを使用できます。
ビルド設定
ビルドアーキテクチャとビルドパラメーターを設定します。 このトピックでは、デフォルト設定が使用されます。
[ビルド設定] ページの [ビルドルール] セクションで、ビルドルールの [操作] 列の [ビルド] をクリックします。
設定が完了したら、[ビルドログ] セクションでイメージビルドタスクのステータスを確認できます。 ステータスがSuccessの場合、イメージがビルドされます。
イメージアクセラレーションを有効にすると、イメージの作成に約30分かかります。
イメージが作成されたら、左側のナビゲーションウィンドウで [イメージタグ] をクリックし、タイプが [高速化イメージ] であるイメージのタグとタイプが [コンテナイメージ] であるイメージのタグを表示します。
現在のリポジトリは、高速化されたイメージリポジトリです。 リポジトリ内のすべての画像は自動的に高速化画像に変換されます。 上の図では、2つのアクセラレーションイメージと1つのレギュラーコンテナイメージが作成されています。
タイプがコンテナーイメージのセクションで、[タグ] をクリックし、[リポジトリURL] をコピーします。 URLは、ACKクラスター内のStable Diffusionアプリケーションによって使用されます。
手順3: ACKクラスターで安定拡散アプリケーションを高速化
1. 画像アクセラレーションコンポーネントのインストール
コンテナーアクセラレーションを有効にするには、ワーカーノードにイメージアクセラレーションコンポーネントをインストールする必要があります。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[アドオン] ページで、aliyun-acr-acr-acceleration-suiteを見つけてクリックし、指示に従ってコンポーネントをインストールします。
2. 高速化イメージを使用するノードプールを作成する
アクセラレーションイメージをテストするには、ノードプールを作成する必要があります。 ノードプールを作成するときに、alibabacloud.com/image-accelerate-enabled: true
ラベルをノードに追加して、ノードの初期化中にイメージアクセラレーションを使用します。
alibabacloud.com/image-accelerate-enabled: true
ラベルは、既存のノードには適用されません。 イメージアクセラレーションを使用するノードを管理するために、別のノードプールを作成することをお勧めします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
ページの右上隅にある [ノードプールの作成] をクリックします。 期待されるノードを1に設定して、CPU高速化ノードを作成します。 16 vCoreおよび32 GBメモリ以上のインスタンスタイプを選択します。 次に、[詳細オプション] をクリックし、[ノードラベル] を
[true]
に設定します。詳細については、「ノードプールの作成とスケールアウト」をご参照ください。
次のコマンドを実行して、イメージアクセラレーションラベルを持つノードを照会します。
kubectl get nodes -l alibabacloud.com/image-accelerate-enabled=true
期待される出力:
NAME STATUS ROLES AGE VERSION cn-hangzhou.172.XX.XX.115 Ready <none> 2m33s v1.24.6-aliyun.1
3。 イメージリポジトリのVPCの設定
ACKクラスターがイメージリポジトリからイメージをプルできるようにするには、Container RegistryコンソールでイメージリポジトリのACKクラスターの仮想プライベートクラウド (VPC) を指定する必要があります。
Container Registryコンソールにログインします。
上部のナビゲーションバーで、リージョンを選択します。
Container Registry Enterprise Editionインスタンスをクリックします。 左側のナビゲーションウィンドウで、[リポジトリ] > [アクセス制御] を選択します。
[VPCの追加] をクリックし、ACKクラスターのVPCとイメージアクセラレーションラベルが付いているノードのvSwitchを選択し、[OK] をクリックします。
VPCのステータスが [実行中] に変わると、VPCが追加されます。
説明VPCとvSwitchに関する情報を表示するには、ACKコンソールにログインします。 [クラスター] ページで、ACKクラスターの名前をクリックし、次の手順を実行します。
ACKクラスターのVPCを表示する: 左側のナビゲーションウィンドウで、[クラスター情報] をクリックします。 次に、[クラスターリソース] タブをクリックしてVPC情報を表示します。
イメージアクセラレーションラベルを持つノードのvSwitchを表示する: 左側のナビゲーションウィンドウで、
を選択します。 表示するノードプールの名前をクリックし、[概要] タブをクリックします。 vSwitchの情報は、[ノード設定] セクションで確認できます。
4。 ACK Proクラスターへのアプリケーションポッドのデプロイ
YAMLファイルを使用して、Container Registryインスタンスから高速化イメージをプルし、ACKクラスターにイメージをデプロイできます。
次のコマンドを実行して、Stable Diffusionアプリケーションの名前空間を作成します。
kubectl create ns accelerate-ai-demo
次のコマンドを実行して、イメージアクセラレーションラベルを名前空間に追加します。
kubectl label namespaces accelerate-ai-demo k8s.aliyun.com/image-accelerate-mode=on-demand
次のコマンドを実行して、
acr-credential-test
名前空間にacr-credential-testを作成し、イメージのプルに使用する資格情報を格納します。<yourInstanceName>-<registry-vpc.cn-hangzhou.cr.aliyuncs.com>
をリポジトリURLに、<yourUserName>
をAlibaba Cloudアカウントのユーザー名に、<yourPassword>
をContainer Registryインスタンスのパスワードに置き換えます。kubectl -n accelerate-ai-demo create secret docker-registry acr-credential-test --docker-server=<yourInstanceName>-<registry-vpc.cn-hangzhou.cr.aliyuncs.com> --docker-username=<yourUserName> --docker-password=<yourPassword>
次のコードを使用して、
stable-diffusion-ack-gpu-accelerate.yaml
という名前のファイルを作成します。 このファイルは、Stable Diffusionアプリケーション用にtea
という名前の展開とtea-svc
という名前のサービスを展開するために使用されます。次のコマンドを実行して、Stable Diffusionアプリケーションをデプロイします。
kubectl apply -f stable-diffusion-ack-gpu-accelerate.yaml
次のコマンドを実行して、Stable Diffusionアプリケーション用にデプロイされたポッドのステータスを照会します。
kubectl -n accelerate-ai-demo get pod
期待される出力:
NAME READY STATUS RESTARTS AGE stable-diffusion-75759ff59f-hw5zm 1/1 Running 0 73s
次のコマンドを実行して、ポッドの詳細を照会します。
kubectl -n accelerate-ai-demo describe pod <pod-name>
期待される出力:
... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 23s default-scheduler Successfully assigned accelerate-ai-demo/stable-diffusion-75ff55794f-5mj8p to cn-hangzhou.172.16.7.99 Normal AllocIPSucceed 19s terway-daemon Alloc IP 172.16.7.115/24 Normal Pulling 19s kubelet Pulling image "XXX" Normal Pulled 17s kubelet Successfully pulled image "XXX" in 1.61s (1.61s including waiting) Normal Created 17s kubelet Created container stable-diffusion Normal Started 16s kubelet Started container stable-diffusion
出力は、安定拡散アプリケーションが約7秒後に準備ができたことを示す。 実際の時間はあなたの環境に依存します。
イメージアクセラレーションが無効になっている場合、ACKクラスターはイメージをプルするのに約4分かかります。 実際の時間はあなたの環境に依存します。 イメージアクセラレーションは、ACKのイメージプリング時間を大幅に短縮し、Stable Diffusionアプリケーションの起動を加速します。
ステップ5: 設定の確認
次のコマンドを実行して、Stable Diffusionアプリケーション用にデプロイされたポッドのサービスの詳細を照会します。 外部IPアドレスを記録し、それを使用してアプリケーションにアクセスします。
kubectl -n accelerate-ai-demo get svc
期待される出力:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE stable-diffusion LoadBalancer 172.XX.XX.163 121.XX.XX.64 7860:32621/TCP 116s
EXTERNAL-IP
の値を記録します。次のcurlコマンドを実行して、Stable Diffusionアプリケーションをテストします。
<EXTERNAL-IP>
を、記録したEXTERNAL-IP
の値に置き換えます。curl http://<EXTERNAL-IP>:7860/
ブラウザで
http://<EXTERNAL-IP>:7860/
にアクセスすることもできます。 左上隅で、チェックポイントを選択します。 [プロンプト] セクションでプロンプトを入力し、[生成] をクリックして画像を生成します。アプリケーションに初めてアクセスするときに遅延が存在する場合があります。 しばらく待つか、ページを更新します。