ディープ ラーニング ワークフローの最適化: WSL 2 での安定した拡散と Docker の活用

ディープラーニングは、機械が人間のような創造性を模倣するコンテンツを学習および生成できるようにすることで、人工知能(AI)の分野に革命をもたらしました。 この分野での進歩の1つは、2022年にリリースされたテキストから画像へのモデルである 安定した拡散です。 

Stable Diffionは、テキストの説明を条件とした非常に詳細な画像を生成する能力で大きな注目を集めており、それによって創造的なデザイン、視覚的なストーリーテリング、コンテンツ生成などの分野で新しい可能性を開きます。 オープンソースの性質とアクセシビリティを備えたStable Diffionは、ディープラーニングの力を活用しようとしている多くの研究者や開発者にとって頼りになるツールになっています。 

この記事では、 WSL 2 で Docker と共に安定した拡散を活用してディープ ラーニング ワークフローを最適化し、この最先端テクノロジを使用したシームレスで効率的な実験を可能にする方法について説明します。

濃い紫色の背景に、左下隅にDockerロゴ、中央にペイントパレット

この包括的なガイドでは、WSL 2の有効化とDocker デスクトップ のインストールを含む、 安定した拡散WebUI Docker のセットアッププロセスについて説明します。必要なコードを GitHub からダウンロードし、 Docker Compose を使用して初期化する方法を学習します。 

このガイドでは、モデルの追加とシステムの管理について説明し、UI の再読み込みや画像出力の保存に最適な場所の決定などの重要なタスクについて説明します。 ハードウェアとGPUの使用状況を監視するためのトラブルシューティング手順とヒントも含まれており、 安定した拡散WebUI をスムーズかつ効率的に体験できます(図1)。

5つの異なる猫の画像を示す安定した拡散webuiのスクリーンショット。
図1: 安定した拡散ウェブUI。

安定した普及のためにDockerデスクトップを使用する理由

画像ベースのジェネレーティブAIの分野では、Windows PC上で効果的な実行および開発環境をセットアップすることは、特定の課題を提示する可能性があります。 これらの課題は、ソフトウェアの依存関係の違い、互換性の問題、および特殊なツールとフレームワークの必要性が原因で発生します。 Docker Desktopは、異なるシステム間で一貫性と再現性を保証するコンテナ化プラットフォームを提供することにより、これらの課題に取り組むための強力なソリューションとして浮上しています。

Docker Desktop を活用することで、画像ベースのジェネレーティブ AI ワークフローに必要なすべてのコンポーネントと依存関係をカプセル化した分離された環境を作成できます。 このアプローチにより、手動によるソフトウェアのインストール、競合するライブラリバージョン、およびシステム固有の構成に関連する複雑さが解消されます。

安定した拡散 WebUI の使用

安定拡散WebUIは、Gradioライブラリ上に構築されたブラウザインターフェイスであり、 安定拡散 と対話して機能を探索するための便利な方法を提供します。 Gradioは、機械学習モデル用のインタラクティブなインターフェイスを作成するプロセスを簡素化する強力なPythonライブラリです。

安定版拡散 WebUI 環境のセットアップは、面倒で時間のかかるプロセスであり、環境構築には複数のステップが必要です。 ただし、便利なソリューションは、 安定した拡散WebUI Dockerプロジェクト の形で利用できます。 この Docker イメージでは、事前構成された環境が提供されるため、手動セットアップが不要になります。

Windows を使用していて、Docker デスクトップがインストールされている場合は、コマンドを使用して環境 docker-compose を簡単に構築して実行できます。 すべてがコンテナ内にカプセル化されるため、ライブラリや依存関係を事前に準備することを心配する必要はありません。

コンテナなので問題があるのか 疑問に思うかもしれません。 使い始める前は不安でしたが、今のところ特に困ったことはありません。 生成された画像、モデル、変分オートエンコーダー(VAE)、およびその他のデータはWindowsマシンと共有(バインドマウント)されるため、エクスプローラーまたはDockerデスクトップのターゲットコンテナに Files ドラッグするだけでファイルを交換できます。 

一番困ったのは、拡張機能をバックアップせずに無効にしてしまい、半日かけてトレーニングしていた約50GBのデータを一瞬で吹き飛ばしてしまったことです。 (これは冗談です!

建築

WindowsでDockerデスクトップを使用して安定した拡散を開始するための比較的簡単な手順をまとめました。 

前提 条件:

  • ウィンドウズ 10 プロ, 21H2 ビルド 19044.2846
  • 16ギガバイトのメモリ
  • NVIDIA GeForce RTX 2060 SUPER
  • WSL 2 (Ubuntu)
  • ドッカーデスクトップ 4.18.0 (104112)

Docker Compose を使用したセットアップ

今回はAUTOMATIC1111というWebUIを使って安定拡散を利用します。 これらの環境は、Docker Compose を使用して構築されます。 主なコンポーネントを図2に示します。

automina 1111 を使用した実行環境を、ホスト、ポートマッピング、Docker イメージ、バインドマウント情報などに示す図。
図2: Docker Compose を使用して構築された構成。

Docker Compose の構成は、 docker-compose.ymlで定義されています。 ここでは、各サービスに共通する主要なコンポーネントを記述するために呼び出され x-base_service る Compose 拡張機能を使用しています。

まず、ホストとコンテナの間には bind mount 、モードをロードする、イメージを /output出力するなど、 /data設定があります。次に、NVIDIAドライバーをロードして、コンテナにGPUを認識させます。

さらに、という名前の sd-auto:58 サービスは、コンテナ内でAUTOMATIC1111、安定した拡散のためのWebUIを実行します。 ポートマッピング(TCP:7860)があるため、前述の共通サービス設定でホストとコンテナの間には、ホスト側のブラウザからコンテナ内部へのアクセスが可能です。

始める

前提

WSL 2 をライセンス認証し、Docker デスクトップをインストールする必要があります。

最初の実行時に、12GBの安定拡散1.5モデルなどをダウンロードします。 このダウンロードが完了するまで、Web UI は使用できません。 接続によっては、最初の起動までに時間がかかる場合があります。

コードのダウンロード

まず、 GitHub から Stable Diffusion WebUI Docker コードをダウンロードします 。 ZIPとしてダウンロードする場合は、[ コード]>[ダウンロードZIP] をクリックすると、 stable-diffusion-webui-docker-master.zip ファイルがダウンロードされます(図3)。 

ファイルを便利な場所に解凍します。 展開すると、という名前の stable-diffusion-webui-docker-masterフォルダが見つかります。 コマンドラインなどを開き、 docker compose その中でコマンドを実行します。

githubからzipファイルとしてダウンロードされている安定した拡散webuiドッカーを示すスクリーンショット。
図3: リポジトリから Docker Compose の構成をダウンロードします。

または、Git for Windows など、Git を使用できる環境がある場合は、次のようにダウンロードする方が高速です。

git clone https://github.com/AbdBarho/stable-diffusion-webui-docker.git

この場合、フォルダ名は stable-diffusion-webui-dockerです。 で cd stable-diffusion-webui-docker移動します。

Docker に精通しているユーザー向けの補足情報

開始するだけの場合は、このセクションをスキップできます。

既定では、タイム ゾーンは UTC です。 ログに表示される時刻と生成された output/txt2img ディレクトリの日付を日本時間に調整するには、サービスの環境変数 auto に追加します TZ=Asia/Tokyo 。具体的には、 に environment:次の説明を追加します。

auto: &automatic
    <<: *base_service
    profiles: ["auto"]
    build: ./services/AUTOMATIC1111
    image: sd-auto:51
    environment:
      - CLI_ARGS=--allow-code --medvram --xformers --enable-insecure-extension-access --api
      - TZ=Asia/Tokyo

初回起動時のタスク

残りのプロセスは、 GitHub のドキュメントで説明されているとおりです。 コードが展開されているフォルダー内で、次のコマンドを実行します。

docker compose --profile download up --build

コマンドの実行後、という名前の webui-docker-download-1 コンテナのログが画面に表示されます。 しばらくの間、ダウンロードは次のように実行されますので、完了するまで待ちます。

webui-docker-download-1  | [DL:256KiB][#4561e1 1.4GiB/3.9GiB(36%)][#42c377 1.4GiB/3.9GiB(37%)]

プロセスが正常に終了すると、次のように表示され exited with code 0 、元のプロンプトに戻ります。

…(snip)
webui-docker-download-1  | https://github.com/xinntao/Real-ESRGAN/blob/master/LICENSE 
webui-docker-download-1  | https://github.com/xinntao/ESRGAN/blob/master/LICENSE 
webui-docker-download-1  | https://github.com/cszn/SCUNet/blob/main/LICENSE 
webui-docker-download-1 exited with code 0

0以外のコードが次のように出力された場合、ダウンロードプロセスは失敗しています。

webui-docker-download-1  | 42c377|OK  |   426KiB/s|/data/StableDiffusion/sd-v1-5-inpainting.ckpt 
webui-docker-download-1  | 
webui-docker-download-1  | Status Legend: 
webui-docker-download-1  | (OK):download completed.(ERR):error occurred. 
webui-docker-download-1  | 
webui-docker-download-1  | aria2 will resume download if the transfer is restarted. 
webui-docker-download-1  | If there are any errors, then see the log file. See '-l' option in help/m 
an page for details. 
webui-docker-download-1 exited with code 24

この場合、コマンドを再度実行し、正常に終了するかどうかを確認してください。 正常に終了したら、コマンドを実行してWebUIを起動します。 

手記: 以下は、AUTOMATIC1111 の UI と GPU の仕様に関するものです。

docker compose --profile auto up --build

コマンドを実行すると、最初の起動時にモデルの読み込みに数分かかる場合があります。 次の表示のようにフリーズしているように見えるかもしれませんが、それは問題ありません。

webui-docker-auto-1  | LatentDiffusion: Running in eps-prediction mode
webui-docker-auto-1  | DiffusionWrapper has 859.52 M params.

しばらく待つとログが流れ、以下のURLが表示されます。

webui-docker-auto-1  | Running on local URL:  http://0.0.0.0:7860

これで、Web UI の起動準備が設定されました。 ブラウザーから http://127.0.0.1:7860 を開くと、Web UI が表示されます。 開いたら、画面の左上から適切なモデルを選択し、テキストフィールドにテキストを入力し、[ 生成 ]ボタンを選択して画像の生成を開始します(図4)。

テキスト入力と画像を作成するための大きなオレンジ色の「生成」ボタンを示すスクリーンショット。
図4: モデルを選択したら、プロンプトを入力して画像を生成します。

クリックすると、ボタンが反転します。 プロセスが終了するまで待ちます(図5)。

灰色の「割り込み」ボタンと「スキップ」ボタンのスクリーンショット。
図5: 画像が生成されるまで待機しています。

このとき、操作している端末にイメージ生成のログが表示されており、Docker Desktop上のコンテナのログを見て同様の表示を確認することもできます(図6)。

100% の完了を示す進行状況ログのスクリーンショット。
図6: 100%は、画像の生成が完了したことを示します。

ステータスが100%になると画像の生成が終了し、画面で確認できます(図7)。

輝く紫色の背景に灰色と白の猫の画像を持つテキスト入力として「スペースキャット」を示す安定した拡散webuiのスクリーンショット。
図7: プロンプトに「Space Cat」と入力すると、画面右下に猫の画像が生成されました。

作成された画像は、 output/txt2img/date コマンドを実行した docker compose ディレクトリの直下のフォルダーに自動的に保存されます。

起動したWebUIを停止するには、まだ docker compose コマンドを実行している端末に入力します Ctrl+C

Gracefully stopping... (press Ctrl+C again to force)
Aborting on container exit...
[+] Running 1/1
 ? Container webui-docker-auto-1  Stopped                                                     11.4s
canceled

プロセスが正常に終了すると、コマンドを再度実行できるようになります。 再起動後に WebUI を再度使用するには、次のコマンドを再実行します docker compose

docker compose --profile auto up --build

動作中のハードウェアの状態を確認するには、タスク マネージャを使用して GPU の状態を確認します (図 8)。

GPUステータスを示すWindowsタスクマネージャのスクリーンショット。
図8: Windowsタスクマネージャの[パフォーマンス]タブから、GPUでのCUDAおよび同様のタスクの処理を監視できます。

GPU がコンテナー内から見えるかどうか、および情報が出力されるかどうかを確認するには、 nvidia-smi または Docker Desktop ターミナルから docker exec コマンドを実行します。

root@e37fcc5a5810:/stable-diffusion-webui# nvidia-smi 
Mon Apr 17 07:42:27 2023 
+---------------------------------------------------------------------------------------+ 
| NVIDIA-SMI 530.41.03              Driver Version: 531.41       CUDA Version: 12.1     | 
|-----------------------------------------+----------------------+----------------------+ 
| GPU  Name                  Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC | 
| Fan  Temp  Perf            Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. | 
|                                         |                      |               MIG M. | 
|=========================================+======================+======================| 
|   0  NVIDIA GeForce RTX 2060 S...    On | 00000000:01:00.0  On |                  N/A | 
| 42%   40C    P8                6W / 175W|   2558MiB /  8192MiB |      2%      Default | 
|                                         |                      |                  N/A | 
+-----------------------------------------+----------------------+----------------------+ 
+---------------------------------------------------------------------------------------+ 
| Processes:                                                                            | 
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory | 
|        ID   ID                                                             Usage      | 
|=======================================================================================| 
|    0   N/A  N/A       149      C   /python3.10                               N/A      | 
+---------------------------------------------------------------------------------------+

モデルと VAE の追加

最初から含まれていないモデルをダウンロードする場合は、 などの stable-diffusion-webui-docker\data\StableDiffusion 拡張子を持つファイルを配置します .safetensors。VAEの場合は、 .skpt ファイル。 stable-diffusion-webui-docker\data\VAE

Docker Desktop を使用している場合は、コンテナーの webui-docker-auto-1 [ファイル ] を表示して操作できるため、コンテナーを Docker Desktop にドラッグすることもできます。 

図 9 に、Docker デスクトップの画面を示します。 [メモ] 列に MOUNT と表示され、フォルダー内の情報が Windows ホスト側のコンテナーと共有されます。

メモ列の下に青いマウントインジケーターを表示するDockerデスクトップのスクリーンショット。
図9: [メモ] 列から、フォルダーがマウントされているか、変更されたかを確認できます。

これで、ファイルを配置した後、WebUI のフッターに [UI の再読み込み ] へのリンクが表示されるので、そこを選択します (図 10)。

リロードUIオプションを示す安定した拡散webuiのスクリーンショット。
図10: 「UI の再ロード」をクリックすると、WebUI 設定が再ロードされます。

[UI の再読み込み] を選択すると、システムに読み込み画面が表示され、ブラウザーの接続が切断されます。ブラウザを再ロードすると、モデル ファイルと VAE ファイルが自動的にロードされます。 モデルを削除するには、 から data\StableDiffusionモデル ファイルを削除します。

結論

Docker Desktop を使用すると、最新の生成型 AI 環境を使用したイメージ生成がこれまでになく簡単に実行できます。 通常、環境をセットアップするだけで多くの時間と労力が必要ですが、Docker Desktopはこの複雑さを解決します。 興味のある方は、生成型AIの世界に挑戦してみてはいかがでしょうか。楽しむ!

さらに詳しく