网易首页 > 网易号 > 正文 申请入驻

Scikit-Learn 1.8更新:新增 Array API 支持PyTorch与CuPy加速!

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 之前):

import os
os.environ["SCIPY_ARRAY_API"] = "1"

配置 Scikit-Learn 内部开关

from sklearn import set_config
set_config(array_api_dispatch=True)

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

基于 GPU 的 XGBoost 交叉验证

下面是一个运行 5 折分层交叉验证的示例。为了让整个链路留在 GPU 上,我们需要对 XGBClassifier 做一点小的封装,并结合 cuML 的指标计算。

import os
os.environ['SCIPY_ARRAY_API'] = '1'
import cupy as cp
import cudf
from sklearn.model_selection import StratifiedKFold, cross_val_score
from sklearn.metrics import make_scorer
from cuml.metrics import roc_auc_score
from xgboost import XGBClassifier
from sklearn import set_config
set_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.codes
ft = ['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):
@property
def 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 p
def 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 中,以下组件已经具备了较好的支持:

  • 预处理:StandardScaler、PolynomialFeatures
  • 线性模型与校准:RidgeCV、RidgeClassifierCV、CalibratedClassifierCV
  • 聚类与混合模型: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 已经要想这个方向前进了。

https://avoid.overfit.cn/post/ab7e632896364fc3b4b9fdc9d17884e3

作者:Abish Pius

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
炸裂逆转!王曦雨绝境翻盘大获全胜,强势闯入费城公开赛八强

炸裂逆转!王曦雨绝境翻盘大获全胜,强势闯入费城公开赛八强

落梅如雪乱飞
2026-08-26 05:44:00
北大张丹丹“灵活就业是福利”论,证明部分精英已经丧失了把底层劳动者当“活人”而不是“样本”的能力

北大张丹丹“灵活就业是福利”论,证明部分精英已经丧失了把底层劳动者当“活人”而不是“样本”的能力

壹家言
2026-08-24 12:53:43
胖东来许昌新店已正式注册成立,与即将关闭的生活广场店相隔仅4公里,或将承接全部老店员工

胖东来许昌新店已正式注册成立,与即将关闭的生活广场店相隔仅4公里,或将承接全部老店员工

极目新闻
2026-08-25 22:26:18
我老公对我真的是生理性喜欢,我俩今年四十五,他每天晚上都要抱着我睡,不是那种敷衍的搭把手,是真抱

我老公对我真的是生理性喜欢,我俩今年四十五,他每天晚上都要抱着我睡,不是那种敷衍的搭把手,是真抱

徐侠客有话说
2026-08-13 11:03:24
0点26分发车!网红红眼G4199,能省住宿费,但有几个大坑要当心

0点26分发车!网红红眼G4199,能省住宿费,但有几个大坑要当心

娱乐洞察点点
2026-08-25 03:57:38
《自然》发现:你可能早已打过“痴呆疫苗”,只是自己还不知道!

《自然》发现:你可能早已打过“痴呆疫苗”,只是自己还不知道!

徐德文科学频道
2026-08-25 23:17:37
恒大数百万烂尾业主:为什么很少看见激烈闹事,他们去哪了

恒大数百万烂尾业主:为什么很少看见激烈闹事,他们去哪了

聚焦真实瞬间
2026-08-25 04:36:34
警惕!只要有人打电话问你“是不是本人?”立刻这样回,防骗保命

警惕!只要有人打电话问你“是不是本人?”立刻这样回,防骗保命

叮当当科技
2026-08-24 02:11:37
有西方美女靓丽,又有东方美女风韵,太漂亮了!

有西方美女靓丽,又有东方美女风韵,太漂亮了!

喜欢历史的阿繁
2026-08-26 02:38:29
决战打响!特朗普挨个打电话通令各国,中国强势回应:不陪你玩

决战打响!特朗普挨个打电话通令各国,中国强势回应:不陪你玩

解锁世界风云
2026-08-26 04:56:45
胆真大!60岁澳波半场换下暴怒的C罗 球迷:葡萄牙敢这样早夺冠了

胆真大!60岁澳波半场换下暴怒的C罗 球迷:葡萄牙敢这样早夺冠了

风过乡
2026-08-26 07:20:25
甲醛菜黑名单曝光!这5种要少吃,再便宜也别买,懂忌口更安心

甲醛菜黑名单曝光!这5种要少吃,再便宜也别买,懂忌口更安心

餐饮新纪元
2026-08-24 07:10:14
日本作家:给留学生超国民待遇,会令本国学生寒心,外国更鄙视

日本作家:给留学生超国民待遇,会令本国学生寒心,外国更鄙视

世界地缘档案
2026-08-26 00:05:15
凌晨决战开打,中国三大目标被狙击,特朗普拨电话,通令各国配合

凌晨决战开打,中国三大目标被狙击,特朗普拨电话,通令各国配合

娱乐圈的笔娱君
2026-08-26 02:50:41
FDA华人科学家内幕交易案:五年查了100多次机密文件,一个政府科学家如何毁掉了自己和儿子的未来

FDA华人科学家内幕交易案:五年查了100多次机密文件,一个政府科学家如何毁掉了自己和儿子的未来

留学生日报
2026-08-25 22:16:21
特朗普:考虑将安大略湖更名为“美国湖”,“因为我们预计今后不会再与(加拿大)安大略省有太多生意往来了”

特朗普:考虑将安大略湖更名为“美国湖”,“因为我们预计今后不会再与(加拿大)安大略省有太多生意往来了”

极目新闻
2026-08-25 19:47:19
上海市浦东新区区委常委、副区长徐徕,拟任新职!静安区委常委、副区长傅俊,拟履新!

上海市浦东新区区委常委、副区长徐徕,拟任新职!静安区委常委、副区长傅俊,拟履新!

王姐懒人家常菜
2026-08-26 04:04:28
美媒:中情局局长正在俄罗斯进行会谈

美媒:中情局局长正在俄罗斯进行会谈

新京报
2026-08-26 07:12:03
俄第七大炼油厂被炸到全厂停产,74%主力产能已停摆

俄第七大炼油厂被炸到全厂停产,74%主力产能已停摆

桂系007
2026-08-25 10:54:46
乌前防长:乌克兰正慢慢输掉战争,翻盘窗口只剩几个月

乌前防长:乌克兰正慢慢输掉战争,翻盘窗口只剩几个月

桂系007
2026-08-26 01:56:35
2026-08-26 07:52:49
deephub incentive-icons
deephub
CV NLP和数据挖掘知识
2028文章数 1465关注度
往期回顾 全部

科技要闻

机器人跑赢博尔特,身体太快,脑子还在追

头条要闻

赴韩遇害中国女生年仅25岁 原计划2天前入职新单位

头条要闻

赴韩遇害中国女生年仅25岁 原计划2天前入职新单位

体育要闻

穆里尼奥如何摆贝林修斯姆巴佩?

娱乐要闻

张韶涵成都演唱会中暑,中途吸氧

财经要闻

宇树科技最低跌破600元 5天缩水超2000亿

汽车要闻

硬派越野+华为智驾 泰钽700上市焕新价24.98万起

态度原创

健康
本地
教育
亲子
艺术

女孩几岁月经?7个青春期月经真相

本地新闻

无印良品竟是桐乡造?这座小城藏着一个刀具帝国

教育要闻

近日,南京多校家长会透露…

亲子要闻

你天天吃零食,你孩子能不吃吗?家长要做榜样!言传身教!

艺术要闻

启功手填简历曝光

无障碍浏览 进入关怀版