Skip to content

Remove eager CUPTI resource callback subscription (#1250) - #1250

Open
sanrise wants to merge 1 commit into
pytorch:mainfrom
sanrise:export-D92570679
Open

Remove eager CUPTI resource callback subscription (#1250)#1250
sanrise wants to merge 1 commit into
pytorch:mainfrom
sanrise:export-D92570679

Conversation

@sanrise

@sanrise sanrise commented Feb 7, 2026

Copy link
Copy Markdown
Contributor

Summary:

Problem

Kineto reserves CUPTI's one callback subscriber at process startup, blocking tools such as wprof even when Kineto is idle.

Why

The RESOURCE_CONTEXT_CREATED callback only delays Kineto initialization. Regular PyTorch profiling and trace-time CUPTI activity setup do not depend on it.

Fix

  • Internal initialization: Register DynoConfigLoader, then initialize Kineto and start config polling from a late RegisterInitFunc.
  • OSS behavior: Register DaemonConfigLoader only when KINETO_USE_DAEMON is set.
  • Loader precedence: Keep an existing platform loader instead of replacing it with the OSS IPC loader.
  • CUPTI ownership: Remove the startup RESOURCE_CONTEXT_CREATED subscription while preserving regular profiling and trace-time activity setup.

Reviewed By: scotts

Differential Revision: D92570679

@meta-cla meta-cla Bot added the cla signed label Feb 7, 2026
@meta-codesync

meta-codesync Bot commented Feb 7, 2026

Copy link
Copy Markdown

@sanrise has exported this pull request. If you are a Meta employee, you can view the originating Diff in D92570679.

sanrise added a commit to sanrise/kineto that referenced this pull request Feb 12, 2026
Summary:

Previously, kineto registered a permanent CUPTI callback on CUDA context creation to initialize the profiler. This blocked external tools like wprof from subscribing to CUPTI since only one subscriber is allowed.

This change replaces the CUPTI callback mechanism with a delayed initialization approach using a condition_variable-based timer. The profiler now initializes 1 second after libkineto_init, freeing CUPTI for on-demand profiling tools. The new DelayedInitializer class supports immediate cancellation on shutdown, avoiding the blocking behavior of std::future destructors.

Differential Revision: D92570679
@meta-codesync meta-codesync Bot changed the title Replace CUPTI callback with delayed init for NVIDIA GPUs Remove eager CUPTI resource callback subscription Jul 30, 2026
@sanrise
sanrise force-pushed the export-D92570679 branch from 3a2d638 to ce808d6 Compare July 30, 2026 20:46
@meta-codesync meta-codesync Bot changed the title Remove eager CUPTI resource callback subscription Remove eager CUPTI resource callback subscription (#1250) Aug 3, 2026
sanrise added a commit to sanrise/kineto that referenced this pull request Aug 3, 2026
Summary:

**Problem**

Kineto reserves CUPTI's one callback subscriber at process startup, blocking tools such as wprof even when Kineto is idle.

**Why**

The `RESOURCE_CONTEXT_CREATED` callback only delays Kineto initialization. Regular PyTorch profiling and trace-time CUPTI activity setup do not depend on it.

**Fix**

- **Internal initialization:** Register `DynoConfigLoader`, then initialize Kineto and start config polling from a late `RegisterInitFunc`.
- **OSS behavior:** Register `DaemonConfigLoader` only when `KINETO_USE_DAEMON` is set.
- **Loader precedence:** Keep an existing platform loader instead of replacing it with the OSS IPC loader.
- **CUPTI ownership:** Remove the startup `RESOURCE_CONTEXT_CREATED` subscription while preserving regular profiling and trace-time activity setup.

Reviewed By: scotts

Differential Revision: D92570679
Summary:

**Problem**

Kineto reserves CUPTI's one callback subscriber at process startup, blocking tools such as wprof even when Kineto is idle.

**Why**

The `RESOURCE_CONTEXT_CREATED` callback only delays Kineto initialization. Regular PyTorch profiling and trace-time CUPTI activity setup do not depend on it.

**Fix**

- **Internal initialization:** Register `DynoConfigLoader`, then initialize Kineto and start config polling from a late `RegisterInitFunc`.
- **OSS behavior:** Register `DaemonConfigLoader` only when `KINETO_USE_DAEMON` is set.
- **Loader precedence:** Keep an existing platform loader instead of replacing it with the OSS IPC loader.
- **CUPTI ownership:** Remove the startup `RESOURCE_CONTEXT_CREATED` subscription while preserving regular profiling and trace-time activity setup.

Reviewed By: scotts

Differential Revision: D92570679
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant