Гайды

Modelfile в Ollama: свой пресет модели за пять строк

Modelfile фиксирует системный промпт и параметры вместе с моделью, чтобы не настраивать их заново в каждом клиенте. Готовый файл с построчным разбором и команда создания.

Ситуация, знакомая всем, кто пользуется локальной моделью из нескольких мест: в терминале вы выставили контекст побольше и системный промпт по-русски, в стороннем приложении — ничего этого нет, потому что оно обращается к модели напрямую и о ваших настройках не знает.

Modelfile решает это раз и навсегда: параметры и промпт становятся частью самой модели. Любой клиент, запросивший её по имени, получает вашу конфигурацию.

Не нужен он, если вы пользуетесь моделью из одного места и вас устраивают умолчания. Тогда достаточно интерактивных команд.

#Что понадобится

  • Установленная Ollama и скачанная базовая модель.
  • Текстовый редактор. Файл называется Modelfile без расширения — это соглашение, а не требование: имя передаётся команде явно.

#Шаг 1. Взять текущую конфигурацию за основу

Не пишите файл с нуля: у каждой модели есть свой шаблон чата и свои стоп-последовательности, и потерять их — верный способ получить модель, которая дописывает ваши реплики.

ollama show --modelfile qwen2.5:7b > Modelfile

Команда выведет полную конфигурацию, включая шаблон. Дальше вы правите её, а не сочиняете.

#Шаг 2. Разобрать директивы

FROM qwen2.5:7b
PARAMETER num_ctx 16384
PARAMETER num_gpu 99
PARAMETER temperature 0.4
PARAMETER num_predict 1024
SYSTEM """Ты отвечаешь по-русски, кратко и по делу. Если не знаешь ответа, говоришь об этом прямо, не выдумывая факты. Код приводишь целиком, без сокращений."""

Построчно:

  • FROM qwen2.5:7b — базовая модель. Здесь может стоять имя из каталога, имя вашей ранее созданной модели или путь к локальному файлу: FROM ./models/my-model-q4_k_m.gguf. Второй вариант — способ подключить к Ollama файл, которого нет в каталоге. Что внутри такого файла — в разборе формата GGUF.
  • PARAMETER num_ctx 16384 — размер контекста. Заменяет умолчание, которое между версиями менялось и часто оказывается меньше нужного.
  • PARAMETER num_gpu 99 — сколько слоёв отдать видеокарте. Значение 99 означает «все». Полезно, когда автоподбор ошибается и оставляет часть слоёв на процессоре.
  • PARAMETER temperature 0.4 — предсказуемость ответов. Ниже — строже и суше, выше — разнообразнее.
  • PARAMETER num_predict 1024 — потолок длины ответа в токенах.
  • SYSTEM """...""" — системный промпт. Тройные кавычки нужны для многострочного текста. Как формулировать его содержательно — в материале о системном промпте для личного ИИ.

Есть и другие директивы. TEMPLATE переопределяет шаблон чата — трогать его нужно только если модель ведёт себя странно и вы точно знаете правильный формат. ADAPTER подключает файл дообучения поверх базовой модели. MESSAGE задаёт примеры диалога, которые модель видит перед вашим первым сообщением, — способ показать желаемый стиль ответа.

Разбор самих параметров и того, какие из них на что влияют, — в материале о параметрах Ollama, которые действительно влияют на результат.

#Шаг 3. Создать модель

ollama create qwen-ru -f Modelfile

Имя qwen-ru — ваше, любое. Операция быстрая: веса не копируются заново, создаётся ссылка на существующие блобы с новыми метаданными. Десяток пресетов на одной базовой модели не займут десяток раз по пять гигабайт.

Дальше модель используется как обычная:

ollama run qwen-ru

И, что важнее, именно под этим именем её видят сторонние приложения — со всеми вашими параметрами.

#Проверка результата

Проверка первая: параметры на месте.

ollama show qwen-ru

В выводе должны быть ваши значения контекста и температуры.

Проверка вторая: системный промпт работает. Задайте вопрос по-английски — модель с промптом «отвечай по-русски» должна ответить по-русски. Это самый быстрый способ убедиться, что SYSTEM применился.

Проверка третья: контекст действительно увеличен. Проведите длинный диалог и спросите о содержании первого сообщения. Если модель помнит — значение применилось.

Проверка четвёртая: слои на видеокарте.

ollama ps

Колонка PROCESSOR должна показывать 100% GPU.

#Что может пойти не так

Модель дописывает ваши реплики или не останавливается. Потерян или испорчен шаблон чата. Именно поэтому файл нужно начинать с вывода ollama show --modelfile, а не писать с нуля.

Изменения в файле не подействовали. Modelfile — это исходник, а не живая конфигурация. После каждой правки нужно снова выполнить ollama create. Старую версию при необходимости удаляют командой ollama rm.

Модель перестала помещаться в память. Увеличенный num_ctx расходует видеопамять. Уменьшите значение или включите квантизацию KV-кэша переменной окружения сервиса.

Многострочный системный промпт обрезался. Тройные кавычки обязательны, и закрывающие должны стоять там, где заканчивается текст. Одиночные кавычки многострочность не поддерживают.

Не подхватился локальный файл GGUF. Путь в FROM указывается относительно текущего каталога или абсолютно. Проверьте, что архитектура модели поддерживается вашей версией Ollama: свежие семейства доезжают до неё позже, чем до llama.cpp. Порядок конвертации своей модели в нужный формат — в материале о переводе модели в GGUF и запуске в Ollama.

#Частые вопросы

#Занимает ли новый пресет дополнительное место на диске?

Практически нет. Веса не дублируются — создаётся новая запись, ссылающаяся на те же данные. Дополнительно хранятся только метаданные и текст промпта.

#Можно ли сделать несколько пресетов одной модели?

Да, и это основной сценарий: например, один с низкой температурой и строгим промптом для рабочих задач, другой — с длинным контекстом для документов. Переключение сводится к смене имени модели.

#Как удалить созданную модель?

Командой ollama rm <имя>. Базовая модель при этом остаётся: удаляется только ваша запись с параметрами.

#Чем это отличается от настроек в клиенте?

Областью действия. Настройки клиента живут в клиенте, Modelfile — в самой модели, и его видят все приложения, обращающиеся к Ollama. Если моделью пользуется несколько программ, второй способ единственный работающий.

#Можно ли задать в Modelfile квантизацию KV-кэша?

Нет, эта настройка задаётся переменной окружения сервиса и действует на всю установку. В Modelfile живут только параметры уровня модели.

#Есть ли аналог Modelfile при работе с llama.cpp напрямую?

Прямого аналога нет: там все параметры передаются флагами при запуске, а системный промпт — отдельным аргументом. Обычно это оформляют скриптом запуска. Что даёт и чего не даёт каждый из подходов — в сравнении Ollama против llama.cpp.

Хотите ИИ, который помнит вас?

Persona держит контекст между чатами и работает на вашем железе — если развернуть её у себя и подключить локальную модель.

Создать аккаунт