چیت‌شیت

مخلوطی از متخصصان (MoE) و معماری‌های هیبریدی

Mixture of Experts and Hybrid Architectures

مسیریاب‌ها، متخصصان، تعادل بدون زیان کمکی، MLA، محاسبات DeepSeek-V3 و مدل‌های هیبریدی Jamba SSM. فرمول‌ها و ماشین‌حساب‌های stdlib.

  • ۱۳ بخش
  • ۴ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. یک لایه‌ی MoE
  2. حلقه‌ی توازن بدون نیاز به زیان کمکی
  3. پیاده‌سازی مسیریاب در کد
  4. ماشین‌حساب‌های درون درس‌ها
  5. فرمول‌ها
  6. پیکربندی DeepSeek-V3
  7. مقایسه‌ی پهلوبه‌پهلوی مدل‌ها
  8. ارقام حافظه
  9. پیش‌فرض‌های ماشین‌حساب
  10. عیب‌یابی
  11. زمان استفاده از هر معماری
  12. کوته‌نوشت‌ها
  13. پرسش‌ها

یک لایه‌ی MoE

معماری
وضعیت پنهان توکنپس از اتنشن + نرمال‌سازیمسیریابیک لایه‌ی خطی، امتیازها (N_tokens, E)امتیازها + بایاستنها برای انتخابانتخاب Top-kk از میان E برای هر توکنمتخصص مشترکبرای هر توکنمتخصص مسیریابی‌شدهSwiGLU FFNمتخصص مسیریابی‌شدهSwiGLU FFNمجموع وزن‌دارگیت‌های کنترلی برآمده از امتیازهای خام

حلقه‌ی توازن بدون نیاز به زیان کمکی

گام‌به‌گام
  1. مقداردهی اولیهbias = [0.0] * n_experts. استفاده‌ی هدف برابر است با n_tokens * top_k / n_experts.
  2. مسیریابیانتخاب k برتر بر اساس scores + bias.
  3. گیتسافت‌مکس روی امتیازهای اصلی متخصصان انتخاب‌شده.
  4. شمارشتابع run_epoch دفعات فعال‌شدن هر متخصص را می‌شمارد.
  5. به‌روزرسانیبیشتر از هدف، bias[e] -= gamma. کمتر از هدف، bias[e] += gamma.
  6. تکرارنسخهٔ نمایشی از gamma=0.15 در 10 تکرار استفاده می‌کند.
  7. بررسیآنتروپی به سمت ln(n_experts)، یعنی حداکثر یکنواختی، افزایش می‌یابد.

پیاده‌سازی مسیریاب در کد

کد
python
def route(hidden, W_router, top_k, bias):
    E = len(W_router)
    scores = [sum(h * w for h, w in zip(hidden, W_router[e])) for e in range(E)]
    biased = [s + b for s, b in zip(scores, bias)]  # بایاس انتخاب را تغییر می‌دهد
    top_idx = sorted(range(E), key=lambda i: -biased[i])[:top_k]
    chosen = [scores[i] for i in top_idx]           # امتیازهای اصلی، بدون بایاس
    m = max(chosen)
    exps = [math.exp(c - m) for c in chosen]
    s = sum(exps)
    gates = [e / s for e in exps]                   # مجموع گیت‌های سافت‌مکس برابر با 1 است
    return top_idx, gates

ماشین‌حساب‌های درون درس‌ها

کار و کد
وظیفهکد
گزارش DeepSeek-V3print_report(name, cfg, ctx=131_072)
متوازن‌سازی متخصصانupdate_bias(bias, usage, target, gamma=0.15)
ارزیابی توازن مسیریابیentropy(counts)
شمارش هر config.jsonanalyze(name, config)
نام‌گذاری اتنشنattention_scheme(config)
آمارهای کل DeepSeek-V3compute_totals(cfg, ctx=None)
وضعیت SSM هیبریدیssm_state_bytes(cfg, bytes_per_elem)
کش کلید-مقدار هیبریدیkv_cache_bytes(cfg, ctx, bytes_per_elem)

فرمول‌ها

مفهوم‌ها
پارامترهای MoE
کل برابر با $E \times$ اندازهٔ FFN. فعال برای هر توکن برابر با $k \times$ اندازهٔ FFN.
تنک بودن
فعال تقسیم بر کل. 37/671 ≈ 5.5٪ در DeepSeek-V3.
دانه‌بندی دقیق
$\binom{256}{8} \approx 400$ تریلیون ترکیب متخصص برای هر توکن.
کش کلید-مقدار
2 * num_layers * num_kv_heads * head_dim * max_seq_len * bytes_per_element
کش MLA
num_layers * kv_lora_rank * max_seq_len * bytes_per_element
مدل SSM
$h_t = A h_{t-1} + B x_t$ و $y_t = C h_t$. حافظه برای هر توکن ثابت است.
عرض SwiGLU
ff_dim = (2/3) * 4 * hidden = 8/3 * hidden
ترکیب Jamba
مقدار l = 8 یعنی 1 لایه‌ی اتنشن به‌ازای هر 7 لایه‌ی Mamba. مقدار e = 2 یعنی MoE در یک‌درمیان لایه‌ها.

پیکربندی DeepSeek-V3

کد
text
hidden_size: 7168            # بعد امبدینگ
intermediate_size: 18432     # ‏MLP چگال، در 3 لایه‌ی اول
moe_intermediate_size: 2048  # ‏MLP برای هر متخصص
num_hidden_layers: 61        # ‏3 لایه چگال + 58 لایه MoE
first_k_dense_layers: 3      # ‏MLP چگال برای پایداری
num_attention_heads: 128     # هدهای پرس‌وجو
kv_lora_rank: 512            # متغیر نهفته‌ی MLA به‌ازای هر توکن در هر لایه
num_experts: 256             # متخصصان مسیریابی‌شده در هر بلوک
num_experts_per_tok: 8       # مسیریابی top-8
shared_experts: 1            # پایه‌ی چگالِ همیشه‌روشن
mtp_module: 1                # پیش‌بینی توکن t+2، با 14B پارامتر

مقایسه‌ی پهلوبه‌پهلوی مدل‌ها

مقایسه
فاکتورLlama 3 70BMixtral 8x7BDeepSeek V3Jamba
خانوادهترنسفورمر چگالترنسفورمر MoEترنسفورمر MoE‏Mamba + اتنشن + MoE
کل / فعال70B / 70B47B / 13B671B / 37B52B / 12B
متخصصانندارد8 متخصص، top-2256 + 1 متخصص مشترک، top-8‏MoE در لایه‌های یک‌درمیان
اتنشناتنشن پرس‌وجوی گروه‌بندی‌شده (64/8)اتنشن پرس‌وجوی گروه‌بندی‌شدهاتنشن چندسر نهفته1 لایه به‌ازای هر 7 لایه‌ی Mamba
زمینه128k32k128k256k روی یک پردازنده‌ی گرافیکی 80GB

ارقام حافظه

مفهوم‌ها
مدل Llama 3 8B در زمینهٔ 128k
کش کلید-مقدار برابر 17.2 GB. وزن‌های BF16 برابر 16 GB.
مدل DeepSeek-V3 در زمینهٔ 128k
کش MLA برابر 7.6 GB. خط مبنا با GQA به 30.5 GB نیاز دارد.
32 لایه در زمینهٔ 256k
ساختار MHA کامل نیازمند 128 GB. نسبت 1:7 در Jamba فقط 4 لایه‌ی اتنشن را کش می‌کند، یعنی 16 GB.
وضعیت SSM در Jamba
در مجموع 3.7 MB. با افزایش طول توالی رشد نمی‌کند.
مدل 671B با فرمت fp16
حدود 1.3 TB از حافظه‌ی گرافیکی. همه‌ی متخصصان روی GPU می‌مانند.
ماژول MTP
برابر با 14B افزون بر 671B. سربار 2.1%.

پیش‌فرض‌های ماشین‌حساب

پیش‌فرض‌ها
تنظیمپیش‌فرضنکته
kv_lora_rank512متغیر نهفته‌ی MLA زمانی که در پیکربندی قید نشده باشد
activationgelu‏swiglu و geglu یک ماتریس گیت اضافه می‌کنند
norms_per_layer2برای RMSNorm هر کدام h، برای LayerNorm برابر 2 * h
head_dimhidden_size / num_attention_headsمدل Gemma 2 9B عدد 256 تعیین می‌کند
layer_typesfull_attentionهر لایه تمام زمینه را کش می‌کند
rope_theta10kمدل Llama 3 آن را به 500k می‌رساند

عیب‌یابی

عیب‌یابی
  • 90% توکن‌ها به یک متخصص هدایت می‌شوند

    علت
    عدم توازن مسیریاب
    راه‌حل
    افزودن بایاس به‌ازای هر متخصص، به‌روزرسانی خارج از تابع زیان (loss)
  • کاهش کیفیت زیر بار ترافیکی

    علت
    سرریز ظرفیت و دور ریختن توکن‌ها
    راه‌حل
    استفاده از توازن مبتنی بر بایاس، به‌جای حذف توکن‌ها
  • تابع زیان وظیفهٔ اصلی بدتر می‌شود

    علت
    زیان کمکی توازن بار
    راه‌حل
    استفاده از راهکار بدون زیان کمکی
  • بایاس خروجی پیش‌بینی‌ها را منحرف می‌کند

    علت
    محاسبه‌ی گیت‌های کنترلی از روی امتیازهای دارای بایاس
    راه‌حل
    اعمال گیت با امتیازهای خام scores
  • تاخیر بالا در چند GPU

    علت
    ترافیک تبادل all-to-all بین متخصصان
    راه‌حل
    پرهیز از MoE در سرویس‌دهی‌های حساس به تاخیر
  • کش کلید-مقدار بزرگ‌تر از وزن‌های مدل است

    علت
    استفاده از MHA کامل در بافت‌های طولانی
    راه‌حل
    استفاده از اتنشن پرس‌وجوی گروه‌بندی‌شده یا اتنشن چندسر نهفته
  • شکست مدل هیبریدی در بازیابی درون‌زمینه

    علت
    لایه‌های اتنشن بسیار اندک، نسبت 1:15
    راه‌حل
    استفاده از نسبت 1:7 یا 1:8
  • تعداد پارامترها 525M کم دارد

    علت
    هد غیرمتصل LM شمرده نشده است
    راه‌حل
    بررسی فلگ tie_word_embeddings

زمان استفاده از هر معماری

نکته‌ها
  • از MoE برای رسیدن به کیفیت در لبه‌ی فناوری با هزینه‌ی استنتاج کمتر برای هر توکن استفاده کنید.
  • از MoE زمانی استفاده کنید که حافظه‌ی گرافیکی و زیرساخت موازی‌سازی متخصصان را دارید.
  • از MoE در پردازش لبه، برای سرویس‌دهی تک‌کاربره با تاخیر بحرانی، یا در مقیاس کمتر از 7B استفاده نکنید.
  • از مدل هیبریدی در بافت 64k+ یا با بودجه‌ی حافظه‌ی یک GPU استفاده کنید.
  • از مدل هیبریدی در بافت کمتر از 16k یا در اتنشن تمام‌به‌تمام استفاده نکنید.
  • در مدل‌های بالای حدود 13B پارامتر از اتنشن پرس‌وجوی گروه‌بندی‌شده یا اتنشن چندسر نهفته استفاده کنید.
  • در پیکربندی‌های پنجره‌ی لغزان، ابتدا نسبت لایه‌های کامل به لایه‌های لغزان را بررسی کنید.

کوته‌نوشت‌ها

اصطلاح‌ها
MoE
مخلوطی از متخصصان. N شبکه‌ی MLP در هر بلوک؛ مسیریاب top-k را برای هر توکن برمی‌گزیند.
GQA
اتنشن پرس‌وجوی گروه‌بندی‌شده. تعداد G گروه از هدهای پرس‌وجو یک K و یک V مشترک دارند.
MQA
اتنشن چندپرس‌وجو. یک K و یک V مشترک برای تمام هدها.
MLA
اتنشن چندسر نهفته. فشرده‌سازی K و V در یک فضای نهفته‌ی کم‌رتبه.
MTP
پیش‌بینی چندتوکنی. پیش‌بینی توکن $t+2$؛ تولید پیش‌نویس گمانه‌زنانه و بدون هزینه.
SSM
مدل فضای حالت. ساختاری بازگشتی با وضعیتی با اندازهٔ ثابت.
MIMO
چندورودی چندخروجی. تصاویر ماتریسی در Mamba-3.

پرسش‌ها

پرسش و پاسخ
چرا بایاس فقط روی انتخاب تاثیر دارد؟
توازن بار را بدون دستکاری پیش‌بینی‌ها تصحیح می‌کند.
متخصصان مشترک چه کاری انجام می‌دهند؟
دانش عمومی را ثبت می‌کنند. متخصصانِ مسیریابی‌شده تخصصی عمل می‌کنند.
چرا 3 لایه‌ی نخست V3 چگال هستند؟
لایه‌های آغازین برای حفظ پایداری، مسیریاب را دور می‌زنند.
علت استفاده از نسبت 1:7 در Jamba چیست؟
اتنشن بازخوانی دقیق را انجام می‌دهد؛ Mamba پردازش ارزان بخش عمده را بر عهده دارد.
چه معماری در مقیاس تریلیونی برنده است؟
ترنسفورمر خالص + اتنشن چندسر نهفته + MoE، به سبک DeepSeek-V3.