{}const=>[]async()letfn</>var
ИИMobile

Нейросеть локально на Android: запуск llama.cpp через Termux

Запускаем небольшую языковую модель прямо на Android без облака: Termux, сборка llama.cpp, GGUF, выбор квантизации, размер контекста и проверка памяти.

К

Кодик

Автор

7 мин чтения

Нейросеть локально на Android можно запустить через официальный сценарий llama.cpp для Termux без root-доступа. Для первого теста берите GGUF-модель класса 1B или 3B в квантизации Q4, начинайте с контекста 2048 или 4096 и оставляйте системе несколько гигабайт свободной памяти.

Локальный запуск означает, что вычисления идут на телефоне и после загрузки модели запросы могут обрабатываться без облака. Это не делает любой APK безопасным и не превращает смартфон в сервер для огромной модели. Ограничения задают оперативная память, скорость накопителя, охлаждение, архитектура процессора и поддержка ускорителя. Android может завершить тяжёлый процесс в фоне, а длительная генерация заметно нагревает устройство и расходует батарею.

18 ГБ RAM

Начинайте с 1B или 3B Q4 и короткого контекста.

2GGUF

Формат модели, который llama.cpp читает локально.

3Termux

Linux-окружение на Android для сборки и запуска без root.

Termux, сборка llama.cpp через CMake и запуск GGUF-модели на телефоне
Путь модели на телефоне: Termux ставит git, cmake и clang, CMake собирает llama.cpp в build/bin, а llama-cli читает файл GGUF из ~/models и выдаёт токены в терминал.

Нейросеть локально на Android: команды для первого запуска

Установите Termux из источника, указанного в документации проекта, обновите пакеты и соберите llama.cpp через CMake. Команды ниже создают оптимизированную release-сборку. Путь к модели замените на свой файл GGUF. Не скачивайте веса с неизвестных зеркал: проверьте лицензию, размер и хэш, если автор его публикует.

pkg update && pkg upgrade
pkg install git cmake clang

git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp

# Собираем оптимизированные бинарники для текущего устройства
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release -j 4

# Начинаем с короткого контекста, чтобы не получить всплеск памяти
./build/bin/llama-cli \
  -m ~/models/model-3b-q4.gguf \
  -c 2048 \
  -n 256 \
  -p "Объясни, что такое функция в Python, на одном примере"
Ожидаемый результат
  • В терминале появляется поток токенов ответа
  • Пиковая память остаётся ниже доступной памяти устройства

Если процесс закрывается, уменьшите модель или контекст, а не увеличивайте количество потоков. Параметр -c влияет на память KV-кэша. Большое окно полезно только тогда, когда запрос действительно содержит длинный материал. Для удобного интерфейса llama.cpp также можно запустить в режиме локального сервера и открыть страницу на 127.0.0.1, но сначала подтвердите стабильность CLI.

🔥 100 000+ учеников уже с нами

Устал читать теорию?
Пора кодить!

Кодик — приложение, где ты учишься программировать через практику. AI-наставник, интерактивные уроки, реальные проекты.

🤖 AI 24/7
🎓 Сертификаты
💰 Бесплатно
🚀 Начать учиться
Присоединились сегодня

Какую модель брать для первого теста

ЭлементЧто означаетЧто делать
1B Q4Низкое потребление памятиКороткие ответы и простые классификации
3B Q4Разумный старт для 8 ГБЧат, конспекты, небольшой код
7B Q4Нужен заметный запас RAMБолее качественные ответы, медленнее
Vision-модельДополнительный проектор и памятьНе начинать с неё без необходимости
Контекст 2KМеньше KV-кэшаДиагностика первого запуска

Число параметров не равно размеру файла один к одному: влияют квантизация и архитектура. К весам добавляются KV-кэш, рабочие буферы и память приложения. Оставляйте запас системе. Если телефон показывает 8 ГБ RAM, это не означает, что все 8 ГБ доступны одному процессу. Закройте тяжёлые приложения и измеряйте реальное поведение, а не ориентируйтесь на рекламу устройства.

Процесс закрывается: уменьшаем модель и контекст -c, а не число потоков
Что делать при проблеме: если процесс закрывается, сначала берите модель поменьше, затем возвращайте -c к 2048, и не пытайтесь вылечить это ростом числа потоков.

Практика: соберите llama.cpp в Termux и снимите пик памяти на 3B Q4

Проведите модель 3B Q4 от файла GGUF до потока токенов в терминале Termux, без root и без сторонних APK. Успех выглядит так: llama-cli отвечает на запрос при -c 2048, а процесс не закрывается системой в середине генерации. Заранее запишите, сколько свободной памяти показывает телефон, это ваш ориентир на весь тест.

  1. Обновить пакеты в Termux. Выполните pkg update && pkg upgrade, затем pkg install git cmake clang. После установки команда clang --version должна вывести версию, иначе сборка дальше не пойдёт.
  2. Собрать llama.cpp через CMake. Клонируйте репозиторий llama.cpp и выполните cmake -B build -DCMAKE_BUILD_TYPE=Release, потом cmake --build build --config Release -j 4. Сборка идёт несколько минут, после неё в build/bin появляется llama-cli.
  3. Положить GGUF в ~/models. Создайте каталог ~/models и скопируйте туда файл вида model-3b-q4.gguf. Проверьте размер через ls -lh и сверьте хэш, если автор весов его публикует.
  4. Первый запуск llama-cli. Вызовите ./build/bin/llama-cli с ключами -m ~/models/model-3b-q4.gguf, -c 2048 и -n 256 и с запросом про функцию в Python. В терминале должен пойти поток токенов, а не сообщение о невозможности загрузить модель.
  5. Снять пик памяти. Пока идёт генерация, посмотрите свободную память в настройках телефона и запишите четыре числа: время первого токена, токены в секунду, пик памяти и температуру корпуса через пять минут работы.

Теперь поднимите -c с 2048 до 8192 на той же 3B-модели и повторите тот же запрос. KV-кэш вырастет вместе с окном, пик памяти уйдёт выше доступного, и Android закроет процесс, часто вообще без внятного сообщения в терминале. Верните -c 2048, убедитесь, что генерация снова доходит до конца, и не пытайтесь компенсировать падение увеличением числа потоков.

Критерий готовности. Вы можете объяснить, за что отвечает ключ -c и почему к весам GGUF добавляются KV-кэш и рабочие буферы. Подтверждают результат записанные числа: время первого токена, токены в секунду и пик памяти для конкретной 3B Q4 на вашем телефоне. Если за пять минут генерации система ни разу не закрыла процесс, запуск можно считать стабильным.

Дальше прогоните два одинаковых запроса на 1B и 3B и сравните скорость с качеством ответа, а параметры запуска сохраните текстовым файлом рядом с моделью в ~/models. Когда CLI перестанет падать, попробуйте режим локального сервера llama.cpp и откройте 127.0.0.1 в браузере телефона. После работы явно завершите процесс сервера: закрытая вкладка его не останавливает, и телефон продолжит греться.

Частые ошибки и почему они появляются

Новички часто выбирают самый большой файл, который помещается в накопитель, хотя ограничение связано с оперативной памятью. Вторая ошибка состоит в максимальном контексте «на будущее». Третья связана с фоновым сервером, который продолжает нагревать телефон после закрытия вкладки. Процесс нужно явно остановить.

Случайный APK с моделью

Проверяйте автора приложения и разрешения. Локальность сама по себе не подтверждает безопасность.

Модель без лицензии

Уточните условия использования весов, особенно для публикации и коммерческого проекта.

Нет замера результата

Запишите время первого токена, токены в секунду, пиковую память и температуру после пяти минут.

Самопроверка

Нужен ли root, чтобы запустить llama.cpp на Android?

Root для запуска llama.cpp на Android не нужен: официальный сценарий проекта описывает сборку и запуск в Termux без root-доступа. Termux даёт Linux-окружение, в котором ставятся git, cmake и clang. Ограничения задаёт железо телефона, а не права суперпользователя.

Почему при увеличении контекста растёт потребление памяти?

Контекст увеличивает память из-за KV-кэша: для токенов окна модель хранит промежуточные значения, и кэш растёт вместе с параметром -c. Поэтому окно 4096 стоит дороже, чем 2048, на одной и той же модели. Большое окно оправдано только тогда, когда в запросе действительно длинный материал.

С какой модели начинать на телефоне с 8 ГБ RAM?

На телефоне с 8 ГБ RAM начинайте с GGUF-модели 1B или 3B в квантизации Q4 и с контекстом 2048. Вариант 7B Q4 требует заметного запаса памяти и отвечает медленнее. Помните, что все 8 ГБ одному процессу недоступны: часть занимают система и приложения.

Почему Android закрывает процесс с моделью во время генерации?

Android завершает тяжёлый процесс, когда ему не хватает оперативной памяти, особенно если приложение ушло в фон. Пик складывается из весов, KV-кэша и рабочих буферов и легко превышает свободный объём. Уменьшите модель или контекст, а не увеличивайте количество потоков.

Равен ли размер файла GGUF объёму нужной памяти?

Размер файла GGUF не равен объёму нужной памяти. К весам добавляются KV-кэш, рабочие буферы и память самого приложения, поэтому запас системе нужен всегда. Число параметров тоже не переводится в размер файла один к одному: влияют квантизация и архитектура.

Безопасен ли APK с уже встроенной моделью?

Локальный запуск сам по себе не делает APK безопасным. Проверяйте автора приложения и список разрешений, а веса скачивайте не со случайных зеркал, сверяя размер и хэш. Отдельно посмотрите лицензию модели, если планируете публикацию или коммерческий проект.

Что делать дальше

Сделайте два одинаковых запроса и сравните скорость, память и качество на 1B и 3B. Сохраните параметры запуска рядом с моделью. Если хочется автоматизировать загрузку файлов и обработку текста, базовый Python можно изучить на курсе GenAI. Дальше прочитайте выбор модели по памяти и материал о запуске без видеокарты.

🎯Хватит откладывать

Понравилась статья?
Пора применять на практике!

В Кодик ты не просто читаешь — ты сразу пишешь код. Теория + практика = реальный скилл.

Мгновенная практика
🧠AI объяснит код
🏆Сертификат

Без регистрации • Без карты