Оглавление: три ограничения · матрица режимов · Modelfile и CLI · контекст · приёмка узла · конверсия
Связка LoRA с маршрутизацией нескольких моделей и биллингом раскрыта в матрице мультимодельного роутинга; базовые параметры Metal, контекста и памяти на M4 — в обзоре llama.cpp и Ollama. Для агентов с длинными сессиями пересечение с политикой чекпойнтов удобно смотреть через матрицу LangGraph и песочницы.
Три ограничения до таблицы
1. Память. Каждый дополнительный тег с полным набором весов и KV резервирует unified memory; параллельные клиенты умножают пики.
2. Смена адаптера. «Мгновенная» подмена без перезагрузки исполнителя встречается реже, чем обещают демо; измеряйте фактическое время переключения и простой очереди.
3. Длинный диалог. История разрастается хуже линейно из-за внимания и KV; без политики свёртки агент начинает платить за токены прошлых ошибок.
Матрица: основание, память, throughput против задержки
Три практичных режима на Apple Silicon. Цифры ориентиры — замените своими замерами на выбранном кванте.
| Режим | VRAM / unified memory | Throughput против задержки | Риски |
|---|---|---|---|
| Один процесс, смена тегов | Минимум дубликатов весов; пик определяется одним активным тегом и num_ctx. | Лучший p95 для интерактива при низкой конкуренции; throughput ограничен одним декодером. | Очередь запросов при частых переключениях; нужен дисциплинированный планировщик на клиенте. |
| Несколько тегов параллельно | Сумма рабочих наборов и KV; быстро упираетесь в давление памяти на 16–24 ГБ. | Выше суммарный throughput за счёт параллели; растёт хвост задержки и джиттер первого токена. | Непредсказуемый swap; для агентов разводите интерактив и офлайн по разным очередям. |
| Удалённый узел с фиксированным профилем | Планируется как капа по аренде; проще держать стабильный num_ctx и мониторинг. | Добавляется сеть; выигрыш в том, что узел не делит память с IDE и браузером. | Нужно явное SLA: час узла, трафик, стоимость токена на профиле нагрузки. |
Вывод для продакшена: держите один интерактивный путь с предсказуемым num_ctx, выносите тяжёлые пакеты на отдельный тег или узел и фиксируйте версии адаптеров в журнале релиза.
На Metal важно не только «влезть» в память, но и избежать постоянной перекомпоновки графа при смене адаптера: держите одинаковый порядок слоёв между тегами, где это возможно, иначе прогрев после переключения будет стоить лишних секунд. Если клиенты ходят в Ollama через HTTP, добавьте на шлюзе очередь с лимитом параллелизма на тег — иначе два домена начнут мешать друг другу без видимой ошибки, только с ростом p95. Для ночных джобов отдельный тег с более агрессивным квантом базы иногда дешевле, чем гонять тот же адаптер на полном F16 ради редких запросов.
Modelfile и исполняемые команды Ollama
Ниже — минимальный шаблон под отдельный тег на адаптер. Подставьте реальные имена файлов GGUF и каталог с правами на чтение для демона Ollama.
# Каталог проекта: замените пути
mkdir -p ~/ollama-lora-profiles/demo && cd ~/ollama-lora-profiles/demo
cat > Modelfile.support <<'EOF'
FROM ./base-model.gguf
ADAPTER ./loras/support-ru.gguf
PARAMETER num_ctx 8192
PARAMETER temperature 0.2
EOF
ollama create demo-support -f Modelfile.support
ollama run demo-support "короткий тест якоря после сборки"
ollama ps
ollama list | headДля второго сценария повторите файл с другим ADAPTER и тегом; не смешивайте несовместимые базы. После обновления адаптера меняйте суффикс тега, чтобы клиенты не получали тихий дрейф качества.
Перед продакшеном выполните ollama show demo-support --modelfile и сохраните вывод рядом с CI: так проще доказать воспроизводимость. Если демон стартует через launchd, проверьте, что OLLAMA_MODELS указывает на тот же том, где лежат адаптеры, иначе «работает у разработчика» не переживет перезагрузку.
Дефрагментация контекста
Под «дефрагментацией» здесь имеется в виду регулярное уплотнение истории: резюме системного уровня, отбрасывание дублирующих tool-сообщений, жёсткий лимит токенов до свёртки. Согласуйте порог с вашим агентом: при checkpoint LangGraph храните долгую правду в thread state, а в окно модели отдавайте только сжатую ленту. Это снижает всплески KV и стабилизирует задержку после смены LoRA.
Практическое правило: после свёртки всегда оставляйте один короткий якорь с последней договорённостью пользователя, иначе модель «забудет» ограничения, которые были выше по треду. Если инструменты возвращают большие JSON, поднимайте порог свёртки или выносите сырые ответы во внешнее хранилище с ссылкой в чат — иначе дефрагментация превратится в потерю доказательной базы для аудита.
Чек-лист приёмки стоимости удалённого узла
- Версии: зафиксировать ревизию Ollama, хеш базового GGUF и каждого LoRA в тикете.
- Окно: одинаковый num_ctx на локали и узле; зафиксировать долю запросов с поджатием истории.
- Задержка: p95 первого и последнего токена для трёх адаптеров после холодного старта и в тёплом состоянии.
- Пропускная способность: токены в секунду при одном и двух клиентах; отметить точку, где память уходит в давление.
- Финансы: час аренды узла плюс исходящий трафик против миллиона токенов эталонного профиля; сохранить ссылку на публичные тарифы.
Цифры для слайдов. Держите разницу p95 между локалью и узлом в пределах заложенного RTT плюс один стандартный отклонения джиттера Metal. Фиксируйте не менее трёх последовательных прогонов профиля перед сравнением стоимости. Любое изменение кванта базы объявляйте новым семейством тегов, иначе матрица решений перестаёт быть сопоставимой неделя к неделе.
Конверсия
Забронируйте выделенный удалённый Mac для ночных прогонов смены адаптеров и длинного контекста — ноутбук перестанет искажать память и троттлинг. Публичные страницы без обязательного входа: покупка и аренда, тарифы, центр помощи; материалы по агентам — в индексе блога и на главной.
Публичные страницы: каталог — покупка / аренда, бюджет — тарифы, эксплуатация — центр помощи; обзор статей — технический блог.