Modelfile — это чертёж для создания и распространения кастомных моделей с помощью Ollama.
Содержание
Формат
Формат файла Modelfile:
# comment
INSTRUCTION arguments| Инструкция | Описание |
|---|---|
FROM (обязательный) | Задаёт базовую модель для использования. |
PARAMETER | Задаёт параметры, определяющие, как Ollama будет запускать модель. |
TEMPLATE | Полный шаблон запроса, который будет отправляться модели. |
SYSTEM | Задаёт системное сообщение, которое будет указано в шаблоне. |
ADAPTER | Задаёт адаптеры (Q)LoRA, которые будут применены к модели. |
LICENSE | Задаёт юридическую лицензию. |
MESSAGE | Задаёт историю сообщений. |
REQUIRES | Задаёт минимальную версию Ollama, необходимую для работы модели. |
Примеры
Базовый Modelfile
Пример файла Modelfile, создающего шаблон модели Марио:
FROM llama3.2
# устанавливает температуру равной 1 [чем выше значение, тем более креативным будет ответ, чем ниже — тем более связным]
PARAMETER temperature 1
# устанавливает размер контекстного окна равным 4096, это определяет, сколько токенов LLM может использовать в качестве контекста для генерации следующего токена
PARAMETER num_ctx 4096
# задаёт пользовательское системное сообщение для определения поведения чат-ассистента
SYSTEM Вы — Марио из Super Mario Bros, работающий в качестве ассистента.Чтобы использовать этот файл:
- Сохраните его как файл (например,
Modelfile) ollama create choose-a-model-name -f <расположение файла, например ./Modelfile>ollama run choose-a-model-name- Начните использовать модель!
Чтобы посмотреть Modelfile указанной модели, используйте команду ollama show --modelfile.
shell
ollama show --modelfile llama3.2# Modelfile сгенерирован командой "ollama show"
# Чтобы создать новый Modelfile на основе этого, замените строку FROM на:
# FROM llama3.2:latest
FROM /Users/pdevine/.ollama/models/blobs/sha256-00e1317cbf74d901080d7100f57580ba8dd8de57203072dc6f668324ba545f29
TEMPLATE """{{ if .System }}<|start_header_id|>system<|end_header_id|>
{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>
{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>
{{ .Response }}<|eot_id|>"""
PARAMETER stop "<|start_header_id|>"
PARAMETER stop "<|end_header_id|>"
PARAMETER stop "<|eot_id|>"
PARAMETER stop "<|reserved_special_token"Инструкции
FROM (обязательный)
Инструкция FROM задаёт базовую модель, которая будет использоваться при создании модели.
FROM <model name>:<tag>Создание на основе существующей модели
FROM llama3.2Список доступных базовых моделей
Базовые моделиДополнительные модели можно найти здесь
Создание на основе модели Safetensors
FROM <model directory>В каталоге модели должны находиться веса Safetensors для поддерживаемой архитектуры.
В настоящее время поддерживаются следующие архитектуры моделей:
- Llama (включая Llama 2, Llama 3, Llama 3.1 и Llama 3.2)
- Mistral (включая Mistral 1, Mistral 2 и Mixtral)
- Gemma (включая Gemma 1 и Gemma 2)
- Phi3
Создание на основе файла GGUF
FROM ./ollama-model.ggufРасположение файла GGUF должно быть указано как абсолютный путь или относительно расположения файла Modelfile.
PARAMETER
Инструкция PARAMETER задаёт параметр, который можно установить при запуске модели.
PARAMETER <parameter> <parametervalue>Допустимые параметры и их значения
| Параметр | Описание | Тип значения | Пример использования |
|---|---|---|---|
| num_ctx | Задаёт размер контекстного окна, используемого для генерации следующего токена. (Значение по умолчанию: 2048) | int | num_ctx 4096 |
| repeat_last_n | Задаёт, как далеко в истории модель будет «смотреть назад», чтобы предотвратить повторения. (Значение по умолчанию: 64, 0 = отключено, -1 = num_ctx) | int | repeat_last_n 64 |
| repeat_penalty | Задаёт силу штрафа за повторения. Более высокое значение (например, 1,5) будет сильнее штрафовать за повторения, а более низкое (например, 0,9) будет более мягким. (Значение по умолчанию: 1,1) | float | repeat_penalty 1.1 |
| temperature | Температура модели. Увеличение значения температуры делает ответы модели более креативными. (Значение по умолчанию: 0,8) | float | temperature 0.7 |
| seed | Задаёт сид (начальное значение генератора случайных чисел) для генерации. Установка конкретного числа приведёт к тому, что модель будет генерировать одинаковый текст для одинакового запроса. (Значение по умолчанию: 0) | int | seed 42 |
| stop | Задаёт стоп-последовательности. При обнаружении этого шаблона LLM прекратит генерацию текста и вернёт результат. Несколько стоп-последовательностей можно задать, указав несколько отдельных параметров stop в файле Modelfile. | string | stop "AI assistant:" |
| num_predict | Максимальное количество токенов для предсказания при генерации текста. (Значение по умолчанию: -1, бесконечная генерация) | int | num_predict 42 |
| draft_num_predict | Максимальное количество предполагаемых черновых токенов для предсказания на каждом шаге, если доступна черновая модель. Для отдельных черновых моделей значение по умолчанию равно 4; для встроенных тензоров MTP требуется установка этого параметра. Установите значение 0, чтобы отключить предполагаемую генерацию. | int | draft_num_predict 4 |
| top_k | Снижает вероятность генерации бессмысленного текста. Более высокое значение (например, 100) даёт более разнообразные ответы, а более низкое (например, 10) — более консервативные. (Значение по умолчанию: 40) | int | top_k 40 |
| top_p | Работает совместно с top-k. Более высокое значение (например, 0,95) приводит к более разнообразному тексту, а более низкое (например, 0,5) — к более сфокусированному и консервативному. (Значение по умолчанию: 0,9) | float | top_p 0.9 |
| min_p | Альтернатива параметру topp, направленная на обеспечение баланса между качеством и разнообразием. Параметр _p представляет собой минимальную вероятность токена, при которой он учитывается, относительно вероятности наиболее вероятного токена. Например, при p=0,05 и вероятности наиболее вероятного токена, равной 0,9, логиты со значением менее 0,045 фильтруются. (Значение по умолчанию: 0,0) | float | min_p 0.05 |
TEMPLATE
TEMPLATE — полный шаблон запроса, который передаётся модели. Он может (опционально) включать системное сообщение, сообщение пользователя и ответ модели. Примечание: синтаксис может отличаться в зависимости от модели. Шаблоны используют синтаксис шаблонов Go template syntax.
Переменные шаблона
| Переменная | Описание |
|---|---|
{{.System}} | Системное сообщение, используемое для задания пользовательского поведения. |
{{.Prompt}} | Сообщение с пользовательским запросом. |
{{.Response}} | Ответ модели. При генерации ответа текст после этой переменной опускается. |
TEMPLATE """{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
"""SYSTEM
Инструкция SYSTEM задаёт системное сообщение, которое будет использоваться в шаблоне, если это применимо.
SYSTEM """<system message>"""ADAPTER
Инструкция ADAPTER задаёт дообучённый адаптер LoRA, который должен применяться к базовой модели. Значение адаптера должно быть абсолютным путём или путём, относительным расположения файла Modelfile. Базовая модель должна быть задана инструкцией FROM. Если базовая модель не совпадает с той, на которой был дообучен адаптер, поведение будет нестабильным.
Адаптер Safetensor
ADAPTER <path to safetensor adapter>В настоящее время поддерживаются следующие адаптеры Safetensor:
- Llama (включая Llama 2, Llama 3 и Llama 3.1)
- Mistral (включая Mistral 1, Mistral 2 и Mixtral)
- Gemma (включая Gemma 1 и Gemma 2)
Адаптер GGUF
ADAPTER ./ollama-lora.ggufLICENSE
Инструкция LICENSE позволяет задать юридическую лицензию, в соответствии с которой модель, используемая с этим файлом Modelfile, распространяется или делится.
LICENSE """
<license text>
"""MESSAGE
Инструкция MESSAGE позволяет задать историю сообщений, которую модель будет использовать при формировании ответа. Используйте несколько команд MESSAGE, чтобы собрать диалог, который подскажет модели, как отвечать в похожих ситуациях.
MESSAGE <role> <message>Допустимые роли
| Роль | Описание |
|---|---|
| system | Альтернативный способ задания системного сообщения для модели. |
| user | Пример сообщения, которое мог бы отправить пользователь. |
| assistant | Пример сообщения, которое должна возвращать модель. |
Пример диалога
MESSAGE user Торонто находится в Канаде?
MESSAGE assistant да
MESSAGE user Сакраменто находится в Канаде?
MESSAGE assistant нет
MESSAGE user Онтарио находится в Канаде?
MESSAGE assistant даREQUIRES
Инструкция REQUIRES позволяет задать минимальную версию Ollama, необходимую для работы модели.
REQUIRES <version>Версия должна быть корректной версией Ollama (например, 0.14.0).
Примечания
- Файл
Modelfileне чувствителен к регистру. В примерах инструкции указаны в верхнем регистре, чтобы было проще отличать их от аргументов. - Инструкции могут быть указаны в любом порядке. В примерах инструкция
FROMуказана первой для удобства чтения.