ساخت Forth interpreter در کنار Nemotron 3.5 Lightning،؜ بدون tool call

چرا مهم است

اگر اجرای محاسبات درون model را دنبال می‌کنی، این پروژه تفاوت دقت ماشین و توانایی model در استفاده از آن را نشان می‌دهد. interpreter با مرجع Python تطابق داشت، اما model برای استفاده مناسب از نتیجه به fine-tuning نیاز پیدا کرد.

قبل از خواندن، این‌ها را بدان۵ مفهوم
fine-tuning

ادامه آموزش یک model ازپیش‌آموزش‌دیده با داده‌های مشخص برای سازگارکردن رفتار آن با وظیفه موردنظر.

بیشتر: fine-tuning

Stack

ساختاری برای نگهداری داده که آخرین ورودی آن، اولین موردی است که برداشته می‌شود؛ می‌توان عددها را روی آن گذاشت و برای اجرای عملگر برداشت.

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

RPN

شیوه‌ای برای نوشتن عبارت‌های محاسباتی که در آن عملگر پس از ورودی‌هایش می‌آید؛ مثلاً برای جمع، ابتدا دو عدد و سپس + نوشته می‌شود.

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

forward pass

عبور ورودی از لایه‌های یک شبکه برای محاسبه خروجی، بدون به‌روزرسانی وزن‌ها در همان مرحله.

در حال نگارش: forward pass

state

اطلاعاتی که یک سیستم بین گام‌های اجرا نگه می‌دارد و در پردازش گام‌های بعدی از آن استفاده می‌کند.

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

نویسنده یک پروژه پژوهشی با الهام از Qwenputer،؜ یک Forth interpreter را درون ساختار model قرار داده تا NVIDIA Nemotron 3.5 Lightning هنگام تولید متن از آن استفاده کند. نسخه اصلی این model با ۳۰ میلیارد parameter و ۳ میلیارد parameter فعال، بدون تغییر باقی مانده است؛ کنار آن شبکه‌ای ۲۷ لایه قرار دارد که وزن‌هایش با یک برنامه Python محاسبه شده‌اند و حاصل آموزش نیستند.

model یک بلوک Forth را به‌شکل متن معمولی می‌نویسد. interpreter هم‌زمان هر کلمه را اجرا می‌کند؛ هر گام به یک forward pass نیاز دارد. با بسته‌شدن بلوک، خروجی به‌عنوان token‌های بعدی model نوشته می‌شود. در این فرایند tool call رخ نمی‌دهد و تولید متن متوقف نمی‌شود.

انتخاب RPN با این طراحی ارتباط دارد: در Forth هر کلمه با فاصله تمام می‌شود و می‌توان آن را بدون بررسی کل برنامه اجرا کرد. همچنین عددها پیش از عملگر می‌آیند؛ بنابراین هنگام نوشته‌شدن «+»، هر دو عدد از قبل روی Stack هستند. خود Stack در state مربوط به Mamba-2 نگهداری می‌شود و هر ورودی آن ظرفیت ۲۰ رقم دارد.

برای حفظ محاسبات دقیق، هیچ مقدار داخلی از ۲۵۶ بالاتر نمی‌رود؛ نویسنده این محدودیت را به دقت نمایش عدد صحیح در bf16 نسبت می‌دهد. مقدار decay در Mamba دقیقاً ۱ است و گام‌های داخلی از ۹۸۲ token رزروشده استفاده می‌کنند که به رشته خالی decode می‌شوند. به‌گفته نویسنده، تمام ۷۶۵٬۷۳۴ token ماشین در آزمایش با مرجع Python مطابقت داشتند.

بااین‌حال، درست‌کارکردن interpreter به‌تنهایی کافی نبود. Lightning گاهی به پاسخ آن اعتماد نمی‌کرد؛ در یک نمونه، پس از دریافت جواب درست، تقسیم طولانی به‌صورت دستی را شروع کرد تا token‌هایش تمام شدند. LoRA fine-tuning بیشتر این مشکل را رفع کرد و امتیاز آزمون کنارگذاشته‌شده ۶۰۰ مسئله‌ای از ۷۹٫۱٪ به ۹۲٫۱٪ رسید.

نتایج مجموعه‌های حساب Qwenputer یکدست نبود: روی مجموعه‌های DeepMind تقریباً با Lightning اصلی برابر بود و برای عددهای بلند، به‌دلیل سقف ۲۰ رقم، از Python عقب ماند. نویسنده تأکید می‌کند این پروژه برای production نیست؛ tool call معمولی بسیار سریع‌تر است. repository با مجوز MIT شامل kernel builder،؜ آزمون‌های تطابق، plugin برای vLLM،؜ دستورالعمل‌های LoRA در NeMo AutoModel،؜ داده‌های آموزش و خروجی‌های NVFP4،؜ GGUF و MLX است.

نکته کلیدی

دقت interpreter را با کیفیت استفاده model از آن یکی نگیر. در این آزمایش، fine-tuning امتیاز را بالا برد، اما هزینه یک forward pass برای هر گام باقی ماند؛ برای کاربرد عملی هم محدودیت ۲۰ رقم و سرعت کمتر از tool call را در نظر بگیر.

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