[Windows][multi-GPU] OnDeviceModelService wakes an otherwise idle RTX 5090 into P0 with an 18 MiB context
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 125k
- Forks
- 19.4k
- PR merge metrics
- PR metrics pending
Description
What version of the Codex App are you using?
OpenAI.Codex 26.818.8289.0 (Microsoft Store package)
What subscription do you have?
ChatGPT subscription / Codex desktop app
What platform is your computer?
Windows 11 x64, build 10.0.26200
What issue are you seeing?
On a Windows desktop with multiple GPUs, Codex starts a Chromium utility process with:
ChatGPT.exe --type=utility --utility-sub-type=on_device_model.mojom.OnDeviceModelService --service-sandbox-type=on_device_model_execution
That process creates a context on an RTX 5090 which is otherwise reserved for CUDA/AI workloads. The context uses only about 18 MiB and reports 0% GPU utilization, but it prevents the card from entering its idle power state.
Observed state while the process exists:
RTX 5090 D v2: 18 MiB used, P0, ~52-54 W, 0% utilization, no active display
RTX 2080 Ti: drives both displays and runs the Codex UI GPU process
AMD iGPU: no active display and no active engines
Observed state after a clean boot before this utility initializes:
RTX 5090 D v2: 0 MiB used, P8, ~9 W, 0% utilization
The Windows default high-performance GPU is explicitly set to the RTX 2080 Ti. The normal Codex --type=gpu-process follows that selection and runs on the RTX 2080 Ti. Only OnDeviceModelService also opens the RTX 5090.
The service process itself was approximately:
Working set: ~92 MiB
Private memory: ~147 MiB
RTX 5090 VRAM: 18 MiB
It loaded D3D11/D3D12, DXGI, and NVIDIA user-mode driver modules. I could not find model weights, tokenizers, ONNX/TFLite/GGUF files, or another large model cache in the Codex MSIX package data or per-user Codex data. This looks like GPU-backend initialization or capability benchmarking rather than useful local inference.
Hardware
GPU 0: NVIDIA GeForce RTX 5090 D v2, 24 GB, no display attached
GPU 1: NVIDIA GeForce RTX 2080 Ti, 22 GB, both displays attached
iGPU: AMD Radeon Graphics
NVIDIA driver: 610.88
Steps to reproduce
- Use a Windows machine with two NVIDIA GPUs.
- Connect all displays to the secondary/display GPU.
- In Windows Settings > System > Display > Graphics, set that display GPU as the default high-performance GPU.
- Launch Codex Desktop.
- Wait for the
OnDeviceModelServiceutility child to appear. - Run:
nvidia-smi
Get-CimInstance Win32_Process |
Where-Object { $_.CommandLine -match 'OnDeviceModelService' } |
Select-Object ProcessId, Name, CommandLine
- Observe that the normal Codex GPU process uses the selected display GPU, while
OnDeviceModelServiceopens the otherwise idle fastest GPU and keeps it in P0.
Expected behavior
One or more of the following:
- Do not start the on-device model GPU backend unless a user-visible local-model feature is actually used.
- Release the GPU context after capability detection/benchmarking.
- Honor the Windows per-app/default high-performance GPU preference.
- Provide a supported setting to disable on-device model execution or force its CPU backend.
The main Codex models are cloud-hosted, so keeping an unused 5090 awake at roughly 50+ W for an apparently idle Chromium utility service is unexpected.
Additional information
Possibly related, but not the same symptom:
- #37638 — high GPU usage in Codex Desktop on Windows while an agent is running
- #29281 — sustained fan noise and GPU/CPU activity while idle
The distinguishing behavior here is a separate OnDeviceModelService utility process selecting a different physical GPU than the Codex UI in a multi-GPU desktop.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
No repository file, test, or implementation entry point is identified in the report. Start by tracing how the Windows desktop build launches the OnDeviceModelService utility and how GPU selection is configured; done means the service no longer wakes the unintended GPU, or a supported disable/CPU-selection behavior is verified with the provided nvidia-smi and process checks.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- powershell
- Domain
- desktop, operating-systems, performance
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100