Offline та Online Llama: ключові сценарії
Інтеграція Llama в мобільний застосунок впирається в два питання: запускати модель локально чи через сервер? Вибір диктує всю архітектуру — від розміру бінарника до вартості підтримки. Ми пройшли цей шлях із десятками проєктів: від медичних чатів до фінансових консультантів. Нижче — технічні деталі, які зекономлять вам місяці експериментів.
Як вибрати між on-device та серверною Llama?
On-device — модель живе в пам'яті телефона, inference без інтернету. Реально для Llama 3.2 1B та 3B в INT4 квантизації. Llama 3.2 3B INT4 займає ~2 ГБ RAM і на iPhone 15 Pro видає 15–25 токенів/сек. Це варіант для застосунків із жорсткими вимогами до приватності (медичні дані не покидають пристрій) або для роботи в офлайні.
Серверна Llama — модель на вашому GPU-сервері (або орендованому), мобільний клієнт спілкується через API. Дозволяє використовувати Llama 3.3 70B або Llama 3.1 405B — повноцінні моделі, невідличні за якістю від GPT-4. Більшість комерційних проєктів обирають саме серверний підхід: простіше оновлювати модель, не обмежений розміром оперативної пам'яті.
Чому on-device все ще актуальний?
Для сценаріїв із критичною приватністю (банківські транзакції, медичні рекомендації) або при роботі в умовах нестабільного інтернету локальна модель — єдиний вихід. До того ж відпадає потреба в серверній інфраструктурі та оплаті API-запитів. Економія на серверних витратах при локальному запуску може сягати сотень тисяч гривень на місяць. Однак якість відповідей нижча через обмежені розміри моделі.
Деталі квантизації та продуктивності
On-Device Runtime: llama.cpp, Core ML, ExecuTorch
llama.cpp — найбільш зрілий runtime для GGUF-моделей. На iOS: компілюється як C++ бібліотека, викликається через Objective-C++ bridging header. На Android: через JNI. Складність — збірка під різні архітектури (arm64-v8a для сучасних, armeabi-v7a для старих). Офіційний репозиторій llama.cpp містить готові скрипти збірки.
// iOS — мінімальна обгортка над llama.cpp class LlamaContext { private var context: OpaquePointer? init(modelPath: String) { var params = llama_context_default_params() params.n_ctx = 4096 params.n_threads = 4 // менше потоків — менше нагрів let model = llama_load_model_from_file(modelPath, llama_model_default_params()) context = llama_new_context_with_model(model, params) } func generate(prompt: String, maxTokens: Int = 256) -> AsyncStream<String> { // tokenize → sample loop → detokenize } } Apple MLX / Core ML — Apple надає офіційний конвертер для Llama в Core ML формат. Перевага: Neural Engine задіюється автоматично, inference швидший і холодніший, ніж через CPU. Обмеження: тільки iOS 17+.
ExecuTorch — Facebook's runtime для мобілів, офіційно підтримує Llama 3. Складніша збірка, але краща інтеграція з Android Neural Networks API.
Порівняння on-device runtime
| Runtime | iOS | Android | Продуктивність | Складність |
|---|---|---|---|---|
| llama.cpp | + | + | Висока | Середня |
| Core ML | + (17+) | - | Дуже висока | Низька |
| ExecuTorch | + | + | Висока | Висока |
Квантизація: вибір точності
| Тип | Розмір (3B) | Якість | Швидкість |
|---|---|---|---|
| FP16 | ~6 ГБ | Еталонне | Повільно |
| Q8_0 | ~3.3 ГБ | ≈FP16 | Помірно |
| Q4_K_M | ~2.0 ГБ | Добре | Швидко |
| Q2_K | ~1.3 ГБ | Помітно гірше | Дуже швидко |
Для більшості мобільних завдань Q4_K_M оптимальний баланс. Q2_K можна розглядати для пристроїв з 4 ГБ RAM.
Серверна Llama: Ollama та vLLM
Для серверного деплою — Ollama (простота) або vLLM (продуктивність). Ollama підіймає OpenAI-сумісний API: POST /api/chat, формат запиту ідентичний OpenAI Chat Completions. Мобільний клієнт, написаний для OpenAI, працює з Ollama без змін — потрібно тільки змінити base URL.
vLLM переважніший для продакшену з навантаженням: continuous batching, tensor parallelism на декількох GPU, throughput в рази вищий за Ollama.
Fine-tuning: коли та як
Fine-tuning необхідний, коли базова Llama не справляється зі спеціалізованими задачами: медичні терміни, юридичний стиль, специфіка галузі. LoRA/QLoRA — стандартний підхід для fine-tuning на одному GPU. Навчені адаптери (~50–100 МБ) завантажуються поверх базової моделі. Впровадження on-device знижує операційні витрати на хмарні обчислення.
Що входить у роботу
- Аналіз вимог і вибір архітектури: on-device чи серверна, підбір моделі та квантизації.
- Інтеграція runtime: збірка llama.cpp/ExecuTorch під iOS/Android, обгортка API.
- Налаштування серверної частини: деплой Ollama/vLLM, балансування, моніторинг.
- Тестування: метрики затримки, споживання пам'яті, якості відповідей.
- Документація та навчання: як оновлювати модель, змінювати параметри.
- Підтримка після запуску: гарантія на інтеграцію, консультації з доробок.
Процес реалізації: покроково
- Аудит вимог: сценарії використання, цільові пристрої, бюджет.
- Вибір моделі та runtime.
- Інтеграція та збірка.
- Деплой серверної частини (якщо потрібно).
- Тестування метрик.
- Документація та передача.
- Гарантійна підтримка.
Орієнтири за термінами
Серверна Llama з Ollama та мобільним клієнтом — 1–2 тижні. On-device через llama.cpp зі збіркою під iOS/Android — 3–5 тижнів. Fine-tuning + деплой — окрема оцінка. Отримайте консультацію по вашому проєкту. Залиште заявку — ми проаналізуємо задачу та запропонуємо оптимальне рішення.







