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