Z Image TurboのLoRAをクラウドGPUで作成する方法
クラウドGPUにはRunpodを使用した。
学習にはAI Toolkitを使用する。runpodを使う場合にはテンプレートのなかにAI Toolkitがあり、インストールする必要はない。
⓪準備
Runpodのアカウントを作成する。
安全性のために、まずは左側のメニューバーのSecretsから+Create Secretをクリック
オンライン上のデータにアクセスするためのパスワードを設定する。以下は例なので、安全性の高いパスワードをSecret valueのところに設定してください。

①学習する画像を収集
下記の画像はAI ToolkitのDataset(学習画像の集合)の設定項目の初期状態であり、学習する画像は1024px以下がよいと思われる。おそらくもっとも精度よく学習するためには、これらの解像度の正方形の画像が推奨されると思われる。一般的には学習は10~20枚程度で行うらしい。筆者の場合は1280*720、853*480など長方形の画像を130枚収集して学習を行ったが、問題なく学習できた。

収集した画像はdatasetというフォルダーを作ってその中にいれておいてください。
②キャプションを作成
キャプションは学習画像と同一名のtxtファイルであり、その画像のプロンプトのようなものである。これはComfyUIで自動で作ることができる(ComfyUIの導入等は省略する)。筆者はlow VRAM(8gb)のグラボで行っていたため安定せず、これもRunpodで行った。
⑴左側のメニューバーのPodsからGPUを選択する。
今回はRTX5090を選ぶ。A40だとOutOfMemoryErrorが出る。おそらくRAMが少ないためと思われるがよくわからない。

⑵Pod templeteのChange TempleteをクリックしてComfyUI - Blackwell Edition (5090 / B200)を選択する。
チェックマークがついているものが公式が用意したもの

一応Encrypt volumeをチェックしておく

⑶Deploy On-Demandをクリック

⑷このような画面が開く。

たまにこの名前の横にAlertがついていることがあるが、気にしなくて大丈夫。

Initializingが終わってReadyになったらJupyterLabを開き、先ほど作成したdatasetのフォルダをrunpod-skimのなかにドラッグ&ドロップでコピーする。

⑸ComfyUIを開いてワークフローを読み込む。
ワークフローはこれを使う。これはダルトワ★TV様の動画のリンクからダウンロードしたものをRunpod用に改編したものです。
Initializingがおわるまで結構時間がかかる。10分くらいは待ったほうがいいかもしれない。ただし時間がかかりすぎる場合は一度Podをstopしてから再起動するとうまくいくかも。このとき、再開はなるべく即座に行わないと他の人に使っているGPUをとられてしまうので注意。

上部の青いManagerからInstall Missing Custom Nodesをクリック

versionはlatestですべてインストールする。

⑹全てインストールが終わったらRestartを押す。1分くらい待つとrefreshしますか?みたいな表示がでるのでそれをクリックする。このrefreshがなかなか出ないことがよくあるのだが、ブラウザのComfyUIのタブを一回閉じて開きなおすことでも代用できそう。

⑺先ほどのワークフローが表示され、赤枠がついているノードがなくなっていればOK。

トリガーワードは、他の概念と干渉しにくい無作為なワード(例:sdfg)を使用することが推奨されたりもするが、筆者は自然言語(例:落ちる猿を学習する場合はfalling monkey)で学習したところ問題なかった。好きなほうを選んでください。
⑻実行してJupiterLabを開くとrunpod-slim/ComfyUI/outputのなかに生成したキャプションのtxtファイルが入っているのですべてダウンロードする。

よくわからないが10個ずつしかダウンロードできないので、多い場合はzipでまとめてからダウンロードする。
JupiterLabのNotebookで以下を実行する
!apt update && apt install -y zip
!zip -r /workspace/output.zip /workspace/runpod-slim/ComfyUI/output
その後、Jupyterのファイルブラウザから一番上の階層の中にあるoutput.zipをダウンロード。
⑼終わった後はStop PodからTerminateをクリックして終了しないと課金し続けてしまうので注意
⑽キャプションは基本的にそのまま使えるが中身を軽く確認して修正する。
上記のワークフローをそのまま使えば以下のような内容になっている。トリガーワードを設定していればKEYWORDがそれになっている。

なるべく変えずに使うほうがよいと思われるが、間違ったキャプションがついていたり、これの下に文章が挿入されている場合があるので、微修正を推奨。また、上のキャプションでいえばno other objects or context visibleのような否定形は消したほうがよいかもしれない。
③RunpodでAI Toolkitを起動する
⑴GPUはRTX 5090を選択
⑵Pod templateのChange Templateからostrisを検索して、AI Toolkit - ostris - ui - officialを選択

⑶EditをクリックしてEnvironment variablesでパスワードを設定する。

初期設定はpasswordである。鍵のマークを押して最初に作ったパスワードの名前を選択する。そのパスワードを使ってオンラインのデータにアクセスできるようになる。

その後は②と同じ
④AI Toolkitで設定を行う
⑴左側のメニューバーのDatasetsから右上のNew Datasetをクリック

Datasetの名前は適当に

集めた画像をドラッグ&ドロップ、次にキャプションもドラッグ&ドロップ

⑵左側のメニューバーの+ New Jobから学習の設定をしていく。
変更するもの以外は全てデフォルトで良い。

⑶Training Nameは作成するLoRAの名前をつける
Trigger Wordはキャプションで使ったものと同じでよい。Trigger Wordを使わない場合は空欄でもよい。

⑷ModelはZ-image Tubo (w/Training Adapter)を選択

⑸VRAMが24gb以上の場合TransformerをNoneにすると量子化が行われず高速になる。デフォルトでも問題ない。

⑹TrainingのStepsはデフォルトで3000であるがあとから増やすのが少し面倒なため5000にした。これは何回学習するかの数値であるが、多すぎると過学習となって破綻するようになる。デフォルトでは250stepsごとにLoRAとサンプル画像が作成されるため、自分で比較してどのLoRAが適切かを見極める必要がある。筆者の体感では2000stepsから2500stepsが良さそうである。作ったLoRAはすべてダウンロードできるため、使えそうなものは全てダウンロードしておくとよい。

⑺Advancedの中にあるDo differential Guidanceをオンにする。オフでもよい。

⑻Datasetがさっき作ったものになっていることを確認する。筆者の場合、横の長さが1280pxの画像があったので1280にもチェックを入れた。

⑼Sample Promptsは途中経過のサンプル画像を出力する際のプロンプトである。そのLoRAを使用する際の基本となるようなプロンプトをいくつか入れるのがよい。同じプロンプトのものもseedを変えていくつか出力するようにしておくと比較がしやすいのでおすすめである。Trigger Wordをいれた場合は、それを入れてプロンプトを書くようにする。

④LoRAを作成
設定が終わったら右上の緑のCreate Jobを押して、右上の三角形の再生ボタンを押すと学習が始まる。

Samplesのタブにサンプル画像が表示されるのでそれを見てどのstepのものがよいかをみきわめていく。LoRAはCheckpointsのところからダウンロードできる。
終わった後はStop PodからTerminateをクリックして終了しないと課金し続けてしまうので注意