
musubi-tunerがv0.3.4でKrea 2のLoRA学習に対応しました(実験的サポート)。
RAWモデルで学習してTurboモデルで生成する流れで、VRAM16GBのGPUでも回せます。
今回はそのコマンドと設定を紹介します。
- musubi-tunerでKrea 2のLoRAを学習するコマンドと設定
- VRAM16GBに収めるためのfp8とblock swapの指定
- 学習したLoRAをTurboモデルで動かす方法
学習の流れ
Krea 2のLoRAは、RAWモデルで学習してTurboモデルで生成するのが公式の推奨ワークフローです。
Turboは蒸留済みなので学習には向かず、逆にRAWは標準で28ステップ+CFGが必要で生成が重い、という住み分けになっています。
なので今回はRAWモデルで学習してTurboモデルで生成するまでを試してみます。
なお、Turboモデルでの生成はComfyUI側でやってるのでこちらの記事を参考にしてください。

用意するモデル
必要なファイルは3つです。
すでにVAEやテキストエンコーダをComfyUIで使っている場合は、そのパスを指定すれば使えます。
私は分かりやすいように、musubi-tunerの中にmodelsフォルダを作って、そこに置きました。
| 用途 | モデル | ファイル |
| DiT(学習用) | Krea 2 RAW | raw.safetensors(krea/Krea-2-Raw) |
| VAE | Qwen-Image VAE | qwen_image_vae.safetensors(Comfy-Org/Qwen-Image-Edit_ComfyUI の split_files/vae) |
| Text Encoder | Qwen3-VL-4B-Instruct | qwen3vl_4b_bf16.safetensors(Comfy-Org/Qwen3-VL の text_encoders) |
データセットの設定
学習画像と、同じ名前の.txtキャプションを同じフォルダに置きます。
キャプションは画像さえあればTAGGUIなどのツールで簡単に作成できます。
あとはテキストファイルに以下を書き、krea2.tomlのように拡張子をtomlにして保存します。
学習時に使用する一般的な設定とデータセットのパスを指定するものです。
これもmusubi-tuner内にtomlフォルダを作って、その中に置きました。
[general]
resolution = [1024, 1024]
caption_extension = ".txt"
batch_size = 1
enable_bucket = true
bucket_no_upscale = true
[[datasets]]
#画像とキャプションがあるフォルダ
image_directory = "E:\\dataset\\dataset_krea2"
#キャッシュを保存するフォルダ
cache_directory = "E:\\musubi-tuner\\dataset\\cache_krea2"
num_repeats = 1学習データを事前キャッシュする
学習の前に、latentとテキストエンコーダ出力をキャッシュします。
これにより学習処理が軽くなるそうです。
また単なる高速化オプションではなく、Krea 2の学習フロー上は事前実行が必要とのこと。
latentのキャッシュはtomlとvaeのパスを指定してスクリプトを実行します。
python src/musubi_tuner/krea2_cache_latents.py `
--dataset_config toml/krea2.toml `
--vae models/qwen_image_vae.safetensorsこっちもtomlとテキストエンコーダのパスを指定して実行します。
python src/musubi_tuner/krea2_cache_text_encoder_outputs.py `
--dataset_config toml/krea2.toml `
--text_encoder models/qwen3vl_4b_bf16.safetensors `
--batch_size 1学習を実行する(VRAM16GBの設定)
学習はkrea2_train_network.pyを使い、RAWのDiTを指定します。
あくまで一例ですが、私の環境だとこれで実行できました。
.\venv\Scripts\accelerate.exe launch `
--num_cpu_threads_per_process 1 `
--mixed_precision bf16 `
src\musubi_tuner\krea2_train_network.py `
--dit "models/raw.safetensors" `
--vae "models/qwen_image_vae.safetensors" `
--dataset_config "toml\krea2.toml" `
--sdpa `
--mixed_precision bf16 `
--timestep_sampling shift `
--weighting_scheme none `
--discrete_flow_shift 2.5 `
--optimizer_type adamw8bit `
--learning_rate 8e-5 `
--gradient_checkpointing `
--fp8_base `
--fp8_scaled `
--blocks_to_swap 26 `
--max_data_loader_n_workers 2 `
--persistent_data_loader_workers `
--network_module networks.lora_krea2 `
--network_dim 32 `
--network_alpha 32 `
--max_train_steps 3000 `
--seed 42 `
--output_dir "output" `
--output_name "krea2_lora_sample" `
--save_every_n_steps 300 `
--save_state 主なパラメータ
| オプション | 値 | 説明 |
| –network_module | networks.lora_krea2 | Krea 2専用のLoRAモジュール。必須 |
| –network_dim / –network_alpha | 32 / 32 | モデル作者の推奨デフォルト |
| –timestep_sampling | shift | 推論時と同じ解像度依存のshiftを再現する。bucketで解像度が変わる学習向き |
| –optimizer_type | adamw8bit | 省メモリのオプティマイザ |
| –learning_rate | 8e-5 | 12GB VRAMで成功したというReddit事例を参考 公式は1e-4 |
| –fp8_base –fp8_scaled | — | DiTをfp8にする。2つセットで指定 |
| –blocks_to_swap | 0〜26 | ブロックをCPUに逃がす。最大26 |
| –save_state | 途中から再開するための引数 |
save_stateは途中で止めても続きからできるオプションです。
これを付けて実行するとkrea2_lora_sample-step00001000-stateみたいな再開用のフォルダも作られます。
再開時は –resume を追加すれば続きから実行可能です。
--resume "output\krea2_lora_sample-step00001000-state"ただmax_train_stepsは続きからでも値分学習するので、max_train_stepsを3,000に設定して1,000ステップ実行したあとに再開するなら2000にするなど調整が必要です。
学習したLoRAで生成
3,000ステップの学習には、RTX 4060 Ti(VRAM 16GB)で約16時間かかりました。
あとは出力されたLoRAをComfyUIやSDWebUI Neoなどで使用すれば確認できます。
・学習した元画像

・作ったLoRAで生成した画像

まとめ
リアル系のLoRAを作るなら、Krea 2はかなり再現しやすいと感じました。
パラメータ調整とかすればもっと寄せられる気もしますが、デフォルトの設定でもかなり元画像に近いものを再現できています。
三次元系はQwenが優秀なイメージだったんですけど、生成が結構重たいので、執筆時点ではKrea 2が一番良い結果を出せました。
学習に時間がかかるので気軽に試行錯誤できないのが少しネックですが、musubi-tunerならスペックに合わせて自由に設定可能なので、興味のある方は試してみてください。
以上musubi-tunerでのKrea 2のLoRA学習を紹介しました。
参考になれば幸いです。

