Презентации лучше смотреть с десктопа
Слайды рассчитаны на широкий экран, клавиатуру и формат 16:9. Откройте эту страницу на ноутбуке или компьютере.
Вернуться на сайтLLM на iPhone:
от Ollama
до Foundation Model
Как запустить большую языковую модель прямо в кармане
Виктория Сипки//iOS Developer · BLACKHUB GAMES//AppsConf X 2025
Кто говорит
- Виктория Сипки
- iOS Developer
- BLACKHUB GAMES
- Swift · Core ML · MPS
- LLM на устройстве
- Open Source модели
- Apple Foundation Models
- privacy-first AI
О чём поговорим
- 01 · Что такое LLM
- 02 · Open Source и Cloud LLM
- 03 · Разработки Apple
- 04 · LLM на устройстве
- 05 · Выводы
Большие языковые
модели
Что такое LLM
Large Language Model — нейросеть, обученная предсказывать следующий токен.
Под капотом — гигантская функция со миллиардами параметров. На вход — текст, на выходе — распределение вероятностей следующего слова.
Параметры LLM
Параметры — это веса, которые меняются во время обучения. У современных LLM их больше миллиарда.
LLM — полноценный интеллект?
- обобщает огромный объём текста
- умеет рассуждать в пределах контекста
- пишет код, тексты, анализирует
- нет реального понимания
- галлюцинирует факты
- не имеет памяти и целей
- это всё ещё next-token predictor
Карта доклада
- 01 · Что такое LLM
- 02 · Open Source и Cloud LLM
- 03 · Разработки Apple
- 04 · LLM на устройстве
- 05 · Выводы
Виды LLM
Cloud LLM
Закрытые модели, доступные через API.
Open Source LLM
Веса публикуются — можно скачать и запустить локально.
Недостатки Cloud LLM
- NDA: нельзя загружать данные клиентов
- высокий прайс на API при объёмах
- запрет в ряде стран и юрисдикций
- зависимость от чужой инфраструктуры
- любой запрос покидает устройство
Зачем нужны Open Source LLM
- бесплатно — нет per-token биллинга
- оффлайн — работают без интернета
- приватно — данные не уходят наружу
- персонализация — fine-tuning под себя
Бизнесы уже используют LLM
От саппорта и поиска по документам до генерации кода и аналитики.
Где запускать Open Source
- свой GPU-сервер или облако
- единая модель на всех клиентов
- требуется DevOps и MLOps
- iPhone, Mac, ноутбук
- нулевая стоимость инференса
- данные не покидают устройство
Запуск на сервере: Ollama
Один CLI — и локальный inference-сервер с REST API.
# установить
$ brew install ollama
# скачать и запустить модель
$ ollama run llama3
# или через API
$ curl http://localhost:11434/api/generate \
-d '{"model":"llama3","prompt":"Привет"}'Недостатки сервера
- нет синхронизации между устройствами клиента
- жёсткие требования к железу — GPU и VRAM
- затраты на электричество и охлаждение
- единая точка отказа
Не совсем так строго
Модель на 8B параметров уже спокойно крутится на современном ноутбуке без отдельной видеокарты.
А значит — мост между «сервер» и «устройство клиента» постепенно стирается.
Требования по GPU/VRAM
| модель | VRAM | рекомендуемый GPU |
|---|---|---|
| Zero | ~1300 GB | кластер из A100/H100 |
| 671B (full) | ~1300 GB | multi-node H100 |
| 1.5B Distill | ~3.5 GB | RTX 3060 / M-серия |
| 7B | ~16 GB | RTX 4080 / M2 Pro |
| 8B | ~18 GB | RTX 4080 / M2 Pro |
| 14B | ~32 GB | RTX 4090 / M2 Max |
| 32B | ~64 GB | 2× RTX 4090 / M3 Max |
| 70B | ~140 GB | 2× A100 / 4× RTX 4090 |
Карта доклада
- 01 · Что такое LLM
- 02 · Open Source и Cloud LLM
- 03 · Разработки Apple
- 04 · LLM на устройстве
- 05 · Выводы
Разработки
Apple
Преимущества экосистемы Apple
Apple Neural Engine (ANE)
Отдельный сопроцессор внутри Apple Silicon, заточенный под матричные операции.
За что отвечает Neural Engine
- Siri и распознавание речи
- Face ID
- распознавание объектов в Photos
- live text, translate, dictation
- обработка фото и видео в реальном времени
Почему не CPU и не GPU
- универсальные, но неэффективные на ML
- много энергии — садится батарея
- занимают ресурсы под фоновые задачи
- специализирован под нейросети
- низкое энергопотребление
- высокая пропускная способность TOPS
- параллельно с CPU и GPU
Metal Performance Shaders

Низкоуровневый фреймворк для вычислений на GPU Apple. Базовые кирпичи нейросетей — уже реализованы.
Что умеет MPS
- matrix multiplication
- свёртки (convolution)
- функции активации (ReLU, GELU, …)
- нормализации (batch / layer norm)
- softmax, attention-блоки
llm.cpp + Metal
#import <Metal/Metal.h>
#import <MetalPerformanceShaders/MetalPerformanceShaders.h>
#import <MetalPerformanceShadersGraph/MetalPerformanceShadersGraph.h>
id<MTLDevice> device = MTLCreateSystemDefaultDevice();
MPSGraph *graph = [[MPSGraph alloc] init];Перемножение матриц на GPU
MPSGraphTensor *a = [graph placeholderWithShape:@[@M, @K] dataType:MPSDataTypeFloat16];
MPSGraphTensor *b = [graph placeholderWithShape:@[@K, @N] dataType:MPSDataTypeFloat16];
MPSGraphTensor *c = [graph matrixMultiplicationWithPrimaryTensor:a
secondaryTensor:b
name:@"matmul"];Распознавание цифр через MPS
MPSCNNConvolution *conv = [[MPSCNNConvolution alloc]
initWithDevice:device
convolutionDescriptor:descriptor
kernelWeights:weights
biasTerms:biases
flags:MPSCNNConvolutionFlagsNone];
[conv encodeToCommandBuffer:cmdBuffer
sourceImage:input
destinationImage:output];Это уровень «руками» — ниже него только Metal-шейдеры.
Core ML
Высокоуровневый фреймворк Apple для запуска ML-моделей на устройстве. Сам выбирает, что отправить на CPU, GPU или ANE.
Формат .mlmodel
- единый бинарный формат для inference на Apple-устройствах
- конвертеры из PyTorch, TensorFlow, ONNX
- квантизация и нейроный engine compile «из коробки»
- версионируется как обычный asset в проекте Xcode
Использование в Swift
import CoreML
let config = MLModelConfiguration()
config.computeUnits = .all // CPU + GPU + ANE
let model = try MyModel(configuration: config)
let prediction = try model.prediction(input: features)
print(prediction.label)Что даёт Core ML
- минимум кода — модель как obj-c класс
- автоматический выбор железа
- on-device inference, без сети
- интеграция с Vision, NaturalLanguage, Speech
Ограничения Core ML
- не все операции конвертируются один-в-один
- дебажить ниже фреймворка тяжело
- часть архитектур плохо ложится на ANE и уходит на CPU
Apple Foundation Models
Собственная on-device LLM Apple — около 3B параметров, оптимизирована под Apple Silicon.
Доступна через свежий фреймворк FoundationModels в iOS 18+.
LanguageModelSession
import FoundationModels
let session = LanguageModelSession()
let response = try await session.respond(
to: "Опиши преимущества on-device LLM"
)
print(response.content)Проверка доступности
struct AvailabilityExample: View {
var body: some View {
if SystemLanguageModel.default.isAvailable {
Text("LLM доступна на этом устройстве")
} else {
Text("Нужен iPhone 15 Pro или новее")
}
}
}Карта доклада
- 01 · Что такое LLM
- 02 · Open Source и Cloud LLM
- 03 · Разработки Apple
- 04 · LLM на устройстве
- 05 · Выводы
LLM на
устройстве
Private LLM
В App Store уже есть приложения, которые запускают LLM полностью локально — например, Private LLM.
Никаких облаков, никакой телеметрии — модель живёт в файле приложения.
Можно сделать самому
- open source проекты вроде Silo на GitHub
- модели типа
Llama-3.2-3B-Instruct - квантизация в формат GGUF под мобильное железо
- SwiftUI обёртка над llama.cpp / MLX
Как оно работает
LlamaContext— обёртка над загруженным графом моделиcreate_context— выделение памяти и инициализация весовcompletion_init— токенизация промптаcompletion_loop— пошаговая генерация токенов
Инициализация
final class LlamaContext {
private var model: OpaquePointer?
private var ctx: OpaquePointer?
init(modelPath: String) throws {
var params = llama_model_default_params()
params.n_gpu_layers = 999 // всё на GPU/ANE
self.model = llama_load_model_from_file(modelPath, params)
self.ctx = llama_new_context_with_model(model, ctxParams)
}
}Токенизация промпта
func completionInit(prompt: String) {
let tokens = tokenize(text: prompt)
var batch = llama_batch_init(tokens.count, 0, 1)
for (i, token) in tokens.enumerated() {
llama_batch_add(&batch, token, Int32(i), [0], false)
}
llama_decode(ctx, batch)
}Цикл генерации
func completionLoop() -> String {
var output = ""
while output.count < maxTokens {
let id = llama_sample_token(ctx, candidates)
if id == llama_token_eos(model) { break }
output += tokenToPiece(id)
llama_decode(ctx, llama_batch_get_one(&id, 1))
}
return output
}Три пути запуска
Путь 1 · Core ML
- конвертируем модель в .mlmodel через coremltools
- кладём в проект Xcode
- инференс — тот же MyModel().prediction(...)
- плюс — нативно; минус — не все архитектуры конвертируются гладко
Путь 2 · llama.cpp
- C++ библиотека с Metal backend
- нативный импорт в Xcode как Swift Package
- максимум контроля над семплингом
- самый зрелый стек для GGUF-моделей
Путь 3 · LLM.swift и LLMFarm
- готовые Swift-обёртки над llama.cpp
- минимум кода — пара строк инициализации
- LLMFarm — почти готовое UI-приложение
- идеально для прототипа за вечер
Пример с LLM.swift
import LLM
let bot = LLM(
from: "/path/to/Llama-3.2-3B-Instruct-Q5_K_M.gguf",
template: .llama
)
let answer = await bot.respond(
to: "Объясни Core ML за 2 предложения"
)
print(answer)Своя абстракция инференса
enum ModelInference {
case coreML(MyModel)
case llamaCpp(LlamaContext)
case foundation(LanguageModelSession)
}Загрузка модели
func loadModel(_ kind: ModelKind) throws -> ModelInference {
switch kind {
case .coreML(let url):
return .coreML(try MyModel(contentsOf: url))
case .llamaCpp(let path):
return .llamaCpp(try LlamaContext(modelPath: path))
case .foundation:
return .foundation(LanguageModelSession())
}
}Универсальный predict
func predict(_ inference: ModelInference, prompt: String) async throws -> String {
switch inference {
case .coreML(let m): return try m.predict(prompt)
case .llamaCpp(let ctx): return try ctx.complete(prompt)
case .foundation(let s): return try await s.respond(to: prompt).content
}
}Как компании используют Local LLM
- автогенерация описаний к Pull Request
- inline code review без ухода кода в облако
- локальные ассистенты в IDE
- анализ логов и крэшей на устройстве разработчика
Code generation в IDE
- локальные модели подсказывают сниппеты
- нет утечки приватного кода
- низкая задержка — нет round-trip в облако
- работают офлайн в самолёте и поезде
Какие бывают модели
Все они отличаются количеством параметров, лицензией и архитектурой.
Как читать имя модели
Llama-3.2-3B-Instruct-Q5_K_M.gguf
│ │ │ │ │ │
│ │ │ │ │ └─ контейнер
│ │ │ │ └─ квантизация (Q5_K_M)
│ │ │ └─ вариант (Instruct / Chat / Base)
│ │ └─ размер (3B параметров)
│ └─ версия модели
└─ семействоРазмер · упрощение · вариант
- Q2 — самая лёгкая, заметная потеря качества
- Q4 — компромисс, частый выбор для мобилок
- Q5–Q6 — близко к fp16, тяжелее по RAM
- Base — сырая модель, predict-next-token
- Instruct — обучена выполнять инструкции
- Chat — формат диалога, system + user + assistant
Что куда влезает
| чип | модель | квантизация |
|---|---|---|
| A12 / A13 | ~1B | Q2 |
| A14 / A15 | 3B | Q3 – Q4 |
| A16 · M1 | 3B – 7B | Q4 |
| A17 Pro · M2 | 7B | Q5 |
| M2 Pro / M3 | 8B – 13B | Q5 – Q6 |
Что ещё посмотреть
- репозиторий Awesome Mobile LLMs на GitHub
- документацию по
FoundationModelsиCore ML Tools - исходники
llama.cppиMLXот Apple - сравнения квантизаций на HuggingFace
Недостатки
- Local LLM ограничены в объёме данных
- требования к «железу»
- iPhone 15 / 16 — комфортный минимум для 3B+ моделей
- менее «интеллектуально развитые», чем GPT-4 класса
- пока…
Это лишь начало
Apple отстаёт в разработке собственных моделей, но строит инфраструктуру так, чтобы их можно было запускать где угодно.
Карта доклада
- 01 · Что такое LLM
- 02 · Open Source и Cloud LLM
- 03 · Разработки Apple
- 04 · LLM на устройстве
- 05 · Выводы
Выводы
Что забрать с собой
- Private LLM удобны, но у них есть недостатки
- Open Source LLM позволяют бизнесу хранить данные локально
- iPhone уже достаточно для работы с LLM
- LLM на устройстве — шаг к автономности и приватности
- Apple активно развивает будущее LLM
- Уже сейчас можно использовать iPhone для AI-задач, готовясь к революции в технологиях
Спасибо!
Виктория Сипки//iOS Developer · BLACKHUB GAMES