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 es un modelo de mundo de base que simula cómo evoluciona una escena bajo un plan de acciones y movimientos de cámara fundamentado en el tiempo. Su simulador generativo de 29B es un transformador de difusión multimodal de doble flujo, integrado aquí; el esqueleto de razonamiento que escribe sus indicaciones no lo está.

PAN 2 se integra únicamente como bloques de Modular Diffusers. PAN2Blocks admite dos flujos de trabajo:

Flujo de trabajoEntradas
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)

La guía sin clasificador se configura en el guider (guidance_scale=2.5 por defecto):

pipe.update_components(guider=pipe.guider.new(guidance_scale=5.0))

Cada llamada toma un único prompt, que se codifica sin padding. Por lo tanto, el transformer nunca necesita una máscara de atención, y todos los attention backend están disponibles:

pipe.transformer.set_attention_backend("flash_hub")  # FlashAttention-2

Verificador de seguridad

PAN 2 ejecuta guardrails en el prompt antes de la generación y en cada video generado después, y un prompt o video bloqueado genera un ValueError. Las comprobaciones están activadas de forma predeterminada, y load_components() carga los guardrails, que requieren el paquete PAN 2 guardrail:

pip install git+https://github.com/ifm-ai/pan2-guardrail

Paralelismo de contexto

PAN2Transformer3DModel admite context parallelism. El número de tokens de texto y de vídeo normalmente no es divisible por el número de dispositivos (el número de tokens de texto depende del prompt), por lo que se debe usar ulysses_anything o ring_anything para la inferencia. El uso simple de ulysses_degree / ring_degree, por ejemplo para el entrenamiento, requiere que ambos recuentos de tokens sean divisibles por el tamaño de paralelismo de contexto.

# 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

clase 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 para PAN 2: texto a video e imagen a video a partir de un primer fotograma.

import torch
from diffusers import ModularPipeline

pipe = ModularPipeline.from_pretrained("IFM/PAN2")
pipe.load_components(dtype=torch.bfloat16)

check_safety_checker_loaded

< >

( )

Lanza una excepción si las comprobaciones están activas pero la barrera de seguridad PAN 2 no está cargada.

disable_safety_checker

< >

( )

Desactiva las comprobaciones de prompt y video, bajo tu propio riesgo.

enable_safety_checker

< >

( )

Comprueba el prompt y los videos generados con la barrera de seguridad PAN 2.

PAN2Blocks

clase diffusers.PAN2Blocks

< >

( )

Bloques de pipeline modulares para la generación de texto a video e imagen a video con PAN 2.

Flujos de trabajo admitidos:

  • t2v: requiere prompt
  • i2v: requiere prompt, image

Componentes: text_encoder (Qwen3_5TextModel) tokenizer (Qwen2Tokenizer) safety_checker (PAN2SafetyChecker) vae (AutoencoderKLWan) video_processor (VideoProcessor) scheduler (FlowMatchEulerDiscreteScheduler) transformer (PAN2Transformer3DModel) guider (ClassifierFreeGuidance)

Configuraciones: enable_safety_checker (predeterminado: True)

Entradas: prompt (str): El prompt para guiar la generación, una sola cadena de texto. negative_prompt (str, opcional): El prompt que no debe guiar la generación, una sola cadena de texto. Cuando la guía necesita uno y no se pasa ninguno (o se pasa uno vacío), se utiliza el prompt negativo predeterminado de PAN 2, con sus rangos de tiempo establecidos a la duración del clip. max_sequence_length (int, opcional, predeterminado 1536): Longitud máxima de secuencia para la codificación del prompt. num_frames (int, opcional, predeterminado 313): Número de fotogramas de video a generar, de la forma 4 * n + 1. fps (float, opcional, predeterminado 24.0): La tasa de fotogramas del video, que establece su duración en el prompt negativo predeterminado. image (Image, opcional): El primer fotograma, una sola imagen. height (int, opcional): La altura en píxeles del video generado, 704 por defecto. width (int, opcional): El ancho en píxeles del video generado, 1248 por defecto. num_videos_per_prompt (int, opcional, predeterminado 1): El número de videos a generar por prompt. image_latents (Tensor, opcional): Los latentes normalizados del primer fotograma. Pueden generarse desde el paso vae_encoder. num_inference_steps (int): El número de pasos de desruido. sigmas (list, opcional): Sigmas personalizados para el proceso de desruido. latents (Tensor): Latentes ruidosos pregenerados para usar como entradas para la generación de video. generator (Generator, opcional): Generador de Torch para una generación determinista. attention_kwargs (dict, opcional): Kwargs adicionales para los procesadores de atención. output_type (str, opcional, predeterminado np): Formato de salida: ‘pil’, ‘np’, ‘pt’.

Salidas: videos (list): Los videos generados.

Update on GitHub