2023-05-04現在、無料枠では利用できない可能性があります。
Google ColaboratoryでStable Diffusionを動かす場合、無料と有料でどの程度変わるのか試してみたのでその結果。ざっくり4倍ほど変わるのかなというのが体感です。
レンダリング条件
今回は以下の設定で回した結果を比較します。
ベースとなるNotebookは以下を使っています。
https://gist.github.com/Lycolia/cb432ad1b1ce083482b5487c131b5d12/80a059931c538b10d55cf9fcbf82220f24e64653
設定値は以下です。ほぼデフォです。
設定 | 値 |
---|---|
Propmpt | (illustration:1.0), masterpiece, best quality, 1girl, solo, happy, smile, theater, (perspective:1.3), from below, (looking away:1.2), (from side:1.0), {{shot_hair}}, smile, bangs, shaggy, (brown hair:1.1), swept_bangs, thick_eyebrows, skin_fang, closed mouth, {{purple eyes}}, gray {{jacket}}, white shirt, glasses, {{small breasts}}, |
Negative Prompt | nsfw, (worst quality, low quality:1.4), (depth of field, blurry, bokeh:1.5), (greyscale, monochrome:1.0), multiple views, text, title, logo, signature, (tooth, lip, nose, 3d, realistic:1.0), dutch angle,(cropped:1.4), text, title, signature, logo, (loli:1.2), school satchel, pink, school bag, school uniform, from behind |
Model | AOM3A1B |
VAE | orangemix.vae.pt |
Sampleing method | Euler a |
Sampleing steps | 20 |
Width | 512px |
Height | 512px |
Batch count | 1 |
Batch size | 1 |
CFG Scale | 7 |
Seed | -1 |
比較結果
レンダリング時間はTotal progressの時間を書いてます。
\ | Colab無料枠 | Colab Pro |
---|---|---|
GPUクラス | 標準 | プレミアム |
メモリ | 標準 | ハイメモリ |
GPU | Tesla T4 | A100 |
システムRAM | 12.7 GB | 83.5 GB |
GPU RAM | 15.0 GB | 40.0GB |
ディスク | 166.8 GB | 166.8 GB |
レンダリング時間 | 8秒 | 2秒 |
セットアップ時間はどちらも5分ほど。
スペック情報参考
無料枠
Golab Proで標準GPUにしても同じです。
Tue Apr 11 12:50:30 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.85.12 Driver Version: 525.85.12 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 |
| N/A 70C P8 33W / 70W | 0MiB / 15360MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:33:58_PDT_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0
total used free shared buff/cache available
Mem: 12Gi 628Mi 7.4Gi 5.0Mi 4.6Gi 11Gi
Swap: 0B 0B 0B
Colab Pro
Pay As You Goで有料枠買ってもGPUは同じです。
Tue Apr 11 12:55:03 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.85.12 Driver Version: 525.85.12 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA A100-SXM... Off | 00000000:00:04.0 Off | 0 |
| N/A 39C P0 46W / 400W | 0MiB / 40960MiB | 0% Default |
| | | Disabled |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:33:58_PDT_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0
total used free shared buff/cache available
Mem: 83Gi 756Mi 79Gi 1.0Mi 3.3Gi 82Gi
Swap: 0B 0B 0B
おまけの成果物
そこそこちゃんとした絵は頑張ってプロンプト練ったり、ひたすら回したり、i2iを繰り返したりしないと、やっぱ出てこないですね。まぁモデルによっては楽に出せたりしますが、権利関係が怪しかったりするのでここには出せないです…w
あとがき
時間帯によってUIが異様に重くなることがあり、GPUの処理速度も時間帯によっては1秒未満で終わることがあった気もするので、この不安定さはクラウドユースの欠点だなぁと思いました。とは言え、GPUを買うことに比べれば手軽に利用できるのは、やはりメリットかなと思います。
よく使う人はグラボ買ったほうがストレスとかから開放される可能性はあるかもしれません。私はRTX2060なのでどう転んでもColabの方がマシなのが悲しいところ…。4070Ti買うか地味に迷いますね。
.zshrc
でbindkey
する時にキーコードが解らず困ったので
確認環境
Env | Ver |
---|---|
Ubuntu | 22.04.2 LTS |
FreeBSD | 13.0-RELEASE-p12 |
確認方法
ターミナルで{Ctrl}
+{V}
を押下し、次に調べたいキーを押下するとキーコードが見れる
Up/Down/Home/End/Del の設定方法
取り敢えずこれだけ欲しかったので。Deleteは共通のコードみたいです
FreeBSD
## Delete
bindkey '^[[3~' delete-char
## arrow up
bindkey '^[[A' up-line-or-search
## arrow down
bindkey '^[[B' down-line-or-search
## Home
bindkey "^[[H" beginning-of-line
## End
bindkey "^[[F" end-of-line
Ubuntu
## Delete
bindkey '^[[3~' delete-char
## arrow up
bindkey "^[OA" up-line-or-search
## arrow down
bindkey "^[OB" down-line-or-search
## Home
bindkey "^[OH" beginning-of-line
## End
bindkey "^[OF" end-of-line
最近流行りということもあり、サクッと使い方とか、使ってみた所感を書いてみます。
Stable Diffusion を使うプラットフォームはどこがいいか?
ローカル
ご自宅のマシンです。お金稼ぐなら多分こっち。
ベンチスコアを見る限り最低でもRTX 4070 Tiがあるといいと思います。
勿論、A100があるならそれに越したことはないですが、270万円するのでまず検討外でしょう。
- メリット
- 既に環境があれば電気代しか掛かりません
- 何をしても怒られません
- 一回セットアップすれば使い回せます
- ローカルなので細かい融通が利きやすいと思います
- デメリット
- RTX 4090を持ってしてもクラウドにパフォーマンスは劣ると思います
- 環境構築に非常にお金がかかります。グラボ交換だけで考えてもRTX 4070Ti単体で13万ほどするのでAI絵で利益を出せないと厳しいでしょう
クラウド(Google Colab)
- メリット
- 取り敢えず試したいというときにお手頃な価格で始められます
- Colab Proでも1,200円ほど積めば取り敢えず使えます。無料で使うのは微妙
- 電気代はタダ同然
- 圧倒的パフォーマンス
- 512x512の作画であれば1秒程度。ベンチスコアを見る限りRTX 4090でもここまで短くならないはず
- Golab Proを使った感じだと基本A100が引けました
- 取り敢えず試したいというときにお手頃な価格で始められます
- デメリット
- 長時間使うと金額が膨らみます
- AIイラストを売って稼ぐには不向きかもしれません
- ここは軌道に乗ってきたらローカル環境を組むのを考えてもいいかもしれないですね
- 毎回セットアップが必要になりがちで面倒
- Google Driveに全部突っ込んでおけば不要ですが、容量問題が…
- ファイルのアップロードやColab自体の設定変更などの操作がローカルよりやりづらいです(他人のシステムの上にあるので仕方がない)
- 生成内容によってはBANされる可能性がある
- 私はされたことがないですが、稀にされるというのは聞きます
- 長時間使うと金額が膨らみます
モデルについて
あんまり良くわかってないけど主に次の三種類があるっぽい。拡張子のパターンは他にもあるかもしれないけど把握できてないです。
- モデル
- 拡張子は
.safetensors
,.ckpt
- 絵柄がこれで決まる
- 格納先
/stable-diffusion-webui/models/Stable-diffusion
- 拡張子は
- VAE
- モデルに内包されている絵柄を決定する要素?
- 拡張子は
.vae.pt
- 格納先
/stable-diffusion-webui/VAE/Stable-diffusion
- LoRA
- 個人が作成した追加学習モデル
- 既にあるモデルに絵柄やポーズ、シチュエーションを追加できる?
- 拡張子は
.safetensors
- 格納先
/stable-diffusion-webui/Lora/Stable-diffusion
Google ColabでStable Diffusionを使う方法
以下のファイルをColabに取り込み、後述する使い方の通りにやれば動くはずです。
https://gist.github.com/Lycolia/cb432ad1b1ce083482b5487c131b5d12
使い方
以下はGoogle Colab Proの利用を想定して書いています。1,179円ほど払うと数時間は使えるのでオススメです。
- ipynbファイルを落としてGoogle Colabにインポート
- 編集>ノートブックの設定からGPUクラスをプレミアムに変更
- Setupセクションの
## model
以下のコメントを参考に好きなモデルを突っ込む - Setupを実行
- Launch web UIを実行
- コンソールに以下のリンクが出てくるのでアクセスするとWebUIが開く
https://xxxxxxxx.gradio.live
モデルがある場所
この先のリンクには性的表現が含まれる可能性があります。周囲に注意して開いてください。
- Civitai
- かなり豊富なモデルがありますが、知財的に問題があるものも少なくないと思われます
- stablediffusion WebUI モデル一覧
- 日本語で色々なモデルがまとめられています
- 7th_anime_v3
- アニメ系イラストの定番らしいですが使ったことはないです
- AbyssOrangeMix
- 見た感じ結構クオリティが高いものを出力できる
トラブルシューティング
カーネルエラーが出る
FATAL: kernel fmha_cutlassF_f16_aligned_64x64_rf_sm80
is for sm80-sm90, but was built for sm75
もし以下のようにxformersをインストールしている箇所があれば消すと直る
!pip install -q https://github.com/camenduru/stable-diffusion-webui-colab/releases/download/0.0.15/xformers-0.0.15+e163309.d20230103-cp38-cp38-linux_x86_64.whl
PyTorch と torchvision のバージョンの整合性があっていないエラーが出る
RuntimeError: Detected that PyTorch and torchvision were compiled with different CUDA versions. PyTorch has CUDA Version=11.7 and torchvision has CUDA Version=11.8. Please reinstall the torchvision that matches your PyTorch install.
web UIを起動する前にバージョン指定でコンポーネントをインストールする
!pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchtext==0.14.1 torchaudio==0.13.1 torchdata==0.5.1 --extra-index-url https://download.pytorch.org/whl/cu117
モデルや画面とかいろんなロードが終わらない
30秒以上かかる場合は異常なので画面をリロードすると直ることがある
画面動かない系は基本リロードで直る。多分Colab側の負荷で詰まってる
VAE を設定する方法
Quicksettings list
にsd_vae
をカンマ区切りで追加- 画面リロード
- モデル選択の横にVAEの選択メニューが生えてくる
参考出力作品
プロンプトを深く捏ねてないのでクオリティは微妙ですが、取り敢えずこんなのが出せますというサンプル。
モデルはAbyssOrangeMix3、VAEはkl-f8-anime2を使ってます。
YARPP – Yet Another Related Posts Pluginのサムネイル表示がどうにも気に入らなかったのでSANGOのスタイルに合わせるだけのやつを作りました。YARPPのカスタムテーマとしてSANGOのアドセンス関連記事型広告ウィジェットに差し込むことを想定しています。
こんな感じで、SANGO標準の関連記事表示と変わらないやつです。
Gistに置いてるので、もし欲しい人がいたら持っていって好きに改造して使ってください。
最初はプラグインにして配布しようとか思ったのですが、 構造的に無理だったので諦めました。パッと見はWordPressのエコシステムに上手いことインジェクションしてやってるのかと思ったのですが、内部の処理としてはYARPPがTemplateファイルをrequired_once
で読み込んで内部でWordPressのエコシステムを再現することで実現しているという事が解り、YARPPの管理外にあるプラグインでは実現が難しかったため、一番無難なテンプレート形式に収めて終わりにしました。
WordPressの組み込みURL埋め込みがクソなので自作しようとしたら意味不明な挙動に出会ったので残しておく。
確認環境
- WordPress 6.2
- Classic Editor
起きた現象
端的に書くとshortcodeでAタグの中にブロック要素を含ませるような出力を記事本文中ですると初回だけAタグが外れます。
イメージ的にはこういう感じのやつ
<a href="https://example.com">
<figure>
<img src="https://example.com/foo.jpg" alt="" width="200">
<figcaption>foo</figcaption>
</figure>
</a>
例えば以下のような出力が起きます。ちょっとなんかかなりHTML崩壊してませんかね…?
参考までにショートコードを二回以上書くと二回目以降はPタグなどのゴミが混ざるものの理想に近い出力になります。原因は不明。WordPressのバグかなんかじゃないかな…。
再現コード
このショートコードを記事本文に二回書くと二回目にはAタグが効くことが確認できます。
function emb_test($atts) {
$url = $atts["url"];
$img = $atts["img"];
$title = $atts["title"];
return <<<EOD
<a href="$url>
<figure>
<img src="$img" alt="" width="200">
<figcaption> $title </figcaption>
</figure>
</a>
EOD;
}
add_shortcode('emb', 'emb_test');
何故起きるのか?
wpautop のせいだとは思います。この機能自体は普段記事を書く上で便利ですし、タグやカテゴリの説明にadd_filter
してやるといい感じに改行が反映されたりして便利なのですが、shortcodeの中に入ってくるとかなり邪魔ですね…。
因みにAタグの中にインライン要素を入れてる限り、この現象は起きないのですが、その場合CSSでブロック要素にする必要があるのと、セマンティクスとかコーディング的な微妙さを感じたので、それはしないことにしました。
取り敢えずWordPressで良い感じにURLを埋め込むのは余り現実的ではなさそうなので諦めることにしました。正直WordPress 組み込みの埋込機能は使い勝手が悪く微妙です。有名SNSだけ埋め込めればいい人にはこれでいいでしょうけど…。
仕方がないので5年くらい前に使って体験が微妙だった Pz-LinkCard を使ってみたらかなり良くなっていたので、Pz-LinkCardを使うことで解決することにしました。ありがとうPz-LinkCard…ありがとう…。
コードの供養
書いたけど期待通り動かなかった本来やりたかったコードです。
function embed($atts) {
$url = count($atts) > 0
? $atts[0]
: "";
$dom = new DOMDocument();
$data = wp_remote_get($url);
if (is_wp_error($data)) {
return;
}
$html = $data['body'];
$doc = new DOMDocument();
@$doc->loadHTML($html);
$metas = $doc->getElementsByTagName('meta');
$title = '';
$description = '';
$image = '';
foreach ($metas as $meta) {
if ($meta->getAttribute('property') == 'og:title') {
$title = $meta->getAttribute('content');
}
if ($meta->getAttribute('property') == 'og:description') {
$description = $meta->getAttribute('content');
}
if ($meta->getAttribute('property') == 'og:image') {
$image = $meta->getAttribute('content');
}
}
if (!empty($title) && !empty($description)) {
return <<<EOD
<a href="$url">
<figure>
<img src="$image" alt="$title">
<figcaption>
$title
$description
</figcaption>
</figure>
</a>
EOD;
}
}
add_shortcode('embed', 'embed');