Diffusers documentation

NeMo Automodel

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

NeMo Automodel

NeMo Automodel هو مكتبة تدريب أصلية مبنية على PyTorch DTensor من NVIDIA، مخصصة لضبط النماذج الانتشارية المسبقة التدريب والتدريب المسبق لها على نطاق واسع. وهو أصلي على Hugging Face — يمكنك تدريب أي نموذج بصيغة Diffusers من المستودع دون الحاجة إلى تحويل نقاط الحفظ. تعمل نفس وصفة YAML وسكربت التدريب القابل للتعديل على أي نطاق، من وحدة معالجة رسومية واحدة إلى مئات العقد، مع تدريب موزّع عبر FSDP2، وتحميل بيانات مُصنّفة حسب دقة متعددة، وتدريب في فضاء كامن مُرمّز مسبقًا لتحقيق أقصى استفادة من وحدات معالجة الرسومات. يستخدم flow matching للتدريب، وهو مفتوح المصدر بالكامل (Apache 2.0)، مدعوم من NVIDIA، ويُحافظ عليه بنشاط.

يتكامل NeMo Automodel مباشرة مع Diffusers. فهو يُحمّل النماذج المُدرَّبة مسبقًا من Hugging Face Hub باستخدام فئات نماذج Diffusers، وينتج المخرجات عبر DiffusionPipeline.

يتضمن سير العمل النموذجي تثبيت NeMo Automodel (عبر pip أو Docker)، وتجهيز بياناتك عن طريق ترميزها في ملفات .meta، وإعداد وصفة YAML، وبدء التدريب باستخدام torchrun، وتنفيذ الاستدلال باستخدام نقطة التفتيش الناتجة.

النماذج المدعومة

النموذجمعرّف Hugging Faceالمهمةالمعاملاتحالة الاستخدام
Wan 2.1 T2V 1.3BWan-AI/Wan2.1-T2V-1.3B-Diffusersالنص إلى فيديو1.3Bتوليد الفيديو على أجهزة محدودة (يتناسب مع بطاقة A100 واحدة بسعة 40 جيجابايت)
FLUX.1-devblack-forest-labs/FLUX.1-devالنص إلى صورة12Bتوليد صور عالية الجودة
HunyuanVideo 1.5hunyuanvideo-community/HunyuanVideo-1.5-Diffusers-720p_t2vالنص إلى فيديو13Bتوليد فيديو عالي الجودة

التثبيت

متطلبات العتاد

مكوّنالحد الأدنىموصى به
وحدة معالجة الرسومياتA100 40GBA100 80GB / H100
وحدات معالجة الرسوميات48+
ذاكرة الوصول العشوائي128 GB256 جيجابايت+
التخزين500 جيجابايت SSD2 تيرابايت NVMe

قم بتثبيت NeMo Automodel باستخدام pip. للاطلاع على جميع طرق التثبيت (بما في ذلك التثبيت من المصدر)، راجع دليل تثبيت NeMo Automodel.

pip3 install nemo-automodel

أو استخدم حاوية Docker الجاهزة التي تتضمن جميع التبعيات.

docker pull nvcr.io/nvidia/nemo-automodel:26.02.00
docker run --gpus all -it --rm --shm-size=8g nvcr.io/nvidia/nemo-automodel:26.02.00

تُفقد نقاط التفتيش عند خروج الحاوية ما لم تُربط مَجلد نقاط التفتيش بالضيف. على سبيل المثال، أضف -v /host/path/checkpoints:/workspace/checkpoints إلى أمر docker run.

تجهيز البيانات

يدرّب NeMo Automodel نماذج الانتشار في الفضاء الكامن. يجب معالجة الصور أو مقاطع الفيديو الخام مسبقًا إلى ملفات .meta تحتوي على الكمونات الخاصة بـ VAE وتضمينات النص قبل التدريب. وهذا يتجنّب إعادة الترميز في كل خطوة تدريب.

استخدم أداة المعالجة المسبقة المدمجة لتشفير بياناتك. توزّع الأداة العمل تلقائيًا على جميع وحدات معالجة الرسومات المتاحة.

معالجة الفيديو الأولية
معالجة الصور الأولية

أمر ما قبل معالجة الفيديو هو نفسه لكل من Wan 2.1 و HunyuanVideo، لكن الأعلام تختلف. يستخدم Wan 2.1 --processor wan مع --resolution_preset و --caption_format sidecar، بينما يستخدم HunyuanVideo --processor hunyuan مع --target_frames لضبط عدد الإطارات و --caption_format meta_json.

وان 2.1:

python -m tools.diffusion.preprocessing_multiprocess video \
    --video_dir /data/videos \
    --output_dir /cache \
    --processor wan \
    --resolution_preset 512p \
    --caption_format sidecar

هونيوان فيديو:

python -m tools.diffusion.preprocessing_multiprocess video \
    --video_dir /data/videos \
    --output_dir /cache \
    --processor hunyuan \
    --target_frames 121 \
    --caption_format meta_json

صيغة الإخراج

ينتج عن المعالجة المسبقة مجلد تخزين مؤقت منظم حسب دلو الدقة. يدعم NeMo Automodel التدريب متعدد الدقة من خلال أخذ العينات المصنّفة في دلاء. تُجمَّع العينات حسب الدقة المكانية بحيث يحتوي كل دفعة على عينات بنفس الحجم، مما يتجنب هدر الحشو.

/cache/
├── 512x512/                      # Resolution bucket
│   ├── <hash1>.meta              # VAE latents + text embeddings
│   ├── <hash2>.meta
│   └── ...
├── 832x480/                      # Another resolution bucket
│   └── ...
├── metadata.json                 # Global config (processor, model, total items)
└── metadata_shard_0000.json      # Per-sample metadata (paths, resolutions, captions)

راجع دليل تحضير مجموعة بيانات الانتشار لمعرفة صيغ التسميات، ومتطلبات البيانات المدخلة، وجميع معاملات ما قبل المعالجة المتاحة.

إعدادات التدريب

تقوم عملية الضبط الدقيق على مكونين:

  1. سكربت الوصفة (finetune.py) هو نقطة دخول بلغة بايثون تحتوي على حلقة التدريب: تحميل النموذج، بناء مُحمِّل البيانات، تنفيذ المرورين الأمامي والخلفي، حساب خسارة مطابقة التدفق، إنشاء نقاط التفتيش، والتسجيل.
  2. يحدد ملف الإعدادات بصيغة YAML جميع الإعدادات التي يستخدمها الوصفة: النموذج الذي سيتم ضبطه الدقيق، وموقع البيانات، ومعلمات المُحسِّن الفائقة، واستراتيجية التوازي، وغير ذلك. تقوم بتخصيص التدريب من خلال تحرير هذا الملف بدلاً من تعديل الكود، مما يتيح لك التوسع من وحدة معالجة رسومية واحدة إلى مئات وحدات معالجة الرسومات.

يمكن أيضًا تجاوز أي حقل في ملف YAML من سطر الأوامر:

torchrun --nproc-per-node=8 examples/diffusion/finetune/finetune.py \
  -c examples/diffusion/finetune/wan2_1_t2v_flow.yaml \
  --optim.learning_rate 1e-5 \
  --step_scheduler.num_epochs 50

فيما يلي الإعداد المُعلَّم لتدريب نموذج Wan 2.1 T2V 1.3B، مع شرح لكل قسم.

seed: 42

# ── Experiment tracking (optional) ──────────────────────────────────────────
# Weights & Biases integration for logging metrics, losses, and learning rates.
# Set mode: "disabled" to turn off.
wandb:
  project: wan-t2v-flow-matching
  mode: online
  name: wan2_1_t2v_fm

# ── Model ───────────────────────────────────────────────────────────────────
# pretrained_model_name_or_path: any Hugging Face model ID or local path.
# mode: "finetune" loads pretrained weights; "pretrain" trains from scratch.
model:
  pretrained_model_name_or_path: Wan-AI/Wan2.1-T2V-1.3B-Diffusers
  mode: finetune

# ── Training schedule ───────────────────────────────────────────────────────
# global_batch_size: effective batch across all GPUs.
# Gradient accumulation is computed automatically: global / (local × num_gpus).
step_scheduler:
  global_batch_size: 8
  local_batch_size: 1
  ckpt_every_steps: 1000     # Save a checkpoint every N steps
  num_epochs: 100
  log_every: 2               # Log metrics every N steps

# ── Data ────────────────────────────────────────────────────────────────────
# _target_: the dataloader factory function.
#   Use build_video_multiresolution_dataloader for video models (Wan, HunyuanVideo).
#   Use build_text_to_image_multiresolution_dataloader for image models (FLUX).
# model_type: "wan" or "hunyuan" (selects the correct latent format).
# base_resolution: target resolution for multiresolution bucketing.
data:
  dataloader:
    _target_: nemo_automodel.components.datasets.diffusion.build_video_multiresolution_dataloader
    cache_dir: PATH_TO_YOUR_DATA
    model_type: wan
    base_resolution: [512, 512]
    dynamic_batch_size: false  # When true, adjusts batch per bucket to maintain constant memory
    shuffle: true
    drop_last: false
    num_workers: 0

# ── Optimizer ───────────────────────────────────────────────────────────────
# learning_rate: 5e-6 is a good starting point for fine-tuning.
# Adjust weight_decay and betas for your dataset.
optim:
  learning_rate: 5e-6
  optimizer:
    weight_decay: 0.01
    betas: [0.9, 0.999]

# ── Learning rate scheduler ─────────────────────────────────────────────────
# Supports cosine, linear, and constant schedules.
lr_scheduler:
  lr_decay_style: cosine
  lr_warmup_steps: 0
  min_lr: 1e-6

# ── Flow matching ───────────────────────────────────────────────────────────
# adapter_type: model-specific adapter — must match the model:
#   "simple" for Wan 2.1, "flux" for FLUX.1-dev, "hunyuan" for HunyuanVideo.
# timestep_sampling: "uniform" for Wan, "logit_normal" for FLUX and HunyuanVideo.
# flow_shift: shifts the flow schedule (model-dependent).
# i2v_prob: probability of image-to-video conditioning during training (video models).
flow_matching:
  adapter_type: "simple"
  adapter_kwargs: {}
  timestep_sampling: "uniform"
  logit_mean: 0.0
  logit_std: 1.0
  flow_shift: 3.0
  num_train_timesteps: 1000
  i2v_prob: 0.3
  use_loss_weighting: true

# ── FSDP2 distributed training ──────────────────────────────────────────────
# dp_size: number of GPUs for data parallelism (typically = total GPUs on node).
# tp_size, cp_size, pp_size: tensor, context, and pipeline parallelism.
#   For most fine-tuning, dp_size is all you need; leave others at 1.
fsdp:
  tp_size: 1
  cp_size: 1
  pp_size: 1
  dp_replicate_size: 1
  dp_size: 8

# ── Checkpointing ──────────────────────────────────────────────────────────
# checkpoint_dir: where to save checkpoints (use a persistent path with Docker).
# restore_from: path to resume training from a previous checkpoint.
checkpoint:
  enabled: true
  checkpoint_dir: PATH_TO_YOUR_CKPT_DIR
  model_save_format: torch_save
  save_consolidated: false
  restore_from: null

مرجع حقول الإعداد

تُدرج الجدول أدناه الإعدادات الدنيا المطلوبة. راجع أمثلة NeMo Automodel للاطلاع على إعدادات أمثلة كاملة لجميع النماذج.

القسممطلوب؟ما يجب تغييره
modelنعماضبط pretrained_model_name_or_path على معرّف النموذج في Hugging Face. اضبط mode: finetune أو mode: pretrain.
step_schedulerنعمglobal_batch_size هو حجم الدفعة الفعّال عبر جميع وحدات معالجة الرسوميات. يتحكم ckpt_every_steps في تكرار إنشاء نقاط التفتيش. يتم حساب تراكم التدرجات تلقائيًا.
dataنعماضبط cache_dir على المسار الذي يحتوي على ملفات .meta المُعالجة مسبقًا. غيّر _target_ وmodel_type للنماذج المختلفة.
optimنعمlearning_rate: 5e-6 هو الافتراضي الجيد للضبط الدقيق. اضبطه حسب مجموعة البيانات والنموذج الخاصين بك.
lr_schedulerنعماختر cosine أو linear أو constant لـlr_decay_style. اضبط lr_warmup_steps للتسخين التدريجي.
flow_matchingنعميجب أن يتطابق adapter_type مع النموذج (simple لـ Wan، وflux لـ FLUX، وhunyuan لـ HunyuanVideo). راجع إعدادات النموذج المحددة للحصول على adapter_kwargs.
fsdpنعماضبط dp_size على عدد وحدات معالجة الرسومات. وفي حالة استخدام عدة عقد، اضبطه على إجمالي عدد وحدات معالجة الرسومات عبر جميع العقد.
checkpointموصى بهاضبط checkpoint_dir على مسار دائم، خاصةً في Docker. استخدم restore_from للاستئناف من نقطة تفتيش سابقة.
wandbاختيارياضبط الإعدادات لتفعيل تتبع التجارب باستخدام Weights & Biases. اضبط mode: disabled لإيقافه.

بدء التدريب

عقدة واحدة
عقدة متعددة
torchrun --nproc-per-node=8 \
  examples/diffusion/finetune/finetune.py \
  -c examples/diffusion/finetune/wan2_1_t2v_flow.yaml

التوليد

بعد التدريب، قم بتوليد مقاطع فيديو أو صور من أوامر نصية باستخدام نقطة الفحص المُحسَّنة.

Wan 2.1
FLUX
HunyuanVideo
python examples/diffusion/generate/generate.py \
  -c examples/diffusion/generate/configs/generate_wan.yaml

مع نقطة تحقق مُعدّلة:

python examples/diffusion/generate/generate.py \
  -c examples/diffusion/generate/configs/generate_wan.yaml \
  --model.checkpoint ./checkpoints/step_1000 \
  --inference.prompts '["A dog running on a beach"]'

تكامل Diffusers

يُبنى NeMo Automodel على أساس Diffusers ويستخدمه كهيكل أساسي لتحميل النماذج والاستدلال. يقوم بتحميل النماذج مباشرةً من Hugging Face Hub باستخدام فئات نماذج Diffusers مثل WanTransformer3DModel وFluxTransformer2DModel وHunyuanVideoTransformer3DModel، وينتج المخرجات عبر خطوط أنابيب Diffusers مثل WanPipeline وFluxPipeline.

توفر هذه التكاملات عدة فوائد لمستخدمي Diffusers:

  • لا حاجة لتحويل نقاط التفتيش: تعمل الأوزان المُسبقة التدريب من المستودع مباشرةً. وجّه pretrained_model_name_or_path إلى أي معرّف نموذج بتنسيق Diffusers وابدأ التدريب فورًا.
  • دعم النماذج من اليوم الأول: عند إضافة نموذج انتشار جديد إلى Diffusers ورفعته إلى Hub، يمكن ضبطه بدقة باستخدام NeMo Automodel دون الحاجة إلى الانتظار حتى توفر سكربت تدريب مخصص.
  • المخرجات المتوافقة مع خطوط الأنابيب: تُحفظ نقاط التفتيش المُحسَّنة في صيغة يمكن تحميلها مباشرةً مرة أخرى في خطوط أنابيب Diffusers للاستدلال، أو للمشاركة على Hub، أو للمزيد من التحسين باستخدام أدوات مثل التكميم والتجميع.
  • تدريب قابل للتوسع لنماذج Diffusers: يضيف NeMo Automodel قدرات التدريب الموزّع (FSDP2، متعدد العقد، تجميع متعدد الدقة) التي تتجاوز ما توفره سكربتات تدريب Diffusers المدمجة، مع الحفاظ على نفس واجهات النماذج والأنابيب.
  • النظام البيئي المشترك: أي نموذج، أو مُكيّف LoRA، أو مكوّن خط أنابيب من نظام Diffusers البيئي يبقى متوافقًا عبر سير عمل التدريب والاستدلال بالكامل.

فريق NVIDIA

الموارد

Update on GitHub