مقدمه: چرا TensorRT-LLM ارزش این را دارد که آخر هفته خود را صرف ساخت آن کنید
اگر تا به حال دیدهاید که GPU شما با 60% ظرفیت در حال کار است در حالی که LLM شما به کندی پیش میرود، میدانید که هنوز پتانسیل عملکردی وجود دارد که استفاده نشده است. TensorRT-LLM آن پتانسیل را به توان عملیاتی تبدیل میکند: هستههای فیوز شده، توجه صفحهبندی شده، کوانتیزاسیون و بهینهسازیهای سطح گراف که تأخیر را کاهش داده و تعداد توکنها در ثانیه را افزایش میدهند. در این راهنمای آموزش، ما از ابتدا تا انتها—از نصب تا ساخت موتور تا سرویسدهی—را پوشش میدهیم تا بتوانید با اطمینان استنتاج سریعتر و ارزانتر را بر روی GPUهای NVIDIA مستقر کنید.
این آموزش به سبک عملی و راه حل محور نوشته شده است. ما از یک ساختار پرسش محور با دستورات قابل کپی، مشکلات رایج و نقاط تصمیمگیری برای FP16 در مقابل INT8، دستهبندی و استراتژیهای کش KV استفاده خواهیم کرد. همچنین در صورت لزوم به منابع رسمی برای بررسی عمیقتر اشاره خواهیم کرد.
آنچه خواهید آموخت
- نحوه تنظیم محیط برای TensorRT-LLM
- نحوه آمادهسازی یک مدل (از Hugging Face یا نقاط بازرسی) برای ساخت موتور
- نحوه ساخت موتورهای FP16/INT8 و تنظیم عملکرد
- نحوه اجرای استنتاج از طریق پایتون/C++ و سرویسدهی HTTP
- نحوه محکزنی، دستهبندی و رفع اشکال
این آموزش برای چه کسانی مناسب است
- مهندسان ML که LLMها را بر روی GPUهای NVIDIA مستقر میکنند
- متخصصانی که هزینه/تأخیر را در تولید بهینه میکنند
- سازندگانی که از PyTorch Transformers به استنتاج بسیار بهینه شده حرکت میکنند
- TensorRT-LLM چیست و چه زمانی باید از آن استفاده کنید؟
TensorRT-LLM یک پشته استنتاج است که مدلهای Transformer را به "موتورهای" GPU بسیار بهینه شده تبدیل میکند. در مقایسه با PyTorch خام یا زمانهای اجرای عمومی، معمولاً موارد زیر را دریافت میکنید:
- توان عملیاتی بالاتر در اندازههای دستهای بزرگ
- بهرهوری بهتر حافظه با کش KV صفحهبندی شده و کوانتیزاسیون
هنگامی که روی GPUهای NVIDIA اجرا میکنید و به عملکرد سطح تولید اهمیت میدهید، از آن استفاده کنید. این به ویژه برای LLMهای فقط رمزگشا (به عنوان مثال، Llama، Mistral، Phi، BLOOM) و سناریوهایی مانند چتباتها، RAG و خدمات API با QPS بالا ارزشمند است.
- پیش نیازها و تنظیمات محیطی
الزامات اصلی
- GPU انویدیا با قابلیت محاسباتی جدید (به عنوان مثال، Ampere، Ada، Hopper)
- نسخههای CUDA و TensorRT مطابق، به علاوه درایورهای مناسب
- پایتون 3.8+ و ابزارهای ساخت در صورت کامپایل از منبع
نکته نسخهبندی: همیشه قبل از نصب، ماتریس پشتیبانی رسمی TensorRT و یادداشتهای انتشار را برای نسخهها و ویژگیهای سازگار CUDA/TensorRT بررسی کنید.
گزینههای شروع سریع
- کانتینریزه شده: از کانتینرهای NVIDIA با CUDA/TensorRT از پیش نصب شده استفاده کنید—سریعترین راه برای جلوگیری از عدم تطابق نسخه.
- نصب بومی: دستورالعمل شروع سریع رسمی را برای TensorRT پایه دنبال کنید، سپس TensorRT-LLM را روی آن قرار دهید.
- آمادهسازی مدل خود (Hugging Face → TensorRT-LLM)
منابع رایج
- Hugging Face: انواع Llama/Mistral/BLOOM
- نقاط بازرسی محلی: تنظیم دقیق سفارشی
لیست بررسی آمادهسازی
- تأیید کنید که معماری مدل توسط TensorRT-LLM پشتیبانی میشود.
- وزنهای مدل و توکنساز را دانلود کنید.
- در صورت نیاز، safetensors را به فرمتهای مورد انتظار تبدیل کنید یا از طریق اسکریپتهای پروژه به ONNX صادر کنید.
نکته: دستورالعمل شروع سریع رسمی اغلب شامل اسکریپتهایی برای واکشی مدلها و تبدیل به فرم میانی مناسب است. برای یک راهنمای گام به گام به سبک آموزش با یک مثال BLOOM، به راهنمای Dell در مورد تبدیل LLMهای Hugging Face به TensorRT-LLM مراجعه کنید.
- ساخت یک موتور TensorRT-LLM (قلب گردش کار)
مفاهیمی که باید بدانید
- موتور: مصنوع کامپایل شده و بهینه شده سختافزاری که برای استنتاج بارگیری میکنید.
- دقت: FP16/BF16 برای یک خط پایه قوی; INT8 یا FP8 برای توان عملیاتی بالاتر اگر دقت حفظ شود.
- کش KV: کش KV صفحهبندی شده، تکه تکه شدن حافظه را کاهش داده و عملکرد طولانی مدت را افزایش میدهد.
مراحل سطح بالا
- پیکربندی ساخت را تعریف کنید: حداکثر دسته، طول دنباله، دقت، کوانتیزاسیون و معماری GPU.
- به نقاط بازرسی مدل و توکنساز خود اشاره کنید.
- موتور را برای GPU(های) هدف خود کامپایل کنید.
مرجع: ساخت موتورها با اسناد و پیکربندیهای رسمی. اگر قصد دارید از طریق Hugging Face Text Generation Inference (TGI) سرویسدهی کنید، به یادداشتهای پشتیبان TRT-LLM در مورد پیش کامپایل موتورها بر اساس معماری GPU و پیکربندی مراجعه کنید.
درخت تصمیمگیری اولیه
- اولین ساخت: FP16، طول دنباله حداکثر متوسط (به عنوان مثال، 4K–8K)، دسته متوسط (به عنوان مثال، 4–8). صحت را تأیید کنید.
- مقیاسبندی: کش KV صفحهبندی شده را فعال کنید. حداکثر اندازههای دسته/پرتو را افزایش دهید. با FP8 یا INT8 آزمایش کنید.
- تولید: پیکربندیهایی را که SLOهای تأخیر/QPS را برآورده میکنند، پین کنید; موتورهای جداگانه برای هر سناریو ایجاد کنید (درخواستهای کوتاه در مقابل متن طولانی).
- اجرای استنتاج: پایتون، C++ و HTTP
شما سه مسیر رایج دارید:
- پایتون: نمونهسازی سریع، ایدهآل برای خطوط لوله و نوتبوکها.
- C++: حداکثر عملکرد، ادغام در خدمات بومی.
- سرویسدهی HTTP: از TGI با پشتیبان TRT-LLM یا نمونههای سرویسدهی زمان اجرا برای استقرار مقیاسپذیر استفاده کنید.
پشتیبان Hugging Face TGI
- موتورها را برای تنظیم دقیق GPU/دقت خود پیش کامپایل کنید.
- TGI را با پشتیبان TRT-LLM راهاندازی کنید و آن را به فهرست موتور اشاره دهید.
- درخواستها را از طریق مسیرهای /generate یا سازگار با openai ارسال کنید و با تکرارها مقیاس دهید.
- تنظیم عملکردی که واقعاً تأثیرگذار است
از کجا شروع کنیم
- دقت: FP16 خط پایه قابل اعتماد شما است. INT8/FP8 میتواند تأخیر را بیشتر کاهش دهد، اما کیفیت را تأیید کنید.
- دستهبندی: دستهبندی پویا و ادغام درخواست به طور چشمگیری توان عملیاتی را افزایش میدهد; تأخیر دم را اندازهگیری کنید.
- کش KV صفحهبندی شده: برای درخواستهای طولانی و پخش ضروری است; فشار حافظه را کاهش میدهد.
- طولهای حداکثر: طولهای دنباله حداکثر بزرگتر اندازه موتور را افزایش میدهد و ممکن است ساعت را کاهش دهد; موتورهای متناسب با هدف بسازید.
نکات عملی
- با درخواستهای واقعی محک بزنید: مراحل پیشپر کردن در مقابل رمزگشایی را جداگانه اندازهگیری کنید.
- توان عملیاتی توکنساز مهم است: اگر چارچوب شما از آن پشتیبانی میکند، آن را روی GPU انجام دهید.
- مراقب نمودارهای CUDA/هستههای فیوز شده باشید: آنها سربار CPU و تأخیر راهاندازی هسته را کاهش میدهند.
- برای چند GPU: بر اساس اندازه مدل و الزامات تأخیر، موازیسازی تانسور یا موازیسازی خط لوله را ترجیح دهید.
- محکزنی: اثبات پیروزی
لیست بررسی
- توکنها/ثانیه (توان عملیاتی) در اندازههای دسته هدف
- زمان تا اولین توکن (TTFT) و تأخیر سرتاسر در هر درخواست
- استفاده از GPU و فضای بالای حافظه تحت حداکثر QPS
- دقت: BLEU/سردرگمی یا ارزیابیهای خاص وظیفه اگر کوانتیزه میکنید
از seedها و مجموعههای درخواست سازگار در سراسر خطوط پایه (PyTorch در مقابل TensorRT-LLM) برای تأیید صحت و دلتاها استفاده کنید.
- اشکالزدایی و مشکلات رایج
- نسخههای نامنطبق: نسخههای CUDA، درایورها و TensorRT را بر اساس ماتریس پشتیبانی رسمی تراز کنید.
- موتور برای دستگاه نامعتبر است: موتورها را به طور خاص برای معماری GPU خود بازسازی کنید.
- OOM در طول ساخت: طول دنباله حداکثر یا دسته را کاهش دهید; کش KV صفحهبندی شده را فعال کنید; کوانتیزاسیون را در نظر بگیرید.
- کاهش دقت با INT8: روی دادههای نماینده دامنه کالیبره کنید; کوانتیزاسیون per-tensor را امتحان کنید و حساسیت لایه به لایه را تأیید کنید.
- TTFT کند با وجود توان عملیاتی بالا: کش KV صفحهبندی شده را تنظیم کنید، نمودارهای CUDA را فعال کنید و گلوگاههای توکنساز را بررسی کنید.
- گردش کار مثال: از مدل Hugging Face تا تولید
سناریو: شما یک مدل چت با تأخیر کم روی A100 میخواهید.
- مدل را انتخاب کنید: نوع 7B–13B Llama/Mistral.
- آمادهسازی: وزنها و توکنساز را دانلود کنید; تأیید کنید که معماری پشتیبانی میشود.
- اولین موتور: FP16، حداکثر ورودی 4K، حداکثر خروجی 1K، دسته 4; KV صفحهبندی شده روشن.
- تأیید: خروجیها را با خط پایه PyTorch خود مقایسه کنید.
- بهینهسازی: INT8 یا FP8 را امتحان کنید; TTFT و توان عملیاتی را اندازهگیری کنید. دسته را برای حالت سرور افزایش دهید.
- سرویسدهی: از پشتیبان TGI TRT-LLM استفاده کنید; تکرارها را در پشت یک متعادل کننده بار مقیاس کنید; پخش را اضافه کنید.
- برنامهریزی هزینه و ظرفیت
- توان عملیاتی در هر GPU: توکنها/ثانیه را در متن هدف خود اندازهگیری کنید. از آن برای محاسبه ظرفیت QPS استفاده کنید.
- قیمت به ازای هر 1 میلیون توکن: با رمزگشایی سریعتر و استفاده از دسته بالاتر، TRT-LLM معمولاً هزینه به ازای هر توکن را کاهش میدهد.
- موتورهای با اندازه مناسب: موتورهای جداگانه برای فرم کوتاه و فرم بلند بسازید تا اتلاف فضای بالا را به حداقل برسانید.
- سوالات متداول در داخل راهنما
س: آیا باید موتورها را برای هر نوع GPU بازسازی کنم؟
پاسخ: بله. موتورها مخصوص سختافزار هستند. برای هر معماری GPU که روی آن مستقر خواهید شد، بسازید.
س: INT8 چقدر بر کیفیت تأثیر میگذارد؟
پاسخ: این به مدل و کار بستگی دارد. با دادههای کالیبراسیون خوب، بسیاری از مدلها کیفیت نزدیک به FP16 را حفظ میکنند در حالی که سرعتهای قابل توجهی ارائه میدهند.
س: آیا میتوانم متون طولانی (به عنوان مثال، 32K) را اجرا کنم؟
پاسخ: بله، اما حافظه را با دقت برنامهریزی کنید. از کش KV صفحهبندی شده استفاده کنید و اندازههای بلوک را تنظیم کنید; توجه داشته باشید که متون طولانیتر ردپای موتور و هزینه رمزگشایی را افزایش میدهند.
س: آیا TGI مورد نیاز است؟
پاسخ: خیر. میتوانید پایتون/C++ را مستقیماً اجرا کنید. TGI برای APIهای HTTP درجه تولید با مقیاسبندی خودکار و گزارشگیری راحت است.
ارزش توجه برای تسریع گردش کار
اگر اغلب روی درخواستها تکرار میکنید، خروجیها را در بین موتورها مقایسه میکنید یا آزمایشها را مستند میکنید، یک دستیار هوش مصنوعی در کنار هم که از تلاشهای مجدد سریع، اجرای بلوک کد و قطعههای وب پشتیبانی میکند، میتواند حلقه شما را سرعت بخشد. به هر حال، Sider.AI یک تجربه دسکتاپ را ارائه میدهد که برای مهندسان تنظیم شده است—برای گرفتن معیارها، آزمایش درخواستها و سازماندهی یادداشتهای خود در حین بهینهسازی خط لوله TensorRT-LLM شما مفید است. لیست بررسی مراحل بعدی
- راهنمای شروع سریع رسمی را بخوانید تا محیط خود را تأیید کنید.
- سازگاری CUDA/TensorRT را در ماتریس پشتیبانی تأیید کنید.
- راهنمای ساخت موتور را دنبال کنید و ابتدا FP16 را انتخاب کنید.
- در صورت سرویسدهی از طریق TGI، موتورها را از قبل کامپایل کنید و پشتیبان TRT-LLM را پیکربندی کنید.
- به صورت اختیاری، یک راهنمای گام به گام به سبک آموزش برای مدلهای Hugging Face مانند BLOOM را بررسی کنید.
نکات کلیدی
- TensorRT-LLM Transformer شما را به یک موتور بومی GPU برای حداکثر توان عملیاتی و تأخیر کمتر کامپایل میکند.
- با FP16 شروع کنید، کش KV صفحهبندی شده را فعال کنید و اندازهگیری کنید. سپس INT8/FP8 را برای سرعت بیشتر کاوش کنید.
- موتورها مختص GPU و پیکربندی هستند; برای هر هدف استقرار بسازید.
- برای تولید، موتورها را با یک لایه سرویسدهی قوی (به عنوان مثال، TGI) جفت کنید و TTFT، توان عملیاتی و کیفیت را نظارت کنید.
سوالات متداول
س 1: چگونه TensorRT-LLM را به روش صحیح نصب و راهاندازی کنم؟
از یک کانتینر با CUDA/TensorRT مطابق استفاده کنید یا راهنمای شروع سریع رسمی و ماتریس پشتیبانی را دنبال کنید تا از انحراف نسخه جلوگیری کنید. درایورهای GPU و ابزارهای ساخت را قبل از کامپایل موتورها تأیید کنید.
س 2: چگونه از TensorRT-LLM با مدلهای Hugging Face استفاده کنم؟
مدل و توکنساز را دانلود کنید، پشتیبانی را تأیید کنید و در صورت نیاز قبل از ساخت موتور تبدیل کنید. اگر با TGI سرویسدهی میکنید، موتورها را برای GPU خود کامپایل کنید و پشتیبان را به فهرست موتور اشاره دهید.
س 3: آیا باید FP16، FP8 یا INT8 را برای TensorRT-LLM انتخاب کنم؟
برای پایداری با FP16 شروع کنید، سپس FP8/INT8 را برای افزایش توان عملیاتی امتحان کنید. همیشه دقت کار را پس از کوانتیزاسیون تأیید کنید.
س 4: آیا میتوانم TensorRT-LLM را از طریق HTTP سرویس دهم؟
بله. میتوانید مستقیماً از پایتون/C++ استفاده کنید یا از طریق پشتیبان TRT-LLM Hugging Face TGI برای APIهای مقیاسپذیر و آماده تولید با پخش سرویس دهید.
س 5: گلوگاههای رایج عملکرد هنگام استفاده از TensorRT-LLM چیست؟
سربار توکنساز، دستهبندی غیراصولی و فقدان کش KV صفحهبندی شده مشکلات رایج هستند. اندازههای دسته را تنظیم کنید، نمودارهای CUDA را فعال کنید و TTFT را در مقابل توکنها در ثانیه کلی نظارت کنید.