−25%

på Windows ved årlig betaling, til 31/10. Se pakkerne

EQVPS
Kom i gang

Sandbox til LLM-evaluering: 1.000 modelskrevne løsninger for omkring en cent

At bedømme en model på programmeringsopgaver betyder at køre tusindvis af programmer, som ingen har skrevet i hånden. Kør dem i engangs-sandboxe på microVM i stedet for på din bærbare – afregning pr. sekund og en ærlig note om gennemløb og CPU-grænser.

Kodebenchmarks har en beskidt hemmelighed: For at bedømme en model skal du køre det, den skrev. En pass@k-kørsel over et par hundrede opgaver med ti løsninger hver er tusindvis af nygenererede programmer – og du ville aldrig køre curl | bash på ét eneste af dem fra en fremmed.

De fleste starter på deres bærbare med subprocess.run og en timeout. Det virker, indtil en løsning skriver en fil på 40 GB, forker, indtil maskinen går i stå, eller stille og roligt læser din hjemmemappe. Løsningen er ikke en klogere timeout. Det er at køre løsningerne et sted, hvor det er ligegyldigt.

Opsætningen, der virker

En sandbox er en Firecracker-microVM med Python 3.12, Node.js 22 og bash, startet på cirka et sekund og slettet, når du er færdig. Udgående internet virker, indgående gør ikke, og intet af dit ligger derinde.

Fælden er at behandle en sandbox som et funktionskald. Hver sandbox afregnes for mindst 60 sekunder og tager et sekund at starte, så én sandbox pr. løsning er langsomt og ødsel. Læg i stedet harnessen indenfor:

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")

Indeni kører harness.py hver løsning i en underproces med sin egen korte timeout og noterer pass, fail eller timeout. En løsning, der opfører sig dårligt, dræber sin egen underproces, ikke kørslen. Lykkes det en løsning at ødelægge selve sandboxen, mister du én del, genopretter sandboxen og fortsætter.

Filer går op til 5 MB pr. overførsel, så del store datasæt op i stykker – det vil du alligevel af hensyn til parallelisme.

Gennemløb, ærligt

En konto kan have op til 20 sandboxe, men 2 kommandoer udføres samtidig. En baggrundsopgave tæller, mens den kører. En hurtig evaluering ser altså ud som to sandboxe, der hver især maler sig gennem deres del i baggrunden – ikke tyve sandboxe, der slås om to pladser.

Til typiske kodebenchmarks er det rigeligt: de fleste løsninger er færdige på under et sekund, og én sandbox når tusindvis i timen. Skal du evaluere mange modeller på én gang mod en enorm suite, rammer du loftet. På det tidspunkt er en VPS med din egen isolation det bedre værktøj.

CPU-reglen, du bør kende

Sandboxe er bygget til arbejde i stød. En sandbox, der ligger over 90 % CPU i mere end 15 minutter, betragtes som misbrug – en midlertidig sandbox stoppes. Almindelige evalueringer, der skifter mellem hurtige kørsler og bogføring af resultater, kommer ikke i nærheden. Et benchmark, der brænder fuld CPU af i timevis (kompilering af et stort projekt pr. løsning, numeriske stresstests), gør. Til det tager du en VPS pr. måned: tariffen AI agent giver 4 vCPU og 4 GB for $10.

Hvad en kørsel koster

Du betaler pr. sekund for tariffens vCPU og RAM, mindst 60 sekunder, fra en forudbetalt saldo.

ArbejdsbyrdeTarifTidOmtrentlig pris
1.000 korte Python-løsningersmall (0.5 vCPU, 1 GB)~20 min$0.011
5.000 løsninger, numpy tilladtstandard (1 vCPU, 2 GB)~2 t$0.13
Build + tests pr. løsningplus (2 vCPU, 4 GB)~3 t$0.40

Modelkaldene, der genererer løsningerne, koster dig mere end kørslen – typisk en størrelsesorden mere.

Nøgler og reproducerbarhed

Hvis harnessen kalder et model-API inde fra sandboxen – for eksempel til bedømmelse i LLM-as-judge-stil – så giv nøglen med som miljøvariabel for sandboxen. Værdierne gemmes krypteret, logges aldrig, og API'et returnerer kun variabelnavnene.

For reproducerbarhedens skyld låser du pakkeversioner i din harness og noterer sandboxens tarif sammen med resultaterne. Hver sandbox starter fra det samme rene image, hvilket fjerner variablen „det virkede på min bærbare“ fra dine tal. Ærligt talt er det alene skiftet værd.

Start med sandbox-siden og sandbox-dokumentationen. Nye konti får $1 i sandbox-tid – nok til en første evaluering med et par tusind løsninger på tariffen small. SDK-referencen dækker baggrundsopgaver og filoverførsler, og grænser og afregning for sandboxe har hele kvotetabellen.

Relateret: sandbox til AI-agenter og din første agentopgave i en sandbox.

Klar til at deploye? Betal med krypto, ingen KYC — live på cirka et minut.

Deploy nu →

FAQ

Hvorfor har en evaluering overhovedet brug for en sandbox?

Fordi du kører tusindvis af programmer skrevet af en model. De fleste er harmløse, nogle kører i ring for evigt, og et par stykker sletter filer eller åbner netværksforbindelser. På din arbejdsstation er det en risiko for dine data; i en sandbox er det en mislykket løsning.

Skal jeg oprette én sandbox pr. løsning?

Som regel ikke. At oprette en sandbox tager cirka et sekund og afregnes for mindst 60 sekunder, så én sandbox pr. løsning spilder begge dele. Kør en harness i én sandbox, der udfører mange løsninger, hver med sin egen timeout, og genopret sandboxen mellem modeller, eller når noget ødelægger den.

Hvor hurtigt kan jeg gå?

En konto udfører højst 2 kommandoer samtidig fordelt på op til 20 sandboxe. Det praktiske mønster er nogle få sandboxe, hvor din harness kører som baggrundsopgave og arbejder sig gennem en del af datasættet.

Kan jeg køre et langt benchmark i timevis?

Som baggrundsopgave ja, indtil sandboxens levetid udløber (24 timer for en midlertidig). Men en sandbox, der holdes på fuld CPU i mere end 15 minutter, betragtes som misbrug. Evalueringer i stød er fine; jævn talknusning i timevis hører hjemme på en VPS.

Kan sandboxen kalde min models API?

Udgående internet er åbent, så ja. Giv API-nøglen med som miljøvariabel for sandboxen – den gemmes krypteret og returneres aldrig af API'et – i stedet for at indsætte den i genereret kode.

Kommentarer

Ingen kommentarer endnu. Vær den første.

Skriv en kommentar

Kommentarer modereres, før de vises.