NVIDIAがなんぼのもんじゃい!Stable Diffusion Web UIを非CUDAのオンプレミス環境でやってみよう!

話題が出て大分時間が経ちましたが、今回は画像生成AIのお話です。ネタ自体はネットに色々転がってはいますが、実際にやってみると思った以上に簡単に環境が作れることがわかったので、構築までの手順と、自分の経験談も踏まえて、語っていきたいと思います。

成果

最初に、今回作成できた成果を3点掲載します。この手順通り実施することで、自分の環境で好きなように画像を生成することができるようになりました。

こんなの個人でサクサクかけちゃうんだから、絵師さんたちもたまったもんじゃないですよね・・・。

  • Model「Chillout Mix」DPM++ SDE Kerras

  • Model「Anything v5」DPM++ 2M Kerras

  • Model「realizm engine」Euler a

環境構築手順

今回は、以下2種類で実施するための手順をアウトプットしようと思います。

  1. WindowsNVIDIA
  2. MacBook Air 2020(M1)

以前はCUDA搭載のNVIDIAグラボか、Google Colaboratoryの2択だったんですが、Direct Machine Learning (DirectML) という技術によって非CUDAでも、高速環境が作れるとのことで、やってみることにしました。Macはオマケ。

まずはWindowsから。Macはスキップして下に進んでください。

Windows + 非CUDA GPU

Windowsでオンプレミスの自動生成AI環境構築を記載います。

  1. 前提条件

    • 今回、私が実行した環境は以下のとおりです。

    • 以下のソフトウェアはインストールされていることとします。

  2. Stable Diffusion Web UI 環境の取得

    最初に、以下のコマンドを実行してリソース一式をCloneします。

       > git clone https://github.com/lshqqytiger/stable-diffusion-webui-directml
    
  3. バッチを実行

    git実行した環境に、stable-diffusion-webui-directmlディレクトリが出来上がるので、その中にある webui-user.bat ファイルを実行します。

       > cd  stable-diffusion-webui-directml
       > ./webui-user.bat
    

    初回は起動まで少し時間がかかります。私の環境では、約5分程度でした。

    問題なければ、しばらくして、画面に次の行が表示されます。

       :(略)
       Running on local URL:  http://127.0.0.1:7860
       :(略)
    

    ブラウザを起動し、指示されたアドレス http://127.0.0.1:7860 にアクセスしてください。

    以下の画面が表示されれば準備OKです。この画面が「Stable Diffusion Web UI」画面となります。

    なお、実行時にエラー「runtimeerror: could not allocate tensor~」が出る場合は、実行環境でGPUのメモリが不足している可能性があります。

    この場合の対処として、ディレクトリ直下にあるwebui-user.batファイルの内容を編集し、以下の行を追加して保存した後、再実施してみてください。低メモリでも動くようにするおまじないです。

    <webui-user.bat>

     @echo off
    
      set PYTHON=
      set GIT=
      set VENV_DIR=
    
      # ↓ここを追加
      set COMMANDLINE_ARGS=--lowvram --always-batch-cond-uncond --opt-split-attention
    
      call webui.bat
    

Mac Book(M1)

MacBookでオンプレミスの自動生成AI環境構築を記載います。

  1. 前提条件

    • 今回、私が実行した環境は以下のとおりです。

    • 以下のソフトウェアはインストールされていることとします。

  2. 必要なソフトウェアをインストール

    ターミナルで以下を実行して必要なソフトウェアをインストールします。

     $ brew install cmake protobuf rust python@3.10 git wget
    
  3. Stable Diffusion を GitHubから取得する。

    ターミナルを開き、任意のディレクトリに移動してから、Githubからダウンロードします。以下のコマンドを実行してください。

     $ git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
    
  4. 起動Shellを実行

    git実行した環境に、stable-diffusion-webui ディレクトリが出来上がるので、その中にある webui.sh ファイルを実行します。

       $ cd  stable-diffusion-webui
       $ ./webui.sh
    

    初回は起動まで少し時間がかかります。私の環境では、約5分程度でした。

    問題なければ、しばらくして、画面に次の行が表示されます。

       :(略)
       Running on local URL:  http://127.0.0.1:7860
       :(略)
    

    ブラウザを起動し、指示されたアドレス http://127.0.0.1:7860 にアクセスしてください。

    以下の画面が表示されれば準備OKです。この画面が「Stable Diffusion Web UI」画面となります。

Modelデータを入手

環境が無事起動したのであれば、次に画像生成するためのモデルを入手します。

画像自動生成の成否・得意分野は、使用するモデルデータに依存しているため、生成したい画像に合わせてモデルデータを選定して取得する必要があります。

Stable Diffusionが使用できるモデルデータは、次の2つのサイトからダウンロードできます。

  • Hugging face に掲載されているので、こちらから取得します。

  • CIVIT AIという中国のサイトから入手します。

Modelデータはいずれも、一つにつき数G〜十数Gバイトに及びます。色々試したい場合は、30〜50Gバイト程度必要になるので、容量を確保しておいて下さい(NVIDIAのグラボを買うことを思えば、ここでSSDの増設でもした方が、ずっと安上がりですね^^)

①Hugging Face

  1. モデルデータを入手してきます。

    • Hugging face のサイトにアクセスします。
      Modelごとにパネルが表示されていますので、気に入った絵をクリックします。

    • 画面左側の、Multimodel - Text-to-Imageをクリックします。

    • 右に一覧された内容から、任意のモデルを選びます。今回は、主流であるstable-diffusion-v1.5を選びます。

②CIVIT AI

  1. モデルデータを入手してきます。

    • CIVIT AI のサイトにアクセスします。

    • ページ上部にある、Modelsをクリックします。

    • 画面右上の、「↓ Download」ボタンをクリックします。

Modelデータの使用方法

  1. ダウンロードしたファイルを、構築した環境の、/models/Stabel-diffusion ディレクトリに移動します。

  2. Stable diffusionを再起動させます。

    キーボードで Ctrl + C を押してバッチ処理を中止し、再度 webui-user.batMacの場合は、webui.sh) ファイルを実行します。

  3. サービスが開始されたら、ブラウザでWebページにアクセスします。

画像生成を実行する

細かいことはさておき、一旦、さくっと実行してみましょう。

  1. 画面左上にある、「Stable Diffusion checkpoint」のドロップダウンリストを開きます。さきほど格納したモデルが表示されますので、それを選択します。

  2. 画面左上にある2つのテキスト欄が「プロンプト(呪文)」と呼ばれる、画像生成のためのキーワード欄になっています。こちらにテキストを入れて、Generate ボタンをクリックします。

    • 上が「プロンプト」で、生成したい画像の特徴を入れます。
    • 下が「ネガティブ・プロンプト」といい、生成させたくない特徴を入れます。

  3. 今回は、私の方で用意した、以下のプロンプトを設定して、生成してみましょう。

    • プロンプト(下を簡潔に訳すと「日本のアイドル女優を、高精細で書いて」)

      best quality, RAW photo, smiley, realistic, girl, long hair, wavy hair, Cherry blossom, Japanese idle (Japanese actress), cute clothes, looking at viewer, Upper body,

    • ネガティブ・プロンプト(「粗悪で低画質なものはヤメて」)

      EasyNegative, paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality

  4. 私の方では次のような結果となりましたが、いかがでしたでしょうか?

実際には、この結果に対して、Web UIのパラメタを細かく調整していくことで、自分の希望する画像を作っていきます。パラメタについては、別途解説されているページがネット上にありますので、そちらを参考にしてください。

プロンプトの分析

上で使用した呪文を翻しました。

  • プロンプト「最高品質、RAW写真、スマイリー、リアル、女の子、長い髪、ウェーブのかかった髪、桜、日本のアイドル(日本の女優)、かわいい服、視聴者を見て、上半身」

  • ネガティブ・プロンプト「単純で粗悪、絵画、スケッチ、(最低品質:2)、(低品質:2)、(標準品質:2)、低解像度、標準品質」

こう見てみると、そんなに難しいことは書いてないようですよね。ネガティブの方も、画質について否定的なイメージを並べているだけで、具体性のあるポイントは特に書いてません。

Modelsによる違い

上記と同じプロンプトを使って、5つのModelsを試してみました。

左から、以下のモデルを使用しています。

Model名 特徴 入手元
stable-diffusion-v1.5 stable-diffusion 標準モデルの最新版。
黒目勝ちでチョイこわ。アジア人向けでない?
Hugging face
dreamlike-photoreal-2.0 Stable Diffusion v1.5のファインチューン。
今回描かれたものの中では一番バランスがいい気がしますね。
Hugging face
ChillOutMIX アジア人美女をリアルに書かせることに定評あり。
キレイに違いないんだけど…なんていうか…〇〇方面に需要がありそう
CIVIT AI
Anything v5 簡単なプロンプトでアニメ絵が描けると評判。
これは確かにキレイ。アニメーターいらずになりそう…。
CIVIT AI
Realizm Engine 風景画や静物画などを書かせると抜群らしい。
人間は苦手なのかな?表情が引きつってて、ちょっと怖い。
CIVIT AI

同じ呪文でも、全然作られ方が違うんですね。。。 「Anything v5」のアニメ調を除くと、2番目の「dreamlike-photoreal-2.0」が一番きれいといえるんじゃないでしょうか。

パフォーマンスについて

私の環境の場合、デフォルトのサイズ(512 x 512)とパラメタを指定した状態で、画像が作成されるまでの時間は、次のようになりました。

データ 環境1.
Windows + Radeon RX570
環境2
.MacBook Air 2020 M1
Data1 52秒 48秒
Data2 62秒 51秒
Data3 58秒 55秒

たまたまかもしれませんが、二つの環境にあまり時間差はなかったですね。Mac Book Airの自力を見た気がします。

Youtube等の記事を見ていると、NIVIDAのグラボ RTX4070 を使用した場合、これが5〜6秒でできるそうです。流石に早いですがやはりグラボは高価ですし、用途によっては、上の応答時間でも十分使えますよね。

プロンプトの調整

ここまでできたら、あとは実際にプロンプトや画面のパラメタを調整していって、AIに作成する画像の変更を指示します。Stable Diffusion Web UIのパラメタの詳細については、他のサイトを参考にしてみて下さい。

参考:Stable Diffusion WebUIの使い方を解説していくよ【超入門編】

感想

いかがでしょうか。思っていた以上に、簡単に動画生成AIの環境ができました。

しかも、Modelデータは日々新しいものが出来上がっていくため、用途によって色々使い分けることで、自環境で自由に画像を作ることができました。