Description
RAPIDS currently builds conda packages in CI using conda-build. The rattler-build
tool is a newer alternative. It is written in Rust, and should be faster than conda-build (I haven't seen any official benchmarks yet, though). It only supports a limited subset of the meta.yaml recipe format, but that subset is designed to still enable all the same features, just with a more limited syntax (see CEPS 13 and 14). conda-build overhead is nontrivial (I've never benchmarked it, but I know it can stretch into multiple minutes beyond the environment solve when doing local CI reproductions), and reducing that would be quite valuable for us in improving our CI turnaround. Moreover, switching to the more restricted syntax described in the above CEPs would be beneficial because it would convert our conda recipes into pure YAML rather than the extended YAML currently used by meta.yaml. That change is important because the YAML extensions currently in our recipe make it impossible to parse or write with standard YAML parsers, which is a big reason why we have struggled to do things like support meta.yaml files in rapids-dependency-file-generator
.
We should do a PoC of replacing conda-build with rattler-build in one repo (preferably something reasonably complex like cudf or cugraph) to see what it would take to make this transition, and how much we would benefit.
rattler-build
porting progress
- rmm (Port to rattler-build rmm#1796)
- raft (Port all conda recipes to
rattler-build
raft#2623) - cudf (Port all conda recipes to
rattler-build
cudf#18054) - kvikio (Port all conda recipes to
rattler-build
kvikio#678) - cuml (Port all conda recipes to
rattler-build
cuml#6440) (merged 2025-03-20) - cucim (Port all conda recipes to
rattler-build
& use strict channel priority cucim#864) - cugraph (Port all conda recipes to
rattler-build
cugraph#4999) -
cugraph-ops - cumlprims_mg (https://github.com/rapidsai/cumlprims_mg/pull/237)
-
cuspatial(Port all conda recipes torattler-build
cuspatial#1555) - cuvs (feat(libcuvs): port libcuvs to rattler-build cuvs#751) (merged 2025-03-19)
- cuxfilter (Port all conda recipes to
rattler-build
cuxfilter#669) - dask-cuda (Port all conda recipes to
rattler-build
dask-cuda#1460) - dependency-file-generator
- integration
- jupyterlab-nvdashboard
- ptxcompiler
- pynvjitlink
- rapids-cmake (refactor(conda): remove unused conda package and associated CI resources rapids-cmake#810)
- rapids-build-backend
- rapids-dask-dependency (refactor: port conda-build to rattler-build rapids-dask-dependency#93)
- rapids-metadata
- rapidsmpf
- ucx-py (Port all conda recipes to
rattler-build
ucx-py#1126) - ucxx (Switch from
conda-build
torattler-build
ucxx#374) -
wholegraph
Few more:
- nx-cugraph feat(rattler): port conda build recipe to rattler build nx-cugraph#121
- cugraph-gnn feat(rattler): port conda build recipe to rattler build cugraph-gnn#178
- cuopt https://github.com/rapidsai/cuopt/pull/2420
Follow-up work
I'm going to track a few rattler-build
followups here and update as they get resolved:
general
Look into rolling the sccache
cache-busting fix for -fdebug-prefix-map
into rapids-cmake
(xref rapidsai/rapids-cmake#798 (comment))
cudf
- Add default build arg generation to
rapids-rattler-channel-string
#156 - Follow up and remove extra wrapping quotes in
context
once Values ofcontext
variables can have different types depending on the underlying shell prefix-dev/rattler-build#1451 is resolved - Follow up and remove
sed
workaround for-fdebug-prefix-map
once Cache build including output version in environment variables is causingsccache
misses prefix-dev/rattler-build#1458 is resolved - Remove
cuda-nvcc-impl
dependency once it is provided bynumba-cuda
(xref [BUG] Add proper dependencies to conda package NVIDIA/numba-cuda#146) - Strip out
secrets
andenv
fromcudf-polars
recipe - Test removing
cuda-version
from all pure Python packages (xref Properly support building pure Python packages #43) - Confirm
rapids-dask-dependency
isn't needed bycustreamz
and then remove it - Figure out if
python-confluent-kafka
should have run exports - Confirm
streamz
is only a test dependency ofcustreamz
and then remove it
rmm
- Add default build arg generation to
rapids-rattler-channel-string
#156 - Follow up and remove extra wrapping quotes in
context
once Values ofcontext
variables can have different types depending on the underlying shell prefix-dev/rattler-build#1451 is resolved
cuvs
- Relax/extend pin
mkl=2023
tomkl>=2023
or similar - combine
cuvs-bench
andcuvs-bench-cpu
recipes
kvikio
- The
libcufile
dependencies are an absolute mess and we would probably benefit from adding a few variants at the intersection of architecture and cuda version Port all conda recipes torattler-build
kvikio#678 (comment)