باز کردن قفل GPU: نرخ صدور دستورالعمل FP/BF16 در کارت های Nvidia 3000
آدرس مقاله: https://github.com/Zagitta/gpu-unlock آدرس نظرات: https://news.ycombinator.com/item?id=50219700 امتیاز: 195 # نظرات: 61
باز کردن نرخ صدور دستورالعمل FP/BF16 در کارت های Nvidia 3000 به معادل های حرفه ای آنها
این ماژول هسته لینوکس تکنیک V67/PLM بازکننده CMP را با زمانبندی پیش از درایور رویکرد UEFI ترکیب میکند. باز کردن قفل را اجرا می کند، انتخابگرهای سرعت را می نویسد (SS0 0x88888888، که نرخ کامل BF16 را انتخاب می کند، و SS1 0x8 IMLA4 4 بیتی) و قبل از اینکه درایور NVIDIA اصلاح نشده کارت را ببندد، FLR را انجام می دهد. این نه یک برنامه UEFI است و نه یک درایور اصلاح شده NVIDIA.
مزیت این درایور اولیه kmod این است که هر بار که nvidia نسخه درایور جدیدی را منتشر می کند نیازی به وصله دستی ندارد.
تأثیر این قفل این است که سرعت صدور دستورالعمل FP/BF16 FMA را در عملیات FP32 روی کارت های GA102، GA103، GA104 و GA106 دو برابر می کند.
3090 Ti متراکم 8192³ GEMM در 450 وات، میانه های پنج نمونه با تجمع FP32:
نتایج گزارش شده توسط کاربران ماژول همه شناسههای GeForce فهرست شده در kernel/gpu_unlock/main.c را میپذیرد، اما کارتهای زیر کارتهایی هستند که شخصی در مورد آنها گزارش داده است. لطفا گزارش خود را با یک گزارش سازگاری اضافه کنید، چه کار کرده باشد یا نه.
دستاوردها دارای توان عملیاتی متراکم GEMM از معیار خود هر گزارش است، بنابراین مستقیما قابل مقایسه نیستند. محدودیت توان بسیار مهم است: کمترین رقم (+25٪) مربوط به کارت هایی است که سقف آن 225 وات است.
کار سنگین ماتریسی سرعت میگیرد: پیشپر کردن LLM (+14-36٪ در #9، #15، #25 و #33)، انتشار و توجه Flash. رمزگشایی LLM، که توسط پهنای باند حافظه محدود می شود، و کار INT8 تقریبا یکسان می ماند. گزارشهایی که خروجیها را با هم مقایسه میکنند، آنها را قبل و بعد از آن کمی یکسان نشان میدهند.
گزارشها همچنین حداکثر چهار کارت را در یک دستگاه پوشش میدهند، کارت نمایشگر را هدایت میکند، و کارتهایی را که به VM با vfio-pci ارسال میشود (#17) پوشش میدهد.
سپس gpu_unlock.targets=all را به خط فرمان هسته خود اضافه کنید و گزینه های موجود را حفظ کنید:
هر بیلد ورودیهای NVIDIA/CachyOS پینشده را از طریق HTTPS دانلود میکند، SHA-256 آنها را بررسی میکند و سیستم عامل را فقط در فهرست ساخت و بسته باینری تولید میکند. هر سه فرمت از طریق همان make install-* targets نصب می شوند. بسته ها از HEAD متعهد ساخته می شوند.
وابستگی های ساخت را بسازید، نصب کنید و بسته ها را در یک مرحله نصب کنید (پسورد sudo شما را می خواهد):
نصب از /etc/os-release (ID، سپس ID_LIKE) برای شناسایی خانوادههای Arch، Debian/Ubuntu یا Fedora/RHEL/CentOS استفاده میکند. نصب کننده RPM به DNF نیاز دارد. برای سایر توزیعها، یک هدف صریح سازگار در بالا را انتخاب کنید.
ساخت قوس، deb و ساخت rpm فقط ساخت. بسته های دبیان و RPM به build/deb و build/rpm می روند. ورودیهای NVIDIA در ~/.cache/gpu-unlock/inputs ذخیره میشوند (ورودیها را ایجاد کنید؛ با INPUTS= لغو کنید). خود dpkg-buildpackage هرگز از شبکه استفاده نمیکند، بنابراین یک ساخت chroot تمیز (sbuild یا pbuilder) به GPU_UNLOCK_INPUTS نیاز دارد که به آن کش اشاره کند. آرشیو make dist، بسته منبع دبیان و .nosrc.rpm هیچ بایگانی NVIDIA یا سیستم عامل تولید شده ندارند.
بستهها gpu_unlock و سیستمافزار آن را در initramfs قرار میدهند و قبل از اینکه nvidia بتواند کارتی را متصل کند، آن را بارگذاری میکند:
با initramfs-tools و dracut، ماژول برای هر هسته نصب شده ای که دارای هدر است ساخته می شود و تصاویر آن کرنل ها در هنگام نصب و دوباره در هنگام حذف بازسازی می شوند. هسته های نصب شده بعدا ماژول و یک تصویر جدید را از قلاب های نصب خود هسته دریافت می کنند.
هیچ softdep nvidia pre: قانون وجود ندارد: kmod فقط اولین خط softdep nvidia را که می خواند، مورد احترام قرار می دهد، بنابراین قوانین بسته های دیگر (nvidia-utils، gddr6_hwmon) بی صدا آن را لغو می کند، یا قوانین آنها را لغو می کند.
ماژول هیچ کاری انجام نمی دهد مگر اینکه خط فرمان هسته انتخاب شود:
آدرسها نامهای کامل PCI هستند زیرا lspci -D آنها را چاپ میکند (اعداد هگزا در هر صورت)، مستقل از شمارهگذاری GPU و نقش نمایشگر. ورودی که کارت GA102/GA103/GA104/GA106 نیست، شامل همه آدرسها، ثبت شده و نادیده گرفته میشود. کارتها به طور همزمان باز میشوند، تقریبا یک ثانیه در هر تعداد کارت، و هر کدام به تنهایی: کارتی که قبلا بسته شده یا خاموش شده است، حذف میشود. مسترینگ باس که سیستم عامل برد روشن است (Supermicro X11 این کار را با توجه به تنظیمات ROM و bus master اصلی خود انجام می دهد) ابتدا پاک می شود. کارتی که برخی از درایورها قبلا مقداردهی شده اند هنوز رد می شود.
سپس nvidia طبق معمول هر کارتی را بارگیری و متصل می کند.
کارت نمایش هم کار میکنه فریمبافر فریمور آن (کنسول بوت و پلیموث) تا زمانی که مراحل سیستمافزار باز کردن قفل اجرا میشود، به کار خود ادامه میدهد و درست قبل از تنظیم مجدد کارت حذف میشود، همانطور که nvidia-drm یک لحظه بعد به هر حال انجام میدهد. صفحه نمایش آن از زمان تنظیم مجدد تا زمانی که nvidia-drm کار را به دست نگیرد، خالی است.
بارگیری ماژول با دست پس از بوت شدن هیچ کاری برای کارتی که nvidia بسته است ندارد.
حالت تعلیق به رم کارت ها را خاموش می کند که انتخابگرهای سرعت را بازنشانی می کند. پس از رزومه، ماژول هر کارتی را که در هنگام راهاندازی قفل باز کرده است، دوباره قفل میکند، قبل از اینکه nvidia آن را از سر بگیرد: اعلانکننده suspend آن درست جلوتر از کارتهایی که nvidia کارتهای خود را از آن از سر میگیرد اجرا میشود (NVreg_UseKernelSuspendNotifiers=1، پیشفرض در درایورهای فعلی؛ nvidia-resume later.service اجرا میشود). این حدود یک ثانیه به از سرگیری اضافه می کند. کارتی که برق را نگه می دارد، مانند حالت تعلیق به حالت بیکار، همچنان قفل است و فقط خوانده می شود. کارتی که nvidia قبلا از سر گرفته شده یا به درایور دیگری متصل شده است، به همان شکلی که هست باقی می ماند و گزارش می گوید چرا.
gpu_unlock.resume=0 را به خط فرمان هسته اضافه کنید، یا 0 را در /sys/module/gpu_unlock/parameters/resume بنویسید تا خاموش شود. خواب زمستانی پوشش داده نمی شود.
برای توقف باز کردن قفل، gpu_unlock.targets= را از خط فرمان هسته حذف کنید. برای بوت یکباره، آن را در صفحه ویرایش بوت لودر حذف کنید. با حذف بسته ها، ماژول و drop-ins های initramfs نیز حذف می شوند.
اگر سفتافزار روی کارت هرگز متوقف نشود، ماژول آن را ثبت میکند و بافرهای DMA را که سفتافزار ممکن است استفاده کند تا زمان خاموش شدن بعدی نگه میدارد. قبل از تلاش مجدد خاموش کنید.
ماژول هسته و بسته بندی محلی فقط GPL-2.0 هستند. بار تولید شده از مرجع CMP پین شده مشتق می شود. سیستم عامل NVIDIA تحت شرایط خود باقی می ماند. برای انتساب و اطلاعیه ها به firmware/NOTICE.md و Licenses/ مراجعه کنید.
ETH: 0xf4eee937937f92038D70B16AbD7736D8a53a1c5c
بیت کوین: bc1qwpkwp70fn76z3s4kg2l9y3j4kst95twcznuugf
سول: 8Rih6HY7V4LcdjYHz4iSffT4fTniqw5CACaBigSVxNYu
متن اصلی (انگلیسی)
GPU-unlock: FP/BF16 instruction issue rate on Nvidia 3000's cards
Article URL: https://github.com/Zagitta/gpu-unlock Comments URL: https://news.ycombinator.com/item?id=50219700 Points: 195 # Comments: 61