【novelAI】ローカル環境で最強お絵かきAIを動かす忘備録とマイニング勢が語るGPU運用

AIイラスト

最近イラストAI流行ってますよね。私のブログでも結構アクセス増えてきて、私もうれしいです。そんな中、ついに登場した最強お絵かきAI

“novelAI”

私も最上位プランに課金して生成しまくっています。

でもこれ月額25$と結構高額なんですよね。まあ、自分でイラストかけないのでこのレベルのイラストが月4000円で生成できるなら安いんですが…

そんなある噂が…「noveAIがハッキングされたらしい。」

モデルごと流出して有志によるローカル環境での実行ができるらしい。でもハイエンドグラボがいるらしい。

なぜかうちの片隅にRTX3070が転がっていました。これはもうやらない手はないということでプログラムなんもわからない私が頑張ってローカル環境を作ったのでその忘備録を残します。

超えるべきハードル

  • WindowsかLinuxのPCを持っている。RAM16GB以上、GTX1060以上のGPU(2060以上じゃないと厳しい?)
  • 大容量ファイル(52 GB)のmagnetLinkによるDLができる。(torrentファイルをある程度扱える)
  • ハイスペックGPUを持っている。2chとか見てると3060以上がいいみたいです。
  • 何があっても自己責任(GPUが燃えても、著作権関係で捕まっても、無修正を間違えてネットにさらしてしまっても)

ぶっちゃけプログラムの知識はいりません。プログラム要素はコマンドプロンプトにコピペしたコマンド打ち込むくらいです。

導入方法

1次ソース

--GUIDE--
The definitive Stable Diffusion experience ™ (Special thanks to all anons who contributed) ---FEATURE SHOWCASE & HOWTO--- SD News Japanese guide here 日本語ガイド (JP...
画像生成AI「Stable Diffusion」を4GBのGPUでも動作OK&自分の絵柄を学習させるなどいろいろな機能を簡単にGoogle ColaboやWindowsで動かせる決定版「Stable Diffusion web UI(AUTOMATIC1111版)」インストール方法まとめ
(2022/09/22 17:52更新)画像生成AI「Stable Diffusion」を簡単に利用するための実行環境の1つである「Stable Diffusion web UI」のコントリビューター(開発貢献者)の1人であるAUTOMATIC1111氏が、フォークではないものの同名で「機能全部盛り」なStable D...

ここをGoogle翻訳かけるだけで大体行けます。以下は私がつまずいた部分を交えながら大体の流れをまとめていきます。

ステップ1 リーク版novelAIのダウンロード

1次ソースに従って
magnet:?xt=urn:btih:5bde442da86265b670a3e5ea3163afad2c6f8ecc

上のmagnetリンクからファイルをダウンロードします。

この時点でtorrent怖いという方は導入を諦めたほうがいいかもしれません。今回のリーク版novelAIはグレーであり、今回やっていることもかなりのグレーゾーンです。novelAI自体がオープンソース化されるという噂もあるので、そちらを待ったほうがいいかもしれません。

ちなみに私のおすすめtorrentクライアントはμtorrentです。

µTorrent(uTorrent)Web | 一番使われているトレントクライアント、uTWeb
ダウンロードしながらトレントを再生できます。お好みのウェブブラウザから高速かつ簡単にトレントをダウンロード可能。シンプルなインターフェースです。今すぐuTWebをダウンロードしましょう。

ステップ2 Stable Diffusionの環境構築

この界隈追ってない方は知らないかもしれませんが、2022年の9月ごろから始まったAIイラストの急速な進化はStable Diffusionがオープンソース化されたことから始まります。今回のnovelAIはこのStable Diffusionの派生でDanbooruというイラストサイトの画像から学習したAIというわけです。

このDanbooruというサイトの画像の多くが無断転載でこれを学習したAIってどうなの?というのがAIイラスト界隈で問題となっているのですが、ここでは語りません。

今回はギガジンさんのこちらの解説がわかりやすかったのでこちらを参考に導入してください。

https://gigazine.net/news/20220907-automatic1111-stable-diffusion-webui/

目次のところからWindowsで動かす(NVIDIA製GPUが必要)へとびます。

指示に従ってPythonを入れて、Gitを入れて、NvidiaCUDAまで入れたらAUTOMATIC1111版Stable Diffusion web UIのリポジトリをクローンまでで一旦止めます

ステップ3 novelAIleakから必要な部分を取り出してリネーム

ダウンロードしてきたモデルから必要な3つのファイルを取り出します。この辺は1次ソースの通りです。拡張子の部分でややこしいのでファイル名が完全一致しているか確認してください。

ステップ4 Stable Diffusion-webuiにモデルデータを入れる

こんな感じでフォルダで分けず直接3つのファイルを直接入れます。

ステップ5 webui-user.batを実行

最初に読み込みと環境構築みたいなのをはさみますが、正常に読み込まれるとURLが出てきます。あとはこのURLをお好きなブラウザに入力して完了です。

初期設定

このまま適当にプロンプトを入力してgenerateしても、イラストは生成できますが本家novelAIに近づけるためにはいくつか設定が必要です。

使用するモデルデータを選択

今回は1種類しか導入していませんが、ほかのモデルデータを読み込むことでnovelAIとは違う雰囲気のイラストを生成できるようになります。waifudiffusionなんかが有名ですね。なんでもnobelAIとwaifudiffusionのモデルデータをミックスすることでいい感じのイラストを生成できるとか…。

この辺はなれてきたら設定してみてください。

Stop At last layers of clipを 2 にする。

Settingのタブの結構下の方にある設定項目です。F3キーを押して[stop]とかで検索かけると出てきます。ここを2にして設定上部のApply settingを押してください。これを押さないと設定が反映されません。

noiseの設定

1次ソースにもある通りnoise値を手動で設定します。

settingタブから Eta noise seed delta の項目を探し 31337 と入力してください。

これでノイズ生成周りの設定が本家と同じになりかなり本家に近づきます。 Apply setting も忘れずに押してください。

Negative promptにデフォルトプロンプトを書き込む。

本家NAIではデフォルトでかけられているフィルターですが、ローカル版ではこちらで設定する必要があります。

一時ソースのアスカの下にあるNegative promptをコピー。webuiのNegative prompt欄に貼り付けます。

lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts,signature, watermark, username, blurry, artist name,

その他の設定

本家触ったことない人のためにその他の設定もざっくり説明しておきます。

Undesired Content/Negative prompt:プロンプトから除外する要素。上級者向けなので最初は気にしなくていい。ローカル版は最初に
lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts,signature, watermark, username, blurry, artist name,
をいれて本家デフォルトネガティブプロンプトを設定。

Steps/Sampling step:画像生成の反復回数みたいな数値。10$プランなら27。25$プランなら28がオススメ。
ローカル版は上げても消費トークン変わらないので50くらいがいいかも。上げると一枚あたりの生成時間は伸びるけどいい画像が出やすい。

Image Resolution/width heigth:512512が基本。512768が本家portraitでスマホで見やすい。背景とか意識するなら768512でもOK。高解像度が良ければ768768でもいいみたい。

Scale/CFG Scale:promptにどれだけよせるか。5-16くらいがおすすめ。デフォは11でOK。
Seed:イラストを固定するための数値。同じSEED値だと似たようなキャラが出やすい。

ローカル版由来の設定値
Sampling method:1次ソースはEulerかEuler aを推奨してるぽいのでこのどっちか

Batch count/size:一回に何枚生成するか、最大1クリック800枚までいける。途中で止められるので最大で回すのもおすすめ。

ここまでできたら試しに

masterpiece, best quality, masterpiece,1girl

あたりでテストしてみてください。このAIにハマる理由がわかるはずです。

1次ソースのHELLO ASUKAテストもやってみてください。同じprompt、同じSEED値、同じ設定で行けば全く同じ画像が出るはずです。

https://imgur.com/a/DCYJCSX

本家NAIとなんか違う問題はたいていここで解決できるはずです。

Anything-V3.0

11月頭くらいに突如4chに投稿された学習モデル。ハイパーネットワークとかDREAMBOOTHではなくそれ単体で動作するSD用の学習モデルです。

詳細や学習元は不明なのでここでマグネットリンクを貼るようなことはしませんが「anything 3.0 stable diffusion」あたりで検索すると見つかります。

性能としてはNovelAIよりもきれいな感じのイラストを出力できます。体感として手や指の構造もこちらのほうが破綻なく出力できています。

 Anything-V3.0
 Anything-V3.0
NAI
NAI

ある程度手が特徴的なイラストをピックアップ、 Anythingのほうが絵柄とか塗りがきれいな感じがしますね。

いろいろな学習モデル

BAKA diffusion:写真とNovelAIをマージしたモデルらしい。等身や手のできが良い。

waifu diffusion:NovelAI登場前ま最も美少女イラストの生成に適していたと言われているモデル。もうすぐ1.4が発表される予定。

2023年最新版 イラスト生成モデル事情

2023年1月現在のモデル事情を記事にしました。使い方は上で解説した通り.ckptファイルまたは.safetensorファイルをmodelフォルダー内のstable diffusionフォルダに入れると使えます。

最新のAutomatic1111を使っている場合.vaeファイルは設定から選べるのでリネームは必要ないです。一部のモデル(waifu diffusion1.4)はymalというファイルの導入が必要です。.ckptファイルと全く同じ名前になるように(拡張子は.ymal)リネームしてください。

マイニング経験者が語るGPUあれこれ

まずはこれを見てください。RTX3070で連続生成を行った場合のGPUの温度と消費電力です。

GPU Temperratureが65℃ HotSpotが76℃これはまあそんなにやばくはないです。重めのゲームしてたらこれくらい行きます。

問題はBoard Power Drawの部分。217.6W 約220Wです。RTX3070のTDPは220Wなのでほぼ全力回転です。ゲーム中もこれくらい電気を食うこともあるのですがぶっ続けともなると少し危険。

実はマイニングは効率を上げるために最省電力でGPUを動かすのでRTX3070だと120Wで常時60℃以下くらいで回します。つまりローカル版NAIの実行はマイニングよりもGPUにダメージを与えます。流石にこの消費電力で24時間は少し対策が必要だとは思います。

そんなわけでGPUに少しでも頑張ってもらうためにマイニング時代の工夫を3つ紹介しておきます。

GPUの熱対策1 PCケース側面を開けておこう。

最も費用対策効果の大きい方法です。ほとんどのマイニング勢はPCケースにGPUを入れずフルオープンで回してます。

私の最終形態がこちらですが、ここまでしなくても側面開けるだけでOKです。

こんな感じで側面は開けておきましょう。

GPUの熱対策2 SwitchBotで電力を監視しよう。

マイニングガチ勢はほぼ使っていると過言ではない必須アイテムです。スマホアプリから消費電力の監視。グラフによる日毎月毎の消費電力の記録。さらには電力供給を遮断する事による緊急停止が可能です。novelAIでマネタイズを考えている方は電気代が経費になるはずなのでその計算にも便利です。ぜひ導入を検討してください。

GPUの熱対策3 サーキュレーターを使う

扇風機でもいいですが、GPUについてるファンに加えてサーキュレーター直あてが一番冷えます。ケースファン何個も買うより2000円のサーキュレーターのほうが安上がりなのでこの機会にサーキュレーター買ってしまいましょう。

私はこれで回しています。

ダウンクロックの検証

先にも説明した通り、このAIを24時間回すのはGPUに良くないです。そこで設定してほしいのはアフターバーナーによるダウンクロック。マイニング界隈ではマイニングのための最適なOC設定に自動でオーバークロックしてくれるソフトもあるのですがSDにはないので自分で設定します。

私自身3070しか持ってないので、参考になるかはわかりませんが一応検証してきました。

以下の設定で生成速度を見てみます。generateを右クリックして「generate forever」機能を使ってそれぞれ10枚ほど生成した結果をしたにまとめました。

CUI上の右側の数字が画像生成の速さを表しています。it/sという単位の部分。マイニングで言うところのハッシュレートですね。

そして真ん中がアフターバーナーの操作画面今回はPowerlimitの部分をいじるのでここに注目してください。

最後に右側がGPUIDの電力モニター。下から2つ目「Board Power Draw」に注目してください。これがいわゆるGPU単体の消費電力になります。

簡単に表にまとめると

Power Limit消費電力生成速度(it/s)
100%220 W8.5
75%165 W8.1 (約5%減)
50%110 W7.1 (約16%減)
RTX3070 512×512 generate forever

消費電力を半分にしても生成速度は半分にならないんですね。これなら50%制限で回したほうが良さそうです。マイニング勢的にもRTX3070で110 Wなら十分に許容範囲です。ちなみに去年流行ったイーサリアムマイニングでは約110Wで24時間1年間ほどぶっ通しで回していたのでおそらく大丈夫なはず、RTX3070*5枚の運用でしたが1枚も不具合出てません。

というわけで少し速度は下がるけどPower limit 50%がおすすめ。

ほかのGPUでもCUIとアフターバーナー、GPUIDの画面を見ながら調節してみてください。

電気代の話

GPUの電気代の話をします。難しそうな電気代の計算ですがパソコンはエアコンなどと違い常に一定の電力を消費するので、消費電力さえわかれば簡単です。

上でおすすめしたSwitchBotにはAC100Vコンセントの時点での消費電力をモニターできるのでかなり正確な電気代の計算ができます。今回は上のRTX3070の110Wと220Wのときの電気代を計算していきます。

まずは契約している電力会社の1kwhあたりの電気代を調べてください。2022年10月現在燃料調整費が高騰しているので今回は30 円/kwhで計算していきます。30円/kwhというのは「1000Wの電気を1時間使った場合30円」という意味です。

110w/1000 * 30=3.3円
220w/1000 * 30=6.6円

GPU以外にもCPUやメモリ、SSDに電力を消費するのでざっくり100Wとします。ちゃんとダウンクロックした状態で24時間ぶん回すと…

210W/1000 * 30 *24 =151.2円

大体150円です。これが高いか安いかはその人の経済状況次第ですが、まあ気にするほどの額ではないです。24時間30日回しても5000円くらいで済みます。

マルチGPUでゲームしながらイラスト生成

マイニング勢なので当然1つのPCに複数のGPUを搭載しています。そこで重要になってくるのがマルチGPU設定です。

2022年11月13日現在、複数のGPUを並列化して画像生成をすることはできませんが、一方のGPUで画像生成を行いながら、もう一方のGPUでゲームを楽しむと言ったとこなら可能です。

PCI Express×16のレーンが2レーンあるようなマザーボードなら普通に2枚さしてもいいですが、こういうときに便利なのがライザーカード。

BEYIMEI PCI-E 1X〜16Xライザーカード、10コンデンサ、ビットコインイーサリアムマイニングETH用、0.6 m USB3.0延長ケーブルおよび6PINSATA電源ケーブル付き-GPUエクステンダーライザーカード-(V011-PRO、1パック)
Amazon.co.jp: BEYIMEI PCI-E 1X〜16Xライザーカード、10コンデンサ、ビットコインイーサリアムマイニングETH用、0.6 m USB3.0延長ケーブルおよび6PINSATA電源ケーブル付き-GPUエクステンダーライザーカード-(V011-PRO、1パック) : パソコン・周辺機器

PCIスロットを延長しPCケースの外側にGPUを配置できます。使い方はマイニング系のブログを見てください。うまく接続できればこんな感じになります。

タスクマネージャー側でも2枚のGPUを確認できたら、あとはソフト側で使用するGPUを指定します。

設定方法自体は簡単です。

“stable-diffusion-webui\modules\devices.py”の devices.py というファイルをメモ帳で開きます。

import contextlib

import torch

from modules import errors

# has_mps is only available in nightly pytorch (for now), `getattr` for compatibility
has_mps = getattr(torch, 'has_mps', False)

cpu = torch.device("cpu")


def get_optimal_device():
    if torch.cuda.is_available():
        return torch.device("cuda:0")

    if has_mps:
        return torch.device("mps")

    return cpu


def torch_gc():
    if torch.cuda.is_available():
        torch.cuda.empty_cache()
        torch.cuda.ipc_collect()


def enable_tf32():
    if torch.cuda.is_available():
        torch.backends.cuda.matmul.allow_tf32 = True
        torch.backends.cudnn.allow_tf32 = True


errors.run(enable_tf32, "Enabling TF32")

device = device_gfpgan = device_bsrgan = device_esrgan = device_scunet = device_codeformer = get_optimal_device()
dtype = torch.float16
dtype_vae = torch.float16

15行目 return torch.device(“cuda:0”) の部分デフォルトでは (“cuda”) になっていると思いますがこれを cuda:1 かcuda:0に変更します。どちらがどのGPUかは一度負荷をかけてみて確認してください。

これでゲームをしながら画像生成が可能です、正直生成中はYou Tubeとか若干重かったのでこの機能は助かります。

言い忘れていましたが、消費電力には気をつけてください。電源容量以上の電力を使用するとGPUが燃える場合があります。大抵の場合電源が落ちるだけですが、高額なGPUを壊すと元も子もないので気になる人は止めておきましょう。

コメント

タイトルとURLをコピーしました