إنتقل إلى المحتوى الرئيسي

الفصل 3: تقنيات التدريب الموزّع

المقدمة​

يتطلب تدريب نماذج اللغة الكبيرة (LLMs) التي تحتوي على مليارات المعاملات توزيع العمل عبر العديد من وحدات معالجة الرسوميات (GPUs). يغطي هذا الفصل استراتيجيات التوازي الرئيسية.

التوازي البياني​

النهج الأبسط​

import torch.distributed as dist
from torch.nn.parallel import DistributedDataParallel

# Each GPU processes different data, same model
model = DistributedDataParallel(model)

القيود: يجب أن يتناسب النموذج مع وحدة معالجة الرسوميات الواحدة

التوازي النموذجي​

التوازي التنسوري​

تقسيم الطبقات الفردية عبر وحدات معالجة الرسوميات:

[Layer Weight Matrix]
↓ Split columns
[GPU 0: W[:, :d/2]] [GPU 1: W[:, d/2:]]

التوازي الأنبوبي​

طبقات مختلفة على وحدات معالجة الرسوميات المختلفة:

GPU 0: Layers 0-11
GPU 1: Layers 12-23
GPU 2: Layers 24-35
GPU 3: Layers 36-47

ZeRO: المُحسّن بدون تكرار​

ثلاث مراحل​

المرحلةما يتم تقسيمهتوفير الذاكرة
ZeRO-1حالات المُحسّن4x
ZeRO-2+ التدرجات8x
ZeRO-3+ المعاملاتخطي مع وحدات معالجة الرسوميات

التنفيذ مع DeepSpeed​

import deepspeed

model_engine, optimizer, _, _ = deepspeed.initialize(
model=model,
config={
"zero_optimization": {
"stage": 3,
"offload_optimizer": {"device": "cpu"},
"offload_param": {"device": "cpu"}
},
"bf16": {"enabled": True}
}
)

حساب التدريب​

مقياس Chinchilla​

التدريب الأمثل: حوالي 20 موجّه لكل معامل

# Compute-optimal model size
def optimal_model_size(compute_budget):
# C ≈ 6 * N * D (N=params, D=tokens)
# Optimal: D ≈ 20N
return compute_budget / (6 * 20)

النقاط الرئيسية​

الملخص
  1. التوازي البياني للنماذج الصغيرة
  2. التوازي النموذجي عندما لا يتناسب النموذج مع وحدة معالجة الرسوميات الواحدة
  3. ZeRO يقلل بشكل كبير من متطلبات الذاكرة
  4. الدقة المختلطة (bf16) تسرع التدريب