Un Modelfile es el plano para crear y compartir modelos personalizados usando Ollama.
Índice
Formato
El formato del Modelfile:
# comentario
INSTRUCTION argumentos| Instrucción | Descripción |
|---|---|
FROM (obligatorio) | Define el modelo base a usar. |
PARAMETER | Establece los parámetros para cómo Ollama ejecutará el modelo. |
TEMPLATE | La plantilla de prompt completa que se enviará al modelo. |
SYSTEM | Especifica el mensaje del sistema que se establecerá en la plantilla. |
ADAPTER | Define los adaptadores (Q)LoRA que se aplicarán al modelo. |
LICENSE | Especifica la licencia legal. |
MESSAGE | Especifica el historial de mensajes. |
REQUIRES | Especifica la versión mínima de Ollama requerida por el modelo. |
Ejemplos
Modelfile básico
Un ejemplo de un Modelfile que crea un plano de Mario:
FROM llama3.2
# establece la temperatura a 1 [más alto es más creativo, más bajo es más coherente]
PARAMETER temperature 1
# establece el tamaño de la ventana de contexto a 4096, esto controla cuántos tokens puede usar el LLM como contexto para generar el siguiente token
PARAMETER num_ctx 4096
# establece un mensaje de sistema personalizado para especificar el comportamiento del asistente de chat
SYSTEM You are Mario from super mario bros, acting as an assistant.Para usar esto:
- Guárdalo como un archivo (ej.
Modelfile) ollama create choose-a-model-name -f <location of the file e.g. ./Modelfile>ollama run choose-a-model-name- ¡Comienza a usar el modelo!
Para ver el Modelfile de un modelo determinado, usa el comando ollama show --modelfile.
shell
ollama show --modelfile llama3.2# Modelfile generado por "ollama show"
# Para construir un nuevo Modelfile basado en este, reemplaza la línea FROM con:
# 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"Instrucciones
FROM (Obligatorio)
La instrucción FROM define el modelo base a usar al crear un modelo.
FROM <model name>:<tag>Construir a partir de un modelo existente
FROM llama3.2Una lista de modelos base disponibles
Base ModelsSe pueden encontrar modelos adicionales en
Construir a partir de un modelo Safetensors
FROM <model directory>El directorio del modelo debe contener los pesos Safetensors para una arquitectura compatible.
Arquitecturas de modelo compatibles actualmente:
- Llama (incluyendo Llama 2, Llama 3, Llama 3.1 y Llama 3.2)
- Mistral (incluyendo Mistral 1, Mistral 2 y Mixtral)
- Gemma (incluyendo Gemma 1 y Gemma 2)
- Phi3
Construir a partir de un archivo GGUF
FROM ./ollama-model.ggufLa ubicación del archivo GGUF debe especificarse como una ruta absoluta o relativa a la ubicación del Modelfile.
PARAMETER
La instrucción PARAMETER define un parámetro que se puede establecer al ejecutar el modelo.
PARAMETER <parameter> <parametervalue>Parámetros y valores válidos
| Parámetro | Descripción | Tipo de valor | Ejemplo de uso |
|---|---|---|---|
| num_ctx | Establece el tamaño de la ventana de contexto usada para generar el siguiente token. (Predeterminado: 2048) | int | num_ctx 4096 |
| repeat_last_n | Establece qué tan atrás debe mirar el modelo para evitar repeticiones. (Predeterminado: 64, 0 = desactivado, -1 = num_ctx) | int | repeat_last_n 64 |
| repeat_penalty | Establece la fuerza con la que se penalizan las repeticiones. Un valor más alto (ej. 1.5) penalizará las repeticiones más fuertemente, mientras que un valor más bajo (ej. 0.9) será más indulgente. (Predeterminado: 1.1) | float | repeat_penalty 1.1 |
| temperature | La temperatura del modelo. Aumentar la temperatura hará que el modelo responda de forma más creativa. (Predeterminado: 0.8) | float | temperature 0.7 |
| seed | Establece la semilla de número aleatorio a usar para la generación. Establecer esto en un número específico hará que el modelo genere el mismo texto para el mismo prompt. (Predeterminado: 0) | int | seed 42 |
| stop | Establece las secuencias de parada a usar. Cuando se encuentre este patrón, el LLM dejará de generar texto y devolverá el resultado. Se pueden establecer múltiples patrones de parada especificando múltiples parámetros stop separados en un modelfile. | string | stop "AI assistant:" |
| num_predict | Número máximo de tokens a predecir al generar texto. (Predeterminado: -1, generación infinita) | int | num_predict 42 |
| draft_num_predict | Número máximo de tokens de borrador especulativo a predecir por paso cuando hay un modelo de borrador disponible. Los modelos de borrador separados tienen un valor predeterminado de 4; los tensores MTP integrados requieren establecer este parámetro. Establecer en 0 para desactivar el borrado especulativo. | int | draft_num_predict 4 |
| top_k | Reduce la probabilidad de generar contenido sin sentido. Un valor más alto (ej. 100) dará respuestas más diversas, mientras que un valor más bajo (ej. 10) será más conservador. (Predeterminado: 40) | int | top_k 40 |
| top_p | Funciona junto con top-k. Un valor más alto (ej. 0.95) generará texto más diverso, mientras que un valor más bajo (ej. 0.5) generará texto más enfocado y conservador. (Predeterminado: 0.9) | float | top_p 0.9 |
| min_p | Alternativa a topp, que busca garantizar un equilibrio entre calidad y variedad. El parámetro _p representa la probabilidad mínima para que un token sea considerado, en relación con la probabilidad del token más probable. Por ejemplo, con p=0.05 y el token más probable con una probabilidad de 0.9, se filtran los logits con un valor menor a 0.045. (Predeterminado: 0.0) | float | min_p 0.05 |
TEMPLATE
TEMPLATE de la plantilla de prompt completa que se pasará al modelo. Puede incluir (opcionalmente) un mensaje del sistema, un mensaje del usuario y la respuesta del modelo. Nota: la sintaxis puede ser específica de cada modelo. Las plantillas usan la sintaxis de plantillas de Go.
Variables de plantilla
| Variable | Descripción |
|---|---|
{{.System}} | El mensaje del sistema usado para especificar comportamiento personalizado. |
{{.Prompt}} | El mensaje de prompt del usuario. |
{{.Response}} | La respuesta del modelo. Al generar una respuesta, se omite el texto después de esta variable. |
TEMPLATE """{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
"""SYSTEM
La instrucción SYSTEM especifica el mensaje del sistema que se usará en la plantilla, si aplica.
SYSTEM """<system message>"""ADAPTER
La instrucción ADAPTER especifica un adaptador LoRA afinado que se debe aplicar al modelo base. El valor del adaptador debe ser una ruta absoluta o una ruta relativa al Modelfile. El modelo base debe especificarse con una instrucción FROM. Si el modelo base no es el mismo que el modelo base a partir del cual se afinó el adaptador, el comportamiento será errático.
Adaptador Safetensor
ADAPTER <path to safetensor adapter>Adaptadores Safetensor compatibles actualmente:
- Llama (incluyendo Llama 2, Llama 3 y Llama 3.1)
- Mistral (incluyendo Mistral 1, Mistral 2 y Mixtral)
- Gemma (incluyendo Gemma 1 y Gemma 2)
Adaptador GGUF
ADAPTER ./ollama-lora.ggufLICENSE
La instrucción LICENSE te permite especificar la licencia legal bajo la cual se comparte o distribuye el modelo usado con este Modelfile.
LICENSE """
<license text>
"""MESSAGE
La instrucción MESSAGE te permite especificar un historial de mensajes que el modelo usará al responder. Usa múltiples iteraciones del comando MESSAGE para construir una conversación que guíe al modelo a responder de manera similar.
MESSAGE <role> <message>Roles válidos
| Rol | Descripción |
|---|---|
| system | Forma alternativa de proporcionar el mensaje SYSTEM al modelo. |
| user | Un mensaje de ejemplo de lo que el usuario podría haber preguntado. |
| assistant | Un mensaje de ejemplo de cómo debe responder el modelo. |
Ejemplo de conversación
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 yesREQUIRES
La instrucción REQUIRES te permite especificar la versión mínima de Ollama requerida por el modelo.
REQUIRES <version>La versión debe ser una versión válida de Ollama (ej. 0.14.0).
Notas
- El
Modelfileno distingue mayúsculas y minúsculas. En los ejemplos, se usan instrucciones en mayúsculas para facilitar su distinción de los argumentos. - Las instrucciones pueden estar en cualquier orden. En los ejemplos, la instrucción
FROMestá primero para que sea más fácil de leer.