Ray+Alluxio-->加速大规模模型训练中的数据加载

分享嘉宾:邱璐、唐春旭、王北南

当前, 人工智能(AI)和机器学习(ML)领域正在迅速发展,是否能有效处理训练过程中的大型数据集变得越来越关键。Ray已经成为这一领域的重要参与者,通过有效的数据流处理实现了大规模数据集训练。Ray将大型数据集分解成可管理的数据块,并将训练作业划分为较小的任务,无需将整个数据集存储在训练机器的本地。但是,这一创新方法也面临着一定的挑战。


虽然Ray有助于使用大型数据集进行训练,但数据加载仍然是严重的瓶颈。每个epoch都需要从远端存储重新加载整个数据集,这会严重降低GPU的利用率,并且增加存储数据的传输成本,因此,我们需要更优化的方法来管理训练过程中的数据,提升效率。


Ray主要使用内存来存储数据,其内存对象存储针对大型任务数据而设计。但是,这种方法在数据密集型任务上面临瓶颈,因为大型任务所需的数据必须在执行之前预加载到Ray的内存存储中。由于对象存储的大小通常无法容纳训练数据集,因此不适用于跨多个训练epoch缓存数据,这也突显了Ray框架对于更具扩展性的数据管理方案的需求。


Ray的重要优势之一是利用GPU进行训练,同时利用CPU进行数据加载和预处理。该方法可确保Ray集群内GPU、CPU和内存资源的有效利用, 但是这也会导致磁盘资源利用不足,并且缺乏有效管理。一个变革性的想法应运而生:搭建高性能数据访问层,通过智能地跨机器管理低效磁盘资源来缓存和访问训练数据集,这样可以显著提高整体训练性能,并降低访问远端存储的频次。


Alluxio:智能缓存加速训练

Alluxio通过巧妙高效地利用GPU和相邻CPU机器上未使用的磁盘容量进行分布式缓存,加速大规模数据集的训练。这一创新方法能显著提高数据加载性能,对于使用大规模数据集的训练至关重要,同时还降低了对远端存储的依赖并减少相关的数据传输成本。

集成Alluxio后提升了Ray的数据管理能力,带来诸多益处:

可扩展性

  • 数据访问和缓存可扩展性强

加快数据访问速度

  • 可利用高性能磁盘缓存数据

  • 针对Parquet等面向列存储文件格式的高并发随机读进行了优化

  • 零拷贝

可靠性和可用性

  • 无单点故障

  • 在故障期间具有强大的远端存储访问能力

弹性资源管理

  • 根据工作负载的需求动态分配和释放缓存资源


Ray和Alluxio集成内部机制

Ray能有效地编排机器学习工作流,与数据加载、预处理和训练框架无缝集成。Alluxio作为高性能数据访问层,尤其是在需要重复访问远端存储数据的情况下,可大幅优化AI/ML训练和推理任务。


Ray利用PyArrow加载数据并将数据格式转换为Arrow格式,然后由Ray工作流在下一阶段使用。PyArrow将存储连接问题委托(delegate)给fsspec框架,Alluxio作为Ray和底层存储系统(如S3、Azure Blob存储和Hugging Face)的中间缓存层。

在将Alluxio用作Ray和S3之间的缓存层时,只需导入Alluxiofs,初始化Alluxio文件系统,然后将Ray文件系统更改为Alluxio。


# Import fsspec & alluxio fsspec implementationimport fsspecfrom alluxiofs import AlluxioFileSystem
fsspec.register_implementation("alluxio", AlluxioFileSystem)
# Create Alluxio filesystem with S3 as the underlying storage systemalluxio = fsspec.filesystem("alluxio", target_protocol=”s3”, etcd_host=args.etcd_host)
# Ray read data from Alluxio using S3 URLds = ray.data.read_images("s3://datasets/imagenet-full/train", filesystem=alluxio)


基准测试和结果

我们使用Ray Data的Ray Data nightly test来对比Alluxio 和同一区域S3在不同训练epoch的数据加载性能。基准测试结果表明,通过将Alluxio与Ray集成可显著降低存储成本并大幅提高吞吐量。

提升数据访问性能:我们观察到当Ray的对象存储不受内存压力影响时,Alluxio的吞吐量是同一区域S3的2倍。

在内存压力下优势更明显:值得注意的是,当Ray 的对象存储面临内存压力时,Alluxio的性能优势显著增加,其吞吐量比S3高出5倍。


结论

对于Ray任务而言,将未利用的磁盘资源作为分布式缓存的存储有着巨大的战略意义。该方法显著提高了数据加载性能,在跨多个epoch使用相同数据集进行训练或调优的情况下尤其有用。此外,当Ray 面临内存压力时,它能为优化和简化这些场景下的数据管理流程提供实用的解决方案。


【添加小助手,获取更多资料】


【近期热门】


【宝典集市】

本文分享自微信公众号 - Alluxio(Alluxio_China)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

《庆余年2》盗版资源被上传到 npm,导致 npmmirror 不得已暂停 unpkg 服务 周鸿祎:留给谷歌的时间不多了,建议把所有的产品都开源 请教各位,此处的 time.sleep(6) 起到了什么作用? Linus “吃狗粮”最积极! 新款 iPad Pro 使用了 12GB 内存颗粒,但却声称是 8GB 内存 人民网评办公软件套娃式收费:积极解“套”,才有未来 Flutter 3.22 和 Dart 3.4 发布 Vue3 开发新范式,不用`ref/reactive`,不用`ref.value` MySQL 8.4 LTS 中文手册发布:助力您掌握数据库管理新境界 通义千问 GPT-4 级主力模型降价 97%,1 块钱 200 万 tokens
{{o.name}}
{{m.name}}

猜你喜欢

转载自my.oschina.net/u/5904778/blog/11051009