کاهش دقت وزن مدل میتواند باعث شود شبکههای عصبی عمیق در حافظه GPU کمتر سریعتر اجرا شوند و در عین حال دقت مدل حفظ شود.
اگر نمونه برجسته ای از یک تکنیک ضد شهودی وجود داشته باشد، آن کوانتیزه کردن شبکه های عصبی خواهد بود. کوانتیزاسیون دقت وزن ها و سایر تانسورها را در مدل های شبکه عصبی اغلب به شدت کاهش می دهد. جای تعجب نیست که کاهش دقت وزن ها و سایر پارامترها از مثلاً اعداد ۳۲ بیتی شناور به اعداد صحیح ۸ بیتی، باعث می شود مدل سریعتر کار کند و به آن اجازه می دهد در پردازنده های کم قدرت با حافظه بسیار کمتر اجرا شود. یافته خیره کننده و غیر شهودی این است که کوانتیزه کردن را می توان در حالی که تا حد زیادی دقت مدل را حفظ کرد انجام داد.
چرا به کوانتیزاسیون نیاز داریم؟ مدل های زبان بزرگ (LLM) کنونی بسیار زیاد است. بهترین مدلها باید روی دستهای از پردازندههای گرافیکی کلاس سرور اجرا شوند. روزهایی که میتوانستید یک مدل پیشرفته را به صورت محلی روی یک GPU اجرا کنید و به نتایج سریع برسید، گذشته است. Quantization نه تنها اجرای یک LLM را روی یک GPU ممکن میسازد، بلکه به شما امکان میدهد آن را روی یک CPU یا یک دستگاه لبه اجرا کنید.
کوانتیزاسیون پس از آموزش
کوانتیزهسازی پس از آموزش یک تکنیک تبدیلی است که میتواند اندازه مدل را کاهش دهد و در عین حال تاخیر CPU و شتابدهنده سختافزار را با کاهش کمی در دقت مدل بهبود بخشد.
با توجه به اینکه TensorFlow Lite چقدر بالغ در مقایسه با مدل Gen AI du jour (احتمالا Codestral هوش مصنوعی Mistral< /a>، که روزی که من این را نوشتم منتشر شد)، ارزش این را دارد که ببینیم چگونه TensorFlow Lite کوانتیزاسیون را پیادهسازی میکند. اول از همه، TensorFlow Lite سه گزینه را برای کوانتیزاسیون پیادهسازی میکند:
تکنیک |
مزایا |
سخت افزار |
کوانتیزه کردن دامنه پویا |
۴ برابر کوچکتر، ۲ برابر تا ۳ برابر افزایش سرعت |
CPU |
کوانتیزه کردن عدد صحیح کامل |
۴ برابر کوچکتر، ۳ برابر افزایش سرعت |
CPU، Edge TPU، میکروکنترلرها |
کوانتیزاسیون Float16 |
دو برابر کوچکتر، شتاب GPU |
CPU، GPU |
تکنیک
مزایا
سخت افزار
کوانتیزه کردن دامنه پویا
۴ برابر کوچکتر، ۲ برابر تا ۳ برابر افزایش سرعت
CPU
کوانتیزه کردن عدد صحیح کامل
۴ برابر کوچکتر، ۳ برابر افزایش سرعت
CPU، Edge TPU، میکروکنترلرها
کوانتیزاسیون Float16
دو برابر کوچکتر، شتاب GPU
CPU، GPU
در درخت تصمیم که همراه این جدول است، مستندسازان TensorFlow Lite ملاحظات انتخاب یک تکنیک کوانتیزاسیون را تشریح میکنند. ارزش خواندن از طریق منطق را دارد. به طور خلاصه، بهترین روش پس از کوانتیزه کردن برای موارد استفاده شما به پشتیبانی سخت افزاری شما برای عملیات اعداد صحیح یا ممیز شناور و اینکه آیا می توانید یک مجموعه داده نماینده برای کالیبراسیون ارائه دهید بستگی دارد.
کوانتیزه کردن دامنه پویا
سپس توضیح میدهند که چرا کوانتیزهسازی محدوده دینامیکی نقطه شروع معمول است: استفاده از حافظه کاهش یافته و محاسبات سریعتر را بدون نیاز به ارائه مجموعه دادههای نماینده برای کالیبراسیون فراهم میکند. کوانتیزاسیون محدوده دینامیکی به صورت ایستا فقط وزن ها را از نقطه شناور به عدد صحیح در زمان تبدیل کوانتیزه می کند، که ۸ بیت دقت را ارائه می دهد. بعلاوه، عملگرهای “محدوده پویا” به صورت پویا فعال سازی ها را بر اساس محدوده آنها تا ۸ بیت کوانته می کنند و محاسبات را با وزن ها و فعال سازی های ۸ بیتی انجام می دهند. خروجی ها همچنان به عنوان مقادیر ممیز شناور ذخیره می شوند.
کوانتیزه کردن عدد صحیح کامل
کوانتیزه کردن اعداد صحیح کامل میتواند سرعت کارها را حتی بیشتر از کوانتیزهسازی محدوده دینامیکی افزایش دهد، اما باید یک مجموعه داده نماینده برای کالیبراسیون (معمولاً چند صد نمونه) ارائه کنید و چند چرخه استنتاج را اجرا کنید تا بتوانید دامنه همه موارد را ضبط کنید. تانسورهای ممیز شناور در مدل. آنها نه تنها وزنها و بایاسهای مدل، بلکه ورودی مدل، فعالسازیها (خروجیهای لایههای میانی) و خروجی مدل را نیز شامل میشوند. کوانتیزه کردن اعداد صحیح اساساً در دستگاههای فقط اعداد صحیح مانند میکروکنترلرهای ۸ بیتی و شتابدهندههای فقط عدد صحیح مانند Coral Edge TPU الزامی است.
کوانتیزه کردن
Float16
کوانتیزاسیون Float16 اندازه مدل را تا نصف کاهش میدهد، زیرا همه وزنها به نصف اندازه اصلی خود تبدیل میشوند و باعث حداقل کاهش دقت میشوند. همچنین از برخی «نمایندگان» (یعنی شتابدهندههای روی دستگاه مانند GPU) پشتیبانی میکند که میتوانند مستقیماً روی دادههای float16 کار کنند. در سمت پایین، کوانتیزه کردن float16 به اندازه کوانتیزاسیون به ریاضیات نقطه ثابت تاخیر را کاهش نمی دهد. علاوه بر این، یک مدل کوانتیزه شده float16 مقادیر وزن را در هنگام اجرا بر روی CPU به float32 کاهش می دهد، که دلیل خوبی برای استفاده از نماینده GPU به جای آن، همراه با افزایش سرعت استفاده از GPU است.
کوانتیزاسیون و دقت مدل
همانطور که ممکن است انتظار داشته باشید، هنگام کمی کردن یک مدل، دقت ممکن است مشکل باشد. شما می توانید دقت یک مدل کوانتیزه شده را در مقابل مدل اصلی ارزیابی کنید و تصمیم بگیرید که آیا مدل کوانتیزه شده به اندازه کافی برای اهداف شما دقیق است یا خیر. برای مثال، TensorFlow Lite سه فایل اجرایی را برای بررسی صحت مدل های کوانتیزه. همچنین میتوانید MQBench را در نظر بگیرید، معیار و چارچوبی برای ارزیابی الگوریتمهای کوانتیزهسازی تحت استقرار سختافزار در دنیای واقعی که از < a>PyTorch.
اگر کاهش دقت ناشی از کمی سازی پس از آموزش بسیار زیاد است، یکی از گزینه های جایگزین استفاده از آموزش آگاهی از کوانتیزاسیون.
آموزش آگاهی از کوانتیزاسیون
آموزش کمیسازی آگاهی (QAT) در طول تأثیرات کوانتیسازی مدلسازی میکند آموزش یا تنظیم دقیق، و مدلی با وزنهای float32 تولید میکند که سپس میتواند به وزنها و فعالسازیهای عدد صحیح کوانتیزه شود. مدل کوانتیزهشده حاصل معمولاً دقیقتر از مدلی است که توسط کوانتیزهسازی پس از آموزش (PTQ) بدون در نظر گرفتن کوانتیزهسازی در طول آموزش تولید میشود.
یک راه سریع برای درک چگونگی و چرایی عملکرد QAT این است که به زمان محاسبه محدوده فعال سازی نگاه کنید. برای کوانتیزهسازی پویا پس از آموزش، محدوده هر فعالسازی در زمان اجرا محاسبه میشود. برای کوانتیزهسازی استاتیک پس از آموزش (که در بالا کوانتیزاسیون اعداد صحیح کامل نامیده میشود)، محدوده هر فعالسازی از قبل در زمان کوانتیزهسازی محاسبه میشود و با استفاده از ناظران برای ثبت مقادیر فعالسازیها. برای آموزش آگاهی از کوانتیشن، محدوده هر فعالسازی در زمان آموزش محاسبه میشود، که از همان ایده کمیسازی استاتیک پس از آموزش پیروی میکند. پیچ و تاب این است که در QAT از عملگرهای “کوانتیز جعلی” به جای مشاهده گرها استفاده می شود، نه تنها برای ثبت مقادیر، بلکه برای شبیه سازی خطای ناشی از کوانتیزه کردن، به طوری که مدل بتواند با آن سازگار شود.
LLMهای ۱ بیتی
نقطه پایانی آشکار روند کوانتیزاسیون یک reductio ad absurdum است: کوانتیزاسیون ۱ بیتی. با کمال تعجب، مدلهای کوانتیزه یک بیتی (معرفی شده در کاغذ BitNet) واقعاً کار میکنند، و مدل های ۱.۵۸ بیتی (این کسری از بیت را به صورت لحظه ای توضیح می دهیم) حتی بهتر هستند. هر دو نوع مدل توسط گروهی از تحقیقات مایکروسافت و آکادمی علوم چین توسعه داده شدند.
اول، مدل های کوانتیزه ۱ بیتی. مبادا تصور اشتباهی داشته باشید، نه، مدل های ترانسفورماتور ۱ بیتی بیت نت همه را کاهش نمی دهد تانسورها در مدل به ۱ بیت خواه ناخواه. وزنها و فقط وزنها، پس از متمرکز شدن به میانگین صفر، به ۱- یا ۱ دوتایی میشوند و سپس وزنهای دوتاییشده برای کاهش خطای ایجاد شده توسط باینریسازی مقیاسبندی میشوند.
فعالسازیها به دقت b بیت (کاغذ اصلی از دقت ۸ بیت استفاده میکرد) پس از کمی مقیاسگذاری و برش کوانتیزه میشوند. این مدل برای استفاده از لایههای BitLinear به جای لایههای nn.Linear اصلاح شده است و یک تابع LayerNorm به ورودی هر لایه BitLinear اعمال میشود. به عبارت دیگر، کار زیادی ادامه مییابد تا مدلهای کوانتیزه ۱ بیتی از نظر دقت با مدلهای اصلی رقابت کنند، در حالی که بسیار کوچکتر و سریعتر هستند.
حالا، در مورد آن عدد ۱.۵۸ بیتی. مقاله عصر LLMهای ۱ بیتی: همه مدلهای زبان بزرگ هستند در ۱.۵۸ بیت یک نوع LLM 1 بیتی به نام BitNet b1.58 را معرفی می کند که در آن هر وزن LLM سه تایی است {-۱، ۰، ۱}. نویسندگان می گویند که ۱.۵۸ بیت است، اما آنها محاسبه خود را نشان نمی دهند.
طبق مقاله، BitNet b1.58 با ترانسفورماتور LLM با دقت کامل (یعنی FP16 یا BF16) با اندازه مدل و توکن های آموزشی یکسان از نظر گیجی و عملکرد نهایی مطابقت دارد، در حالی که به طور قابل توجهی بیشتر است. از نظر تأخیر، حافظه، توان عملیاتی و مصرف انرژی مقرون به صرفه است.» نویسندگان ادامه می دهند که “این یک الگوی محاسباتی جدید را فعال می کند و در را برای طراحی سخت افزار خاص بهینه سازی شده برای LLM های ۱ بیتی باز می کند.”
معماری BitNet b1.58 با BitNet شروع میشود، اما از یک تابع کوانتیزاسیون متفاوت برای رسیدن به نمایش وزن سهگانه استفاده میکند، و از مقیاسبندی فعالسازی در محدوده [−Qb,Qb] در هر توکن بهجای محدوده [۰، استفاده میکند. Qb]. برای سازگاری بیشتر با مدلهای نوع LLaMA، BitNet b1.58 RMSNorm، SwiGLU، و جاسازی چرخشی را اضافه میکند.
نویسندگان BitNet b1.58 را با یک FP16 LLaMA LLM بازتولید شده در اندازههای مختلف مقایسه کردند که از ابتدا در آموزش داده شده بود. مجموعه داده RedPajama برای ۱۰۰ میلیارد توکن. نتیجه گیری آنها این بود که “BitNet b1.58 شروع به مطابقت با LLaMA LLM با دقت کامل در اندازه مدل ۳B از نظر گیجی می کند، در حالی که ۲.۷۱ برابر سریعتر است و ۳.۵۵ برابر کمتر از حافظه GPU استفاده می کند. به طور خاص، BitNet b1.58 با اندازه مدل ۳.۹B 2.4 برابر سریعتر است، ۳.۳۲ برابر حافظه کمتری مصرف می کند، اما عملکرد قابل توجهی بهتر از LLaMA LLM 3B دارد.”
LLMهای کوچکتر و سریعتر
همانطور که دیدیم، کوانتیزه کردن میتواند به حل برخی از بزرگترین مشکلات مدلهای زبانی بزرگ کمک کند: LLMها برای اجرای سختافزار معمولی بسیار بزرگ و کند هستند، در عوض به خوشههایی از پردازندههای گرافیکی در فضای ابری نیاز دارند. تکنیکهای کوانتیزهسازی مختلف به درجات مختلفی کمک میکنند، اما مدلهای هیجانانگیز و غیرمنتظره «یک بیتی» (به معنای کوانتیزهسازیهای دودویی ۱ بیتی و سه تایی ۱.۵۸ بیتی) شروع به شکستن لگجم از اندازههای مدل در حال افزایش کردهاند.
پست های مرتبط
کوانتیزاسیون مدل چیست؟ LLMهای کوچکتر و سریعتر
کوانتیزاسیون مدل چیست؟ LLMهای کوچکتر و سریعتر
کوانتیزاسیون مدل چیست؟ LLMهای کوچکتر و سریعتر