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 — это базовая модель мира, которая моделирует эволюцию сцены в соответствии с планом действий и движений камеры, привязанным ко времени. Её генеративный симулятор на 29 млрд параметров представляет собой двухпоточный мультимодальный диффузионный трансформер, интегрированный здесь; при этом базовая модель рассуждений, генерирующая его промпты, не интегрирована.

PAN 2 интегрируется только в виде блоков Modular Diffusers. PAN2Blocks поддерживает два рабочих процесса:

Рабочий процессВходы
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)

Настройка classifier-free guidance выполняется на guider (guidance_scale=2.5 по умолчанию):

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

Каждый вызов принимает один промпт, который кодируется без дополнения (padding). Поэтому трансформеру никогда не нужна маска внимания, и доступны все бэкенды внимания:

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

Проверщик безопасности

PAN 2 выполняет проверку guardrails по промпту перед генерацией и по каждому сгенерированному видео после неё, а заблокированный промпт или видео вызывает ValueError. Проверки включены по умолчанию, а load_components() загружает guardrails, для которых требуется пакет 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

< >

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

check_safety_checker_loaded

< >

( )

Вызвать исключение, если проверки включены, но защитный механизм PAN 2 не загружен.

disable_safety_checker

< >

( )

Отключите проверки промпта и видео на свой страх и риск.

enable_safety_checker

< >

( )

Проверьте промпт и сгенерированные видео с использованием защитного механизма PAN 2.

PAN2Blocks

класс diffusers.PAN2Blocks

< >

( )

Модульные блоки конвейера для генерации видео из текста и из изображения с PAN 2.

Поддерживаемые рабочие процессы:

  • t2v: требуется prompt
  • i2v: требуется 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): Промпт для управления генерацией, одна строка. 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, необязательный): Нормализованные латенты первого кадра. Могут быть получены на шаге vae_encoder. num_inference_steps (int): Количество шагов денойзинга. sigmas (list, необязательный): Пользовательские сигмы для процесса денойзинга. latents (Tensor): Предварительно сгенерированные зашумленные латенты для использования в качестве входных данных при генерации видео. generator (Generator, необязательный): Генератор Torch для детерминированной генерации. attention_kwargs (dict, необязательный): Дополнительные аргументы для процессоров внимания. output_type (str, необязательный, по умолчанию np): Формат вывода: ‘pil’, ‘np’, ‘pt’.

Вывод: видео (list): Сгенерированные видео.

Update on GitHub