65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Modin 扩展你的 Pandas 工作流

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2022 年 4 月 27 日

CPOL

4分钟阅读

viewsIcon

18121

本文介绍了 Intel Distribution of Modin,它是 Intel oneAPI AI Analytics Toolkit (AI Kit) 的一部分,现已可从 Anaconda 的“defaults”频道(也可从 conda-forge 获取)下载。

人工智能和数据科学正在快速发展,这带来了越来越多 ever-increasing 的数据,使我们能够获得日益复杂的研究思路和解决方案。但另一方面,我们看到这些进步正将重心从价值提取转移到系统工程。此外,硬件能力的增长速度可能比人们学习如何正确利用它们的速度更快。

这一趋势要么需要增设一个新职位,即所谓的“数据工程师”,要么需要数据科学家处理与基础设施相关的问题,而不是专注于数据科学的核心——生成见解。造成这种情况的主要原因之一是,对于并非天生就是软件工程师的数据科学家来说,缺乏优化的数据科学和机器学习基础设施——这些可以被视为两种不同的、有时重叠的技能集。

我们知道,数据科学家是习惯性生物。他们喜欢他们熟悉的 Python 数据栈中的工具,例如 pandas、Scikit-learn、NumPy、PyTorch 等。然而,这些工具对于并行处理或海量数据来说通常并不适用。

Anaconda® 和 Intel® 正在合作解决数据科学家最关键的核心问题:如何使他们熟悉的软件栈和 API 变得可扩展且更快速?本文介绍了 Intel Distribution of Modin,它是 Intel oneAPI AI Analytics Toolkit (AI Kit) 的一部分,现已可从 Anaconda 的“defaults”频道(也可从 conda-forge 获取)下载。

为什么 Pandas 不够用

尽管 pandas 是行业标准,但在许多情况下,它本质上是单线程的,这使得它处理大型数据集时速度很慢。对于那些无法完全放入内存的数据集,它甚至可能无法正常工作。有其他方法可以解决这个问题(例如 Dask、pySpark、vaex.io 等),但没有一种提供与 pandas 完全兼容的接口——用户需要相应地修改他们的工作负载。

Modin 能为终端用户提供什么?它试图坚持“工具应该为数据科学家服务,而不是反之”的理念。它提供了一个简单的、即插即用的 pandas 替代品——您只需将“import pandas as pd”语句更改为“import modin.pandas as pd”,即可在许多用例中获得更好的可扩展性。

Modin 提供什么

通过消除“将 pandas 工作流重写为 X 框架”的要求,可以加速数据洞察的开发周期(图 1)。

图 1. 在持续开发周期中使用 Modin

Modin 通过网格分割 DataFrame 来更好地利用硬件,从而允许某些操作以并行分布式的方式运行,无论是逐单元、逐列还是逐行(图 2)。对于某些操作,可以利用与 OmniSci 引擎的实验性集成来更好地利用多核的处理能力。

 

图 2. 对比 pandas 和 Modin DataFrame

通过从 AI Kit 或 Anaconda defaults(或 conda-forge)频道安装 Modin,还可以获得一个实验性的、速度更快的 Modin OmniSci 后端。只需进行一些简单的代码更改即可激活。

import modin.config as cfg
cfg.Engine.put('native')
cfg.Backend.put('omnisci')
import modin.experimental.pandas as pd

看数字!

言归正传,让我们来看看基准测试。有关不同 Modin 引擎的详细比较,请参阅 社区测量的微基准测试,该测试会跟踪 Modin 存储库提交过程中不同数据科学操作的性能。

为了演示这种方法的可扩展性,让我们使用运行在基于 Intel Xeon® 8368 Platinum 的服务器上的一个更大、更端到端的(请参阅下面的完整硬件信息)工作负载,通过 Modin 使用 OmniSci(图 3-5)。

图 3. 运行纽约出租车工作负载:2 亿条记录,79.2 GB 输入数据集

图 4. 运行 人口普查 工作负载:2100 万条记录,2.1 GB 输入数据集

图 5. 运行 PlastiCC 工作负载:4.6 亿条记录,20 GB 输入数据集

硬件信息:两块 Intel Xeon 8368 Platinum 第三代处理器,基于 C620 主板,总 DDR4 内存 512GB(16 插槽/32GB/3200),微码 0xd0002a0,超线程开启,睿频开启,CentOS 7.9.2009,3.10.0-1160.36.2.el7.x86_64,一块 Intel 960 GB SSD 操作系统驱动器,三块 Intel 1.9 TB SSD 数据驱动器。软件信息:Python 3.8.10,Pandas 1.3.2,Modin 0.10.2,OmnisciDB 5.7.0,Docker 20.10.8,Intel 于 2021/10/05 测试。

等等,还有更多

如果单节点运行不足以处理您的数据,Modin 支持在 Ray 集群Dask 集群上进行分布式运行。您还可以使用实验性的 XGBoost 集成,它将自动利用基于 Ray 的集群为您服务,无需任何特殊设置!

参考文献

本文最初发表于 Anaconda.com,经许可转载。

© . All rights reserved.