Les benchmarks de code ont un secret honteux : pour noter un modèle, il faut exécuter ce qu'il a écrit. Un pass@k sur quelques centaines de problèmes avec dix solutions chacun, ce sont des milliers de programmes fraîchement générés — et vous ne feriez jamais curl | bash sur un seul d'entre eux venant d'un inconnu.
La plupart des gens commencent sur leur portable avec un subprocess.run et un timeout. Ça marche jusqu'à ce qu'une solution écrive un fichier de 40 GB, forke jusqu'à bloquer la machine ou lise discrètement votre répertoire personnel. La solution n'est pas un timeout plus malin. C'est d'exécuter les solutions là où ça ne vous coûte rien.
La configuration qui fonctionne
Une sandbox est une microVM Firecracker avec Python 3.12, Node.js 22 et bash, démarrée en une seconde environ et supprimée quand vous avez fini. L'Internet sortant fonctionne, l'entrant non, et rien de ce qui vous appartient ne s'y trouve.
Le piège : traiter une sandbox comme un appel de fonction. Chacune est facturée au moins 60 secondes et met une seconde à démarrer, donc une sandbox par solution est lente et coûteuse. Placez plutôt le harnais à l'intérieur :
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")
À l'intérieur, harness.py lance chaque solution dans un sous-processus avec son propre timeout court et enregistre pass, fail ou timeout. Une solution qui se comporte mal tue son propre sous-processus, pas l'exécution. Si une solution parvient à casser la sandbox elle-même, vous perdez une tranche, recréez la sandbox et continuez.
Les fichiers vont jusqu'à 5 MB par transfert : découpez donc les gros jeux de données en tranches — ce que vous voulez de toute façon pour le parallélisme.
Le débit, honnêtement
Un compte peut détenir jusqu'à 20 sandboxes, mais 2 commandes s'exécutent en même temps. Une tâche de fond compte tant qu'elle tourne. Une évaluation rapide ressemble donc à deux sandboxes qui moulinent chacune leur tranche en arrière-plan, pas à vingt sandboxes qui se battent pour deux emplacements.
Pour les benchmarks de code courants, c'est largement suffisant : la plupart des solutions terminent en moins d'une seconde, et une sandbox en traite des milliers par heure. Si vous devez évaluer de nombreux modèles à la fois sur une suite énorme, vous toucherez le plafond. À ce stade, un VPS avec votre propre isolation est le meilleur outil.
La règle CPU à connaître
Les sandboxes sont conçues pour un travail par à-coups. Une sandbox maintenue au-dessus de 90 % de CPU pendant plus de 15 minutes est considérée comme un abus — une sandbox éphémère est arrêtée. Les évaluations normales, qui alternent exécutions rapides et comptabilité des résultats, n'en approchent pas. Un benchmark qui brûle tout le CPU pendant des heures (compiler un gros projet par solution, tests de charge numériques), si. Pour cela, prenez un VPS au mois : le tarif AI agent offre 4 vCPU et 4 GB pour $10.
Ce que coûte une exécution
Vous payez à la seconde les vCPU et la RAM du tarif, 60 secondes minimum, depuis un solde prépayé.
| Charge | Tarif | Durée | Coût approximatif |
|---|---|---|---|
| 1 000 courtes solutions Python | small (0.5 vCPU, 1 GB) | ~20 min | $0.011 |
| 5 000 solutions, numpy autorisé | standard (1 vCPU, 2 GB) | ~2 h | $0.13 |
| Build + tests par solution | plus (2 vCPU, 4 GB) | ~3 h | $0.40 |
Les appels au modèle qui génèrent ces solutions vous coûteront plus cher que leur exécution — en général d'un ordre de grandeur.
Clés et reproductibilité
Si le harnais appelle une API de modèle depuis la sandbox — par exemple pour une notation de type LLM-as-judge —, passez la clé comme variable d'environnement de la sandbox. Les valeurs sont stockées chiffrées, jamais journalisées, et l'API ne renvoie que les noms des variables.
Pour la reproductibilité, figez les versions des paquets dans votre harnais et notez le tarif de la sandbox avec les résultats. Chaque sandbox démarre de la même image propre, ce qui retire la variable « ça marchait sur mon portable » de vos chiffres. Franchement, rien que pour ça, le changement vaut le coup.
Commencez par la page des sandboxes et la documentation des sandboxes. Les nouveaux comptes reçoivent $1 de temps de sandbox — assez pour une première évaluation de quelques milliers de solutions sur le tarif small. La référence du SDK couvre les tâches de fond et les transferts de fichiers, et limites et facturation des sandboxes donne le tableau complet des quotas.
À lire aussi : sandbox pour agents IA et votre première tâche d'agent dans une sandbox.
Commentaires
Pas encore de commentaires. Soyez le premier.