NVIDIA จับมือ Hugging Face เปิดตัว NeMo Automodel ยกระดับการ Fine-tune โมเดลวิดีโอและรูปภาพระดับสเกล

โพสต์ร่วมจาก NVIDIA และ Hugging Face ขอขอบคุณ Sayak Paul จาก Hugging Face เป็นพิเศษสำหรับส่วนร่วมในงานผสานรวมและสำหรับการร่วมเขียนบล็อกนี้

โมเดล Diffusion กลายเป็นหัวใจสำคัญของโปรเจกต์โอเพนซอร์สที่น่าจับตามองที่สุดในช่วงสองปีที่ผ่านมา ไม่ว่าจะเป็น FLUX.1-dev สำหรับการสร้างภาพจากข้อความ (text-to-image) หรือ Wan 2.1 และ HunyuanVideo สำหรับการสร้างวิดีโอ (text-to-video) โดยไลบรารี 🤗 Diffusers ได้กลายเป็นมาตรฐานหลักที่ช่วยให้นักวิจัยและผู้สร้างมีอินเทอร์เฟซเดียวในการทำ inference, adaptation และ pipeline composition

ปัจจุบันความต้องการในการเทรนและการ Fine-tuning โมเดล diffusion เพิ่มสูงขึ้นอย่างต่อเนื่อง ซึ่งจำเป็นต้องมีเครื่องมือที่รองรับการจัดการหน่วยความจำที่มีประสิทธิภาพ (memory-efficient sharding), การทำ latent caching, multiresolution bucketing และการขยายสเกลจาก GPU ตัวเดียวไปจนถึงหลายร้อยตัวได้อย่างราบรื่น เพื่อตอบโจทย์เหล่านี้ เราจึงเปิดตัวไลบรารีโอเพนซอร์ส NVIDIA NeMo Automodel ซึ่งเป็นความร่วมมือระหว่าง NVIDIA และ Hugging Face เพื่อนำการเทรนแบบ distributed diffusion ระดับโปรดักชั่นมาสู่โมเดลตระกูล Diffusers บน Hugging Face Hub โดยไม่จำเป็นต้องแปลง checkpoint หรือเขียนโค้ดโมเดลใหม่ การผสานรวมนี้ถูกบันทึกไว้ใน Diffusers training guide และเปิดใช้งานเป็นโอเพนซอร์สภายใต้ Apache 2.0

สารบัญ

NeMo Automodel คืออะไร?

NeMo Automodel เป็นไลบรารีการเทรนแบบ PyTorch DTensor-native โอเพนซอร์ส ซึ่งเป็นส่วนหนึ่งของ NVIDIA NeMo framework ที่สร้างขึ้นด้วยหลักการสำคัญ 2 ประการสำหรับระบบนิเวศ Diffusers:

  • Hugging Face native: เพียงระบุ pretrained_model_name_or_path ไปยัง model ID ของ Diffusers บน Hub ก็เริ่มเทรนได้ทันที โดยใช้คลาสโมเดลของ Diffusers (เช่น WanTransformer3DModel) ในการโหลด และใช้ Diffusers pipelines (WanPipeline) ในการสร้างภาพ ทำให้สามารถนำ checkpoint กลับมาใช้งานในระบบนิเวศของ Diffusers ได้อย่างไร้รอยต่อ
  • โปรแกรมเดียว รองรับทุกระดับสเกล: สูตร (recipes) และสคริปต์การเทรนสามารถปรับแต่งได้ง่ายเพื่อรองรับการเทรนในทุกระดับสเกล โดย Parallelism เป็นเพียงตัวเลือกในการตั้งค่า (configuration) ไม่ต้องเขียนโค้ดใหม่ คุณสามารถสลับระหว่าง FSDP2, tensor parallel, expert parallel, context parallel และ pipeline parallel ได้ผ่านการประกาศค่าในไฟล์ตั้งค่า

ปัจจุบัน AutoModel รองรับเฉพาะโมเดล flow-matching โดยใช้เทคนิค flow matching เป็นเป้าหมายการเทรน ร่วมกับการเทรนใน latent-space (ผ่านเอาต์พุต VAE ที่ pre-encoded ไว้) และการโหลดข้อมูลแบบ multiresolution bucketed เพื่อเพิ่มความเร็วในการทำงาน (throughput)

โมเดล diffusion ที่รองรับ

NeMo Automodel มาพร้อมกับสูตรการ fine-tuning ที่พร้อมใช้งานสำหรับโมเดล diffusion ดังนี้ (รายการตามสูตรปัจจุบันใน examples/diffusion/finetune):

โมเดลHugging Face IDงานพารามิเตอร์สูตร LoRA
Wan 2.1 T2V 1.3B / 14BWan-AI/Wan2.1-T2V-1.3B-Diffusers Wan-AI/Wan2.1-T2V-14B-DiffusersText-to-Video1.3B (รองรับ A100 40GB ตัวเดียว) / 14Bมี
Wan 2.2 T2V A14BWan-AI/Wan2.2-T2V-A14B-DiffusersText-to-Videoรวม 27B (MoE), 14B ขณะทำงานไม่มี
FLUX.1-devblack-forest-labs/FLUX.1-devText-to-Image12Bมี
FLUX.2-devblack-forest-labs/FLUX.2-devText-to-Image32Bมี
HunyuanVideo 1.5hunyuanvideo-community/HunyuanVideo-1.5-Diffusers-720p_t2vText-to-Video13Bมี
Qwen-ImageQwen/Qwen-ImageText-to-Image20B (MMDiT)มี

ความร่วมมือนี้ช่วยปลดล็อกอะไรบ้าง

สำหรับผู้ใช้ Diffusers ความร่วมมือนี้มุ่งเน้นการเพิ่มขีดความสามารถที่จับต้องได้จริงดังนี้:

ไม่ต้องแปลง checkpoint: สามารถใช้น้ำหนักโมเดล (weights) จาก Hub ได้ทันที ไม่ต้องมีขั้นตอนการแปลงสลับรูปแบบไปมา โดย checkpoint ที่ผ่านการ fine-tune แล้วสามารถโหลดเข้าสู่ DiffusionPipeline เพื่อทำ inference หรืออัปโหลดกลับไปยัง Hub ได้โดยตรง ทำให้ยังใช้งานเครื่องมืออื่นๆ เช่น quantization, LoRA adapters หรือ custom samplers ได้เหมือนเดิม

ทางลัดรองรับโมเดลใหม่: เมื่อมีโมเดล diffusion ใหม่บน Diffusers การเพิ่มการรองรับใน NeMo Automodel จะทำได้เร็วมาก เพียงเพิ่มโค้ดเล็กน้อยในส่วนการประมวลผลข้อมูลและ model adapter โดยไม่ต้องเริ่มเขียนสคริปต์การเทรนใหม่ทั้งหมด

ยืดหยุ่นทั้ง Full Fine-tuning และ LoRA: รองรับทั้งการทำ Full fine-tuning เพื่อคุณภาพสูงสุดบนคลัสเตอร์ขนาดใหญ่ หรือจะเลือกทำ LoRA (PEFT) เพื่อความประหยัดและรวดเร็วบนโหนดเดียว โดยใช้โครงสร้างสูตรเดียวกันจัดการ

ขยายสเกลได้เหนือกว่าสคริปต์พื้นฐาน: NeMo Automodel เพิ่มการทำ sharding ขั้นสูง เช่น FSDP2, tensor, context และ pipeline parallelisms รวมถึงการจัดการหลายโหนด (รองรับ SLURM และกำลังพัฒนาสำหรับ Kubernetes) ทำให้การเทรนโมเดลขนาดใหญ่ระดับ FLUX.1 (12B) หรือ HunyuanVideo (13B) เป็นเรื่องที่เป็นไปได้

ภาพรวมของขั้นตอนการ Fine-tuning

วิธีที่แนะนำในการใช้งานคือผ่าน NeMo Automodel Docker container (nvcr.io/nvidia/nemo-automodel:26.06) ที่ติดตั้ง PyTorch และ TransformerEngine มาให้แล้ว หรือติดตั้งผ่าน pip3 install nemo-automodel ดูรายละเอียดได้ที่ คู่มือการติดตั้ง

ในตัวอย่างนี้ เราจะสาธิตการทำ full fine-tune ของ FLUX.1-dev โดยใช้ Rider–Waite tarot dataset จำนวน 78 ใบ โดยใช้ YAML config เดิมและปรับเปลี่ยนค่าผ่าน command-line

1. การ Pre-encode ชุดข้อมูล

เราจะใช้ VAE latents และ text embeddings ที่แคชไว้เพื่อความสะดวก โดยดึงภาพจาก Hugging Face และประมวลผลผ่าน GPU ทั้งหมด:

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

ผลลัพธ์จะได้ไฟล์แคช .pt และ metadata ที่จัดระเบียบพร้อมสำหรับการเทรน:

/cache/flux_tarot/
├── 384x640/
   ├── <hash1>.pt
   └── ...
├── metadata_shard_0000.json
├── metadata.json
└── _hf_dataset/
    └── images/

2. เริ่มการเทรนด้วย FLUX YAML ที่มีอยู่

ใช้สคริปต์ finetune.py ร่วมกับไฟล์ YAML มาตรฐานของ FLUX พร้อมระบุพาธและพารามิเตอร์ที่ต้องการ:

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

3. สร้างภาพจาก checkpoint ที่ fine-tune แล้ว

ทดสอบการสร้างภาพโดยใช้ checkpoint ที่สเต็ป 200:

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

ผลลัพธ์

ที่สเต็ป 200 เมื่อใช้ trigger token trtcrd ภาพที่ได้จะเปลี่ยนจากภาพถ่ายปกติเป็นสไตล์ไพ่ทาโรต์ที่มีสีวินเทจและเส้นหมึกชัดเจน ในขณะที่หากไม่ใส่ keyword นี้ ภาพจะมีสไตล์แบบเดิม แสดงให้เห็นว่าโมเดลเรียนรู้สไตล์ใหม่ได้อย่างแม่นยำโดยไม่ทำลายความรู้เดิม

พรอมต์ (seed)พื้นฐานFine-tuned (สเต็ป 200)
นักบินอวกาศดูแลสวนกุหลาบบนดาวอังคาร (seed 2026)NVIDIA จับมือ Hugging Face เปิดตัว NeMo Automodel ยกระดับการ Fine-tune โมเดลวิดีโอและรูปภาพระดับสเกลNVIDIA จับมือ Hugging Face เปิดตัว NeMo Automodel ยกระดับการ Fine-tune โมเดลวิดีโอและรูปภาพระดับสเกล
นักบินอวกาศในสวนใต้แสงจันทร์บนดาวอังคาร (seed 2028)NVIDIA จับมือ Hugging Face เปิดตัว NeMo Automodel ยกระดับการ Fine-tune โมเดลวิดีโอและรูปภาพระดับสเกลNVIDIA จับมือ Hugging Face เปิดตัว NeMo Automodel ยกระดับการ Fine-tune โมเดลวิดีโอและรูปภาพระดับสเกล
นักบินอวกาศปลูกต้นกล้าใต้ดวงจันทร์สองดวง (seed 2029)NVIDIA จับมือ Hugging Face เปิดตัว NeMo Automodel ยกระดับการ Fine-tune โมเดลวิดีโอและรูปภาพระดับสเกลNVIDIA จับมือ Hugging Face เปิดตัว NeMo Automodel ยกระดับการ Fine-tune โมเดลวิดีโอและรูปภาพระดับสเกล

4. ประสิทธิภาพ

การวัดประสิทธิภาพบนโหนด NVIDIA H100 80GB (8 ตัว) พบข้อมูลที่น่าสนใจดังนี้:

Text-to-image — 512×512

โมเดลการเทรนParallelismGBS / LBSเวลาต่อสเต็ปภาพ/วินาทีหน่วยความจำสูงสุด/GPU
FLUX.1-devFullFSDP232 / 40.902 วินาที35.5163.88 GiB
Qwen-ImageFullFSDP240 / 50.974 วินาที41.2153.55 GiB

Text-to-video — 512×512×49 เฟรม

โมเดลการเทรนGBS / LBSActivation checkpointingเวลาต่อสเต็ปคลิป/วินาทีหน่วยความจำสูงสุด/GPU
Wan 2.1 14BFull8 / 1เปิด3.798 วินาที2.10733.35 GiB
HunyuanVideo 1.5Full8 / 1เปิด5.926 วินาที1.35015.90 GiB

ตัวอย่างการ Fine-tune/LoRA อื่นๆ

ผลการทดสอบกับโมเดล Wan 2.1 ในสไตล์สตูดิโอ Ghibli พบว่าการ fine-tuning แบบเต็มรูปแบบให้คุณภาพการเคลื่อนไหวและลายเส้นที่ลึกซึ้ง ขณะที่การใช้ LoRA สามารถใส่เอกลักษณ์ของตัวละคร (เช่น ตา) ได้อย่างมีประสิทธิภาพ

ผลลัพธ์เปรียบเทียบ: (ดูรูปภาพประกอบด้านล่าง)

NVIDIA จับมือ Hugging Face เปิดตัว NeMo Automodel ยกระดับการ Fine-tune โมเดลวิดีโอและรูปภาพระดับสเกลNVIDIA จับมือ Hugging Face เปิดตัว NeMo Automodel ยกระดับการ Fine-tune โมเดลวิดีโอและรูปภาพระดับสเกล
NVIDIA จับมือ Hugging Face เปิดตัว NeMo Automodel ยกระดับการ Fine-tune โมเดลวิดีโอและรูปภาพระดับสเกลNVIDIA จับมือ Hugging Face เปิดตัว NeMo Automodel ยกระดับการ Fine-tune โมเดลวิดีโอและรูปภาพระดับสเกล

ทดลองใช้งานวันนี้

สามารถศึกษารายละเอียดและตัวอย่างเพิ่มเติมได้ที่ เอกสาร NeMo Automodel

สิ่งที่จะตามมา: Pythonic recipe APIs

แม้ YAML จะเหมาะสำหรับการทำซ้ำ แต่ในอนาคต NeMo Automodel จะนำเสนอ Pythonic API แบบ typed สมบูรณ์ เพื่อให้ผู้ใช้ประกอบโมเดล, ตัวเพิ่มประสิทธิภาพ (optimizer) และตั้งค่า parallelism ผ่าน Python ได้โดยตรง ซึ่งจะช่วยให้การทำงานร่วมกับ notebooks หรือ pipeline เดิมทำได้สะดวกยิ่งขึ้น

ทรัพยากร

Source: Hugging Face Blog
ดูแลงานแปลและเรียบเรียงโดย SirilukP

ความคิดเห็น (0)

เข้าสู่ระบบเพื่อร่วมแสดงความเห็น

สมัครสมาชิก

มาเป็นคนแรกที่แสดงความเห็นกันเลยโบร