Beyond the default large-v3-turbo-q8_0 pick, what is the model catalog for 4 GB VRAM: which quantized variants fit, with what quality/latency tradeoffs, and when does each fallback trigger?
Part of #1
## Question
Beyond the default large-v3-turbo-q8_0 pick, what is the model catalog for 4 GB VRAM: which quantized variants fit, with what quality/latency tradeoffs, and when does each fallback trigger?
The recommended whisper.cpp catalog for a 4 GB card (RTX 2050 class) is a
three-rung ladder, best first:
Default: large-v3-turbo-q8_0 (874 MB download). Distilled 809M-param
model with near-large-v3 quality at roughly one eighth the decode cost
(4 decoder layers instead of 32); the q8_0 quantization is within noise of
full precision. Weights plus CUDA context, compute buffers and KV cache land
near 2–2.5 GB at load, which fits 4 GB with headroom for the compositor and
other GPU clients.
First fallback: large-v3-turbo-q5_0 (574 MB download). Same model one
quantization step down; a small quality cost for roughly 300 MB less VRAM.
Trigger: low free VRAM at load time.
Final safe fallback: small / small.en (466 MB download). Today's
actual behaviour on this card, kept as the floor. English-only users take small.en; everyone else takes multilingual small.
Excluded from the 4 GB recommended set (everything stays manually
selectable; nothing is removed from the catalog or the checksum pins):
Unquantized large-v3-turbo (1.6 GB weights): marginal headroom once CUDA
overhead and display clients are counted.
All large-v3 / large-v2 full and quantized variants (large-v3-q5_0
alone is 1.08 GB of weights before overhead). Note there is no large-v3-q8_0 pin in model_checksums.txt at all, so it is not even
downloadable today.
The medium family: medium-q5_0 (539 MB) fits by bytes but is strictly
dominated by the turbo quants on quality per byte, so it earns no rung.
tiny / base: below the safe quality floor for dictation; CPU-only
territory.
T1, load-time selection: key the pick to free VRAM at load
(nvidia-smi memory.free, not total — hybrid laptops share the dGPU with
the display), roughly: ≥ 2.5 GB free → q8_0; ~1.5–2.5 GB → q5_0; below → small. The exact thresholds must be validated by measuring the real load
footprint in the installed-build re-run already deferred by the Python performance baseline
decision; treat the numbers above as the rule shape, not calibrated constants.
T2, load failure: on a CUDA out-of-memory or model-load exception, step
one rung down and retry once, then surface the error. Verified current
behaviour in recognition_manager.py::_init_whispercpp: a load failure sets
the engine error and raises — there is no automatic step-down today, and the
only memory guard in the codebase is the VOSK one.
T3, backend generality: the same ladder applies under Vulkan (the packaged
xbps build is Vulkan-plus-CPU only, per the Void xbps packaging route
decision). On integrated graphics or CPU-only, key T1 to free system RAM
instead of VRAM.
Rationale and evidence
Builds directly on the RTX 2050 CUDA model fit
verdict (default large-v3-turbo-q8_0, q5_0 fallback when free VRAM is
low, small as final fallback) and answers the part it left open: the full
rung list, what is deliberately excluded, and when each rung triggers.
Catalog facts inspected in-repo: src/vocalinux/utils/whispercpp_model_info.py
(_WHISPERCPP_MODEL_SPECS file sizes: turbo-q8_0 874 MB, turbo-q5_0
574 MB, turbo fp16 1624 MB, small 466 MB, medium-q5_0 539 MB,
large-v3-q5_0 1081 MB, large-v3 fp16 3095 MB) and src/vocalinux/utils/model_checksums.txt (every one of those files pinned
by sha256 at whisper.cpp commit 5359861c; no ggml-large-v3-q8_0.bin
entry exists).
Behaviour facts inspected in-repo: src/vocalinux/speech_recognition/recognition_manager.py
(_init_whispercpp raises on load failure, no VRAM check, no step-down; _check_vosk_model_memory is VOSK-only) and src/vocalinux/utils/whispercpp_model_info.py
(detect_compute_backend tries Vulkan before CUDA, so the CUDA/VRAM branch
of get_recommended_model is unreachable on a Vulkan-capable Nvidia card —
the T1 rule needs that fix first, which is downstream implementation work,
not map work).
Upstream corroboration: the whisper.cpp models list gives large-v3-turbo
1.5 GiB, large-v3-turbo-q5_0 547 MiB and small 466 MiB on disk, matching
the pinned files byte-for-byte in magnitude; the turbo quality/speed claim
(distilled decoder, near-large-v3 accuracy) is the model's published design
point.
Language retargeting already exists (settings_dialog.py mirrors
multilingual/.en variants), so the small/small.en pair needs no new
machinery.
Provenance
Decided by the agent under the user's explicit delegation for this wayfinding
run (act as orchestrator and decision maker until the fog clears). No human
was interviewed for this research ticket; the decision is grounded in the
inspected sources above.
Consequences for later tickets
No new tickets: the map's remaining fog is unaffected by this ladder.
The T1 thresholds need the installed-build measurement deferred by the
performance-baseline decision before anyone hard-codes them.
No glossary or ADR change: the repo has no GLOSSARY.md or docs/adr/
yet, and this ladder is spec content owned by this ticket, not a new domain
term — so per the domain-modeling skill nothing is created.
# Model catalog for 4 GB VRAM — decision
## Decision
The recommended whisper.cpp catalog for a 4 GB card (RTX 2050 class) is a
three-rung ladder, best first:
1. **Default: `large-v3-turbo-q8_0`** (874 MB download). Distilled 809M-param
model with near-`large-v3` quality at roughly one eighth the decode cost
(4 decoder layers instead of 32); the q8_0 quantization is within noise of
full precision. Weights plus CUDA context, compute buffers and KV cache land
near 2–2.5 GB at load, which fits 4 GB with headroom for the compositor and
other GPU clients.
2. **First fallback: `large-v3-turbo-q5_0`** (574 MB download). Same model one
quantization step down; a small quality cost for roughly 300 MB less VRAM.
Trigger: low free VRAM at load time.
3. **Final safe fallback: `small` / `small.en`** (466 MB download). Today's
actual behaviour on this card, kept as the floor. English-only users take
`small.en`; everyone else takes multilingual `small`.
**Excluded from the 4 GB recommended set** (everything stays manually
selectable; nothing is removed from the catalog or the checksum pins):
- Unquantized `large-v3-turbo` (1.6 GB weights): marginal headroom once CUDA
overhead and display clients are counted.
- All `large-v3` / `large-v2` full and quantized variants (`large-v3-q5_0`
alone is 1.08 GB of weights before overhead). Note there is no
`large-v3-q8_0` pin in `model_checksums.txt` at all, so it is not even
downloadable today.
- The `medium` family: `medium-q5_0` (539 MB) fits by bytes but is strictly
dominated by the turbo quants on quality per byte, so it earns no rung.
- `tiny` / `base`: below the safe quality floor for dictation; CPU-only
territory.
## Fallback triggers (rules; implementation follows later)
- **T1, load-time selection:** key the pick to *free* VRAM at load
(`nvidia-smi memory.free`, not total — hybrid laptops share the dGPU with
the display), roughly: ≥ 2.5 GB free → q8_0; ~1.5–2.5 GB → q5_0; below →
`small`. The exact thresholds must be validated by measuring the real load
footprint in the installed-build re-run already deferred by the
[Python performance baseline](https://git.bongbetic.com/xavierk/voculinux/issues/9)
decision; treat the numbers above as the rule shape, not calibrated constants.
- **T2, load failure:** on a CUDA out-of-memory or model-load exception, step
one rung down and retry once, then surface the error. Verified current
behaviour in `recognition_manager.py::_init_whispercpp`: a load failure sets
the engine error and raises — there is no automatic step-down today, and the
only memory guard in the codebase is the VOSK one.
- **T3, backend generality:** the same ladder applies under Vulkan (the packaged
xbps build is Vulkan-plus-CPU only, per the
[Void xbps packaging route](https://git.bongbetic.com/xavierk/voculinux/issues/4)
decision). On integrated graphics or CPU-only, key T1 to free system RAM
instead of VRAM.
## Rationale and evidence
- Builds directly on the
[RTX 2050 CUDA model fit](https://git.bongbetic.com/xavierk/voculinux/issues/3)
verdict (default `large-v3-turbo-q8_0`, `q5_0` fallback when free VRAM is
low, `small` as final fallback) and answers the part it left open: the full
rung list, what is deliberately excluded, and when each rung triggers.
- Catalog facts inspected in-repo: `src/vocalinux/utils/whispercpp_model_info.py`
(`_WHISPERCPP_MODEL_SPECS` file sizes: turbo-q8_0 874 MB, turbo-q5_0
574 MB, turbo fp16 1624 MB, small 466 MB, medium-q5_0 539 MB,
large-v3-q5_0 1081 MB, large-v3 fp16 3095 MB) and
`src/vocalinux/utils/model_checksums.txt` (every one of those files pinned
by sha256 at whisper.cpp commit `5359861c`; no `ggml-large-v3-q8_0.bin`
entry exists).
- Behaviour facts inspected in-repo:
`src/vocalinux/speech_recognition/recognition_manager.py`
(`_init_whispercpp` raises on load failure, no VRAM check, no step-down;
`_check_vosk_model_memory` is VOSK-only) and
`src/vocalinux/utils/whispercpp_model_info.py`
(`detect_compute_backend` tries Vulkan before CUDA, so the CUDA/VRAM branch
of `get_recommended_model` is unreachable on a Vulkan-capable Nvidia card —
the T1 rule needs that fix first, which is downstream implementation work,
not map work).
- Upstream corroboration: the whisper.cpp models list gives `large-v3-turbo`
1.5 GiB, `large-v3-turbo-q5_0` 547 MiB and `small` 466 MiB on disk, matching
the pinned files byte-for-byte in magnitude; the turbo quality/speed claim
(distilled decoder, near-large-v3 accuracy) is the model's published design
point.
- Language retargeting already exists (`settings_dialog.py` mirrors
multilingual/`.en` variants), so the `small`/`small.en` pair needs no new
machinery.
## Provenance
Decided by the agent under the user's explicit delegation for this wayfinding
run (act as orchestrator and decision maker until the fog clears). No human
was interviewed for this research ticket; the decision is grounded in the
inspected sources above.
## Consequences for later tickets
- No new tickets: the map's remaining fog is unaffected by this ladder.
- The T1 thresholds need the installed-build measurement deferred by the
performance-baseline decision before anyone hard-codes them.
- No glossary or ADR change: the repo has no `GLOSSARY.md` or `docs/adr/`
yet, and this ladder is spec content owned by this ticket, not a new domain
term — so per the domain-modeling skill nothing is created.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Part of #1
Question
Beyond the default large-v3-turbo-q8_0 pick, what is the model catalog for 4 GB VRAM: which quantized variants fit, with what quality/latency tradeoffs, and when does each fallback trigger?
Model catalog for 4 GB VRAM — decision
Decision
The recommended whisper.cpp catalog for a 4 GB card (RTX 2050 class) is a
three-rung ladder, best first:
large-v3-turbo-q8_0(874 MB download). Distilled 809M-parammodel with near-
large-v3quality at roughly one eighth the decode cost(4 decoder layers instead of 32); the q8_0 quantization is within noise of
full precision. Weights plus CUDA context, compute buffers and KV cache land
near 2–2.5 GB at load, which fits 4 GB with headroom for the compositor and
other GPU clients.
large-v3-turbo-q5_0(574 MB download). Same model onequantization step down; a small quality cost for roughly 300 MB less VRAM.
Trigger: low free VRAM at load time.
small/small.en(466 MB download). Today'sactual behaviour on this card, kept as the floor. English-only users take
small.en; everyone else takes multilingualsmall.Excluded from the 4 GB recommended set (everything stays manually
selectable; nothing is removed from the catalog or the checksum pins):
large-v3-turbo(1.6 GB weights): marginal headroom once CUDAoverhead and display clients are counted.
large-v3/large-v2full and quantized variants (large-v3-q5_0alone is 1.08 GB of weights before overhead). Note there is no
large-v3-q8_0pin inmodel_checksums.txtat all, so it is not evendownloadable today.
mediumfamily:medium-q5_0(539 MB) fits by bytes but is strictlydominated by the turbo quants on quality per byte, so it earns no rung.
tiny/base: below the safe quality floor for dictation; CPU-onlyterritory.
Fallback triggers (rules; implementation follows later)
(
nvidia-smi memory.free, not total — hybrid laptops share the dGPU withthe display), roughly: ≥ 2.5 GB free → q8_0; ~1.5–2.5 GB → q5_0; below →
small. The exact thresholds must be validated by measuring the real loadfootprint in the installed-build re-run already deferred by the
Python performance baseline
decision; treat the numbers above as the rule shape, not calibrated constants.
one rung down and retry once, then surface the error. Verified current
behaviour in
recognition_manager.py::_init_whispercpp: a load failure setsthe engine error and raises — there is no automatic step-down today, and the
only memory guard in the codebase is the VOSK one.
xbps build is Vulkan-plus-CPU only, per the
Void xbps packaging route
decision). On integrated graphics or CPU-only, key T1 to free system RAM
instead of VRAM.
Rationale and evidence
RTX 2050 CUDA model fit
verdict (default
large-v3-turbo-q8_0,q5_0fallback when free VRAM islow,
smallas final fallback) and answers the part it left open: the fullrung list, what is deliberately excluded, and when each rung triggers.
src/vocalinux/utils/whispercpp_model_info.py(
_WHISPERCPP_MODEL_SPECSfile sizes: turbo-q8_0 874 MB, turbo-q5_0574 MB, turbo fp16 1624 MB, small 466 MB, medium-q5_0 539 MB,
large-v3-q5_0 1081 MB, large-v3 fp16 3095 MB) and
src/vocalinux/utils/model_checksums.txt(every one of those files pinnedby sha256 at whisper.cpp commit
5359861c; noggml-large-v3-q8_0.binentry exists).
src/vocalinux/speech_recognition/recognition_manager.py(
_init_whispercppraises on load failure, no VRAM check, no step-down;_check_vosk_model_memoryis VOSK-only) andsrc/vocalinux/utils/whispercpp_model_info.py(
detect_compute_backendtries Vulkan before CUDA, so the CUDA/VRAM branchof
get_recommended_modelis unreachable on a Vulkan-capable Nvidia card —the T1 rule needs that fix first, which is downstream implementation work,
not map work).
large-v3-turbo1.5 GiB,
large-v3-turbo-q5_0547 MiB andsmall466 MiB on disk, matchingthe pinned files byte-for-byte in magnitude; the turbo quality/speed claim
(distilled decoder, near-large-v3 accuracy) is the model's published design
point.
settings_dialog.pymirrorsmultilingual/
.envariants), so thesmall/small.enpair needs no newmachinery.
Provenance
Decided by the agent under the user's explicit delegation for this wayfinding
run (act as orchestrator and decision maker until the fog clears). No human
was interviewed for this research ticket; the decision is grounded in the
inspected sources above.
Consequences for later tickets
performance-baseline decision before anyone hard-codes them.
GLOSSARY.mdordocs/adr/yet, and this ladder is spec content owned by this ticket, not a new domain
term — so per the domain-modeling skill nothing is created.