TL;DR
- نوشتن کد سریع GPU یکی از طاقتفرساترین تخصصها در مهندسی یادگیری ماشین است.
- محققان RightNow AI میخواهند آن را کاملاً خودکار کنند.
- تیم تحقیقاتی RightNow AI AutoKernel را منتشر کرده است،.
چه اتفاقی افتاد
نوشتن کد سریع GPU یکی از طاقتفرساترین تخصصها در مهندسی یادگیری ماشین است. محققان RightNow AI میخواهند آن را کاملاً خودکار کنند.
تیم تحقیقاتی RightNow AI AutoKernel را منتشر کرده است،. یک چارچوب متن باز که یک حلقه عامل مستقل LLM را برای بهینه سازی هسته GPU برای مدل.
های دلخواه PyTorch اعمال میکند. این رویکرد ساده است:.
قبل از رفتن به رختخواب هر مدلی را به آن بدهید و با هستههای سریع تر تریتون. بیدار شوید - نیازی به تخصص GPU نیست.
https: //arxiv. org/pdf/2603.
21331 چرا بهینه سازی هستههای GPU بسیار سخت است؟ هسته GPU تابعی است که به صورت موازی در هزاران هسته GPU اجرا میشود.
هنگامی که یک مدل ترانسفورماتور مانند LLaMA یا GPT-2 را اجرا می کنید،. بخش عمده ای از زمان محاسبه در هسته ها برای عملیاتی مانند ضرب ماتریس (matmul)،.
softmax،. عادی سازی لایه و توجه صرف میشود.
این هسته ها در کتابخانه هایی مانند cuBLAS و cuDNN زندگی میکنند یا بهطور خودکار توسط خط. لوله کامپایل PyTorch تولید میشوند.
مشکل این است که فشرده کردن حداکثر عملکرد از این هسته ها مستلزم استدلال همزمان در مورد شدت. حسابی،.
ادغام حافظه،. فشار ثبت،.
اندازه کاشی،. همگام سازی در سطح پیچ و تاب و انتخاب دستورالعمل هسته تانسور است - ترکیبی از مهارت هایی.
که سال ها طول می کشد تا توسعه یابد. یک هسته matmul با کارایی بالا ممکن است شامل بیش از 200 خط کد CUDA یا Triton با.
ده ها پارامتر وابسته به هم باشد. این تخصص کمیاب است و فرآیند تنظیم دستی با تکامل معماریهای مدل ضعیف است.
مجموعه معیار KernelBench که LLM های مرزی را روی 250 مشکل هسته GPU ارزیابی میکند،. دریافت که حتی بهترین مدلها با عملکرد پایه PyTorch در کمتر از 20 درصد موارد با استفاده از.
تولید تکشات مطابقت دارند. AutoKernel مستقیماً در پاسخ به این شکاف ساخته شد.
حلقه:. ویرایش،.
معیار،. نگه داشتن یا برگرداندن بینش اصلی AutoKernel این است که گردش کار یک مهندس هسته خبره خود یک.
حلقه ساده است:. یک نامزد بنویسید،.
آن را محک بزنید،. بهبودها را حفظ کنید،.
رگرسیون ها را کنار بگذارید،. تکرار کنید.
چارچوب این حلقه را مکانیزه میکند. یک عامل LLM یک فایل منفرد - kernel.
py را تغییر میدهد - یک مهار ثابت معیار صحت را تأیید میکند و توان عملیاتی را اندازهگیری. میکند،.
و نتیجه تعیین میکند که آیا تغییر ادامه دارد یا خیر. مهم این است که هر آزمایش به یک git commit نگاشت میشود.
آزمایشهای نگهداشتهشده باعث پیشرفت شاخه میشوند. آزمایش های برگردانده شده بهطور تمیز با تنظیم مجدد git پاک میشوند.
کل تاریخچه با ابزارهای git استاندارد قابل مرور است و نتایج آزمایش در یک فایل results. tsv جدا شده از برگه های ساده ثبت میشود - بدون وابستگی،.
قابل خواندن توسط انسان و بهطور پیش پا افتاده توسط عامل قابل تجزیه. هر تکرار تقریباً 90 ثانیه طول می کشد - 30 ثانیه برای بررسی صحت،.
30 ثانیه برای محک زدن عملکرد از طریق تریتون do_bench و 30 ثانیه برای استدلال عامل و اصلاح. کد.
با تقریباً 40 آزمایش در ساعت،. یک اجرا 10 ساعته یک شبه 300 تا 400 آزمایش را در چندین هسته انجام میدهد.
این طرح مستقیماً از پروژه جستجوی خودکار Andrej Karpathy نشأت میگیرد که نشان میدهد یک عامل هوش مصنوعی. که یک حلقه نگهدارنده/بازگشت بر روی کد آموزشی LLM اجرا میکند،.
میتواند 20 بهینهسازی را در 700 آزمایش در دو روز در یک GPU واحد کشف کند. AutoKernel این حلقه را به کد هسته،.
با فضای جستجوی متفاوت و یک معیار صحت بهعنوان تابع ارزیابی به جای از دست دادن اعتبار،. پیوند میدهد.
عامل یک سند دستورالعمل 909 خطی به نام program. md را می خواند که دانش تخصصی را در یک کتاب بازی بهینه سازی شش لایه رمزگذاری می.
کند. سطوح از تنظیم اندازه بلوک (جلو ابعاد کاشی از طریق توان های 2،.
تنظیم num_warps و num_s e) تا الگوهای دسترسی به حافظه (بارهای ادغام شده،. واکشی اولیه نرم افزار،.
چرخش L2)،. بهینه سازی های محاسباتی (انباشت TF32،.
ادغام epilogue)،. تکنیک های پیشرفته (تکنیک های پیشرفته برای splittonist،.
splitton-K) پیشرفت میکنند. تخصص)، استراتژیهای خاص معماری (TMA در Hopper، cp.
async در Ampere،. اندازههای تنظیمشده برای L4/RTX)،.
و در نهایت الگوریتمهای خاص هسته مانند softmax آنلاین برای توجه و الگوریتم Welford برای عادیسازی. سند دستورالعمل عمداً جامع است، بنابراین نماینده میتواند بیش از 10 ساعت بدون گیر کردن کار کند.
ابتدا پروفایل کردن،. بهینه سازی جایی که مهم است برخلاف کارهای قبلی که مشکلات هسته را به صورت مجزا بررسی میکنند،.
AutoKernel از یک مدل کامل PyTorch شروع میشود. از torch.
profiler با ضبط شکل برای ضبط زمان GPU هر هسته استفاده میکند،. سپس اهداف بهینهسازی را با استفاده از قانون Amdahl رتبهبندی میکند - این اصل ریاضی که سرعت کلی.
که میتوانید به دست آورید محدود به مقدار کل زمان اجرا آن مؤلفه است. افزایش سرعت 1.
5× روی هسته ای که 60 درصد کل زمان اجرا را مصرف میکند،. سود انتها به انتها 1.
25× را به همراه دارد. همین سرعت روی هسته ای که 5 درصد از زمان اجرا را مصرف میکند، تنها 1.
03× را به همراه دارد. نمایه ساز سخت افزار GPU را از پایگاه داده ای با مشخصات شناخته شده شناسایی میکند که.
هم NVIDIA (H100,. A100,.
L40S,. L4,.
A10,. RTX 4090/4080/3090/3080) و AMD (MI300X,.
MI325X,. MI350X,.
MI350X,. MI350X) acce می باشد.
برای پردازندههای گرافیکی ناشناخته،. حداکثر توان عملیاتی FP16 را از روی شمارش SM،.
نرخ ساعت و قابلیت محاسبه تخمین میزند - باعث میشود سیستم در طیف وسیعتری از سختافزار نسبت به. آخرین پیشنهادات NVIDIA قابل استفاده باشد.
ارکستراتور (orchestrate. py) زمانی از یک هسته به هسته بعدی منتقل میشود که یکی از چهار شرط برآورده شود:.
پنج بازگشت متوالی،. 90 ٪ از حداکثر استفاده از GPU،.
یک بودجه زمان سپری شده دو ساعته،. یا یک سرعت 2× که قبلاً در آن هسته به دست آمده است.
این مانع از صرف زمان بیش از حد عامل بر روی هستههایی با بازدهی کاهش میشود. در حالی که اهداف با تاثیر بالاتر منتظر می مانند.
مهار صحت پنج مرحله ای عملکرد بدون صحت بی فایده است و AutoKernel در این زمینه بسیار دقیق. است.
هر هسته کاندید قبل از ثبت هر گونه افزایش سرعت، از پنج مرحله اعتبار سنجی عبور میکند. مرحله 1 یک تست دود را روی یک ورودی کوچک اجرا میکند تا خطاهای کامپایل و عدم.
تطابق شکل ها را در کمتر از یک ثانیه تشخیص دهد. مرحله 2 شامل 8 تا 10 پیکربندی ورودی و سه نوع داده - FP16،.
BF16،. و FP32 - میشود تا اشکالات وابسته به اندازه مانند مدیریت مرز و منطق باقیمانده کاشی را پیدا.
کند. مرحله 3 پایداری عددی را تحت ورودی های متخاصم آزمایش میکند:.
برای softmax،. ردیف هایی با مقادیر بزرگ یکسان.
برای matmul، محدوده دینامیکی شدید. برای نرمال سازی، واریانس نزدیک به صفر.
مرحله 4 جبرگرایی را با اجرای یک ورودی سه بار و نیاز به خروجیهای یکسان بیتی تأیید میکند،. که شرایط مسابقه را در کاهشهای موازی و اتمیهای غیر قطعی میگیرد.
مرحله 5 غیر قدرت از دو بعد مانند 1023،. 4097 و 1537 برای افشای اشکالات پوشاندن و خطاهای باقیمانده کاشی.
تلورانس ها dtype خاص هستند:. FP16 از atol = 10-2،.
BF16 از 2 × 10-2 و FP32 از 10-4 استفاده میکند. در ارزیابی کامل مقاله در میان 34 پیکربندی در NVIDIA H100،.
همه 34 پیکربندی درستی را با صفر خرابی در خروجیهای هسته مشتاق،. کامپایلشده و سفارشی دریافت کردند.
Backend دوگانه: Triton و CUDA C++ AutoKernel از بکاندهای Triton و CUDA C++ در یک چارچوب پشتیبانی میکند. تریتون یک زبان دامنه خاص شبیه پایتون است که JIT را در 1 تا 5 ثانیه کامپایل میکند.
و آن را برای تکرار سریع ایدهآل میکند – عامل میتواند اندازه بلوکها،. تعداد پیچها،.
مراحل خط لوله،. دقت انباشتهکننده و ساختار حلقه را تغییر دهد.
تریتون بهطور معمول به 80 تا 95 درصد توان عملیاتی cuBLAS برای ماتمول می رسد. CUDA C++ برای مواردی که نیاز به دسترسی مستقیم به ابتداییهای سطح تار،.
دستورالعملهای هسته تانسور WMMA (با استفاده از قطعات ۱۶×۱۶×۱۶)،. بارهای برداری از طریق float4 و half2،.
طرحبندیهای حافظه مشترک بدون درگیری بانکی،. و بافر مضاعف دارند،.
گنجانده شده است. هر دو باطن یک رابط kernel_fn() را نشان میدهند،.
بنابراین زیرساخت معیار بدون توجه به باطن بهطور یکسان اجرا میشود. این سیستم نه نوع هسته را پوشش میدهد که عملیات غالب در معماری های ترانسفورماتور مدرن را.
شامل میشود:. matmul،.
flash_attention،. fused_mlp،.
softmax،. layernorm،.
rmsnorm،. cross_entropy،.
rotary_embedding،. و کاهش.
هر کدام یک پیادهسازی مرجع PyTorch در reference. py دارند که بهعنوان اوراکل صحت عمل میکند،.
و بنچمارک توان عملیاتی را در TFLOPS یا گیگابایت بر ثانیه در کنار استفاده از خط سقف در. برابر پیک شناساییشده GPU محاسبه میکند.
نتایج بنچمارک در H100 نتایج برای کرنلهای محدود به حافظه که بر روی یک پردازنده گرافیکی NVIDIA H100. 80GB HBM3 (132 sms،.
قابلیت محاسبه 9. 0، CUDA 12.
8) در برابر PyTorch eager و torch. compile با حداکثر خودکار اندازهگیری شدهاند، قابل توجه هستند.
RMSNorm به 5. 29× over eager و 2.
83× بیش از torch. compile در بزرگترین اندازه آزمایش شده دست می یابد و به 2788 گیگابایت در ثانیه می رسد —.
83 درصد از پهنای باند اوج 3352 گیگابایت بر ثانیه H100. Softmax به 2800 گیگابایت بر ثانیه با سرعت 2.
82× بیش از eager و 3. 44× بیش از torch.
compile می رسد. کراس آنتروپی به 2.
21× بیش از مشتاق و 2. 94× نسبت به torch.
compile می رسد و به 2070 گیگابایت بر ثانیه می رسد. دستاوردهای این هستهها از ادغام تجزیههای ATen چند عملیاتی به هستههای تریتون تک گذری حاصل میشود که ترافیک.
HBM (حافظه با پهنای باند بالا) را به حداقل میرساند. AutoKernel در 12 مورد از 16 پیکربندی نماینده محک زده شده در مقاله از torch.
compile بهتر عمل میکند، علیرغم اینکه torch. compile با max-autotune تنظیم خودکار Triton خود را اجرا میکند.
ترکیب عمومی و تنظیم خودکار TorchInductor همیشه استراتژیهای تخصصی کاشی کاری و کاهشی را که پیادهسازیهای خاص هسته. از آن بهرهبرداری میکنند،.
پیدا نمیکند. Matmul بهطور قابل توجهی سخت تر است - cuBLAS backend PyTorch بهطور گسترده بر اساس معماری GPU تنظیم.
شده است. استارتر تریتون به 278 TFLOPS می رسد، بسیار کمتر از cuBLAS.
با این حال، در اندازه 2048³، AutoKernel 1. 55× torch.
compile را شکست میدهد، که نشان میدهد تنظیم خودکار matmul TorchInductor نیز همیشه بهینه نیست. بستن شکاف cuBLAS هدف اصلی برای ادامه تکرار عامل باقی می ماند.
در استقرار جامعه، یک هسته بهینه شده توسط AutoKernel با تاخیر 44. 086 میکروثانیه در تابلوی امتیازات vectorsum_v2 B200 مقام اول را به خود اختصاص داد و از ورودی رتبه.
دوم با 44. 249 µs و مقام سوم با 46.
553 µs عملکرد بهتری داشت. یکی از کاربران جامعه همچنین گزارش داد که یک فرمان AutoKernel - که به تقریبی سه دقیقه تعامل.
عامل نیاز دارد - یک هسته ضرب ماتریس Triton FP4 را تولید کرد که در H100 در چندین. شکل از CUTLASS 1.
63× تا 2. 15× بهتر عمل کرد.
CUTLASS کد قالب C++ را بهینه سازی شده با دست نشان میدهد که بهطور خاص برای هسته. های تانسور NVIDIA طراحی شده است و این نتیجه را به ویژه قابل توجه میکند.
خوراکی های کلیدی AutoKernel هفته ها تنظیم GPU متخصص را به یک فرآیند مستقل یک شبه تبدیل می. کند.
با مکانیزه کردن حلقه نوشتن معیار-نگهداری/بازگشت که مهندسان هسته خبره از قبل دنبال میکنند،. این سیستم 300 تا 400 آزمایش را در هر جلسه شبانه روی یک GPU واحد بدون دخالت انسانی.
اجرا میکند. قبل از ثبت هر گونه افزایش سرعت، صحت قابل مذاکره نیست.
هر هسته کاندیدا باید یک مهار پنج مرحلهای را پشت سر بگذارد که تستهای دود را پوشش میدهد،. شکلها را در بیش از 10 پیکربندی،.
ثبات عددی تحت ورودیهای متخاصم،. تأیید قطعیت،.
و موارد غیر قدرت دو لبه را پشت سر بگذارد - خطر "بهینهسازی" عامل راه خود را برای. خروجیهای نادرست از بین میبرد.
هستههای محدود به حافظه بیشترین دستاوردها را نسبت به PyTorch eager و torch. compile دارند.
در NVIDIA H100، هستههای Triton AutoKernel به 5. 29× بیش از حد اشتیاق در RMSNorm، 2.
82× در softmax و 2. 21× در کراس آنتروپی دست مییابند – با دستاوردهای حاصل از ادغام تجزیههای چند عملیاتی ATen به کرنلهای.
تک گذری HBM که به حداقل میرساند. قانون امدال هدایت میکند که عامل وقت خود را به کجا می گذراند.
بهجای بهینهسازی هستهها به صورت مجزا،. AutoKernel کل مدل PyTorch را نمایه میکند و تلاش را متناسب با سهم هر هسته از کل زمان.
اجرای GPU تخصیص میدهد - تضمین میکند که بهبودها در سطح مدل،. نه فقط در سطح هسته،.
ترکیب میشوند. کاغذ و مخزن را بررسی کنید.
همچنین،. راحت ما را در توییتر دنبال کنید و فراموش نکنید که به ML SubReddit 120k+ ما بپیوندید و.
در خبرنامه ما مشترک شوید. صبر کن تو تلگرام هستی اکنون میتوانید در تلگرام نیز به ما بپیوندید.
آیا برای تبلیغ GitHub Repo یا Hugging Face Page یا انتشار محصول یا وبینار و غیره با ما. نیاز دارید؟
با ما ارتباط برقرار کنید پست RightNow AI AutoKernel را منتشر میکند:. یک چارچوب منبعباز که یک حلقه عامل مستقل را برای بهینه سازی هسته GPU برای مدلهای.
PyTorch دلخواه اعمال میکند اولین بار در MarkTechPost ظاهر شد.
چرا مهم است
اهمیت این خبر در این است که روی استفاده واقعی از AI و تصمیمگیری سازمانی اثر میگذارد.
منبع
لینک منبع اصلی در کارت و صفحه مقاله نمایش داده میشود.
