初めに私の使っているMACの性能をお伝えします。
MacBook Air (11-inch, Early 2015)
プロセッサ:1.6 GHz デュアルコアIntel Core i5
メモリ:4 GB 1600 MHz DDR3
グラフィックス:Intel HD Graphics 6000 1536 MB
新しいMacを買えよ。というツッコミは置いといてこのMacで流行りのDiffusersを使う際にした紆余曲折を書きたいと思います。
なおこのMacだと文字から1枚の画像を作るだけで数時間かかるので、忙しい人はお勧めしません。(そもそも私と同じように古いMACを使っている人はいるのか?)
また本記事はpoetryを使用しておりますので、pip等を使っている方は置き換えが必要になります。
試したプログラム
公式ドキュメント等を参考に基本的な文字から画像を作成するプログラムになります。
前述の通り一枚作るだけでかなりの時間がかかるためfor文を使用しておりますが、作る画像は一枚だけになります。
Googleコラボラトリではこの記述で使えたのでローカルでも試しました。
from diffusers import StableDiffusionPipeline
import torch
import matplotlib.pyplot as plt
# アクセストークンの設定
access_tokens = "****"
model = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4",use_auth_token = access_tokens)
# ここを最終的に変えています
model.to("cuda")
prompt = "Girl Janapnese Highschool smaile"
import re
filename = re.sub(r'[\\/:*?"<>|,]+','',prompt).replace(' ','_')
num = 1
for i in range(num):
image = model(prompt,num_inderence_steps = 50)['sample'][0]
outputfile = f'{filename}_{i:02}.png'
image.save(f"./outputfile/{outputfile}")
for i in range(num):
outputfile = f'{filename}_{i:02}.png'
plt.imshow(plt.imread(f"./outputfile/{outputfile}"))
plt.axis('off')
poetryで必要なライブラリをインストール
poetry add diffusers transformers scipy ftfy matplotlib
この際torch torchvisionがエラーになったのでこの記事を参考に
pyproject.tomlにインストールする記述を記載しました。
もしかしたらGPUを使えるようにすればよかったのかもしれませんが、色々調べたのですが分からず、以下の方法でtorch等をインストールようにしました。
出たエラー:
AssertionError: Torch not compiled with CUDA enabled
[tool.poetry.dependencies]
python = "^3.10"
poethepoet = "^0.10.0"
[tool.poe.tasks]
force-cuda11 = "python -m pip install torch==1.11.0 torchvision==0.12.0 -f https://download.pytorch.org/whl/torch_stable.html"
以下のコマンドで反映させます
poetry install
poe force-cuda11
これでtorchをインストールできた。よし実行!
と思ったらまたエラーが出た。
エラー文はメモを忘れてしまいましたが、
nvidia-cuda-nvrtc-cu11のRuntimeErrorだったような気がします。
nvidia-cuda-nvrtc-cu11を調べるとGPU関係のライブラリらしい。
色々調べた結果以下の記述に変更してGPUだけではなくCPUを使うことにしました。(良いこは真似しないでください)
# 以下のように記述を変更
model.to("cuda") ⇨ model.to("cpu")
これで無事画像を作ることが出来ました。
かなり時間がかかりますので、普通の方には役に立たないと思いますが、私のように古いMACを使っている方のお役に立てば幸いです。
もしこれ以外に良い方法があれば教えていただきたいです!