iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >iGear 用了这个小魔法,模型训练速度提升 300%
  • 878
分享到

iGear 用了这个小魔法,模型训练速度提升 300%

iGear用了这个小魔法,模型训练速度提升300% 2015-05-24 19:05:52 878人浏览 无得
摘要

一个高精度ai模型离不开大量的优质数据集,这些数据集往往由标注结果文件和海量的图片组成。在数据量比较大的情况下,模型训练周期也会相应加长。那么有什么加快训练速度的好方法呢? 壕气的老板第一时间想到的通常是提升算力,增加资源。 如果足够有

iGear 用了这个小魔法,模型训练速度提升 300%

一个高精度ai模型离不开大量的优质数据集,这些数据集往往由标注结果文件和海量的图片组成。在数据量比较大的情况下,模型训练周期也会相应加长。那么有什么加快训练速度的好方法呢?

壕气的老板第一时间想到的通常是提升算力,增加资源。

如果足够有钱的话,基本不需要再继续看其他解决方案了。

但大多数情况下,面对昂贵的算力资源,我们不可能无限增加的。那在花了大价钱买到了有限资源的情况下,我们还可以通过什么方式加快模型训练,提高资源利用率呢?

本文将为大家介绍的就是 iGear 高性能缓存加速方案,我们先看一张简单的AI工作全流程服务示意图。

采集的数据通过 iGear 数据中台的筛选预处理、iGear 标注平台的标注后会形成优质训练数据集,这些数据集会流转到 iGear 训练平台来训练算法模型。
iGear 训练平台基于 kubernetes 集群完成异构计算资源调度。在这个架构体系中计算和存储是分离的,数据集会放在远端的对象存储集群中,当运行模型训练任务时就需要访问远程存储来获取数据集,带来较高的网络 I/O 开销,也会造成数据集管理不便的问题。

本文提出的 iGear 高性能缓存加速方案要做的就是:

如何降低 I/O 开销,提高训练效率和 GPU 利用率?

如何管理数据集,提高用户易用性和便利性?

缓存方案概述

前文已经提及,数据集是存储在远端的对象存储集群中的。
为了提高数据集的易用性,常用方案是用 fuse 方式挂载给到训练任务,方便用户以普通文件目录的方式识别并使用数据集。
这种方式虽然满足了易用性,但高 I/O 的开销使得用户必须手动或者用脚本的方式将数据集提前同步到计算节点,这会增加用户在训练过程中的心智负担。
针对上述问题,我们对训练数据集做了优化,当用户开始准备训练时,通过 JuiceFS 实现数据集缓存引擎,为用户提供数据集缓存和预热功能,这既可以降低对远端对象存储的访问,又可以减少用户操作。充分利用计算集群本地存储来缓存数据集,通过两级缓存(训练节点的系统缓存+训练节点的磁盘缓存),加速模型训练速度,一定程度上也能提高 GPU 的利用率。

JuiceFS 是一款开源的面向云环境设计的高性能共享文件系统,在数据组织管理和访问性能上进行了大量针对性的优化,社区版本也有非常好的文档支撑,这里就不赘述了。

缓存方案测试

测试方案

我们之前使用的方案是使用 fuse 的方式直接挂载对象存储系统,将 S3 的 bucket 通过挂载的方式挂载到本地,提供访问远端对象存储数据的能力。优化后的高性能缓存加速方案,后端也是基于对象存储,只是在此基础之上提供了缓存、预热等功能,优化了存储的性能。
基于此我们做了以下两组对比实验,两组实验都是基于同一套对象存储,且其它条件保持一致。

  1. 开启或关闭高性能缓存加速的性能对比

  1. 使用高性能缓存加速方案和使用 fuse 挂载的性能对比

测试方式

服务器物理机环境下,我们使用 PyTorch /examples 仓库中提供的 ResNet50 v1.5 进行模型训练,对其进行单机单卡、单机多卡的结果复现,同时对比执行过程花费的时长。

测试环境

硬件:Tesla V100-SXM2-32GB
驱动:Nvidia 450.80.02
操作系统ubuntu 20.04.1 LTS
测试工具:PyTorch ResNet50 v1.5提供的脚本
数据集:ImageNet

实验一:开启高性能缓存加速 VS 关闭高性能缓存加速

ResNet50 v1.5 batch_size = 128, worker=8

从上图可以看出,在没有缓存的情况下,训练任务处理的图片数并没有随着算力的增加而明显变化,说明已经到了 I/O 瓶颈阶段。而使用缓存后,随着算力的增加,处理的图片数也相应增加。
这证明使用缓存加速后,大大降低了 I/O 开销,同等算力情况下,训练速度也有了很大提升,其中单机 1 卡的训练速度提升了 22.3%,单机 4 卡的速度提升了 218%,单机8卡的速度提升了 **230% **。

从模型训练时间角度来看,训练时间从未使用缓存加速的 1381 min 降低到 565 min,只用了原来 1/3 的时间就完成了模型训练。

第一组实验对比了数据集缓存前后的性能差异,验证了使用高性能缓存方案来加速 iGear 训练任务的必要性。

实验二:高性能缓存加速 VS fuse挂载

当前较为通用的方案是采用 fuse 的方式来挂载远端的对象存储到本地,提供用户对数据集的访问请求。为了对比目前普通 fuse 挂载的方案和高性能缓存加速的优化方案,我们设计了第二组实验:

ResNet50 v1.5 batch_size = 128, worker=8

从模型训练时间角度来看,fuse 挂载方案训练时间为 1448 min,高性能缓存加速优化方案可将训练时间减少到 565 min,将近 fuse 挂载方案的 1/3

因此,相比于传统直接使用对象存储,我们的高性能存储在训练速度上和训练时间上都有大幅度的提升。

第二组实验对比了不同方案下的模型训练时间,验证了使用高性能缓存方案来加速 iGear 训练任务的重要性。

结论

面对昂贵且有限的算力资源,我们可以通过高性能缓存加速方案去大幅加速 iGear 平台上训练任务的速度,极大地缩短模型训练时间,同时提高了 GPU 资源的利用率。如果算力进一步提升,收益也不仅仅止步于当前的测试环境。

如有帮助的话欢迎关注我们项目 Juicedata/JuiceFS 哟! (0ᴗ0✿)

您可能感兴趣的文档:

--结束END--

本文标题: iGear 用了这个小魔法,模型训练速度提升 300%

本文链接: https://www.lsjlt.com/news/9102.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • sql中外码怎么设置
    sql 中外码设置步骤:确定父表和子表。在子表中创建外码列,引用父表主键。使用 foreign key 约束将外码列链接到父表主键。指定引用动作,以处理父表数据更改时的子表数据操作。 ...
    99+
    2024-05-15
  • sql中having是什么
    having 子句用于过滤分组结果,应用于分组后的数据集。它与 where 子句类似,但基于分组结果而不是原始数据。用法:1. 过滤分组后的聚合值。2. 根据分组后的...
    99+
    2024-05-15
  • 在sql中空值用什么表示
    在 sql 中,空值表示未知或不存在的值,可使用 null、空字符串或特殊值表示。处理空值的方法包括使用操作符(is null/is not null)、coalesce 函数(返回第一...
    99+
    2024-05-15
    oracle
  • sql中number什么意思
    sql 中的 number 类型用于存储数值数据,包括小数和整数,特别适合货币、度量和科学数据。其精度由 scale(小数点位数)和 precision(整数字段和小数字段总位数)决定。...
    99+
    2024-05-15
  • sql中空值赋值为0怎么写
    可以通过使用 coalesce() 函数将 sql 中的空值替换为指定值(如 0)。coalesce() 的语法为 coalesce(expression, replacement),其...
    99+
    2024-05-15
  • sql中revoke语句的功能
    revoke 语句用于撤销指定用户或角色的权限或角色成员资格。可撤销的权限包括 select、insert、update、delete 等,撤销的对象类型包括表、视图、存储过程...
    99+
    2024-05-15
    敏感数据
  • sql中REVOKE是什么意思
    revoke 是 sql 中用于撤销用户或角色对数据库对象权限的命令。它通过撤销权限类型、对象级别和目标权限来实现:权限类型:撤销 select、insert、update、d...
    99+
    2024-05-15
  • sql中sp是什么意思
    sql中的sp是存储过程的缩写,它是一种预编译的、已命名的sql语句块,存储在数据库中,可以被用户通过简单命令调用。存储过程的特点有:可重用性、模块化、性能优化、安全性、事务支持。存储过...
    99+
    2024-05-15
    敏感数据
  • sql中references是什么意思
    sql 中的 references 关键字用于在外键约束中定义表之间的父-子关系。外键约束确保子表中的行都引用父表中存在的行,从而维护数据完整性。references 语法的格式为:fo...
    99+
    2024-05-15
  • sql中判断字段为空怎么写
    sql 中可通过 4 种方法判断字段是否为空:1)is null 运算符;2)is not null 运算符;3)coalesce() 函数;4)case 语句。例如,查询所有 colu...
    99+
    2024-05-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作