从存储到 AI 洞察:使用 MinIO 和 Polars 简化数据管道

From Storage to AI Insights: Streamlining Data Pipelines with MinIO and Polars

将MinIO高性能、可扩展的企业级对象存储与快速、内存中的数据处理功能相结合Polars,一个闪电般快速的DataFrame库,可以显著提高数据管道性能。这在AI工作流中尤其如此,在AI工作流中,预处理大型数据集和执行特征选择是关键步骤。在这篇文章中,我们将探讨如何将MinIO与Polars集成,以简化您的数据工作流并优化性能,尤其是在复杂分析工作负载的情况下。

为什么选择Polars进行AI数据预处理?

Polars是一个专为速度设计的DataFrame库。与Pandas等传统的基于Python的库不同,Polars是用Rust构建的,使其能够高效地处理大型数据集。Polars采用了一种急切执行模型,通过立即执行操作而不是等待延迟计算来提供快速结果。这使得Polars特别适用于实时分析和时间敏感的数据处理。

Polars的关键特性

  • 速度:使用Rust构建,Polars速度极快,可以处理远超Pandas所能管理的大型数据集。
  • 内存效率:使用列式内存布局,这使得操作更快并减少内存消耗。
  • 延迟执行:Polars具有延迟API,可通过重新排序和组合操作来优化查询计划,从而获得更好的性能。
  • 多线程:Polars利用多线程进行并行计算,使其能够比单线程解决方案更快地处理数据。

MinIO的关键特性

  • 性能:作为市场上最快的对象存储,MinIO的高性能完美地补充了Polars的速度,能够检索和存储海量数据集。
  • 可扩展性:MinIO的分布式架构可以水平扩展,与您不断增长的AI/ML工作负载保持同步,而Polars则高效地处理数据。
  • 数据持久性和冗余性:MinIO的擦除编码对象锁定以现代、真正高效的方式保护您的数据。
  • 与AI/ML框架集成:通过MinIO对S3 API的强大兼容性和强大的SDK,MinIO支持各种AI/ML框架,如TensorFlowPyTorch。通过这些集成,您可以将使用Polars预处理后的数据文件直接检索到训练和推理中,而不会出现任何问题。

使用GPU加速Polars工作流(可选)

对于那些寻求更高性能的人来说,Polars提供了一个由RAPIDS cuDF驱动的GPU引擎的测试版本,在NVIDIA GPU上提供高达13倍的处理速度。当处理数亿行数据时,这尤其有用,即使是微小的性能提升也可以显著减少处理时间。

要访问此GPU加速功能,您只需安装支持GPU的Polars并在收集数据时指定GPU引擎即可。

pip install polars[gpu] --extra-index-url=https://pypi.nvidia.com

其他集成信息将保持不变。

将MinIO与Polars集成

让我们探讨如何将MinIO集成到一个紧密结合的数据处理管道中。无论您是处理大规模时间序列数据、日志文件还是AI/ML模型训练数据集,MinIO都提供存储基础,而Polars则快速高效地处理这些数据。

步骤1:确保已安装Docker

安装Docker(如果尚未安装):按照官方的Docker安装指南进行操作。

步骤2:在无根Docker容器中部署MinIO

运行MinIO容器:接下来,在无根模式下启动MinIO容器。您需要指定数据目录以及访问密钥和密钥。根据需要调整端口和目录。

mkdir -p ${HOME}/minio/data
docker run \
   -p 9000:9000 \
   -p 9001:9001 \
   --user $(id -u):$(id -g) \
   --name minio1 \
   -e "MINIO_ROOT_USER=ROOTUSER" \
   -e "MINIO_ROOT_PASSWORD=CHANGEME123" \
   -v ${HOME}/minio/data:/data \
   quay.io/minio/minio server /data --console-address ":9001"
  • -p 9000:9000:在端口9000上公开MinIO的API。
  • -p 9001:9001:在端口9001上公开Web控制台。
  • -v ~/minio/data:/data:将主机上的~/minio/data目录挂载到存储数据的位置。
  • MINIO_ROOT_USER和MINIO_ROOT_PASSWORD用于身份验证。

步骤3:访问MinIO

容器启动后,打开Web浏览器并访问:http://localhost:9001

使用MINIO_ROOT_USER和MINIO_ROOT_PASSWORD凭据登录。

步骤4:创建存储桶并上传Parquet文件

根据以下说明在MinIO中创建存储桶: 

     
       

接下来,将Parquet文件添加到您的存储桶中。

步骤2:在Polars中访问MinIO中的数据

要将MinIO中的数据读取到Polars DataFrame中,您可以使用MinIO的与S3兼容的API以及Python中的requests库。使用您的MinIO用户名(访问密钥)和密码(密钥)进行身份验证。

假设您的数据存储在Parquet文件中,您首先需要pip install MinIO和Polars。

pip install minio
pip install polars

以下是将数据直接读取到Polars中的方法

import polars as pl
from minio import Minio
import io

# Configure MinIO S3 access
minio_url = "localhost:9000" 
access_key = "ROOTUSER"
secret_key = "CHANGEME123"

# Initialize MinIO client
client = Minio(
    minio_url,
    access_key=access_key,
    secret_key=secret_key,
    secure=False  # Set to True if you're using HTTPS
)

# Retrieve the parquet file from the bucket
bucket_name = "ducknest"
object_name = "wild_animals.parquet"

# Download the object as a stream
response = client.get_object(bucket_name, object_name)

# Read the file content into a Polars DataFrame
data = io.BytesIO(response.read())
df = pl.read_parquet(data)

# Perform your data analysis
print(df.describe())

步骤3:使用Polars处理大型数据集

在处理大型数据集时,Polars真正发挥了其优势。其内存效率和多线程使其能够比Pandas等传统库更快地处理复杂的运算,例如过滤、分组和聚合。MinIO通过提供完美的性能存储层来处理这些海量数据集,从而发挥作用。无论您的数据集规模有多大,数据检索都可以保持快速高效。这是因为MinIO的速度仅受底层硬件的限制。Polars和MinIO协同工作,形成了强大的组合,实现了流畅的数据处理并最大限度地减少了AI/ML管道中的瓶颈。

例如,以下是如何在Polars DataFrame上执行聚合操作

# Group by the correct column names (as per the schema)
result = df.group_by("category").agg(
    [
        pl.col("value").count().alias("total_value"),  # Count the number of animals in each habitat
        pl.col("quantity").mean().alias("avg_quantity")  # Calculate the average species value (after casting to numeric)
    ]
)

# Print the result
print(result)

准备部署时

当您准备好部署时,MinIO的可扩展性大放异彩,轻松管理海量数据集,而Polars则加速数据处理,确保流畅的端到端性能。与传统的块存储解决方案相比,MinIO的企业级对象存储(EOS)不仅具有成本效益,而且还极大地提高了性能。

对于希望获得更多控制和洞察力的组织,MinIO企业级控制台是一个强大的工具。它提供了一个统一的“单一玻璃窗格”,用于管理您所有MinIO部署,无论是在本地、云端还是边缘。MinIO企业级对象存储的另一个突出特性是企业级目录,它支持以EB级规模对对象元数据进行实时搜索和查询。使用GraphQL接口,管理员可以轻松地执行合规性检查、运营审计和管理空间利用率。这些只是为MinIO的大规模部署专门构建的完整企业工具套件中的两个。当您准备好一起部署MinIO和Polars时,您将拥有所需的一切。

结论

通过将MinIO企业级对象存储与Polars集成,您可以构建高性能、可扩展的数据管道,轻松处理海量数据集。无论您是在处理实时分析、大规模AI/ML工作负载,还是只是处理大型数据湖,这种组合都能提供速度和效率。随着对更快数据处理和可扩展存储的需求不断增长,利用MinIO和Polars等技术对于现代数据基础设施将变得越来越重要。如果您在集成过程中有任何疑问,请通过hello@min.io或我们的Slack频道与我们联系。