Local AI

إطلاق العنان لأقصى أداء: دليل المطور لاستدعاء نماذج اللغات الكبيرة محلياً باستخدام NVIDIA TensorRT-LLM

انتقل تشغيل نماذج اللغات الكبيرة (LLMs) محلياً من هواية متخصصة إلى مطلب حاسم للشركات التي تتطلب خصوصية البيانات واستجابات منخفضة زمن الوصول. بينما سهلت أطر عمل مثل Ollama وvLLM الذكاء الاصطناعي المحلي، يبرز NVIDIA TensorRT-LLM كمعيار ذهبي للنشر عالي الأداء وجاهز للإنتاج على وحدات معالجة الرسومات (GPUs) من NVIDIA. فهو يستفيد من أحدث تقنيات المترجمات لاستخراج كل قطرة أداء من عتادك.

ما هو TensorRT-LLM؟

TensorRT-LLM هو مكتبة مفتوحة المصدر تم تطويرها أصلاً بواسطة NVIDIA وتستند إلى تقنية محرك استدعاء نماذج اللغات الكبيرة (LLM) المتطورة المطورة للنشر الإنتاجي. وهي تتكامل مع نظام TensorRT البيئي، مما يتيح لك بناء محركات استدعاء محسّنة لنماذج LLM. وعلى عكس الأطر العامة، يوفر TensorRT-LLM تحسينات متخصصة مثل:

  • PagedAttention: إدارة ذاكرة فعالة تقلل من الحمل الزائد على الذاكرة والتجزئة.
  • الكمّنة Int8/FP8: تسريعات كبيرة وتقليل في الذاكرة مع فقدان ضئيل في الدقة.
  • التجميع المستمر (Continuous Batching): إنتاجية عالية من خلال تجميع الطلبات ديناميكياً أثناء التوليد.

المتطلبات المسبقة والتثبيت

قبل الغوص في التفاصيل، تأكد من امتلاكك لوحدة معالجة رسومات (GPU) من NVIDIA ذات ذاكرة VRAM كافية (يُنصح عادةً بعمليتي Ada Lovelace أو Ampere) وCUDA مثبتة. أسهل طريقة للبدء هي عبر Docker، حيث يمكن أن يكون إدارة تبعيات C++ محلياً معقداً.

# Pull the official TensorRT-LLM docker container
docker pull nvcr.io/nvidia/pytorch:24.04-py3

# Run with GPU access
docker run --gpus all -it --rm nvcr.io/nvidia/pytorch:24.04-py3 /bin/bash

بناء محرك استدعاء

يتضمن سير العمل الأساسي لـ TensorRT-LLM خطوتين رئيسيتين: بناء ملف محرك محسّن (.engine) وتشغيل الاستدعاء باستخدام ذلك المحرك. يقوم المُبني (builder) بترجمة نموذجك إلى صيغة محسّنة لعمارة وحدة معالجة الرسومات (GPU) المحددة لديك.

أولاً، قم باستنساخ المستودع وبناء المكتبة:

git clone --recursive https://github.com/NVIDIA/TensorRT-LLM.git
cd TensorRT-LLM
mkdir build
cd build
cmake .. -DTRTLLM_ENABLE_XAQ=ON -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)

بمجرد البناء، يمكنك إنشاء محرك لنموذج شائع مثل Llama 3. قد تستغرق هذه العملية من بضع دقائق إلى عدة ساعات اعتماداً على حجم النموذج وإعدادات الكمّنة.

python examples/llama/build.py \
    --output_dir ./llama_engine \
    --dtype float16 \
    --world_size 1 \
    --tp_size 1 \
    --pp_size 1 \
    --max_batch_size 32 \
    --max_input_len 1024 \
    --max_output_len 512 \
    --model_dir /path/to/llama-3-8b

تشغيل الاستدعاء

مع بناء المحرك، يمكنك الآن تقديم الطلبات. يوفر TensorRT-LLM واجهة برمجة تطبيقات (API) تعتمد على gRPC وهي فعالة للغاية في سيناريوهات الإنتاجية العالية. إليك مقتطف Python بسيط لتشغيل استدعاء متزامن:

import tensorrt_llm
from tensorrt_llm.runtime import ModelRunnerCpp

# Load the compiled engine
runner = ModelRunnerCpp.from_dir(engine_dir="./llama_engine", rank=0)

# Prepare input
input_ids = [[128000, 128006, 882, 128007, 271]] # Example tokenized input

# Run inference
output = runner.generate(input_ids)
print(runner.runtime.tokenizer.decode(output[0]))

استراتيجيات التحسين

للاستفادة الحقيقية من TensorRT-LLM، فكر في هذه التقنيات المتقدمة:

  1. الكمّنة (Quantization): يمكن أن تضاعف استخدام الأوزان INT8 أو FP8 إنتاجيتك على العتاد المدعوم (يدعم عمارة Hopper FP8 بشكل أصلي).
  2. دمج النوى (Kernel Fusion): يقوم مُبني المحرك بدمج النوى تلقائياً، مما يقلل من اختناقات عرض النطاق الترددي للذاكرة.
  3. الاستنتاج التأملي (Speculative Decoding): إذا تم اقترانه بنموذج مسودة أصغر، يمكنك تسريع التوليد من خلال التنبؤ بعدة رموز في وقت واحد.

الخاتمة

NVIDIA TensorRT-LLM ليس مجرد إطار استدعاء آخر؛ إنه أداة قوية للمطورين الذين يرفضون المساومة على السرعة أو التكلفة. بينما تكون عملية الإعداد والترجمة الأولية أكثر تعقيداً من مجرد تشغيل ollama run llama3، فإن مكاسب الأداء الناتجة كبيرة. بالنسبة لأحمال العمل الإنتاجية التي تتطلب زمن وصول منخفضاً وتزامناً عالياً، يُعد TensorRT-LLM الخيار الحاسم لنشر الذكاء الاصطناعي محلياً.

Share: