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は、時間軸に基づいたアクションとカメラモーションの計画の下でシーンがどのように進化するかをシミュレートする基盤となるワールドモデルです。その29Bの生成シミュレーターはデュアルストリームのマルチモーダル拡散トランスフォーマーであり、ここでは統合されています。一方、そのプロンプトを生成する推論バックボーンは統合されていません。

PAN 2 は、Modular Diffusers ブロックとしてのみ統合されています。PAN2Blocks は、2 つのワークフローをサポートします:

ワークフロー入力
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))

すべての呼び出しは、パディングなしでエンコードされる単一のプロンプトを受け取ります。そのため、transformerはアテンションマスクを必要とせず、すべてのattention backendが利用可能です:

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

セーフティチェッカー

PAN 2 は、生成前のプロンプトと、生成後のすべての動画に対してガードレールを実行します。ブロックされたプロンプトまたは動画は ValueError を引き起こします。これらのチェックはデフォルトで有効になっており、load_components() がガードレールを読み込みます。これには PAN 2 guardrail パッケージが必要です。

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

コンテキスト並列

PAN2Transformer3DModel は context parallelism をサポートしています。テキストと動画のトークン数は、通常、デバイス数(テキストのトークン数はプロンプトに依存します)で割り切れないため、推論には ulysses_anything または ring_anything を使用してください。例えば学習用の通常の ulysses_degree / ring_degree は、両方のトークン数が context parallel のサイズで割り切れることを要求します。

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

PAN 2 用の ModularPipeline: テキストから動画へ、および最初のフレームから画像を動画への変換。

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, 任意): アテンションプロセッサー用の追加の kwargs です。 output_type (str, 任意, デフォルトは np): 出力形式: ‘pil’, ‘np’, ‘pt’。

出力: videos (list): 生成された動画。

Update on GitHub