Qwenputer: یک CPU RISC-V با عملکرد و قطعی در داخل Qwen3.5
آدرس مقاله: https://divagr.com/blog/qwenputer آدرس نظرات: https://news.ycombinator.com/item?id=50282838 امتیاز: 335 # نظرات: 76
Qwenputer یک مدل تجربی بسیار سرگرم کننده است. این یک Qwen 3.5 4B است که با یک اضافه شده: یک CPU RISC-V تعبیه شده در وزن ها که از لایه های توجه Gated DeltaNet خود مدل به عنوان RAM استفاده می کند. (برای یادگیری نحوه کار GDN، در اینجا یک راهنمای مفید وجود دارد.) این 'CPU' به طور کامل در مسیرهای عبور مدل اجرا می شود و می تواند عملیات حسابی، کدهای C و MicroPython را بدون هیچ گونه زمان اجرا خارجی یا استفاده از ابزار اجرا کند.
برای اینکه خیلی واضح باشد، این یک افزونه، یک ابزار یا یک جعبه شنی نیست. این وبلاگ دقیقا نحوه عملکرد این مدل و نحوه استفاده مدل از لایههای GDN به عنوان RAM را توضیح میدهد و من چگونه در یک ذخیرهسازی آزمایشی فایل درون مدل شکاف دادهام.
من همچنین دو مورد بعدی را که بر روی Qwenputer ساخته شده بود نوشتم: اینکه چگونه مدل های ترکیبی می توانند یاد بگیرند که استدلال خود را در وضعیت RNN خود پنهان کنند و از نظارت CoT فرار کنند، و اینکه چگونه وزن های کامپایل شده مانند این می توانند به عنوان ابزار نظارت داخلی کار کنند که خود مدل نمی تواند آنها را دستکاری کند.
می توانید Qwenputer را از Hugging Face یا ModelScope بگیرید و کد در GitHub است.
Qwen3-Next و Qwen 3.5 (مدل Qwenputer بر روی آن ساخته شده است) از یک ترفند بسیار منظم استفاده می کنند. 3 از 4 لایه توجه در مدل از Gated DeltaNet، یک RNN خطی، به عنوان مکانیزم توجه استفاده میکنند (در اینجا بیشتر در مورد آن توضیح میدهیم). هر سر یک ماتریس حالت نگه می دارد و قانون دلتا این را به روز نگه می دارد.
اکنون، اینجاست که آزمایش سرگرم کننده ما شروع می شود. من متوجه شدم که با تنظیم گیت روی 1، 1 1 هر هد Gated DeltaNet یک ماتریس حالت، حافظه خود را نگه می دارد. در هر توکن، قبل از نوشتن هر توکن، کل حالت را در دروازه ضرب میکند، عددی بین 0 و 1. اینگونه است که RNN فراموش میکند: یک گیت 0.9 هر چیزی را که روی هر توکن ذخیره میشود کمی محو میکند، و گیت 1 به معنای محو شدن چیزی نیست. قدرت نوشتن (بتا) به 1، 2 2 بعد از دروازه، هد یک جهت از حالت را به سمت یک مقدار جدید هدایت می کند، و بتا قدرت نوشتن تعیین می کند که چقدر فاصله دارد.
بتا 1 به این معنی است که مقدار قدیمی در آن جهت به جای ترکیب شدن، به طور کامل جایگزین می شود. و با استفاده از رمزگذاری یک کلید داغ، 3 3 یک کلید داغ یک بردار صفر با یک 1 در آن است، بنابراین دقیقا به یک ردیف از وضعیت اشاره می کند، همانطور که آدرس حافظه به یک سلول اشاره می کند. هر نوشتنی که انجام میدهیم دقیقا یک سطر را بازنویسی میکند و هر پرس و جوی داغ میتواند یک مقدار دقیق را بازیابی کند.
این بدان معناست که لایههای GDN میتوانند دقیقا مانند RAM کار کنند، با هزینه بسیار کمتری نسبت به استفاده از توجه معمولی به عنوان RAM، زیرا وضعیت سر GDN برخلاف حافظه پنهان KV توجه، هر چقدر مکالمه طول بکشد به همان اندازه باقی میماند.
این ایده که قانون دلتا به عنوان یک حافظه عمل می کند جدید نیست: Schlag et al. (2021) نشان داد که توجه خطی با قاعده دلتا به عنوان یک حافظه انجمنی یا "وزن های سریع" عمل می کند. Imanol Schlag، Kazuki Irie و Jürgen Schmidhuber، "Transformers Linear Are Secretly Fast Weight Programmers"، ICML 2021. نکته جدید در اینجا دقیق و آدرس پذیر کردن آن در داخل یک مدل تولیدی است که به اندازه کافی قابل اعتماد برای اجرای یک CPU کامل بر روی آن است.
این پایه ای است که کل این مدل بر روی آن ساخته شده است. همانطور که مطرح می شود، پیش فرض Qwen 3.5 مقادیر دقیقی را در GDN نگه نمی دارد. با این اصلاح قفل قسمت بعدی این آزمایش را باز می کنیم.
از آنجایی که ما اکنون یک رم کاملا کاربردی، ارزان و سریع داریم، میتوانیم با کامپایل یک CPU در وزنهای مدل پیش برویم. خوشبختانه، هیچ آموزشی در کار نیست: یک کامپایلر هر وزن را مستقیما تنظیم می کند. شما CPU را به عنوان یک مدار توصیف میکنید، فهرستی طولانی از گامهای کوچک مانند «این ثبت را بخوانید»، «این دو عدد را اضافه کنید» یا «در صورت صفر بپرید»، و کامپایلر هر مرحله را به تکهای از یک لایه ترانسفورماتور تبدیل میکند: هدهای توجه که به چیزها نگاه میکنند، واحدهای پیشخور که محاسبات را انجام میدهند و هدهای DeltaNet که رم را نگه میدارند. سپس CPU همزمان با رمزگشایی مدل اجرا می شود.
هر دستور به چند توکن تولید شده تبدیل میشود: یکی ردیف حافظه را برای نوشتن نام میبرد (ADDR)، دستور بعدی مقدار (VAL) را حمل میکند و یک نشانه STEP دستورالعمل را پایان میدهد. این توکنها ردیابی اجرای CPU هستند، بنابراین در حالی که Qwen آنها را تولید میکند، CPU در واقع در حال اجرا است.
CPU یک هسته RISC-V 32 بیتی است (RV32IM، به علاوه پسوند Zba و یک واحد bignum کوچک برای محاسبات اعداد بزرگ)، و 11 لایه در مقابل 32 Qwen اشغال می کند. همانطور که ایستاده است، تست های رسمی riscv را سپری می کند، برنامه های آن بدون یک میلیون دستورالعمل اجرا شده است. 5 5 اجرای آزاد به این معنی است که CPU در تمام طول اجرا به خروجی های خود ادامه می دهد، بدون اینکه ماشین مرجعی آن را بین مراحل تصحیح کند.
این CPU همچنین می تواند کدهای C و MicroPython را در گذرهای جلو به خوبی اجرا کند (البته کمی کند). هنوز یک تراشه کلاس لینوکس نیست، اما مجموعه دستورالعمل کامل RV32IM را پیاده سازی می کند.
Qwen 3.5 4B قادر است به خوبی از این CPU استفاده کند، بدون اینکه نیازی به آموزش باشد. CPU کاملا داخلی استفاده می شود و از طریق هیچ ابزار خارجی فراخوانی نمی شود.
برای اینکه مدل به طور قابل اعتماد از آن استفاده کند، تصمیم گرفتم راه ارزانی را انتخاب کنم: با استفاده از فرمت فراخوانی ابزار که مدل ها کاملا در آن آموزش دیده اند، Qwen دستورالعمل های خود را برای CPU ارسال می کند و نتایج را بازخوانی می کند. هیچ تماس ابزار خارجی یا زمان اجرا استفاده نمی شود. هنگامی که CPU ما دستورالعمل ها را دریافت کرد، لایه های کامپیوتر اجرا می شوند و سپس پاسخ ابزار را می نویسند. ما از یک درایور کوچک به نام RvChat برای بارگذاری سیستم عامل در حالت GDN استفاده می کنیم و این باعث می شود نشانه های ردیابی از لایه های Qwen خارج شوند.
وزنه های اصلی Qwen دقیقا همانطور که هستند باقی می مانند. وزنه های کامپیوتر در بالای آن ها به صورت تیره و لایه اضافی اضافه می شوند.
من فکر میکنم سوال اصلی در اینجا پس از خواندن فحاشیهای بیوقفه من در ذهن شما این خواهد بود: آیا این واقعا کار میکند؟
در محاسبات اعداد صحیح طولانی NUPA، Qwenputer از 48.6% به 100% می رسد، درست مانند دادن ابزار Python به Qwen.
اعدادی که CPU چاپ می کند نیز دقیق هستند: من حدود 230000 موقعیت خروجی آن را در مقابل یک ماشین مرجع پخش کردم و عدم تطابق را پیدا کردم. و پیچ کردن کامپیوتر روی Qwen نحوه صحبت کردن آن را تغییر نمیدهد: متن عادی آن در نویز پایه Qwen باقی میماند (KL 6e-4، در برابر نویز 5e-4).
از آنجایی که یک CPU داخل یک مدل زبان به وضوح به اندازه کافی مورد نفرین قرار نگرفت، تصمیم گرفتم عاقلانه به آن یک سیستم فایل نیز بدهم.
از آنجایی که ما در حال حاضر یک رم کاربردی داریم، این بیشتر بی اهمیت بود. در سمت مدل، از طریق عملیات داخلی قرار دادن / پیوست / دریافت / لیست / حذف در معرض دید قرار می گیرد. بار دیگر، هیچ ابزار واقعی تماس نمی گیرد. وقتی Qwen یک فایل را ذخیره میکند، لایههای کامپایل شده نام آن را در یکی از 1024 اسلات موجود در فهرستی که در حالت DeltaNet نگهداری میشود، هش میکنند و خود متن را در سرهای دیگر، با هشت توکن در هر ردیف، به صورت زنجیر شده ذخیره میکنند. در سناریوهایی که در نهایت دو نام در یک اسلات قرار می گیرند، فقط نام بعدی را بررسی می کند.
یافتن مجدد یک فایل به جای اسکن تقریبا دو یا سه مرحله طول می کشد و تا 512 فایل را در خود نگه می دارد که به حدود 53000 توکن متن می رسد.
نکته جالب این است که این کاملا مداوم است. میتوانید وضعیت را در پایان مکالمه ذخیره کنید، آن را در مکالمه بعدی بارگیری کنید، و فایلها هنوز آنجا هستند. با استفاده از این فایل سیستم، Qwen حقایقی را دریافت میکند که در 90 درصد مواقع بین چتها تغییر میکنند، در مقابل 30 درصد زمانی که چتهای قدیمی را دوباره در آن قرار میدهید، و با ارائه ابزارهای حافظه Qwen که توسط پایتون اجرا میشوند (83.3 درصد در مقابل 78.9 درصد) برابری میکند. این یکی هنوز آزمایشی است و کد آن در شعبه فروشگاه rv با مدل Hugging Face و ModelScope موجود است.
Qwenputer بسیار آزمایش است، بنابراین چند محدودیت. لایههای اضافی و اندازه مخفی گستردهتر، ایست بازرسی 18.8 گیگابایتی، تقریبا دو پایه Qwen را ایجاد میکند، اگرچه بیشتر آن دارای لایه صفر است. همچنین به یک درایور کوچک (RvChat) برای بوت کردن سفتافزار و نگه داشتن نشانههای ردیابی از لایههای Qwen نیاز دارد، بنابراین هنوز با یک فراخوانی ساده ()generator اجرا نمیشود. و کمی کند است، با هر دستورالعمل CPU چند توکن رمزگشایی شده هزینه دارد، بنابراین یک محاسبه بزرگ به جای میلی ثانیه چند ثانیه طول می کشد. مجری دستهای که برای بنچمارکها استفاده کردم حدود 3200 توکن CPU در ثانیه روی L4 اجرا میکند.
در مرحله بعد، من میخواهم Qwen پایتون را بنویسد و آن را روی MicroPython در وزنهای خودش اجرا کند، از طریق ابزار python() که به همان روش calc کار میکند. سریعتر کردن CPU یکی دیگر از موارد مهم است.
کنترل دقیق بر روی لایه های RNN برای خیلی بیشتر از محاسبات مفید است. همچنین Qwenputer را به یک بستر آزمایشی واقعا خوب برای تحقیقات ایمنی هوش مصنوعی تبدیل میکند، و من دو مورد بعدی را نوشتم: چگونه مدلهای ترکیبی مانند Qwen 3.5 میتوانند یاد بگیرند که استدلال خود را در وضعیت RNN خود پنهان کنند و از نظارت CoT فرار کنند، و اینکه وزنهای کامپایلشده چگونه میتوانند به عنوان ابزار نظارتپذیری کار کنند، مانند یک مانیتور وزنی که مدل نمیتواند قابلیت تفسیر را خاموش کند یا کلید را نمیتواند پاسخ دهد.
اگر میخواهید خودتان با آن بازی کنید، این مدل روی یک پردازنده گرافیکی 24 گیگابایتی اجرا میشود. شما به UV و Hugging Face CLI نیاز دارید. برای محاسبات به سرور ابزار یا جعبه شنی پایتون نیاز ندارید: CPU آنها را در داخل مدل اجرا می کند.
همه چیز باز است: کد در GitHub، و هر دو مدل در Hugging Face (Qwenputer، Filesystem) و ModelScope (Qwenputer، Filesystem).
اگر از آن در کار خود استفاده می کنید، می توانید آن را به صورت زیر ذکر کنید:
متن اصلی (انگلیسی)
Qwenputer: A functioning, deterministic RISC-V CPU inside Qwen3.5
Article URL: https://divagr.com/blog/qwenputer Comments URL: https://news.ycombinator.com/item?id=50282838 Points: 335 # Comments: 76