Содержание
  1. Что говорит документация llama.cpp про Android
  2. Выбор сборки: Termux, Android Studio или NDK
  3. Подготовка окружения телефона
  4. Выбор GGUF по объёму памяти
  5. Первый запрос через llama-cli
  6. Офлайн-режим и скорость генерации
  7. Частые вопросы
Гайды

Llama cpp Android: как запустить модель на телефоне

16 октября 2026 · 11 минут чтения

Материал редакции Зерокодера. Счёт по выдаче снят собственным прогоном 16 октября 2026 года; цитаты источников приведены дословно. Обновлено: октябрь 2026.

Llama cpp Android: как запустить модель на телефоне — собрать движок под arm64, положить GGUF-файл в память устройства и вызвать llama-cli с разумным размером контекста. Документация проекта в репозитории ggml-org описывает три пути: сборка GUI-обвязки в Android Studio, сборка CLI прямо в Termux и кросс-компиляция через Android NDK. Ниже — порядок действий, выбор квантования по объёму ОЗУ и проверка офлайн-режима.

Что говорит документация llama.cpp про Android

Раздел docs/android.md в репозитории проекта llama.cpp описывает Android как поддерживаемую платформу с тремя сценариями сборки. Первый — GUI-обвязка: в документации сказано «Build GUI binding using Android Studio», то есть каталог examples/llama.android импортируется в Android Studio, синхронизируется через Gradle и собирается как обычный Android-проект. Второй — CLI в Termux: терминальный эмулятор с Linux-окружением, установка которого не требует root-прав, а сам пакет распространяется через Google Play, репозиторий проекта и F-Droid. Третий — кросс-компиляция CLI на хосте через CMake и Android NDK.

Отдельно документация фиксирует аппаратную поддержку: Android-биндинг поддерживает ускорение вплоть до SME2 для Arm и AMX для x86-64, автоматически определяет железо хоста и подгружает совместимые ядра. По формулировке источника, это позволяет работать и на свежих флагманах, и на старых устройствах с ограниченной памятью без ручной настройки. Для читателя это означает: отдельно выбирать «версию под Snapdragon» не нужно, движок сам подстроится под доступные инструкции CPU.

В документации также упомянут минимальный Android-фронтенд, включённый в репозиторий для демонстрации базовых функций биндинга. Если нужен готовый продукт с системными промптами, бенчмарками и визуализатором Arm-фич, документация отсылает к приложению Arm AI Chat в Google Play, которое поддерживают группы Arm CT-ML, CE-ML и STE.

Практический вывод из этого раздела: перед сборкой стоит определиться, нужен ли вам интерфейс приложения или достаточно командной строки. Для быстрой проверки идеи хватает Termux и llama-cli. Для встраивания в собственное приложение — Android Studio и биндинг. Для воспроизводимой сборки под конкретный ABI — NDK и CMake.

Выбор сборки: Termux, Android Studio или NDK

Три пути различаются по трудозатратам и по тому, где в итоге живёт бинарник. Сравнение по документации проекта:

Путь Где собирается Что нужно Когда уместен
Termux На самом телефоне Termux, git, cmake, libandroid-spawn Быстрая проба, скрипты, отладка
Android Studio На хосте Android Studio, Gradle, SDK Приложение с UI и биндингом
Android NDK На хосте Android SDK, NDK, CMake Воспроизводимая сборка под ABI

Для Termux документация приводит последовательность: обновить пакеты, установить git, cmake и libandroid-spawn, затем следовать инструкциям сборки для CMake. Termux даёт Linux-подобное окружение, и внутри него llama.cpp собирается как на обычной Linux-машине.

Для Android Studio документация предписывает импортировать каталог examples/llama.android, выполнить Gradle sync и собрать проект. Этот путь даёт готовый минимальный фронтенд: разбор метаданных GGUF через GgufMetadataReader из ContentResolver или локального файла, получение InferenceEngine через фасад AiChat и загрузку модели по приватному пути приложения, отправку промпта с автоматическим форматированием шаблона и сбор сгенерированных токенов в Kotlin Flow.

Для NDK документация требует подготовленного окружения кросс-компиляции с установленным Android SDK. Важная деталь: Android поставляет ограниченный набор нативных библиотек, и CMake при сборке через NDK видит только их. Команда конфигурации задаёт toolchain-файл NDK, ABI arm64-v8a, платформу android-28, флаги -march=armv8.7a и отключает GGML_OPENMP вместе с GGML_LLAMAFILE. OpenMP в NDK требует установки как зависимости CMake, что на момент написания документации не поддерживается. Llamafile, по замечанию того же источника, не поддерживает Android-устройства.

Документация добавляет, что конфигурация рассчитана на современные устройства, а llama.cpp содержит runtime-проверки доступных возможностей CPU, поэтому сборка под armv8.7a остаётся работоспособной и на более старых чипах. ABI при необходимости меняется под целевую платформу.

Подготовка окружения телефона

Порядок зависит от выбранного пути, но общие требования совпадают. Для Termux документация перечисляет шаги: apt update && apt upgrade -y, затем apt install git cmake libandroid-spawn. Termux ставится без root-прав, а сам пакет доступен экспериментально в Google Play, а также напрямую из репозитория проекта и на F-Droid.

Для кросс-компиляции на хосте нужен Android SDK и настроенный NDK. Документация подчёркивает: окружение должно быть готово к кросс-компиляции программ под Android, иначе CMake не найдёт toolchain. После клонирования репозитория перейдите в его каталог. Полный NDK-маршрут из документации начинается с конфигурации; ANDROID_NDK должен указывать на установленный NDK:

ТЕРМИНАЛ
cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-28 -DCMAKE_C_FLAGS="-march=armv8.7a" -DCMAKE_CXX_FLAGS="-march=armv8.7a" -DGGML_OPENMP=OFF -DGGML_LLAMAFILE=OFF -B build-android
cmake --build build-android --config Release
cmake --install build-android --prefix {install-dir} --config Release
adb shell "mkdir /data/local/tmp/llama.cpp"
adb push {install-dir} /data/local/tmp/llama.cpp/
adb push {model}.gguf /data/local/tmp/llama.cpp/
adb shell

Замените {install-dir} и {model}.gguf на свои пути. В shell устройства перейдите в /data/local/tmp/llama.cpp и выполните показанный ниже запуск с LD_LIBRARY_PATH=lib. Так один выбранный путь покрывает конфигурацию, сборку, доставку файлов и первый запрос.

Доставка бинарников на устройство через ADB описана так: создать каталог /data/local/tmp/llama.cpp, отправить туда установочный каталог и GGUF-файл, войти в shell устройства. При запуске установленных исполняемых файлов документация требует явно указать LD_LIBRARY_PATH=lib, потому что Android не находит путь к библиотекам самостоятельно. В поздних API-уровнях поддерживается RPATH, и это поведение может измениться.

Отдельно стоит освободить место под модель и под саму сборку. GGUF-файл занимает объём, сопоставимый с его размером на диске хоста, а сборка добавляет промежуточные артефакты. Для Termux это означает проверку свободного места в домашнем каталоге, для ADB-пути — в /data/local/tmp.

Выбор GGUF по объёму памяти

Документация llama.cpp не даёт таблицы «модель — объём ОЗУ», поэтому ориентир строится на размере самого файла и на контексте. Практическое правило: файл GGUF должен укладываться в свободную память с запасом на контекст и служебные буферы. Документация отдельно предупреждает про размер контекста: значение нужно задавать разумным, начиная с 4096, иначе потребление памяти подскакивает и терминал завершается.

Что учитывать Как влияет Что делать
Размер файла GGUF Занимает память постоянно Брать квантование, влезающее в свободное ОЗУ
Размер контекста Растёт с числом токенов Стартовать с 4096, увеличивать постепенно
Свободное место Нужно для загрузки и сборки Освободить перед скачиванием
Runtime-проверки CPU Влияют на скорость Полагаться на автоопределение железа

Модель документация советует скачивать, например, с Hugging Face и размещать в домашнем каталоге ~/ для лучшей производительности. Команда загрузки в документации выглядит как curl -L {model-url} -o ~/{model}.gguf. Для ADB-пути модель скачивается на хост-систему, а затем отправляется на устройство.

Выбор квантования — компромисс между качеством ответов и объёмом. Более агрессивное квантование уменьшает файл и оставляет больше памяти под контекст, менее агрессивное сохраняет качество, но требует больше ОЗУ. На устройствах с ограниченной памятью документация прямо допускает работу: биндинг рассчитан и на старые устройства с ограниченным объёмом RAM. Конкретные сочетания «модель — квантование — устройство» проверяются на месте, потому что доступная память зависит от запущенных приложений.

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

Первый запрос через llama-cli

Минимальный запуск в Termux документация описывает командой ./build/bin/llama-cli -m ~/{model}.gguf -c {context-size} -p "{your-prompt}". Здесь -m задаёт путь к модели, -c — размер контекста, -p — промпт. Документация отмечает, что показан именно llama-cli, но подойдут и другие исполняемые файлы из каталога examples.

Для ADB-пути команда отличается: после перехода в /data/local/tmp/llama.cpp запуск идёт как LD_LIBRARY_PATH=lib ./bin/llama-simple -m {model}.gguf -c {context-size} -p "{your-prompt}". Разница в том, что здесь используется llama-simple, а путь к библиотекам задаётся переменной окружения.

Готовый промпт для первого запуска — проверка связности ответа на русском:

КОД3 строки
Ты — локальный ассистент на телефоне. Ответь кратко и по делу на русский запрос.
Запрос: [ваша тема]
Формат: три предложения, без списков и без вступлений.

В промпте меняются [ваша тема] и требования к формату. Дополнительные варианты той же задачи:

КОД
Перескажи [текст] тремя предложениями на русском, сохранив все числа.
КОД
Составь план из пяти шагов по теме [ваша тема], каждый шаг — одна строка.
КОД
Задай мне три уточняющих вопроса по теме [ваша тема] и дождись ответа.
КОД
Объясни [термин] так, как объяснил бы школьнику: коротко, на русском.
КОД
Сократи [текст] вдвое, сохранив смысл и порядок абзацев.
КОД
Найди в [текст] противоречия и перечисли их одной строкой каждое.

Если ответ приходит, движок работает. Если терминал завершается, документация указывает на размер контекста как на первую причину: значение 4096 выбрано как стартовое.

Офлайн-режим и скорость генерации

Офлайн-режим обеспечивается самой схемой работы: модель лежит файлом на устройстве, запрос уходит в локальный процесс, сеть для генерации не нужна. Документация llama.cpp описывает запуск через Termux и через ADB как работу с локальными бинарниками и локальным GGUF-файлом. Приложение Arm AI Chat из Google Play упоминается в документации как готовый продукт с системными промптами и бенчмарками.

Скорость генерации зависит от CPU и от размера контекста. Документация llama.cpp не приводит таблицы токенов в секунду, поэтому замер делается самостоятельно: запустите один и тот же промпт дважды, зафиксируйте время до последнего токена, затем уменьшите контекст и повторите. Разница покажет, сколько стоит контекст. Дополнительный ориентир — аппаратное ускорение: биндинг поддерживает SME2 для Arm и AMX для x86-64 и автоматически подбирает совместимые ядра, что влияет на скорость без ручной настройки.

Для проверки офлайн-режима включите авиарежим и повторите запрос. Если ответ приходит, сеть в цепочке не участвует. Для проверки стабильности прогоните несколько запросов подряд и посмотрите, не растёт ли потребление памяти. На устройствах с ограниченным ОЗУ документация допускает работу, но запас памяти остаётся главным ограничением.

Собственный прогон редакции по этому веб-корпусу: скачали подборку результатов веб-поиска по запросу «Llama cpp Android: как запустить модель на телефоне»: текст отдали 6 из 10. Медиана объёма читаемого текста топа — 1285 слов. Метку 2026 года несут 4 из 6 прочитанных страниц.

Частые вопросы

Llama cpp android — это официальная поддержка Android?

Да, в репозитории проекта llama.cpp есть отдельный документ docs/android.md, который описывает Android как поддерживаемую платформу. Документация перечисляет три пути сборки: GUI-биндинг через Android Studio, CLI в Termux и кросс-компиляцию через Android NDK. Отдельно указана аппаратная поддержка вплоть до SME2 для Arm и AMX для x86-64.

Нужен ли root на телефоне?

Для Termux root не требуется: документация прямо указывает, что это терминальный эмулятор с Linux-окружением без root-прав. Пакет распространяется экспериментально через Google Play, а также напрямую из репозитория проекта и на F-Droid. Для ADB-пути доступ к /data/local/tmp зависит от настроек устройства.

Какую модель выбрать для телефона?

Документация llama.cpp не приводит таблицы соответствия моделей и объёмов памяти. Ориентир — размер файла GGUF и свободное ОЗУ: файл должен укладываться в память с запасом на контекст. Документация советует скачивать модель с Hugging Face и размещать в домашнем каталоге ~/ для лучшей производительности.

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

Документация называет вероятную причину: слишком большой размер контекста. Значение -c рекомендуется начинать с 4096, иначе потребление памяти подскакивает и терминал завершается. Второй шаг — взять файл GGUF меньшего размера или закрыть фоновые приложения.

Работает ли модель без интернета?

Да, схема работы локальная: GGUF-файл лежит на устройстве, запрос обрабатывает локальный процесс. Документация описывает запуск через Termux и через ADB как работу с локальными бинарниками и локальным файлом модели. Для проверки включите авиарежим и повторите запрос.

Для продолжения разбора локальных моделей пригодятся материалы блога: Gemma или Qwen: сравнение локальных моделей и llama.cpp API: как запустить llama-server и подключиться.

Читайте также

3 материала