Как запустить тяжелые нейронки прямо на смартфоне без облаков и тормозов
Представьте, что вам нужно внедрить в мобильное приложение распознавание текста, чат-бота или генератор картинок. Обычно путь один: арендовать сервер с GPU, настроить API и молиться, чтобы у пользователя не отвалился интернет в самый ответственный момент. Но что, если переложить всю работу на «железо» самого устройства?
Недавно я наткнулся на NexaSDK от Qualcomm. Это фреймворк, который позволяет запускать современные LLM и мультимодальные модели локально. Причем он делает упор не только на CPU или GPU, но и на NPU (Neural Processing Unit) — те самые чипы для ИИ, которые сейчас пихают в каждый флагман, но которые часто простаивают без дела.
Что умеет этот SDK
Проект позиционирует себя как «NPU-first» решение. Пока другие инструменты вроде llama.cpp только присматриваются к специализированным чипам, NexaSDK уже вовсю их эксплуатирует.
Главная фишка здесь — поддержка Day-0. Это значит, что когда выходит новая модель вроде Qwen3-VL или Gemma3n, ребята из Nexa адаптируют её под мобильное железо практически в тот же день. В моей практике это редкость: обычно приходится ждать патчей неделями.
Инструмент закрывает сразу несколько задач:
- Текстовые чаты (LLM)
- Зрение (VLM) — можно скормить модели картинку и попросить описать её
- Распознавание речи (ASR) и текста (OCR)
- Генерация изображений и эмбеддинги
Быстрый старт через CLI
Самый простой способ пощупать проект — скачать их CLI. Он работает на Windows, Linux и Android (через adb shell).
Чтобы запустить чат с Qwen3, достаточно одной команды:
nexa infer ggml-org/Qwen3-1.7B-GGUF
Если у вас ноутбук на Snapdragon X Elite, можно задействовать NPU для OmniNeural-4B:
nexa infer NexaAI/OmniNeural-4B
Кстати, для работы с NPU-моделями понадобится токен. Раньше там была сложная регистрация, но сейчас разработчики упростили процесс: просто прописываете ключ в переменные окружения, и всё заводится.
Интеграция в Python и Android
Для тех, кто пишет на Python, всё выглядит привычно. Библиотека ставится через pip и предоставляет интерфейс, очень похожий на популярные обертки для LLM.
from nexaai import LLM, ModelConfig
# Загружаем модель
llm = LLM.from_(model="NexaAI/Qwen3-0.6B-GGUF", config=ModelConfig())
# Генерируем ответ потоком
for token in llm.generate_stream("Как приготовить яичницу?", GenerationConfig(max_tokens=100)):
print(token, end="", flush=True)
С Android ситуация чуть интереснее. SDK требует минимум Android 27 (это Oreo) и, в идеале, чип Snapdragon 8 Gen 4 для максимальной скорости. В коде это выглядит как обычная зависимость в Gradle. Инициализируете SDK, указываете путь к файлу модели в формате .nexa и запускаете инференс.
Почему это может быть полезно
Главный вопрос: зачем тащить нейронку на устройство, если есть OpenAI API?
Во-первых, это конфиденциальность. Данные пользователя не покидают телефон. Для медицинских или финтех-приложений это критический фактор. Во-вторых, экономия. Вам не нужно платить за каждый токен — вы платите один раз за разработку. В-третьих, работа в офлайне. Приложение будет работать в самолете, в лесу или в подвале торгового центра.
Технические нюансы и лицензия
Проект использует двойную лицензию. Все, что касается работы на CPU и GPU, идет под Apache 2.0 — пользуйтесь на здоровье. А вот за оптимизации под NPU придется платить, если вы делаете коммерческий продукт. Для личных тестов можно получить бесплатный ключ на одну активацию устройства.
Интересно, что NexaSDK поддерживает не только стандартный GGUF, но и собственный формат .nexa. Судя по документации, он лучше оптимизирован под специфику мобильных чипов.
Стоит ли пробовать
Если вы занимаетесь мобильной разработкой или Edge AI, то проект точно заслуживает места в закладках. Это не просто очередная обертка над llama.cpp, а попытка сделать полноценный стандарт для локального ИИ на разных платформах.
Конечно, есть и ограничения. Документация местами кажется фрагментарной, а список поддерживаемых NPU пока ограничен в основном чипами Qualcomm. Но учитывая, что Qualcomm сама активно продвигает этот репозиторий, поддержка железа будет только расти.
Попробовать проект можно на GitHub. Там же лежат готовые Docker-образы для Linux, если не хочется возиться с локальной установкой.