Skip to content

GPU sizing

Setup reads each NVIDIA GPU’s UUID, driver, total and free VRAM and compute capability, and binds hosting to one GPU; memory is not summed across GPUs. It needs driver 580 or newer (CUDA 13) and a GeForce RTX 30 (8.6), 40 (8.9) or 50 (12.0) series card. One release covers all three.

Synoec picks the largest configuration that fits the card’s free memory: the context window, from 262,144 down to 32,768 tokens, in the all-round rk8v4 KV cache, else the same window in the smaller rk4v4, else a shorter window. The estimate counts 7.7 GB of resident text weights, 1.1 GB for the DFlash2 drafter, 1 GB of runtime headroom, 24 (rk8v4) or 16 (rk4v4) bytes per token of window and a 512 MiB desktop floor; the vision encoder borrows the drafter’s memory while it reads an image. These are Synoec’s estimates from the NInfer-all performance tables, not measured on every card.

The server also pins host RAM for its prefix cache, the checkpoints that let a long chat’s next step re-read only what is new. Synoec sizes it from what the machine has left after the GPU share, media buffers and a 10 GB reserve, up to 16 GiB: two full 262k windows. On a 24 GB machine that leaves none, and every step re-reads the chat.

Free VRAM Starting configuration
8 GB None: 32,768 tokens do not fit beside the drafter
12 GB about 65,536 tokens, rk4v4
16 GB about 196,608 tokens, rk8v4
24 GB or more 262,144 tokens, rk8v4

A load the card refuses tries the next smaller configuration, three times, and the smaller size is saved; a saved size on the same card is kept across restarts. When other apps hold the memory it needs (a game, a video editor, another AI app), loading waits a few seconds for memory another runtime just released, then fails with how much of the card is in use and what to close. The next message to Bonsai loads it again; no Retry is needed.

To move to a newer NInfer release: download its Windows CUDA 13.4 volumes and SHA256SUMS-*.txt, verify them, publish them as a ninfer-<tag> prerelease on the Synoec repository (gh release create ... --prerelease), then change apps/desktop/assets/local-ai/ninfer.json: the upstream tag and commit, the mirror tag, each volume’s name, size, SHA-256 and asset id (from gh api repos/Devkison/Synoec/releases/tags/<tag>), and for a new model its revision, size and SHA-256 from Hugging Face. The manifest validator refuses any volume URL that is not the mirror’s own API asset URL and any model URL that is not that revision’s own file. To rotate the token, replace runtime.mirror.key and ship a new build.