Примечание

Синтаксис Modelfile находится в стадии разработки

Файл модели - это схема для создания моделей и обмена ими с Ollama.

содержание

Формат

Формат файла модели:

# comment
INSTRUCTION arguments
ИнструкцияОписание
FROM (Обязательно) Определяет базовую модель для использования.
PARAMETER Задает параметры для того, как Ollama будет запускать модель.
TEMPLATE Полный шаблон приглашения для отправки модели.
SYSTEM Указывает системное сообщение, которое будет задано в шаблоне.
ADAPTER Определяет адаптеры (Q)LoRa для применения к модели.
LICENSE Указывает юридическую лицензию.
MESSAGE Указывает историю сообщений.

Примеры

Базовый файл модели

Пример файла модели, создающего схему Марио:

FROM llama3.2
# sets the temperature to 1 [higher is more creative, lower is more coherent]
PARAMETER temperature 1
# sets the context window size to 4096, this controls how many tokens the LLM can use as context to generate the next token
PARAMETER num_ctx 4096

# sets a custom system message to specify the behavior of the chat assistant
SYSTEM You are Mario from super mario bros, acting as an assistant.

Чтобы использовать это:

  1. Сохраните его в виде файла (например, Modelfile).
  2. ollama create choose-a-model-name -f <расположение файла, например ./Modelfile>
  3. ollama run choose-a-model-name
  4. Начните пользоваться моделью!

Чтобы просмотреть файл модели для данной модели, используйте команду ollama show --modelfile.

ollama show --modelfile llama3.2

Output:

# Файл модели, сгенерированный с помощью "ollama show"
# Чтобы создать новый файл модели на основе этого файла, замените строку 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

Список доступных базовых моделей: https://github.com/ollama/ollama#model-library Дополнительные модели можно найти по адресу: https://ollama.com/library

Построение на основе Safetensors - модели 

FROM <model directory>

Каталог моделей должен содержать значения весов Safetensors для поддерживаемой архитектуры.

Поддерживаемые в настоящее время архитектуры моделей:

  • Llama (including Llama 2, Llama 3, Llama 3.1, и Llama 3.2)
  • Mistral (including Mistral 1, Mistral 2, и Mixtral)
  • Gemma (including Gemma 1 и Gemma 2)
  • Phi3

Сборка из файла GGUF

FROM ./ollama-model.gguf

The GGUF file location should be specified as an absolute path or relative to the Modelfile location.

PARAMETER

Инструкция PARAMETER определяет параметр, который может быть установлен при запуске модели.

PARAMETER <parameter> <parametervalue>

Допустимые параметры и значения

ParameterОписаниеТип значенияПример использования
num_ctx Устанавливает размер контекстного окна, используемого для генерации следующего токена. (По умолчанию: 4096) int num_ctx 4096
repeat_last_n Определяет, на какое расстояние модель должна возвращаться, чтобы предотвратить повторение. (По умолчанию: 64, 0 = disabled, -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 прекратит генерировать текст и вернет данные. Можно задать несколько шаблонов остановок, указав несколько отдельных параметров остановки в файле модели. string stop "AI assistant:"
num_predict Максимальное количество токенов, которое можно предсказать при генерации текста. (По умолчанию: -1, бесконечная генерация) int num_predict 42
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 Альтернатива top_p и направлена на обеспечение баланса качества и разнообразия. Параметр p представляет минимальную вероятность того, что токен будет рассмотрен, по сравнению с вероятностью наиболее вероятного токена. Например, при p=0,05 и наиболее вероятном значении токена, имеющем вероятность 0,9, логиты со значением менее 0,045 будут отфильтрованы. (По умолчанию: 0,0) float min_p 0.05

TEMPLATE

TEMPLATE - полный шаблон запроса, который будет передан в модель. Он может включать (необязательно) системное сообщение, сообщение пользователя и ответ от модели. Примечание: синтаксис может зависеть от модели. В шаблонах используется синтаксис шаблона Go.

Переменные шаблона

ПеременнаяОписание
{{ .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, который должен применяться к базовой модели. Значением адаптера должен быть абсолютный путь или путь относительно файла модели. Базовая модель должна быть указана с помощью инструкции FROM. Если базовая модель отличается от базовой модели, на основе которой был настроен адаптер, поведение будет неустойчивым.

Адаптер Safetenso

ADAPTER <path to safetensor adapter>

Поддерживаемые в настоящее время адаптеры Safetensor:

  • Llama (включая Llama 2, Llama 3, and Llama 3.1)
  • Mistral (включая Mistral 1, Mistral 2, and Mixtral)
  • Gemma (включая Gemma 1 and Gemma 2)

Адаптер GGUF

ADAPTER ./ollama-lora.gguf

LICENSE

Инструкция LICENSE позволяет вам указать юридическую лицензию, под которой предоставляется общий доступ к модели, используемой с этим файлом модели.

LICENSE """
<license text>
"""

MESSAGE

Инструкция MESSAGE позволяет вам указать историю сообщений, которую модель будет использовать при ответе. Используйте несколько повторений команды MESSAGE, чтобы создать диалог, который поможет модели ответить аналогичным образом.

 

MESSAGE <role> <message>

 

Допустимые роли

РольОписание
system Альтернативный способ предоставления системного сообщения для модели.
user Пример сообщения о том, что мог бы спросить пользователь.
assistant Пример сообщения о том, как должна реагировать модель.

Example conversation

MESSAGE user Is Toronto in Canada?
MESSAGE assistant yes
MESSAGE user Is Sacramento in Canada?
MESSAGE assistant no
MESSAGE user Is Ontario in Canada?
MESSAGE assistant yes

Примечания

  • в файле модели регистр не учитывается. В примерах используются команды в верхнем регистре, чтобы их было легче отличить от аргументов.
  • Инструкции могут быть в любом порядке. В примерах инструкция FROM стоит первой, чтобы ее было легко прочитать.