Diffusers documentation
PAN 2
PAN 2
PAN2, zamanla ilişkili bir eylem ve kamera hareketi planı altında bir sahnenin nasıl evrildiğini simüle eden bir temel dünya modelidir. 29B'lik üretken simülatörü, burada entegre edilen çift akımlı çok modlu difüzyon transformeri'dir; promptlarını yazan akıl yürütme omurgası ise değildir.
PAN 2 yalnızca Modular Diffusers blokları olarak entegre edilmiştir. PAN2Blocks iki iş akışını destekler:
| İş Akışı | Girdiler |
|---|---|
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)Classifier-free guidance, guider üzerinde yapılandırılır (varsayılan olarak guidance_scale=2.5):
pipe.update_components(guider=pipe.guider.new(guidance_scale=5.0))Her çağrı, dolgusuz olarak kodlanan tek bir istem alır. Bu nedenle transformer asla bir dikkat maskesine ihtiyaç duymaz ve tüm dikkat arka uçları kullanılabilir:
pipe.transformer.set_attention_backend("flash_hub") # FlashAttention-2Güvenlik denetleyicisi
PAN 2, üretimden önce istemci üzerinde ve üretilen her video üzerinde guardrail çalıştırır; engellenen bir istemci veya video ValueError oluşturur. Kontroller varsayılan olarak açıktır ve load_components() guardrail’leri yükler; bunun için PAN 2 guardrail paketi gereklidir:
pip install git+https://github.com/ifm-ai/pan2-guardrail
Bağlam paralelliği
PAN2Transformer3DModel, context parallelism destekler. Metin ve video token sayıları genellikle cihaz sayısına (metin token sayısı prompt'a bağlıdır) tam bölünmez, bu nedenle çıkarım için ulysses_anything veya ring_anything kullanın. Örneğin eğitim için kullanılan düz ulysses_degree / ring_degree, her iki token sayısının da context parallel boyutuna tam bölünmesini gerektirir.
# 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
sınıf 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 )
PAN 2 için metinden videoya ve ilk kareden videoya dönüştürme işlemleri için bir ModularPipeline.
import torch
from diffusers import ModularPipeline
pipe = ModularPipeline.from_pretrained("IFM/PAN2")
pipe.load_components(dtype=torch.bfloat16)Kontroller açıkken PAN 2 guardrail yüklenmediyse hata fırlatın.
Kendi sorumluluğunuzda, istek ve video kontrollerini kapatın.
PAN 2 koruma bariyeri ile istemi ve oluşturulan videoları kontrol edin.
PAN2Blocks
PAN 2 ile metinden videoya ve görüntüden videoya üretim için modüler pipeline blokları.
Desteklenen iş akışları:
t2v:promptgerektiriri2v:promptveimagegerektirir
Bileşenler:
text_encoder (Qwen3_5TextModel) tokenizer (Qwen2Tokenizer) safety_checker (PAN2SafetyChecker) vae
(AutoencoderKLWan) video_processor (VideoProcessor) scheduler (FlowMatchEulerDiscreteScheduler)
transformer (PAN2Transformer3DModel) guider (ClassifierFreeGuidance)
Yapılandırmalar: enable_safety_checker (varsayılan: True)
Girdiler:
prompt (str):
Üretimi yönlendirmek için kullanılan istem, tek bir dize.
negative_prompt (str, isteğe bağlı):
Üretimi yönlendirmemek için kullanılan istem, tek bir dize. Yönlendirme için bir tane gerekli olduğunda ve hiçbiri (veya boş olanı) geçirilmediğinde, PAN 2’nin varsayılan negatif istemi kullanılır; zaman aralıkları kliplerin süresine ayarlanır.
max_sequence_length (int, isteğe bağlı, varsayılan 1536):
İstem kodlaması için maksimum dizi uzunluğu.
num_frames (int, isteğe bağlı, varsayılan 313):
Üretilecek video kare sayısı, 4 * n + 1 biçiminde.
fps (float, isteğe bağlı, varsayılan 24.0):
Videonun kare hızı, varsayılan negatif istemdeki süresini belirler.
image (Image, isteğe bağlı):
İlk kare, tek bir görüntü.
height (int, isteğe bağlı):
Üretilen videonun piksel cinsinden yüksekliği, varsayılan 704.
width (int, isteğe bağlı):
Üretilen videonun piksel cinsinden genişliği, varsayılan 1248.
num_videos_per_prompt (int, isteğe bağlı, varsayılan 1):
İstem başına üretilecek video sayısı.
image_latents (Tensor, isteğe bağlı):
Normalleştirilmiş ilk kare latentleri. vae_encoder adımından üretilebilir.
num_inference_steps (int):
Gürültü azaltma adım sayısı.
sigmas (list, isteğe bağlı):
Gürültü azaltma süreci için özel sigmalar.
latents (Tensor):
Video üretimi için girdi olarak kullanılacak önceden üretilmiş gürültülü latentler.
generator (Generator, isteğe bağlı):
Belirlenebilir üretim için Torch üreteci.
attention_kwargs (dict, isteğe bağlı):
Dikkat işlemcileri için ek kwargs.
output_type (str, isteğe bağlı, varsayılan np):
Çıktı biçimi: ‘pil’, ‘np’, ‘pt’.
Çıktılar:
videos (list):
Oluşturulan videolar.