olmo-eval: herramienta para evaluar LLM en desarrollo | Keryc
Mientras construyes un LLM, lo evalúas una y otra vez: cambias datos, arquitectura o hiperparámetros y vuelves a pasar por el mismo lazo. ¿Cómo sabes si una mejora en un experimento pequeño se mantiene en el entrenamiento final? olmo-eval llega para automatizar y ordenar justo esa parte del flujo de trabajo.
Qué es olmo-eval y por qué importa
olmo-eval es un workbench de evaluación para el ciclo de desarrollo de modelos que extiende la idea de OLMES. OLMES puso orden en cómo se reportan benchmarks; olmo-eval hace que esas mediciones sean útiles durante el desarrollo activo. No se trata solo de obtener una puntuación final: se trata de repetir, comparar y entender cambios entre checkpoints con rigor estadístico.
¿Te suena familiar esta pregunta? "¿Ese +2.4 puntos porcentuales es real o es ruido?" olmo-eval te ayuda a responderla, mostrando errores estándar y el efecto mínimo detectable, y comparando respuestas pregunta por pregunta entre checkpoints.
¿En qué cambia la rutina de evaluación?
Modularidad: separa la definición del benchmark del runtime. Eso significa que puedes cambiar cómo ejecutas una tarea sin reescribir la tarea misma.
Flexibilidad de ejecución: por defecto usa la vía ligera (ejecutar el modelo directamente). Si un benchmark requiere aislamiento (por ejemplo, ejecutar código), usa contenedores o sandboxes.
Reutilización: herramientas, harnesses y modelos auxiliares son componentes intercambiables. Puedes conectar un grader LLM sin tocar la tarea original.
Análisis fino: además de promedios, alinea las mismas preguntas entre dos checkpoints para detectar mejoras o regresiones pequeñas pero consistentes.
Componentes principales (arquitectura)
olmo-eval se estructura en cuatro bloques que puedes usar por separado o combinar:
Task / Suite / Harness: define qué se evalúa (Task), agrupa tareas (Suite) y controla cómo se ejecutan (Harness). Esto permite ejecutar la misma Task en modo baseline o con herramientas sin tocar la definición.
Sandbox y enrutamiento por capacidades: soporta evaluaciones agenticas donde el modelo usa herramientas. Olmo-eval ejecuta esas herramientas y devuelve sus salidas al modelo para valorar su uso en condiciones reales.
Esquema normalizado de experimentos: registra cada corrida, su configuración y resultados en un formato estructurado. Ideal para seguimiento en desarrollos largos.
Visor de resultados para comparaciones pareadas: alinea dos checkpoints pregunta por pregunta para ver cambios mínimos que un promedio podría ocultar.
Ejemplo técnico: autorar una tarea y variantes
Aquí tienes un ejemplo en Python (tal y como olmo-eval lo espera):
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_variant
@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}")},
)
# variantes sin duplicar la tarea
register_variant("internal_freshqa", "3shot", num_fewshot=3, fewshot_seed=1234)
register_variant("internal_freshqa", "zero", num_fewshot=0)
Suites y ejecuciones desde la CLI:
# Ejecutar un baseline
olmo-eval run -m my-instruct-checkpoint -t internal_freshqa:zero
# Mismo task, runtime con herramientas / búsqueda
olmo-eval run -m my-instruct-checkpoint -t internal_freshqa:zero --harness search_agent
Cómo se compara con Harbor (y cuándo usar cada uno)
Enfoque: Harbor está pensado para ejecutar y publicar benchmarks agenticos en contenedores sellados. olmo-eval está pensado para el trabajo diario de desarrollo, donde iteras rápido.
Contenedores: Harbor ejecuta todo dentro de contenedores reproducibles. olmo-eval permite elegir: ejecución ligera por defecto y sandbox solo cuando el benchmark lo requiere.
Integración rápida: añadir un benchmark en Harbor suele implicar pasos de verificación para publicar; en olmo-eval basta con definir una Task o envolver un benchmark existente con ExternalEval si ya tiene su propio runner.
Análisis: olmo-eval pone foco en comparaciones pareadas y métricas de inferencia estadística para distinguir mejora real de ruido.
Recomendaciones prácticas para equipos técnicos
Integra olmo-eval en tu pipeline de checkpoints. Ejecuta suites clave automáticamente para detectar desviaciones tempranas.
Usa variantes para probar políticas de prompt o few-shot sin duplicar código de benchmark.
Aprovecha el esquema normalizado para construir dashboards y trazabilidad entre experimentos.
Observa el error estándar y el efecto mínimo detectable antes de declarar victorias. Un cambio pequeño en el promedio puede no ser significativo.
Reflexión final
olmo-eval no es solo otra herramienta de benchs; es una caja de herramientas para que la evaluación acompañe al desarrollo, y no al revés. Si tu pregunta recurrente es "¿qué cambió entre este checkpoint y el anterior?", olmo-eval está diseñado para darte una respuesta reproducible y accionable, desde la ejecución ligera hasta el sandbox cuando hace falta.