Home About
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) に対応していて取り扱いが簡単です。 そして、GPUが必要などの制限がない。

もし GPU(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

ここでは 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

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

./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 Models/v1-5-pruned-emaonly.safetensors \
	-p "A cup of coffee, plain background, art by Escher." \
	--steps 50

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

以上です。

Liked some of this entry? Buy me a coffee, please.