算法金 | 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 = 0idx = -1x = str(x)for match in re.finditer(r'(?<=[.:;])\s', x):count += 1if count == 4:idx = match.start() if match.start() != match.end() else match.start() + 1breakreturn 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 !

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

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Go】Go Swagger 生成和转 openapi 3.0.3

本文档主要描述在 gin 框架下用 gin-swagger 生成 swagger.json 的内容&#xff0c;中间猜的坑。以及&#xff0c;如何把 swagger 2.0 转成 openapi 3.0.3 下面操作均在项目根目录下执行 生成 swagger 2.0 import swagger go get -u github.com/swaggo/gin-swagger go get …

数据中台:企业数字化转型的桥梁_光点科技

在数字化日益深入企业核心运营的今天&#xff0c;数据中台作为一个关键的信息化架构&#xff0c;正逐渐崭露头角&#xff0c;成为连接企业各部门、优化数据管理和推动业务创新的重要桥梁。 一、数据中台&#xff1a;连接与整合的桥梁 数据中台的核心作用在于连接与整合。传统的…

apk反编译修改教程系列-----让你反编译apk中 事半功倍的辅助编译软件列举【十六】

在反编译apk中。排除我们常用的编译软件外。还有很多辅助编译软件。例如用来查看代码 转换语言 加解密算法 文件监听 弹窗定位 activity记录 签名验证 dex文件混淆 签校测试 apk伪加密 apk对齐 拆分dex 合并dex 等等类似的功能 通过此课程了解; 01----反编译软件中列…

【RAG 博客】RAG 应用中的 Routing

Blog&#xff1a;Routing in RAG-Driven Applications ⭐⭐⭐⭐ 根据用户的查询意图&#xff0c;在 RAG 程序内部使用 “Routing the control flow” 可以帮助我们构建更实用强大的 RAG 程序。路由模块的关键实现就是一个 Router&#xff0c;它根据 user query 的查询意图&…

【Linux】环境变量是什么?如何配置?详解

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

计算机网络实验1:交换机基本配置管理

实验目的和要求 安装Packer Tracer&#xff0c;了解Packer Tracer的基本操作掌握交换机基本命令集实验项目内容 认识Packet Tracer软件 交换机的基本配置与管理 交换机的端口配置与管理 交换机的端口聚合配置 交换机划分Vlan配置 实验环境 硬件&#xff1a;PC机&#x…

PCB检查

文章目录 1、打开DRC2、database check3、检查DRC4、检查多余的线5、其他需要注意的点a.检查差分线、等长线是否已调好b.注意检查晶振、电感等元件上/下方是否其他线经过&#xff08;一般不允许线经过&#xff09;c.打开place_bound_top/bottom 检查元件是否超过这个允许范围d.…

用HAL库改写江科大的stm32入门例子8-1 DMA数据转运

实验1-实验目的&#xff1a;通过DMA把buffer的数据搬运到buffer2当中。 //declare a buffer to store the data uint32_t buffer[3] {1,2,3};//declare a buffer to store the data uint32_t buffer2[3] {0,0,0}; DMA&#xff1a;是个搬运数据的小助手。 相关设置&#xff1…

mac第三方软件怎么删除 MacBook卸载第三方应用程序 mac第三方恶意软件删除不了怎么办呢

Mac是一款优秀的个人电脑&#xff0c;它拥有流畅的操作系统、强大的性能和丰富的应用程序。但是&#xff0c;随着使用时间的增加&#xff0c;你可能会发现你的Mac上安装了一些不需要或者不喜欢的第三方软件&#xff0c;这些软件可能会占用你的空间、影响你的速度或者带来安全风…

1905. 统计子岛屿

1905. 统计子岛屿 java&#xff1a;DFS class Solution {Boolean flag true;private void dfs(int x, int y, int m, int n, int[][] grid1, int[][] grid2) {if (x < 0 || x > m || y < 0 || y > n || grid2[x][y] ! 1) { // 包含关系&#xff1a;遍历最小范围…

Android 面试之Kotlin 协程上下文和异常处理

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 上下文是什么 CoroutineContext是一组用于定义协程行为的元素&#xff0c;包括以下几部分&#xff1a; Job&#xff1a;控制协程的生命周期Co…

没有公网ip,如何实现外网访问内网?

目前拨号上网是最广泛的上网方式&#xff0c;这种方式优点是价格便宜&#xff0c;缺点是没有固定公网ip&#xff0c;每次重新您拨号ip地址都会变。如果有一台服务器&#xff0c;需要实现外网访问&#xff0c;在没有固定公网ip的环境下&#xff0c;该如何实现呢&#xff1f;使用…

进程间通信(二)

共享内存 当进程A和进程B有一块共享的内存空间时&#xff0c;这两个进程之间的数据交互就会变的很简单&#xff0c;只需要像读取自己内存空间中的元素一样去读取数据即可。实现共享内存进行数据交互的一般步骤&#xff1a; 创建/打开共享内存内存映射数据交换断开与共享内存的…

驾驭多云环境,加速AI创新丨Animbus Cloud 8.3.0 算力调度平台升级发布

大模型开启全球新一轮AI浪潮&#xff0c;伴随算力规模的爆发增长以及计算技术的多元创新&#xff0c;需要更稳定、高效、敏捷的异构计算基础设施&#xff0c;才能充分发挥对算力能力的重要支撑。 作为开放智能云边架构引领者&#xff0c;九州未来凭借多年的技术积累、实践沉淀…

巨坑啊! before-upload返回false 会执行on-remove

通过对on-remove对应参数的打印&#xff0c;发现回调中的file参数有个status&#xff0c;若是是在before-upload中就被过滤了&#xff0c;就是ready&#xff0c;若是已经上传成功了去点击删除&#xff0c;status是success&#xff0c;就他了。 onRemove(file,fileList){if(file…

ESP32重要库示例详解(一):EEPROM之Preferences库

1. 了解EEPROM 在嵌入式系统开发中&#xff0c;断电后晚能存储少量数据是常见需求。EEPROM&#xff08;Electrically Erasable Programmable Read-Only Memory&#xff09;是一种非易失性存储器&#xff0c;即使断电数据也不会丢失。ESP32的EEPROM模拟功能利用闪存空间&#x…

Consul踢除失效服务和移除Node节点

1.consul描述 在Consul日常维护中,由于Consul不会自动将不可用的服务实例注销掉和移除node节点. 在实际使用过程中&#xff0c;可能因为一些操作失误、环境变更等原因让Consul中存在一些无效实例信息&#xff0c;而这些实例在Consul中会长期存在&#xff0c;并处于断开状态。…

优化资源利用,用C++内存池点亮编程之路

内存池介绍(Memory Pool): 它是一种内存分配方式&#xff0c;通过预先分配和复用内存块。 在真正使用内存之前&#xff0c;先申请一大块内存备用。当有新的内存需求时&#xff0c;就从内存池中分出一部分内存块&#xff0c; 若内存块不够再继续申请新的内存。如果我们不需要…

进程间通信(一)

IPC 在之前我们也有涉及到进程间通信的知识点&#xff0c;比如fork或exec或父进程读取子进程的退出码等&#xff0c;但是这种通信方式很有限&#xff0c;今天来学习进程间通信的其他技术——IPC&#xff08;InterProcess Communication&#xff09;。 IPC的方式通常有管道&…

JS代码随想录(一):数组

代码随想录 一、数组理论基础 二、LeetCode 704. 二分查找 三、LeetCode 27. 移除元素 四、LeetCode 977.有序数组的平方 五、LeetCode 209.长度最小的子数组 六、LeetCode 59.螺旋矩阵II 七、数组总结 一、数组理论基础 数组是存放在连续内存空间上的相同类型数据的集合。 数组…