ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントに例の値を使用します。演習を完了するときは、これらの値をクラウド環境に固有の値に置き換えます。
Oracle Cloud Infrastructure GPUに安定した拡散Automatic1111をデプロイ
進化し続ける人工知能(AI)と機械学習(ML)の状況において、研究者やエンジニアは、常に可能な限界を押し広げています。近年勢いを増している顕著な発展の一つは、安定した拡散モデルである。この最先端テクノロジは、大きなメリットをもたらし、幅広いユース・ケースを約束し、エキサイティングな開発を続けています。このチュートリアルでは、Stable Diffusion AI/MLモデルの世界を掘り下げ、そのメリットを調査し、ユースケースを調査し、この魅力的な分野の最新の動向について説明します。
イントロダクション
安定した拡散: 安定した拡散は、AIとMLの世界において比較的新しく革新的なアプローチです。これは確率的な生成モデルであり、高品質のデータ・サンプルを生成する能力と様々なトレーニング条件に対する堅牢性により顕著になりました。安定した拡散モデルは、しばしば拡散プロセスに基づいて、制御されたデータの生成と操作を可能にします。主要なコンポーネントの概要を次に示します。
拡散プロセス: 安定した拡散モデルのコア・アイデアは拡散プロセスであり、時間の経過に伴うデータ分散の進化をモデル化します。目的の分布に収束するまで、データにノイズ処理を繰り返し適用します。
Denoising Autoencoder: 拡散プロセスでは、ノイズのあるサンプルから元のデータをリカバリするために、ノイズのあるオートエンコーダが使用されます。このプロセスは、モデルがデータの意味のある機能を学習および取得するのに役立ちます。
目標
Automatic1111 Stable Diffusionは、AIによって生成されたイメージの分野で画期的なツールです。この革新的なWebUIは、AIによって生成されたイメージを作成する状況を再構築する、ユーザーフレンドリなプラットフォームを提供します。これにより、ユーザーはイメージ生成専用のAIモデルをシームレスに操作および監視できます。Automatic1111とその前提条件をデプロイして、Oracle Linux 8でお気に入りの安定した拡散モデルを推測します。
前提条件
-
A10 GPU制限を持つOracle Cloud Infrastructure (OCI)テナンシ。少なくとも1つのA10が必要です。
-
少なくとも1つのパブリック・サブネットとパブリックIPの制限を持つ既存のOCI Virtual Cloud Network (VCN)。
-
お気に入りのHuggingface Creatorからの安定した拡散モデルチェックポイント。モデルをv1-5およびv2-1に制限します。安定した拡散XLは、単一のA10 GPUにロードすることが困難です。「安定した拡散モデル- ハギング・フェイス」を参照してください。
タスク1: OCIでのGPUコンピュート・インスタンスのプロビジョニング
-
パブリック・サブネットを持つ既存のVCNを使用して、OCIでコンピュート・インスタンスを起動します。詳細は、コンピュート・インスタンスの起動を参照してください。
-
使用可能なGPU.A10シェイプから、単一のA10 GPUインスタンスを選択します。
VM.GPU.A10.1
-
コンピュート・インスタンスを起動するときに、シェイプを前述のシェイプのいずれかに変更します。GPU.A10 VMを起動するには、「専門および前世代」をクリックし、「VM.GPU.A10.1」シェイプを選択します。
-
テナンシにGPU.A10のサービス制限が設定されていない場合、これらのシェイプはシェイプ・リストにありません。
-
OCIコンソールでテナンシ制限を確認するには、GPU.A10コンピュート・インスタンスをプロビジョニングするリージョンを設定し、ナビゲーション・メニューを開いて「ガバナンスと管理」をクリックします。
-
「テナンシ管理」で、「制限、割当ておよび使用状況」を選択します。
-
サービスを「Compute」に設定し、「scope」フィールドでいずれかの可用性ドメインを選択し、「resource」フィールドにGPU.A10と入力します。
-
「A10ベースのVMのGPU」および「BMインスタンス」を選択します。
-
-
コンピュート制限は可用性ドメインごとです。リージョンの可用性ドメインのいずれかに制限が設定されているかどうかを確認します。すべての可用性ドメインのサービス制限が0に設定されている場合、「サービス制限の引上げのリクエスト」リンクをクリックし、このリソースに対して制限の引上げリクエストを送信できます。
ノート: 制限、割当ておよび使用状況にアクセスするには、テナンシ管理者グループのメンバーであるか、LimitsAndUsageViewersを読み取るためのポリシーが割り当てられている必要があります。
- 詳細は、サービス制限を参照してください。
-
現在、OCI GPU.A10コンピュート・シェイプは、Oracle Linux、UbuntuおよびRocky Linuxをサポートしています。Windowsは、VMシェイプでのみサポートされています。
ノート: Rocky Linuxは、NVIDIAでは公式にサポートされていません。
-
OCIでコンピュート・インスタンスをプロビジョニングする場合は、標準のOracle Linux 8 OSイメージまたはOracle Linux 8 GPU対応イメージを使用します。標準のOracle Linux OSイメージを使用する場合は、NVIDIA vGPUドライバをインストールする必要があることに注意してください。チュートリアルでは、Oracle Linux 8 GPUイメージを使用します。
-
「Boot Volume」セクションを展開して、ブート・ボリュームを少なくとも250GBに増やし、VPUを「Higher Performance」に増やして適切な読取り/書込みを行い、推論を向上させます。
-
前述のパラメータを使用してインスタンスを起動します。
タスク2: Automatic1111の前提条件のインストール
-
NVIDIAドライバはOracle Linux GPUビルド・イメージに含まれているため、NVIDIA-smiコマンドを実行して、その存在と機能を確認するだけです。これにより、すべてが正しく設定され、GPUドライバが期待どおりに機能するようになります。
-
FileSystemの増加 OCIインスタンスのシステム・メモリーには、デフォルトで46.6GBが付属しています。ブート・ボリュームを300GBに増やしたため、OCIユーティリティから構築されたOCIコマンドでファイル・システムを拡張しましょう。
ブート・ボリュームを300GBに増やした後にOCIインスタンス上のファイル・システムを拡張するには、組込みOCI (Oracle Cloud Infrastructure)コマンドを使用できます。方法は次のとおりです。
-
現在のディスク使用率の確認: ファイル・システムのサイズを変更する前に、現在のディスク使用量を確認して、増加したブート・ボリューム・サイズを反映させることをお薦めします。
df
コマンドは、次の目的で使用できます。df -h
使用可能な領域が新しいブート・ボリューム・サイズ(300GB)と一致することを確認します。
-
ファイル・システムのサイズ変更: OCIユーティリティ・コマンドを使用して、増加したストレージを使用するようにファイル・システムのサイズを変更します。正確なコマンドは、使用している特定のOSおよびファイル・システムによって異なります。次は、Oracle Linux 8で使用されます。
sudo /usr/libexec/oci-growfs
パーティションを拡張していることを確認するように求められたら、「y」と入力します。
-
ファイル・システムの拡張の確認: サイズ変更コマンドを実行した後、ディスク使用量を再度確認して、ファイル・システムが正常に展開されたことを確認します:
df -h
これで、増加したファイル・システム・サイズが反映されます。
これらのステップに従うことで、増加したブート・ボリュームによって提供される追加のストレージ領域を利用するために、OCIインスタンス上のファイル・システムを拡張できるようになります。
-
-
Oracle Linux 8にPython 3.10.6をインストールします。
sudo dnf update -y sudo dnf install curl gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget make -y wget https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tar.xz tar -xf Python-3.10.6.tar.xz cd Python-3.10.6/ ./configure --enable-optimizations make -j 2 nproc sudo make altinstall python3.10 -V
-
これでPython3.10.6がインストールされたので、gitをインストールしてGitリポジトリをクローニングします。
sudo dnf install git
-
Automatic1111をクローニングします。
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
クローン・ディレクトリにrepo stable-diffusion-webuiが必要です。
-
お気に入りの安定した拡散モデルをディレクトリ
stable-diffusion-webui/models/Stable-Diffusion
にダウンロードします。- ここでは、stable-diffusion-v1-5からv1-5-pruned.ckptをダウンロードしました。
-
ファイアウォール・ルールを更新して、ポート7860トラフィックを許可します。
sudo firewall-cmd --list-all # To check existing added ports sudo firewall-cmd --zone=public --permanent --add-port 7860/tcp sudo firewall-cmd --reload sudo firewall-cmd --list-all # Confirm that port has been added.
タスク3: AUTOMATIC1111の実行
-
Python 3.10.6が正常にインストールされ、AUTOMATIC1111ソフトウェアと基本的な安定拡散モデルがダウンロードされ、AUTOMATIC1111を実行して前進する準備ができました。ただし、続行する前に、構成を微調整して、安定した拡散イメージ生成の速度と全体的な品質を最適化します。
-
webui-user.sh
ファイルを編集し、次の調整を行います。このファイルは、stable-diffusion-webui
ディレクトリ内にあります。このスクリプトは、AUTOMATIC1111の引数の構成を担当し、使用可能なパラメータを理解および更新するために重要です。-
パラメータを次のように変更します。
listen
を追加してポート7860でサーバーとして実行し、優先安定拡散拡張をインストールするための拡張アクセスを有効にし、精度をフルに設定します。# Commandline arguments for webui.py, for example: export COMMANDLINE_ARGS="--medvram --opt-split-attention" export COMMANDLINE_ARGS="--listen --enable-insecure-extension-access --precision full --no-half-vae --no-half --theme light"
-
Python3.10が使用されていることを確認します。
# python3 executable python_cmd="python3.10"
-
次のパラメータは、デフォルトのPyTorchのかわりに最新のPyTorch2をインストールします。これは、推論およびイメージの反復速度が優れていることが証明されています。
# install command for torch export TORCH_COMMAND="pip install clean-fid numba numpy torch==2.0.1+cu118 torchvision --force-reinstall --extra-index-url https://download.pytorch.org/whl/cu118"
-
-
構文エラーがないことを確認したら、スクリプトwebui.shを実行します(以前に編集したファイルであるwebui-user.shと混同しないでください)。
bash webui.sh
このプロセスの結果には、AUTOMATIC1111に必要なすべてのパッケージ(最新のPyTorch2を含む)のインストールを含める必要があります。また、重要なモデルをロードし、ポート7860で推論サーバーを起動します。必要に応じて、webui-user.shファイルを変更してポートをカスタマイズできます。
-
前述のように、ポート7860で実行されているサーバーでのデプロイメントが成功したことを確認したら、Stable Diffusionアプリケーションにアクセスします。Webブラウザを開き、
http://<PublicIP>:7860
というアドレスを入力し、"<PublicIP>"
をインスタンスのパブリックIPアドレスに置き換えます。
これを実行すると、アプリケーションがロードされ、次に示すように表示されます。目的のモデルは、強調表示されている右上隅に便利です。
タスク4: サービス・マネージャsystemctlによるAUTOMATIC1111のデプロイ
-
パス
/etc/systemd/system
にファイルstable-diffusion.service
を作成し、ファイルstable-diffusion.service
に次のように入力します。[Unit] Description=systemd service start stable-diffusion [Service] WorkingDirectory=/home/opc/stable-diffusion-webui ExecStart=bash webui.sh User=opc [Install] WantedBy=multi-user.target
-
作業ディレクトリを必ず必要に応じて変更してください。
-
次のコマンドを実行して、サービスをリロードおよび有効化/起動します。
sudo systemctl daemon-reload sudo systemctl enable stable-diffusion.service sudo systemctl start stable-diffusion.service
-
次のコマンドを実行して、サービスのステータスを確認します。
sudo systemctl start stable-diffusion.service
知識と改善点
- 安定した拡散モデルは、v1.1、v1.2、v1.3、v1.4、v1.5、v2.0、v2.1、vSDXLなど、さまざまなサイズとバージョンで提供されています。これらのバージョンは、その機能と実行できる内容の昇順で一覧表示されます。たとえば、すべてのv1モデルは、ネイティブの512x512イメージを生成できます。v2は、完全な精度を必要とせずに、ネイティブに768x768イメージを生成できます。v1モデルのファイル・サイズは、通常、チェックポイント・モデルごとに6から8GBの範囲内ですが、v2モデルのファイル・サイズは、チェックポイント・モデルごとに5.5GB程度になる傾向があります。
モデル・ロード
-
マルチギガバイト・モデルは実行開始時にGPU VRAMにロードされ、多数のCUDAコアは毎秒数百回処理します。関係するデータ転送速度は、物理法則で定義された絶対制限で動作しています。グラフィックスカード内では、電気信号が光の速度でチップを横断するために必要な時間などの要因は過小評価されません。
-
GPUは一連の計算を処理し、CPUに信号を送って処理のためのより多くのデータを提供します。その後、CPUがシステム・メモリーにアクセスして別のデータ・バッチを取得し、PCI-Eを介してGPUに送信するまで待機します。GPUにデータがある場合、GPUはデータを処理し、CPUに再度信号を送り、別の待機フェーズに入ります。
-
そのため、VRAMはAIタスクにおいて重要な役割を果たします。操作の開始時に必要なすべてのデータと指示をグラフィックスカードにプリロードでき、そのブレージングな内部速度で処理でき、結論で結果を収集するだけで、待機時間を大幅に短縮し、無駄なリソースを最小限に抑えることができます。
-
ユースケースでは、24GBのRAMを搭載したNVIDIA A10 GPUを誇るVM.GPU.A10.1を使用しています。単一のNVIDIA A10 GPUは、v1.5の円滑な動作には十分ではありません。ただし、プロンプトの複雑さが増すにつれ、生成時間が長くなり、反復速度が低下します。v2 Stable Diffusionモデルには、元のサイズのv2モデルよりも迅速かつスムーズに操作を実行できるプルーニング・バージョンがあります。これは、主に領域要件が減少するためです。Stable Diffusionモデルのすべてのバージョンは、単一のNVIDIA A10 24 GB GPU内に収容できますが、反復およびイメージ生成時間のペースは、特定のモデル、そのサイズ、迅速な複雑さ、サンプリング・ステップ、イメージ・ディメンション、高解像度の調整、バッチ・サイズなど、様々な要因に左右されます。
-
今後のチュートリアルでは、モデルをパーティション化し、複数のGPUに分散し、単一のマシン内で複数のGPUを使用して安定した拡散を実行する方法を学習します。また、既存のStable Diffusionベース モデルを微調整することもできます。
関連リンク
承認
著者 - Abhiram Ampabathina (シニア・クラウド・アーキテクト)
その他の学習リソース
docs.oracle.com/learnの他のラボをご覧いただくか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。
製品ドキュメントについては、Oracle Help Centerを参照してください。
Deploy Stable Diffusion Automatic1111 on Oracle Cloud Infrastructure GPUs
F87725-01
October 2023
Copyright © 2023, Oracle and/or its affiliates.