olmo-eval: banco de pruebas para desarrollo de LLM | Keryc
Si construyes modelos de lenguaje grande (LLM), conoces la sensación: cambias un dato, ajustas un hiperparámetro, subes la escala y vuelves a empezar la misma rutina de evaluaciones. ¿Mejoró realmente el modelo o solo es ruido estadístico? olmo-eval nace para responder a esa pregunta dentro del ciclo activo de desarrollo, no solo al final de un paper.
Qué es olmo-eval y por qué importa
olmo-eval es un workbench de evaluación pensado para el trabajo cotidiano de desarrollar LLMs. Parte de la base del estándar OLMES (Open Language Model Evaluation Standard) y lo extiende para que medir sea rápido, reproducible y adaptado a modelos que cambian con frecuencia.
No es una herramienta pensada solo para publicar benchmarks: está pensada para que tú puedas añadir, configurar y volver a correr evaluaciones de forma fluida mientras entrenas y tuneas checkpoints. Si te preguntas "¿qué cambió entre checkpoint A y checkpoint B y dónde exactamente?", olmo-eval se enfoca en responder eso a nivel de cada ejemplo.
Cómo funciona: conceptos clave
olmo-eval organiza la evaluación en cuatro capas que convienen conocer:
Task / Suite / Harness: separa la lógica del benchmark (task) del conjunto de tareas (suite) y de la política de ejecución (harness). Esto permite correr la misma tarea como baseline o con herramientas, sin cambiar lo que se mide.
Sandbox y capability routing: soporta evaluaciones agenticas donde el modelo usa herramientas reales (por ejemplo, ejecutar código o navegar). olmo-eval orquesta los sandboxes y alimenta al modelo con los resultados reales de esas acciones.
Esquema de experimento normalizado: registra cada corrida, su configuración y resultados en un formato estructurado. Así puedes comparar checkpoints a lo largo del tiempo sin salirte del mismo esquema de metadatos.
Results viewer para comparaciones pareadas: alinear dos checkpoints pregunta por pregunta revela mejoras o regresiones sutiles que un promedio global podría ocultar.
Detalles técnicos relevantes
Modularidad: el modelo, las herramientas disponibles, el entorno sandobox y los modelos auxiliares (por ejemplo un LLM juez) son componentes intercambiables.
Path ligero por defecto: si una tarea solo necesita respuestas del modelo, se ejecuta directo y barato. Solo se crea un contenedor aislado cuando la tarea exige sandboxing, reduciendo costos y latencia.
Métricas estadísticas: olmo-eval no solo reporta puntajes sino errores estándar y Minimum Detectable Effect (MDE), para ayudarte a distinguir mejoras reales del ruido.
Diferencias con otras herramientas
Comparado con Harbor u otros frameworks, olmo-eval prioriza el loop de desarrollo continuo:
Harbor busca reproducibilidad rígida con contenedores por defecto; olmo-eval permite elegir entre ejecución ligera o sandbox según la necesidad.
Harbor está orientado a publicar benchmarks con pasos de verificación extra. olmo-eval está hecho para moverte rápido durante el desarrollo y para que añadir una evaluación no sea un proyecto de integración.
olmo-eval registra y compara resultados punto por punto entre checkpoints, mostrando si una pequeña diferencia en el promedio es significativa o solo ruido.
Ejemplo práctico
Añadir un benchmark en olmo-eval solo requiere definir una Task. Aquí tienes un ejemplo simplificado:
from olmo_eval.common.formatters import ChatFormatter
from olmo_eval.common.metrics import AccuracyMetric
from olmo_eval.common.scorers import ExactMatchScorer
from olmo_eval.common.types import Instance, SamplingParams
from olmo_eval.data import DataLoader, DataSource
from olmo_eval.evals.tasks.common import Task, register
@register("internal_freshqa")
class InternalFreshQA(Task):
data_source = DataSource(path="s3://evals/internal/freshqa.jsonl", split="test")
formatter = ChatFormatter()
sampling_params = SamplingParams(temperature=0.0)
metrics = (AccuracyMetric(scorer=ExactMatchScorer),)
@property
def instances(self):
loader = DataLoader()
for idx, doc in enumerate(loader.load(self.config.get_data_source())):
yield Instance(
question=doc["question"],
gold_answer=doc["answer"],
metadata={"id": doc.get("id", f"freshqa_{idx}")},
)
Y en la práctica puedes ejecutar la misma tarea con distintos runtime policies sin cambiar la tarea:
# Baseline
olmo-eval run -m my-instruct-checkpoint -t internal_freshqa:zero
# Misma tarea, runtime con búsqueda/agent habilitado
olmo-eval run -m my-instruct-checkpoint -t internal_freshqa:zero --harness search_agent
Recomendaciones prácticas para equipos técnicos
Integra olmo-eval en tu CI para evaluar checkpoints automáticamente y capturar MDE y errores estándar antes de promover un cambio.
Usa la comparación pareada pregunta por pregunta para identificar exactamente dónde mejoró o empeoró el modelo.
Aprovecha la modularidad: reutiliza herramientas y graders entre harnesses para evitar duplicación y mantener consistencia.
Prefiere el path ligero durante iteraciones rápidas y reserva el sandbox cuando la tarea realmente lo necesite, esto ahorra recursos.
Reflexión final
olmo-eval no es solo otra suite de benchmarks; es una respuesta práctica al problema cotidiano de medir cambios en modelos que evolucionan. Si trabajas iterando checkpoints, ajustar datos o pruebas de herramientas, esta herramienta te ayuda a pasar menos tiempo montando integraciones y más tiempo entendiendo si tus intervenciones realmente funcionan.