Две самые частые жалобы на локальные модели через Ollama звучат так: «она забывает начало разговора» и «она тормозит, хотя видеокарта мощная». В подавляющем большинстве случаев обе объясняются не моделью и не железом, а тремя параметрами, о существовании которых пользователь не знал.
Параметров в Ollama больше трёх, но остальные — либо про стиль ответа, либо про узкие сценарии. Начинать нужно с этих.
#Что понадобится
- Установленная Ollama и хотя бы одна скачанная модель. Базовый маршрут — в гайде по запуску моделей через Ollama.
- Доступ к терминалу с правами на перезапуск сервиса — часть настроек живёт в переменных окружения службы.
Значения по умолчанию в Ollama менялись между версиями, и заметно. Проверяйте фактические значения своей установки командой ollama show, а не по статьям, включая эту.
#Шаг 1. Понять, где вообще задаются параметры
Это главная путаница вокруг Ollama: одно и то же значение задаётся четырьмя разными способами с разной областью действия. Человек выставляет контекст в интерактивном режиме, потом подключает стороннее приложение — и получает старое поведение, потому что настройка туда не относилась.
| Способ | Где действует | Переживает перезапуск |
|---|---|---|
/set parameter в интерактивном чате |
только текущая сессия | ✗ |
Поле options в запросе к API |
только этот запрос | не применимо |
Директива PARAMETER в Modelfile |
всегда для этой модели | ✓ |
| Переменная окружения сервиса | значение по умолчанию для всех | ✓ |
Практическое правило: если параметр должен действовать для стороннего приложения, задавайте его через Modelfile или переменную окружения. Интерактивные команды до приложения не доходят.
#Шаг 2. Три параметра, объясняющие почти всё
#num_ctx — почему модель забывает
Размер контекста в токенах. Если диалог не помещается, начало обрезается, и модель действительно перестаёт помнить, о чём вы говорили пять сообщений назад. Никакого сообщения при этом не выводится.
Значение по умолчанию исторически было заметно меньше того, что способна обработать современная модель, и именно оно стоит за жалобами на забывчивость. В новых версиях умолчание подняли и добавили переменную окружения OLLAMA_CONTEXT_LENGTH для его изменения — что именно у вас, покажет ollama show.
Цена увеличения — видеопамять, и она растёт линейно: для модели класса 8B каждые восемь тысяч токенов стоят примерно гигабайт. Механику разбирает материал о том, почему большой контекст съедает видеопамять.
#num_gpu — почему модель тормозит
Число слоёв, отдаваемых видеокарте. По умолчанию подбирается автоматически по свободной памяти на момент загрузки — и здесь кроется ловушка: если в момент запуска модели был открыт браузер с десятком вкладок, часть слоёв уедет на процессор и останется там до перезагрузки модели.
Проверяется одной командой:
ollama ps
Колонка PROCESSOR показывает фактическое распределение. 100% GPU — всё хорошо. 47%/53% CPU/GPU — половина модели считается процессором, и скорость упала в разы. Почему потери так велики уже при небольшой доле, разбирает материал о выгрузке слоёв в оперативную память.
#keep_alive — почему первый ответ идёт долго
Сколько времени модель остаётся в памяти после последнего запроса. По умолчанию — несколько минут, после чего веса выгружаются, и следующий запрос ждёт их повторной загрузки с диска.
Для машины, где модель используется весь день, разумно продлить время жизни или сделать его бесконечным. Для машины, где видеокарта нужна ещё и для другого, — наоборот, сократить.
OLLAMA_KEEP_ALIVE=-1 ollama serve
Значение -1 означает «держать бесконечно», 0 — «выгружать сразу», обычное значение задаётся как 30m или 2h.
#Шаг 3. Таблица параметров
| Параметр | Где задаётся | По умолчанию | Что меняет |
|---|---|---|---|
num_ctx |
Modelfile, options, OLLAMA_CONTEXT_LENGTH |
зависит от версии | забывчивость и расход памяти |
num_gpu |
Modelfile, options |
автоподбор | скорость: слои на GPU или CPU |
keep_alive |
параметр запроса, OLLAMA_KEEP_ALIVE |
несколько минут | задержка первого ответа |
num_predict |
Modelfile, options |
без ограничения | максимальная длина ответа |
num_thread |
Modelfile, options |
автоподбор | скорость при расчёте на CPU |
temperature |
Modelfile, options |
ненулевое | разнообразие текста, не скорость |
OLLAMA_NUM_PARALLEL |
переменная окружения | автоподбор | число одновременных слотов |
OLLAMA_FLASH_ATTENTION |
переменная окружения | зависит от версии | экономия памяти на контексте |
OLLAMA_KV_CACHE_TYPE |
переменная окружения | f16 |
точность хранения кэша контекста |
Что здесь смотреть: первые три строки объясняют жалобы, остальные — тонкая настройка. И отдельно — предпоследние две: они включаются только через переменные окружения сервиса, в Modelfile их нет.
Отдельное предупреждение про OLLAMA_NUM_PARALLEL. Число параллельных слотов делит доступный контекст между ними: при четырёх слотах каждый получает четверть заявленного num_ctx. Для одного пользователя это чистая потеря, и значение имеет смысл держать равным единице.
#Шаг 4. Задать значения на постоянной основе
Для одной модели — через Modelfile. Возьмите текущую конфигурацию за основу:
ollama show --modelfile qwen2.5:7b > Modelfile
добавьте строки вида PARAMETER num_ctx 16384 и создайте свой вариант:
ollama create qwen-16k -f Modelfile
Подробный разбор синтаксиса — в гайде по Modelfile в Ollama.
Для всей установки — через переменные окружения службы. На Linux с systemd:
systemctl edit ollama
и строки вида Environment="OLLAMA_KEEP_ALIVE=2h". На Windows — переменные окружения пользователя и перезапуск службы. Переменные читаются при старте сервиса, поэтому перезапуск обязателен.
#Проверка результата
Контекст применился: ollama show qwen-16k покажет актуальные параметры модели. Дополнительно — задайте десяток вопросов подряд и спросите о содержании первого; если модель помнит, контекст достаточен.
Слои на видеокарте: ollama ps во время работы модели, колонка PROCESSOR должна показывать 100% GPU.
Модель не выгружается: ollama ps через десять минут простоя. Если модель в списке — keep_alive применился.
#Что может пойти не так
Настройка не подействовала на стороннее приложение. Интерактивные команды /set parameter живут только в текущей сессии. Приложение обращается к API со своими параметрами, и ваши настройки его не касаются. Решение — Modelfile или переменная окружения.
Модель перестала помещаться после увеличения контекста. Ожидаемо: контекст расходует видеопамять. Либо уменьшите значение, либо включите квантизацию KV-кэша переменной OLLAMA_KV_CACHE_TYPE=q8_0.
Переменные окружения не применились. Их читает служба при запуске, а не команда ollama run. Перезапустите сервис.
После изменения Modelfile ничего не изменилось. Изменение файла не влияет на уже созданную модель — нужно снова выполнить ollama create, а старую версию при необходимости удалить.
Скорость упала без видимой причины. Первым делом ollama ps: скорее всего, автоподбор отдал часть слоёв процессору, потому что в момент загрузки видеопамять была занята. Перезапустите модель на свободной карте. Другие типовые симптомы разобраны в справочнике по ошибкам Ollama.
#Частые вопросы
#Как узнать текущий размер контекста?
Командой ollama show <модель> — она выводит фактические параметры. Значения по умолчанию менялись между версиями, поэтому полагаться на статьи и форумы здесь нельзя.
#Почему модель забывает начало разговора?
Диалог перестал помещаться в контекст, и начало обрезано. Увеличьте num_ctx — и заложите дополнительную видеопамять: расход растёт линейно с длиной контекста.
#Можно ли задать параметры один раз для всех моделей?
Частично: переменные окружения задают умолчания для всей установки, но не все параметры доступны в таком виде. Параметры уровня модели вроде num_gpu задаются в Modelfile для каждой модели отдельно.
#Что делать, если ollama ps показывает работу на процессоре?
Проверить, что видеопамять свободна, и перезагрузить модель. Если карта AMD или Intel — возможно, бэкенд не подхватился вовсе, и произошёл молчаливый откат. Явно задать число слоёв можно параметром num_gpu.
#Влияет ли temperature на скорость?
Нет, только на текст. Параметры сэмплинга меняют, какой токен будет выбран, но не то, с какой скоростью он вычисляется.
#Сколько слотов ставить в OLLAMA_NUM_PARALLEL?
Для одного пользователя — один. Каждый дополнительный слот отрезает свою долю контекста, и при значении по умолчанию вы можете получить вчетверо меньше контекста, чем запросили.