详细介绍:Scikit-Learn 1.8引入 Array API,支持 PyTorch 与 CuPy 张量的原生 GPU 加速

news/2026/1/18 8:44:34/文章来源:https://www.cnblogs.com/tlnshuju/p/19497764

详细介绍:Scikit-Learn 1.8引入 Array API,支持 PyTorch 与 CuPy 张量的原生 GPU 加速

2026-01-18 08:38  tlnshuju  阅读(0)  评论(0)    收藏  举报

Scikit-Learn 1.8.0 更新引入了实验性的 Array API 支持。这意味着 CuPy 数组或 PyTorch 张量现在可以直接在 Scikit-Learn 的部分组件中直接使用了,且计算过程能保留在 GPU 上。

1.8.0 到底更新了什么?

Scikit-Learn 开始正式支持Python Array API 标准。这是一个由 NumPy、CuPy、PyTorch、JAX 等库共同维护的接口规范。在 1.8.0 版本中可以实现:

  • 直接传参:受支持的评估器(estimators)现在可以直接接收 CuPy 数组或 PyTorch 张量。
  • 计算分派:运算会被自动分派到对应的非 CPU 设备(如 GPU)上执行。
  • 状态保留:模型拟合后的属性会与输入数据保持在同一物理设备上。

虽然目前的版本依然贴着“实验性”标签且需要显式开启,但它确实打破了 Scikit-Learn 过去那种“万物皆需 NumPy”的框架。

交叉验证

如果你平时不怎么用

cross_val_score

GridSearchCV

CalibratedClassifierCV

,那你可能感觉不到这次更新的提速。但对大多数从事肃建模的开发者来说,交叉验证一直是 GPU 的“性能杀手”。

在旧版本中,即便你的基础模型(如 XGBoost)是在 GPU 上训练的,Scikit-Learn 的编排逻辑会把数组转回 NumPy,然后在 CPU 上重新计算各项指标。这种频繁的内存搬运和 CPU 的操作浪费了大量的时间,但是Array API 的加入让这种循环能基本闭环在 GPU 内部运行。

开启方式与限制

启用这项特性需要完成下面的配置。如果漏掉任何一步,程序都会悄悄退回到 NumPy 模式。

环境变量设置(必须在导入 SciPy 或 Scikit-Learn 之前):

 importosos.environ["SCIPY_ARRAY_API"] ="1"

配置 Scikit-Learn 内部开关

 fromsklearnimportset_configset_config(array_api_dispatch=True)

目前还有一个问题,就是不支持 cuDF DataFrames。但是你依然可以用 cuDF 做数据加载和预处理,不过输入模型之前必须确保输入是 array-like 格式。也就是说类别特征必须手动编码而且且无法再依赖 pandas/cuDF 的 dtype 自动识别机制。

基于 GPU 的 XGBoost 交叉验证

下面是一个运行 5 折分层交叉验证的示例。为了让整个链路留在 GPU 上,我们需要对

XGBClassifier

做一点小的封装,并结合 cuML 的指标计算。

 import osos.environ['SCIPY_ARRAY_API'] = '1'import cupy as cpimport cudffrom sklearn.model_selection import StratifiedKFold, cross_val_scorefrom sklearn.metrics import make_scorerfrom cuml.metrics import roc_auc_scorefrom xgboost import XGBClassifierfrom sklearn import set_configset_config(array_api_dispatch=True)# 加载数据并进行简单的预处理X = cudf.read_csv('/kaggle/input/playground-series-s5e12/train.csv').set_index('id')y = X.pop('diagnosed_diabetes').astype(int)# 类别特征编码处理cat_cols = [c for c in X.columns if X[c].dtype == 'object']X = X.astype({c: 'category' for c in cat_cols})for c in cat_cols:X[c] = X[c].cat.codesft = ['c' if c in cat_cols else 'q' for c in X.columns]kfold = StratifiedKFold(5, shuffle=True, random_state=0)# 封装 XGB 以适配 CuPy 预测class cuXGBClassifier(XGBClassifier):@propertydef classes_(self):return cp.asarray(super().classes_)def predict_proba(self, X):p = self.get_booster().inplace_predict(X)if p.ndim == 1:p = cp.column_stack([1 - p, p])return pdef predict(self, X):return cp.asarray(super().predict(X))model = cuXGBClassifier(enable_categorical=True,feature_types=ft,device='cuda',n_jobs=4,random_state=0)# 执行交叉验证scores = cross_val_score(model,X.values,y.values,cv=kfold,scoring=make_scorer(roc_auc_score,response_method="predict_proba"),n_jobs=1)print(f"{scores.mean():.5f} ± {scores.std():.5f}")

虽然这段代码看起来还是需要一些修改,但它确实能让交叉验证循环保持在 GPU 上。

现阶段支持的组件

目前 Array API 的覆盖范围还在逐步扩大。在 1.8.0 中,以下组件已经具备了较好的支持:

  • 预处理StandardScalerPolynomialFeatures
  • 线性模型与校准RidgeCVRidgeClassifierCVCalibratedClassifierCV
  • 聚类与混合模型GaussianMixture

官方提供的一个基于 PyTorch 的 Ridge 管道示例显示,在处理线性代数密集型任务时,这种配置在 Colab 环境下能比单核 CPU 快出 10 倍左右。

 ridge_pipeline_gpu = make_pipeline(feature_preprocessor,FunctionTransformer(lambda x: torch.tensor(x.to_numpy().astype(np.float32),device="cuda")),CalibratedClassifierCV(RidgeClassifierCV(alphas=alphas),method="temperature"),)with sklearn.config_context(array_api_dispatch=True):cv_results = cross_validate(ridge_pipeline_gpu, features, target)

总结

Scikit-Learn 准备好完全接管 GPU 了吗?显然还没有。但这个版本意义在于,它正已经向GPU的支持迈出了第一步。目前这种方式虽然还有点“硬核”,对普通用户不够友好,但对于追求极致效率的开发者来说,Scikit-Learn 1.8.0 已经要想这个方向前进了。

Scikit-Learn 1.8.0 首次引入实验性 Array API 支持,可直接使用 CuPy 数组或 PyTorch 张量,计算全程保留在 GPU。交叉验证等操作不再强制转回 CPU,大幅提升效率。需配置环境变量与 set_config 开启,目前支持部分组件如 Ridge、GaussianMixture 等,标志其迈向 GPU 加速的重要一步。

作者:Abish Pius

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1177496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电商人像批量抠图方案|基于科哥CV-UNet镜像高效实现

电商人像批量抠图方案|基于科哥CV-UNet镜像高效实现 在电商、广告设计和内容创作领域,高质量的人像抠图是提升视觉表现力的关键环节。传统手动抠图效率低、成本高,难以满足大规模商品图处理需求。随着深度学习技术的发展,基于图像…

支持术语干预与上下文翻译|HY-MT1.5-7B企业级应用实践

支持术语干预与上下文翻译|HY-MT1.5-7B企业级应用实践 在企业全球化进程中,高质量、可定制的机器翻译系统已成为跨语言沟通的核心基础设施。然而,通用翻译模型在专业领域常面临术语不准、语境缺失、格式混乱等问题,难以满足金融、…

告别盲目选择:2026年最新盘点真正具备高含金量科研产出的三家高适配合作伙伴 - 品牌推荐

随着全球顶尖院校申请竞争进入白热化阶段,学生对提升学术竞争力的需求正从标准化考试准备向深度科研背景塑造加速迁移。2026年开年之际,行业格局呈现服务模式精细化与成果导向明确化的双重特征。本次测评基于师资与课…

Qwen-Image-2512应用场景解析:广告设计自动化实战

Qwen-Image-2512应用场景解析:广告设计自动化实战 1. 技术背景与业务痛点 在数字营销和品牌推广领域,广告素材的生产效率直接影响市场响应速度。传统广告设计依赖专业设计师手动完成构图、配色、文案排版等流程,周期长、成本高,…

内容安全卡算力?Qwen3Guard低成本部署解决方案来了

内容安全卡算力?Qwen3Guard低成本部署解决方案来了 1. 背景与挑战:内容安全审核的算力困境 随着大模型在各类应用场景中的广泛落地,内容安全审核已成为不可忽视的关键环节。无论是社交平台、在线教育还是智能客服系统,都需要确保…

多版本共存场景下libwebkit2gtk-4.1-0安装路径管理建议

如何优雅地管理libwebkit2gtk-4.1-0多版本共存?从路径隔离到生产级部署的实战指南你有没有遇到过这样的场景:正在开发的新功能需要 WebKitGTK 2.40 提供的现代 API,但系统里跑着的关键业务软件却只兼容 2.36 版本。一升级,老程序就…

如何通过数据分析提升品牌影响力

如何通过数据分析提升品牌影响力 关键词:数据分析、品牌影响力、数据挖掘、市场调研、营销优化 摘要:本文围绕如何通过数据分析提升品牌影响力展开。详细阐述了数据分析在品牌建设中的重要性,介绍了相关核心概念及联系,深入讲解核心算法原理与具体操作步骤,运用数学模型和…

PaddleOCR-VL手写体识别教程:古籍数字化实战

PaddleOCR-VL手写体识别教程:古籍数字化实战 1. 引言 在古籍数字化和历史文献保护领域,手写体文字的自动识别长期面临巨大挑战。传统OCR技术多针对印刷体优化,在处理字迹模糊、版式复杂、语言多样化的手写古籍时表现不佳。随着深度学习与视…

verl混合并行策略揭秘:3D-HybridEngine原理浅析

verl混合并行策略揭秘:3D-HybridEngine原理浅析 1. 背景与技术挑战 大型语言模型(LLMs)的后训练阶段,尤其是基于强化学习(Reinforcement Learning, RL)的对齐训练,正面临日益严峻的计算与内存…

AKShare金融数据接口库:零基础小白也能轻松上手的数据获取神器

AKShare金融数据接口库:零基础小白也能轻松上手的数据获取神器 【免费下载链接】akshare 项目地址: https://gitcode.com/gh_mirrors/aks/akshare 还在为金融数据获取发愁吗?AKShare作为Python生态中的明星金融数据接口库,专为量化新…

Meta-Llama-3-8B-Instruct性能极限:压力测试全记录

Meta-Llama-3-8B-Instruct性能极限:压力测试全记录 1. 引言 1.1 业务场景描述 随着大语言模型在企业服务、智能客服和开发者工具中的广泛应用,对高性能、低成本、可本地部署的中等规模模型需求日益增长。尤其在资源受限的环境下,如何在消费…

从口语到书面语一键转换|FST ITN-ZH镜像助力结构化输出

从口语到书面语一键转换|FST ITN-ZH镜像助力结构化输出 在信息记录与知识管理日益依赖数字化工具的今天,如何高效地将自然语言中的口语表达转化为规范、可读性强的书面文本,成为提升工作效率的关键环节。尤其是在语音识别(ASR&am…

基于大数据的健康风险评估系统的设计与实现任务书

基于大数据的健康风险评估系统的设计与实现任务书 一、任务名称 基于大数据的健康风险评估系统的设计与实现 二、任务目的 本任务旨在通过运用大数据处理技术与机器学习算法,设计并实现一套功能完善、精准高效的健康风险评估系统。解决传统健康风险评估维度单一、实…

Roofline性能模型介绍, Intel Advisor使用建模

文章目录一、Roofline 模型基本原理二、使用 Intel Advisor 构建 Roofline 模型步骤概览:三、示例:优化一个内存受限的矩阵乘法初始代码(朴素实现):使用 Advisor 分析:优化策略:分块&#xff08…

开箱即用:DeepSeek-R1-Distill-Qwen-1.5B的Docker快速部署方案

开箱即用:DeepSeek-R1-Distill-Qwen-1.5B的Docker快速部署方案 在大模型落地应用过程中,如何实现高效、稳定、可复用的服务化部署是工程实践中的关键挑战。本文将围绕 DeepSeek-R1-Distill-Qwen-1.5B 模型,详细介绍基于 vLLM Docker 的快速…

亲测bert-base-chinese镜像:完型填空与语义相似度实战体验

亲测bert-base-chinese镜像:完型填空与语义相似度实战体验 1. 引言 在中文自然语言处理(NLP)领域,BERT(Bidirectional Encoder Representations from Transformers)自2018年提出以来,已成为各…

开发者科哥亲授:HeyGem系统设计背后的技术逻辑

开发者科哥亲授:HeyGem系统设计背后的技术逻辑 1. 系统定位与核心价值 在AI内容生成领域,数字人视频正从“技术演示”走向“规模化生产”。传统影视级制作依赖高昂的人力成本和复杂的后期流程,而基于深度学习的口型同步(Lip Syn…

AI智能文档扫描仪代码实例:Python调用Canny边缘检测核心逻辑

AI智能文档扫描仪代码实例:Python调用Canny边缘检测核心逻辑 1. 引言 1.1 业务场景描述 在日常办公中,用户经常需要将纸质文档、发票或白板内容通过手机拍照转化为清晰的电子扫描件。然而,手持拍摄往往存在角度倾斜、光照不均、背景干扰等…

从文本到播客:VibeVoice实现全流程自动化生成

从文本到播客:VibeVoice实现全流程自动化生成 1. 引言:长时多角色语音合成的新范式 在内容创作日益智能化的今天,播客、有声书和虚拟访谈等长时语音应用正经历一场静默革命。传统文本转语音(TTS)系统虽然能完成基本朗…

DeepSeek-R1应用开发:集成到移动端的解决方案

DeepSeek-R1应用开发:集成到移动端的解决方案 1. 引言 随着大模型技术的快速发展,如何在资源受限的移动设备上实现高效、安全的本地化推理成为业界关注的核心问题。传统的大型语言模型(LLM)通常依赖云端GPU集群进行推理&#xf…