AI и ML в мобильных приложениях: CoreML, TFLite и on-device модели
Разница между «приложением с AI» и «приложением, которое звонит в OpenAI» — принципиальная. Первое работает без интернета, не отправляет данные пользователя на сторонние серверы, и отвечает за 50 миллисекунд. Второе зависит от задержки сети и тарифного плана. Правильный выбор определяется на этапе архитектуры.
On-device инференс: когда и как
CoreML — нативный фреймворк Apple для запуска ML-моделей на устройстве. Поддерживает Neural Engine (начиная с A11 Bionic), GPU и CPU как fallback. Модели конвертируются в .mlmodel формат через coremltools из PyTorch, ONNX или TensorFlow. Конвертация — не всегда тривиальна: кастомные слои требуют написания MLCustomLayer, а квантизация до INT8 иногда заметно роняет точность на специфических данных.
TensorFlow Lite — кросс-платформенная альтернатива для Android и Flutter. На Android использует NNAPI (Neural Networks API) как хардварное ускорение — с Android 10 NNAPI стабильнее, до этого лучше явно использовать GPU delegate через GpuDelegate. Типичная ошибка: модель обучена на нормализованных данных в диапазоне [0,1], а в приложении на вход подаётся [0,255] — инференс работает, но с бессмысленными результатами без ошибки.
Для задач классификации изображений, детекции объектов и сегментации есть готовые оптимизированные модели. YOLOv8 в CoreML формате запускает детекцию 640×640 кадра за 15-20 мс на iPhone 14 Neural Engine. MobileNetV3 на TFLite с GPU delegate — около 8 мс на Pixel 7 при классификации.
On-device LLM: phi-3, Gemma и что из этого выходит
Запуск небольших языковых моделей на устройстве стал реальностью с 2024 года. Apple Intelligence использует собственные модели через Private Cloud Compute, но для сторонних разработчиков доступны другие пути.
llama.cpp с Metal backend на iOS — работающий подход для phi-3-mini (3.8B параметров, 4-bit квантизация, ~2.3GB). Инференс: 15-25 токенов/секунду на iPhone 15 Pro. Для интеграции в Swift используем Swift Package llama.swift или обёртку через C-интерфейс llama.h. Бинарник к приложению не прикладываем — модель скачивается при первом запуске и хранится в Application Support.
На Android аналог — Google AI Edge (бывший MediaPipe LLM Inference API) с поддержкой Gemma-2B. Работает через GPU delegate, на Tensor G3 чипе Pixel 8 Pro — около 20 токенов/секунду.
Ограничения реальны: модели больше 4B параметров на мобильных устройствах 2024-2025 года — медленно. Для сложных задач рассуждения on-device LLM проигрывает GPT-4o в качестве. Гибридный подход — on-device для коротких задач и приватных данных, облако для сложных запросов — часто оптимален.
Интеграция OpenAI API и других облачных моделей
Для сценариев, где cloud inference допустим, интеграция OpenAI, Anthropic или Google Gemini — это HTTP клиент + streaming SSE. В Swift удобно через AsyncThrowingStream для стриминговых ответов. В Kotlin — через Flow.
Критически важно: API-ключи никогда не хранятся в бандле приложения. Даже обфусцированный ключ извлекается из IPA за 10 минут через strings или frida. Правильная архитектура: мобильное приложение → собственный backend → OpenAI API. Backend контролирует rate limiting, логирует запросы, защищает ключ.
Типичный пайплайн проекта
Начинаем с выбора архитектуры инференса: задержка, приватность, размер модели, целевые устройства. Прототипируем модель в Python, оцениваем точность на целевых данных, затем конвертируем и тестируем на устройстве — здесь часто выясняется, что мобильная версия требует дополнительной дистилляции или квантизации.
Интеграция в приложение: модель оборачивается в сервисный слой, который скрывает детали фреймворка. Это позволяет менять CoreML на TFLite или on-device на облако без переписывания бизнес-логики.
Сроки: интеграция готовой CoreML/TFLite модели в существующее приложение — 1-2 недели. Разработка кастомной модели под задачу с мобильной оптимизацией — от 6 недель. On-device LLM чат с персонализацией — 4-8 недель.







