Зачем это вообще нужно?
Представьте: полноценная языковая модель с контекстом в 32 тысячи токенов работает в вашем кармане. Не через API, не через облако, а прямо на телефоне. LFM2 2.6B-Exp — это не очередная урезанная игрушка, а модель, которая реально может что-то делать: писать код, анализировать документы, вести диалог. И всё это со скоростью 40+ токенов в секунду на современном Android-смартфоне.
Звучит как фантастика? Ещё год назад так и было. Сейчас — это реальность, которую можно собрать за полчаса. Главное — не наступить на грабли, которые разбросаны на каждом шагу.
Важно: эта инструкция написана для относительно свежих Android-устройств (2020+ года) с 6+ ГБ оперативной памяти. На старых телефонах может не хватить памяти или производительности. Если у вас совсем древний аппарат, посмотрите гайд по запуску LLM на старом железе — там есть альтернативы.
Что такое LFM2 2.6B-Exp и почему он?
LFM2 (Language Foundation Model 2) — серия моделей от компании Lightning AI. Версия 2.6B-Exp — экспериментальная, но именно в этом её прелесть. Она оптимизирована для эффективного использования памяти, поддерживает контекст до 32K и показывает удивительную для своих размеров разумность.
Почему не Llama 3.1 8B или что-то покрупнее? Потому что 2.6 миллиарда параметров — это тот sweet spot, где модель уже умная, но ещё влезает в оперативку телефона без танцев с бубном. Для сравнения: Llama 3.3 8B потребует минимум 8 ГБ RAM только под веса, не считая самого вывода.
| Модель | Параметры | Контекст | Минимум RAM | Скорость на SD 8 Gen 2 |
|---|---|---|---|---|
| LFM2 2.6B-Exp | 2.6B | 32K | ~4 ГБ | 40-50 токенов/с |
| Llama 3.2 3B | 3B | 128K | ~5 ГБ | 25-35 токенов/с |
| Phi-3 Mini | 3.8B | 128K | ~6 ГБ | 20-30 токенов/с |
Подготовка: Termux и зависимости
Забудьте про магазинные клиенты типа LM Studio для Android. Они медленные, ограниченные и часто сломаны. Мы будем собирать llama.cpp из исходников — это единственный способ выжать максимум из железа.
1Ставим Termux (правильно)
Не качайте Termux из Google Play. Там версия 2020 года, которая не обновляется. Идите на F-Droid и ставьте Termux от Fredrik Fornwall. Это критически важно — старый Termux сломается на этапе компиляции.
termux-setup-storage. Без этого не скачаете модель.2Обновляем пакеты и ставим компилятор
Открываем Termux и выполняем:
pkg update -y && pkg upgrade -y
pkg install -y git cmake ninja build-essential
Если видите ошибку про «lock» — закройте все другие приложения, которые могут использовать хранилище. Android иногда блокирует доступ.
Собираем llama.cpp с оптимизациями
Вот здесь большинство людей теряют 50% производительности. Они клонируют репозиторий и собирают как есть, без флагов под ARM. Не делайте так.
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
mkdir build && cd build
Теперь самая важная часть — флаги компиляции. Для процессоров Snapdragon (а это 90% современных Android-флагманов) используем:
cmake .. -DCMAKE_BUILD_TYPE=Release \
-DLLAMA_METAL=OFF \
-DLLAMA_VULKAN=ON \
-DLLAMA_ARM_NEON=ON \
-DLLAMA_F16C=OFF \
-DLLAMA_AVX=OFF \
-DLLAMA_AVX2=OFF \
-DLLAMA_AVX512=OFF \
-DCMAKE_C_FLAGS="-march=armv8.2-a+dotprod+fp16"
Что здесь важно:
-DLLAMA_VULKAN=ON— включаем Vulkan для GPU-ускорения на Adreno (GPU в Snapdragon). Без этого будет только CPU, и скорость упадёт в 3-4 раза.-DLLAMA_ARM_NEON=ON— NEON инструкции для ARM. Обязательно.- Флаги AVX/AVX2 выключаем — это инструкции Intel, на ARM они не работают, но почему-то часто включаются по умолчанию.
Компилируем:
cmake --build . --config Release -j$(nproc)
Процесс займёт 10-15 минут. Телефон нагреется — это нормально. Если сборка падает с ошибкой памяти, закройте все другие приложения. В крайнем случае, уменьшите количество потоков: -j2 вместо -j$(nproc).
Если у вас телефон с процессором MediaTek или Exynos, Vulkan может работать нестабильно. Попробуйте собрать без -DLLAMA_VULKAN=ON, но тогда готовьтесь к скорости 10-15 токенов в секунду вместо 40+.
Качаем и конвертируем модель
Официальные веса LFM2 2.6B-Exp в формате GGUF можно найти на Hugging Face. Ищите по названию «LFM2-2.6B-Exp-GGUF». Нам нужна квантованная версия — Q4_K_M или Q5_K_M. Q4 быстрее, Q5 немного качественнее.
cd ~/storage/downloads
# Скачиваем модель (примерный путь, уточните актуальный)
wget https://huggingface.co/username/LFM2-2.6B-Exp-GGUF/resolve/main/LFM2-2.6B-Exp-Q4_K_M.gguf
Перемещаем модель и бинарник llama.cpp в удобное место:
mkdir ~/llama-android
cp ~/llama.cpp/build/bin/main ~/llama-android/
cp ~/storage/downloads/LFM2-2.6B-Exp-Q4_K_M.gguf ~/llama-android/
cd ~/llama-android
Волшебные флаги запуска: как добиться 40+ токенов/с
Теперь самое интересное. Запустить модель можно и так:
./main -m LFM2-2.6B-Exp-Q4_K_M.gguf -p "Hello" -n 100
И вы получите... 8-10 токенов в секунду. Позорно. Потому что по умолчанию llama.cpp использует только CPU и не оптимизирует KV cache.
Вот правильная команда для Snapdragon 8 Gen 2/3 с Adreno GPU:
./main -m LFM2-2.6B-Exp-Q4_K_M.gguf \
-p "Твой промпт здесь" \
-n 512 \
-t 6 \
-ngl 99 \
-c 32768 \
-b 512 \
--mlock \
--no-mmap \
--temp 0.7 \
--top-k 40 \
--top-p 0.95 \
--repeat-penalty 1.1
Разберём по косточкам:
-t 6— количество потоков CPU. На 8-ядерном процессоре ставьте 6, оставьте 2 ядра системе.-ngl 99— ВСЕ слои на GPU. Критически важно для скорости. Если модель не влезает в память GPU, уменьшайте число (например, 64).-c 32768— максимальный контекст. LFM2 поддерживает 32K, но если не планируете работать с огромными текстами, можно уменьшить до 8192 для экономии памяти.-b 512— размер batch. Больше = быстрее, но больше потребление памяти. 512 — оптимально для 8 ГБ RAM.--mlock --no-mmap— удерживаем модель в оперативной памяти. Без этого Android начнёт выгружать части модели в своп, и скорость упадёт в разы.
--temp, --top-k, --top-p) сильно влияют на качество текста. Для творческих задач temp 0.8-0.9, для точных ответов — 0.1-0.3.Альтернативы: если не хочется возиться с Termux
Понимаю, компиляция из исходников — не для всех. Есть более простые варианты, но с компромиссами.
PocketPal AI (бывший llama.cpp Android)
Готовое приложение на Google Play. Просто качаете, загружаете GGUF-файл и работаете. Плюсы: удобный интерфейс, история диалогов. Минусы: скорость на 20-30% ниже самосборки, меньше контроля над параметрами.
Предсобранные бинарники
В некоторых Telegram-каналах выкладывают готовые бинарники llama.cpp для Android. Рискованно (может быть вирус), но работает. Если решитесь — проверяйте хэши.
RPC-сервер и управление с ПК
Запускаете llama.cpp в режиме RPC-сервера на телефоне, а подключаетесь с компьютера через клиент. Так можно использовать мощь телефона, но с удобным интерфейсом на большом экране. Подробности в статье про llama.cpp RPC-server.
Что делать, если всё тормозит
Ситуации бывают разные. Вот частые проблемы и решения:
- Модель не загружается, ошибка памяти: Уменьшайте
-ngl(попробуйте 32, потом 64). Закройте все другие приложения. Перезагрузите телефон перед запуском. - Скорость 5-10 токенов/с: Скорее всего, Vulkan не работает. Проверьте, что собрали с
-DLLAMA_VULKAN=ON. Или у вас MediaTek/Exynos — тогда это предел. - Телефон перегревается и троттлит: Снижайте
-tдо 4. Поставьте телефон на холодную поверхность. В крайнем случае — купите активный кулер для смартфона (да, такие есть). - Текст получается бессвязным: Поиграйте с параметрами сэмплера. Уменьшите
--tempдо 0.3, увеличьте--repeat-penaltyдо 1.3.
Для кого этот способ, а кому лучше не стоит
Этот гайд — для тех, кто:
- Хочет иметь LLM всегда под рукой без интернета
- Готов потратить час на настройку ради максимальной производительности
- Имеет Android-флагман последних 2-3 лет (Snapdragon 8+ Gen 1 или новее)
Не стоит заморачиваться, если:
- У вас iPhone — там всё проще через MLX, но это совсем другая история
- Телефон с 4 ГБ RAM — будет больно
- Нужна просто поиграться — качайте готовое приложение
Интересный побочный эффект: настроив один раз LFM2 на телефоне, вы поймёте принципы оптимизации llama.cpp для любого железа. Те же флаги (с поправкой на архитектуру) работают и на серверах, и на старых ПК, и даже в LXC-контейнерах Proxmox.
Что дальше? Попробуйте подключить к llama.cpp на телефоне ISON вместо JSON для структурированных ответов. Или используйте телефон как вычислительный узел в распределённой системе из нескольких устройств.
Самый неочевидный совет в конце: после настройки сделайте полный бэкап Termux через termux-backup. Когда через месяц Android решит «оптимизировать» фоновые процессы и удалит кэш, восстановить всё из бэкапа будет проще, чем объяснять жене, зачем вы снова три часа копаетесь в телефоне.