cuML 全版本演进深度解析:从 0.1.0 到 26.08 的 GPU 机器学习库成长之路
cuML 全版本演进深度解析:从 0.1.0 到 26.08 的 GPU 机器学习库成长之路
导读
本文以 NVIDIA cuML(GPU-Accelerated Machine Learning)官方 CHANGELOG.md 为骨架,系统梳理该开源库从 2018 年首个版本(cuML 0.1.0,仅含 PCA、TSVD、DBSCAN 与 ml-prims)到 2026 年 8 月最新版本(cuml 26.08.00)的完整演进历程。你将掌握 cuML 的版本节奏与命名规则(CalVer)、每个大版本在算法覆盖、API 兼容性、分布式能力、工程化与平台支持上的核心变化,并能结合仓库源码定位对应实现,为选型、升级与二次开发提供直接依据。
一、版本节奏:CalVer 命名与发布历史总览
cuML 从 0.19.0(2021 年 4 月)之后全面切换到 CalVer(日历化版本)命名体系,格式为 YY.MM(如 25.12、26.08),每个发布对应一个里程碑版本,通常每两个月发布一次。仓库根目录的 VERSION 文件当前记录为 26.12.00,而 RAPIDS_BRANCH 指向 main,说明仓库处于 26.12 的开发主线。
从 CHANGELOG.md 可以整理出完整的发布序列:
| 版本 | 发布日期 | 版本 | 发布日期 |
|---|---|---|---|
| cuml 26.08.00 | 2026-08-05 | cuML 23.10.00 | 2023-10-11 |
| cuml 26.06.00 | 2026-06-03 | cuML 23.08.00 | 2023-08-09 |
| cuml 26.04.00 | 2026-04-08 | cuML 23.06.00 | 2023-06-07 |
| cuml 26.02.00 | 2026-02-04 | cuML 23.04.00 | 2023-04-06 |
| cuml 25.12.00 | 2025-12-10 | cuML 23.02.00 | 2023-02-09 |
| cuml 25.10.00 | 2025-10-08 | cuML 22.12.00 | 2022-12-08 |
| cuml 25.08.00 | 2025-08-06 | cuML 22.10.00 | 2022-10-12 |
| cuml 25.06.00 | 2025-06-05 | cuML 22.08.00 | 2022-08-17 |
| cuml 25.04.00 | 2025-04-09 | cuML 22.06.00 | 2022-06-07 |
| cuml 25.02.00 | 2025-02-13 | cuML 22.04.00 | 2022-04-06 |
| cuml 24.12.00 | 2024-12-11 | cuML 22.02.00 | 2022-02-02 |
| cuml 24.10.00 | 2024-10-09 | cuML 21.12.00 | 2021-12-09 |
| cuml 24.08.00 | 2024-08-07 | cuML 21.10.00 | 2021-10-07 |
| cuml 24.06.00 | 2024-06-05 | cuML 21.08.00 | 2021-08-04 |
| cuML 24.04.00 | 2024-04-10 | cuML 21.06.00 | 2021-06-09 |
| cuML 24.02.00 | 2024-02-12 | cuML 0.19.0 | 2021-04-21 |
| cuML 23.12.00 | 2023-12-06 | cuML 0.18.0 ~ 0.1.0 | 2021-02 ~ 2018-11 |
早期 0.x 阶段(0.1.0 至 0.19.0)采用语义化版本,每个小版本有明确的功能里程碑;CalVer 化之后,每个 YY.MM 版本都围绕 RAPIDS 生态(cuDF、cuVS、RAFT、RMM 等)同版本对齐发布,docs/source/supported_versions.rst 明确指出:cuML 25.08 只与 cuDF 25.08、cuVS 25.08 等 RAPIDS 库的 25.08 版本兼容。
二、26.08:最新版本的核心变更详解
cuml 26.08.00(2026-08-05)是 CHANGELOG 记录的当前最新发布,其内容可分为五类,最能反映 cuML 当前的技术方向。
2.1 Breaking Changes(破坏性变更)
- RandomForest
max_depth默认值改为None:不再默认限制树深度,与 scikit-learn 行为对齐;对应地,26.04 曾加入unlimited_depth支持,26.06 又废弃了max_depth=16的旧默认并引入None。这一系列变更可在 python/cuml/cuml/ensemble 的随机森林实现与 cpp/include/cuml/ensemble/randomforest.hpp 中得到印证。 - wheel 构建改为动态链接 libcuvs:不再静态打包 cuVS,减小产物体积、避免符号冲突。
- 清理 pairwise distances 实现:
extract_knn_graph也一并被清理(见 26.08 Bug Fixes)。 - 一批 API 弃用(deprecate):
convert_dtype、PorterStemmer、整个cuml.tsa模块、cuml.datasets.make_arima以及 legacy output types。其中cuml.tsa的弃用体现在 python/cuml/cuml/tsa 目录已新增_deprecation.py文件。这些模块仍可导入使用,但会触发弃用警告,后续版本将移除。 Lars移出 experimental 状态:成为正式 API,对应 cpp/include/cuml/solvers/lars.hpp 与 Python 层 python/cuml/cuml/linear_model。- wheel 构建切换到最新 CUDA Toolkit 13.3.0。
2.2 Bug Fixes 亮点
- 随机森林与 scikit-learn 行为对齐:匹配 sklearn 的随机森林特征采样方式、修复
RandomForestClassifier的 sklearn child metadata、修复无限指标下的特征重要性计算(对应 cpp/src/randomforest/randomforest.cu)。 - 引入 Safe Arithmetic(安全算术运算)基础设施,并在
FastIntDiv等底层原语上修复模板参数问题,对应 cpp/src_prims/common/fast_int_div.cuh。 cuml.accel回退机制:不支持的 PCA 与 KernelRidge 场景回退到 CPU 执行,保证零代码改动加速的可用性。- pandas 3 string dtype 兼容、pytest 新版本兼容、
ColumnTransformer中Nonetransformer 的get_params/set_params处理。 - FFT t-SNE 确定性修复:设置随机种子后结果可复现,相关实现见 cpp/src/tsne/fft_tsne.cuh。
- Dask 逻辑回归修复非连续类别标签、多 GPU KMeans 校验增强、benchmark CLI 的
--print-status路径修复。
2.3 New Features 与关键 Improvements
cuml.accel新增 IPython magic:可在 Notebook 中直接设置日志级别,相关实现在 python/cuml/cuml/accel/magics.py。- 单 GPU KMeans 支持 host-streaming(主机流式数据加载),由 cpp/src/kmeans/kmeans_fit.cu 实现,可处理超显存数据集。
- Isolation Forest 正式落地:实现位于 cpp/src/isolation_forest/isolation_forest.cu、cpp/src/isolation_forest/isolation_tree_builder.cuh 与 Python 层 python/cuml/cuml/ensemble。
- 随机森林大规模重构:用确定性采样分位数替代全局排序(deterministic sampled quantiles)、按目标函数族重构 objectives、支持 C++ 层的样本权重训练、加权 bootstrap 采样、行主序训练输入、直方图构建与分裂评分核拆分、为分布式分裂评分增加 allreduce 钩子、处理共享内存压力。对应代码在 cpp/src/decisiontree/batched-levelalgo 与 cpp/src/randomforest。
- benchmark 体系增强:新增 YAML 基准定义(python/cuml/cuml/benchmark/configs)、基准结果 JSON 输出,并分三批补齐缺失估计器的基准覆盖。
- 基础设施现代化:输入校验统一重构完成(
cuml.internals的mlfunc/ReflectedAttr)、cuda-bindings替代cuda-python、跳过 Cython 3.2.7、26.08 版 nvForest 支持、日志与反射系统统一。
三、26.06 / 26.04 / 26.02:近三个版本的演进脉络
3.1 cuml 26.06.00(2026-06-03)
- Breaking Changes:RMM 迁移到 CCCL MR 设计;移除未使用的 C API;
cuml.naive_bayes、metrics.hinge_loss、LabelEncoder等应用新校验框架;SVC/LinearSVC的probability参数弃用;随机森林推理采用 nvForest(见 cpp/include/cuml/ensemble/randomforest.hpp 与 cmake/thirdparty/get_nvforest.cmake);cupy 操作默认使用 PTDS(每线程默认流)。 - New Features:Ridge 与
LinearRegression新增 LSMR 求解器;ElasticNet/Lasso支持稀疏输入;LabelEncoder支持进入cuml.accel;新增EmpiricalCovariance估计器。 - 关键修复:KMeans int32 索引溢出检查、Dask KMeans 的
n_clusters > n_samples提前校验、FIL 缓冲边界断言、UMAP 顶点并行核以强制顺序行为。 - 新输入校验基建:本版本将新校验框架推广到几乎所有子模块(cluster、decomposition、multiclass、metrics、svm、neighbors、manifold、explainer、preprocessing、covariance、kernel_ridge 等),这是 26.04 引入
cuml.internals.validation后的全库铺开。
3.2 cuml 26.04.00(2026-04-08)
- Breaking Changes:稀疏输入不支持时抛出
TypeError;新增cuml.internals.validation与check_is_fitted;支持feature_names_in_;校验 X 必须是二维。 - New Features:
cuml.accel支持StandardScaler;NearestNeighbors.radius_neighbors_graph;健康检查模块(python/cuml/cuml/health_checks);SpectralClustering进入cuml.accel。 - 平台与工程:放弃 Python 3.10(ci 相关配置 同步更新)、支持 Python 3.14、scipy 最低版本提升到 1.14.0、Python limited API 构建 wheel 与 conda 包、PCA/TSVD 改用 RAFT 实现、Treelite 升级到 4.7.0。
3.3 cuml 26.02.00(2026-02-04)
- Breaking Changes:简化类型反射实现;
SVC/SVR的TotalIters弃用;公共 API 移除handle参数;output_type=None不再在__init__中被全局设置覆盖;train_test_split改用 scikit-learn 实现。 - New Features:
TargetEncoder进入cuml.accel;底层切换为 CCCL 的 mdspan 实现。 - 工程升级:cuML 全面升级到 C++20;新增 CUDA 13.1 支持;
cumlprims_mg移入 cuML 仓库;UMAP 支持自定义初始化、int64 谱初始化、逆变换(inverse transform);SVM 支持预计算核;HDBSCAN 压缩层次结构改进。
四、2025 年版本回顾:25.12 / 25.10 / 25.08 / 25.06 / 25.04
4.1 cuml 25.12.00(2025-12-10):分布式与接口规范化
- Breaking Changes:
dask变为可选依赖(仅在需要cuml.dask时安装);HDBSCAN 全面使用int64_t;要求 CUDA 12.2+;TSNE.n_iter改名为max_iter;回归模型predict输出 dtype 标准化;支持非数值类别标签;清理SGD/MBSGDClassifier/MBSGDRegressor/multiclass等模块。 - New Features:
SpectralClustering估计器;随机森林特征重要性(Feature Importances)与 OOB(Out-of-Bag)评分;HDBSCAN 支持 NN-Descent 建图选项;libcuml提供静态目标;实现 k-fold。 - Bug Fixes:修复 PCA 符号翻转、坐标下降溢出、DBSCAN 溢出、随机森林采样偏差与 builder 采样、Dask DBSCAN 树归约等。
- 工程:使用 ruff(替代 black/flake8/isort)、SPDX 版权头全面化、Treelite 4.6.1、sklearn 1.8 早期兼容、
n_iter_属性在 SVC/SVR/Ridge/ElasticNet/Lasso/CD 上全面暴露。
4.2 cuml 25.10.00(2025-10-08)
- 核心主题:
cuml.accel成熟化——移除弃用 CLI 选项、支持环境变量启用、支持set_output/get_feature_names_out、SVM ONNX 支持、IPython profiler magic 修复。 - 新能力:
cuml.metrics.median_absolute_error;KernelDensity.score_samples加速;NearestNeighbors.kneighbors_graph支持近似算法;TSNE.n_iter_拟合属性;SpectralEmbedding的affinity参数(precomputed/nearest_neighbors);UMAP 使用 cuVS 的 NN-Descent。 - 平台:CUDA 13.0.0 构建与测试;移除 UCX-Py;
nvidia-ml-py替换pynvml。
4.3 cuml 25.08.00(2025-08-06)
- 新增 Spectral Embedding(cpp/src/spectral/spectral_embedding.cu),并在后续版本持续完善。
- Breaking Changes:
KMeans.random_state默认改为None;移除 CUDA 11 支持;experimental.filPython 模块移除,FIL 迁移至稳定路径(cpp/src/fil);cuml.neighbors/cuml.ensemble/HDBSCAN/UMAP陆续移植到ProxyBase/InteropMixin新架构。 - cuml.accel 能力扩张:新增 KernelRidge、LinearSVC/LinearSVR、元数据路由、
set_output/get_feature_names_out、profiler。
4.4 cuml 25.06.00(2025-06-05):新 Estimator Proxy 架构
- New Estimator Proxy 架构(PR #6613)是本版本最重要的结构变更:估计器统一通过
ProxyBase/InteropMixin实现 CPU/GPU 互操作与 sklearn 兼容,此架构在后续版本持续铺开,最终在 26.08 完成全部迁移。 - 其他:
cuml.accel中 Barnes-Hut t-SNE 映射到 FFT 实现;Python 3.13 支持;scikit-learn 成为必需依赖;RBC(远程广播)从 cuVS 引入;禁用 cuml-cpu 构建。
4.5 cuML 25.04.00(2025-04-09)
- FIL 从 experimental 转正;
LogisticRegression支持非平凡classes_;cuml.accel作为独立模块成立(PR #6347)并支持 UVM、CLI、环境变量;as_sklearn/from_sklearn互操作 API 落地(25.02 引入)。
五、算法模块演进专题
5.1 随机森林 / 决策树:从 0.7 到 26.08 的最长主线
随机森林(Random Forest)是 cuML 迭代最密集的模块,从 CHANGELOG.md 可梳理出完整脉络:
- 0.7.0:首个单 GPU 分类随机森林与决策树;0.8.0:RF Python 类、Dask RF;0.9.0:RF 回归、RF 转 Treelite 格式、FIL(Forest Inference Library)诞生(PR #819);0.10.0:RF 推理改用 FIL(GPU 加速预测);0.11.0:RF 使用 treelite/protobuf/FIL 实现 pickling、RF 回归 benchmark;0.13.0:MNMG RF 用 FIL 预测、
predict_proba支持;0.15.0:max_depth与 sklearn 兼容(PR #2641);0.17.0:max_samples重命名对齐 sklearn;0.19.0:新后端(batched-levelalgo)默认启用。 - 21.06 起:新后端默认用于回归;21.08:移除旧 RF 后端;21.10:向量叶子、Poisson 偏差不纯度、多类 FIL 推理;21.12:Gamma/Inverse Gaussian 损失;25.12:特征重要性与 OOB 评分;26.06/26.08:nvForest 推理、样本权重、加权 bootstrap、确定性采样分位数、分布式分裂评分钩子。
- 当前实现分布在 cpp/src/randomforest、cpp/src/decisiontree/batched-levelalgo(含 bins、builder、objectives、quantiles、split 等子模块),C++ 基准位于 cpp/bench/sg/rf_classifier.cu 与 cpp/bench/sg/rf_regressor.cu。
5.2 FIL 与 Treelite:树模型推理生态
FIL 从 0.9.0 诞生(PR #819)到 25.04 转正,经历了:稀疏森林(0.11)、多类模型(0.13/21.10)、float64 支持(22.06)、CPU+GPU 双实现(23.04,PR #4890)、predict_per_tree/apply、UBJSON 格式(24.08)、XGBoost UBJSON(24.08)、宽数据推理(25.08)、整数溢出与 OOB 内存访问防护(26.04/26.06)。当前 C++ 实现位于 cpp/src/fil,Python 侧在 python/cuml/cuml/ensemble。
5.3 聚类与流形:DBSCAN / KMeans / HDBSCAN / UMAP / t-SNE
- DBSCAN:0.5.0 起用 ML primitives 重构;0.13 预计算距离矩阵;21.08 用 cuVS 替换 RAFT 距离(25.10);26.04 计算
components_;实现位于 cpp/src/dbscan(含 adjgraph/corepoints/mergelabels/vertexdeg 子模块)。 - KMeans:0.2.0 加入;22.12 改用 RAFT KMeans(PR #4713);25.08 默认
random_state=None;26.06 移除inertia_check;26.08 支持 host-streaming;实现位于 cpp/src/kmeans。 - HDBSCAN:21.06 加入(PR #3821);后续增加 membership vector、soft clustering、NN-Descent 建图(25.12)、int64 索引(25.12);实现位于 cpp/src/hdbscan。
- UMAP:0.6.0 加入;持续获得稀疏输入(0.17)、确定性(21.06)、NN-Descent(24.08/25.06)、自定义初始化与逆变换(26.02)、顺序行为选项(26.04);实现位于 cpp/src/umap。
- t-SNE:0.9.0 加入;Barnes-Hut 与 FFT 两种实现(cpp/src/tsne);25.06 起 cuml.accel 将 Barnes-Hut 映射到 FFT;26.08 修复 FFT 的随机种子确定性。
5.4 SVM / 线性模型 / 时间序列
- SVM:0.10.0 加入(PR #912);后续支持稀疏输入(23.06)、预计算核(26.02)、CPU/GPU 互操作(25.04);
probability参数逐步弃用;实现位于 cpp/src/svm。 - 线性模型:OLS/Ridge(0.5.0)、Lasso/ElasticNet(0.7.0)、LogisticRegression(0.8.0)、多目标 LinearRegression(22.12)、LSMR 求解器(26.06)、
as_sklearn/from_sklearn(25.02)。 - 时间序列(cuml.tsa):ARIMA(0.11)、季节性 ARIMA(0.13)、AutoARIMA(0.15)、Holt-Winters(0.9);26.08 已整体弃用,python/cuml/cuml/tsa 保留实现并新增弃用提示。
六、cuml.accel:零代码改动加速的演进主线
cuml.accel 是 cuML 当前最重要的差异化能力之一,README 明确其定位:"accelerates existing scikit-learn, UMAP, and HDBSCAN code without changing the Python code"。其演进脉络:
- 25.04:
cuml.accel作为独立模块成立(PR #6347),支持 UVM、CLI、环境变量启用;随后进入 Notebook/CLI 文档化(25.06/25.08 文档重构)。 - 25.06:新 Estimator Proxy 架构(
ProxyBase/InteropMixin),为代理估计器奠定基座。 - 25.08/25.10:能力大幅扩张——LabelEncoder、LinearSVC/SVR、KernelRidge、SpectralEmbedding、TargetEncoder、metadata routing、
set_output/get_feature_names_out、ONNX 支持、profiler、IPython magic、子进程传播。 - 26.04/26.06/26.08:新增 StandardScaler、MinMaxScaler、MaxAbsScaler、PolynomialFeatures、SpectralClustering、IncrementalPCA、LabelEncoder;支持代理估计器子类化;不支持的 PCA/KernelRidge 回退 CPU;日志级别 IPython magic;上游测试套件(sklearn nightly、UMAP、HDBSCAN 上游测试)纳入 CI。
- 当前实现集中在 python/cuml/cuml/accel(accelerator.py、core.py、estimator_proxy.py、magics.py、profilers.py、runners.py、pytest_plugin.py 等),配套文档见 docs/source/cuml-accel 与 docs/source/api/cuml.accel.rst,测试在 python/cuml/cuml_accel_tests。
七、平台、依赖与工程化演进
7.1 CUDA / Python / 核心依赖
从 CHANGELOG 与 docs/source/supported_versions.rst 交叉验证:
- CUDA:0.10 支持 CUDA 10.1;24.04 支持 12.2;25.12 起要求 CUDA 12.2+;25.08 移除 CUDA 11;25.10 引入 CUDA 13.0;26.06 支持 13.2;26.08 用 CUDA 13.3.0 构建 wheel。
- Python:23.06 放弃 3.8;24.10 放弃 3.9;25.06 支持 3.13;26.04 放弃 3.10 并支持 3.14。
- scikit-learn:最低版本从 1.4(25.06)→ 1.5(25.08)→ 1.6(26.06,PR #8091);当前运行时依赖为 NumPy>=2、scikit-learn>=1.6、scipy>=1.14.0、numba、cupy(cupy-cuda12x/13x>=14.0.1)、treelite>=4.6.1;可选依赖 xgboost>=2.1.0、hdbscan、umap-learn、pynndescent。
- 构建体系:scikit-build(22.08)→ scikit-build-core(24.02)→ Python limited API(26.04);CMake 最低版本一路上调(3.14 → 3.23.1 → 3.30.4 → 4.0);wheel 与 conda 双通道发布,相关脚本见 ci/build_wheel_cuml.sh、ci/build_wheel_libcuml.sh、ci/build_cpp.sh、ci/build_python.sh。
7.2 测试与 CI
CHANGELOG 中大量条目涉及 CI 稳定性(xfail 管理、hypothesis 测试、上游测试套件、pytest-xdist、GPU 工作流),仓库中的实际支撑包括:ci/test_cpp.sh、ci/test_python_singlegpu.sh、ci/test_python_dask.sh、ci/test_python_sklearn_examples.sh、ci/run_cuml_accel_tests 系列,以及 python/cuml/tests 下超过 90 个 pytest 文件覆盖各算法模块。
7.3 数值与内存基建
- RMM/内存资源:从
PoolMemoryResource包装、PrefetchResourceAdaptor、pinned_host_memory_resource到 CCCL MR 设计(26.06),内存管理持续向 CCCL/RMM 上游对齐。 - 数值安全:26.08 引入 Safe Arithmetic(cpp/include/cuml/common/checked_arithmetic.hpp),与 26.04 的 FIL 整数溢出修复、25.12 的坐标下降溢出修复一脉相承。
八、如何利用本 CHANGELOG 指导实践
- 升级决策:在
YY.MM版本间升级前,重点检查 Breaking Changes 与 Deprecation 清单(如 26.08 的cuml.tsa、convert_dtype、legacy output types),参考本文第二章的弃用清单逐一排查代码。 - 功能寻址:需要某个算法的最新实现时,可按本文第五、六章给出的仓库路径直接定位源码(如 Isolation Forest 在 cpp/src/isolation_forest,
cuml.accel在 python/cuml/cuml/accel)。 - 依赖对齐:严格遵循 docs/source/supported_versions.rst 的版本矩阵,保证 cuML 与 cuDF/cuVS/RAFT 的
YY.MM完全一致,避免 ABI 与 API 错配。 - 行为对齐预期:了解 cuML 与 scikit-learn 的行为对齐节奏(如 RF
max_depth=None、KMeansrandom_state=None、predictdtype 标准化),降低迁移时的行为差异认知成本。
结语
从 2018 年 11 月仅有 PCA/TSVD/DBSCAN 的 cuML 0.1.0,到 2026 年 8 月覆盖聚类、线性模型、树模型、流形学习、时间序列、可解释性与零代码加速(cuml.accel)的 cuml 26.08.00,这份 CHANGELOG 完整记录了 NVIDIA cuML 作为 RAPIDS 生态核心库的成长路径。其演进主线清晰可辨:算法覆盖面持续扩展、API 向 scikit-learn 深度对齐、CPU/GPU 互操作与代理架构成熟化、底层数值与内存基建随 CCCL/RAFT/RMM 持续现代化。对开发者而言,这份变更记录既是升级手册,也是理解 GPU 机器学习库工程最佳实践的活教材。