从存储到 AI 洞察:使用 MinIO 和 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框架,如TensorFlow和PyTorch。通过这些集成,您可以将使用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频道与我们联系。