千卡利用率超98%,详解JuiceFS在权威AI测试中的实现策略

2023 年 9 月,AI 领域的权威基准评测 MLPerf 推出了 Storage Benchmark。该基准测试通过模拟机器学习 I/O 负载的方法,在不需要 GPU 的情况下就能进行大规模的性能压测,用以评估存储系统的在 AI 模型训练场景的适用性。

目前支持两种模型训练:BERT (自然语言模型) 和 Unet3D(3D医学成像)。虽然目前不支持大语言模型如 GPT、LLaMA,但 BERT 与大语言模型同为多层 transformer 结构,大语言模型的用户仍可从 BERT 训练结果获得一定的参考。

高性能存储产品厂商 DDN、Nutanix、Weka 和 Argonne National Laboratory(简称 ANL)发布了 MLPerf 的测试结果作为行业参考,我们也使用 JuiceFS 企业版进行了测试,让用户了解它在模型训练中的表现。

测试中最直观的指标是 GPU 利用率,大于 90% 为测试通过,表示存储系统能够满足训练业务的性能需求。JuiceFS 在 Unet3D 的 500 卡规模测试中,GPU 利用率保持在 97% 以上;在 BERT 的1000 卡规模测试中,GPU 利用率保持在 98% 以上。

01 测试准备

JuiceFS 企业版是基于对象存储的并行文件系统,相比社区版它提供了更强的元数据引擎和缓存管理能力,它的架构图如下:

JuiceFS 企业版架构图

我们在华为云上搭建了一套企业版 JuiceFS 文件系统,使用华为云 OBS 作为数据持久层,部署了 3 节点的元数据集群和多节点的分布式缓存集群,硬件规格如下:

  • 元数据节点:m7.2xlarge.8 | 8vCPUs | 64GiB

  • 对象存储:OBS,带宽上限 300 Gb/s

  • 客户端节点:ir7.16xlarge.4 | 64vCPUs | 256GiB | Local SSD 2*1,600GiB | 网卡带宽 25 Gbps (以太网)

准备好文件系统后,我们使用 mlperf 的脚本生成后续模拟训练所需要的数据集,所有的测试中 batch size 和 steps 均采用默认设置。目前仅支持模拟 NVIDIA v100 GPU,后文中提到的 GPU 均是模拟 v100。

02 BERT 模型

MLPerf 为 BERT 模型生成数据集时,会按照每个数据集文件包含 313,532 个样本的规则来生成,每个样本大小为 2.5 KB。训练过程中每个模拟 v100 GPU 每秒能处理 50 个样本,即每个 GPU 的 IO 吞吐需求为 125 KB/s,绝大部分存储系统都能轻松满足它的模型训练需要,JuiceFS 也是一样的,能够满足 1000 卡规模的模型训练需要。

我们汇集了 MLPerf 的主要公开结果,包括 ANL、DDN、Weka 的数据,并新增了本次测试中 JuiceFS 的结果。

  • JuiceFS 在 1000 GPU 规模下保持 98% 以上 GPU 利用率

  • ANL 的结果依然非常优秀,考虑到 ANL 测试的网络条件是高带宽低延迟的 Slingshot 网络,能有这样的成绩也是意料之中的。

03 Unet3D 模型

Unet3D 模型的训练对带宽的需求高于 BERT 模型。我们首先在没有任何缓存(包括分布式缓存和单机缓存)的条件下测试了训练 Unet3D 模型的情况。在这种设置下,JuiceFS客户端将直接从对象存储中读取数据。

无缓存测试

如下图所示,随着节点数的增加,GPU 利用率(图中的绿色线条)会缓慢下降。当 GPU 增至 98 卡时,它出现了一个明显的拐点,随后 GPU 利用率随节点数的增加而急剧降低。

下图是根据 OBS 监控数据和 MLPerf 的结果绘制出来的曲线图,可以看到 OBS 带宽在 98 卡及更大规模的训练中已经不再增加,成为性能瓶颈。

因此,在没有缓存的情况下,OBS 提供的 300Gb/s 带宽在 98 卡同时训练时就已经满载。根据 MLPerf 90% 的测试通过标准来看,可以满足最多 110 卡同时训练 Unet3D 模型。

在对大型数据集进行多机多卡训练时,单机缓存由于其空间限制仅能缓存数据集的一小部分;同时,由于训练过程中数据访问的随机性,缓存命中率较低。因此,这种情况下,单机缓存对于提升整体 I/O 性能的贡献有限(如上图绿线,能看到单机的内核缓存对读带宽有提升作用,虽然内核缓存空间多达 200GB ,但效果有限),因此我们没有进行单机缓存的针对性测试。

开启分布式缓存

相比本地缓存,分布式缓存可以提供更大的缓存容量以支撑更大的训练集和更高的缓存命中率,从而提升整个 JuiceFS 集群的读带宽。

JuiceFS 的分布式缓存架构如下图所示,机器学习训练集群和 JuiceFS 的缓存集群可以是两批独立的机器组成的集群,它们通过高速网络连接。这两个集群都挂载了JuiceFS 客户端。训练任务通过 JuiceFS 在本地的挂载点访问数据。当本地挂载点需要数据时,它会首先从缓存集群请求数据;如果缓存集群中缺失所需数据,系统则会从对象存储中获取数据并更新到缓存中。如果训练集群中的 GPU 节点自身也配置了充足的 SSD 存储,那么它们可以直接用作 JuiceFS 的缓存盘并组成缓存集群,无需部署独立的缓存集群。这种配置实际上是将训练集群和缓存集群的功能合并在一起。在本次测试中,我们采用了这种混合部署方式。

JuiceFS 分布式缓存架构

分布式缓存及其容量对 GPU 利用率的影响

之前的测试表明,未开启缓存时,110 卡时的 GPU 利用率不足 90%。为了直观展示分布式缓存对性能的影响,我们对 JuiceFS 进行了进一步的测试。我们选择 180 卡 GPU 规模的集群作为测试对象进行新一轮的测试,以评估 JuiceFS 的缓存命中率时跟 GPU 利用率关系。

下图中,横坐标表示缓存空间与数据集大小的比例,纵坐标表示缓存命中率和 GPU 使用率。当完全没有缓存时,GPU 的使用率只有 49%。随着缓存空间比例的增加,缓存命中率(蓝色线条)逐渐提高,进而带动 GPU 利用率(绿色线条)上升,当缓存命中率到 85% 时, GPU 利用率到了 93.1%, 已经能够满足 180 卡的训练使用。当缓存命中率达到 100% 时,GPU 利用率达到最高的 98.8%,几乎满载运行。

为了验证 JuiceFS 的缓存系统的扩展能力,我们按照数据集的大小调整了缓存集群的容量,确保了缓存命中率达到 100%。这样,所有训练所需数据均可直接从缓存中读取,而不必从速度较慢的对象存储中读取。在这种配置下,我们测试了最多约 500 卡规模的训练任务,随着测试规模的增大,GPU 利用率的变化如下图所示

从图中红色线条可以看到,开启分布式缓存的 JuiceFS 突破了带宽瓶颈的限制, GPU 利用率会随着集群规模变大仅缓慢线性下降。按照上图的变化趋势估计,在当期的网络配置 (25Gbps) 下,JuiceFS 可以支撑约 1500 卡训练 Unet3D 时保持 GPU 利用率在 90% 以上。

对比 Unet3D 的测试结果:JuiceFS/ANL/DDN/Weka

DDN、Weka 公布的数据中最大规模的模拟 GPU 总数低于 200。

ANL 在 512 卡的规模下依然没有明显衰减,GPU 利用率能够达到 99.5%。ANL 的读写带宽为 650 GBps,理论上最多能支撑 1500 卡训练 Unet3D, 它的出色表现与充足的硬件配置密切相关,具体内容可以前往 ANL 的文章了解。

JuiceFS 的 GPU 利用率随着集群规模变大,缓慢线性下降,在 500 卡规模时保持 97% 以上。JuiceFS 遇到的性能瓶颈主要来自于缓存节点的网络带宽。由于缓存节点的机型数量和网络带宽有限,本次测试达到的最大规模为 483 卡。在这种规模下,JuiceFS 集群的聚合带宽为 1.7 Tb,而 ANL 集群的带宽是 5.2 Tb 。

04 小结

  • 在 BERT 测试中,JuiceFS 在 1000 GPU 规模的训练中能保持 98% 以上 GPU 利用率;

  • 在 Unet3D 测试中,随着集群规模变大,JuiceFS 在接近 500 GPU 训练中保持 97% 以上 GPU 利用率。若云服务商可以提供更高的网络带宽或更多的机器,这一规模还可进一步提高;

  • 分布式缓存的优势在于极强的扩展性,可以利用更多节点上的 SSD 存储聚合更大的缓存空间,提高整个存储系统的读带宽;当然它也会带来一些 CPU 开销,但在 AI 训练场景中,使用闲置的 CPU 资源提升系统带宽是值得,甚至必要的。

  • 在云上进行机器学习训练时,高性能 GPU 机型通常都具有高性能的 SSD 和高带宽的网卡,这些设备还可以作为分布式缓存节点。因此,相比于专有的高性能存储产品,使用 JuiceFS ,更具性价比,更易扩展。

大规模的 AI 训练场景中,通常都需要专有高性能存储,或是基于全闪架构和内核态的并行文件系统才能满足性能需求。但随着计算负载增加、集群增大,全闪的高昂成本和内核客户端的运维复杂度会成为用户面临的一大挑战。而 JuiceFS ,作为一款全用户态的的云原生分布式文件系统,借助分布式缓存来大幅提升系统的 IO 吞吐量,使用便宜的对象存储完成数据存储,更适合大规模 AI 业务的整体需要。

关于 MLPerf

MLPerf 是一套基准测试套件,它主要用于评估机器学习在本地和云平台上的训练及推理性能,为软件框架、硬件平台和机器学习的云平台提供了一个独立且客观的性能评估标准。该套件的测试包括测量机器学习模型训练到目标准确度所需的时间以及训练完成的神经网络在新数据上执行推理任务的速度。这个套件是由 30 多个与 AI 相关的组织共同创建的。点击此处了解详情。

希望这篇内容能够对你有一些帮助,如果有其他疑问欢迎加入 JuiceFS 社区与大家共同交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/414142.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

07 Qt自绘组件:图片预览小组件ImageViewer

系列文章目录 01 Qt自定义风格控件的基本原则-CSDN博客 02 从QLabel聊起:自定义控件扩展-图片控件-CSDN博客 03 从QLabel聊起:自定义控件扩展-文本控件-CSDN博客 04 自定义Button组件:令人抓狂的QToolButton文本图标居中问题-CSDN博客 0…

CentOS7 Hive2.3.8安装

CentOS7 Hive2.3.8 安装 建议从头用我的博客,如果用外教的文件到 一、9)步骤了,就用他的弄完,数据库不一样,在9步骤前还能继续看我的 一、 安装MySQL 0.0)查询mariadb,有就去0.1),没有就不管…

element el-table表格内容宽度自适应,不换行,不隐藏

2024.2.27今天我学习了如何用el-table实现表格宽度的自适应,当我们动态渲染表格数据的时候,有时候因为内容太多会出现挤压换行的效果: 我们需要根据内容的最大长度设置动态的宽度,这边我在utils里面封装了一个js: //…

排序算法之快速排序(挖坑法)

挖坑法的思想:记第一个数为key,要调整key的位置,使得左边的都要比key的小,右边的数都比key的大。 记录下关键字keybegin,把28那个位置挖坑holebegin 让end找到小于28(key)的数,把那…

针对KZG承诺和高效laconic OT的extractable witness encryption

1. 引言 2024年以太坊基金会等成员论文 Extractable Witness Encryption for KZG Commitments and Efficient Laconic OT,开源代码实现见: https://github.com/rot256/research-we-kzg(Rust) 在该论文中,提供了一种…

c# ABB 机械手上位机连接

c# 程式开发和调试步骤如下: ABB 机械手要开启PC Interface功能。ABB 机械手设定ip地址。设定测试笔记本和机械手同一网段,用网线直连机械手,也可以通过交换机连接机械手。确保笔记本能够ping通和telnet 机械手80端口都是OK的。以上都OK的话…

语音合成(TTS) GPT-SoVITS认知

写在前面 小伙伴推荐,简单了解相对之前试过的其他的TTS项目,GPT-SoVITS的优点简单易用,文档完整,默认的模型效果就很好理解不足小伙伴帮忙指正 不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候…

【半监督医学图像分割 2021 IEEE】DU-GAN

【半监督医学图像分割 2021 IEEE】DU-GAN 论文题目:DU-GAN: Generative Adversarial Networks with Dual-Domain U-Net Based Discriminators for Low-Dose CT Denoising 中文题目:基于双域U-Net鉴别器的生成对抗网络用于低剂量CT去噪 论文链接&#xff…

LeetCode 热题 100 | 图论(上)

目录 1 200. 岛屿数量 2 994. 腐烂的橘子 2.1 智障遍历法 2.2 仿层序遍历法 菜鸟做题,语言是 C 1 200. 岛屿数量 解题思路: 遍历二维数组,寻找 “1”(若找到则岛屿数量 1)寻找与当前 “1” 直接或间接连接在…

考研数据结构算法机试训练1

中南大学上机压轴题 测试数据: 3 500 0.6 100 0.8 200 0.7 100 输出 390首先要对输入的折扣进行排序,优先使用比率低的z进行支付。 然后用lowcost记录目前多少钱是打过折的。T-lowcost就是剩余没打折的。 每次循环用上一个人的折扣额度。若所有人折扣额…

Android 跨进程通信aidl及binder机制详解(二)

跨进程通信流程 通过上文可发现,要实现跨进程通信,需要客户端、服务端、客户端与服务端通信规约也就是通过aidl生成的java接口。下面用一个图来表述: 对于上图的调用过程,我们做一下解释:上图中列了几个对象的关联关系…

windows安装部署node.js并搭建Vue项目

一、官网下载安装包 官网地址:https://nodejs.org/zh-cn/download/ 二、安装程序 1、安装过程 如果有C/C编程的需求,勾选一下下图所示的部分,没有的话除了选择一下node.js安装路径,直接一路next 2、测试安装是否成功 【winR】…

Windows系统x86机器安装(麒麟、统信)ARM系统详细教程

本次介绍在window系统x86机器上安装国产系统 arm 系统的详细教程。 注:ubuntu 的arm系统安装是一样的流程。 1.安装环境准备。 首先,你得有台电脑,配置别太差,至少4核8G内存,安装window10或者11都行(为啥不能是Window7,你要用也不是不行,你先解决win7补丁更新问题)。…

目标检测——车辆障碍物数据集

检测道路上障碍物对于道路安全、自动驾驶技术的发展以及交通流畅性都具有重要性和意义。以下是这些重要性和意义的详细解释: 道路安全 从道路安全的角度来看,小障碍物可能给行驶中的车辆带来潜在风险。例如,一个丢弃在道路上的轮胎或纸箱可能…

36.云原生之SpringCloud+k8s实践

云原生专栏大纲 文章目录 SpringCloudk8s介绍spring-cloud-kubernetes服务发现配置管理负载均衡选主 spring-cloud-bookinfo案例构建项目环境配置namespace部署与验证productpagegatewaybookinfo-admindetailsratingsreviewsreviews-v1reviews-v2 总结 SpringCloudk8s介绍 ht…

配置Windows和Linux之间的WireGuard对接

正文共:1197 字 20 图,预估阅读时间:2 分钟 今天简单测试一下WireGuard在Windows系统和Linux系统之间的对接情况。首先下载Windows安装包,这个安装包的轻量化程度让我大为震惊,可以说是第一次看见这么小的安装包&#…

Flask学习笔记

不论POST请求还是GET请求都支持在 URL 中添加变量&#xff0c;可以选择性的加上一个转换器&#xff0c;为变量指定数据类型。 history_alarm.route(/test/<int:post_id>, methods[POST]) def test(post_id):print(f"参数类型为&#xff1a;{type(post_id)}")i…

语音编码的区别和使用场景

语音编码标准各自在音质、数据压缩率、对带宽的需求、计算复杂性、延迟、鲁棒性以及专利许可费用等方面有所不同。这些差异决定了它们在不同场景下的使用。那常见语音编码标准的区别和典型使用场景&#xff1a; 1. G.711&#xff1a; 区别&#xff1a;使用脉冲编码调制&#…

IDEA开发环境热部署

开发环境热部署 在实际的项目开发调试过程中会频繁地修改后台类文件&#xff0c;导致需要重新编译重新启动&#xff0c;整个过程非常麻烦&#xff0c;影响开发效率。Spring Boot提供了spring-boot-devtools组件&#xff0c;使得无须手动重启SpringBoot应用即可重新编译、启动项…

水电表远程集中抄表管理系统

水电表远程集中抄表管理系统是当前水电行业智能化发展的关键技术之一&#xff0c;为水电企业和用户提供了便捷、高效的抄表管理解决方案。该系统结合了远程监控、自动抄表、数据分析等多种功能&#xff0c;实现了水电抄表的智能化和精准化&#xff0c;为用户节省了大量人力物力…