特集・集中企画
テキストから画像を生成するAI「Stable Diffusion」をWindowsにインストールしてみた
自宅で好きなだけ画像生成、VRAMが10GB未満のビデオカードでも解決策あり
2022年9月6日 06:55
英Stability AIが発表した画像生成AI「Stable Diffusion」について、デモサイトを使ったレビュー記事を先日執筆した。
デモサイトでも結構遊べて面白いのだが、PCユーザー、特にビデオカードを搭載したゲーマーとしては、どうせならローカル環境で実行してみたい。ただ環境構築にはNVIDIA製GPUと10GB以上のVRAMを搭載したビデオカードに加え、Pythonの知識も前提になっている。
ソースの公開から数日で、他の利用者が様々な環境構築手順をインターネット上で公開している。ただその多くがPythonに関する知識がある前提のものが多く、それゆえ独自のやり方になっているものが多い。またOSがWindowsではないことも多々ある。
筆者にはPythonの知識がほぼなく、ソースが公開されているGitHubも使ったことがない。それでもどうしても試してみたくなり、公式にある情報に極力のっとった形で環境を構築してみた。余計な手順もあるかもしれないが、「この手順でWindows 10上で動かせた」という情報の1つとしてご覧いただければ幸いだ。
Windows 10で「Stable Diffusion」の環境を構築
筆者が「Stable Diffusion」を導入したPCの主なスペックは下記のとおり。Windows 11にできない古めの環境で、なおかつVRAMも8GBしかない。VRAM不足については一旦横に置いて、最後に対応策を紹介する。
- OS:Windows 10 Pro 64bit
- CPU:Core i5-6600
- GPU:GeForce GTX 1080(8GB VRAM)
- メモリ:DDR4-2133 16GB(8GB×2)
では具体的なインストール手順を紹介しよう。「Stable Diffusion」のソースや解説は、GitHubに置かれている。こちらを参照の上、作業を進めていく。
「Anaconda」をインストール
「Anaconda」はPythonの実行環境のこと。「Stable Diffusion」では「conda」コマンドを使った解説があるので、こちらを使う。よりコンパクトな「Miniconda」もあるが、とりあえず動かすという意味で安全策として「Anaconda」を使用している。
利用は無料で、公式サイトからダウンロードできる。Windows用のインストーラーが用意されているので、そちらを利用した。
インストールの際、なぜか途中で何度も止まってしまうように見えるが、10分ほど放っておくと動き出したこともある。いったん根気よく待つとうまくいくかもしれない。
「Anaconda Prompt」を管理者として実行
「Anaconda」のインストールが済むと、スタートメニューに「Anaconda Prompt」が追加される。これを管理者として実行する。「Anaconda Prompt」に管理者権限がないとパーミッションがないと言われたりして諸々の作業が失敗するので、この先もずっと管理者として実行すること。
代わりに「Anaconda Powershell Prompt」を使っても構わないが、こちらも管理者として実行する必要がある。
「git」をインストール
続いて「git」をインストールする。GitHubにあるソースをクローン(ディレクトリ構造などを崩さずダウンロード)するのに使う。「Anaconda Prompt」で、
conda install git
と入力すると、自動的に作業が進む(「Proceed ([y]/n)?」と尋ねられた場合は[Y]→[Enter]キーを押せばよい)。
ちなみに「git」にはWindows版もあるが、作業の手間を考えるとこちらのやり方がおすすめ。
Stable Diffusionをインストールしたい場所に移動
次に「git」で「Stable Diffusion」をクローンするが、その前にインストールしたい場所に移動しておく。例えば、「D:¥abc」の下にインストールしたい場合は、
d:
cd ¥abc
と入力して移動する。
GitHubから「Stable Diffusion」をクローン
続いて「git」で「Stable Diffusion」をクローンする。
git clone https://github.com/CompVis/stable-diffusion.git
とすると、先程移動したフォルダーの下に「stable-diffusion」というフォルダーが作られ、その中にソースがダウンロードされる。
「Stable Diffusion」についている「environment.yaml」で環境を作る
次は「Stable Diffusion」の実行に必要な環境を作る。1つ1つ要るものを入れていると大変だが、ありがたいことに先程クローンした中に「environment.yaml」というファイルがあり、これを使うことで必要なソフトウェア環境が自動で整えられる。
cd stable-diffusion
として「stable-diffusion」のフォルダーに入り、
conda env create -f environment.yaml
と入力。これで自動的に必要な環境が作られる。終わったら最後に、
conda activate ldm
と入力。これで「Stable Diffusion」の実行環境が整う。
「Hugging Face」の学習データをダウンロードする
もう1つ重要なのが、AIが使う学習データの用意。これだけは別口で用意されており、「Hugging Face」というWebサイトからダウンロードが必要になる。
「Hugging Face」のWebサイトにアクセスし、下の方にある「Access Repository」のボタンをクリックする。この際にアカウント登録が必要になる。
アカウントの手続きが終わると、「sd-v1-4.ckpt」という約4GBのファイルがダウンロードできる。
学習データのファイルを適切な場所に置く
ダウンロードした学習データは、適切な場所に置く必要がある。「¥stable-diffusion」フォルダー内に、「¥models¥ldm¥stable-diffusion-v1」のフォルダーを作成する。「¥stable-diffusion¥models¥ldm」までは既にあるはずなので、その下に「¥stable-diffusion-v1」を作る形だ。フォルダー作成はWindowsのエクスプローラーからでも構わない。
次に「sd-v1-4.ckpt」を、先程作成した「stable-diffusion-v1」にコピー。さらにファイル名を「sd-v1-4.ckpt」から「model.ckpt」に変更する。
これで「Stable Diffusion」の実行環境の構築は完了だ。他のやり方として、「Hugging Face」のWebサイトでアクセストークンを取得する手順もあるのだが、筆者の環境ではアクセストークンの認証スクリプトでどうしても入力を受け付けてくれない問題があり諦めた。こちらの手順であればアクセストークンは必要なく、学習データのダウンロードだけで済む。
サンプルコマンドを使って実行してみる
では実際に「Stable Diffusion」を使ってみよう。上記の手順では、付属のサンプルスクリプトを使って実行できるようになっている。
python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms
うまく実行できると、「¥stable-diffusion¥outputs¥txt2img-samples」の中に画像が作られる。上記のコマンドであれば、馬に乗った宇宙飛行士の写真のような画像が生成されるはずだ。
別の画像を描かせたければ、コマンド内にある「--prompt "a photograph of an astronaut riding a horse"」のダブルクォーテーション内のキーワードを変更すればいい。日本語でも何となくは理解してくれているが、英語の方が確実なので、翻訳ツールを使うなどして入力するといいだろう。
今回実行している「txt2img.py」というスクリプトには、他にもオプションがある。例えば「--n_samples 10」とすると、同じキーワードで10枚の画像を生成できる。
なお「Anaconda Prompt」のウインドウを閉じて、再び「Stable Diffusion」を利用したい場合は、改めて、
conda activate ldm
を実行する必要がある。
VRAMが10GB未満の環境でも実行する方法
最初に述べたとおり、筆者のPVにはVRAMが8GBしか搭載されておらず、上記のスクリプトを実行するとVRAM不足でエラーを吐いて実行できない。いくつか対処方法はあるのだが、最も手っ取り早いのは出力画像サイズを小さくしてしまうこと。
python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms --W 384 --H 256
「--W 384」は幅384ドット、「--H 256」は高さ256ドットの指定となる。64の倍数で指定するらしい。特に指定しない場合は512×512ドットで出力されるので、結構小さくはなってしまう。いろいろ試した結果、筆者の環境はこれで実行できる(これ以上のサイズにはできない)。
またスクリプトを一部書き換えることで、メモリの使用量を減らす手もある。これは公式の手順ではないので参考程度だが、「¥scripts」にある「txt2img.py」をテキストエディタ等で開いて、239行目の
config = OmegaConf.load(f"{opt.config}")
model = load_model_from_config(config, f"{opt.ckpt}")
に続く行に下記を追加する。
model = model.to(torch.float16)
これで画像サイズを小さくすることなく、10GB以上のVRAMを搭載した環境と同じように利用できる。
画像をベースにAIが描き直すスクリプトもある
今回はただテキストを入力するだけでAIが絵を描いてくれるスクリプト「txt2img.py」を紹介したが、画像データを入力してテキストで指示をすることで絵を描き直させる「img2img.py」というスクリプトも用意されている。
こちらも使い方は似たようなものだが、元の画像サイズを小さくするだけではうまく動作しなかった。筆者はやむなく、VRAM使用量を少なくした「Stable Diffusion」の改変版をインストールし直した。いよいよ公式の手続きからは外れるので具体的な方法は示さないが、そういう手もあるので興味がある方は調べてみていただきたい。
AIをローカル環境で動かせるのは、PCユーザーとしては未来感があって面白い。今後も新たなAIツールが出てくると思われ、ローカルで実行できるオープンソースのものも増えていくだろう。筆者は絵描きではなく物書きなので、そちらのAIがどうなっているかも興味がある。今後も個人レベルで利用できるものがあれば、可能な限り追いかけていきたい。