M1/M2でStable Diffusionを動かす方法について

By tkgstrator at

Stable Diffusion

今更すぎるが、登場時はまだまだだなあと思っていた画像生成AIが随分なレベルにまで上がってきたので触れておくことにしました。

基本的にSDはRTXシリーズで動かすのが盤石なのですが、M1シリーズもそれなりにGPUコアがあり、一説によるとM1 UltraはRTX2060程度の性能はあるらしいので試してみることにしました。

まずはじめに

M1/M2 Stable Diffusionで検索するとCoreMLを利用したツールを紹介されることがありますが、CoreMLには画像サイズを変更できなかったり、やたらと生成した画像のクオリティが低かったりと問題があったのでおすすめしません。

Stable Diffusionを簡単に利用したいのであればWebUI一択で、他の選択肢はありません。

Stable Diffusion WebUI

Stable Diffusion WebUIはここから入手できます。M1/M2での導入方法もここに書いてあるので、基本的にはこれをそのまま実行するだけで良いです。

パフォーマンス向上

How to improve performance on M1 / M2 Macsでパフォーマンス改善が載っていますが、まあ若干上がったかなという感じです。

以下のようにwebui-user.shを書き換えます。

#!/bin/bash
#########################################################
# Uncomment and change the variables below to your need:#
#########################################################

# Install directory without trailing slash
#install_dir="/home/$(whoami)"

# Name of the subdirectory
#clone_dir="stable-diffusion-webui"

# Commandline arguments for webui.py, for example: export COMMANDLINE_ARGS="--medvram --opt-split-attention"
export COMMANDLINE_ARGS="--skip-torch-cuda-test --upcast-sampling --no-half-vae"

# python3 executable
#python_cmd="python3"

# git executable
#export GIT="git"

# python3 venv without trailing slash (defaults to ${install_dir}/${clone_dir}/venv)
#venv_dir="venv"

# script to launch to start the app
#export LAUNCH_SCRIPT="launch.py"

# install command for torch
# export TORCH_COMMAND="pip install torch==1.12.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113"
export TORCH_COMMAND="pip install --pre torch==2.0.0.dev20230506 torchvision==0.15.0.dev20230506 -f https://download.pytorch.org/whl/nightly/cpu/torch_nightly.html

# Requirements file to use for stable-diffusion-webui
#export REQS_FILE="requirements_versions.txt"

# Fixed git repos
#export K_DIFFUSION_PACKAGE=""
#export GFPGAN_PACKAGE=""

# Fixed git commits
#export STABLE_DIFFUSION_COMMIT_HASH=""
#export TAMING_TRANSFORMERS_COMMIT_HASH=""
#export CODEFORMER_COMMIT_HASH=""
#export BLIP_COMMIT_HASH=""

# Uncomment to enable accelerated launch
#export ACCELERATE="True"

# Uncomment to disable TCMalloc
#export NO_TCMALLOC="True"

###########################################

Torchは20230507のものもリリースされているのですが、それではwebui.shが起動しなくなりました。

なのでとりあえず一つ前の20230506を利用しています。

パフォーマンス

環境

  • M1 Ultra(48Core GPU)
  • Stable Diffusion WebUI(1.1.1 5ab7f213bec2f816f9c5644becb32eb72c8ffb89)
  • Python 3.10.11
  • torch 2.0.0
  • xformers N/A
  • gradio 3.28.1
  • checkpoint cbfba64e66

設定

パラメータ
Sampling method -
Sampling steps 22
Width 512
Height 768
Batch count 1
Batch size 1
CFG Scale 7
Seed 1031604376
Script None

メソッドには色々あるので、それを変えてみて出力画像を確認してみます。

プロンプト

以下の呪文を使います。

ポジティブ

masterpiece, (best quality), (ultra-detailed:1.4), high resolution, original characters, depth of field, solo focus, wearing black glasses, a high school student girl, cute adorable look, small breasts, soft delicate beautiful attractive face with expressive purple eyes, cowgirl position, disheveled clothing, close up, semi long straight hair, dark red brown, dynamic pose, cute adorable look, wearing a school uniform with blue tie, short sleeve, nsfw, bob cut hair, embarrassed, cowgirl position, in the nostalgic library

ネガティブ

EasyNegative (worst quality low quality:1.4) text, bad_anatomy, bad_hands

結果

シードが同じため殆どの場合でほぼ同じ画像が生成されましたが、サンプリングメソッドの違いによって大雑把に三パターンの画像に分かれました。

メソッド 生成時間 パターン
Euler a 12.62s A
Euler 12.53s B
LMS 12.48s 不明瞭
Heun 23.71s B
DPM2 23.69s B
DPM2 a 23.76s 不明瞭
DPM++ 2S a 23.65s B+
DPM++ 2M 12.53s B
DPM++ SDE 25.63s A
DPM fast 12.47s 不明瞭
DPM adaptive 102.49s A
LMS Karras 12.47s B
DPM2 Karras 23.73s B
DPM2 a Karras 23.65s C
DPM++ 2S a karras 23.81s B+
DPM++ 2M karras 12.52s A
DPM++ SDE Karras 25.52s A
DDIM 16.35s B
PLMS 12.24s 不明瞭
UniPC 15.26s 不明瞭