Los benchmarks de código tienen un secreto incómodo: para puntuar un modelo hay que ejecutar lo que escribió. Un pass@k sobre unos cientos de problemas con diez soluciones cada uno son miles de programas recién generados, y no harías curl | bash con ninguno de ellos si viniera de un desconocido.
La mayoría empieza en su portátil con un subprocess.run y un timeout. Funciona hasta que una solución escribe un archivo de 40 GB, lanza procesos hasta bloquear la máquina o lee en silencio tu directorio personal. La solución no es un timeout más ingenioso. Es ejecutar las soluciones en un sitio que no te importe.
La configuración que funciona
Una sandbox es una microVM Firecracker con Python 3.12, Node.js 22 y bash, que arranca en un segundo aproximadamente y se borra cuando terminas. La salida a internet funciona, la entrada no, y no hay nada tuyo dentro.
La trampa es tratar una sandbox como una llamada a función. Cada una se factura un mínimo de 60 segundos y tarda un segundo en arrancar, así que una sandbox por solución es lento y caro. En su lugar, mete el harness dentro:
from eqvps import Sandbox
with Sandbox.create(tariff="standard", ttl=4 * 3600) as sb:
sb.upload("/root/harness.py", open("harness.py").read())
sb.upload("/root/samples.jsonl", open("slice_03.jsonl").read())
task = sb.exec("python3 /root/harness.py /root/samples.jsonl > /root/results.jsonl",
background=True)
task.wait(poll_interval=10)
results = sb.download_text("/root/results.jsonl")
Dentro, harness.py ejecuta cada solución en un subproceso con su propio timeout corto y anota pass, fail o timeout. Una solución que se porta mal mata su propio subproceso, no la ejecución. Si una solución consigue romper la propia sandbox, pierdes una parte, recreas la sandbox y sigues.
Los archivos llegan hasta 5 MB por transferencia, así que divide los datasets grandes en partes, algo que de todos modos quieres para el paralelismo.
Rendimiento, con honestidad
Una cuenta puede tener hasta 20 sandboxes, pero 2 comandos se ejecutan a la vez. Una tarea en segundo plano cuenta mientras se ejecuta. Así que una evaluación rápida son dos sandboxes que procesan su parte en segundo plano, no veinte sandboxes peleándose por dos huecos.
Para los benchmarks de código habituales es más que suficiente: la mayoría de las soluciones terminan en menos de un segundo, y una sandbox procesa miles por hora. Si tienes que evaluar muchos modelos a la vez contra una suite enorme, chocarás con el techo. En ese punto, un VPS con tu propio aislamiento es mejor herramienta.
La regla de CPU que debes conocer
Las sandboxes están pensadas para trabajo a ráfagas. Una sandbox con más del 90 % de CPU durante más de 15 minutos se considera abuso: una sandbox efímera se detiene. Las evaluaciones normales, que alternan ejecuciones rápidas con la contabilidad de resultados, no se acercan a eso. Un benchmark que quema toda la CPU durante horas (compilar un proyecto grande por solución, pruebas de estrés numéricas), sí. Para eso, contrata un VPS por meses: la tarifa AI agent da 4 vCPU y 4 GB por $10.
Cuánto cuesta una ejecución
Pagas por segundo los vCPU y la RAM de la tarifa, mínimo 60 segundos, desde un saldo prepago.
| Carga | Tarifa | Tiempo | Coste aprox. |
|---|---|---|---|
| 1.000 soluciones cortas en Python | small (0.5 vCPU, 1 GB) | ~20 min | $0.011 |
| 5.000 soluciones, numpy permitido | standard (1 vCPU, 2 GB) | ~2 h | $0.13 |
| Build + tests por solución | plus (2 vCPU, 4 GB) | ~3 h | $0.40 |
Las llamadas al modelo que generan esas soluciones te costarán más que la ejecución, normalmente un orden de magnitud más.
Claves y reproducibilidad
Si el harness llama a la API de un modelo desde la sandbox —por ejemplo, para puntuar al estilo LLM-as-judge—, pasa la clave como variable de entorno de la sandbox. Los valores se guardan cifrados, nunca se registran en logs y la API solo devuelve los nombres de las variables.
Para la reproducibilidad, fija las versiones de los paquetes en tu harness y anota la tarifa de la sandbox junto a los resultados. Cada sandbox arranca desde la misma imagen limpia, lo que elimina de tus cifras la variable «en mi portátil funcionaba». Sinceramente, solo por eso ya merece la pena el cambio.
Empieza por la página de sandboxes y la documentación de sandboxes. Las cuentas nuevas reciben $1 de tiempo de sandbox, suficiente para una primera evaluación de unos miles de soluciones en la tarifa small. La referencia del SDK cubre las tareas en segundo plano y la transferencia de archivos, y límites y facturación de las sandboxes tiene la tabla completa de cuotas.
Relacionado: sandbox para agentes de IA y tu primera tarea de agente en una sandbox.
Comentarios
Aún no hay comentarios. Sé el primero.