الفصل 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)
النقاط الرئيسية
الملخص
- التوازي البياني للنماذج الصغيرة
- التوازي النموذجي عندما لا يتناسب النموذج مع وحدة معالجة الرسوميات الواحدة
- ZeRO يقلل بشكل كبير من متطلبات الذاكرة
- الدقة المختلطة (bf16) تسرع التدريب