Запуск ИИ на мобильных телефонах локально. Подготовка Android для запуска нейросетей [ЧЕРНОВИК]

Оглавление

1. Как использовать ИИ на телефоне без интернета

2. На что можно рассчитывать при локальном запуске ИИ на телефоне? Насколько мощные телефоны для нейросетей?

3. Установка Termux

4. Основы использования Termux

5. Подключение к телефону по SSH (опционально)

5.1 Включение SSH в Termux

5.2 Подключение к телефону по SSH в локальной сети

5.3 Подключение к телефону по SSH с использованием Debug Mode

6. Установка программ в Termux для запуск ИИ на телефоне

7. Настройка Termux и телефона для локального запуска ИИ

7.1 Включение No restrictions для использования батареи

7.2 Включение доступа из Termux к общему файловому хранилищу

7.3 Включение опции «Disable child process restrictions»

7.4 Увеличение размера файла подкачки (SWAP) на телефоне

8. Установка настоящего Linux в Termux

9. Настройка Linux на телефоне для работы с локальными нейросетями

9.1 Установка базовых пакетов для запуск ИИ на телефоне

9.2 Включение доступа из Linux к общему файловому хранилищу

9.3 CPU версии torch, torchvision, torchaudio и torchcodec для телефона

10. Как проверить Vulkan в Termux

11. Как проверить NPU, Hexagon Tensor Processor / HTP в Termux

12. Компиляция llama.cp в Termux

12.1 Компиляция последней версии llama.cp с оптимизациями CPU в Termux

12.2 Компиляция последней версии llama.cp с поддержкой Vulkan в Termux

12.3 Компиляция последней версии llama.cp с поддержкой NPU, Hexagon Tensor Processor / HTP в Termux

12.4 Скрипт для автоматизации компиляции llama.cp на Android

12.5 Бенчмарки для выбора лучшего бэкэнда для llama.cp на Android

13. Примеры запуска локальных ИИ на телефоне Andoid

13.1 Запуск на телефоне LLM с режимом рассуждения без цензуры (Qwen3.5-9B)

13.2 Запуск на телефоне LLM с отключённым режимом thinking без цензуры (Qwen3.5-9B, Qwen3.6-35B-A3B)

13.3 Запуск на телефоне локального ИИ переводчика (Hy-MT2)

13.4 Запуск на телефоне локального Audio Separator

13.5 Запуск на телефоне локального ИИ для OCR с распознаванием рукописного текста (HunyuanOCR)

13.6 Запуск и использование ComfyUI на Android

13.7

13.8

13.9

13.10

Как удалить Termux


1. Как использовать ИИ на телефоне без интернета

Сначала давайте проясним, чем именно мы здесь будем заниматься.

Понятно, что на каждом современном телефоне уже (принудительно) внедрены те или иные ИИ функции — большая часть из них использует сторонние онлайн сервисы (иногда даже вопреки обещаниям что это локальная функция), что-то действительно выполняется исключительно локально (например, обработка фотографий на этапе съёмки; но это нужно отличать от ИИ функций в редакторе изображений, которые всё равно используют сторонние онлайн сервисы). Обобщённо это можно назвать ИИ функциями от производителя телефона и к данной инструкции это не имеет отношения.

Многие популярные закрытые ИИ которые доступны бесплатно онлайн также имеют свои приложения: Gemini, Gemini Notebook, Copilot, Perplexity, Claude и прочие — это всё также не имеет к данной инструкции никакого отношения.

Затем идут приложения из Play Store которые обещают нам именно локальный запуск, пример таких приложений:

  • LM Playground
  • AnythingLLM
  • PocketPal Ai
  • Personal LLM
  • LLM AI Server with llama.cpp
  • LLM Hub — Local AI Assistant
  • LocalAI: Offline AI Chat LLM
  • LLM Studio: AI Chat Assistant (не бесплатно, стоит 1 доллар)
  • Honey LLM — Offline AI
  • Offline LLM

У меня не хватило терпения попробовать их все, но сразу бросились в глаза следующие ограничения:

  • ограниченный набор моделей (например, у некоторых буквально 3 варианта: лёгкая, сбалансированная и тяжёлая модель)
  • нельзя быть до конца уверенным, что соблюдается приватность: даже если приложение действительно запускает модели локально (что требует ресурсов), теоретически ничто не запрещает приложению отправить вашу беседу куда-то онлайн немедленно после генерации или сразу после подключения телефона к интернету (что вообще не требует ресурсов)
  • приложение просто не работает — не редкость
  • там есть реклама (наверное)

В общем, я предлагаю более типичный для HackWare.ru путь который в конечном счёте нам позволит:

  • запускать широкий круг моделей (ограничения всё равно есть — не все бэкэнды поддерживаются и не на всё может хватить ресурсов, но в любом случае это больше, чем предлагают авторы упомянутых выше приложений)
  • быть уверенным в полной приватности — исчезает прослойка в виде приложения с закрытым исходным кодом
  • все перечисленные выше приложения для локального запуска ИИ в качестве бэкэнда используют llama.cpp, мы можем запускать приложения не ограничиваясь llama.cpp
  • root не нужен
  • мы будем использовать возможности современного мобильного CPU на полную: мы можем запускать нейросети на обычных ядрах CPU, на его графических ядрах или на нейроядрах (NPU) — такого выбора я точно не встречал ни в одной программе

Обратной стороной этого является необходимость разбираться и настраивать, что сложнее чем установить готовую программу. Настройка требует работы с командной строкой (это в телефоне, если что), но потраченные усилия определённого этого стоят.

2. На что можно рассчитывать при локальном запуске ИИ на телефоне? Насколько мощные телефоны для нейросетей?

В целом ситуация примерно следующая: самые дорогие и мощные современные флагманские модели телефонов почти дотягивают до средне-мощных компьютеров 8-9 летней давности (Intel i7, NVIDIA 1050 Ti, 32 GB RAM немного лучше Xiaomi 17 Ultra с Qualcomm Snapdragon 8 Elite Gen 5 + Adreno 840 + 16 GB RAM + 16 GB SWAP).

Современный хороший телефон не так безнадёжен для запуска локальных ИИ как это может показаться на первый взгляд. Для многих моделей имеются младшие версии и сильно квантованные варианты — и это именно то, что нужно для телефонов. При этом не надо думать что результат будет совсем плохим — напротив, современные модели даже с относительно небольшим количеством параметров показывают удивительно сильные результаты. Что касается квантования (квантизации), то здесь тоже мысль не стоит на месте — современные методы квантования в целом очень неплохо сохраняют исходное качество.

В общем, вполне возможно на мобильном устройстве получить функционал современных нейросетей: абсолютно автономно, без зависимости от каких-либо сервисов и даже без интернета. Да, это не уровень современных мощных компьютеров с топовыми дискретными картами — но всё равно это удивительно, что сегодня мы можем получить локально работающие довольно мощные нейросети прямо на телефоне. Будущее наступило.

Ещё один плюс мобильных телефонов: отличная производительность на количество потраченной энергии — в этом они сильно обгоняют компьютеры.

Для наглядности, несколько бенчмарков на упомянутом железе. Для начала старый ноутбук с NVIDIA GeForce GTX 1050 Ti:

В этом выводе ключевыми являются цифры 804 и 43 (чем больше, тем лучше). При этом если модель получает относительно небольшой ввод и генерирует большой вывод (типично для LLM моделей), то вторая цифра важнее — она показывает именно скорость генерации, в то время как первая цифра показывает скорость обработки входных данных.

Примечание: важность скорости обработки входных данных резко повышается для мультимодальных моделей в которые подаётся картинка для обработки, в OCR задачах и даже в обычных текстовых задачах когда на входе подаётся большой объём данных.

А это точно такой же бенчмарк с той же самой моделью запущенный на Xiaomi 17 Ultra (используется центральный процессор):

Теперь мы получили 113 и 37 против 804 и 43 полученных на старой видеокарте. Вторая (более важная скорость) лишь немного недотягивает до ноутбука из прошлого.

Можно поэксперементировать с бэкэндами, например, на том же Xiaomi 17 Ultra при использовании Vulkan который задействует графический процессор этого телефона, можно получить такие цифры:

То есть скорость обработки входных данных 204 (возросла почти в 2 раза), а скорость генерации 26 (более важная скорость уменьшилась).

Современные процессоры телефонов могут иметь NPU (Neural Processing Unit) — это специализированный вычислительный ускоритель, предназначенный прежде всего для операций, характерных для нейросетей. Применительно к Qualcomm Snapdragon это называется Hexagon Tensor Processor / HTP.

Комбинированное использование GPU и HTP кратно повышает скорость обработки входных данных (почти в 2.5 раза по сравнению с CPU и на 35% по сравнению с одним только GPU), хотя скорость генерации новых токенов всё ещё уступает CPU:

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

И для сравнения бенчмарк этой же нейросети на современной NVIDIA GeForce RTX 5080 Laptop GPU. На первый взгляд скорости 18115 и 386 очень впечатляют, хотя если принять во внимание, что скорость генерации возросла менее чем в 10 раз по сравнению с младшей моделью за 4 поколения и примерно 9 лет после выхода NVIDIA GeForce GTX 1050 Ti, то, честно говоря, это уже не так впечатляет:

На самом деле сравнивать мобильный телефон без выделенной видеокарты с устройствами с выделенной видеокартой не совсем честно. Поэтому вот сравнение с современным очень хорошим центральным процессором AMD Ryzen 9 9955HX3D 16-Core Processor (Zen 5 · 16 ядер / 32 потока):

Цифры 798 и 48 довольно близки к результату NVIDIA GeForce GTX 1050 Ti (804 и 43). Напомню, на телефоне мы получили 113 и 37 — если сравнивать вторую (более важную цифру в большинстве сценариев использования), то все эти 3 устройства довольно близки.

Надо отметить, что Hy-MT2-1.8B-Q4_K_M.gguf это весьма маленькая модель и нужно сделать сравнение этих платформ на более крупной модели, например, Qwen3.5-9B-Uncensored-HauhauCS-Aggressive-Q4_K_M.gguf. Как вы можете видеть из названия, эта модель на 9B параметров размером 5.3G. С такими характеристиками модель уже подходит к границе комфортной работы с моделями на мобильном телефоне: выше этого модель будет работать совсем медленно или может не запуститься вовсе.

Телефон (CPU):

Телефон (GPU и HTP):

Старый компьютер:

Современный CPU:

Новый ноутбук (просто для общей информации):

Итак: в плане запуска локальных ИИ небольшого размера, при генерации новых токенов современный телефон лишь немного хуже старой видеокарты и немного хуже современного, очень хорошего центрального процессора.

3. Установка Termux

Termux – это приложение для Android, которое предоставляет эмулятор терминала, собственный менеджер пакетов и среду выполнения консольных Unix-приложений, собранных для среды Termux.

Работа с нейросетями на Android всегда будет начинаться с запуска Termux, поэтому это обязательный шаг.

Пакет Termux можно установить из двух официальных источников и эти две установки не являются полностью равнозначными. На самом деле на этом не хотелось бы сильно заострять внимание поскольку напрямую к ИИ это не имеет отношение, поэтому очень кратко.

Termux имеет 2 ветки:

1) устанавливаемую через Play Store

2) устанавливаемую через F-Droid или через APK файл

Очевидно, что через Play Store устанавливать удобнее — это плюс. Ещё плюс в том, что в последнее время обновления для данной версии выходят чаще и, вроде бы, добавляются новые функции. Минус этой версии в том, что пакеты для неё обновляются довольно редко. Например, на момент написания llama.cpp не обновлялась 3 месяца, примерно с момента выхода новой версии Termux в Play Store.

Вариант установки через F-Droid или через APK файл в качестве плюса имеет следующее: пакеты в репозитории обновляются быстро по мере выхода новых версий. Минусы: прежде всего само неудобство установки из APK файла — вам нужно таким образом либо установить F-Droid и в нём найти Termux, либо просто напрямую установить Termux из APK файла.

Напомню, что установка сторонних APK сейчас по умолчанию отключена, включение требует самостоятельно найти этот пункт и пройти через угрожающее предупреждение — а с 2027 года эту будет сделать ещё сложнее, например, период ожидания перед включением этой опции будет увеличен с 10 секунд как сейчас до 24 часов (https://keepandroidopen.org/).

И ещё один минус — F-Droid версия на момент написания не обновлялась больше года.

Я не буду вам советовать выбирать конкретную версию — решайте сами. Я несколько месяцев работал с Termux из Play Store, я ждал обновления llama.cpp пока мне это не надоело и я не научился его компилировать (компилированная версия всё равно лучше, так как делает оптимизации под конкретный CPU).

Сейчас я перешёл на версию из APK файла — там действительно регулярно появляется свежие версии llama.cpp и других пакетов, но как я уже сказал, я всё равно компилирую llama.cpp из исходного кода прямо на телефоне, поэтому вроде как всё-равно. Но я могу быть уверен, что если для компиляции llama.cpp понадобится новая версия зависимости, я получу это простым обновлением системных пакетов.

Ссылки:

Это APK файлы для установки Termux напрямую:

Это исходный код Play Store версии Termux и файлов участвующих в подготовке пакетов для её репозитория:

Это исходный код обычной версии Termux и файлов участвующих в подготовке пакетов для её репозитория:

В F-Droid по слову «Termux» находится много всяких пакетов, вам нужен пакет который называется «Termux Terminal emulator with packages»:

4. Основы использования Termux

 

 

 

 

5. Подключение к телефону по SSH (опционально)

Хотя мы начали с упором на автономность телефона, на этапе настройки нам нужно ввести довольно много команд. Если вы работаете только с телефоном, то чтобы ускорить процесс копируйте их из инструкции и вставляйте их в консоль Termux.

Если вы находитесь рядом с компьютером, то вы можете подключиться к телефону по SSH и очень удобно отправлять команды на него с компьютера.

Я покажу примеры, когда телефон и компьютер:

1) находятся в локальной сети

2) соединены между собой кабелем

5.1 Включение SSH в Termux

1. Установите пакет OpenSSH:

pkg install openssh

2. Задайте пароль для вашего пользователя (он потребуется при подключении):

passwd

Введите и подтвердите пароль. Символы при вводе отображаться не будут.

3. Узнайте имя пользователя.

Имя пользователя в Termux можно узнать, введя команду

whoami

Как правило, это строка вида u0_a….

Предыдущие команды нужно выполнить только один раз.

4. Запустите SSH-сервер (эту команду нужно выполнять перед каждым подключением если вы вышли из Termux):

sshd

Это универсальные шаги которые нужно выполнить при любом способе подключения по SSH.

5.2 Подключение к телефону по SSH в локальной сети

1. Узнайте IP-адрес вашего устройства (в локальной сети):

ifconfig

Ищите IPv4-адрес, который обычно начинается с 192.168.x.x.

2. Подключитесь с компьютера (или другого устройства):

ssh ИМЯ_ПОЛЬЗОВАТЕЛЯ@IP_ВАШЕГО_ТЕЛЕФОНА -p 8022 -o IdentitiesOnly=yes

Служба будет работать до выхода из Termux.

Как вы можете видеть на скриншоте, IP моего телефона 192.168.1.104, а имя пользователя u0_a487, тогда команда должна быть такой:

ssh u0_a487@192.168.1.104 -p 8022 -o IdentitiesOnly=yes

При самом первом подключении вам нужно ввести «yes».

Если вы получили ошибку:

Received disconnect from 192.168.1.104 port 8022:2: Too many authentication failures
Disconnected from 192.168.1.104 port 8022

То добавьте к команде подключения опцию -o IdentitiesOnly=yes как это показано выше.

Этот спсоб подходит если телефон и компьютер, с которого вы подсоединяетесь по SSH, подключены к одному роутеру. Если нет, то вам подойдёт следующий вариант.

5.3 Подключение к телефону по SSH с использованием Debug Mode

Предыдущий способ управления телефоном с компьютера хотя и кажется удобным, на практике в версии Play Store у меня вызвал следующую проблему: задержки и потери пакетов создают ощущение, что телефон где-то очень далеко — даже не на другом континенте, а где-то уже на другой планете. Я пытался бороться с этим разными методами: например, для предотвращения перехода Wi-Fi в энергосберегающий режим я запускал вторую сессию Termux и запускал там бесконечный пинг до роутера. Я настроил Termux не переходить в режим энергосбережения и пробовал другие команды и способы. В общем, проблемы с отвратительным качества подключения к SSH на телефоне мне решить не удалось вплоть до перехода на версию с F-Droid, где эта проблема просто не существует.

Если у вас нет подобной проблемы, то просто пользуйтесь предыдущим методом.

Если у вас аналогичная ситуация и телефон в любом случае лежит перед вами, то можно использовать подключение телефона по кабелю с Android Platform Tools.

Для работы Android Platform Tools необходима включённая опция «Отладка по USB» (USB Debugging). В целом затраченные усилия стоят этой дополнительной настройки если у вас описанные выше проблемы с SSH или у вас телефон и компьютер не находятся в одной локальной сети.

Примечание: некоторые приложения (обычно банковские, но могут быть любые другие рандомные приложения тоже — зависит от их разработчика) могут отказаться запускаться при включённой «Отладка по USB» (USB Debugging). В таких случаях можно отключаь эту опцию на время запумка проблемного приложения. Или наоборот держать эту опциюю отключенной и включать её по мере необходимости.

Примечание 2: хотя в этой статье мы будем использовать кросскомпиляцию и, в теории, «Отладка по USB» (USB Debugging) может использоваться для удобной установки пакетов на телефон которые мы скомпилировали на компьютере, мы не будем этим пользоваться, поскольку для наших целей мы будем делать установку в Termux другим способом. То есть «Отладка по USB» (USB Debugging) нам больше ни для чего не понадобится кроме как подключаться к SSH используя кабель.

На телефоне вам нужно перейти в Опции разработчика (Developer options).

У меня они оказались включены, если что, они включаются многократным тапом по версии ОС.

Затем нужно найти опцию USB Debugging и включить её

Появится страшное сообщение.

Дождитесь когда появится возможность поставить галочку и нажмите OK.

Теперь телефон готов.

На компьютере необходимо установить Android Platform Tool.

Установка Android Platform Tool на Linux:

  • Debian, Kali Linux, Linux Mint, Ubuntu
sudo apt update
sudo apt install android-sdk-platform-tools
  • Arch Linux
sudo pacman -S android-tools
  • Fedora
sudo dnf install android-tools
  • openSUSE
sudo zypper install android-tools
  • Alpine Linux
sudo apk add android-tools

Проверить установку:

adb version

Затем подключите телефон к компьютеру — при первом подключении на телефоне нужно одобрить отладку по USB для данного устройства (просто нажмите OK):

Для проверки, что всё в порядке, на компьютере выполните команду:

adb devices

Если там будет присутствовать строка «unauthorized», значит на телефоне вам нужно включить «Allow USB debugging» для этого устройства:

List of devices attached
651d8474	unauthorized

Если всё в порядке, то вы увидите что-то вроде такого:

List of devices attached
651d8474	device

Выполните следующую команду для переадресации портов:

adb forward tcp:8022 tcp:8022

Примечание: если вы видите следующие информационные сообщения, то это нормально:

* daemon not running; starting now at tcp:5037
* daemon started successfully

Команда для подключения к Termux по SSH теперь имеет следующие вид:

ssh ИМЯ_ПОЛЬЗОВАТЕЛЯ@localhost -p 8022 -o IdentitiesOnly=yes

То есть вместо IP телефона в локальной сети теперь всегда указывается «localhost».

Напомню, имя пользователя вы можете узнать запустив в Termux:

whoami

Пример команды подключения для пользователя u0_a487:

ssh u0_a487@localhost -p 8022 -o IdentitiesOnly=yes

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

     

6. Установка программ в Termux для запуск ИИ на телефоне

В Termux на этом этапе установите буквально пару пакетов:

pkg install llama-cpp ollama

Также имеются версии с поддержкой других бэкэндов:

llama-cpp-backend-vulkan
llama-cpp-backend-opencl
ollama-backend-vulkan

Версия с поддержкой Vulkan не обязательно будет работать быстрее и имеет другие неочевидные отличия: может требовать больше памяти по сравнению с бэкэндом CPU и для больших моделей будет вылетать на этапе загрузки моделей.

На самом деле, очень подробно про llama.cpp и выбор бэкэнда мы поговорим в этой же статье ниже — всё-таки llama.cpp имеет важнейшее значение для локального запуска ИИ. Пока просто отметим: самый простой и беспроблемный способ получить llama.cpp на телефоне — просто установите пакет llama-cpp. Не гонитесь за поддержкой Vulkan не сделав сравнительных тестов.

Для того, чтобы программы могли использовать Vulkan, установите следующие пакеты:

pkg install mesa-vulkan-icd-freedreno vulkan-tools vulkan-loader

7. Настройка Termux и телефона для локального запуска ИИ

7.1 Включение No restrictions для использования батареи

Во время локального запуска ИИ на телефоне важно, чтобы телефон не переходил в глубокий сон.

В Termux это можно включить сразу двумя способами.

В шторке телефона вы можете нажать Acquire wakelock:

Либо в командной строке запустите:

termux-wake-lock

Оба эти варианта имеют одинаковый эффект, но при самом первом запуске откроется окно настроек:

В нём нужно переключиться с «Bettery saver» на «No restrictions».

Это позволит процессам внутри Termux работать даже если погаснет экран.

Данная команда действует до закрытия сессии Termux.

Тем не менее, если вы хотите отменить действие этой команды (снять Wake Lock) до закрытия Termux, то выполните:

termux-wake-unlock

Во время работы, нейросети очень прожорливы на электроэнергию:

7.2 Включение доступа из Termux к общему файловому хранилищу

Немного теории о том, как Termux работает с файловой системой. На самом деле здесь всё так же как и у других приложений: у Termux есть своя постоянная память, отделённая от тругих программ. Вы вполне можете довольствоваться ею: устанавливать туда серверный код нейросетей, скачивать веса моделей нейросетей и прочее. Содержимое внутренней памяти Termux удаляется при удалении приложения Termux.

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

Если вы хотите чтобы Termux имел доступ к общей файловой системе, то выполните команду:

termux-setup-storage

Эта команда создаёт ссылки на пользовательские директории. Это облегчает работу с файловой системой, то есть вы можете обмениваться данными между хранилищем Termux и доступными вам папками. Эту команду достаточно ввести один раз.

Termux запросит разрешения на доступ к файлам. Причём для версии Termux из Play Store и версии установленной из APK файла имеются различия:

Если вы используете версию Termux из Play Store, то при первом запуске Termux запросит включить настройку «Allow access to manage all files» — без неё доступ в общее хранилище работать не будет.

Для версии установленной из APK файла будет сделан запрос «Allow Termux to access photos, videos, music, audio, and other files on this device».

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

При желании, вы можете изменить эту настройку (например, проверить или отозвать разрешения) по какому-то из этих путей:

  • Settings → Security & Privacy → More security & privacy → Special permissions → All file access → Termux.
  • Settings → Apps → Termux → Permissions → Files and media → Allow access to manage all files.
  • Settings → Apps → Termux → App permissions → Files

Команда termux-setup-storage создаёт ~/storage с ссылками на следующие каталоги:

dcim -> /storage/emulated/0/DCIM
downloads -> /storage/emulated/0/Download
movies -> /storage/emulated/0/Movies
music -> /storage/emulated/0/Music
pictures -> /storage/emulated/0/Pictures
shared -> /storage/emulated/0

Основное хранилище доступно по адресу /storage/emulated/0 или ~/storage/shared/.

К примеру, в Internal shared storage, который доступен при подключении телефона к компьютеру, я создал папку AI.

И в эту папку я могу обращаться (например, для копирования новых версий файлов) по пути /storage/emulated/0/AI.

Я долго с этим работал пока меня вся эта система не утомила — путь /storage/emulated/0/AI я так и не запомнил, а искать его каждый раз когда он нужен мне надоело.

В конце концов я сделал так:

ln -s /data/data/com.termux/files/home/storage/shared/AI ./AI

И теперь содержимое упоминавшейся ранее папки AI стало доступно в Termux по пути AI (или ~/AI если вы в не домашней директории). И уже такой-то путь я наконец запомнил.

Я думаю вы согласитесь со мной, что «AI» запомнить проще чем «/storage/emulated/0/AI». Поэтому тоже так сделайте, для облегчения доступа к общему хранилищу.

Раз зашла речь о путях, то все следующие пути ведут в одно место:

/sdcard/AI/
/data/data/com.termux/files/home/storage/shared/AI
/storage/self/primary/AI
/storage/emulated/0/AI
/mnt/sdcard/AI
$HOME/storage/shared/AI

Поэтому если какой-то из них для вас не работает, то используйте другой.

7.3 Включение опции «Disable child process restrictions»

Начиная с Android 12, система стала гораздо агрессивнее контролировать процессы, которые приложение запускает в фоне. Это особенно касается приложений вроде Termux, Linux-окружений, серверов, компиляторов и виртуальных машин.

Настройка «Disable child process restrictions» снимает ограничения на использование системных ресурсов дочерними процессами. Эта настройка находится в Инструментах разработчика.

Не могу назвать эту настройку критически важной, но если ваш телефон агрессивно закрывает процессы, то во-первых включите No restrictions для использования батареи в разрешениях Termux и активируйте Acquire wakelock. Ну и если этого недостаточно, то попробуйте включить и эту настройку. У меня эта настройка включена (но если честно я не заметил какого-либо эффекта от неё).

7.4 Увеличение размера файла подкачки (SWAP) на телефоне

Эта настройка может присутствовать не на всех телефонах — может зависеть от производителя и конкретной модели.

По сути, это функция оболочки производителя, которая использует часть внутреннего накопителя как дополнительную виртуальную память (swap/zRAM или близкий механизм).

У разных производителей может называться по-разному:

  • Samsung — RAM Plus
  • Xiaomi / Redmi / POCO — Memory extension
  • OPPO / OnePlus — RAM Expansion
  • vivo — Extended RAM
  • realme — Dynamic RAM Expansion

у Google Pixel и некоторых других моделей отдельного пользовательского переключателя такой функции может не быть.

В моих текстах я вижу, что раздел SWAP действительно задействуется. Эта настройка не ускоряет телефон, но она иногда помогает программам не завершаться аварийно в случае нехватки оперативной памяти.

Плата за Memory extension — в постоянном хранилище будет занято пространство, соответствующее размеру на который увеличена память.

Я покажу как это включить и проверить на примере моего телефона. Как можно увидеть, доступно 16 GB RAM + 6 GB — вторая цифра в моём случае это включенный по умолчанию Memory extension. И я хочу увеличить этот размер ещё больше.

Переходим в Settings → Additional settings:

Затем в Memory extension:

Выбираем новое значение:

Чтобы изменение вступило в силу, телефон нужно перезагрузить:

После перезагрузки действительно используется новое значение:

Также это можно видеть в свойствах телефона:

Пример интенсивного использования Swap на телефоне:

Забегая вперёд скажу, что увеличение раздела подкачки не единственный и даже не самый лучший способ предотвратить аварийное завершение программы из-за нехватки RAM. При грамотном использовании хорошо себя показывает mmap (memory mapping). Если сильно упростить, файл модели отображается в виртуальную память процесса, а его страницы подгружаются из постоянного хранилища по мере необходимости. ОС может освобождать неиспользуемые страницы из RAM и впоследствии снова читать их с диска. Это позволяет работать с большими моделями при ограниченном объёме RAM, но при активной нехватке памяти может существенно снизить производительность из-за дополнительного чтения с диска.

Ещё проще: то есть вместо того чтобы сначала считывать файл в оперативную память, а затем при нехватке памяти выгружать его в Swap (фактически в то же самое постоянное хранилище), используется техника когда файл вообще не читается с диска, а в оперативную память подгружаются его части по мере необходимости. Причём если оперативной памяти хватает, они так и остаются в ней (и обрабатываются быстро как любые данные в RAM). А если не хватает, то удаляются без отправки в Swap (потому что если эти удалённые части файла опять понадобятся, то они всегда могут быть считаны с дика напрямую из файла, без необходимости задействовать Swap).

При использовании mmap данные, которые лежат на диске, попадают в cached:

8. Установка настоящего Linux в Termux

Чтобы не пугать раньше времени, на самом деле я рассказал вам не всю правду — для работы нам понадобится ещё и настоящий Linux (хотя и скомпилированный специально под ARM архитектуру), который будет работать в Termux.

Обойтись только Termux не получится: возникает слишком много проблем с настройкой окружения Python в ванильном Termux.

Обойтись одним только Linux на Android без Termux тоже не получится.

Но хорошая новость в том, что связка Termux + Linux работает практически без накладных расходов и без особых потерь в производительности. Более того, Linux может пользоваться программами Termux — и пример этому будет показан ниже. То есть мы устанавливаем пакеты в Linux или Termux — туда, в зависимости от того, куда это легче установить. А потом пользуемся этим всем вместе. Возможно, сейчас это звучит запутанно, но далее будут конкретные практические примеры. На данный момент достаточно понять, что сейчас мы будем устанавливать Linux в Termux который работает на Android.

Обновите пакеты и установите PRoot:

pkg upgrade -y
pkg install wget curl proot proot-distro -y

Я рекомендую установить Arch Linux:

proot-distro install nevuly/archlinux:base-devel

Вход в установленный дистрибутив:

proot-distro login archlinux

9. Настройка Linux на телефоне для работы с локальными нейросетями

После запуска Termux, вход в Linux выполняется командой:

proot-distro login archlinux

9.1 Установка базовых пакетов для запуск ИИ на телефоне

Обновите все пакеты Arch Linux (рекомендуется это делать регулярно):

pacman -Syu

Установите следующие пакеты, которые практически наверняка понадобятся для работы с локальным ИИ:

pacman -S --needed python ffmpeg git base-devel cmake ninja curl wget git-lfs pkg-config uv

Установите Micromamba следующей командой:

curl -L micro.mamba.pm/install.sh | bash

Чтобы изменения вступили в силу выполните:

source ~/.bashrc

Чтобы сделанные изменения применялись всякий раз, когда вы входите в Arch Linux выполните (скопируйте и вставьте сразу все строки):

cat >> ~/.profile << 'EOF'
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
EOF

9.2 Включение доступа из Linux к общему файловому хранилищу

В разделе «7.2 Включение доступа из Termux к общему файловому хранилищу» описывается создание символической ссылки для удобного доступа к Internal shared storage — та часть постоянного хранилища телефона, которую мы видим в том числе подключив телефон к компьютеру. Перечитайте тот раздел ещё раз если вам что-то непонятно.

Инструкции HackWare.ru по запуску локальных ИИ на телефоне подразумевают, что в этом общем хранилище вы создали папку AI. Выше мы уже делали символическую ссылку для удобного доступа к этой папке из Termux. Теперь нам нужно сделать ещё одну символическую ссылку для удобного доступа к этой папке из Linux.

Для этого внутри Linux выполните команду:

ln -s /storage/self/primary/AI ./AI

Если вы самостоятельно устанавливаете ИИ на телефоне, то это на ваше усмотрение, делать эти символические ссылки или нет. Но некоторые из инструкций на этом сайте не будут работать без этой папке и ссылок на неё.

Примеры локальных ИИ на телефоне которые используют упомянутую папку и символические ссылки на неё:

9.3 CPU версии torch, torchvision, torchaudio и torchcodec для телефона

Пакеты torch, torchvision, torchaudio и torchcodec очень часто используются при локальном запуске ИИ. На этапе установки вы можете видеть в инструкция команда вроде таких:

pip install torch
pip install torch torchvision
pip install torch torchvision torchaudio torchcodec

Эти команды в Linux внутри Termux по умолчанию устанавливают CUDA версии пакетов. Поскольку на телефоне нет видеокарты NVIDIA и соответственно CUDA, то получается что много места занято пакетами которые никогда не будут использоваться. И хотя такой вариант пакета всё равно может работать на устройствах без видеокарты, кроме излишне занимаемого места при импорте пакета

import torch

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

Следующая команда устанавливает версии только для CPU — что для телефона именно то, что нужно:

pip install torch torchvision torchaudio torchcodec --index-url https://download.pytorch.org/whl/cpu

В результате количество места занимаемое этими пакетами падает с 5.5G до 1.1G, а количество потребляемой памяти сразу после импорта torch падает примерно в 1.5 раза.

То есть рекомендуется адаптировать команды установки выбирая версию только для CPU при настройки окружений Python на телефоне.

12. Компиляция llama.cp в Termux

12.1 Компиляция последней версии llama.cp с оптимизациями CPU в Termux

Установите зависимости:

pkg update
pkg install git cmake build-essential ninja

Скачайте исходный код:

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

Выполните следующие команды для компиляции:

cd llama.cpp
mkdir build && cd build
cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release -DGGML_NATIVE=ON -DGGML_OPENMP=ON -DGGML_CPU_REPACK=ON -DGGML_CPU_KLEIDIAI=ON -DLLAMA_BUILD_TESTS=OFF
ninja

После окончания компиляции исполнимые файлы будут в директории bin.

12.2 Компиляция последней версии llama.cp с поддержкой Vulkan в Termux

Установите зависимости:

pkg install build-essential clang cmake ninja git vulkan-headers spirv-headers shaderc mesa-vulkan-icd-freedreno vulkan-tools vulkan-loader

Скачайте исходный код:

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

Выполните следующие команды для компиляции:

mkdir build_vulkan && cd build_vulkan
cmake .. -G Ninja -DGGML_VULKAN=ON -DCMAKE_BUILD_TYPE=Release -DGGML_NATIVE=ON -DGGML_OPENMP=ON -DGGML_CPU_REPACK=ON -DGGML_CPU_KLEIDIAI=ON -DLLAMA_BUILD_TESTS=OFF
ninja

После окончания компиляции исполнимые файлы будут в директории bin.

Примечание: чтобы вручную не вставлять команды и не применять патч, вы можете воспользоваться разделом «12.4 Скрипт для автоматизации компиляции llama.cp на Android» — там всё это автоматизировано.

12.3 Компиляция последней версии llama.cp с поддержкой NPU, Hexagon Tensor Processor / HTP в Termux


 

12.4 Скрипт для автоматизации компиляции llama.cp на Android

 

 

13. Примеры запуска локальных ИИ на телефоне Andoid

13.1 Запуск на телефоне LLM с режимом рассуждения без цензуры (Qwen3.5-9B)

Начнём с самого простого и самого популярного — LLM моделей.

Скачайте файл модели:

wget https://huggingface.co/HauhauCS/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive/resolve/main/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive-Q8_0.gguf

Запустите:

llama-cli -m ~/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive-Q8_0.gguf -c 4096 -b 128 -t 8 --temp 0.6 --top-p 0.95 --top-k 20 --min-p 0.0 -lm mmap

Дождитесь загрузки модели, введите свой промпт. Сначала будут показаны рассуждения модели, а затем её ответ.

Видео запуска Qwen3.5-9B-Uncensored-HauhauCS-Aggressive-Q8_0.gguf на телефоне:

Эта версия модели без цензуры. Если вы хотите обычную ванильную Qwen3.5, то просто скачайте соответствующий файл.

Qwen3.5-9B работает довольно быстро и генерирует неплохие (по крайней мере сносные) ответы. Вы можете попробовать младшие модели, например, Qwen3.5-4B работает на телефоне очень быстро.

Также вы можете обратить внимание, что я использую квантование Q8_0, я пробовал эту же модель с квантованием Q4_K_M и получил следующее: иногда работает и даёт ответы не отличимые от Q8_0, а иногда в режиме размышления зацикливается и приходится прерывать генерацию.

Если вы внимательно смотрели видео, то могли заметить что во второй сессии я запускаю команду для показа используемого бэкэнда — это HTP, то есть нейроядра CPU. Да, для генерации токенов сам CPU быстрее в коротких бенчмарках, но на длинной дистанции HTP стабильнее держит скорость.

13.2 Запуск на телефоне LLM с отключённым режимом thinking без цензуры (Qwen3.5-9B, Qwen3.6-35B-A3B)

В предыдущем примере вы могли обратить внимание, что режим размышления (thinking) занял больше половины времени генерации ответа. Причём для простых задач вроде той, которая показана в примере, режим thinking скорее не нужен.

Поэтому для ситуаций «просто поговорить» этот режим можно отключать.

Пример запуска с отключённым режимом думанья:

llama-cli -m ~/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive-Q8_0.gguf -c 4096 -b 128 -t 8 --temp 0.7 --top-p 0.8 --top-k 20 --min-p 0.0 -lm mmap --chat-template-kwargs '{"enable_thinking": false}'

Видео запуска Qwen3.5-9B-Uncensored-HauhauCS-Aggressive-Q8_0.gguf на телефоне с отключённым режимом thinking:

Вы можете пробовать разные модели и найти ту, которая достаточно быстро работает на вашем телефоне и даёт качественные для ваших задач ответы.

Я попробовал несколько моделей, они все работают, но обычно всё, что размером ближе или более 10 Гб работает очень медленно:

  • Qwen3.5-9B-Uncensored-HauhauCS-Aggressive-Q4_K_M.gguf — работает быстро, иногда зацикливается
  • Qwen3.5-9B-Uncensored-HauhauCS-Aggressive-Q8_0.gguf — работает хорошо и быстро
  • Qwen3.6-27B-Uncensored-HauhauCS-Balanced-IQ2_M.gguf — медленная
  • Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-IQ2_M.gguf — медленная
  • Qwen3.8-27B-Uncensored-HauhauCS-Aggressive-IQ2_M.gguf — очень медленная и отвечает на английском хотя я делаю запрос на русском
  • Qwen3.8-27B-Uncensored-HauhauCS-Aggressive-IQ3_XS.gguf — очень медленная и отвечает на английском хотя я делаю запрос на русском

Прямые ссылки на скачивания упомянутых моделей, чтобы вам их не искать если вы хотите сделать тесты на своём телефоне:

wget https://huggingface.co/HauhauCS/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive/resolve/main/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive-Q4_K_M.gguf
wget https://huggingface.co/HauhauCS/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive/resolve/main/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive-Q8_0.gguf
wget https://huggingface.co/HauhauCS/Qwen3.6-27B-Uncensored-HauhauCS-Balanced/resolve/main/Qwen3.6-27B-Uncensored-HauhauCS-Balanced-IQ2_M.gguf
wget https://huggingface.co/HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive/resolve/main/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-IQ2_M.gguf
wget https://huggingface.co/HauhauCS/Qwen3.8-27B-Uncensored-HauhauCS-Aggressive-MTP-GGUF/resolve/main/Qwen3.8-27B-Uncensored-HauhauCS-Aggressive-IQ2_M.gguf
wget https://huggingface.co/HauhauCS/Qwen3.8-27B-Uncensored-HauhauCS-Aggressive-MTP-GGUF/resolve/main/Qwen3.8-27B-Uncensored-HauhauCS-Aggressive-IQ3_XS.gguf

Вот к примеру скриншоты запуска Qwen3.6-35B-A3B на телефоне:

Генерация заняла много времени и съела почти 20% заряда аккумулятора:

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

13.3 Запуск на телефоне локального ИИ переводчика (Hy-MT2)

Смотрите также: Локальный ИИ переводчик высочайшего качества: 33 языка (инструкция по нейросетям Hy-MT2)

В Termux войдите в Linux:

proot-distro login archlinux

Там выполните следующие команды:

micromamba create -n Hy-MT2 python -y
micromamba activate Hy-MT2
pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu
pip install transformers accelerate uvicorn fastapi pynvml requests
mkdir AI/Hy-MT2
cd AI/Hy-MT2
wget -U Chrome https://hackware.ru/files/MiAl_AI_Translation_Service.zip
unzip MiAl_AI_Translation_Service.zip

Выйдите из Linux, для этого нажмите Ctrl+d или введите команду:

exit

Затем, когда вы находитесь в Termux, скопируйте и вставьте в терминал сразу все следующие строки и нажмите Enter:

cat > Hy-MT2.sh << 'EOF'
#!/data/data/com.termux/files/usr/bin/bash

# Запретить переход устройства в сон
termux-wake-lock

# Запустить команды внутри Arch Linux через proot
proot-distro login archlinux -- bash -c "
cd /root/AI/Hy-MT2 || exit 1
source ~/.bashrc
micromamba activate Hy-MT2
uvicorn Hy-MT2:app --host localhost --port 8000
"
EOF
chmod +x Hy-MT2.sh

Теперь всё готово, локальный ИИ для перевода вы можете следующей командой в Termux:

./Hy-MT2.sh

Если вы хотите изменить, например, выбрать другую модель, то в Termux используйте редактор nano или подключите телефон к компьютеру и перейдите в папку Internal shared storage → AI → Hy-MT2.

Откройте файл Hy-MT2.py, в нём вы можете поменять ИИ модель:

MODEL = "Hy-MT2-7B-Q4_K_M.gguf"

Модель Hy-MT2-7B-Q4_K_M.gguf весьма хороша в переводе, но может быть слишком тяжёлой для некоторых устройств. Попробуйте модель Hy-MT2-1.8B-Q4_K_M.gguf — хорошо (и очень быстро) переводит короткие фрагменты, на больших фрагментах может делать ошибки.

И ещё одна настройка если у вас не хватает оперативной памяти:

GGUF_LOAD_MODE = "none"

Вместо значения none укажите mmap.

Видео запуска Hy-MT2 (модель Hy-MT2-7B-Q4_K_M.gguf) на мобильном телефоне:

13.4 Запуск на телефоне локального Audio Separator

 

13.5 Запуск на телефоне локального ИИ для OCR с распознаванием рукописного текста (HunyuanOCR)

13.6 Запуск и использование ComfyUI на Android

В Termux войдите в Linux:

proot-distro login archlinux

Там выполните следующие команды:

wget -U Chrome https://hackware.ru/files/MiAl_ComfyUI_Pack.zip
unzip MiAl_ComfyUI_Pack.zip
bash install-update-ComfyUI.sh

В Termux для запуска ComfyUI вы можете использовать одну из следующих команд:

./ComfyUI.sh
./ComfyUI-LP.sh
./ComfyUI-HP.sh

 

 

Подробности смотрите в статье «Как запустить ComfyUI на Android: подробная инструкция и подбор моделей ИИ для генерации изображений на мобильном телефоне».

 

 

 

Рекомендуется Вам:

One Comment to Запуск ИИ на мобильных телефонах локально. Подготовка Android для запуска нейросетей [ЧЕРНОВИК]

  1. Alexey:

    Ещё не всё готово, но здесь уже очень много полезного, а процесс написания может затянуться. Пользуйтесь пока тем что есть и заходите позже ещё.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *