算法金 | Xorbits,一个超强的 Python 库

本文来源公众号“算法金,仅用于学术分享,侵权删,干货满满。

原文链接:Xorbits,一个超强的 Python 库

1 Xorbits 库介绍

在数据科学和机器学习的世界里,处理大规模数据集和复杂计算的需求日益增长。

这就需要一个既能简化开发流程又能轻松扩展的工具。

今天,我们来聊聊 Xorbits ——一个为数据科学和机器学习领域量身打造的 Python 库。

https://github.com/xorbitsai/xorbits

1.1 Xorbits 简介

Xorbits 是一个开源计算框架,旨在简化数据科学和机器学习工作负载的扩展——从数据预处理到调优、训练和模型服务。

无论是在单机上利用多核心或GPU加速计算,还是扩展到数千台机器支持处理TB级数据和训练或服务大型模型,Xorbits 都能胜任。

Xorbits 提供了一套最佳的库,供数据科学家和机器学习从业者使用。

它能够在不需要深入了解基础设施的情况下扩展任务。

图片

1.2 为什么选择 Xorbits? 

  • 无缝扩展工作流:使用 Xorbits,你不需要指定如何分配数据,甚至不需要知道系统有多少核心。你可以继续使用现有的笔记本电脑,并且即使在笔记本电脑上也能从 Xorbits 获得显著的速度提升。

  • 处理大数据集:Xorbits 能够利用你所有的计算核心。这对于处理大型数据集特别有益,这些数据集可能会导致 pandas 变慢或内存不足。

  • 闪电般的速度:根据我们的基准测试,Xorbits 在速度和可扩展性方面超越了其他流行的 pandas API 框架。

  • 利用 Python 生态系统:Xorbits 旨在充分利用整个 ML 生态系统,提供与 pandas 等库的原生集成。

1.3 Xorbits的特点

  • API兼容性:Xorbits 提供了一个熟悉的 Python API,支持多种库,包括 pandas、NumPy、PyTorch、XGBoost 等。通过仅修改一行代码,你的 pandas 工作流就可以无缝地使用 Xorbits 进行扩展。

  • 轻松处理大规模数据集:Xorbits 可以扩展到数千台机器,支持处理 TB级数据和训练或服务大型模型,无需深入了解底层基础设施。

  • 闪电般的速度:Xorbits 在速度和可扩展性方面的表现超越了其他流行框架,使其成为处理大规模数据科学和机器学习工作负载的理想选择。

2 快速开始

2.1 安装 Xorbits

开始之前,你需要确保 Xorbits 正确安装在你的系统上。

pip install xorbits

2.2 使用 Xorbits 处理数据集

Xorbits 让处理大型数据集变得简单。

如果你熟悉 pandas,那么使用 Xorbits 会感觉非常自然。

以下是一个简单的例子,展示了如何使用 Xorbits 来加载和处理数据集:

import xorbits.pandas as xpd

# 加载数据集
data = xpd.read_csv('your_dataset.csv')

# 进行数据处理
data['new_column'] = data['existing_column'] + 10

# 显示处理后的数据
print(data.head())

这个例子展示了如何使用 Xorbits 的 pandas 接口来读取CSV文件,进行简单的数据处理,并打印结果。

这与传统的 pandas 用法非常相似,但背后的计算却可以自动扩展到多核心或整个集群。

2.3 扩展机器学习工作负载

Xorbits 的强大之处在于其能够无缝扩展机器学习工作负载。

无论是数据预处理、模型训练还是模型服务,Xorbits 都能提供必要的速度和灵活性。

2.4 部署 Xorbits 集群

对于需要在云端或大型集群上部署模型的高级用户,Xorbits 提供了详细的指南来帮助你部署 Xorbits 集群。

这使得在更大规模上运行数据科学和机器学习工作负载成为可能。

3 效果图

3.1 性能对比

将 Xorbits 与 Dask、Spark 上的 Pandas API 在 ~100 GB 数据集性能对比

Xorbits 与 Dask

Dask 是一个著名的“类似 Pandas”的框架,用于扩展 Python 工作负载。下图说明了 TPC-H 查询的 Xorbits 和 Dask 的计算时间(不包括 I/O)。

Q21 被排除在外,因为 Dask 内存不足。在所有查询中,发现 Xorbits 比 Dask 快 7.3 倍

Spark 上的 Xorbits 与 Pandas API

Spark 是一个众所周知的框架,用于快速、大规模的数据处理。

下图说明了 TPC-H 查询(不包括 I/O)的 Xorbits 和 Spark Pandas API 的计算时间。

在所有查询中,这两个系统的性能大致相似,但 Xorbits 提供了更好的 API 兼容性

Spark Pandas API 在 Q1、Q4、Q7、Q21 上失败,并在 Q20 上耗尽内存。

4 实例

4.1 使用 Xorbits 处理搜索相似文本的嵌入向量

ChatGPT、Midjourney 和 Copilot 等 AI 工具的出现清楚地表明了 AI 程序和服务在各个领域的巨大潜力。

但是,一台从根本上只理解二进制代码(0 和 1)的机器,怎么会拥有如此广泛的知识,尽管它有相当多的缺陷?

答案在于我们人类向这些机器提供信息的方式。尽管机器缺乏人类感知世界的能力,但它们可以处理和理解我们以数字向量形式提供的数据。

这就是嵌入发挥作用的地方。

嵌入本质上是将实体(如单词)描述为多维环境中的向量。换句话说,它是一个数字序列,[.89, .65, .45, ...]这使我们能够以各种方式解释它们,例如通过在多维空间中评估它们的相似性。

在后续步骤中,我们将使用 Xorbits 从文章中生成向量嵌入。数据集包含来自 27 家美国出版物的 2,688,878 篇新闻文章和论文,时间跨度从 2016 年 1 月 1 日到 2020 年 4 月 2 日。

https://components.one/datasets/all-the-news-2-news-articles-dataset/

from sentence_transformers import SentenceTransformer  # 导入句子转换器库,用于文本向量化
import xorbits.pandas as pd  # 导入pandas库,但是使用xorbits的版本,用于数据处理
import re  # 导入正则表达式库,用于文本处理
import torch  # 导入PyTorch库,用于深度学习操作

# 如果GPU可用,则设置设备为GPU,否则使用CPU
device = 'cuda' if torch.cuda.is_available() else 'cpu'
# 初始化句子转换模型,并设置使用的设备
model = SentenceTransformer('average_word_embeddings_komninos', device=device)

def prepare_data(data) -> pd.DataFrame:
    '对数据进行预处理并准备好进行插入操作。'
    # 添加一个id列
    print("Preparing data...")
    data["id"] = range(len(data))  # 为数据集每一行分配一个唯一的ID

    # 为了加快向量计算,仅提取每篇文章的前几句话
    # 我们对生成data['article']的方式进行了一点优化
    # 原始版本:
    # data['article'] = data.article.apply(lambda x: ' '.join(re.split(r'(?<=[.:;])\s', x)[:4]))

    # 优化后的版本:
    def helper(x):
        count = 0
        idx = -1
        x = str(x)
        for match in re.finditer(r'(?<=[.:;])\s', x):
            count += 1
            if count == 4:
                idx = match.start() if match.start() != match.end() else match.start() + 1
                break
        return x[:idx]

    data['article'] = data['article'].fillna('')  # 填充空值
    data['article1'] = data.article.apply(helper)  # 应用优化后的文章截取方法
    
    s2 = data['title'].str.cat(list(data['article1']), sep="")  # 将标题和处理后的文章内容拼接
    
    print('Encoding articles...')
    # 对文章进行编码,将文本转换为向量
    encoded_articles = s2.apply(lambda x : list(map(float, model.encode(x))))
    data['article_vector'] = encoded_articles  # 将编码后的文章向量存储起来
    return data

# 由于使用完整数据集可能需要更多时间,因此仅使用数据集的一部分
data = pd.read_csv('all-the-news-2-1.csv', nrows=200000)  # 读取CSV文件中的前200000行数据
prepared_data = prepare_data(data)  # 调用prepare_data函数处理数据

这段代码主要包括数据预处理和使用句子转换器模型对文章进行编码的过程。

  • 首先,它通过添加一个唯一的ID列来准备数据。

  • 然后,为了加快处理速度,它仅提取每篇文章的前几句话进行后续的向量化处理。

  • 接着,它使用SentenceTransformer模型将处理后的文本转换为向量形式,以便进行进一步的分析或机器学习任务。

  • 最后,这些步骤被应用于一个较大的新闻数据集的子集。

在下面的比较中,我们将评估 Xorbits 和 Pandas 在读取 CSV 文件、处理文本和创建嵌入方面的性能。

下图说明了具有不同行计数(越低越好)的数据框之间的这些比较。

很明显,Xorbits 在数据预处理速度方面比 Pandas 具有明显的优势,尤其是在处理超过 500k 行的数据帧时。

之后,我们可以利用 Pinecone 来存储这些嵌入并检索结果,Pinecone 是一个专门设计用于存储和查询高维向量的向量数据库。

5 总结

Xorbits 为数据科学和机器学习领域的专业人士提供了一个强大、灵活且易于使用的工具,使他们能够轻松扩展其工作流程以满足不断增长的计算需求。

无论你是在处理大型数据集,还是需要在多个核心或机器上加速计算,Xorbits 都能提供所需的速度和灵活性。

现在就开始探索 Xorbits,将你的数据科学和机器学习项目提升到新的高度,冲!

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv9最新改进系列:融合空间信息关注机制(SimAM)于YOLOv9网络,在通道之间和空间位置之间建立更加准确的关联,助力YOLOv9有效涨点!!!

YOLOv9最新改进系列&#xff1a;融合空间信息关注机制&#xff08;SimAM&#xff09;于YOLOv9网络&#xff0c;在通道之间和空间位置之间建立更加准确的关联,助力YOLOv9有效涨点&#xff01;&#xff01;&#xff01; 在此之前&#xff01;先恭喜两位家人&#xff01;&#xf…

uniapp下拉选择组件

uniapp下拉选择组件 背景实现思路代码实现配置项使用尾巴 背景 最近遇到一个这样的需求&#xff0c;在输入框中输入关键字&#xff0c;通过接口查询到结果之后&#xff0c;以下拉框列表形式展现供用户选择。查询了下uni-app官网和项目中使用的uv-ui库&#xff0c;没找到符合条…

sentinel搭建及使用

1.添加依赖&#xff08;版本可依赖于父pom&#xff09; SentinalResource注解&#xff1a; 添加依赖&#xff1a; blockhandler: fallback:

以Azure为例的SSO

由于文章的篇幅有限&#xff0c;无法将全部的代码贴上来&#xff0c;如想要看完整案例&#xff0c;请在公众号文章中留言(其他平台很少看…毕竟最近印度同事的UI组件库搞得我好烦) 1.关于SSO 单点登录又称之为SSO,全称为 Single Sign On &#xff0c;一般在多个应用系统中&…

文献速递:多模态深度学习在医疗中的应用--多模态深度学习用于阿尔茨海默病痴呆评估

Title 题目 Multimodal deep learning for Alzheimer’s disease dementia assessment 多模态深度学习用于阿尔茨海默病痴呆评估 01 文献速递介绍 全球每年新发痴呆症病例近1000万例&#xff0c;其中阿尔茨海默病&#xff08;AD&#xff09;最为常见。需要新的措施来改善因…

【快捷部署】023_HBase(2.3.6)

&#x1f4e3;【快捷部署系列】023期信息 编号选型版本操作系统部署形式部署模式复检时间023HBase2.3.6Ubuntu 20.04tar包单机2024-05-07 注意&#xff1a;本脚本非全自动化脚本&#xff0c;有2次人工干预&#xff0c;第一次是确认内网IP&#xff0c;如正确直接回车即可&#…

【6大模型让你的沟通汇报更有条理】项目管理常见问题大揭秘 03

6大模型让你的沟通汇报更有条理 虽然头脑中构思众多&#xff0c;一开口却发现空白一片&#xff1f; 工作表现出色&#xff0c;汇报时却总是支支吾吾不知从何说起&#xff1f; 生性腼腆&#xff0c;却难以避免需要站在众人面前发言&#xff1f; 阿道掐指一算&#xff1a;你需…

头歌实践教学平台:CG1-v2.0-直线绘制

第4关&#xff1a;直线光栅化-任意斜率的Bresenham画线算法 一.任务描述 1.本关任务 (1)根据直线Bresenham算法补全line函数以绘制白色直线&#xff0c;其中直线斜率为任意情况。 (2)当直线方程恰好经过P(x,y)和T(x,y1)的中点M时&#xff0c;统一选取直线上方的T点为显示的像…

springboot引入security,测试接口报Unauthorized

1、报错截图 2、当前项目pom文件引入security <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-security</artifactId><version>2.2.2.RELEASE</version> </dependency> 3、解决…

基于springboot实现毕业设计系统项目【项目源码+论文说明】

基于springboot实现毕业设计系统演示 摘要 在如今社会上&#xff0c;关于信息上面的处理&#xff0c;没有任何一个企业或者个人会忽视&#xff0c;如何让信息急速传递&#xff0c;并且归档储存查询&#xff0c;采用之前的纸张记录模式已经不符合当前使用要求了。所以&#xff…

MySQL —— 约束

一、概念介绍 MySQL是数据管理的最后一层防线&#xff0c;因此在对数据进行各种操作的时候&#xff0c;我们尽可能的从技术的角度去对用户进行各种合理的约束&#xff0c;使得各种数据的操作尽可能的合理&#xff0c;这就是约束的概念&#xff0c;本篇将整理常见的基本约束&am…

论文解读--Resolving Target Ambiguities in Automotive Radar Using DDMA Techniques

使用DDMA技术解决汽车雷达中的目标模糊 摘要 多普勒分多址(DDMA)是一种慢时相位编码技术&#xff0c;可以使用传统相控阵硬件实现多输入多输出(MIMO)雷达。然而&#xff0c;众所周知&#xff0c;DDMA会在接收到的多普勒频谱中引起模糊。虽然非对称DDMA已经被提出来缓解目标模糊…

基于Vant UI的微信小程序开发(随时更新的写手)

基于Vant UI的微信小程序开发✨ &#xff08;一&#xff09;悬浮浮动1、效果图&#xff1a;只要无脑引用样式就可以了2、页面代码3、js代码4、样式代码 &#xff08;二&#xff09;底部跳转1、效果图&#xff1a;点击我要发布跳转到发布的页面2、js代码3、页面代码4、app.json代…

SQL注入(sqli-labs第一关)

sqli-labs第一关 方法一&#xff1a;手工注入 来到第一关&#xff0c;图上说我们需要一个数字的参数 于是我们先手工注入?id1 and 11 跟?id1 and 12发现页面没有报错 每张截图上面页面中有select查询语句&#xff0c;这是我在第一关的源码中加上了echo "$sql ";…

Linux下安装mysql8.0(以tar.xz包安装--编译安装)

前言&#xff1a;原文在我的博客网站中&#xff0c;持续更新数通、系统方面的知识&#xff0c;欢迎来访&#xff01; Linux下安装mysql8.0&#xff08;以tar.xz包安装--编译安装&#xff09;https://myweb.myskillstree.cn/126.html 目录 一、下载对应自己glic版本的MySQL …

VS远程调试

因为是做工厂应用的客制化项目&#xff0c;在客户现场出现异常&#xff0c;本地又很难复现&#xff0c;而且重启软件可能又自动恢复了&#xff0c;此时可以用VisualStudio自带的远程调试功能进行调试&#xff0c;不需要重启软件&#xff0c;能较好的定位问题。客户电脑上不需要…

上位机图像处理和嵌入式模块部署(树莓派4b和电源供给)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面&#xff0c;我们说过pc电脑和嵌入式设备&#xff0c;两者都可以实现相同的软件功能。但是和pc相比较&#xff0c;嵌入式设备不仅价格更便宜&a…

【Java】高效解决 非降序数组合并 两种方法

欢迎浏览高耳机的博客 希望我们彼此都有更好的收获 感谢三连支持&#xff01; oj&#xff1a;https://leetcode.cn/problems/merge-sorted-array/submissions/ 合并两个有序数组是个经典问题&#xff0c;它不仅在算法学习中频繁出现&#xff0c;也在实际开发中经常遇到。合并数…

「51媒体」邀请媒体参会报道和媒体发稿有啥不同

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体参会报道和媒体发稿是新闻报道的两种不同形式&#xff0c;它们的主要区别在于内容来源、报道方式和目的。 内容来源&#xff1a; 媒体参会报道&#xff1a;通常指的是记者或媒体代…

【配置】IT-Tools部署

github地址 docker运行如下&#xff0c;记得打开云服务器的9090端口 docker run -d --name it-tools --restart unless-stopped -p 9090:80 corentinth/it-tools:latestip:9090查看&#xff0c;很香大部分工具都有