挨拶
初めまして、日本システム開発株式会社の鈴木です。
技術者として更なる向上を目指すためQiitaアウトプットをする取り組みを行っています。
技術者としては経験が浅く発信内容はとにかく試したものの覚書になります。
本稿はロースペックPCでStableDiffusionを導入してみた際の手順です。
環境(マシンスペック)
OS: Windows 10
CPU: Ryzen 5 3500U
GPU: AMD Radeon Vega8 Graphics VRAM 2GB(オンボード)
メモリー: 8GB
Python : 3.9.13
diffusers : 0.2.4
torch : 1.12.1
transformers : 4.21.2
目的
StableDiffusionの資料を探しているとCUDAを使用した環境の構築が多いものの一応動作させること自体はCUDAなしでもできそうだったためその環境を構築してみます。
Python仮想環境設定
今回は実用的な速度にならないことが予想できていたため後から削除しやすいよう専用の仮想環境を用意します。
python -m venv (作業用フォルダのパス)\stbl_dffsn
(作業用フォルダのパス)\stbl_dffsn\Scripts\activate
環境構築
GitHubのCompVis/stable-diffusionページにて以下の様に紹介されている方法で導入を目指します。
simple way to download and sample Stable Diffusion is by using the diffusers library:
というわけでDiffuser経由でStableDiffusionを動作させること目指します。まず動作に必要なDiffuserに必要なPytorch、Transformersを導入します。
Pytorch
Pytorch公式ページのインストール補助ツールを用いてCPU版のPytorchをpipで導入します。
ちなみに筆者は一度ここでPythonのバージョンによるエラーが発生していました(Python 3.8.1では導入不可)
Transformers
必須ではないかもしれませんが私の環境では導入したPytorchを動作させた際にTransformersを要求されたため追加で導入します。
pip install transformers
Diffusers
Diffusersもpipでインストールします。
pip install diffusers
モデルの入手
この段階で動作に必要な環境は整いましたがStableDiffusionのモデルを利用するためにはHugging Faceのアカウントを作成しトークンを取得する必要があります。トークンの取得はアカウントにログインした状態でモデルのページにアクセスし利用規約に同意することで取得できます。ここで取得したトークンはヘッダーの右上にあるアカウント情報>Setting>Access Tokensからも確認することができます。
実装
環境構築章で触れたサンプルコードを一部改変し以下の様に実装しました。
from torch import autocast
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained(
"CompVis/stable-diffusion-v1-4",
use_auth_token="ここにアクセストークンを記載"
)
prompt = "a photo of an astronaut riding a horse on mars"
with autocast("cuda"):
image = pipe(prompt)["sample"][0]
image.save("astronaut_rides_horse.png")
生成する画像を指示しているのはpromptに代入しているa photo of an astronaut riding a horse on mars(火星で馬に乗っている宇宙飛行士の写真)になります。
実行中以下のようなエラーが出ますが動作自体には問題ありませんでした。
warnings.warn('User provided device_type of \'cuda\', but CUDA is not available. Disabling')
最後に以下のようなメッセージと共にastronaut_rides_horse.pngが生成されました。
51it [43:23, 51.04s/it]
確かに火星で馬に乗っている宇宙飛行士の写真のようです。とはいえ出力からわかる通り43分23秒かかってしまいました。一応他のソフトウェアなどは起動せずCPU使用率も常時100%に近い状態を保っていましたがやはりかなり時間はかかってしまいます。
きちんとGPUを使用した方が実用的でしょう。