Buckets:

hf-doc-build/doc / diffusers /main /ru /api /models /anyflow_far_transformer3d.md
mishig's picture
|
download
raw
17.6 kB

AnyFlowFARTransformer3DModel

Причинный (FAR) 3D-трансформер, используемый в AnyFlowFARPipeline — вариант FAR для AnyFlow. См. страницу AnyFlowFARPipeline для информации о статье, авторах и опубликованных контрольных точках. Он расширяет базовую архитектуру Wan2.1 версии v0.35.1 тремя дополнениями:

  1. Причинная блок-маска FAR с использованием torch.nn.attention.flex_attention, поддерживающая поштучную авторегрессионную генерацию, как описано в FAR.
  2. Встраивание патчей сжатых кадров (far_patch_embedding) для контекстных (уже сгенерированных) кадров, инициализируемое при создании из полноразрешающего patch_embedding методом трилинейной интерполяции.
  3. Встраивание потока с двумя временными шагами (аналогично AnyFlowTransformer3DModel) — каждый вызов forward использует в качестве условия и исходный временной шаг t, и целевой временной шаг r.

Расписание по умолчанию (chunk_partition) хранится в конфигурации модели; опубликованные контрольные точки NVIDIA AnyFlow-FAR используют [1, 3, 3, 3, 3, 3, 3, 2] для стандартной настройки на 81 кадр. Метод forward принимает переопределение chunk_partition для каждого вызова, поэтому одна и та же контрольная точка также обрабатывает другие конфигурации num_frames без дообучения.

from diffusers import AnyFlowFARTransformer3DModel

# Causal AnyFlow checkpoint (FAR):
transformer = AnyFlowFARTransformer3DModel.from_pretrained(
    "nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers", subfolder="transformer"
)

AnyFlowFARTransformer3DModel[[diffusers.AnyFlowFARTransformer3DModel]]

diffusers.AnyFlowFARTransformer3DModel[[diffusers.AnyFlowFARTransformer3DModel]]

diffusers.AnyFlowFARTransformer3DModel(patch_size: typing.Tuple[int] = (1, 2, 2), compressed_patch_size: typing.Tuple[int] = (1, 4, 4), full_chunk_limit: int = 3, num_attention_heads: int = 40, attention_head_dim: int = 128, in_channels: int = 16, out_channels: int = 16, text_dim: int = 4096, freq_dim: int = 256, ffn_dim: int = 13824, num_layers: int = 40, cross_attn_norm: bool = True, eps: float = 1e-06, image_dim: typing.Optional[int] = None, rope_max_seq_len: int = 1024, gate_value: float = 0.25, deltatime_type: str = 'r', chunk_partition: typing.Tuple[int, ...] = (1, 3, 3, 3, 3, 3, 3, 2))

Источник

Параметры:

patch_size (Tuple[int], по умолчанию (1, 2, 2)) : размеры 3D-патчей для фрагментов полного разрешения.

compressed_patch_size (Tuple[int], по умолчанию (1, 4, 4)) : Большие размеры патчей для FAR-сжатых (контекстных) фрагментов.

full_chunk_limit (int, по умолчанию 3) : Максимальное количество чанков полного разрешения, прежде чем более ранние чанки будут понижены до сжатого контекста FAR. В выпущенных контрольных точках используется 3.

num_attention_heads (int, по умолчанию 40) : Количество головок внимания.

attention_head_dim (int, по умолчанию 128) : количество каналов в каждой голове.

in_channels (int, по умолчанию 16) : Количество каналов во входном латентном представлении.

out_channels (int, по умолчанию 16) : Количество каналов в выходном латентном представлении.

text_dim (int, по умолчанию 4096) : Размерность входных данных для текстовых эмбеддингов (UMT5).

freq_dim (int, по умолчанию 256) : Размерность для синусоидных временных эмбеддингов.

ffn_dim (int, по умолчанию 13824) : Промежуточное измерение в полносвязной сети.

num_layers (int, по умолчанию 40) : Количество блоков трансформера.

cross_attn_norm (bool, по умолчанию True) : Включает нормализацию кросс-внимания.

eps (float, по умолчанию 1e-6) : Эпсилон для слоёв нормализации.

image_dim (Optional[int], optional, по умолчанию None) : Размерность эмбеддинга изображения для I2V-условия.

rope_max_seq_len (int, по умолчанию 1024) : Максимальная длина последовательности, используемая для предварительного вычисления частот ротационных позиционных кодировок.

gate_value (float, по умолчанию 0.25) : Шлюз смешивания между эмбеддингами исходного временного шага и дельта-шага.

deltatime_type (str, по умолчанию 'r') : либо "r" (delta — целевой шаг), либо "t-r" (delta — абсолютный интервал).

chunk_partition (Tuple[int, ...], по умолчанию (1, 3, 3, 3, 3, 3, 3, 2)) : Количество кадров на чанк по умолчанию, используемое конвейером. Опубликованные чекпоинты NVIDIA AnyFlow-FAR рассчитаны на num_frames=81 (21 латентных кадров при временном шаге VAE, равном 4) с разбиением 1 + 3*6 + 2. Для другого значения num_frames необходимо передать соответствующее переопределение chunk_partition в AnyFlowFARPipeline.call() (и аналогично в forward).

Causal (FAR) 3D-трансформер для выборки карт потоков AnyFlow с поштучной авто регрессивной генерацией.

Расширяет базовую модель Wan2.1 версии v0.35.1:

  • Причинная блок-маска FAR с использованием torch.nn.attention.flex_attention, поддерживающая поштучную авторегрессионную генерацию (FAR).
  • Встраивание патчей сжатых кадров far_patch_embedding для контекстных (уже сгенерированных) кадров, инициализируемое из patch_embedding с помощью трилинейной интерполяции, чтобы только что сконструированная модель уже находилась в разумной стартовой точке даже до дообучения с помощью LoRA.
  • Встраивание потока с двойным шагом времени для выборки с любым шагом (аналогично AnyFlowTransformer3DModel).

Для простого двунаправленного T2V используйте AnyFlowTransformer3DModel — этот вариант пропускает причинное маскирование FAR и far_patch_embedding и примерно на 5–10% меньше по размеру.

build_attention_mask[[diffusers.AnyFlowFARTransformer3DModel.build_attention_mask]]

build_attention_mask(chunk_partition: typing.List[int], height: int, width: int, has_clean_context: bool = False, device: typing.Optional[torch.device] = None, mode: str = 'train')

Источник

Параметры:

chunk_partition : количество кадров в каждом чанке (сумма должна равняться общему числу латентных кадров).

height, width : пространственные размеры латентного представления.

has_clean_context : True, если clean_hidden_states будет передаваться в forward (обучение V2V/I2V); только наличие этого флага влияет на структуру маски.

device : устройство для результирующего BlockMask. Маска не перемещается автоматически с помощью device_map="auto"; создавайте её на том же устройстве, где будут находиться входные данные трансформера.

mode : "train" (соответствует _forward_train) или "cache" (соответствует _forward_cache). Авто регрессионный путь _forward_inference обращается через KV-кэш и не имеет режима в этом контексте.

Возвращает: ~torch.nn.attention.flex_attention.BlockMask

causal mask, охватывающая раскладку FAR, дополненная нулями до кратного 128 значения по размерности последовательности (требование к размеру блока BlockMask).

Исключения: ValueError

  • ValueError -- если mode не является ни "train", ни "cache".

Предварительно создайте каузальную ~torch.nn.attention.flex_attention.BlockMask вне forward.

Передайте результат через аргумент attention_mask метода forward, чтобы сделать весь трансформер совместимым с torch.compile(fullgraph=True). Без заранее созданной маски forward переходит к внутреннему построению — этот путь использует flex_attention.create_block_mask(_compile=False) и нарушает граф компиляции.

forward[[diffusers.AnyFlowFARTransformer3DModel.forward]]

forward(hidden_states: Tensor, timestep: Tensor, r_timestep: Tensor, encoder_hidden_states: Tensor, chunk_partition: typing.List[int], encoder_hidden_states_image: typing.Optional[torch.Tensor] = None, clean_hidden_states: typing.Optional[torch.Tensor] = None, clean_timestep: typing.Optional[torch.Tensor] = None, kv_cache: typing.Optional[typing.List[typing.Dict[str, torch.Tensor]]] = None, kv_cache_flag: typing.Optional[typing.Dict[str, typing.Any]] = None, attention_mask: typing.Optional[torch.nn.attention.flex_attention.BlockMask] = None, attention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = None, return_dict: bool = True)

Источник

Параметры:

hidden_states (torch.Tensor) : Латентный вход с формой (B, F, C, H, W).

timestep (torch.Tensor) : исходный (более шумный) шаг временной шкалы flow-map t.

r_timestep (torch.Tensor) : целевой (более чистый) шаг временной шкалы потока r.

encoder_hidden_states (torch.Tensor) : Векторные представления текста UMT5.

chunk_partition (List[int]) : Количество кадров в каждом чанке; общее количество должно совпадать с числом латентных кадров в hidden_states.

encoder_hidden_states_image (torch.Tensor, optional) : эмбеддинг изображения для I2V; конкатенируется перед текстовыми токенами, если указан.

clean_hidden_states (torch.Tensor, optional) : Чистые (без шума) кадры, используемые в качестве условия для тренировочного rollout.

clean_timestep (torch.Tensor, optional) : Шаги для чистых кадров условий в тренировочном rollout.

kv_cache (List[Dict[str, torch.Tensor]], optional) : Кэш KV по блокам для авторегрессионного вывода. None выбирает режим обучения.

kv_cache_flag (Dict[str, Any], необязательный) : метаданные KV-кэша (например, флаг is_cache_step и количество токенов).

attention_mask (BlockMask, optional) : Готовая каузальная маска, как правило, создаваемая с помощью build_attention_mask. Используется в путях обучения и префилла KV-кэша; путь авторегрессионного вывода обращается через KV-кэш и не использует полную маску. Если None, пути обучения / кэша создают маску внутренне; этот запасной вариант несовместим с компиляцией (базовая функция flex_attention.create_block_mask нарушает граф при fullgraph=True), поэтому передавайте готовую маску при обёртке forward в torch.compile.

attention_kwargs (dict, optional) : Передаётся в обработчики внимания.

return_dict (bool, optional, по умолчанию True) : Если False, возвращает позиционные кортежи вместо выходного dataclass.

Возвращает: [~models.transformer_2d.Transformer2DModelOutput], [AnyFlowFARTransformerOutput] или tuple

Если return_dict равно False, возвращается обычный tuple. В противном случае, при обучении с каузальным развёртыванием (kv_cache is None) возвращается [~models.transformer_2d.Transformer2DModelOutput], а при префилле кэша и авторегрессионном выводе — [AnyFlowFARTransformerOutput].

Прямой проход FAR с причинной зависимостью. Направляет выполнение на один из трёх внутренних путей:

  • kv_cache is None → rollout для обучения с каузальностью (возвращает Transformer2DModelOutput).
  • kv_cache is not None и kv_cache_flag["is_cache_step"] → cache-prefill (возвращает AnyFlowFARTransformerOutput с sample=None).
  • В противном случае → шаг авто-регрессивного вывода (возвращает AnyFlowFARTransformerOutput).

AnyFlowFARTransformerOutput[[diffusers.models.transformers.transformer_anyflow_far.AnyFlowFARTransformerOutput]]

diffusers.models.transformers.transformer_anyflow_far.AnyFlowFARTransformerOutput[[diffusers.models.transformers.transformer_anyflow_far.AnyFlowFARTransformerOutput]]

diffusers.models.transformers.transformer_anyflow_far.AnyFlowFARTransformerOutput(sample: typing.Optional[torch.Tensor] = None, kv_cache: typing.Optional[typing.List[typing.Dict[str, torch.Tensor]]] = None)

Источник

Параметры:

sample (torch.Tensor или None) : Предсказанная цель денойзинга для авто-регрессивного чанка. None для пути кэширования префилла, который только записывает KV-кэш и не производит пригодных для использования образцов.

kv_cache (list[dict[str, torch.Tensor]], optional) : Состояние KV-кэша по блокам, используемое последующими шагами авто-регрессивного генерирования.

Данные класса для вывода в каузальных путах прямого прохода AnyFlowFARTransformer3DModel.

Xet Storage Details

Size:
17.6 kB
·
Xet hash:
12557d5fb605ba65c11f57f89750fc5a4406dd393c683917fe8efddeecec7a44

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.