Diffusers documentation

MiniMaxH3Transformer3DModel

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

MiniMaxH3Transformer3DModel

Модель Diffusion Transformer для совместной генерации видео и аудио, представленная в MiniMax-H3 от MiniMax.

MiniMax-H3 выполняет пропуск через единый стек блоков по одной упакованной одномерной последовательности, которая одновременно содержит текстовые условия, строки изображения-условия и видео, строки аудио и целевые строки видео. Вниманием является полное само-внимание по этой последовательности, поэтому кросс-внимания и отдельных весов блоков для каждой модальности нет. Поведение, специфичное для модальности, обеспечивается только двумя входными проекциями патчей, тегом модальности для каждой строки, который выбирает параметры модуляции AdaLN, и двумя выходными головами.

Создание упакованной раскладки — задача вызывающего кода, поэтому сигнатура forward принимает раскладку отдельно от латентов: сетку позиций (t, h, w), теги модальности для каждой строки, индексы временных шагов для каждой строки и три тензора индексов, указывающие на строки видео, аудио и текста. MiniMaxH3Blocks и MiniMaxH3Ref2VABlocks формируют всё это.

Раскладка, содержащая строки отступов (тег -1), требует бэкенда маскированного внимания, поскольку эти строки сохраняются в собственном документе внимания с помощью булевой маски; последовательность без отступов не требует маски и сохраняет доступность всех бэкендов.

Один репозиторий содержит как выпущенные, так и контрольные точки, поэтому подпапка определяет задачу: transformer/ для задач с текстом и ключевыми кадрами, transformer_ref/ для задачи omni-reference.

import torch
from diffusers import MiniMaxH3Transformer3DModel

transformer = MiniMaxH3Transformer3DModel.from_pretrained(
    "MiniMaxAI/MiniMax-H3", subfolder="transformer", dtype=torch.bfloat16
).to("cuda")  # or "mps", "xpu", "cpu"

Чекпоинт использует смешанную точность: два входных проекционных слоя патчей, MLP временных шагов и два выходных слоя имеют тип float32, а стек блоков — bfloat16. from_pretrained сохраняет эту структуру благодаря _keep_in_fp32_modules, поэтому передавайте dtype=torch.bfloat16 и позвольте функции разместить модули float32, а не приводить модель к типу bfloat16 с помощью .to(torch.bfloat16) после загрузки.

MiniMaxH3Transformer3DModel

класс diffusers.MiniMaxH3Transformer3DModel

< >

( num_attention_heads: int = 56attention_head_dim: int = 128hidden_size: int = 5376num_layers: int = 50num_refiner_layers: int = 2ffn_dim: int = 14336in_channels: int = 24audio_in_channels: int = 32patch_size: tuple[int, int, int] = (1, 2, 2)text_dim: int = 5120freq_dim: int = 256time_embed_hidden_dim: int = 5376time_embed_dim: int = 2688rope_freq_dim: int = 16rope_theta: float = 10000.0norm_eps: float = 1e-05qk_norm_eps: float = 1e-05final_norm_eps: float = 1e-05 )

Параметры

  • num_attention_heads (int, по умолчанию 56) — Количество голов, используемых для многоголовного внимания.
  • attention_head_dim (int, по умолчанию 128) — Количество каналов в каждой голове внимания. Обратите внимание, что num_attention_heads * attention_head_dim больше, чем hidden_size в MiniMax-H3.
  • hidden_size (int, по умолчанию 5376) — Количество каналов упакованной последовательности (остаточного потока).
  • num_layers (int, по умолчанию 50) — Количество блоков трансформера.
  • num_refiner_layers (int, по умолчанию 2) — Количество блоков уточнения токенов, применяемых к проецированному текстовому потоку.
  • ffn_dim (int, по умолчанию 14336) — Внутреннее измерение полносвязных слоёв SwiGLU.
  • in_channels (int, по умолчанию 24) — Количество каналов латентов видео.
  • audio_in_channels (int, по умолчанию 32) — Количество каналов аудиовыходных латентов.
  • patch_size (tuple[int, int, int], по умолчанию (1, 2, 2)) — Патч (t, h, w), используемый для упаковки латентов видео в строки.
  • text_dim (int, по умолчанию 5120) — Количество каналов текстового условия, создаваемого текстовым энкодером.
  • freq_dim (int, по умолчанию 256) — Размерность синусоидального эмбеддинга временных шагов. Временные шаги используются без масштабирования в диапазоне [0, 1].
  • time_embed_hidden_dim (int, по умолчанию 5376) — Внутреннее измерение MLP для временных шагов.
  • time_embed_dim (int, по умолчанию 2688) — Выходное измерение MLP для временного шага, то есть вход для каждого проекционного слоя AdaLN.
  • rope_freq_dim (int, по умолчанию 16) — Количество ротационных частот на ось. Оси (t, h, w) используют общий буфер inv_freq этой длины, а 2 * 3 * rope_freq_dim из каналов attention_head_dim подвергаются ротации.
  • rope_theta (float, по умолчанию 10000.0) — Основание расписания вращательных частот, по которому вычисляется буфер rope.inv_freq.
  • norm_eps (float, по умолчанию 1e-5) — Epsilon для нормализации перед attention и перед feed-forward.
  • qk_norm_eps (float, по умолчанию 1e-5) — Epsilon для норм запросов/ключей по каждой голове.
  • final_norm_eps (float, по умолчанию 1e-5) — Epsilon для нормализации вывода токенового рефинера и для norm_out.

Модель Transformer для совместной генерации видео и аудио, представленная в MiniMax-H3.

MiniMax-H3 выполняет пропуск через единый стек блоков по одной упакованной одномерной последовательности, содержащей текстовое условие, строки изображения/видео для условий, строки аудио и целевые строки видео. Вниманием является полное само-внимание по этой последовательности; кросс-внимания и отдельных весов блоков для каждой модальности нет. Поведение, специфичное для модальности, определяется только двумя входными проекциями патчей, тегом модальности AdaLN для каждой строки и двумя выходными головами.

Вызывающая сторона отвечает за формирование упакованной раскладки: патчификацию латентов видео, упорядочивание строк и построение сетки позиций (t, h, w), модальных тегов для каждой строки и индексов временных шагов для каждой строки. Последовательность не содержит заполнителей — эталонная реализация дополняет её до кратного 64 для FlashAttention и отрезает хвост с помощью cu_seqlens = [0, used, S], что в данном порту не требуется, — поэтому внимание выполняется без маски по одному документу, и остаются доступными все бэкенды внимания.

Ось батча является осью чистой репликации: структурные аргументы (timestep, timestep_indices, token_tags, position_ids и три тензора индексов) описывают один упакованный макет, общий для всех элементов батча, при этом каждый элемент представляет собой один документ внимания.

forward

< >

( hidden_states: Tensoraudio_hidden_states: Tensorencoder_hidden_states: Tensortimestep: Tensortimestep_indices: Tensortoken_tags: Tensorposition_ids: Tensorvideo_indices: Tensoraudio_indices: Tensortext_indices: Tensorattention_kwargs: dict[str, typing.Any] | None = Nonereturn_dict: bool = True ) → MiniMaxH3TransformerOutput or tuple

Параметры

  • hidden_states (torch.Tensor формы (batch_size, num_video_tokens, in_channels * prod(patch_size))) — Строки латентных представлений видео, разбитые на патчи — строки условий и целевые строки — в том порядке, в котором они появляются в упакованной последовательности, то есть в соответствии с video_indices.
  • audio_hidden_states (torch.Tensor формы (batch_size, num_audio_tokens, audio_in_channels)) — Латентные строки аудио, упорядоченные в соответствии с audio_indices.
  • encoder_hidden_states (torch.Tensor формы (batch_size, num_text_tokens, text_dim)) — Текстовое условие, упорядоченное в соответствии с text_indices.
  • timestep (torch.Tensor формы (num_timesteps,)) — Значения отдельных шагов времени, присутствующие в упакованной последовательности, в диапазоне [0, 1] и без масштабирования. Один прямой проход обрабатывает строки с разными уровнями шума (целевое видео, целевой звук, строки условий).
  • timestep_indices (torch.Tensor формы (seq_len,)) — Для каждой строки упакованной последовательности — индекс её временного шага в timestep.
  • token_tags (torch.Tensor формы (seq_len,)) — Для каждой строки упакованной последовательности её модальность: 0 видео, 1 текст, 2 аудио.
  • position_ids (torch.Tensor формы (seq_len, 3)) — Ротационные координаты (t, h, w) каждой строки упакованной последовательности.
  • video_indices (torch.Tensor формы (num_video_tokens,)) — Позиции строк видео в упакованной последовательности.
  • audio_indices (torch.Tensor формы (num_audio_tokens,)) — Позиции строк аудио в упакованной последовательности.
  • text_indices (torch.Tensor формы (num_text_tokens,)) — Позиции строк текста в упакованной последовательности.
  • attention_kwargs (dict, необязательный) — Словарь kwargs, который, если указан, может содержать запись scale, применяемую к слоям LoRA.
  • return_dict (bool, по умолчанию True) — Определяет, возвращать ли MiniMaxH3TransformerOutput вместо обычного кортежа.

Возвращает

MiniMaxH3TransformerOutput или tuple

Скорость видео формы (batch_size, num_video_tokens, in_channels * prod(patch_size)) и скорость аудио формы (batch_size, num_audio_tokens, audio_in_channels), в порядке строк video_indices и audio_indices.

MiniMaxH3TransformerOutput

класс diffusers.models.transformers.transformer_minimax_h3.MiniMaxH3TransformerOutput

< >

( sample: Tensoraudio_sample: typing.Optional[torch.Tensor] = None )

Параметры

  • sample (torch.Tensor формы (batch_size, num_video_tokens, in_channels * prod(patch_size))) — Прогноз скорости видео для строк, указанных в video_indices, в том же порядке. Строки условий возвращаются без маски — их маскирование перед шагом планировщика является обязанностью вызывающего кода.
  • audio_sample (torch.Tensor формы (batch_size, num_audio_tokens, audio_in_channels), по умолчанию None) — Прогноз скорости аудио для строк, указанных в audio_indices, в том же порядке. forward всегда заполняет это поле; оно принимает значение None по умолчанию только для того, чтобы выходной объект можно было восстановить из обычного словаря его полей — именно так хуки offload в accelerate возвращают BaseOutput на исходное устройство.

Вывод MiniMaxH3Transformer3DModel.

Update on GitHub