尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

NVIDIA cuML 使用指南:GPU 加速机器学习的原生 API、cuml.accel 兼容加速与多 GPU 扩展

NVIDIA cuML 使用指南:GPU 加速机器学习的原生 API、cuml.accel 兼容加速与多 GPU 扩展 NVIDIA cuML 使用指南GPU 加速机器学习的原生 API、cuml.accel 兼容加速与多 GPU 扩展【免费下载链接】cumlNVIDIA cuML: GPU-Accelerated Machine Learning项目地址: https://gitcode.com/GitHub_Trending/cu/cumlNVIDIA cuML 是 CUDA-X Data Science 生态中的开源 GPU 加速机器学习库本指南以 python/libcuml/README.md 为核心完整讲解 cuML 的两种运行方式GPU 原生cumlPython APIscikit-learn 风格、数据与计算全程驻留 GPU与cuml.accel无感加速层不改动现有 scikit-learn/UMAP/HDBSCAN 代码即可获得 GPU 加速。阅读本文后你将掌握 cuML 的典型训练/聚类工作流、cuml.accel的命令行与 Notebook 用法、多 GPU 分布式扩展cuml.dask、源码构建方式以及模型序列化的安全实践。一、cuML 的两种运行路径概览cuML 为在 NVIDIA GPU 上运行机器学习工作负载提供了两条互补的路径cumlPython API提供 GPU 原生的估计器estimator采用与 scikit-learn 一致的 API 风格让你对机器学习工作流拥有直接、细粒度的控制权数据与计算始终留在 GPU 上避免 PCIe 传输开销。cuml.accel在不修改现有 Python 代码的前提下直接加速已有的 scikit-learn、UMAP 与 HDBSCAN 代码。它通过模块覆写与补丁机制见下文源码分析将受支持的调用透明地路由到 GPU 实现。据官方文档在代表性基准测试中 cuML 可将 scikit-learn 工作流加速最高达 50 倍实际加速效果取决于算法、数据集规模与具体硬件不能一概而论。二、使用 GPU 原生cumlAPI一个可运行的 DBSCAN 示例cumlPython API 遵循熟悉的 scikit-learn fit/predict/transform 模式同时将数据与计算保持在 GPU 上。README 给出的最小示例即可直接运行from cuml.datasets import make_blobs from cuml.cluster import DBSCAN # Create sample data X, y make_blobs(n_samples100, centers3, n_features2, random_state42) # Fit clustering model dbscan DBSCAN(eps1.0, min_samples5) dbscan.fit(X) print(dbscan.labels_)该示例覆盖了 cuML 的两个核心入口数据生成cuml.datasets与聚类估计器cuml.cluster二者在仓库中均有对应的 GPU 原生实现。2.1 数据生成make_blobs直接在 GPU 上构造样本cuml.datasets.make_blobs的实现位于 python/cuml/cuml/datasets/blobs.py。它使用cupy在设备端分配并填充数据核心参数n_samples样本数可传 int 或每个簇的样本数序列、n_features特征数、centers簇中心数量或固定中心坐标、cluster_std簇标准差、center_box随机中心坐标的包围盒默认(-10.0, 10.0)、shuffle是否打乱样本、random_state随机种子保证可复现、return_centers是否同时返回簇中心、order数组内存布局默认F、dtype默认float32。返回值X为形状[n_samples, n_features]的设备数组device arrayy为每个样本所属簇的整数标签当return_centersTrue时额外返回[n_centers, n_features]的中心数组。实现细节当n_samples为 int 且centers为 None 时自动生成 3 个中心若传入的是样本数序列则centers必须为 None 或与序列等长cluster_std若为序列其长度必须与簇中心数一致否则抛出ValueError。生成过程通过cp.zeros预分配显存、generator.normal生成正态分布数据并叠加中心偏移全部在 GPU 上完成blobs.py。2.2 聚类估计器DBSCAN的 GPU 实现与参数细节cuml.cluster.DBSCAN的 Python 绑定位于 python/cuml/cuml/cluster/dbscan.pyx其核心计算通过 Cython 直接调用 C 层cuml/cluster/dbscan.hpp的ML::Dbscan::fit以nogil方式在 GPU 上执行。主要参数与行为eps默认0.5两点同属一个邻域的最大距离示例中设为1.0。min_samples默认5一个邻域内构成核心点core point所需的最少样本数含该点本身。metric默认euclidean距离度量支持euclidean/l2、cosine、precomputed。若为precomputed则X被当作距离矩阵且必须是方阵dbscan.pyx。algorithm默认brute近邻计算算法支持brute暴力法与rbc基于随机桶聚类Randomized Blocking-based Clustering对应 C 层的EpsNnMethod枚举dbscan.pyx。max_mbytes_per_batch单批成对距离计算的最大显存预算MB。面对大规模样本的 O(N²) 距离计算通过它可在运行时间与内存占用之间权衡遇到显存不足OOM时可结合设备显存大小调低该值。注意它并不限制 DBSCAN 计算的总体显存峰值因此不宜直接设为设备全部显存dbscan.pyx。output_type控制结果与估计器属性输出的数据类型None/input/cupy/numpy/cudf/pandas为None时遵循模块级cuml.global_settings.output_type配置。calc_core_sample_indices默认True是否计算并保存core_sample_indices_与components_属性置为False可省去这部分开销。拟合后的属性labels_每个数据点的簇标签噪声点标记为-1、core_sample_indices_核心样本的索引、components_训练发现的核心样本拷贝。fit支持out_dtype参数int32或int64默认int32当样本数 × 特征数超过2**31 - 1时自动切换为int64以规避索引溢出dbscan.pyx。此外DBSCAN还实现了fit_predict可直接返回簇标签。2.3 覆盖范围cuml支持聚类、降维、回归、分类、预处理、模型选择、时间序列tsa、模型解释explainer与最近邻neighbors等工作流。API 参考文档列出了当前全部估计器与函数清单仓库中对应实现可分别参见 python/cuml/cuml/cluster、python/cuml/cuml/decomposition、python/cuml/cuml/linear_model、python/cuml/cuml/tsa 等目录。三、使用cuml.accel加速既有代码零改动接入 GPUcuml.accel的设计目标是不改动任何 Python 源码让已有 scikit-learn、UMAP、HDBSCAN 代码自动获得 GPU 加速。它提供两种接入方式。3.1 命令行方式直接运行现有脚本python -m cuml.accel script.py该命令由 python/cuml/cuml/accel/main.py 实现其 CLI 还支持尾随参数会原样转发给脚本例如python -m cuml.accel myscript --some-option-m module改为执行模块如python -m cuml.accel -m mymodule --some-option-c python code直接执行一段 Python 源码字符串无脚本参数时从标准输入读取源码执行若 stdin 是交互式终端则启动解释器-v/--verbose可叠加-vv提高日志详细程度默认仅显示警告--profile开启性能剖析--line-profile开启逐行剖析不支持-m模式--disable-uvm禁用统一虚拟内存UVM/managed memory分配可与cudf.pandas叠加使用python -m cudf.pandas -m cuml.accel myscript.pymain.py。3.2 Jupyter Notebook 方式加载 IPython 扩展在导入 scikit-learn、UMAP 或 HDBSCAN 之前先在 Notebook 单元格中加载扩展%load_ext cuml.accel扩展的实现位于 python/cuml/cuml/accel/magics.py注册后还提供三个专用 magic%cuml.accel.log_level [level]查询或设置cuml.accel日志级别error/warn/info/debug例如%cuml.accel.log_level debug%%cuml.accel.profile用cuml.accel剖析器运行当前单元格%%cuml.accel.line_profile用逐行剖析器运行当前单元格magics.py。3.3 加速、回退与检查机制受支持的调用在 GPU 上执行当某个估计器或配置无法被加速时cuml.accel自动回退到原始 CPU 实现保证后续工作流不被中断。从源码看加速通过两层机制实现python/cuml/cuml/accel/core.py_OVERRIDES模块覆写覆盖sklearn.cluster、sklearn.covariance、sklearn.decomposition、sklearn.ensemble、sklearn.linear_model、sklearn.manifold、sklearn.neighbors、sklearn.preprocessing、sklearn.svm、sklearn.kernel_ridge以及umap、hdbscan等与_PATCHES补丁作用于sklearn.pipeline、sklearn.compose、sklearn.utils等。对应的覆写实现位于 python/cuml/cuml/accel/_overrides补丁位于 python/cuml/cuml/accel/_patches。版本约束检查core.py内置了_CONSTRAINTS校验——scikit-learn1.6.0,1.9.1、hdbscan0.8.39,0.8.44、umap-learn0.5.7,0.5.12版本不满足时仅输出警告而非中止core.py。UVM 管理内存默认在支持并发托管访问concurrent managed access即 UVM的平台上启用 managed memory通过 rmm 的PrefetchResourceAdaptorManagedMemoryResourceWSL2 不支持 managed memory--disable-uvm可显式关闭core.py。环境变量CUML_ACCEL_ENABLED1与CUML_ACCEL_LOG_LEVEL会在启用时自动写入环境使子进程同样获得加速日志级别默认warn。日志与剖析工具用于核对哪些操作真正跑在 GPU 上具体覆盖范围与回退条件见官方cuml.accel兼容性文档。仓库中的相关测试可参考 python/cuml/cuml_accel_tests如test_accelerator.py、test_core.py、test_logging.py、test_profilers.py。四、超越单卡cuml.dask多 GPU / 多节点扩展cuml.daskAPI 基于 Dask覆盖的模块包括聚类cluster、分解decomposition如 PCA、集成ensemble如随机森林、线性模型linear_model、流形学习manifold、指标metrics、朴素贝叶斯naive_bayes、最近邻neighbors、预处理preprocessing、求解器solvers、特征抽取feature_extraction以及数据集工具datasets、公共组件common与兼容层_compat。多 GPU 底层通信与跨节点实现可进一步参考 C 层的python/cuml/cuml/dask所对应的多 GPU 源码以及仓库内多 GPU 测试 python/cuml/tests/dask覆盖 KMeans、PCA、随机森林、KNN 分类/回归、线性模型等。集群搭建、受支持算法清单与示例见官方 multi-GPU 指南。五、安装方式官方推荐通过安装选择器installation selector生成命令安装 nightly 或 release 版本的 cuML 包支持三种渠道conda安装cuml与libcuml等 conda 包pip安装 cuML 的 Python wheel 包Docker使用预构建的 RAPIDS 容器镜像。仓库内与此相关的元数据包括 conda 配方 conda/recipes/cuml/recipe.yaml 与 conda/recipes/libcuml/recipe.yaml、conda 环境定义 conda/environments按 CUDA 版本 12.9/13.3 与架构 x86_64/aarch64 区分、Python 包构建脚本 ci/build_python.sh、wheel 构建脚本 ci/build_wheel.sh、ci/build_wheel_cuml.sh 与 ci/build_wheel_libcuml.sh。需要注意以 conda 方式安装时运行时依赖可能由 conda 包无 Python 模块满足此时动态库依赖系统加载路径解析详见下文libcuml加载逻辑。六、从源码构建与libcuml动态库加载6.1 源码构建README 指向仓库根目录的 BUILD.md 作为构建指南。构建相关脚本集中在 ci 目录C 构建 ci/build_cpp.sh、Python 构建 ci/build_python.sh、文档构建 ci/build_docs.sh测试脚本如 ci/run_ctests.sh、ci/test_python_singlegpu.sh、ci/test_python_dask.sh 等。6.2libcuml动态库的瘦 Python 包装本关联文档所在的python/libcuml是一个独立的 Python 包其职责是在运行时动态加载libcuml.so及其依赖而不是提供估计器实现估计器位于python/cuml。其核心逻辑在 python/libcuml/libcuml/load.py加载顺序先按依赖顺序加载libcuvs、libnvforest、libraft、librmm、rapids_logger通过各自包的load_library()再加载libcuml.soload.py。若这些 Python 模块不存在例如以 conda 包形式安装、仅提供动态库则跳过并依赖系统加载器按 RPATH 等机制解析。系统库优先 vs wheel 内置库优先环境变量RAPIDS_LIBCUML_PREFER_SYSTEM_LIBRARY控制加载策略。默认优先 wheel 内捆绑的库位于包目录lib64/下找不到时回退到系统安装设为非false时则先尝试系统库避免覆盖其他包期望的符号load.py。RTLD_LOCAL标志以ctypes.RTLD_LOCAL加载库本身会进入加载器缓存但不把符号注入全局命名空间从而允许后续依赖该库的其他 DSO 成功加载并满足依赖同时避免libcuml的符号与其他动态库冲突污染全局符号表load.py。包入口 python/libcuml/libcuml/init.py 导出__version__、__git_commit__并调用load_library()。配套的链接测试可参考 python/libcuml/tests/test_libcuml_linkage.py。七、scikit-learn 兼容性cuML 兼容 scikit-learn1.6 或更高版本1.6。这一约束在cuml.accel中同样体现core.py的_CONSTRAINTS对scikit-learn1.6.0,1.9.1做版本校验core.py。仓库中的兼容性验证包括 python/cuml/tests/test_sklearn_compatibility.py、python/cuml/tests/test_sklearn_import_export.py 以及 CI 脚本 ci/test_python_scikit_learn_tests.sh。八、模型序列化与安全实践8.1 序列化与反序列化cuML 模型可以通过pickle或joblib序列化之后加载用于推理。cuML 内部使用cloudpickle因此经cuml.accel训练的模型可以被加载并与 scikit-learn 配合使用例如在纯 CPU 环境中用 scikit-learn 消费这些模型。8.2 安全警告只信任可信来源只能对可信来源的模型文件进行反序列化unpickle。pickle模块以及基于它的joblib本质上是不安全的恶意构造的载荷可以在反序列化过程中执行任意代码从而危害系统。以下操作均需警惕pickle.load()/pickle.loads()joblib.load()及任何基于文件的模型加载方式不要对来自不可信或被篡改来源的数据执行上述任何加载操作。详细的序列化模式与安全实践参见仓库中的 模型序列化与持久化 Notebook该 Notebook 演示了在 cuML 与 scikit-learn 之间保存、加载和交换模型的标准做法。九、贡献与引用贡献指南参见 CONTRIBUTING.md。开发者文档另有 wiki/python/DEVELOPER_GUIDE.md 与 wiki/python/ESTIMATOR_GUIDE.md 可参考。Bug 报告与特性请求通过项目 GitHub Issues 提交。引用文献如需在项目中引用 cuML官方建议引用 Sebastian Raschka、Joshua Patterson 与 Corey Nolet 合著的论文Machine Learning in Python: Main developments and technology trends in data science, machine learning, and artificial intelligence2020arXiv:2002.04803article{raschka2020machine, title{Machine Learning in Python: Main developments and technology trends in data science, machine learning, and artificial intelligence}, author{Raschka, Sebastian and Patterson, Joshua and Nolet, Corey}, journal{arXiv preprint arXiv:2002.04803}, year{2020} }十、总结cuML 提供了一条清晰的 GPU 机器学习接入路径新项目可以直接使用cuml原生 API 获得完全的 GPU 控制存量 scikit-learn/UMAP/HDBSCAN 代码则可以通过cuml.accel以零改动方式加速需要更大规模算力时cuml.dask提供多 GPU/多节点的分布式实现。从本文给出的源码佐证可以看到无论是cuml.cluster.DBSCAN的 Cython 绑定与 C 内核、cuml.accel的模块覆写/补丁与版本约束机制还是libcuml的RTLD_LOCAL动态加载策略整个加速链路在仓库中都有对应的实现可供深入研读。在使用时请务必遵守模型的序列化安全规范并关注 scikit-learn 版本兼容约束。【免费下载链接】cumlNVIDIA cuML: GPU-Accelerated Machine Learning项目地址: https://gitcode.com/GitHub_Trending/cu/cuml创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表