利用 S3 Connector for Pytorch 在训练代码中实现 S3 的流式读取

利用 S3 Connector for Pytorch 在训练代码中实现 S3 的流式读取

💡 原文中文,约6100字,阅读约需15分钟。
📝

内容提要

本文介绍了使用Amazon S3 Connector for PyTorch从Amazon S3中流式读取数据的方法,简化训练代码,提高GPU利用率,降低存储成本。S3 Connector for PyTorch为PyTorch模型训练提供高效的数据加载接口。根据训练规模、数据集大小和代码可移植性,可以选择SageMaker FastFileMode、Mountpoint for S3或S3 Connector进行存储。

🔎

延伸解读

流式读取如何缓解GPU等待

文章指出,传统先下载S3数据再训练的方式会导致GPU等待下载完成,且每次任务重复下载,随机采样还需完整数据集。S3 Connector for PyTorch通过流式读取,让训练代码直接按需加载S3对象,避免了本地落盘和重复下载,从而减少GPU空闲时间,提升利用率。

S3 Express One Zone的性能优势

在10000张280KB图片的读取测试中,使用S3 Connector for PyTorch,S3 Express One Zone总耗时115秒,而S3 Standard为399秒,前者性能约为后者的3倍以上。这表明S3 Connector能借助DataLoader多worker轻松利用高性能存储实现高并发、高带宽访问,适合对数据加载速度敏感的训练场景。

随机采样与检查点支持

S3 Connector for PyTorch支持地图样式和可迭代样式数据集,分别对应随机和顺序访问。在BLIP2模型训练示例中,通过重写Dataset类并建立文件名到索引的映射,实现了随机采样而无需下载数据集。此外,它还提供检查点接口,可直接保存和加载检查点到S3,省去本地存储和自定义上传代码。

存储方案选择建议

文章建议根据训练规模、数据集大小和代码可移植性选择存储方案:FSx for Lustre适合分布式大规模训练(TB至PB级);S3适合小规模训练且成本最优,推荐流式读取;SageMaker用户可选FastFileMode;EC2或EKS用户可选Mountpoint for S3;若追求代码高可移植性和最小化底层配置,则S3 Connector for PyTorch更合适。

❓

Q&A

S3 Connector for PyTorch 是什么?它主要解决什么问题?

S3 Connector for PyTorch 是亚马逊云科技开源的一个工具,允许在 PyTorch 训练代码中直接流式读取 Amazon S3 中的文件。它解决了传统先下载数据再训练带来的 GPU 等待、重复下载和存储成本高等问题。

如何使用 S3 Connector for PyTorch 进行数据流式读取?

通过引入 s3Torchconnector 包,使用 S3MapDataset.from_prefix 基于 S3 URI 构建数据集,然后结合 PyTorch 的 DataLoader 进行批量加载和训练。示例代码展示了直接流式读取,无需下载数据到本地。

S3 Connector for PyTorch 在性能上有什么优势?

它通过底层调用 Amazon Common Runtime (CRT) 优化 S3 读取请求,可实现高达 40% 的训练加载提升。测试中,S3 Express One Zone 的读取速度约为 S3 Standard 的 3 倍以上,并能通过多 worker 实现高并发、高带宽访问。

在模型训练中,如何利用 S3 Connector 实现数据随机采样?

需要重载 Dataset 类,通过 S3 List 操作获取文件列表并建立文件名到索引的映射,然后在 __getitem__ 中根据索引从 S3MapDataset 加载对应数据,从而实现随机采样而无需下载完整数据集。

S3 Connector for PyTorch 有哪些主要特性?

主要特性包括:流式数据加载,无需提前下载;源代码开源,简单易用,对齐 PyTorch Dataset 范式;训练脚本可移植性强,不依赖底层环境;不依赖具体训练平台,可在 SageMaker、EKS 或 EC2 上使用;开发人员无需关心存储底层细节。

在模型训练中,如何选择合适的存储方案?

根据场景选择:FSx for Lustre 适合大规模分布式训练(TB/PB 级);S3 适合小规模训练、成本敏感场景,推荐流式读取;SageMaker 上建议用 FastFileMode;EC2/EKS 上建议用 Mountpoint for S3;若追求代码高可移植性和最小化存储配置,建议用 S3 Connector for PyTorch。

🏷️

标签

➡️

继续阅读