اجرای مدلهای زبانی بزرگ (LLM) بهصورت محلی بهطور سنتی یک مصالحه بین اندازه مدل و سرعت استنتاج بوده است. در حالی که مدلهای کوانتیزه روی CPU قابل دسترسی هستند، اما اغلب با تأخیر بالا دستوپنجه نرم میکنند که آنها را برای کاربردهای بلادرنگ نامناسب میسازد. TensorRT-LLM، یک کتابخانه استنتاج با عملکرد بالا از NVIDIA، اجرای LLMها را روی GPUهای مدرن بهینه میکند. با بهرهگیری از ادغام کرنل، کوانتیزاسیون و موازیسازی چندگانه GPU، TensorRT-LLM میتواند به سرعتهای استنتاجی دست یابد که اغلب ۵ تا ۱۰ برابر سریعتر از پیادهسازیهای استاندارد PyTorch هستند.
چرا TensorRT-LLM؟
استنتاج استاندارد PyTorch تفسیرشونده و عمومی است. با این حال، TensorRT-LLM مدلها را به گرافهای اجرای بهینهشده کامپایل میکند. مزایای کلیدی عبارتند از:
- ادغام کرنل (Kernel Fusion): ترکیب چندین عملیات در یک کرنل واحد برای کاهش مصرف پهنای باند حافظه.
- پشتیبانی از کوانتیزاسیون: پشتیبانی بومی از کوانتیزاسیون FP8، INT4-AWQ و INT8-Weight-Only، که مصرف VRAM را بهشدت کاهش میدهد.
- توجه صفحهای (Paged Attention): مدیریت کارآمد حافظه برای استنتاج دستهای، که امکان عبور بالا را بدون خطاهای OOM فراهم میکند.
نصب و پیشنیازها
TensorRT-LLM عمدتاً برای GPUهای NVIDIA با قابلیت محاسباتی ۸.۰+ (Ampere و جدیدتر) توسعه یافته است. اطمینان حاصل کنید که موارد زیر نصب شدهاند:
- Python 3.8+
- NVIDIA CUDA Toolkit 11.4 یا 12.x
- NVIDIA TensorRT 8.6+
میتوانید این کتابخانه را از طریق pip نصب کنید، هرچند برای آخرین ویژگیها، ساخت از سورس توصیه میشود:
pip install tensorrt-llm
# Or for a stable release
pip install nvidia-tensorrt-llm
ساخت موتور استنتاج
هسته اصلی TensorRT-LLM «موتور» (Engine) است. ابتدا موتور را از یک چکپوینت مدل Hugging Face میسازید، که مدل را برای سختافزار خاص شما کامپایل میکند. این مرحله بسته به اندازه مدل ممکن است چند دقیقه طول بکشد.
در اینجا یک مثال سادهشده از ساخت موتور برای یک مدل کوچک مبتنی بر Llama آورده شده است:
from tensorrt_llm.builder import Builder
from tensorrt_llm import LlmArgs, PluginConfig
# Initialize builder
builder = Builder()
# Define model configuration
# Note: In practice, you specify the HF checkpoint path and quantization settings
args = LlmArgs(
name="llama-7b",
hf_checkpoint="/path/to/llama-7b",
gpus_per_engine=1,
use_tensorrt_runtime=True
)
# Build the engine
engine = builder.build(args)
# Save the engine to disk for future use
engine.save("/path/to/output_engine")
اجرای استنتاج
پس از ساخت موتور، میتوانید آن را بارگذاری کرده و متن تولید کنید. API برای سناریوهای عبور بالا بهگونهای طراحی شده که آگاه از ناهمگامی (async-aware) باشد، اما فراخوانیهای همگام برای موارد استفاده سادهتر در دسترس هستند.
from tensorrt_llm.runtime import GenerateExecutor
# Load the previously built engine
executor = GenerateExecutor(engine_path="/path/to/output_engine")
# Prepare input
prompt = "Tell me a joke about programming."
# Generate text
# max_tokens controls the length of the output
output = executor.generate(prompt, max_tokens=100)
print(output)
نکات عملکردی
- استفاده از FP8: اگر دارای GPU Ada Lovelace (سری RTX 40) یا Hopper (H100) هستید، کوانتیزاسیون FP8 بهترین نسبت سرعت به کیفیت را ارائه میدهد.
- اندازه دسته (Batch Size): TensorRT-LLM با دستهبندی میدرخشد. سعی کنید چندین پرامپت را در یک دسته واحد پردازش کنید تا بهرهبرداری از GPU به حداکثر برسد.
- مدیریت حافظه: هنگام ساخت موتور،
max_batch_sizeوmax_input_lenرا بهطور مناسب تنظیم کنید تا از تکهتکه شدن حافظه (memory fragmentation) جلوگیری شود.
نتیجهگیری
TensorRT-LLM در حال حاضر استاندارد طلایی برای استنتاج محلی LLM با عملکرد بالا روی سختافزار NVIDIA است. اگرچه منحنی یادگیری آن نسبت به استفاده مستقیم از Hugging Face Transformers تندتر است، اما بهبودهای عملکردی قابل توجه هستند. برای توسعهدهندگانی که در حال ساخت اپلیکیشنهای هوش مصنوعی محلی، چتباتها یا دستیارهای بلادرنگ هستند، TensorRT-LLM سرعت و کارایی لازم را برای ایجاد تجرباتی که واقعاً آنی به نظر برسند، فراهم میکند. با مدلهای کوچک شروع کنید تا فرآیند ساخت را درک کنید و بهمرور به مدلهایی با ۷۰ میلیارد پارامتر یا بیشتر گسترش دهید، تا جایی که VRAM شما اجازه دهد.