cuML 全版本演进深度解析:从 0.1.0 到 26.08 的 GPU 机器学习库成长之路

原创2026-09-17 10:26:091,394 阅读
文章标签:人工智能机器学习高性能计算

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 中 None transformer 的 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


三、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.fil Python 模块移除,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 指导实践

  1. 升级决策:在 YY.MM 版本间升级前,重点检查 Breaking Changes 与 Deprecation 清单(如 26.08 的 cuml.tsa、convert_dtype、legacy output types),参考本文第二章的弃用清单逐一排查代码。
  2. 功能寻址:需要某个算法的最新实现时,可按本文第五、六章给出的仓库路径直接定位源码(如 Isolation Forest 在 cpp/src/isolation_forest,cuml.accel 在 python/cuml/cuml/accel)。
  3. 依赖对齐:严格遵循 docs/source/supported_versions.rst 的版本矩阵,保证 cuML 与 cuDF/cuVS/RAFT 的 YY.MM 完全一致,避免 ABI 与 API 错配。
  4. 行为对齐预期:了解 cuML 与 scikit-learn 的行为对齐节奏(如 RF max_depth=None、KMeans random_state=None、predict dtype 标准化),降低迁移时的行为差异认知成本。

结语

从 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 机器学习库工程最佳实践的活教材。

登录后查看全文
cuml