Diffusers documentation
PAN 2
PAN 2
PAN2 هو نموذج عالمي أساسي يحاكي كيفية تطور المشهد تحت خطة زمنية للأفعال وحركات الكاميرا. محاكيه التوليدي بحجم 29B هو محوّل انتشار متعدد الوسائط ذو تدفق مزدوج، وقد تم دمجه هنا؛ أما الهيكل الاستدلالي الذي يكتب أوامره التوجيهية فلم يتم دمجه.
يُدمج PAN 2 على شكل كتل Modular Diffusers فقط. يدعم PAN2Blocks مساري عمل:
| سير العمل | المدخلات |
|---|---|
t2v | prompt |
i2v | prompt, image |
import torch
from diffusers import ModularPipeline
from diffusers.utils import export_to_video, load_image
pipe = ModularPipeline.from_pretrained("IFM/PAN2")
pipe.load_components(dtype=torch.bfloat16)
pipe.to("cuda")
prompt = "A red fox trots through fresh snow in a pine forest at dawn."
video = pipe(prompt=prompt, generator=torch.Generator().manual_seed(0), output="videos")[0]
export_to_video(video, "pan2_t2v.mp4", fps=24)
image = load_image("path/to/first_frame.png")
video = pipe(prompt=prompt, image=image, generator=torch.Generator().manual_seed(0), output="videos")[0]
export_to_video(video, "pan2_i2v.mp4", fps=24)يتم تكوين التوجيه الحر من التصنيف على الموجّه (guidance_scale=2.5 افتراضيًا):
pipe.update_components(guider=pipe.guider.new(guidance_scale=5.0))تستقبل كل استدعاءً موجهًا واحدًا، يُرمَّز دون حشو. لذا لا يحتاج المحوِّل إلى قناع انتباه أبدًا، ويتوفر كل خلفية انتباه:
pipe.transformer.set_attention_backend("flash_hub") # FlashAttention-2فاحص الأمان
يعمل PAN 2 على تطبيق ضوابط السلامة على الاستعلام قبل التوليد وعلى كل فيديو مُولَّد بعد ذلك، ويؤدي الاستعلام أو الفيديو المحظور إلى رفع ValueError. تكون هذه الفحوصات مفعّلة افتراضيًا، ويحمّل load_components() ضوابط السلامة، التي تتطلب حزمة PAN 2 guardrail:
pip install git+https://github.com/ifm-ai/pan2-guardrail
توازي السياق
يدعم PAN2Transformer3DModel context parallelism. عادةً لا تكون أعداد رموز النص والفيديو قابلة للقسمة على عدد الأجهزة (حيث يعتمد عدد رموز النص على الأمر)، لذا استخدم ulysses_anything أو ring_anything للاستدلال. أما ulysses_degree / ring_degree العادي، على سبيل المثال للتدريب، فيشترط أن تكون كلا العددين من الرموز قابلين للقسمة على حجم موازاة السياق.
# torchrun --nproc_per_node=2 pan2_context_parallel.py
import torch
import torch.distributed as dist
from diffusers import ContextParallelConfig, ModularPipeline
dist.init_process_group("nccl")
rank = dist.get_rank()
torch.cuda.set_device(rank)
pipe = ModularPipeline.from_pretrained("IFM/PAN2")
pipe.load_components(dtype=torch.bfloat16)
pipe.to(f"cuda:{rank}")
pipe.transformer.enable_parallelism(config=ContextParallelConfig(ulysses_degree=2, ulysses_anything=True))
video = pipe(prompt="A red fox trots through fresh snow.", generator=torch.Generator().manual_seed(0), output="videos")[0]
dist.destroy_process_group()PAN2ModularPipeline
فئة diffusers.PAN2ModularPipeline
< source >( blocks: diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks | None = Nonepretrained_model_name_or_path: str | os.PathLike | None = Nonecomponents_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = Nonecollection: str | None = Noneworkflow: str | None = Nonemodular_config_dict: dict[str, typing.Any] | None = Noneconfig_dict: dict[str, typing.Any] | None = None**kwargs )
ModularPipeline لـ PAN 2: من النص إلى الفيديو، ومن الصورة إلى الفيديو من إطار أول.
import torch
from diffusers import ModularPipeline
pipe = ModularPipeline.from_pretrained("IFM/PAN2")
pipe.load_components(dtype=torch.bfloat16)ارفع استثناءً إذا كانت الفحوصات مفعّلة لكن حاجز الأمان PAN 2 غير محمّل.
أطفئ فحوصات الموجه والفيديو، على مسؤوليتك الخاصة.
تحقق من الأمر (prompt) والفيديوهات المولّدة باستخدام حاجز الأمان PAN 2.
PAN2Blocks
كتل خط أنابيب معيارية لتوليد الفيديو من النص والفيديو من الصورة باستخدام PAN 2.
سير العمل المدعومة:
t2v: يتطلبprompti2v: يتطلبprompt،image
المكوّنات:
text_encoder (Qwen3_5TextModel) tokenizer (Qwen2Tokenizer) safety_checker (PAN2SafetyChecker) vae
(AutoencoderKLWan) video_processor (VideoProcessor) scheduler (FlowMatchEulerDiscreteScheduler)
transformer (PAN2Transformer3DModel) guider (ClassifierFreeGuidance)
الإعدادات: enable_safety_checker (الافتراضي: True)
المدخلات:
prompt (str):
الموجّه (Prompt) لتوجيه التوليد، وهو نص واحد.
negative_prompt (str, اختياري):
الموجّه الذي لا يُستخدم لتوجيه التوليد، وهو نص واحد. عندما يتطلب التوجيه موجّهًا سالبًا ولم يُمرَّر أي شيء (أو تم تمرير نص فارغ)، يُستخدم الموجّه السلبي الافتراضي لـ PAN 2، مع ضبط نطاقاته الزمنية على مدة المقطع.
max_sequence_length (int, اختياري, القيمة الافتراضية 1536):
الحد الأقصى لطول التسلسل لتشفير الموجّه.
num_frames (int, اختياري, القيمة الافتراضية 313):
عدد إطارات الفيديو المراد توليدها، بصيغة 4 * n + 1.
fps (float, اختياري, القيمة الافتراضية 24.0):
معدل الإطارات للفيديو، وهو ما يحدد مدته في الموجّه السلبي الافتراضي.
image (Image, اختياري):
الإطار الأول، وهو صورة واحدة.
height (int, اختياري):
الارتفاع بالبكسلات للفيديو المولّد، وقيمته الافتراضية 704.
width (int, اختياري):
العرض بالبكسلات للفيديو المولّد، وقيمته الافتراضية 1248.
num_videos_per_prompt (int, اختياري, القيمة الافتراضية 1):
عدد الفيديوهات المراد توليدها لكل موجّه.
image_latents (Tensor, اختياري):
قيم Latents المُعدَّلة للإطار الأول. يمكن توليدها من خطوة vae_encoder.
num_inference_steps (int):
عدد خطوات إزالة الضوضاء.
sigmas (list, اختياري):
قيم Sigmas مخصصة لعملية إزالة الضوضاء.
latents (Tensor):
قيم Latents ضوضائية مُولَّدة مسبقًا لاستخدامها كمدخلات لتوليد الفيديو.
generator (Generator, اختياري):
مولّد Torch لتوليد حتمي.
attention_kwargs (dict, اختياري):
معاملات إضافية لمعالجات الانتباه.
output_type (str, اختياري, القيمة الافتراضية np):
صيغة الإخراج: ‘pil’، ‘np’، ‘pt’.
المخرجات:
فيديوهات (list):
الفيديوهات المولّدة.