پیشنهاد اجرای بخشی از expert‌های خارج از cache روی CPU در llama.cpp

چرا مهم است

اگر model‌های MoE را اجرا می‌کنی، این پیشنهاد به تقسیم کار میان CPU و cache مربوط است. نمونه‌های منتشرشده نشان می‌دهند افزایش سهم CPU بسته به اندازهٔ cache می‌تواند سرعت decode را افزایش یا کاهش دهد.

قبل از خواندن، این‌ها را بدان۴ مفهوم
cache

فضایی برای نگهداری داده‌هایی که قرار است دوباره استفاده شوند، تا نیاز به دریافت مجدد آن‌ها از محل اصلی کمتر شود.

بیشتر: cache

MoE

نوعی معماری model با چند بخش تخصصی به نام expert که برای پردازش هر ورودی، بخشی از آن‌ها انتخاب می‌شوند.

در حال نگارش: MoE

decode

مرحله‌ای از تولید متن که model در آن token‌های بعدی را به‌صورت پی‌درپی تولید می‌کند.

در حال نگارش: decode

Code Review

بررسی تغییرات پیشنهادی در code برای شناسایی اشکال‌ها، کمبود آزمون و مسائل طراحی، پیش از پذیرفتن تغییرات.

در حال نگارش: Code Review

یک pull request در llama.cpp پیشنهاد می‌کند بخشی از expert‌های MoE که در cache موجود نیستند، روی CPU اجرا شوند. میزان این کار با گزینهٔ --moe-cache-cpu-share تعیین می‌شود. نویسنده توضیح می‌دهد که اثر این تغییر بر سرعت decode به سرعت خواندن expert‌ها توسط CPU وابسته است؛ بنابراین نتیجه برای همهٔ دستگاه‌ها یکسان نیست.

این پیشنهاد همچنین script تازه‌ای با نام scripts/moe-cache-tune.py دارد که برای یافتن تنظیم مناسب دو گزینهٔ --moe-cache-mib و --moe-cache-cpu-share روی دستگاه اجرا می‌شود. روش استفاده، قرار دادن اجرای script پیش از فرمان llama-server است. در نمونهٔ ارائه‌شده، script شش بار server را اجرا می‌کند؛ اجرای اول ۴۰۹۶ token و اجراهای بعدی هرکدام ۱۰۲۴ token تولید می‌کنند. model نیز یک بار خوانده می‌شود تا هر اجرا دوباره آن را از دیسک نخواند.

نتایج نمونه نشان می‌دهند افزایش سهم CPU لزوماً سرعت را بیشتر نمی‌کند. با cache برابر با ۶۴۶۴ MiB،؜ تغییر سهم CPU از صفر به ۰٫۹۵، سرعت ثبت‌شده را از ۲۴٫۲ به ۴۷٫۶ token در ثانیه رسانده است. اما با cache برابر با ۱۹۳۹۲ MiB،؜ همین تغییر سرعت را از ۶۵٫۵ به ۵۴٫۱ token در ثانیه کاهش داده است. خروجی script علاوه بر اندازه‌گیری‌ها، سرعت را برای ترکیب‌های دیگر با cache گرم پیش‌بینی و یک تنظیم پیشنهاد می‌کند؛ این پیش‌بینی‌ها با اندازه‌گیری مستقیم یکی نیستند.

در گفت‌وگوی pull request،؜ یک مشارکت‌کننده حدود ۱۰ درصد افزایش سرعت decode را روی پیکربندی آزمایش‌شدهٔ خود گزارش کرده است. از سوی دیگر، Code Review خودکار به مواردی مانند یک خطای نادر در script،؜ اعتبارسنجی ورودی NaN و نبود پوشش خودکار برای مسیر سهم CPU اشاره کرده است. متن موجود ادغام این پیشنهاد را تأیید نمی‌کند.

نکته کلیدی

سهم بیشتر CPU را معادل سرعت بیشتر نگیر؛ ترکیب اندازهٔ cache و سهم CPU را روی دستگاه خودت اندازه بگیر. در خروجی script هم نتیجهٔ اندازه‌گیری‌شده را از سرعت پیش‌بینی‌شده برای cache گرم جدا کن.

خواندن مقاله اصلی (در زبانه‌ی جدید باز می‌شود)
برچسب‌ها (۴)