Diffusers documentation

PAN 2

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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 travailEntrées
t2vprompt
i2vprompt, 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-2

Vé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

< >

( 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)

check_safety_checker_loaded

< >

( )

Lève une exception si les vérifications sont activées mais que le garde-fou PAN 2 n'est pas chargé.

disable_safety_checker

< >

( )

Désactivez les vérifications du prompt et de la vidéo, à vos risques et périls.

enable_safety_checker

< >

( )

Vérifiez le prompt et les vidéos générées avec le garde-fou PAN 2.

PAN2Blocks

classe diffusers.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écessite prompt
  • i2v : nécessite prompt, 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.

Update on GitHub