Diffusers documentation
MiniMaxH3Transformer3DModel
MiniMaxH3Transformer3DModel
نموذج Diffusion Transformer لتوليد الفيديو والصوت معًا، تم تقديمه في MiniMax-H3 بواسطة MiniMax.
يعمل MiniMax-H3 على مكدس واحد من الكتل فوق تسلسل أحادي البُعد مُجمَّع واحد يحتفظ في آنٍ واحد بشروط النص، وصفوف صورة الشرط والفيديو، وصفوف الصوت، وصفوف الفيديو المستهدفة. يكون الانتباه انتباه ذاتي كاملًا على ذلك التسلسل، لذا لا يوجد انتباه متقاطع ولا أوزان كتل لكل نمط. تأتي السلوكيات الخاصة بكل نمط فقط من إسقاطي الباتش المدخلين، ووسم النمط لكل صف الذي يختار معاملات تعديل AdaLN، والرأسين المخرجين.
إنشاء التخطيط المُجمَّع هو مسؤولية المُستدعي، ولهذا السبب يستقبل توقيع الدالة الأمامية التخطيط منفصلاً عن الكمونيات: شبكة المواضع (t, h, w)، ووسوم الوسائط لكل صف، ومؤشرات خطوات الزمن لكل صف، والمصفوفات الفهرسية الثلاث التي تشير إلى صفوف الفيديو والصوت والنص. يبني MiniMaxH3Blocks وMiniMaxH3Ref2VABlocks كل ذلك.
يتطلب التخطيط الذي يحمل صفوف حشو (الوسم -1) واجهة خلفية للانتباه المقنّع، لأن تلك الصفوف تُحفظ في وثيقة انتباه خاصة بها بواسطة قناع منطقي؛ أما التسلسل الخالي من الحشو فلا يحتاج إلى قناع ويبقي جميع الواجهات الخلفية متاحة.
يحتوي المستودع الواحد على كلا قسمَي نقطة التفتيش المُصدَّرة، لذا فإن المجلد الفرعي هو ما يختار المهمة: transformer/ لمهام النص والإطارات المفتاحية، وtransformer_ref/ لمهمة المرجع الشامل.
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 بدلاً من تحويل النموذج باستخدام .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) — عدد كتل التحويل (transformer blocks). - 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) — قيمة إبسيلون لمعايير ما قبل الانتباه وما قبل الشبكة العصبية الأمامية. - qk_norm_eps (
float، القيمة الافتراضية1e-5) — قيمة إبسيلون لمعايير الاستعلام/المفتاح لكل رأس. - final_norm_eps (
float، القيمة الافتراضية1e-5) — قيمة إبسيلون لمعايرة مخرجات مُحسّن الرموز ولمعايرة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بدلاً من tuple عادي.
يعيد
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.