擴散模型(Diffusion models)驅動了過去兩年來許多令人振奮的開源專案,例如用於文字生成圖像的 FLUX.1-dev,以及用於文字生成影片的 Wan 2.1 和 HunyuanVideo。🤗 Diffusers 函式庫已成為這些模型的實際標準平台,為研究人員和開發者提供了統一且一致的介面,可用於推論、調整和管線組合。
此外,擴散模型的訓練與微調需求也日益增加,這需要具備記憶體高效分片、潛在快取、多解析度分桶等功能,以及能從單一 GPU 順暢擴展至數百個 GPU 的配置工具。
為滿足這些技術需求,我們推出了開源函式庫 NVIDIA NeMo Automodel。今天,我們特別強調 NVIDIA 與 Hugging Face 之間的合作,這項合作將生產級別的分布式擴散模型訓練帶給 Hugging Face Hub 上任何 Diffusers 格式的模型,且無需進行檢查點轉換或為新模型重寫程式碼。
此整合已記錄在 Diffusers 訓練指南中,並以 Apache 2.0 授權完全開源。
NeMo Automodel 是 NVIDIA NeMo 框架的一部分,一個開源的 PyTorch DTensor 原生訓練函式庫,其設計圍繞著對 Diffusers 生態系統至關重要的兩個原則:
Hugging Face 原生支援:只需將 pretrained_model_name_or_path 指向 Hub 上的任何 Diffusers 模型 ID,即可開始訓練。NeMo Automodel 使用 Diffusers 模型類別(例如 WanTransformer3DModel)進行載入,並使用 Diffusers 管線(WanPipeline)進行生成。檢查點可以乾淨地往返於 Diffusers 生態系統。
單一程式碼,適用任何規模:訓練配方和腳本可以輕鬆修改以適應任何規模的訓練。平行化是一種配置選項,而非程式碼重寫,您可以透過宣告配置來切換 FSDP2、張量平行、專家平行、上下文平行和管線平行,而無需重寫模型。
目前,Automodel 僅支援流匹配模型(flow-matching models)。其底層使用流匹配作為訓練目標,並透過潛在空間訓練(經由預編碼的 VAE 輸出)和多解析度分桶資料載入來加速吞吐量。
NeMo Automodel 整合提供了針對以下開源擴散模型的即用型微調配方。這些模型包括 Wan 2.1、Wan 2.2 T2V、FLUX.1-dev、FLUX.2-dev、HunyuanVideo 1.5 和 Qwen-Image,涵蓋了文字生成影片和文字生成圖像等任務,並支援不同規模的參數數量。
對於 Diffusers 的使用者而言,這次合作帶來了幾項具體的實用優勢。
無需檢查點轉換:來自 Hub 的預訓練權重可以直接使用,無需轉換為單獨的「訓練格式」再轉換回來。您微調後的檢查點可以直接載入到 DiffusionPipeline 進行推論,或重新上傳到 Hub 進行分享。所有下游工具,如量化、編譯、LoRA 轉接器和自訂取樣器,都能繼續正常運作。
快速支援新模型:當新的擴散模型進入 Diffusers 時,在 NeMo Automodel 中啟用它只需少量且獨立的程式碼新增,例如資料預處理處理器和模型轉接器,而無需完整的自訂訓練腳本。其餘的配方堆疊(FSDP2、分桶資料載入、檢查點、生成)保持不變,並適用相同的 YAML 驅動工作流程。
完整與參數高效微調:同時支援完整微調(full fine-tuning)和 LoRA 風格的參數高效微調(PEFT),您可以根據需求選擇最高品質(在大型叢集上進行完整微調)或最高效率(在單一節點上進行 LoRA 微調)。相同的配方結構可以處理這兩種情況。
超越內建腳本的可擴展訓練:NeMo Automodel 增加了分片方案,例如 FSDP2、張量平行、上下文平行和管線平行,以及多節點協調(目前支援 SLURM,未來將支援 Kubernetes)和多解析度分桶。這些功能使得訓練 FLUX.1-dev (12B) 和 HunyuanVideo (13B) 等大型模型成為可能。
本節將介紹微調任何支援模型的典型工作流程。建議的 Automodel 安裝方式是使用 NeMo Automodel Docker 容器 (nvcr.io/nvidia/nemo-automodel:26.06),其中預建了 PyTorch、TransformerEngine 和其他 CUDA 編譯的依賴項。
或者,也可以透過 pip3 install nemo-automodel 或從原始碼安裝 (pip3 install git+https://github.com/NVIDIA-NeMo/Automodel.git);請參閱安裝指南以了解所有選項。
本指南將逐步說明如何在 78 張 Rider–Waite 塔羅牌資料集上對 FLUX.1-dev 進行完整轉換器微調,然後從生成的檢查點進行生成。它重複使用已檢查的 YAML 配置,並將特定執行的設定作為命令列覆寫,因此無需新的配置文件。
擴散配方會使用快取的 VAE 潛在向量和文字嵌入,而非在每個訓練步驟中編碼原始圖像。直接從 Hugging Face 串流 78 張 Rider–Waite 圖像,並將預處理分佈到所有可見的 GPU 上。對於圖像訓練,預處理會產生 .pt 快取檔案和分片的中繼資料。
直接使用 examples/diffusion/finetune/flux_t2i_flow.yaml。該 YAML 已選定 FLUX.1-dev、完整轉換器微調、FLUX 流匹配轉接器、有效批次大小 32,以及八向 FSDP2。執行後會在步驟 50、100、150 和 200 產生檢查點。
最終檢查點標記為 epoch_66_step_199;儘管它代表已完成的第 200 個優化器步驟,但標籤是從零開始的。
使用現有的 FLUX 生成 YAML,並將 model.checkpoint 指向完整的訓練檢查點。為了調用學習到的塔羅牌風格,請在提示詞中包含 trtcrd。為了進行對照比較,可以保持種子和場景不變,但省略觸發詞。
在第 200 步時,帶有觸發詞的太空人提示詞保留了其請求的內容,同時獲得了奶油色、紅色和黑色的復古調色板、濃重的墨水輪廓、平坦的色彩區域、舊紙張色調和寓言式的卡片構圖。未帶觸發詞的太空人圖像則保持攝影風格,這表明學習到的效果主要與 trtcrd 相關聯,而非全面取代基礎模型。
所有測量均在配備 8 個 NVIDIA H100 80GB GPU 的單一節點上進行。結果是三個穩定狀態下 10 步視窗的平均值 ± 樣本標準差。
在文字生成圖像方面,針對 FLUX.1-dev 和 Qwen-Image 模型,無論是完整微調(Full FT)還是 LoRA r64 微調,都展示了高效能。例如,FLUX.1-dev 在 FSDP2 完整微調下,每秒可處理 35.51 張圖像,而 LoRA r64 微調則可達 53.73 張圖像/秒。
在文字生成影片方面,針對 Wan 2.1、Wan 2.2 A14B 和 HunyuanVideo 1.5 模型,也提供了詳細的效能數據。例如,Wan 2.1 1.3B 在完整微調下,每秒可處理 8.50 個影片片段,而 HunyuanVideo 1.5 在 LoRA r64 微調下,每秒可處理 1.433 個影片片段。
測量細節:硬體採用 8 個完全 NVLink 連接的 H100 80GB HBM3 GPU。圖像資料集為 lambda/naruto-blip-captions,包含 256 個快取樣本。影片資料集為 svjack/Lelouch_Vi_Britannia_FramePack_First_Last_Frame_Video_Captioned,包含 112 個快取樣本。
強制使用完整批次(drop_last=true),並停用檢查點寫入。步驟時間包含資料載入、前向傳播、反向傳播、梯度裁剪、優化器和排程器的工作。記憶體為 PyTorch CUDA 的峰值分配量。



