Diffusers documentation

PAN 2

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.43.0).
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