Closed jameslamb closed 1 week ago
@bdice drew my attention to these global pins in conda-forge-pinning-feestock
:
fmt:
- '10'
spdlog:
- '1.12'
I think the fmt
one shouldn't be a problem for this migration, but the spdlog
one will. There's an ongoing conda-forge
migration to spdlog==1.13.0
, but I don't know how to estimate how long that'll take: https://conda-forge.org/status/migration/spdlog113.
I think we should NOT update any RAPIDS packages to depending on the spdlog==1.13.0
conda-forge package until that conda-forge migration to that version is done. Does that seem right @jakirkham @bdice ?
References:
Yes, we should try to keep RAPIDS in sync with conda-forge. For these, I would move them forward once the migrator passes some critical threshold (for spdlog, I might base it on when packages like mamba
and micromamba
are migrated).
For the purpose of fixing our conda clobbering issues, we may want to work on some kind of vendoring solution (centralized via rapids-core-dependencies
or copied in each RAPIDS conda package) because we have to carry patches for fmt
and spdlog
in rapids-cmake anyway. If we do that, we can remove all host/run
dependencies on the conda-forge
packages of fmt
and spdlog
and instead get them from upstream via rapids-cmake / CPM.
Also, if we vendor these and remove the dependencies from the RAPIDS conda packages, it would also make it possible to decouple from the global conda-forge pinnings and manage version updates solely through rapids-cmake (the status quo requires changes in both rapids-cmake and conda recipes).
FYI -- There's active migrations for spdlog 1.14 and fmt 11 going on in conda-forge right now:
I believe RAPIDS is now multiple versions behind on spdlog which will make solving environments painful.
Thanks for the heads-up @kkraus14! We'll discuss and try to land an update for fmt/spdlog in the next RAPIDS release.
Adding links to the migration statuses:
Alright, I think this set of changes is ready for review!
See "How I tested this" in https://github.com/rapidsai/rapids-cmake/pull/689 ... I'm able to build all of RAPIDS with these new versions of fmt
and spdlog
, and observed the things we want to see:
rmm
, cudf
, cuml
, and cuspatial
's test suites passing (locally, in a devcontainer)rapids
metapackage installable in an environment with fmt>=11.0.2
and spdlog>=1.14.1
: https://github.com/rapidsai/integration/pull/722#issuecomment-2361449071Putting a plan for how to roll this out in writing, will start an internal chat thread to coordinate.
Phase 1: reviews
Phase 2: run tests
"Code changes (these PRs should be merged)"
and "Testing dependencies (do not merge)"
~
cuml
cannot be started until rmm
, cudf
, ucxx
, and raft
packages are available)~rmm
would be really expensive in this setuprapids-cmake
and downloading PR artifacts) from all PRs in "Code changes (these PRs should be merged)"
~
[skip ci]
, to avoid a re-run of CI~Phase 3: merge changes
rmm
branch build to produce packages)~ucxx
branch build to produce packages)~cudf
branch build to produce packages)~[!NOTE]
These will all require admin merges, because of the use of[skip ci]
commits to remove testing-specific details
Phase 4: clean up
"Testing dependencies (do not merge)"
aboveThis is complete! RAPIDS is now building successfully against fmt==11.0.2
and spdlog==1.14.1
.
Put up one follow-up item here: https://github.com/rapidsai/rapids-cmake/issues/695
Description
RAPIDS projects that need
fmt
andspdlog
userapids-cmake
to find it, via functions likerapids_cpm_fmt()
(docs link).rapids-cmake
is currently carrying patches to both of those libraries, and as a result always downloads sources of them. (see https://github.com/rapidsai/rapids-cmake/pull/525 for details).Those patches have since been upstreamed and made it into official releases of those projects (in their main source control and on
conda-forge
). This proposes upgrading to those new versions across RAPIDS and dropping the patches inrapids-cmake
.Benefits of this work
conda
builds across many RAPIDS projectsrmm
to ensure future such conflicts raise a loud errorrapids-cmake
and therefore the need to reason about them in future upgradesAcceptance Criteria
rapids-cmake
is pulling infmt >= 11.0.1
rapids-cmake
is pulling inspdlog >= 1.14
fmt
andspdlog
inrmm
's conda build CI logsApproach
On a branch, modify
rapids-cmake/cpm/versions.json
(code link) such that:fmt
andspdlog
are bumped to these new onesFollow "Overriding RAPIDS CMake" (rapids-cmake docs) to point builds of at least
rmm
,cudf
, andraft
at your branch ofrapids-cmake
with these changes. Also modify those projects'dependencies.yaml
and/or conda recipemeta.yaml
to change their version constraints onfmt
andspdlog
.NOTE: this is a great task for
rapids-reviser
(https://github.com/rapidsai/rapids-reviser/tree/main/examples/fmt-10-spdlog-1.12).Confirm that CI succeeds and that the correct versions of
fmt
andspdlog
are being pulled in.For
rmm
, re-use this PR for that purpose: https://github.com/rapidsai/rmm/pull/1508. If this change also results in there being 0 remaining conda clobbering warnings inrmm
, leave in theconda config --set path_conflict prevent
in that PR's build scripts, so we'll be alerted by a CI failure if something around this changes in the future.Notes
What makes you confident that these patches can be removed?
From https://github.com/rapidsai/build-planning/issues/54#issuecomment-2072893399
fmt
's most recent release was11.0.2
, so that patch we're carrying around for the10.1.1
version could be dropped.rapids-cmake
: (fmt/fix_10_1_1_version.diff)v10.2.1
release on conda-forge removing a similar patch: https://github.com/conda-forge/fmt-feedstock/pull/48The
spdlog
patch we've been carrying around has been upstreamedrapids-cmake
: (spdlog/nvcc_constexpr_fix.diff)v1.13.0
of the conda-forge recipe is up: https://github.com/conda-forge/spdlog-feedstock/pull/61What are "clobber warnings" and how does this help with them?
As described in #54 and https://github.com/rapidsai/rmm/pull/1508, conda builds of
rmm
and other RAPIDS packages downstream of it are emitting dozens of warnings like these:These are saying that the
librmm
conda package contains files whose paths exactly conflict with those from thefmt
andspdlog
packages fromconda-forge
. When such packages are installed together, one will overwrite the other, which could lead to runtime issues.Removing the patches in
rapids-cmake
makes it more likely that builds will find the files they need from thefmt
andspdlog
conda-forge packages already present in the build environment, and therefore not vendor them, and therefore not ship a copy that causes conflicts.