[Lora] Z Image Turbo 與 AI-Toolkit

ZIT with Lora

最近 Z Image Turbo 很紅,加上 AI-Toolkit 目前支援度還算不錯,所以也順手測試了一下。大抵上來說,由於是蒸餾模型,所以訓練起來比一般模型來得奇怪一點。

我就跑了幾個,有興趣的人可以去我的 C 站 看看。


Z Image Turbo 訓練器

AI-ToolkitKohya Musubi-Tuner 比起來算是很懶人的訓練器,加上作者做了相關的 Adapter 可以幫助 Z Image Turbo(後面都簡稱 ZIT) 訓練,所以關於 ZIT 的 Lora 就像雨後春筍般瘋狂的冒出來。

其實還有一套 None Z Image Turbo Trainer 是專門針對 ZIT 開發,其中採用的一些方法也是挺特殊的,不過相對的設定跟 VRAM 的需求比較嚴苛一點,所以對新手來說沒有 AI-Toolkit 那麼友善。

這邊就先針對 AI-Toolkit 的部分來做 Lora 的訓練,也順便說明一下關於訓練的相關設定。

AI-Toolkit 訓練器設定

AI-Toolkit 的 GUI 非常的懶人,所以如果照著作者提供的影片教學,看完應該就能上手訓練 ZIT Lora。

AI-Toolkit - Z Image Turbo Lora

設定的部分有幾點需要注意:

  1. 截至目前為止,他只能訓練 Lora。
  2. Batch Size 只能設定 1,不然會故障。
  3. Steps 設定 5000 或以上效果比較好一點。
  4. Cache Text Embeddings 記得打開。
  5. Use EMA 好像壞了(Issue #524)開了貌似沒作用。
  6. Dataset 訓練集的部分,打開 Cache Latents
  7. 可以只訓練一種解析度就好,預設是三種 512, 768, 1024,你可以只訓練 1024
  8. ADVANCED 打開,把 Do Differential Guidance 打開,Differential Guidance Scale 設定為 3,會學的比較快。
  9. Simple Prompts 可以只留下一個就好(省點時間)。

以上就是比較基本的設定,照這些設定就可以先跑一個 Lora 來看看有沒有你要的結果。

ps. 我這裡的 5000 Steps 訓練對象是 10K 資料集,請自行斟酌。


進階設定

AI-Toolkit 除了 GUI 以外,右上角可以打開 Show Advanced 的模式,他是一個 yaml 的結構文件,要注意一件事情,當你在 Show Advanced 修改過後,如果切回 Show Simple 但是畫面壞了,那就表示你把設定改壞了。

在你確定你知道自己在做什麼事情的情況下,Show Advanced 可以修改一些在 GUI 裡面沒有的東西。

  1. Datasets 可以設定重複次數(num_repeats),就是 Kohya 的資料夾名稱前面的那個 數字
  2. optimizer 可以換成 lion, lion8bit, prodigy, prodigy8bit, adam, adamw, adam8, adamw8, ademamix8bit, adagrad, automagic
  3. lr_scheduler 預設是 constant,可以改為 cosine, cosine_with_restart, constant_with_warmup, linear, step
  4. constant_with_warmup 需要在 lr_scheduler_params 當中設定 num_warmup_steps 預設 1000
  5. cosine_with_restarts 需要在 lr_scheduler_params 當中設定 total_itersmax_iterations,其中 max_iterations 設定與總步數相同,total_iters 設定為多少 Steps 後要重新啟動餘弦退火(目前此設定有問題,需要改 Code)。
  6. optimizer_params 可以根據不同的 Optimizer 去設定不同的超參數。

其餘的設定基本上在 GUI 都有,當然,你設定完上述的功能後,就不要再切回 GUI 去改動到相關設定,不然你就得重來。


訓練結果驗證

訓練完成之後就使用 ComfyUI 基本的工作流就能驗證效果。

Z Image Turbo with Lora

有了訓練結果之後,我就可以來做其他的事情了,例如,融合。


融合 ZIT Lora

根據 AI-Toolkit 所訓練出來的 Lora 結構,我把他攤開來看,大概長這樣:

diffusion_model.layers.0.attention.to_out.0.lora_A.weight
diffusion_model.layers.0.attention.to_k.lora_B.weight
diffusion_model.layers.0.attention.to_out.0.lora_B.weight
diffusion_model.layers.0.adaLN_modulation.0.lora_B.weight
diffusion_model.layers.0.feed_forward.w1.lora_B.weight
diffusion_model.layers.0.attention.to_v.lora_B.weight
diffusion_model.layers.0.adaLN_modulation.0.lora_A.weight
diffusion_model.layers.0.feed_forward.w1.lora_A.weight
diffusion_model.layers.0.feed_forward.w2.lora_A.weight
diffusion_model.layers.0.attention.to_q.lora_B.weight
diffusion_model.layers.0.feed_forward.w2.lora_B.weight
diffusion_model.layers.0.attention.to_q.lora_A.weight
diffusion_model.layers.0.attention.to_k.lora_A.weight
diffusion_model.layers.0.attention.to_v.lora_A.weight
diffusion_model.layers.0.feed_forward.w3.lora_A.weight
diffusion_model.layers.0.feed_forward.w3.lora_B.weight

總共有 30 個 layers,所以我們可以針對這 30 個 layers 來做權重的增減,接著把 Lora 給拼起來。根據 AI 給我的解釋(以下無法保證對錯,請自行斟酌參考):

名稱 主要影響層面 說明
adaLN_modulation (自適應層歸一化調製) 全局氛圍、光影、色彩基調、整體對比度 這是模型的「指揮中心」,負責接收 時間步(Timestep)和提示詞(Prompt) 的全局嵌入。它決定了圖像的「畫風」和「光效」。如果你發現 LoRA 生成的圖片顏色偏灰或光影不對,通常與這一層的權重有關。它將提示詞中的全局資訊(如:「懷舊感」、「電影感」)分配到後續的處理中。
Attention (注意力機制) - 這是模型的「結構與關聯中心」,負責決定圖像中各個部分(物體與物體、文字與物體)之間的關係。
attention.to_q, attention.to_k 構圖、物體佈局、提示詞理解、空間邏輯 Q 和 K 的匹配決定了模型「關注哪裡」。它們決定了你的提示詞(如:貓坐在沙發上)是否能正確轉換為構圖(貓確實出現在沙發上,而不是沙發旁邊)。
attention.to_v 特徵細節、主題內容、材質質感 一旦決定了關注點,V 則包含了該點應該具備的「內容」。它直接影響主題的長相。
attention.to_out 整合性、圖像完整度 將注意力機制的計算結果重新投影回主流程,確保構圖與背景融合自然。
Feed Forward (前饋網路) - 這是模型的「知識庫與細節加工廠」
w1, w2, w3 (通常為 SwiGLU 結構) 五官細節、服裝紋理、背景複雜度、具體物件的特徵 如果 Attention 決定了「這裡有個五官」,FFN 則決定了「這個眼睛的睫毛長什麼樣」。它是儲存具體視覺知識(如:某種特定制服的設計、某個特定藝人的臉部特徵)最集中的地方。

全方位影響的對照:

影響層面 關鍵組件 說明
提示詞遵循度 adaLN, to_q, to_k 決定模型是否聽懂你的指令,並將元素放在正確位置。
構圖與佈局 to_q, to_k 決定主體的大小、位置以及與背景的空間關係。
主題與臉部 (五官) to_v, w1, w2, w3 決定人物像不像、五官是否精緻、皮膚紋理。
服裝與細節 w1, w2, w3 處理衣服的褶皺、鈕扣細節、珠寶裝飾。
背景與環境 to_q, to_k, to_out 決定背景的複雜度,以及主體與環境的融合度。
顏色與光影 adaLN, to_v 影響飽和度、色調平衡、光照來源與強弱。

以上無法保證對錯,請自行斟酌參考!

然後,我做了一個小工具:

modify_zlora.py

他可以調整單一,或是融合多個不同的 ZIT Lora,然後根據上述的區塊來調整出你想要的結果。

請留意,關於 --ratio 是必填,而其他的區塊權重,會先乘上 --ratio 之後再相加。


小結

其實我不會寫 python,那個工具是我給概念,然後請 Claude 幫我寫的。

Hina Chen
偏執與強迫症的患者,算不上是無可救藥,只是我已經遇上我的良醫了。
Taipei