Diffusers documentation

MiniMaxH3ImageTransformer2DModel

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

MiniMaxH3ImageTransformer2DModel

Một mô hình Diffusion Transformer cho việc tạo và chỉnh sửa hình ảnh, được giới thiệu trong MiniMax-H3-Image bởi MiniMax.

Đây là MiniMaxH3Transformer3DModel không có luồng âm thanh: một chồng các khối duy nhất chạy trên một chuỗi 1-D đã đóng gói chứa điều kiện văn bản, các hàng của hình ảnh tham chiếu và các hàng của hình ảnh được tạo ra. Việc xây dựng bố cục đóng gói là trách nhiệm của người gọi, đó là lý do tại sao chữ ký forward tách bố cục khỏi các latent: lưới vị trí (t, h, w), các thẻ phương thức cho từng hàng, các chỉ số bước thời gian cho từng hàng và hai tensor chỉ số để truy cập các hàng hình ảnh và văn bản. MiniMaxH3ImageBlocks xây dựng tất cả những điều này.

Checkpoint được chưng cất xuống sáu bước lấy mẫu bằng Parallel Decoding Distillation (PDD), trong đó mỗi bước giữ một đầu ra. Do đó, forward nhận pdd_step_index, tức là bước đang thực thi, và chiếu (project) bằng đầu ra của bước đó.

import torch
from diffusers import MiniMaxH3ImageTransformer2DModel

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

Checkpoint có độ chính xác hỗn hợp: đầu vào patch projection, timestep MLP và các output heads là float32 trong khi block stack là bfloat16. from_pretrained giữ nguyên bố cục đó thông qua _keep_in_fp32_modules, vì vậy hãy truyền dtype=torch.bfloat16 và để nó đặt các module float32 thay vì chuyển đổi model bằng .to(torch.bfloat16) sau đó.

MiniMaxH3ImageTransformer2DModel

lớp diffusers.MiniMaxH3ImageTransformer2DModel

< >

( num_attention_heads: int = 56attention_head_dim: int = 128hidden_size: int = 5376num_layers: int = 50num_refiner_layers: int = 2ffn_dim: int = 14336in_channels: int = 24patch_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-05num_pdd_heads: int = 6 )

Tham số

  • num_attention_heads (int, mặc định là 56) — Số lượng đầu (heads) được sử dụng cho cơ chế chú ý đa đầu (multi-head attention).
  • attention_head_dim (int, mặc định là 128) — Số lượng kênh trong mỗi đầu chú ý. Lưu ý rằng num_attention_heads * attention_head_dim lớn hơn hidden_size.
  • hidden_size (int, mặc định là 5376) — Số lượng kênh của chuỗi đã đóng gói (dòng dư).
  • num_layers (int, mặc định là 50) — Số lượng khối transformer.
  • num_refiner_layers (int, mặc định là 2) — Số lượng khối token refiner được áp dụng cho luồng văn bản đã được chiếu (projected).
  • ffn_dim (int, mặc định là 14336) — Kích thước chiều trong của các lớp feed-forward SwiGLU.
  • in_channels (int, mặc định là 24) — Số lượng kênh của các latent hình ảnh.
  • patch_size (tuple[int, int, int], mặc định là (1, 2, 2)) — (t, h, w) patch được dùng để đóng gói các latents thành các hàng.
  • text_dim (int, mặc định là 5120) — Số lượng kênh của điều kiện văn bản do trình mã hóa văn bản tạo ra.
  • freq_dim (int, mặc định là 256) — Kích thước của nhúng bước thời gian hình sin. Các bước thời gian được sử dụng không có hệ số trong [0, 1].
  • time_embed_hidden_dim (int, mặc định là 5376) — Chiều kích bên trong của MLP bước thời gian.
  • time_embed_dim (int, mặc định là 2688) — Kích thước đầu ra của MLP bước thời gian, tức là đầu vào của mọi phép chiếu AdaLN.
  • rope_freq_dim (int, mặc định là 16) — Số lượng tần số xoay (rotary) trên mỗi trục. Các trục (t, h, w) dùng chung một bộ đệm inv_freq có độ dài này và 2 * 3 * rope_freq_dim trong số các kênh attention_head_dim sẽ được xoay.
  • rope_theta (float, mặc định là 10000.0) — Cơ số của lịch trình tần số quay mà bộ đệm rope.inv_freq được tính từ đó.
  • norm_eps (float, mặc định là 1e-5) — Epsilon của các chuẩn hóa (norms) trước chú ý (pre-attention) và trước mạng tiền hướng (pre-feed-forward).
  • qk_norm_eps (float, mặc định là 1e-5) — Epsilon của các chuẩn query/key trên mỗi head.
  • final_norm_eps (float, mặc định là 1e-5) — Epsilon của chuẩn hóa đầu ra của bộ tinh chỉnh token và của norm_out.
  • num_pdd_heads (int, mặc định là 6) — Số bước lấy mẫu mà checkpoint đã được chưng cất, mỗi bước có một đầu ra riêng.

Một mô hình Transformer cho việc tạo và chỉnh sửa hình ảnh, được giới thiệu trong MiniMax-H3-Image.

Đây là transformer MiniMax-H3 không có luồng âm thanh: một chồng khối duy nhất chạy trên một chuỗi 1-D đóng gói chứa điều kiện văn bản, các hàng của hình ảnh tham chiếu và các hàng của hình ảnh được tạo ra. Attention là full self-attention trên chuỗi đó; không có cross-attention. Checkpoint được chưng cất (distilled) xuống một số bước lấy mẫu cố định bằng Parallel Decoding Distillation (PDD), giữ lại một đầu ra (output head) cho mỗi bước, do đó forward nhận vào chỉ số của bước đang thực thi.

Người gọi chịu trách nhiệm xây dựng bố cục đã đóng gói: patchify các latents, sắp xếp các hàng và tạo ra lưới vị trí (t, h, w), các thẻ modality cho từng hàng và các chỉ số timestep cho từng hàng. Chuỗi không chứa padding, do đó attention chạy không có mask trên một tài liệu và mọi backend attention đều khả dụng.

Trục batch là một trục nhân bản thuần túy: các đối số cấu trúc (timestep, timestep_indices, token_tags, position_ids và hai tensor chỉ số) mô tả một bố cục đóng gói duy nhất mà mọi phần tử trong batch cùng chia sẻ.

forward

< >

( hidden_states: Tensorencoder_hidden_states: Tensortimestep: Tensortimestep_indices: Tensortoken_tags: Tensorposition_ids: Tensorimage_indices: Tensortext_indices: Tensorpdd_step_index: intreturn_dict: bool = True ) → Transformer2DModelOutput or tuple

Tham số

  • hidden_states (torch.Tensor có hình dạng (batch_size, num_image_tokens, in_channels * prod(patch_size))) — Các hàng latent đã được chia patch — bao gồm các hàng của ảnh tham chiếu và các hàng của ảnh được tạo ra — được sắp xếp theo thứ tự xuất hiện trong chuỗi đã đóng gói, tức là khớp với image_indices.
  • encoder_hidden_states (torch.Tensor có hình dạng (batch_size, num_text_tokens, text_dim)) — Điều kiện văn bản, được sắp xếp để khớp với text_indices.
  • timestep (torch.Tensor có hình dạng (num_timesteps,)) — Các giá trị khác nhau của timestep có mặt trong chuỗi được đóng gói, nằm trong khoảng [0, 1] và chưa được nhân hệ số. Một lần forward phục vụ các hàng ở các mức nhiễu khác nhau (các hàng được tạo ra, các hàng tham chiếu).
  • timestep_indices (torch.Tensor có hình dạng (seq_len,)) — Với mỗi hàng của chuỗi đã đóng gói, chỉ số của bước thời gian của nó trong timestep.
  • token_tags (torch.Tensor có hình dạng (seq_len,)) — Với mỗi hàng của chuỗi đã đóng gói, chế độ của nó: 0 ảnh, 1 văn bản.
  • position_ids (torch.Tensor có hình dạng (seq_len, 3)) — Các tọa độ xoay (t, h, w) của mọi hàng trong chuỗi được đóng gói.
  • image_indices (torch.Tensor có hình dạng (num_image_tokens,)) — Vị trí của các hàng ảnh trong chuỗi đã đóng gói.
  • text_indices (torch.Tensor có hình dạng (num_text_tokens,)) — Vị trí của các hàng văn bản trong chuỗi đã đóng gói.
  • pdd_step_index (int) — Bước lấy mẫu, dùng để chọn đầu ra.
  • return_dict (bool, mặc định là True) — Có nên trả về một Transformer2DModelOutput thay vì một tuple thông thường hay không.

Trả về

Transformer2DModelOutput hoặc tuple

Tốc độ của mỗi hàng ảnh, có hình dạng (batch_size, num_image_tokens, in_channels * prod(patch_size)), theo thứ tự hàng của image_indices.

Update on GitHub