инструменты 1 мин

Запуск 120-миллиардной нейросети на смартфоне: энтузиаст выжал 1-5 токенов в секунду из обычного Android

Разработчик заставил работать огромную языковую модель GPT-OSS-120B (60 ГБ) на смартфоне OnePlus с 11 ГБ оперативной памяти, используя только процессор — без GPU или NPU. Метод основан на потоковой загрузке экспертов из MoE-моделей прямо с накопителя в момент работы, что даёт в 14 раз большую скорость по сравнению с обычной загрузкой из памяти. Код открыт под Apache-2.0, есть готовое APK.

Демонстрирует принципиальную возможность запуска frontier-уровня моделей на consumer-устройствах через архитектурные трюки, открывая путь к полностью локальным AI-приложениям без облака и сервера. Открытый код и интеграция с llama.cpp снижают порог входа для экспериментов.

Как работает магия

Разработчик из сообщества llama.cpp продемонстрировал запуск модели GPT-OSS-120B (60 ГБ на диске, формат Q4_K_M) на OnePlus 15R с ~11 ГБ оперативной памяти. Секрет — в архитектуре Mixture-of-Experts (MoE): каждый токен активирует только часть «экспертов» (например, 4 из 128 на слой), остальные не нужны.

Вместо попытки запихнуть всю модель в RAM, система держит в памяти только базовые веса, а нужных экспертов подгружает прямо с флеш-накопителя через O_DIRECT — как раз пока CPU занят расчётом предыдущего слоя. Горячие эксперты кэшируются, холодные читаются по запросу.

Результаты: - GPT-OSS-120B: 1.3 tok/s (при стандартной ширине роутинга, 8 экспертов на слой) - Qwen3-30B: 5.2 tok/s - Gemma-4-26B: 4.1 tok/s

При меньшем числе экспертов (6 вместо 8) GPT выдаёт ~1.8 tok/s. Для сравнения: обычный mmap той же модели даёт 0.089 tok/s — выигрыш в 14 раз.

Главные достижения

  1. Побитовая идентичность выхода: результат на 100% совпадает с полной загрузкой в RAM, есть автотест в CI, который сверяет токены.
  2. Прозрачная интеграция: не форк llama.cpp, а надстройка через публичные API и колбэки. Llama.cpp подключён как submodule, обновление = бамп версии. Поддержка новой MoE-модели — одна строка в реестре, все форматы квантизации (MXFP4, Q4_K_M и т.д.) работают из коробки.
  3. Борьба с Android: основная сложность — не потоковая загрузка, а управление памятью. Ядро Android агрессивно отбирает страницы у процесса даже во время генерации. macOS спокойно выделяет десятки гигабайт под page cache, Android под нагрузкой даёт крохи — пришлось писать кастомную логику удержания.

Практическое применение

Автор подчёркивает: GPT-OSS-120B — скорее демонстрация возможностей, реально полезны модели поменьше: Qwen3-30B и Gemma-4-26B с приемлемой скоростью на том же железе.

Код открыт (Apache-2.0), есть готовое APK. Работает на llama.cpp, поддерживает qwen3moe, qwen2moe, gemma4, gpt-oss.

Disclaimer: тесты на одном устройстве, результаты зависят от нагрева и свободной памяти. Методика описана подробно, а не просто заявлена цифрами.

Ключевые выводы

  • MoE-архитектура позволяет запускать модели, в 5+ раз превышающие объём RAM, через селективную потоковую загрузку экспертов прямо с накопителя
  • Побитовая идентичность выхода при потоковой загрузке достижима — автор реализовал CI-тест, проверяющий каждый токен на совпадение с эталоном
  • Основная техническая сложность на Android — не сама потоковая загрузка, а борьба с агрессивным менеджером памяти ядра, отбирающим страницы во время генерации
  • Интеграция через публичные API llama.cpp без форка упрощает поддержку: добавление новой MoE-модели = одна строка, обновление llama.cpp = бамп версии submodule
  • Для практического применения на смартфонах реалистичнее модели 26-30B с 4-5 tok/s, чем 120B-демонстрация с 1.3 tok/s
MoEon-device AIllama.cppAndroidпотоковая загрузка

Автор: Никита Громов · Источник: reddit.com

Мнение редакции

**Мнение редакции:**

Это тот редкий случай, когда инженерный трюк выглядит как магия, но при этом прозрачно задокументирован и воспроизводим. Автор не просто показал скриншот с цифрами, а открыл код, описал методику, добавил CI-тесты на побитовую идентичность и честно признался, где настоящая боль (спойлер: не в потоковой загрузке, а в драке с Android OOM killer).

Реально ли это нужно на практике? Для 120B — скорее нет, 1.3 tok/s годится разве что для tech demo. Но Qwen3-30B на 5 tok/s — уже вполне рабочая история для сценариев типа «умный ассистент без интернета» или прототипирования на ходу. Главное здесь — доказательство концепции: MoE + умная потоковая загрузка снимают потолок по размеру модели на edge-устройствах. И да, интеграция через чистые API llama.cpp вместо очередного форка — это как раз то, чего не хватает half-baked pet-проектам. Смотрим с интересом, куда пойдёт дальше.

Комментарии