Diffusers documentation
PAN 2
PAN 2
PAN2 — это базовая модель мира, которая моделирует эволюцию сцены в соответствии с планом действий и движений камеры, привязанным ко времени. Её генеративный симулятор на 29 млрд параметров представляет собой двухпоточный мультимодальный диффузионный трансформер, интегрированный здесь; при этом базовая модель рассуждений, генерирующая его промпты, не интегрирована.
PAN 2 интегрируется только в виде блоков Modular Diffusers. PAN2Blocks поддерживает два рабочих процесса:
| Рабочий процесс | Входы |
|---|---|
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)Настройка 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
< 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 )
Модульный ModularPipeline для PAN 2: генерация видео из текста и генерация видео из изображения по первому кадру.
import torch
from diffusers import ModularPipeline
pipe = ModularPipeline.from_pretrained("IFM/PAN2")
pipe.load_components(dtype=torch.bfloat16)Вызвать исключение, если проверки включены, но защитный механизм PAN 2 не загружен.
Отключите проверки промпта и видео на свой страх и риск.
Проверьте промпт и сгенерированные видео с использованием защитного механизма PAN 2.
PAN2Blocks
Модульные блоки конвейера для генерации видео из текста и из изображения с PAN 2.
Поддерживаемые рабочие процессы:
t2v: требуетсяprompti2v: требуется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):
Сгенерированные видео.