[Windows][multi-GPU] OnDeviceModelService wakes an otherwise idle RTX 5090 into P0 with an 18 MiB context

Open 💬 0 comments Opened Aug 24, 2026 by el16z3c

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

  1. Use a Windows machine with two NVIDIA GPUs.
  2. Connect all displays to the secondary/display GPU.
  3. In Windows Settings > System > Display > Graphics, set that display GPU as the default high-performance GPU.
  4. Launch Codex Desktop.
  5. Wait for the OnDeviceModelService utility child to appear.
  6. Run:
nvidia-smi
Get-CimInstance Win32_Process |
  Where-Object { $_.CommandLine -match 'OnDeviceModelService' } |
  Select-Object ProcessId, Name, CommandLine
  1. Observe that the normal Codex GPU process uses the selected display GPU, while OnDeviceModelService opens 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.

View original on GitHub ↗