Các mô hình khuếch tán đã hỗ trợ một số bản phát hành mã nguồn mở thú vị nhất trong hai năm qua — hãy nghĩ đến FLUX.1-dev cho văn bản thành hình ảnh, hoặc Wan 2.1 và HunyuanVideo cho văn bản thành video. Thư viện 🤗 Diffusers đã trở thành ngôi nhà chung cho các mô hình này, cung cấp cho các nhà nghiên cứu và nhà phát triển một giao diện duy nhất, nhất quán cho suy luận, thích ứng và kết hợp pipeline.
Việc huấn luyện và tinh chỉnh các mô hình này cũng đang gia tăng, và điều đó đòi hỏi các công cụ xử lý phân mảnh bộ nhớ hiệu quả, lưu trữ tiềm ẩn, phân nhóm đa độ phân giải, và các cấu hình có thể mở rộng mượt mà từ một GPU đến hàng trăm GPU.
Giới thiệu thư viện mã nguồn mở NVIDIA NeMo Automodel. Hôm nay chúng tôi làm nổi bật sự hợp tác giữa NVIDIA và Hugging Face, mang đến khả năng huấn luyện khuếch tán phân tán cấp sản xuất cho bất kỳ mô hình định dạng Diffusers nào trên Hugging Face Hub — không cần chuyển đổi checkpoint, không cần viết lại mô hình cho các mô hình mới. Tích hợp này được ghi lại trong hướng dẫn huấn luyện Diffusers và hoàn toàn là mã nguồn mở theo Apache 2.0.
NeMo Automodel là gì?
NeMo Automodel là một thư viện huấn luyện mã nguồn mở PyTorch DTensor-native, một phần của khung NVIDIA NeMo. Nó được xây dựng dựa trên hai nguyên tắc thiết kế quan trọng đối với hệ sinh thái Diffusers:
Gốc Hugging Face. Trỏ
pretrained_model_name_or_pathvào bất kỳ ID mô hình Diffusers nào trên Hub và bắt đầu huấn luyện. NeMo Automodel sử dụng các lớp mô hình Diffusers (ví dụ:WanTransformer3DModel) để tải và các pipeline Diffusers (WanPipeline) để sinh. Các checkpoint quay vòng sạch sẽ trở lại hệ sinh thái Diffusers.Một chương trình, mọi quy mô. Các công thức và tập lệnh huấn luyện có thể dễ dàng sửa đổi để phù hợp với huấn luyện ở bất kỳ quy mô nào. Song song là một lựa chọn cấu hình, không phải viết lại mã — chuyển đổi giữa FSDP2, song song tensor, song song chuyên gia, song song ngữ cảnh và song song pipeline bằng cách khai báo cấu hình, không phải viết lại mô hình.
AutoModel hiện chỉ hỗ trợ các mô hình flow-matching. Bên trong, nó sử dụng flow-matching làm mục tiêu huấn luyện, với huấn luyện không gian tiềm ẩn (thông qua đầu ra VAE được mã hóa trước) và tải dữ liệu phân nhóm đa độ phân giải để tăng tốc thông lượng.
Các mô hình khuếch tán được hỗ trợ
Tích hợp NeMo Automodel đi kèm với các công thức tinh chỉnh sẵn sàng sử dụng cho các mô hình khuếch tán mở dưới đây. Danh sách phản ánh các công thức hiện có trong examples/diffusion/finetune.
Mô hìnhID Hugging FaceNhiệm vụTham sốCông thức LoRAWan 2.1 T2V 1.3B / 14BWan-AI/Wan2.1-T2V-1.3B-Diffusers / Wan-AI/Wan2.1-T2V-14B-DiffusersVăn bản thành Video1.3B (vừa trên một A100 40GB) / 14BCóWan 2.2 T2V A14BWan-AI/Wan2.2-T2V-A14B-DiffusersVăn bản thành Video27B tổng (MoE), 14B hoạt động mỗi bướcKhôngFLUX.1-devblack-forest-labs/FLUX.1-devVăn bản thành Hình ảnh12BCóFLUX.2-devblack-forest-labs/FLUX.2-devVăn bản thành Hình ảnh32BCóHunyuanVideo 1.5hunyuanvideo-community/HunyuanVideo-1.5-Diffusers-720p_t2vVăn bản thành Video13BCóQwen-ImageQwen/Qwen-ImageVăn bản thành Hình ảnh20B (MMDiT)Có
Sự hợp tác này mang lại điều gì
Đối với người dùng Diffusers, lợi ích thực tế được chia thành một số khả năng cụ thể.
Không cần chuyển đổi checkpoint. Trọng số đã huấn luyện từ Hub hoạt động ngay lập tức. Không có "định dạng huấn luyện" riêng biệt để chuyển đổi sang, rồi chuyển đổi lại. Checkpoint đã tinh chỉnh của bạn tải trực tiếp vào DiffusionPipeline để suy luận, hoặc trở lại Hub để chia sẻ. Các công cụ hạ nguồn — lượng tử hóa, biên dịch, bộ điều hợp LoRA, bộ lấy mẫu tùy chỉnh — tất cả đều tiếp tục hoạt động.
Đường dẫn nhanh đến hỗ trợ mô hình mới. Khi một mô hình khuếch tán mới xuất hiện trong Diffusers, việc kích hoạt nó trong NeMo Automodel chỉ cần một bổ sung mã nhỏ, có giới hạn — một trình xử lý tiền xử lý dữ liệu và một bộ điều hợp mô hình — thay vì một tập lệnh huấn luyện tùy chỉnh hoàn chỉnh. Phần còn lại của ngăn xếp công thức (FSDP2, tải dữ liệu phân nhóm, checkpoint, sinh) được giữ nguyên, và quy trình làm việc dựa trên YAML tương tự được áp dụng.
Tinh chỉnh toàn bộ và hiệu quả tham số. Cả tinh chỉnh toàn bộ và PEFT kiểu LoRA đều được hỗ trợ, vì vậy bạn có thể chọn giữa chất lượng tối đa (FT toàn bộ trên cụm lớn) hoặc hiệu quả tối đa (LoRA trên một nút). Cấu trúc công thức tương tự xử lý cả hai.
Huấn luyện có thể mở rộng vượt xa những gì các tập lệnh tích hợp cung cấp. NeMo Automodel bổ sung các sơ đồ phân mảnh như FSDP2, song song tensor, ngữ cảnh và pipeline, điều phối đa nút (SLURM hiện tại, Kubernetes sắp tới) và phân nhóm đa độ phân giải. Những khả năng này giúp việc huấn luyện các mô hình lớn hơn như FLUX.1-dev (12B) và HunyuanVideo (13B) trở nên khả thi.
Tổng quan về quy trình tinh chỉnh
Trong phần này, chúng tôi hướng dẫn quy trình làm việc điển hình để tinh chỉnh bất kỳ mô hình được hỗ trợ nào. Cách được khuyến nghị để cài đặt Automodel là container Docker NeMo Automodel (nvcr.io/nvidia/nemo-automodel:26.06), đi kèm với PyTorch, TransformerEngine và các phụ thuộc biên dịch CUDA khác được xây dựng sẵn. Ngoài ra, cài đặt bằng pip3 install nemo-automodel hoặc từ nguồn (pip3 install git+https://github.com/NVIDIA-NeMo/Automodel.git); xem hướng dẫn cài đặt để biết tất cả các tùy chọn.
Hướng dẫn này hướng dẫn tinh chỉnh toàn bộ transformer của FLUX.1-dev trên bộ dữ liệu tarot Rider–Waite 78 lá, sau đó sinh từ checkpoint kết quả. Nó sử dụng lại các tệp cấu hình YAML đã được kiểm tra và áp dụng các cài đặt cụ thể cho lần chạy dưới dạng ghi đè dòng lệnh, vì vậy không cần tệp cấu hình mới.
1. Mã hóa trước bộ dữ liệu
Công thức khuếch tán sử dụng các tiềm ẩn VAE được lưu trong bộ nhớ đệm và nhúng văn bản thay vì mã hóa hình ảnh nguồn trong mỗi bước huấn luyện. Truyền trực tiếp 78 hình ảnh Rider–Waite từ Hugging Face và phân phối tiền xử lý trên tất cả các GPU hiển thị:
uv run --locked --no-default-groups \
--extra diffusion \
--extra diffusion-media \
python -m tools.diffusion.preprocessing_multiprocess image \
--dataset_name multimodalart/1920-raider-waite-tarot-public-domain \
--dataset_media_column image \
--dataset_caption_column caption \
--dataset_streaming \
--max_images 78 \
--output_dir /cache/flux_tarot \
--processor flux \
--model_name black-forest-labs/FLUX.1-dev \
--max_pixels 245760
Các chú thích đã chứa token kích hoạt trtcrd. Với ngân sách pixel này và tỷ lệ khung hình dọc của bộ dữ liệu, tiền xử lý gán các mẫu vào nhóm 384×640 được sử dụng bởi lần chạy trình diễn.
Đối với huấn luyện hình ảnh, tiền xử lý tạo ra các tệp bộ nhớ đệm .pt và siêu dữ liệu phân mảnh:
/cache/flux_tarot/
├── 384x640/
│ ├── <hash1>.pt
│ └── ...
├── metadata_shard_0000.json
├── metadata.json
└── _hf_dataset/
└── images/
2. Khởi chạy huấn luyện với YAML FLUX hiện có
Sử dụng trực tiếp examples/diffusion/finetune/flux_t2i_flow.yaml. YAML đã chọn FLUX.1-dev, tinh chỉnh toàn bộ transformer, bộ điều hợp flow-matching FLUX, kích thước lô hiệu dụng là 32 và FSDP2 tám chiều.
Cung cấp các đường dẫn và cài đặt cụ thể cho tarot dưới dạng ghi đè dòng lệnh:
uv run --locked --no-default-groups --extra diffusion \
torchrun --nproc-per-node=8 \
examples/diffusion/finetune/finetune.py \
-c examples/diffusion/finetune/flux_t2i_flow.yaml \
--model.transformer_engine_fp8 false \
--data.dataloader.cache_dir /cache/flux_tarot \
--data.dataloader.base_resolution '[384,640]' \
--lr_scheduler.lr_decay_style constant \
--lr_scheduler.lr_warmup_steps 20 \
--step_scheduler.max_steps 200 \
--step_scheduler.ckpt_every_steps 50 \
--checkpoint.checkpoint_dir /tmp/flux_tarot/checkpoints/full \
--checkpoint.save_consolidated true \
--seed 2026
Lần chạy tạo ra các checkpoint tại các bước 50, 100, 150 và 200. Checkpoint cuối cùng được gắn nhãn epoch_66_step_199; nhãn bắt đầu từ 0 mặc dù nó đại diện cho bước tối ưu hóa thứ 200 đã hoàn thành.
3. Sinh từ checkpoint đã tinh chỉnh
Sử dụng YAML sinh FLUX hiện có và trỏ model.checkpoint vào checkpoint huấn luyện hoàn chỉnh:
uv run --locked --no-default-groups --extra diffusion \
python examples/diffusion/generate/generate.py \
-c examples/diffusion/generate/configs/generate_flux.yaml \
--model.checkpoint /tmp/flux_tarot/checkpoints/full/epoch_66_step_199 \
--inference.height 640 \
--inference.width 384 \
--inference.prompts '["a trtcrd of an astronaut tending a rose garden on Mars, \"the gardener\""]' \
--output.output_dir /tmp/flux_tarot/generations/full/step_200 \
--seed 2026
Bao gồm trtcrd để gọi phong cách tarot đã học. Để so sánh đối chứng, giữ nguyên seed và cảnh nhưng bỏ qua kích hoạt:
uv run --locked --no-default-groups --extra diffusion \
python examples/diffusion/generate/generate.py \
-c examples/diffusion/generate/configs/generate_flux.yaml \
--model.checkpoint /tmp/flux_tarot/checkpoints/full/epoch_66_step_199 \
--inference.height 640 \
--inference.width 384 \
--inference.prompts '["an astronaut tending a rose garden on Mars, \"the gardener\""]' \
--output.output_dir /tmp/flux_tarot/generations/control \
--seed 2026
Kết quả
Tại bước 200, các lời nhắc có kích hoạt phi hành gia giữ lại nội dung được yêu cầu trong khi có thêm bảng màu cổ điển kem, đỏ và đen, đường viền mực đậm, trường màu phẳng, tông màu giấy cũ và bố cục bài ẩn dụ. Phi hành gia không kích hoạt vẫn mang tính nhiếp ảnh, chứng minh rằng hiệu ứng đã học chủ yếu liên quan đến trtcrd thay vì thay thế mô hình cơ sở trên toàn cầu.
Lời nhắc (seed)Cơ sởĐã tinh chỉnh (bước 200)Phi hành gia chăm sóc vườn hồng trên sao Hỏa (seed 2026)
4. Hiệu suất
Tất cả các phép đo được thu thập trên một nút với 8× NVIDIA H100 80GB GPU. Kết quả là giá trị trung bình ± độ lệch chuẩn mẫu trên ba cửa sổ 10 bước ở trạng thái ổn định.
Văn bản thành hình ảnh — 512×512
Mô hìnhHuấn luyệnSong songGBS / LBSTgian bướcHình ảnh/sHình ảnh/s/GPUBộ nhớ cấp phát đỉnh/GPUFLUX.1-devToàn bộFSDP232 / 40.902 ± 0.039 s35.51 ± 1.554.44 ± 0.1963.88 GiBFLUX.1-devLoRA r64DDP48 / 60.894 ± 0.008 s53.73 ± 0.486.72 ± 0.0667.43 GiBQwen-ImageToàn bộFSDP240 / 50.974 ± 0.075 s41.21 ± 3.065.15 ± 0.3853.55 GiBQwen-ImageLoRA r64DDP24 / 30.515 ± 0.006 s46.63 ± 0.545.83 ± 0.0766.33 GiB
Văn bản thành video — 512×512×49 khung hình
Mỗi mẫu là một clip video 49 khung hình.
Mô hìnhHuấn luyệnGBS / LBSKiểm tra kích hoạtThời gian bướcClip/sClip/s/GPUBộ nhớ cấp phát đỉnh/GPUWan 2.1 1.3BToàn bộ8 / 1Tắt0.942 ± 0.038 s8.50 ± 0.351.06 ± 0.046.09 GiBWan 2.1 14BToàn bộ8 / 1Bật3.798 ± 0.017 s2.107 ± 0.0060.263 ± 0.00633.35 GiBWan 2.1 14BLoRA r6416 / 2Bật7.585 ± 0.014 s2.110 ± 0.0000.263 ± 0.00024.07 GiBWan 2.2 A14B, nhiễu caoToàn bộ8 / 1Bật4.628 ± 0.031 s1.730 ± 0.0100.217 ± 0.00623.57 GiBHunyuanVideo 1.5Toàn bộ8 / 1Bật5.926 ± 0.046 s1.350 ± 0.0100.170 ± 0.00015.90 GiBHunyuanVideo 1.5LoRA r648 / 1Bật5.575 ± 0.006 s1.433 ± 0.0060.180 ± 0.00010.58 GiB
Chi tiết đo lường
Phần cứng: 8× H100 80GB HBM3, kết nối NVLink đầy đủ.
Bộ dữ liệu hình ảnh:
lambda/naruto-blip-captions, 256 mẫu được lưu trong bộ nhớ đệm.Bộ dữ liệu video:
svjack/Lelouch_Vi_Britannia_FramePack_First_Last_Frame_Video_Captioned, 112 mẫu được lưu trong bộ nhớ đệm.Các lô đầy đủ được thực thi với
drop_last=true.Ghi checkpoint đã bị vô hiệu hóa.
Thời gian bước bao gồm tải dữ liệu, forward, backward, cắt gradient, tối ưu hóa và công việc của bộ lập lịch.
Bộ nhớ là mức sử dụng bộ cấp phát CUDA PyTorc đỉnh, không phải tổng bộ nhớ thiết bị NVML.
Các ví dụ tinh chỉnh/LoRA khác
Các kết quả từ tinh chỉnh và LoRA cho thấy sức mạnh của NeMo Automodel trong việc chuyên biệt hóa miền. Ví dụ, tinh chỉnh mô hình Wan 2.1 trên bộ dữ liệu video Ghibli đã thích ứng thành công phong cách đầu ra, thể hiện qua sự thay đổi đáng chú ý trong diện mạo của một bông hoa so với cơ sở.
Cơ sở:
Đã tinh chỉnh trên video Ghibli:
Chúng tôi cũng quan sát thấy tác động rõ rệt của việc sử dụng LoRA, khi áp dụng bộ điều hợp vào Wan 2.1 khiến video mang phong cách Ghibli đặc trưng, đặc biệt thấy rõ ở điểm nhấn mắt của nhân vật.
Không LoRA:
LoRA:
Các ví dụ này, bao gồm cả cho FLUX.2, xác nhận rằng người dùng có thể đạt được cả chất lượng tối đa thông qua tinh chỉnh toàn bộ và hiệu quả tối đa thông qua PEFT kiểu LoRA, điều chỉnh đầu ra cho các miền phong cách cụ thể.
Hãy dùng thử ngay hôm nay
Tìm hiểu thêm về tích hợp và khám phá thêm các ví dụ tinh chỉnh trong tài liệu NeMo Automodel
Sắp tới: API công thức Pythonic
YAML rất phù hợp cho cấu hình có thể tái tạo, đặc biệt đối với các nhóm muốn có các tệp có thể kiểm tra, xem xét và tái sử dụng, nhưng nhiều nhóm cũng cần một giao diện lập trình.
Trong bản phát hành NeMo Automodel sắp tới, chúng tôi dự định sẽ cung cấp các công thức khuếch tán thông qua một API Pythonic được gõ đầy đủ. Người dùng sẽ có thể kết hợp trực tiếp từ Python cùng một mô hình, dữ liệu, bộ tối ưu hóa, PEFT/LoRA, song song, checkpoint và các phần sinh.
Đường dẫn Pythonic nhằm mục đích làm cho các công thức dễ sử dụng hơn từ mã huấn luyện hiện có, sổ ghi chép và quy trình thử nghiệm, đồng thời cung cấp một giao diện Pythonic hạng nhất song song với đường dẫn khởi động nhanh YAML.













