Home About Contact
Stable Diffusion , AI Image Generation

Llamafile で気軽に Stable Diffusion する

A cup of coffee by Cezanne

Llamafile は Mozilla https://future.mozilla.org/ のプロジェクトです。 Lamafile 自体の詳しい紹介はこちらhttps://future.mozilla.org/builders/news_insights/introducing-llamafile/をご覧ください。

いくつかのコマンドファイルがあるのですが、 その一つが sdfile で、これは Stable Diffusion のモデルを使って画像生成できる実行ファイルです。

Llamafile の特徴はプロジェクトのサイト https://github.com/Mozilla-Ocho/llamafile から単にファイルをダウンロードしてそれを実行するだけでよい、という点です。 ひとつの実行ファイルが各種OS(Windows/macOS/Linux) に対応しているので、 自分の使用OSにあったファイルはどれか?と悩むこともありません。 そして、特定のGPUが必要という制限もありません。

逆にもし dGPU(CUDAとかMetal)対応版を使いたければ、こちら https://github.com/leejet/stable-diffusion.cpp から ファイルを入手してビルドする必要はある。

やってみる(環境は macOS Sonoma 14.6.1 macbook air M1 8GB)

https://github.com/Mozilla-Ocho/llamafile からリリースページへ移動。 現在時点では llamafile v0.8.14 が最新です。

sdfile-0.8.14 をダウンロードして実行してみます。

このファイルは 14.2MB しかないことからわかるようにモデルファイルを別に入手する必要があります。 https://github.com/leejet/stable-diffusion.cpp を読めばわかりますが、 たとえば、次のようなモデルが利用できるらしい。

# curl -L -O https://huggingface.co/CompVis/stable-diffusion-v-1-4-original/resolve/main/sd-v1-4.ckpt
# curl -L -O https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors
# curl -L -O https://huggingface.co/stabilityai/stable-diffusion-2-1/resolve/main/v2-1_768-nonema-pruned.safetensors
# curl -L -O https://huggingface.co/stabilityai/stable-diffusion-3-medium/resolve/main/sd3_medium_incl_clips_t5xxlfp16.safetensors

この環境で sdfile-0.8.14 を使って実際にうまく作動したのは、sd-v1-4.ckptv1-5-pruned-emaonly.safetensors でした。 ほかのモデルが作動しなかった理由は不明ですが、こちらで設定を間違えているか、sdfile 0.8.14 のリリース時点からさらに こちらの stable-diffusion.cpp プロジェクトの開発が進んだためかもしれません。あとで stable-diffusion.cpp のプロジェクトの sd コマンドを使って試してみます。

ここでは v1-5-pruned-emaonly.safetensors を使った例を示します。(ターミナル上での操作)

どこか適当なディレクトリを作成して... (ここでは mytmp を作成)そこに必要なファイルを集めます。

$ mkdir mytmp
$ cd mytmp
$ mv ~/Downloads/sdfile-0.8.14 .
$ chmod u+x sdfile-0.8.14

chmod u+x sdfile-0.8.14 はこのファイルに実行権限を付与しています。

次にモデルを入手します。

$ curl -L -O https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors
$ ls
sdfile-0.8.14 v1-5-pruned-emaonly.safetensors

これで必要なファイルが用意できました。 それでは実行して画像を生成させてみます。

$ ./sdfile-0.8.14 -m v1-5-pruned-emaonly.safetensors -p "A cup of coffee, plain background, art by Cezanne."

M1 macbook air では 6分程度はかかります。 完了すると output.png に結果の画像が生成されます。

time 付きで実行したら次の通りでした。6分12秒...

real	6m12.394s
user	23m46.565s
sys	0m34.656s

なお Apple M1 Max のマシンで実行したら画像1枚生成に 1分30秒ほどかかりました。 たとえば、ダミーのプレースホルダー用の画像の用意であれば実用的な範囲と思います。 GPU マシンはファンがうるさいので、常用はきついのですが、mac であれば静かで助かります。

./sdfile-0.8.14 -h とすれば使い方の説明が標準出力されます。

--steps と --output オプションを使う例:

$ ./sdfile-0.8.14 \
    -m v1-5-pruned-emaonly.safetensors \
    -p "A cup of coffee, plain background, art by Cezanne." \
    --steps 50 \
    --output a-cup-of-coffee.png

steps 数はデフォルトが 20 です。SD1.4 や 1.5 で十分な品質を得るには足りない気がするので 50 くらいを指定した方がよい。 ただし、これは当然使用するモデルに依存する話です。

冒頭の画像は steps 50 を指定しています。 ちなみに、デフォルトの 20 steps で出すと以下の画像になった。

A cup of cofffee 20 steps

なお seed 値は 42 に固定されている。もちろんオプションとして指定可能:

-s SEED, --seed SEED               RNG seed (default: 42, use random seed for < 0)

これ以上詳しい使い方は本家ページ(the upstream project)を参照 https://github.com/leejet/stable-diffusion.cpp

エッシャー風

エッシャー風の絵も出力してみました。

A cup of coffee Escher

./sdfile-0.8.14 \
	-m v1-5-pruned-emaonly.safetensors \
	-p "A cup of coffee, plain background, art by Escher." \
	--steps 50

カップの持ち手の部分がちょっと難ありな気がしますが、すごくエッシャー感あふれる画像ができました。

追伸 FLUX.1 [Schnell] で出力

出力方法の詳細はこちらFLUX.1 [Schnell] を試したを参照

同じプロンプト: A cup of coffee, plain background, art by Cezanne. で FLUX ならどうなるのか?生成された画像はこれ:

A cup of coffee by FLUX.1

セザンヌ風味が全くない代わりに plain background の指示が完全に反映されました。セザンヌ風味の部分はプロンプトが悪いのか、それとも配慮されて意図的に反映されないようになっているのか?