Запустить большую языковую модель на телефоне - это не магия, а просто правильная настройка. Если у вас Android с 8 ГБ ОЗУ и процессором уровня Snapdragon 888, то 7B-модель (в 4-битном квантовании) будет работать с комфортной скоростью 10-15 токенов в секунду. Не как в кино, но вполне пригодно для ответов на вопросы или генерации текста.
Почему это работает? Потому что современные флагманы 2021-2022 годов по производительности CPU примерно равны десктопным процессорам 5-летней давности. А именно на таком железе llama.cpp и задумывался.
Ваш телефон должен быть не залочен (bootloader unlocked) или рутирован. Без этого Termux не получит доступ к полному набору утилит. Некоторые производители блокируют компиляцию.
Что вы получите в итоге
1. Полноценный llama.cpp бинарник, скомпилированный под ARM64
2. Рабочий веб-сервер на порту 8080 с API, совместимым с OpenAI
3. Возможность запускать модели до 7B параметров (в 4-битном формате)
4. Доступ к LLM через браузер на этом же телефоне или с других устройств в сети
Шаг 0: Подготовка - очистите место
Модель 7B в формате Q4_K_M занимает около 4 ГБ. Плюс Termux, плюс исходники llama.cpp, плюс компилятор и зависимости. Нужен минимум 10 ГБ свободного места. Если у вас телефон на 128 ГБ - проблем нет. Если на 64 - лучше подключить карту памяти.
1 Установка Termux с правильными репозиториями
Первая ошибка 90% пользователей - скачивают Termux из Google Play. Там версия 2020 года, которая не обновляется. Нужен Termux из F-Droid.
- Установите F-Droid с официального сайта fdroid.org
- В F-Droid найдите "Termux" (должен быть от Fredrik Fornwall)
- Установите, откройте, дайте все разрешения
Проверяем, что всё работает:
pkg update && pkg upgrade -y
pkg install git wget cmake python -y
Если команды выполняются без ошибок - хорошо. Если пишет "permission denied" - проверьте настройки разрешений Android для Termux.
2 Компиляция llama.cpp
Здесь начинается самое интересное. ARM процессоры в телефонах поддерживают не все инструкции, которые есть в x86. Некоторые оптимизации придётся отключить.
# Клонируем репозиторий
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
# Собираем
mkdir build && cd build
cmake .. -DLLAMA_METAL=OFF -DLLAMA_VULKAN=OFF -DLLAMA_CUBLAS=OFF \
-DLLAMA_MPI=OFF -DLLAMA_BLAS=OFF -DCMAKE_BUILD_TYPE=Release \
-DLLAMA_NATIVE=OFF -DLLAMA_AVX=OFF -DLLAMA_AVX2=OFF \
-DLLAMA_AVX512=OFF -DLLAMA_FMA=OFF -DLLAMA_F16C=OFF
make -j4
Флаги -DLLAMA_AVX=OFF и подобные отключают векторные инструкции, которых нет в ARM. Флаг -DLLAMA_NATIVE=OFF важен - он отключает автоматическое определение CPU возможностей, которое может сломать сборку.
Компиляция займёт 10-15 минут на Snapdragon 888. Если процесс завис на несколько часов - что-то пошло не так. Прервите комбинацией Ctrl+C и проверьте, хватает ли ОЗУ.
Проверяем, что бинарник создался:
cd ..
ls -lh ./build/bin/main
# Должен быть файл размером ~5-10 МБ
3 Загрузка модели
Не пытайтесь скачивать модели в формате .safetensors или .bin напрямую. Они не совместимы с llama.cpp. Нужен конвертированный формат GGUF.
Есть два пути:
- Скачать готовую - проще, но выбор ограничен
- Сконвертировать самому - можно любую модель, но нужно больше места и Python на ПК
Для первого запуска рекомендую готовую модель Mistral 7B:
# Создаём папку для моделей
cd ~
mkdir models && cd models
# Скачиваем Mistral 7B Instruct Q4_K_M (лучшее качество/размер)
wget https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.2-GGUF/resolve/main/mistral-7b-instruct-v0.2.Q4_K_M.gguf
Файл весит около 4 ГБ. Скачивание займёт время в зависимости от скорости интернета. Если обрывается - используйте wget -c для продолжения.
4 Первый запуск и тест
Перед запуском сервера проверяем, что модель работает в интерактивном режиме:
cd ~/llama.cpp
./build/bin/main -m ../models/mistral-7b-instruct-v0.2.Q4_K_M.gguf \
-p "Building a website in HTML" -n 256 -t 4 -c 2048
Параметры:
| Флаг | Что делает | Значение для Snapdragon 888 |
|---|---|---|
-t |
Количество потоков | 4 (оптимально, больше - падение производительности) |
-c |
Размер контекста | 2048 (больше - съедает ОЗУ) |
-ngl |
Слои на GPU | 0 (на Android GPU ускорение не работает) |
Если видите текст, генерируемый моделью - всё работает. Скорость должна быть 8-12 токенов в секунду. Медленно? Это телефон, что вы хотели.
5 Запуск веб-сервера
Интерактивный режим неудобен. Запускаем сервер:
./build/bin/server -m ../models/mistral-7b-instruct-v0.2.Q4_K_M.gguf \
-c 2048 --host 0.0.0.0 --port 8080 -t 4
Теперь откройте браузер на телефоне и перейдите по адресу http://localhost:8080. Увидите веб-интерфейс Chat UI.
Если хотите подключиться с другого устройства в той же Wi-Fi сети:
# Узнайте IP телефона
ifconfig
Затем на компьютере откройте http://[IP-телефона]:8080
Брандмауэр Android может блокировать входящие подключения. Если с компьютера не подключается, проверьте настройки брандмауэра или используйте несколько телефонов в кластере как альтернативу.
Оптимизация: Как выжать максимум
8 ГБ ОЗУ на Android - это не 8 ГБ на Linux. Система резервирует память под себя. Вот как распределяется память на Snapdragon 888 с 8 ГБ:
- Система Android: 2-3 ГБ
- Фоновые приложения: 1-2 ГБ
- Доступно для llama.cpp: 3-4 ГБ
Что делать:
- Закройте все приложения перед запуском
- Используйте
-c 1024вместо 2048 (контекст в 2 раза меньше, но памяти хватит) - Включите zRAM в настройках разработчика (компрессия ОЗУ)
- Не запускайте сервер и веб-интерфейс одновременно на одном устройстве
Какие модели реально работают
| Модель | Размер (Q4_K_M) | Токенов/сек | Качество |
|---|---|---|---|
| Phi-2 2.7B | 1.7 ГБ | 25-30 | Среднее |
| Mistral 7B | 4.2 ГБ | 10-15 | Хорошее |
| Llama 3 8B | 4.8 ГБ | 8-12 | Отличное |
Phi-2 быстрее, но тупее. Mistral - баланс. Llama 3 8B - лучшая, но требует почти всю доступную память.
Почему не работает GPU ускорение
Vulkan в llama.cpp теоретически поддерживается, но на Android:
- Драйвера GPU у каждого производителя свои
- Память GPU и CPU не унифицирована (UMA)
- Тепловыделение - GPU греется сильнее CPU
Если очень хочется GPU, смотрите клиенты с аппаратным ускорением. Но там свои ограничения.
Типичные проблемы и решения
1. "killed" при запуске
Android убивает процесс, если не хватает памяти. Решение:
# Уменьшаем контекст
./build/bin/main -m model.gguf -c 1024 -t 4
# Или закрываем всё лишнее
pkill -9 chrome
pkill -9 spotify
2. Очень медленная генерация (1-2 токена/сек)
Проверьте частоту CPU:
# Установите CPU-Z или посмотрите в настройках разработчика
# Если CPU троттлит (перегревается) - снимите чехол, положите на холодную поверхность
3. Termux падает при компиляции
Не хватает оперативной памяти. Добавьте файл подкачки:
# Создаём файл подкачки 2 ГБ
dd if=/dev/zero of=$HOME/swapfile bs=1M count=2048
mkswap $HOME/swapfile
swapon $HOME/swapfile
Что дальше?
Рабочий llama.cpp на телефоне - это только начало. Дальше можно:
- Подключить LocalAI для работы с PDF
- Настроить AI-ассистента с памятью
- Использовать как бэкенд для мобильного приложения
- Построить кластер из нескольких телефонов
Главное помнить: это эксперимент. Не ждите стабильности как на сервере. Телефон может перегреться, система - убить процесс, а батарея - сесть за час.
Но когда работает - это магия. Собственный ИИ в кармане, без интернета, без подписок. Стоит потраченного времени.