Skip to content

Sizes and GPU boxes

Standard, Large, XL and GPU boxes, what each is for, how their awake hours count, and how GPU boxes differ.

A box's size is its machine: how many CPUs, how much memory, and whether it has a GPU. You pick it when you make the box, in the New box dialog (agents pass size to box_create), and the box keeps it for life.

Size Machine An awake hour counts as Plans
Standard 1 vCPU · 4 GB 1 hour Every plan
Large 4 vCPU · 16 GB 4 hours Pro, Power
XL 8 vCPU · 16 GB 6 hours Power
GPU RTX 4090 · 4 vCPU · 8 GB 8 hours Pro, Power

Which size to pick

  • Standard suits most work: scripts, data, documents, files and small builds. Start here.
  • Large is for dev servers, big builds, long test suites and several browsers at once.
  • XL is for the heaviest builds.
  • GPU is only for work that needs graphics hardware: WebGL and WebGPU performance and pixel tests, and CUDA or machine learning jobs. Most canvas and WebGL work runs fine without one.

A bigger box uses your awake hours faster, so agents are told to start small and ask for more only when the job needs it.

How awake hours count

An hour awake on a bigger box counts as more than one of your plan's awake hours, as the table shows. A Large box that is awake for 30 minutes uses 2 plan hours, and a GPU box uses 4. Sleeping boxes use none, whatever their size.

Your plan sets which sizes you can make. A size your plan doesn't include can't be picked in the dialog, which links to the upgrade, and box_create fails with a message that says so.

Large and XL boxes

Large (4 vCPU · 16 GB) and XL (8 vCPU · 16 GB) boxes work like standard ones, with two differences:

  • Programs restart on wake. Their files stay, but background jobs, servers and anything open on the screen stop when the box sleeps. Your agent starts them again after the wake.
  • Ask the box how big it is. Commands see the box's CPU count in $WACK_CPUS and its memory in $WACK_MEMORY_GIB, because nproc and free can report the host's. Agents use them for -j, worker counts and heap sizes.

Standard, Large and XL boxes have no GPU. Browsers on them draw WebGL and WebGPU on the CPU, which is slower but very repeatable (Pixel tests).

GPU boxes

A GPU box has one NVIDIA RTX 4090 (24 GB) with 4 vCPU and 8 GB of memory. CUDA, Vulkan and EGL work, and Chrome is already installed with the flags that make it draw on the GPU. Pick GPU in the New box dialog, or have your agent pass size: "gpu" to box_create.

GPU boxes run on spare capacity, which makes them cheap enough to run several at once. That comes with differences from other boxes:

  • It's always temporary. A GPU box never sleeps. When it stops (after 10 idle minutes, 12 hours awake, or End in its ⋯ menu), the box and its disk are deleted. Its card says GPU · Temporary.
  • It can be reclaimed. Spare capacity can be taken back at any time, without warning. The box and everything on its disk go with it, and your agent's next call to it says it was reclaimed. Nothing restarts by itself, so have your agent download results as it goes (checkpoints, screenshots, perf numbers), not only at the end. To carry on, make a new GPU box from the same image or setup.
  • It has its own limit. Your plan sets how many GPU boxes can run at once: 0 on Hobby, 2 on Pro and 6 on Power. They don't count toward your other box limits, and each of their awake hours counts as 8.
  • Running several. Each GPU box is its own box, so your agent can make several side by side for parallel jobs. When no GPU is free, making one fails with a message that says so; try again in a few minutes.
  • Images. Save as image works on a GPU box without stopping it. It takes from under a minute to about 10 minutes, depending on how much is on its disk, and programs running in it can end, so check them afterwards. Boxes started from a GPU image are GPU boxes. For most jobs a setup is quicker.
  • No reset. A GPU box can't be reset: end it and make a new one.

Chrome on the GPU

Launch $CHROME_PATH with --no-sandbox $WACK_CHROME_GPU_FLAGS, plus --headless=new for headless, or with the screen on for a window you can watch. Both draw on the GPU. Browser libraries add defaults that turn the GPU off, so the box manual tells agents which ones to strip.

  • Check the GPU on every run. WebGL's renderer should name the RTX 4090 and WebGPU's adapter shouldn't be the fallback one; otherwise Chrome quietly fell back to the CPU. Right after launch the adapter can be missing for about half a second, so request it with powerPreference: "high-performance" and ask again every 500 ms for up to 10 seconds before judging.
  • Check WebGPU in its own page. With --headless=new, asking for a WebGPU adapter after a page has made a WebGL context loses that context. Keep the WebGPU check apart from WebGL work, and run a page that uses both in chrome-headless-shell (same flags) or on the screen, which don't have this problem.
  • Keep the driver with the results. /root/.wack/gpu.txt has the GPU and driver version. Store it next to every baseline and perf result, since the driver can differ from box to box.

CUDA and machine learning

nvidia-smi shows the GPU. PyTorch installs in about 15 seconds:

uv pip install --system --break-system-packages torch --index-url https://download.pytorch.org/whl/cu128

Write long jobs so they can resume from a checkpoint, and have your agent download checkpoints as they are made.

Last updated