Diffusers documentation
MiniMaxH3ImageTransformer2DModel
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
< 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 = 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ằngnum_attention_heads * attention_head_dimlớn hơnhidden_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ộ đệminv_freqcó độ dài này và2 * 3 * rope_freq_dimtrong số các kênhattention_head_dimsẽ đượ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ộ đệmrope.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ủanorm_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
< source >( 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.Tensorcó 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ớiimage_indices. - encoder_hidden_states (
torch.Tensorcó 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ớitext_indices. - timestep (
torch.Tensorcó 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.Tensorcó 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ó trongtimestep. - token_tags (
torch.Tensorcó 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,1văn bản. - position_ids (
torch.Tensorcó 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.Tensorcó 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.Tensorcó 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.