
ابهامزدایی از TRITON: درک تفاوت زبان برنامهنویسی و سرور استنتاج
تکامل سریع هوش مصنوعی و یادگیری ماشین، ابزارها و فناوریهای قدرتمند بیشماری را معرفی کرده است. در میان آنها، نام “TRITON” به دفعات ظاهر میشود که اغلب به دلیل ارتباط آن با دو جزء اساساً متفاوت، اما به همان اندازه حیاتی در اکوسیستم هوش مصنوعی، سردرگمی ایجاد میکند. این مقاله بلاگ قصد دارد این ابهام رایج را برطرف کند.در ادامه، به هویتهای متمایز زبان برنامهنویسی Triton و سرور استنتاج NVIDIA Triton (که اکنون بخشی از پلتفرم NVIDIA Dynamo است) خواهیم پرداخت و اهداف منحصربهفرد، قابلیتهای اصلی و نحوه مشارکت آنها در چشمانداز گستردهتر هوش مصنوعی با کارایی بالا را روشن خواهیم کرد. درک این تمایزها برای توسعهدهندگان و محققان برای انتخاب ابزارهای مناسب برای نیازهای خاص خود، خواه بهینهسازی کرنلهای سفارشی GPU باشد یا استقرار مدلهای هوش مصنوعی در مقیاس بزرگ، بسیار مهم است.
زبان برنامهنویسی Triton: کامپایلر برای کرنلهای GPU با کارایی بالا
زبان برنامهنویسی Triton یک زبان و کامپایلر متنباز است که به طور خاص برای برنامهنویسی موازی بر روی پردازندههای گرافیکی (GPU) طراحی شده است. هدف اصلی آن، توانمندسازی توسعهدهندگان، به ویژه کسانی که با شبکههای عصبی عمیق (DNN) کار میکنند، برای نوشتن کرنلهای محاسباتی سفارشی با کارایی بالا است. 2 این رویکرد به عنوان یک روش مبتنی بر پایتون برای ایجاد کد GPU کارآمد توصیف شده است. 2Triton که از OpenAI سرچشمه میگیرد، برای رفع گلوگاههای عملکرد قابل توجهی که اغلب در پیادهسازی ایدههای تحقیقاتی جدید در یادگیری عمیق با آنها مواجه میشویم، توسعه یافته است؛ این ایدهها اغلب به کرنلهای GPU تخصصی نیاز دارند. خالق اصلی آن اکنون در OpenAI کار میکند که نشاندهنده ارتباط قوی آن با تحقیقات پیشرفته هوش مصنوعی است. 3 این زبان یک محیط برنامهنویسی مبتنی بر پایتون را ارائه میدهد که هدف آن انتزاع بسیاری از پیچیدگیهای مرتبط با زبانهای برنامهنویسی سطح پایین GPU مانند CUDA C++ است. ایده اصلی این است که به کاربران اجازه داده شود GPUها را با پایتون برنامهنویسی کنند، تلاش مورد نیاز را به حداقل برسانند و بهینهسازیهای پیچیده را در داخل چندپردازندههای جریانی (SMs) کپسوله کنند و به کاربر اجازه دهد بر تقسیمبندی وظایف تمرکز کند. 2
چرا زبان برنامهنویسی Triton؟ پل زدن شکاف به سمت بهینهسازی GPU
بهرهبرداری از پتانسیل کامل GPUهای مدرن برای بارهای کاری هوش مصنوعی معمولاً مستلزم نوشتن کرنلهای تخصصی است، وظیفهای که از لحاظ تاریخی به تخصص عمیق در برنامهنویسی GPU نیاز داشته است. در حالی که فریمورکهایی مانند PyTorch انتزاعهای سطح بالا را ارائه میدهند، گاهی اوقات میتوانند به دلیل ایجاد و جابجایی بسیاری از تنسورهای موقت، منجر به ناکارآمدیهای عملکردی شوند. 3Triton برای پر کردن این شکاف وارد عمل میشود. هدف آن این است که فرآیند ایجاد کرنلهای GPU بهینهشده و معماری-خاص را به طور قابل توجهی قابل دسترستر از نوشتن CUDA C++ خام کند. 5 این زبان به محققان و توسعهدهندگان اجازه میدهد تا با تلاش نسبتاً کمی به اوج عملکرد سختافزاری دست یابند، که اغلب با عملکرد کرنلهای CUDA تنظیمشده دستی مطابقت دارد یا حتی از آن فراتر میرود. به عنوان مثال، میتوان از آن برای نوشتن کرنلهای ضرب ماتریس FP16 قابل مقایسه با cuBLAS در کمتر از ۲۵ خط کد استفاده کرد. 3گفته میشود که Triton “محققان بدون تجربه CUDA را قادر میسازد تا کد GPU بسیار کارآمد بنویسند” 3، که به معنای سهولت استفاده و دسترسی قابل توجهی است. این زبان واقعاً موانع ورود را برای نوشتن کرنلهای GPU کاربردی و با عملکرد خوب به طور چشمگیری کاهش میدهد. بسیاری از جزئیات پیچیده سطح پایین مانند ترکیب حافظه، مدیریت حافظه مشترک و همگامسازی رشتهها در داخل چندپردازندههای جریانی را به طور خودکار انجام میدهد. 3 این اتوماسیون، افزایش بهرهوری عظیمی را برای بسیاری از موارد استفاده رایج فراهم میکند.با این حال، دستیابی به عملکرد بهینهشده و معماری-خاص همچنان “منحنی یادگیری شیبداری” را به همراه دارد. 6 برای دستیابی به حداکثر عملکرد یا رفع مشکلات پیچیده عملکردی در کرنلهای پیچیده، درک عمیقتری از معماری GPU و فرآیند کامپایل خاص Triton (که احتمالاً نیاز به بررسی IR/PTX دارد 4) ضروری میشود. ماهیت “جعبه سیاه” بهینهسازیهای خودکار آن 4 میتواند تنظیم دقیق یا عیبیابی مشکلات عملکردی غیرواضح را چالشبرانگیز کند و نوع متفاوتی از تخصص را نسبت به CUDA سنتی، اما همچنان تخصص، طلب میکند. این بدان معناست که در حالی که Triton برنامهنویسی GPU را دموکراتیزه میکند، ادعای “بدون تجربه CUDA” در درجه اول برای شروع کار و دستیابی به عملکرد خوب صدق میکند. برای رسیدن به حداکثر عملکرد معادل تنظیمشده دستی، همچنان به درک دقیق اصول برنامهنویسی GPU و مدل کامپایل خاص Triton نیاز است. این نشاندهنده یک بدهبستان بین سهولت استفاده برای موارد عمومی و کنترل عمیق برای بهینهسازی شدید است.
ویژگیهای کلیدی و نحوه کار آن
سینتکس شبیه پایتون: کرنلهای Triton به عنوان توابع پایتون مزین شده با @triton.jit تعریف میشوند. این سینتکس آشنا، منحنی یادگیری را در مقایسه با زبانهای GPU سنتی به طور قابل توجهی کاهش میدهد. 2
کامپایل JIT (Just-In-Time): Triton کد کرنل پایتون را در زمان اجرا به کد ماشین GPU بهینهشده کامپایل میکند. این کامپایل JIT تضمین میکند که کرنل برای سختافزار خاصی که روی آن اجرا میشود، سفارشی شده و کارایی را به حداکثر میرساند. 5
مراحل کامپایل: دکوراتور @triton.jit یک فرآیند کامپایل چندمرحلهای را آغاز میکند:
درخت نحو انتزاعی (AST) تابع پایتون برای ایجاد نمایش میانی Triton (Triton-IR) پیمایش میشود. این IR بهینهنشده، مستقل از ماشین است و الزامات برنامهنویسی در سطح تایل را معرفی میکند که بر اساس پروژه کامپایلر متنباز LLVM است. 2
سپس کامپایلر Triton، Triton-IR را بهینهسازی و به Triton-GPU IR (Triton-TTGIR) و متعاقباً به LLVM-IR تبدیل میکند. هر دو نمایش Triton-IR و Triton-GPUIR به عنوان لهجههای MLIR نوشته شدهاند، جایی که MLIR یک زیرپروژه LLVM با هدف بهبود کامپایل برای سختافزار ناهمگن است. 2
در نهایت، این کد IR بهینهشده مستقیماً از طریق libLLVM به کد PTX (Parallel Thread Execution) تبدیل میشود و سپس از طریق ptxas برای اجرا بر روی GPUهای جدید NVIDIA به cubin (فرمت اجرایی NVIDIA) کامپایل میشود. 3
پارادایم برنامهنویسی تنسور: برخلاف مدل رشتهمحور CUDA، Triton محاسبات را به “بلوکها” تجزیه میکند و به عملیات بر روی بردارها/تنسورها نیاز دارد. این کار به طور موثر موازیسازی درون نمونهای و مسائل همزمانی سطح پایین (مانند ترکیب حافظه و همگامسازی حافظه مشترک) را انتزاع میکند، برنامهنویسی را ساده کرده و خطاهای رایج مانند واگرایی رشتهها یا شرایط رقابت را کاهش میدهد. 3
بهینهسازیهای خودکار: Triton بسیاری از جزئیات سطح پایینی را که معمولاً در CUDA دستی هستند، مانند الگوهای دسترسی به حافظه، باز کردن حلقه و همگامسازی رشتهها، خودکار میکند. همچنین حافظه مشترک را به طور خودکار مدیریت میکند و تایلها را به طور پیشفرض در فایل رجیستر قرار میدهد و از حافظه مشترک برای عملیات خاصی مانند کاهش (tl.sum())، تبدیلهای طرحبندی (ترانهاده) یا ضرب ماتریس (tl.dot()) استفاده میکند. 3
طرحبندیهای داده سفارشی و دقت مختلط: این زبان از کنترل دقیق بر طرحبندیهای داده در حافظه (مانند تایلینگ یا پدینگ) برای بهینهسازی الگوهای دسترسی به حافظه پشتیبانی میکند که به ویژه برای وظایف شامل دسترسی نامنظم به حافظه یا دادههای پراکنده مفید است. Triton همچنین شامل پشتیبانی قوی از عملیات دقت مختلط، مانند FP16 (دقت نصف) یا BF16 (bfloat16) است که برای وظایز یادگیری عمیق مدرن حیاتی هستند. 2
متا-برنامهنویسی: Triton از متا-برنامهنویسی برای اجازه دادن به توسعهدهندگان برای نوشتن کدی استفاده میکند که با اشکال مختلف تنسور، انواع داده و سایر پارامترهای زمان اجرا سازگار میشود و قابلیت استفاده مجدد کد و مقیاسپذیری را افزایش میدهد. 5
مزایا و محدودیتهای کنونی
مزایا:
بهرهوری: برنامهنویسی GPU را با سینتکس شبیه پایتون به طور قابل توجهی ساده میکند و نیاز توسعهدهندگان به یادگیری CUDA پیچیده یا سایر ابزارهای برنامهنویسی سطح پایین را از بین میبرد که منجر به نمونهسازی سریعتر و تکرار میشود. 5
عملکرد: کد GPU بسیار بهینهشدهای را تولید میکند که در بسیاری از موارد میتواند عملکردی قابل مقایسه یا حتی بهتر از CUDA بهینهشده دستی داشته باشد، به ویژه زمانی که کاربر بداند چگونه کد Triton را به طور موثر تنظیم کند. 3
قابلیت حمل (درون GPUها): کد تولید شده را به طور خودکار با سختافزار هدف تطبیق میدهد و آن را با معماریهای مختلف GPU سازگار میکند (اگرچه پشتیبانی اصلی فعلی GPUهای NVIDIA است). 2
دوستدار تحقیق: موانع ورود برای نوشتن کرنلهای GPU سفارشی را کاهش میدهد و محققان را قادر میسازد تا الگوریتمهای جدید را راحتتر نمونهسازی و آزمایش کنند. 3
ادغام بیدرنگ: با پایتون سازگار است و ادغام کرنلهای Triton در خطوط لوله یادگیری ماشین موجود یا کتابخانههایی مانند PyTorch را آسان میکند. 5
محدودیتها:
ویژگیهای eDSL: به عنوان یک زبان خاص دامنه (eDSL) تعبیهشده، کد Triton، در حالی که از نظر نحوی شبیه پایتون است، در روشهای حیاتی مانند پایتون استاندارد رفتار نمیکند. بسیاری از ویژگیهای روزمره پایتون (مانند لیستهای پویا، مدیریت استثنا، عبارات ژنراتور، استفاده مستقیم از کتابخانههای پایتون) ممکن است پشتیبانی نشوند که منجر به شکستهای خاموش یا خطاهای مرموز میشود. 9
چالشهای عیبیابی: عیبیابی کرنلهای Triton میتواند یک کابوس باشد. هنگامی که کد با شکست مواجه میشود، توسعهدهندگان اغلب با ردیابیهای پشته (stack traces) مبهم از اعماق داخلی کامپایلر مواجه میشوند و دیباگرهای استاندارد پایتون معمولاً کار نمیکنند. در حالی که تنظیم TRITON_INTERPRET=1 امکان شبیهسازی CPU را برای بررسی صحت فراهم میکند، عیبیابی عمیق عملکرد چالشبرانگیز باقی میماند. 4
پشتیبانی سختافزار: در حال حاضر، Triton عمدتاً GPUهای NVIDIA را هدف قرار میدهد. پشتیبانی از CPU و GPUهای AMD به طور کامل پیادهسازی نشده است، اگرچه از مشارکتهای جامعه با هدف رفع این محدودیت استقبال میشود. 3
محدودیتهای کرنل خاص: برخی از کرنلها را نمیتوان با Triton به دلیل محدودیتهای خاصی مانند نیاز به توان دو بودن اندازههای تایل و عدم پشتیبانی فعلی از عملیات خاصی مانند slice پیادهسازی کرد. 4
کپسولهسازی بهینهسازی جزئی: در حالی که هدف آن خودکارسازی کامل بهینهسازیها است، تنها حدود ۶۰٪ از این هدف را محقق میکند. این زبان همزمانی در داخل SMها را انتزاع میکند، اما برخی ملاحظات الگوریتمی مهم (مانند تایلینگ، همگامسازی بین SMها) همچنان به صلاحدید توسعهدهندگان واگذار میشود. 3
زمان استفاده از زبان برنامهنویسی Triton
Triton زمانی ایدهآل است که اپراتورهای فریمورک بومی موجود به اندازه کافی کارآمد نیستند، یا زمانی که معماریهای شبکه عصبی جدیدی توسعه مییابد که به کرنلهای GPU سفارشی و بسیار بهینهشده نیاز دارند. 4 این زبان به عنوان یک گام میانی عالی در سلسله مراتب بهینهسازی عمل میکند: اگر torch.compile برای عملکرد کافی نباشد، نوشتن کرنلهای Triton سفارشی گام منطقی بعدی قبل از توسل به پیچیدگی به مراتب بالاتر CUDA خام است. 7 به ویژه برای نمونهسازی سریع و تکرار ایدههای کرنل جدید، یا برای پیادهسازی اپراتورهای سفارشی که هنوز در کتابخانههای بسیار بهینهشده مانند cuBLAS یا cuDNN موجود نیستند، مفید است. 4
سرور استنتاج NVIDIA Triton: پلتفرم استقرار مدل هوش مصنوعی
سرور استنتاج NVIDIA Triton، که اکنون به عنوان NVIDIA Dynamo-Triton و بخشی از پلتفرم گستردهتر NVIDIA Dynamo شناخته میشود، یک فریمورک متنباز و با کارایی بالا برای سرویسدهی استنتاج است. 10 هدف اصلی آن استانداردسازی و سادهسازی استقرار و اجرای مدلهای هوش مصنوعی در محیطهای تولید، و در دسترس، مقیاسپذیر و کارآمد کردن آنها برای کاربردهای مختلف است. 10 این پلتفرم طیف وسیعی از مدلهای هوش مصنوعی را از فریمورکهای محبوب مانند TensorRT، TensorFlow، PyTorch و ONNX پشتیبانی میکند و میتواند هم بر روی GPUهای NVIDIA و هم CPUهای x86 و Arm اجرا شود و سازگاری گستردهای را ارائه میدهد. 1
چرا NVIDIA Triton؟ استقرار کارآمد مدل هوش مصنوعی در مقیاس
استقرار مدلهای هوش مصنوعی در محیط تولید با چالشهای قابل توجهی همراه است، از جمله مدیریت انواع مدلهای متنوع، بهینهسازی استفاده از سختافزار، اطمینان از تأخیر کم و دستیابی به توان عملیاتی بالا تحت بارهای متغیر از درخواستهای بلادرنگ تا دستهای. 10 سرور استنتاج NVIDIA Triton برای رفع این چالشها با ارائه یک پلتفرم قوی، مقیاسپذیر و انعطافپذیر برای سرویسدهی مدلهای هوش مصنوعی توسعه یافته است. هدف آن به حداکثر رساندن استفاده از GPU و ارائه استنتاج کارآمد هوش مصنوعی در مقیاسهای مختلف استقرار، از تنظیمات تک GPU تا محیطهای توزیعشده در مقیاس بزرگ است. 1تغییر نام از “NVIDIA Triton Inference Server” به “NVIDIA Dynamo-Triton” و گنجاندن صریح آن در “پلتفرم NVIDIA Dynamo” 10 صرفاً یک تغییر ظاهری نیست. پلتفرم NVIDIA Dynamo به عنوان یک “پلتفرم استنتاج با کارایی بالا و تأخیر کم که برای سرویسدهی به تمام مدلهای هوش مصنوعی در هر فریمورک، معماری یا مقیاس استقرار طراحی شده است” توصیف میشود. نکته مهم این است که به طور خاص به “سرویسدهی مدلهای هوش مصنوعی مولد در محیطهای توزیعشده” و شامل “بهینهسازیهای خاص LLM” اشاره میکند. 10این تغییر نام نشاندهنده تأکید استراتژیک NVIDIA بر حوزه به سرعت در حال رشد و از نظر محاسباتی پرتقاضای هوش مصنوعی مولد، به ویژه مدلهای زبان بزرگ (LLM) است. با ادغام سرور استنتاج Triton در “پلتفرم Dynamo” گستردهتر و برجسته کردن ویژگیهای خاص LLM مانند استفاده مجدد زودهنگام از حافظه KV و پیشپرکردن تکهای 10، NVIDIA راهحل سرویسدهی استنتاج خود را برای برآوردن الزامات منحصربهفرد و پرتقاضای این مدلهای پیشرفته قرار میدهد. پیشوند “Dynamo” احتمالاً به تمرکز بر مدیریت منابع پویا و مقیاسگذاری برای این استقرارهای پیچیده و در مقیاس بزرگ اشاره دارد که از ویژگیهای هوش مصنوعی مولد مدرن هستند. برای کاربران، این به معنای قابلیتهای افزایش یافته برای استقرار مدلهای هوش مصنوعی مولد پیشرفته با عملکرد و مقیاسپذیری برتر است که رهبری NVIDIA در زیرساخت هوش مصنوعی را تقویت میکند.
ویژگیها و قابلیتهای کلیدی
پشتیبانی از چند فریمورک: از مدلهای تمام فریمورکهای محبوب هوش مصنوعی، از جمله TensorRT، TensorFlow، PyTorch و ONNX، و انواع مدلهای مختلف پشتیبانی میکند. این امر امکان یک استراتژی استقرار یکپارچه را بدون توجه به فریمورک اصلی مدل فراهم میکند. 1
اجرای همزمان مدل: امکان اجرای همزمان چندین مدل بر روی یک GPU، یا چندین نمونه از یک مدل را فراهم میکند و به طور قابل توجهی استفاده از GPU و توان عملیاتی را افزایش میدهد. 1
دستهبندی پویا: به طور خودکار چندین درخواست استنتاج را در یک اجرای واحد دستهبندی میکند. این ویژگی برای دستیابی به توان عملیاتی بسیار بالاتر، اغلب با افزایش نسبتاً کمی در تأخیر، با استفاده کارآمد از موازیسازی GPU بسیار مهم است. 1
استقرار انعطافپذیر: میتواند به عنوان یک کانتینر Docker (در محل، ابرهای عمومی مانند AWS) مستقر شود، یا از طریق CMake برای محیطهای غیر Docker از منبع ساخته شود. حتی میتواند بر روی سیستمهای فقط CPU اجرا شود و انعطافپذیری استقرار گستردهای را ارائه میدهد. 1
مدیریت مدل: امکان جایگزینی یا ارتقاء مدلها را به صورت پویا در حالی که سرور و برنامههای مشتری در حال اجرا هستند، فراهم میکند و از در دسترس بودن مداوم سرویس بدون توقف اطمینان میدهد. 1
بهینهسازی شده برای LLMها: شامل بهینهسازیهای خاص برای مدلهای زبان بزرگ، مانند استفاده مجدد زودهنگام از حافظه Key-Value (KV)، پیشپرکردن تکهای و تقویت تعاملات چند مرحلهای است که برای سرویسدهی کارآمد هوش مصنوعی مولد حیاتی هستند. 10
مدلهای Ensemble: از اتصال چندین مدل به خطوط لوله هوش مصنوعی پشتیبانی میکند و جریانهای کاری استنتاج پیچیده را که در آن خروجی یک مدل به مدل دیگر تغذیه میشود، تسهیل میکند. 10
نظارت بر عملکرد: اطلاعات دقیق عملکرد را از طریق معیارهای Prometheus و یک نقطه پایانی آماری ارائه میدهد. یک برنامه مشتری، perf_client، برای اندازهگیری عملکرد مدلهای فردی با استفاده از بار مصنوعی ارائه شده است که به کاربران در درک بدهبستانهای تأخیر در مقابل توان عملیاتی کمک میکند. 1
کتابخانههای مشتری: کتابخانههای مشتری C++ و پایتون را برای سادهسازی ارتباط با سرور، و یک API GRPC برای تولید مشتریان در زبانهای دیگر ارائه میدهد. 1
مزایا و موارد استفاده معمول
افزایش استفاده از GPU: استفاده از منابع گرانقیمت GPU را از طریق ویژگیهایی مانند اجرای همزمان، دستهبندی پویا و اجرای چندین نمونه مدل به حداکثر میرساند. 1
استقرار سادهشده: فرآیند انتقال مدلهای هوش مصنوعی از توسعه به تولید را ساده میکند، پیچیدگیهای استقرار خاص فریمورک را انتزاع میکند و یک رابط سرویسدهی ثابت را فراهم میکند. 1
مقیاسپذیری و کارایی: برای استنتاج مقیاسپذیر و با کارایی بالا در سختافزارها و سناریوهای استقرار متنوع، از دستگاههای لبه تا مراکز داده بزرگ، طراحی شده است و اطمینان میدهد که برنامههای هوش مصنوعی میتوانند بارهای متغیر را تحمل کنند. 10
استحکام: با NVIDIA AI Enterprise در دسترس است و پشتیبانی، امنیت، پایداری و قابلیت مدیریت در سطح سازمانی را برای محیطهای تولید فراهم میکند. 10
موارد استفاده معمول:
سرویسدهی مدلهای یادگیری عمیق برای برنامههای بلادرنگ مانند تشخیص تصویر، پردازش زبان طبیعی و سیستمهای توصیهگر.
استقرار مدلهای هوش مصنوعی مولد در مقیاس بزرگ مانند LLMها و مدلهای انتشار در محیط تولید. 10
مدیریت استنتاج برای چندین مدل هوش مصنوعی بر روی منابع سختافزاری مشترک در مراکز داده.
ساخت خطوط لوله هوش مصنوعی پیچیده با مدلهای Ensemble برای استنتاج چند مرحلهای. 10
Triton در مقابل Triton: یک تمایز واضح
نام مشترک “TRITON” اغلب منجر به این باور اشتباه میشود که این دو فناوری قابل تعویض یا مستقیماً از نظر عملکرد مرتبط هستند. با این حال، آنها نقشهای اساساً متفاوتی را در چرخه عمر توسعه و استقرار هوش مصنوعی ایفا میکنند و به چالشهای متمایزی میپردازند.تفاوت اساسی: توسعه/بهینهسازی در مقابل استقرار/سرویسدهی.
زبان برنامهنویسی Triton یک ابزار توسعه برای ایجاد و بهینهسازی کرنلهای محاسباتی سفارشی GPU است. تمرکز آن بر کارایی سطح پایین بلوکهای محاسباتی خاص در یک مدل هوش مصنوعی است و محققان و مهندسان را قادر میسازد تا کد بسیار کارآمدی را برای عملیات جدید بنویسند. خروجی آن کد ماشین GPU بسیار بهینهشدهای است که میتواند در فریمورکهای بزرگتر ادغام شود. 2
سرور استنتاج NVIDIA Triton (که اکنون Dynamo-Triton نامیده میشود) یک پلتفرم استقرار برای سرویسدهی مدلهای کامل هوش مصنوعی در محیطهای تولید است. تمرکز آن بر مدیریت، مقیاسبندی و اجرای کارآمد مدلهای آموزشدیده برای درخواستهای استنتاج است و از توان عملیاتی بالا و تأخیر کم در کاربردهای دنیای واقعی اطمینان حاصل میکند. 1
نقشهای مکمل: چگونه آنها در جریان کار گستردهتر هوش مصنوعی جای میگیرند.در حالی که از نظر عملکردی متمایز هستند، این دو “Triton” را میتوان به عنوان اجزای مکمل در یک خط لوله هوش مصنوعی پیچیده در نظر گرفت. یک توسعهدهنده ممکن است از زبان برنامهنویسی Triton برای بهینهسازی یک جزء حیاتی و حساس به عملکرد (به عنوان مثال، یک مکانیسم توجه سفارشی، یک تابع فعالسازی جدید، یا یک ضرب ماتریس تخصصی) در یک مدل PyTorch استفاده کند. 4 هنگامی که آن مدل، که احتمالاً شامل کرنل بهینهشده با Triton است، آموزش دیده و اعتبارسنجی شد، سپس با استفاده از سرور استنتاج NVIDIA Triton برای مدیریت درخواستهای استنتاج در مقیاس، بستهبندی و مستقر میشود. 1 آنها مراحل مختلفی از چرخه عمر هوش مصنوعی را نشان میدهند: توسعه و بهینهسازی کرنل (Triton PL) در مقابل سرویسدهی مدل و مدیریت استنتاج (NVIDIA Triton Inference Server).این رویکرد یک “بهینهسازی کامل پشته” قدرتمند برای برنامههای هوش مصنوعی ایجاد میکند. توسعهدهندگان میتوانند از زبان برنامهنویسی Triton برای استخراج حداکثر عملکرد از اجزای محاسباتی فردی و حیاتی مدلهای هوش مصنوعی خود استفاده کنند و به کارایی GPU در سطح متخصص در سطح میکرو دست یابند. 2 متعاقباً، آنها میتوانند از سرور استنتاج NVIDIA Triton برای استقرار این مدلهای بسیار بهینهشده (یا هر مدل دیگری، صرف نظر از نحوه توسعه کرنلهای آن) در یک محیط تولید استفاده کنند. 1 این به آنها امکان میدهد از ویژگیهای سطح کلان سرور مانند دستهبندی پویا، اجرای همزمان و پشتیبانی از چند فریمورک بهرهمند شوند تا درخواستهای استنتاج را در مقیاس بزرگ با توان عملیاتی بالا و تأخیر کم مدیریت کنند. این ترکیب ابزارها به سازمانها امکان میدهد تا به برتری عملکردی سرتاسری در برنامههای هوش مصنوعی خود دست یابند. این فقط بهینهسازی یک قطعه نیست، بلکه داشتن ابزارهای قوی است که چالشهای عملکرد را در هر دو سطح گرانول (توسعه کرنل) و سیستمی (سرویسدهی مدل) برطرف میکنند. این امر منجر به استقرار هوش مصنوعی کارآمدتر، مقرونبهصرفهتر و با عملکرد بالاتر میشود و استراتژی گستردهتر NVIDIA را برای ارائه راهحلهای جامع در کل چرخه عمر هوش مصنوعی، از توسعه تا تولید، تأکید میکند.برای روشنتر شدن این تمایز، جدول مقایسه زیر ویژگیهای کلیدی هر دو فناوری را خلاصه میکند:
ویژگی/جنبهزبان برنامهنویسی Tritonسرور استنتاج NVIDIA Triton (Dynamo-Triton)عملکرد اصلیتوسعه و بهینهسازی کرنلهای محاسباتی سفارشی GPU برای شبکههای عصبی عمیق (DNNs). 2استقرار و سرویسدهی کارآمد مدلهای هوش مصنوعی در محیطهای تولید. 1دستهزبان برنامهنویسی، کامپایلر، زبان خاص دامنه تعبیهشده (eDSL). 2پلتفرم سرویسدهی استنتاج، فریمورک استقرار مدل. 1کاربر هدفمحققان هوش مصنوعی/یادگیری ماشین، مهندسان یادگیری عمیق، بهینهسازان عملکرد، هر کسی که به کد GPU سفارشی نیاز دارد. 5مهندسان MLOps، تیمهای DevOps، توسعهدهندگان برنامههای هوش مصنوعی، مهندسان تولید. 1خروجی/آرتیفکت اصلیکد ماشین GPU بسیار بهینهشده (PTX/cubin) تولید شده از کرنلهای پایتون. 6یک سرویس استنتاج مقیاسپذیر برای مدلهای هوش مصنوعی مستقر، که درخواستها را مدیریت میکند. 1نقش در جریان کار هوش مصنوعیتوسعه و بهینهسازی مدل (تمرکز بر تنظیم دقیق عملکرد اجزای خاص مدل). 4استقرار مدل و سرویسدهی تولید (تمرکز بر مدیریت و اجرای مدلهای آموزشدیده در مقیاس). 1انتزاع کلیدیبرنامهنویسی تنسور محور، عملیات بر روی “بلوکها” (انتزاع از رشتههای فردی). 6نمونههای مدل، درخواستهای استنتاج، دستهبندی پویا، اجرای همزمان. 1ارتباط با CUDAجایگزین/سادهکننده مبتنی بر پایتون برای نوشتن کد GPU، کامپایل به PTX (همانند CUDA)، و انتزاع بسیاری از پیچیدگیهای CUDA. 5میتواند مدلهای ساخته شده با CUDA، TensorRT، PyTorch، TensorFlow، ONNX و غیره را سرویسدهی کند. برای سرویسدهی مستقل از فریمورک است. 1تمرکز سختافزاریعمدتاً GPUهای NVIDIA (محدودیت پیادهسازی فعلی). 3GPUهای NVIDIA، CPUهای x86 و Arm، و میتواند بر روی سیستمهای بدون GPU اجرا شود. 1نام فعلیTriton (زبان برنامهنویسی)NVIDIA Dynamo-Triton (قبلاً سرور استنتاج NVIDIA Triton). 10
گام 1 – نحوه استفاده از Hugging Face Pipelines
برای استفاده از یک pipeline
، کافی است شیء pipeline
را با نام وظیفهای که میخواهید انجام دهید و نام مدل از پیش آموزشدیده که میخواهید استفاده کنید، نمونهسازی کنید. برای مثال، برای انجام تولید متن بر روی متنی با استفاده از مدل GPT-Neo، باید موارد زیر را انجام دهید:
from transformers import pipelinegenerator = pipeline('text-generation', model='EleutherAI/gpt-neo-1.3B')result = generator('I really enjoyed this movie', do_sample=True, min_length=50)print(result)I really enjoyed this movie. I’m glad this movie was so big it won BestPicture at the Oscars. I really was not expecting the movie to do anythingspecial, and it totally surprised me by doing so. The movie was awesome!
یکی از مزایای کلیدی استفاده از pipeline
ها این است که آنها تمام پیشپردازش و پسپردازش دادههای لازم برای کار را، مانند توکنسازی و قالببندی دادههای ورودی و خروجی، انجام میدهند و شروع به کار با مدلهای از پیش آموزشدیده برای کارهای NLP را بسیار آسان میکنند. علاوه بر این، pipeline
ها را میتوان به راحتی سفارشیسازی و توسعه داد تا از وظایف یا مدلهای جدید پشتیبانی کنند و یک رویکرد انعطافپذیر و ماژولار برای NLP ارائه میدهند.
گام 2 – استقرار یک مدل Hugging Face بر روی NVIDIA Triton
NVIDIA Triton (که قبلاً با نام TensorRT Inference Server شناخته میشد) یک نرمافزار متنباز سرویسدهی استنتاج (inference-serving software) است که استقرار مدلهای AI را در مقیاس وسیع ساده میکند. برای استقرار یک مدل Hugging Face بر روی NVIDIA Triton، شما باید این مراحل را به دو روش دنبال کنید:
- تبدیل به ONNX و ارسال فایلها به Triton Model Repository
- استفاده از Huggingface Pipeline با Template Method برای استقرار مدل (توصیه میشود)
ما دریافتیم که Huggingface Pipeline در تولید توکنها بسیار سریعتر عمل میکند و برای شروع به کد کمتری نیاز دارد. در ادامه نحوه انجام این کار را توضیح میدهیم؛ فقط باید کد pipeline بالا را به 2 بخش تقسیم کنید:
بخش 1: بستهبندی کد در model.py
import appimport jsonimport triton_python_backend_utils as pb_utilsimport numpy as npfrom transformers import pipelineinferless_model = app.InferlessPythonModel()class TritonPythonModel: def initialize(self, args): self.generator = pipeline("text-generation", model="EleutherAI/gpt-neo-1.3B")def execute(self, requests): responses = for request in requests: # Decode the Byte Tensor into Text input = pb_utils.get_input_tensor_by_name(request, "prompt") input_string = input.as_numpy().decode()# Call the Model pipeline pipeline_output = self.generator(input_string, do_sample=True, min_length=50) generated_txt = pipeline_output["generated_text"] output = generated_txt# Encode the text to byte tensor to send back inference_response = pb_utils.InferenceResponse( output_tensors=), ) ] ) responses.append(inference_response)return responsesdef finalize(self, args): self.generator = None
گام 2: ایجاد یک فایل پیکربندی
شما همچنین باید pbconfig.txt را اضافه کنید تا Triton نحوه پردازش مدل را درک کند:
name: "gpt-neo"backend: "python"input }]output }]instance_group
هنگامی که این فایلها را در اختیار دارید، باید مطمئن شوید که آنها را در ساختار پوشه زیر قرار دادهاید:
گام 3 – استقرار کانتینرهای Triton Inference در GKE
حالا که مدل آماده است، گام بعدی استقرار NVIDIA Triton و ارسال لینک مخزن مدل است. ابتدا به Amazon S3 (میتوانید از Azure/GCP buckets نیز استفاده کنید) بروید. یک bucket برای مدلهای خود ایجاد کنید.
s3://model-bucket/model-repo/
در bucket، یک پوشه به نام model-repo ایجاد کنید و فایلها را با نام gpt-neo به s3 bucket ارسال کنید. شما باید اعتبارنامههای AWS را برای دسترسی به S3 bucket خود اختصاص دهید و آن را برای مرحله بعدی آماده نگه دارید.
triton-deploy.yaml
apiVersion: apps/v1kind: Deploymentmetadata: name: triton-deployment labels: app: triton-serverspec: selector: matchLabels: app: triton-server replicas: 1 template: metadata: labels: app: triton-server spec: containers: - name: serving image: nvcr.io/nvidia/tritonserver:22.08-py3 env: - name: AWS_ACCESS_KEY_ID value: - name: AWS_SECRET_ACCESS_KEY value: - name: AWS_DEFAULT_REGION value: us-east-1 ports: - name: grpc containerPort: 8001 - name: http containerPort: 8000 - name: metrics containerPort: 8002 resources: limits: nvidia.com/gpu: 1 command: [ "tritonserver", "--model-store=s3:///model_repo", "--model-control-mode=explicit", "--exit-on-error=false" ]
در مرحله بعد، یک خوشه Kubernetes ایجاد کنید و دستورات زیر را اجرا کنید تا kubectl را با فایلهای زیر اجرا کنید:
kubectl apply -f triton-deploy.yaml
پس از استقرار کانتینر، سرویس را مستقر میکنید:
triton-service.yaml
apiVersion: v1kind: Servicemetadata: name: triton-server labels: app: triton-serverspec: selector: app: triton-server ports: - protocol: TCP port: 80 name: http targetPort: 8000 - protocol: TCP port: 443 name: https targetPort: 8000 - protocol: TCP port: 8001 name: grpc targetPort: 8001 - protocol: TCP port: 8002 name: metrics targetPort: 8002 type: LoadBalancer
فایل را برای ایجاد سرویس اعمال کنید:
kubectl apply -f triton-service.yaml
میتوانید به تب Cluster → Services بروید تا IP خارجی سرویس را پیدا کنید. پس از استقرار این سرویس و داشتن IP، از دستور زیر برای فراخوانی استنتاج استفاده کنید:
curl --location --request POST 'http://<<IP-Address>>/v2/models/gpt-neo/infer' --header 'Content-Type: application/json' --data-raw '{ "inputs":[ { "name": "prompt", "shape": 1, "datatype": "BYTES", "data": ["I really enjoyed this"] } ] }'
گام 4 – استفاده کارآمد از GPU ها
برای اطمینان از استفاده کارآمد از GPU، Triton API هایی را برای بارگذاری و تخلیه مدلها از طریق API ها در اختیار شما قرار میدهد. میتوانید از این کنترلها استفاده کنید:
- میتوانید API POST را برای بارگذاری مدل فراخوانی کنید: /v2/repository/models//load
- میتوانید API POST را برای تخلیه مدل فراخوانی کنید: /v2/repository/models//unload
این امکان را فراهم میکند که چندین مدل حافظه GPU را به اشتراک بگذارند. این میتواند به بهینهسازی مصرف حافظه و بهبود عملکرد کمک کند.هنگام اجرای مدلهای یادگیری ماشین بر روی GPU ها، مصرف حافظه میتواند یک عامل محدودکننده باشد. GPU ها معمولاً مقدار محدودی حافظه دارند و اجرای همزمان چندین مدل میتواند به سرعت آن حافظه را تمام کند. اینجاست که تکنیک ذکر شده در مقاله وارد عمل میشود.با نگه داشتن تنها مدل فعال در حافظه، این تکنیک به چندین مدل اجازه میدهد تا حافظه GPU را به اشتراک بگذارند. این بدان معناست که وقتی مدلی به طور فعال استفاده نمیشود، حافظه آن میتواند برای استفاده توسط مدلهای دیگر آزاد شود. این میتواند با اجازه استفاده کارآمدتر از منابع GPU، به بهینهسازی مصرف حافظه و بهبود عملکرد کمک کند.
نتیجهگیری
نام “TRITON” در چشمانداز هوش مصنوعی، در حالی که به طور بالقوه گیجکننده است، دو فناوری متمایز و قدرتمند را نشان میدهد که برای پیشبرد هوش مصنوعی با کارایی بالا ضروری هستند.زبان برنامهنویسی Triton ابزاری انقلابی برای توسعهدهندگان و محققان است که با ارائه رویکردی پایتونمحور برای نوشتن کرنلهای سفارشی بسیار بهینهشده، برنامهنویسی GPU را دموکراتیزه میکند. این زبان کاربران را قادر میسازد تا بدون پیچیدگیهای عمیق CUDA خام، به عملکردی نزدیک به سطح متخصص دست یابند و فاز توسعه و بهینهسازی مدلهای هوش مصنوعی را تسریع میکند.در مقابل، سرور استنتاج NVIDIA Triton (که اکنون NVIDIA Dynamo-Triton نامیده میشود) یک پلتفرم قوی و در سطح سازمانی است که برای استقرار و سرویسدهی کارآمد مدلهای هوش مصنوعی در مقیاس بزرگ در محیطهای تولید طراحی شده است. این پلتفرم به چالشهای حیاتی مدیریت مدل، استفاده از سختافزار و توان عملیاتی استنتاج میپردازد و تضمین میکند که مدلهای آموزشدیده میتوانند ارزش خود را به طور موثر به کاربران نهایی ارائه دهند. تکامل اخیر آن به پلتفرم NVIDIA Dynamo نقش آن را در سرویسدهی به پرتقاضاترین بارهای کاری هوش مصنوعی مولد بیشتر تقویت میکند.درک هدف منحصربهفرد هر “Triton” برای بهرهبرداری از پتانسیل کامل آنها کلید است. آنها راهحلهای رقیب نیستند، بلکه اجزای مکمل یک اکوسیستم هوش مصنوعی پیچیده هستند. با انتخاب “Triton” مناسب برای وظیفه مورد نظر – خواه بهینهسازی یک کرنل برای اوج عملکرد باشد یا سرویسدهی یک مدل با توان عملیاتی بالا و تأخیر کم – متخصصان هوش مصنوعی میتوانند جریان کار خود را به طور قابل توجهی بهبود بخشند، نوآوری را تسریع کنند و برنامههای هوش مصنوعی کارآمدتر و قدرتمندتری بسازند. همافزایی بین این ابزارها در نهایت مرز هوش مصنوعی را به جلو میراند و قابلیتهای پیشرفته هوش مصنوعی را قابل دسترستر و کارآمدتر از همیشه میکند.
دیدگاهتان را بنویسید