Enable GPU for AI components
Turn on GPU acceleration for speech-to-text (Speaches/Whisper) and Docling using environment-variable overrides.
Two CoreAI components ship with GPU acceleration that is off by default (CPU mode): speech-to-text (Speaches/Whisper) in llm-backend, and docling-server. This playbook explains how to enable GPU for each one.
GPU is controlled by a per-component boolean in variables.toml. Flipping it through the standard environment-variable override switches the container image and adds nvidia.com/gpu resource requests, runtimeClassName: nvidia, and GPU node affinity and tolerations.
You set these overrides in platform.env (shared, committed) or local.env (personal, gitignored). See Configuration model for how the two files are layered.
Prerequisites
The cluster must be able to schedule GPU pods. GPU nodes must provide:
- node label
workload=gpu - node taint
nvidia.com/gpu=present - the
nvidiaRuntimeClass, with NVIDIA drivers and the NVIDIA device plugin installed at cluster level
For the full GPU footprint and sizing guidance, see Minimum requirements.
By default the platform uses preferred (soft) GPU affinity, so GPU pods prefer GPU nodes but can still schedule elsewhere. To make GPU placement a hard requirement, set:
# Pin GPU pods to gpu-labeled nodes ([common].enforce_affinity, default false)
COMMON_ENFORCE_AFFINITY="true"Enable GPU
Add the toggles you need to platform.env (or local.env):
# Enable GPU for speech-to-text (Speaches/Whisper) in llm-backend
LLM_BACKEND_SPEACHES_GPU="true"
# Enable GPU for docling-server
DOCLING_SERVER_COMPONENT_GPU="true"Speech-to-text (Speaches/Whisper)
| Component | llm-backend |
| Toggle | [speaches].gpu in variables.toml |
| Override variable | LLM_BACKEND_SPEACHES_GPU |
When set to true:
- image switches to
speaches-ai/speaches:latest-cuda - sets
WHISPER__INFERENCE_DEVICE=cudaandWHISPER__COMPUTE_TYPE=float16 - requests
nvidia.com/gpu: "1" - selects the GPU Whisper model (
deepdml/whisper-large-v3-turbo) instead of the CPU model (Systran/faster-whisper-base), and propagates it toPIPECAT_WHISPER_MODEL
Docling
| Component | docling-server |
| Toggle | gpu under [component] in variables.toml |
| Override variable | DOCLING_SERVER_COMPONENT_GPU |
When set to true:
- image switches from
docling-serve-cputodocling-serve-cu128 - adds
nvidia.com/gpu: "1"to both requests and limits
Apply the change
After editing platform.env, re-render and push manifests so ArgoCD picks up the CUDA images and GPU resource requests:
uv run -m src.cli.main apply all -r
uv run -m src.cli.main push-manifests "Enable GPU for Speaches and Docling"See Platform CLI for details on these commands.
Environment-variable override convention
The override variable names above follow the platform's standard convention, so any future GPU-capable component is self-explanatory:
COMPONENT_NAME + TOML_TABLE + KEY (uppercased, hyphens replaced with underscores)- The component name is uppercased with
-replaced by_(llm-backend→LLM_BACKEND,docling-server→DOCLING_SERVER). - The TOML table and key are joined with
_. - Keys that live under the
[component]table include theCOMPONENT_segment — that is why Docling usesDOCLING_SERVER_COMPONENT_GPUwhile Speaches (under[speaches]) usesLLM_BACKEND_SPEACHES_GPU.
See the variable resolution chain for the complete rules.