یه مدل ۲ میلیاردی که خودش روی گوشی با اپهای اندروید کار میکنه
خلاصهٔ کاملتر
Opposable یه اپ اندرویده که از طریق accessibility service (یعنی همون سرویسی که اندروید برای ابزارهای کمکی دسترسیپذیری داره) صفحه رو میخونه و تو هر اپ دیگهای تپ و تایپ میکنه. Claude، ChatGPT یا Codex میتونن از روی کامپیوتر کنترلش کنن. نویسنده تو این پست توضیح میده که وقتی هیچکدوم وصل نیستن، یه مدل ۲ میلیارد پارامتری همین چرخه رو روی خود گوشی و بدون سرور اجرا میکنه.
مدلشون GUI-Owl 1.5 2B از تیم Mobile-Agent علیباباست؛ یه fine-tune از Qwen3-VL که اسکرینشات رو میبینه و جوابش فقط یه اکشنه. این مدل با llama.cpp و به صورت ۴ بیتی اجرا میشه: ۱.۰۵ گیگ برای مدل زبانی و ۴۴۵ مگ برای vision encoder (یعنی بخشی که تصویر رو به توکن تبدیل میکنه). حدود ۴۰ تا کار رایج مثل گذاشتن آلارم یا روشن کردن Wi-Fi اصلاً به مدل نمیرسن و با کد ثابت انجام میشن.
هر قدم سه مرحله داره: encoder تصویر رو به توکن تبدیل میکنه، مدل اونها رو همراه با تسک میخونه (prefill)، و بعد حدود ۴۵ توکن مینویسه. روی CPU مک M2 بدون بهینهسازی هر قدم ۱۰.۶ ثانیه طول میکشید. تیم نوار وضعیت و کیبورد رو از تصویر بُرید، توکنهای پسزمینهی خالی رو حذف کرد (۲۵ تا ۴۰ درصد توکن کمتر)، و KV cache پرامپت سیستمی ۹۰۰ توکنی رو نگه داشت. نتیجه شد ۷.۳ ثانیه با همون دقت ۲۷ از ۳۶.
یه ترفند جالب دیگه هم دارن: مدل اول نیتش رو میگه، مثلاً «Click the Files app icon». اگه این جمله دقیقاً با یه المان تو درخت accessibility جور دربیاد، اپ همون رو تپ میکنه و دیگه منتظر مختصات نمیمونه. اینجوری decode از ۲ تا ۴ ثانیه رسید به ۰.۸ تا ۱.۳ ثانیه.
بعد فقط encoder رو به ONNX بردن و با Qualcomm AI Hub برای NPU گلکسی S25 کامپایل کردن. با fp16 هر صفحه ۲۳۶ میلیثانیه طول کشید، یعنی حدود ۱۶ برابر سریعتر از ۳.۹ ثانیهی M2. نسخهی ۸ بیتی سریعتر بود ولی خروجیش از مرجع فاصله میگرفت، واسه همین fp16 رو انتخاب کردن. اپ موقع شروع اول NPU، بعد GPU و آخر CPU رو امتحان میکنه و فقط encoderی رو نگه میداره که از تست خودکار رد بشه و از CPU سریعتر باشه.
محدودیتها هم کم نیستن: فعلاً فقط اسنپدراگون نسخهی NPU داره و پیکسل، مدیاتک و اگزینوس سراغ GPU یا CPU میرن. نویسنده قبول داره که این مدل روی اپهایی که ندیده خیلی از مدلهای ابری ضعیفتره. رو ۸ تسک جدید، دادن کل تسک یهجا ۴ و ۳ بار موفق شد، ولی دادنش قدم به قدم با چک کردن هر قدم ۶ بار تو هر دو دور جواب داد.
نکات کلیدی:
- مدل GUI-Owl 1.5 2B به صورت ۴ بیتی روی llama.cpp، حدود ۱.۵ گیگ
- زمان هر قدم روی CPU مک M2 از ۱۰.۶ به ۷.۳ ثانیه رسیده
- encoder روی NPU گلکسی S25 با fp16 فقط ۲۳۶ میلیثانیه طول میکشه
- اولین لود NPU حدود ۷۲ ثانیهست و فقط یه بار بعد از نصب اتفاق میافته
- فعلاً فقط چیپهای اسنپدراگون نسخهی NPU دارن
- تسکهای ناآشنا به Claude، ChatGPT یا Codex سپرده میشن




