TensorRT-LLM وتحسين GPU
تقنيات تكميم نماذج اللغة الكبيرة
4 دقيقة للقراءة
يقلل التكميم دقة النموذج من FP32/FP16 إلى عروض بت أقل، مما يقلل بشكل كبير متطلبات الذاكرة ويزيد الإنتاجية مع الحفاظ على جودة مقبولة.
صيغ التكميم
تسلسل الدقة (الذاكرة لكل معامل):
FP32 (32-بت) ████████████████████████████████ 4 بايت
FP16 (16-بت) ████████████████ 2 بايت
BF16 (16-بت) ████████████████ 2 بايت
FP8 (8-بت) ████████ 1 بايت
INT8 (8-بت) ████████ 1 بايت
INT4 (4-بت) ████ 0.5 بايت
FP4 (4-بت) ████ 0.5 بايت
توفير الذاكرة (نموذج 70B):
FP16: 140GB → FP8: 70GB → INT4: 35GB
تكميم FP8 (Hopper/Ada/Blackwell)
FP8 هو النقطة المثلى للاستدلال الحديث، يقدم تقليل ذاكرة 2x مع خسارة جودة ضئيلة:
from tensorrt_llm.builder import BuildConfig
from tensorrt_llm.quantization import QuantConfig
# تكوين تكميم FP8
quant_config = QuantConfig(
quant_algo="FP8",
kv_cache_quant_algo="FP8", # تكميم ذاكرة KV أيضاً
)
build_config = BuildConfig(
max_input_len=4096,
max_seq_len=8192,
max_batch_size=64,
precision="float16", # الدقة الأساسية
quant_config=quant_config,
)
# البناء مع FP8
llm = LLM(
model="/models/llama-3.1-70b",
build_config=build_config,
)
صيغ FP8
| الصيغة | الأس | الجزء العشري | النطاق | الأفضل لـ |
|---|---|---|---|---|
| E4M3 | 4 بت | 3 بت | ±240 | الأوزان |
| E5M2 | 5 بت | 2 بت | ±57344 | التنشيطات |
يختار TensorRT-LLM تلقائياً الصيغ المثلى لكل طبقة.
تكميم FP4 (Blackwell فقط)
FP4 حصري لمعمارية Blackwell، يوفر تقليل ذاكرة 4x:
# تكوين FP4 لوحدات Blackwell GPU (B200، B300)
quant_config = QuantConfig(
quant_algo="FP4",
kv_cache_quant_algo="FP8", # ذاكرة KV تبقى في FP8
)
build_config = BuildConfig(
max_input_len=4096,
max_seq_len=8192,
max_batch_size=128, # دفعات أكبر ممكنة
quant_config=quant_config,
)
FP4 يمكّن:
- تشغيل نماذج 405B على B200 واحد (140GB HBM3e)
- أحجام دفعات 4x أعلى بنفس الذاكرة
- خدمة فعالة التكلفة للنماذج الضخمة
تكميم INT8/INT4 للأوزان فقط
لوحدات Ampere GPU بدون دعم FP8:
# INT8 للأوزان فقط (يعمل على جميع GPUs)
quant_config = QuantConfig(
quant_algo="W8A16", # أوزان 8-بت، تنشيطات 16-بت
)
# INT4 للأوزان فقط (بأسلوب AWQ)
quant_config = QuantConfig(
quant_algo="W4A16",
group_size=128, # تكميم لكل مجموعة
)
مقارنة التكميم
| الطريقة | الذاكرة | السرعة | الجودة | دعم GPU |
|---|---|---|---|---|
| FP16 | 1x | 1x | المرجع | الكل |
| FP8 | 0.5x | 1.5-2x | 99%+ | Hopper+ |
| FP4 | 0.25x | 2-3x | 97%+ | Blackwell |
| INT8 (W8A16) | 0.5x | 1.2x | 98%+ | الكل |
| INT4 (W4A16) | 0.25x | 1.5x | 95%+ | الكل |
المعايرة للتكميم
المعايرة الصحيحة ضرورية للحفاظ على جودة النموذج:
from tensorrt_llm.quantization import quantize
# تحضير مجموعة بيانات المعايرة
calibration_data = [
"الثعلب البني السريع يقفز فوق الكلب الكسول.",
"نماذج التعلم الآلي تتطلب تحسيناً دقيقاً.",
# 100-500 عينة تمثيلية
]
# التكميم مع المعايرة
quantized_model = quantize(
model_dir="/models/llama-3.1-70b",
output_dir="/models/llama-3.1-70b-fp8",
quant_config=quant_config,
calib_dataset=calibration_data,
calib_batch_size=8,
calib_max_seq_length=512,
)
أفضل ممارسات المعايرة
- البيانات التمثيلية: استخدم عينات تطابق أحمال العمل الإنتاجية
- حجم مجموعة البيانات: 100-500 عينة لمعايرة مستقرة
- طول التسلسل: طابق أطوال الاستدلال المتوقعة
- التحقق: قارن الارتباك قبل/بعد التكميم
SmoothQuant للنماذج الصعبة
للنماذج ذات القيم المتطرفة في التنشيط:
# SmoothQuant ينقل صعوبة التكميم من التنشيطات للأوزان
quant_config = QuantConfig(
quant_algo="W8A8_SQ_PER_CHANNEL",
smoothquant_val=0.5, # عامل التوازن (0.0-1.0)
)
سير عمل التكميم الإنتاجي
┌──────────────────────────────────────────────────────────┐
│ خط أنابيب التكميم │
├──────────────────────────────────────────────────────────┤
│ │
│ 1. التقييم الأساسي │
│ ├── قياس ارتباك/دقة FP16 │
│ └── تحديد عتبة الجودة │
│ │
│ 2. المعايرة │
│ ├── جمع عينات تمثيلية │
│ ├── تشغيل تمرير المعايرة │
│ └── توليد مقاييس التكميم │
│ │
│ 3. بناء النموذج المكمم │
│ ├── تطبيق التكميم │
│ ├── بناء محرك TensorRT │
│ └── تحسين اختيار النواة │
│ │
│ 4. التحقق من الجودة │
│ ├── مقارنة الارتباك (<0.5% زيادة) │
│ ├── تشغيل اختبارات خاصة بالمهمة │
│ └── اختبار A/B في البيئة التجريبية │
│ │
│ 5. النشر الإنتاجي │
│ └── مراقبة مقاييس الجودة باستمرار │
└──────────────────────────────────────────────────────────┘
:::