Skip to content

Audit Wheel Dependencies - #3091

Open
tarang-jain wants to merge 6 commits into
NVIDIA:mainfrom
tarang-jain:cmake-audit
Open

Audit Wheel Dependencies#3091
tarang-jain wants to merge 6 commits into
NVIDIA:mainfrom
tarang-jain:cmake-audit

Conversation

@tarang-jain

@tarang-jain tarang-jain commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Drops depends_on_nccl from the libraft wheel's build and runtime
requirement groups (py_rapids_build_libraft, py_run_libraft) in
dependencies.yaml.

More changes on 07/22/2026:
libraft and libraft-static dont need to depend on the complete libraft-headers (there are no multi-gpu targets etc). Further raft-dask seems like the only target that needs the cmake flag for nccl

Addresses #2977.

@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: dc0afd60-3e3b-47b4-8042-ee976aa07df1

📥 Commits

Reviewing files that changed from the base of the PR and between e8882f8 and 1868691.

📒 Files selected for processing (3)
  • ci/build_wheel.sh
  • conda/recipes/libraft/recipe.yaml
  • dependencies.yaml

Included review availability: Your plan provides up to 12 included reviews per hour; 11 remain after this review.


📝 Walkthrough

Summary by CodeRabbit

  • Build and Packaging
    • Updated package dependencies to use the appropriate RAPIDS libraries and logger version.
    • Switched package requirements to the exact headers-only package and removed the unnecessary CUDA profiler dependency.
    • Added RAPIDS date-time information to wheel version suffixes.
    • Improved build argument handling for the Dask package.

Walkthrough

Changes

The PR updates LibRAFT dependency declarations, scopes wheel build arguments to raft-dask, and changes conda requirements for libraft and libraft-static.

LibRAFT packaging updates

Layer / File(s) Summary
Update LibRAFT dependency includes
dependencies.yaml
LibRAFT dependency groups now include librmm and RAPIDS Logger instead of NCCL. The RAPIDS Logger pin and NCCL anchor are updated.
Scope wheel build arguments
ci/build_wheel.sh
SKBUILD_CMAKE_ARGS is exported only for raft-dask. The SPDX copyright header is updated.
Update conda package requirements
conda/recipes/libraft/recipe.yaml
libraft and libraft-static now use exact libraft-headers-only requirements and remove cuda-profiler-api.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to 18686

This dependency audit is merge-ready after normal checks and review; no actionable merge-blocking risk remains.

Suggested reviewers: msarahan, bdice, jameslamb

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the main change: auditing wheel dependencies. It is concise and related to the dependency updates in the changeset.
Description check ✅ Passed The description directly explains the dependency changes in dependencies.yaml and the related libraft package and raft-dask updates.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 1…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 1 files. (1 skipped: 1 unsupported.)

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@tarang-jain tarang-jain added improvement Improvement / enhancement to an existing function non-breaking Non-breaking change labels Jul 21, 2026
@tarang-jain
tarang-jain requested a review from a team as a code owner July 22, 2026 20:58
@tarang-jain tarang-jain changed the title Remove NCCL from the libraft wheel dependencies Audit Wheel Dependencies Jul 22, 2026
@tarang-jain tarang-jain self-assigned this Jul 23, 2026
- ${{ compiler("c") }}
host:
- ${{ pin_subpackage("libraft-headers", exact=True) }}
- ${{ pin_subpackage("libraft-headers-only", exact=True) }}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this changed? What is the specific difference in host/run pinnings that you are aiming to produce?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Summary of the impact from AI:

libraft-headers depends on libraft-headers-only, so selecting it also installs the latter's cuda-version, librmm, and rapids-logger dependencies. Relative to that shared closure, libraft-headers additionally brings cuda-profiler-api, libcublas-dev, libcurand-dev, libcusolver-dev, libcusparse-dev, nccl >=2.19, and ucxx 0.52.\*.

Consequently, replacing libraft-headers with libraft-headers-only avoids the four CUDA development packages plus nccl and ucxx. The runtime CUDA libraries are not removed from libraft or libraft-static: both packages continue to directly require libcublas, libcurand, libcusolver, and libcusparse. cuda-profiler-api is also directly removed from those two packages in PR 3091, rather than being removed solely through the header-package substitution.

So basically this means that depending on libraft is no longer enough to build other libraries against libraft, because you don't have CUDA math library dev packages. This is a regression.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My understanding is that the libraft package only contains a few source files in the raft_runtime directory:

add_library(
    raft_objs OBJECT
    src/raft_runtime/random/rmat_rectangular_generator_int64_double.cu
    src/raft_runtime/random/rmat_rectangular_generator_int64_float.cu
    src/raft_runtime/random/rmat_rectangular_generator_int_double.cu
    src/raft_runtime/random/rmat_rectangular_generator_int_float.cu
    src/raft_runtime/solver/lanczos_solver_int64_double.cu
    src/raft_runtime/solver/lanczos_solver_int64_float.cu
    src/raft_runtime/solver/lanczos_solver_int_double.cu
    src/raft_runtime/solver/lanczos_solver_int_float.cu
  )

I think any downstream package should depend on libraft-headers and not libraft

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the important question is -- what do we need the libraft pkg to represent -- only the compiled source files or all the packages required to include any header in this repo?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking at the description here:
https://pypi.org/project/libraft-cu12/#:~:text=RAFT%20is%20a,GPU%20with%20Dask.

I think this PR is in the right direction -- libraft's shared library should be C++ only. I'll wait for others / PICs to weigh in.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bdice yes, this is the right direction IMO. The main artifact of RAFT is libraft-headers split, not libraft

@bdice bdice left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tarang-jain asked for another review. I have nothing else to ask, so if @divyegala agrees with this direction I won’t block.

@divyegala divyegala left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tarang-jain can you make sure to verify this doesn't break any downstream dependencies?

@tarang-jain

Copy link
Copy Markdown
Contributor Author

/merge

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

Labels

improvement Improvement / enhancement to an existing function non-breaking Non-breaking change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants