اجرای مدلهای زبانی بزرگ (LLM) به صورت محلی از یک سرگرمی تخصصی برای علاقهمندان به یک نیاز حیاتی برای شرکتهایی تبدیل شده است که به حریم خصوصی دادهها و پاسخهای با تأخیر کم نیاز دارند. در حالی که چارچوبهایی مانند Ollama و vLLM هوش مصنوعی محلی را در دسترس همگان قرار دادهاند، NVIDIA TensorRT-LLM به عنوان استاندارد طلایی برای استقرار تولید با عملکرد بالا روی GPUهای NVIDIA برجسته است. این کتابخانه از فناوریهای پیشرفته کامپایلر برای استخراج هر قطره عملکرد از سختافزار شما استفاده میکند.
TensorRT-LLM چیست؟
TensorRT-LLM یک کتابخانه متنباز است که در ابتدا توسط NVIDIA توسعه یافته و بر پایه فناوری موتور استنتاج LLM پیشرفتهای بنا شده که برای استقرار تولید طراحی شده است. این کتابخانه با اکوسیستم TensorRT یکپارچه میشود و به شما امکان میدهد موتورهای استنتاج بهینهسازی شده برای LLMها بسازید. برخلاف چارچوبهای عمومی، TensorRT-LLM بهینهسازیهای تخصصی مانند موارد زیر را ارائه میدهد:
- PagedAttention: مدیریت کارآمد حافظه که سربار حافظه و تکهتکه شدن آن را کاهش میدهد.
- کمحجمسازی Int8/FP8: افزایش قابل توجه سرعت و کاهش حافظه با حداقل افت دقت.
- Batching پیوسته: افزایش بهرهوری از طریق گروهبندی پویای درخواستها در طول تولید.
پیشنیازها و نصب
قبل از شروع، مطمئن شوید که یک GPU NVIDIA با حافظه VRAM کافی دارید (معمولاً معماریهای Ada Lovelace یا Ampere توصیه میشود) و CUDA نصب شده است. سادهترین راه برای شروع استفاده از Docker است، زیرا مدیریت وابستگیهای C++ به صورت محلی میتواند پیچیده باشد.
# کشیدن کانتینر رسمی TensorRT-LLM
docker pull nvcr.io/nvidia/pytorch:24.04-py3
# اجرا با دسترسی به GPU
docker run --gpus all -it --rm nvcr.io/nvidia/pytorch:24.04-py3 /bin/bash
ساخت موتور استنتاج
روند کاری اصلی TensorRT-LLM شامل دو مرحله اصلی است: ساخت یک فایل موتور بهینهسازی شده (.engine) و اجرای استنتاج با استفاده از آن موتور. سازنده مدل شما را به فرمتی بهینهسازی شده برای معماری خاص 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 ارائه میدهد که برای سناریوهای با بهرهوری بالا بسیار کارآمد است. در اینجا یک قطعه کد ساده پایتون برای اجرای استنتاج همزمان آورده شده است:
import tensorrt_llm
from tensorrt_llm.runtime import ModelRunnerCpp
# بارگذاری موتور کامپایل شده
runner = ModelRunnerCpp.from_dir(engine_dir="./llama_engine", rank=0)
# آمادهسازی ورودی
input_ids = [[128000, 128006, 882, 128007, 271]] # مثال ورودی توکنبندی شده
# اجرای استنتاج
output = runner.generate(input_ids)
print(runner.runtime.tokenizer.decode(output[0]))
استراتژیهای بهینهسازی
برای بهرهبرداری واقعی از TensorRT-LLM، این تکنیکهای پیشرفته را در نظر بگیرید:
- کمحجمسازی: استفاده از وزنهای
INT8یاFP8میتواند بهرهوری شما را در سختافزارهای پشتیبانیشده دو برابر کند (معماری Hopper از FP8 به صورت بومی پشتیبانی میکند). - ادغام هستهها: سازنده موتور به طور خودکار هستهها را ادغام میکند و گلوگاههای پهنای باند حافظه را کاهش میدهد.
- تجزیه و تحلیل حدسی: اگر با یک مدل پیشنویس کوچکتر همراه شود، میتوانید با پیشبینی چندین توکن به صورت همزمان، تولید را شتاب دهید.
نتیجهگیری
NVIDIA TensorRT-LLM فقط یک چارچوب استنتاج دیگر نیست؛ بلکه ابزاری قدرتمند برای توسعهدهندگانی است که حاضر به سازش در مورد سرعت یا هزینه نیستند. اگرچه فرآیند راهاندازی و کامپایل اولیه پیچیدهتر از اجرای ساده ollama run llama3 است، اما افزایش عملکرد حاصل از آن قابل توجه است. برای بارهای کاری تولید که به تأخیر کم و همزمانی بالا نیاز دارند، TensorRT-LLM انتخاب قطعی برای استقرار هوش مصنوعی محلی است.