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,
)

أفضل ممارسات المعايرة

  1. البيانات التمثيلية: استخدم عينات تطابق أحمال العمل الإنتاجية
  2. حجم مجموعة البيانات: 100-500 عينة لمعايرة مستقرة
  3. طول التسلسل: طابق أطوال الاستدلال المتوقعة
  4. التحقق: قارن الارتباك قبل/بعد التكميم

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. النشر الإنتاجي                                      │
│     └── مراقبة مقاييس الجودة باستمرار                   │
└──────────────────────────────────────────────────────────┘

:::

اختبار

الوحدة 3: TensorRT-LLM وتحسين GPU

خذ الاختبار