Diffusers documentation
PAN 2
PAN 2
PAN2 est un modèle de monde de base qui simule l'évolution d'une scène sous l'effet d'un plan d'actions et de mouvements de caméra ancré dans le temps. Son simulateur génératif de 29B est un transformeur de diffusion multimodal à double flux, intégré ici ; le backbone de raisonnement qui rédige ses prompts ne l'est pas.
PAN 2 est intégré uniquement sous forme de blocs Modular Diffusers. PAN2Blocks prend en charge deux flux de travail :
| Flux de travail | Entrées |
|---|---|
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)Le guidage sans classifieur est configuré sur le guideur (guidance_scale=2.5 par défaut) :
pipe.update_components(guider=pipe.guider.new(guidance_scale=5.0))Chaque appel prend un seul prompt, qui est encodé sans bourrage. Le transformateur n'a donc jamais besoin d'un masque d'attention, et tous les backends d'attention sont disponibles :
pipe.transformer.set_attention_backend("flash_hub") # FlashAttention-2Vérificateur de sécurité
PAN 2 exécute les garde-fous sur le prompt avant la génération et sur chaque vidéo générée après celle-ci, et un prompt ou une vidéo bloquée déclenche une ValueError. Les vérifications sont activées par défaut, et load_components() charge les garde-fous, qui nécessitent le package PAN 2 guardrail :
pip install git+https://github.com/ifm-ai/pan2-guardrail
Parallélisme de contexte
PAN2Transformer3DModel prend en charge le context parallelism. Les nombres de jetons de texte et de vidéo ne sont généralement pas divisibles par le nombre d’appareils (le nombre de jetons de texte dépend du prompt), il est donc recommandé d’utiliser ulysses_anything ou ring_anything pour l’inférence. Les paramètres ulysses_degree / ring_degree, par exemple pour l’entraînement, exigent que les deux nombres de jetons soient divisibles par la taille du parallélisme de contexte.
# 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
classe 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 )
Un ModularPipeline pour PAN 2 : texte-vers-vidéo et image-vers-vidéo à partir d'une première image.
import torch
from diffusers import ModularPipeline
pipe = ModularPipeline.from_pretrained("IFM/PAN2")
pipe.load_components(dtype=torch.bfloat16)Lève une exception si les vérifications sont activées mais que le garde-fou PAN 2 n'est pas chargé.
Désactivez les vérifications du prompt et de la vidéo, à vos risques et périls.
Vérifiez le prompt et les vidéos générées avec le garde-fou PAN 2.
PAN2Blocks
Blocs de pipeline modulaires pour la génération de vidéos à partir de texte et d'images avec PAN 2.
Workflows pris en charge :
t2v: nécessiteprompti2v: nécessiteprompt,image
Composants :
text_encoder (Qwen3_5TextModel) tokenizer (Qwen2Tokenizer) safety_checker (PAN2SafetyChecker) vae
(AutoencoderKLWan) video_processor (VideoProcessor) scheduler (FlowMatchEulerDiscreteScheduler)
transformer (PAN2Transformer3DModel) guider (ClassifierFreeGuidance)
Configurations : enable_safety_checker (par défaut : True)
Entrées :
prompt (str) :
Le prompt pour guider la génération, une seule chaîne de caractères.
negative_prompt (str, facultatif) :
Le prompt à ne pas utiliser pour guider la génération, une seule chaîne de caractères. Si le guidage en a besoin et qu'aucun n'est fourni (ou qu'il est vide), le prompt négatif par défaut de PAN 2 est utilisé, ses plages temporelles étant définies sur la durée du clip.
max_sequence_length (int, facultatif, par défaut 1536) :
Longueur de séquence maximale pour l'encodage du prompt.
num_frames (int, facultatif, par défaut 313) :
Nombre de frames vidéo à générer, de la forme 4 * n + 1.
fps (float, facultatif, par défaut 24.0) :
Le taux de frames de la vidéo, qui définit sa durée dans le prompt négatif par défaut.
image (Image, facultatif) :
La première frame, une seule image.
height (int, facultatif) :
La hauteur en pixels de la vidéo générée, 704 par défaut.
width (int, facultatif) :
La largeur en pixels de la vidéo générée, 1248 par défaut.
num_videos_per_prompt (int, facultatif, par défaut 1) :
Le nombre de vidéos à générer par prompt.
image_latents (Tensor, facultatif) :
Les latents normalisés de la première frame. Peut être généré à partir de l'étape vae_encoder.
num_inference_steps (int) :
Le nombre d'étapes de débruitage.
sigmas (list, facultatif) :
Sigmas personnalisés pour le processus de débruitage.
latents (Tensor) :
Latents bruités pré-générés à utiliser comme entrées pour la génération vidéo.
generator (Generator, facultatif) :
Générateur Torch pour une génération déterministe.
attention_kwargs (dict, facultatif) :
Kwargs supplémentaires pour les processeurs d'attention.
output_type (str, facultatif, par défaut np) :
Format de sortie : ‘pil’, ‘np’, ‘pt’.
Sorties :
vidéos (list) :
Les vidéos générées.