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

الفصل 2: المتطلبات الحسابية

حساب ذاكرة GPU وتكاليف التدريب​

فهم المتطلبات الحسابية للتخصيص الدقيق أمر بالغ الأهمية لتخطيط مشاريعك واختيار النهج الصحيح.


مكونات ذاكرة GPU​

أثناء التدريب، تستهلك ذاكرة GPU بواسطة أربعة مكونات رئيسية:

1. أوزان النموذج​

معلمات النموذج نفسه.

2. التدرجات​

نفس حجم الأوزان - يخزن التدرج لكل معلمة.

3. حالات المحسن​

يخزن AdamW حالتين (الزخم، التباين) لكل معلمة.

4. التنشيطات​

القيم الوسيطة اللازمة للانتشار العكسي.


صيغة حساب الذاكرة​

الصيغة الأساسية​

Memory (bytes) = Parameters × Precision × Multiplier

Where Multiplier for training:
- Inference: 1
- AdamW training: 4-6 (weights + gradients + 2 optimizer states + activations)

أحجام الدقة​

الدقةالبايت لكل معلمة
float324
bfloat162
float162
int81
int40.5

متطلبات الذاكرة للتخصيص الدقيق الكامل​

مثال: نموذج 7B معلمة​

# Parameters: 7 billion
parameters = 7_000_000_000

# With float32 (full precision)
weights_fp32 = parameters * 4 # 28 GB
gradients_fp32 = parameters * 4 # 28 GB
optimizer_fp32 = parameters * 4 * 2 # 56 GB (2 states)
# Total: ~112 GB ❌ Too much for most GPUs

# With bfloat16 + mixed precision
weights_bf16 = parameters * 2 # 14 GB
gradients_bf16 = parameters * 2 # 14 GB
optimizer_fp32 = parameters * 4 * 2 # 56 GB (kept in fp32)
# Total: ~84 GB ⚠️ Still requires A100-80GB

# With gradient checkpointing + bf16
# Activations reduced by ~30%
# Total: ~60-70 GB

جدول متطلبات الذاكرة​

حجم النموذجالتخصيص الكامل (fp32)التخصيص الكامل (bf16)مع Grad Ckpt
1B~16 GB~12 GB~8 GB
7B~112 GB~84 GB~60 GB
13B~208 GB~156 GB~110 GB
70B~1.1 TB~840 GB~600 GB

تقليل متطلبات الذاكرة​

1. التدريب بدقة مختلطة​

training_args = TrainingArguments(
bf16=True, # Use bfloat16
)

يقلل من ذاكرة الأوزان والتدرجات بحوالي 50٪.

2. التحقق من التدرج​

training_args = TrainingArguments(
gradient_checkpointing=True,
)
# OR
model.gradient_checkpointing_enable()

يستبدل الحوسبة بالذاكرة - يعيد حساب التنشيطات أثناء المرور العكسي.

3. تراكم التدرج​

training_args = TrainingArguments(
per_device_train_batch_size=1,
gradient_accumulation_steps=16,
# Effective batch size = 1 * 16 = 16
)

تستخدم الدفعات الأصغر ذاكرة أقل؛ تراكم التدرجات لمحاكاة دفعات أكبر.

4. المحسنات الفعالة للذاكرة​

# 8-bit Adam (requires bitsandbytes)
training_args = TrainingArguments(
optim="adamw_8bit",
)

# OR Adafactor (no momentum)
training_args = TrainingArguments(
optim="adafactor",
)

5. DeepSpeed ZeRO​

# deepspeed_config.json
{
"zero_optimization": {
"stage": 2, # Partition gradients and optimizer states
}
}

# In training
training_args = TrainingArguments(
deepspeed="deepspeed_config.json",
)

مراحل ZeRO:

  • المرحلة 1: تقسيم حالات المحسن
  • المرحلة 2: + تقسيم التدرجات
  • المرحلة 3: + تقسيم أوزان النموذج (يتيح تدريب النماذج الأكبر من ذاكرة GPU)

توصيات عملية لـ GPU​

التدريب على GPU واحد​

GPUVRAMالحد الأقصى للنموذج (التخصيص الكامل)الحد الأقصى للنموذج (فعال)
RTX 309024 GB1B3B
RTX 409024 GB1B3B
A100-40GB40 GB3B7B
A100-80GB80 GB7B13B
H10080 GB7B13B

التدريب على عدة وحدات GPU​

# Automatic distribution with accelerate
from accelerate import Accelerator

accelerator = Accelerator()
model, optimizer, dataloader = accelerator.prepare(
model, optimizer, dataloader
)
الإعدادVRAM المدمجالحد الأقصى للنموذج (فعال)
2× A100-40GB80 GB7-13B
4× A100-80GB320 GB30-40B
8× H100640 GB70B

تقدير وقت التدريب​

العوامل المؤثرة على وقت التدريب​

Training Time = (Dataset Size × Epochs) / (Batch Size × Throughput)

أمثلة على الإنتاجية (tokens/second)​

النموذجGPUالإنتاجية
7BA100-40GB~1,000 tokens/s
7BH100~2,000 tokens/s
13BA100-80GB~500 tokens/s
70B8× H100~800 tokens/s

مثال على حساب الوقت​

# Dataset: 10,000 examples, 512 tokens each
total_tokens = 10_000 * 512 = 5_120_000

# Training: 3 epochs
total_training_tokens = 5_120_000 * 3 = 15_360_000

# Throughput: 1,000 tokens/second
training_time_seconds = 15_360_000 / 1_000 = 15,360 seconds
training_time_hours = 15_360 / 3_600 = 4.3 hours

تقدير تكلفة السحابة​

تسعير GPU (تقريبي)​

GPUعند الطلب ($/hr)سبوت ($/hr)
T4$0.50$0.15
A10G$1.50$0.45
A100-40GB$4.00$1.20
A100-80GB$6.00$1.80
H100$8.00$2.40

مثال على حساب التكلفة​

# Training a 7B model
# Time: 4 hours on A100-40GB
# Cost: 4 × $4.00 = $16 (on-demand)
# Cost: 4 × $1.20 = $4.80 (spot)

# With experimentation (5 runs)
# Total: $80 (on-demand) or $24 (spot)

تحليل الذاكرة​

تحقق من استخدام الذاكرة الحالي​

import torch

# Current allocated memory
allocated = torch.cuda.memory_allocated() / 1024**3
print(f"Allocated: {allocated:.2f} GB")

# Peak memory usage
peak = torch.cuda.max_memory_allocated() / 1024**3
print(f"Peak: {peak:.2f} GB")

# Reset peak stats
torch.cuda.reset_peak_memory_stats()

تقدير قبل التدريب​

def estimate_memory(model, batch_size, seq_len, precision="bf16"):
"""Estimate training memory requirements."""
param_count = sum(p.numel() for p in model.parameters())

# Bytes per parameter based on precision
bytes_per_param = 2 if precision == "bf16" else 4

# Model weights
weights_gb = (param_count * bytes_per_param) / 1024**3

# Gradients (same as weights)
gradients_gb = weights_gb

# Optimizer states (AdamW: 2 states in fp32)
optimizer_gb = (param_count * 4 * 2) / 1024**3

# Activations (rough estimate)
activation_gb = (batch_size * seq_len * 4096 * 4) / 1024**3 # Approximate

total_gb = weights_gb + gradients_gb + optimizer_gb + activation_gb

print(f"Weights: {weights_gb:.2f} GB")
print(f"Gradients: {gradients_gb:.2f} GB")
print(f"Optimizer: {optimizer_gb:.2f} GB")
print(f"Activations: ~{activation_gb:.2f} GB")
print(f"Total: ~{total_gb:.2f} GB")

return total_gb

قائمة التحقق من التحسين​

□ Enable mixed precision (bf16/fp16)
□ Enable gradient checkpointing
□ Use gradient accumulation for larger effective batch sizes
□ Consider 8-bit optimizers
□ Use DeepSpeed for multi-GPU
□ Monitor memory with profiling
□ Use spot instances for cost savings

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

✅ يتطلب التخصيص الدقيق الكامل ~4-6x حجم النموذج في ذاكرة GPU

✅ يحتاج نموذج 7B إلى 60-80GB للتخصيص الدقيق الكامل

✅ الدقة المختلطة والتحقق من التدرج يقللان بشكل كبير من الذاكرة

✅ يتيح التدريب على عدة وحدات GPU نماذج أكبر

✅ يمكن تقليل تكاليف السحابة بنسبة 60-70٪ باستخدام سبوت

✅ قم دائمًا بتحليل الذاكرة قبل الالتزام بجلسات تدريب طويلة


الخطوات التالية​

تابع إلى الفصل 3: النسيان الكارثي لتتعلم عن الاحتفاظ بالمعرفة أثناء التخصيص الدقيق.


تحقق سريع​

قبل المتابعة، تأكد من أنك تستطيع الإجابة على:

  1. ما هي المكونات الأربعة الرئيسية التي تستهلك ذاكرة GPU أثناء التدريب؟
  2. كم تتطلب ذاكرة نموذج 7B للتخصيص الدقيق الكامل مع bf16؟
  3. ما هو الغرض من تراكم التدرج؟