openai / openai/codex

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

Open
#40,409 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

app bug performance windows-os
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
  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.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.