تولید موازی JSON روی مک، تا ۷ برابر سریعتر
خلاصهٔ کاملتر
parallel constrained decoding یه تکنیک inference هست (یعنی همون مرحلهای که مدل اجرا میشه و جواب میده) و خروجی JSON ساختاریافته رو با ارزیابی همزمان همهٔ فیلدهای schema میسازه، نه توکن پشت توکن. روی فریمورک MLX اپل ساخته شده، روی مکهای Apple Silicon اجرا میشه و با مدل کوانتایزشدهٔ mlx-community/Qwen2.5-1.5B-Instruct-4bit جفت شده.
مشکلی که حل میکنه اینه: تولید ساختاریافتهٔ معمولی، حتی JSON mode یا نمونهبرداری محدودشده با گرامر، هنوز هر توکن رو جدا تولید میکنه و هر توکن یه forward pass کامل لازم داره. یه schema با ۲۸ فیلد ممکنه بیش از ۳۰۰ پاس پشتسرهم بخواد. بیشتر خرابیهای JSON هم دقیقاً از همینجا میان: کلید جاافتاده، براکت خراب، یا فیلدی که مدل از خودش درآورده.
ترفندش اینه که تو استخراج ساختاریافته بیشتر فیلدها متن آزاد نیستن و از یه مجموعهٔ محدود انتخاب میشن، مثل یه enum با لیست ثابت یا یه boolean. پس متن و توضیح schema یک بار تو KV-cache پیشپردازش میشه، همون وضعیت بین همهٔ فیلدها پخش میشه، و برای هر فیلد فقط توکنهای مجاز نگه داشته میشه و بقیهٔ واژگان ماسک میشن. احتمالها هم با یه softmax دقیق فقط روی همون برش کاندیداها حساب میشن، برای همین نمرهٔ اطمینان هر فیلد واقعیه نه تقریبی.
نکتهٔ آخر پایپلاین مهمه: JSON نهایی بهصورت برنامهای از مقدارهای تأییدشده سرهم میشه، نه اینکه متن خام تولید و بعد پارس بشه. دلیل ادعای اعتبار صددرصدی هم همینه، چون اصلاً مرحلهٔ پارس کردنی وجود نداره که بتونه شکست بخوره.
عددها روی یه M4 Max گرفته شدن. مسیریابی تقلب مالی با ۴ فیلد از ۴۲۰ میلیثانیه به ۷۵ میلیثانیه رسید، ممیزی امنیتی کد از ۳۸۰ به ۶۸، طبقهبندی تعرفه با یه فیلد ۲۵۵ گزینهای از ۵۰۰ به ۸۹، و تریاژ پشتیبانی سازمانی با ۲۸ فیلد از ۱۹۰۰ به ۲۷۰ میلیثانیه. یعنی هرچی تعداد فیلد بیشتر میشه، فاصله هم بازتر میشه.
جای مناسبش کارهای طبقهبندی و مسیریابیه که هر فیلد از یه لیست ثابت انتخاب میشه. برای متن آزاد اصلاً جواب نمیده، چون مجموعهٔ کاندیدای ثابتی نیست که بشه logitها رو بهش محدود کرد. محدودیت سختافزاری هم واقعیه: MLX یعنی فقط مک Apple Silicon با macOS 14 به بالا، و تو منبع خبری از نسخهٔ CUDA یا GPU سروری نیست.
نکات کلیدی:
- روی M4 Max تأخیر بین ۵.۶ تا ۷ برابر کم شده؛ بیشترین سود مال schemaی ۲۸ فیلدی بود، از ۱۹۰۰ به ۲۷۰ میلیثانیه.
- JSON بهصورت برنامهای از مقدارهای تأییدشده ساخته میشه، پس اعتبار نحوی تضمینشدهست نه اندازهگیریشده.
- هر فیلد enum تا ۲۵۵ گزینه رو پشتیبانی میکنه و همون سناریو حدود ۸۹ میلیثانیه طول کشید.
- مدل پایهٔ بنچمارک mlx-community/Qwen2.5-1.5B-Instruct-4bit بوده و خط پایهٔ autoregressive حدود ۱۱۶ تا ۱۳۱ توکن بر ثانیه کار کرده.
- نیازمندی اجرا: مک Apple Silicon از M1 تا M4، با macOS 14 یا بالاتر و پایتون ۳.۱۰ به بعد.
- پروژه یه اجراکنندهٔ بنچمارک خط فرمان، یه SDK پایتون و یه ویژوالایزر وب داره که دو مسیر موازی و توکنبهتوکن رو کنار هم نشون میده.




