Diffusers documentation
MiniMaxH3Transformer3DModel
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
< source >( 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 = (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
< source >( 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
< source >( 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.