MLops博客

分布式培训:避免错误

8分钟
2023年4月19日

在这个大语言模型、单词基础模型和日益庞大数据集的时代分布式培训数据与模型权重很少合用单机分布式ML培训复杂易出错,多隐蔽陷阱可引起模型培训过程大问题幸运的是,像PyTorrch分布数据并行和Ray等机器学习框架抽取了许多混乱细节,但仍然很有可能分布式培训退步

文章将触及十大分布式模型训练错误菲律宾凯时国际官网开户并会建议解决 每一个

并检查

分布式培训:框架工具

不流水管

问题

模型并行分布式培训搭建中,每个阶段(不包括前向传递器中的第一个阶段)依赖单机层输出值,后向传递法也是如此,逆序除外。这可能不是最高效方法下图PipeDream论文显示此点灰盒全图表示时间单元 机器闲置无用

模型并行分布培训搭配四台机
模型并行分布培训搭建源码

解决之道

管道后的想法是减少浪费工作量,即每台机器在向下一机发送输出后立即开始计算新小批量表示多小型插件在更新权重前并行培训,这可能影响算法趋同,但正如第一节所讨论的,重存储等技术可减少这种效果。

数小插头进入管道训练后 管道将达标稳态内所有机器 工作时单元AG凯时手机版下方图形显示管道快速提高计算资源使用清晰地说,非管道化会导致利用不足和分配时间延长

实例分布管道四台机
实例分布 管道四机源码

不平衡管道阶段

问题

以管线讨论为基础 必须确保管道平衡式.图显示前天真假设每台机器用完全相同时间对小批数据执行模型前向后向分治实践上,这从不发生,所以会有一些短时段 机器闲置等待前机下小批或比别机长执行计算, 从而延缓管道

解决之道

最理想地搭建管道,使每台机器都尽可能接近相同计算量即定时数据穿透模型不同层次需要多长时间, 定时前向后传播需要多长, 并保证微信箱大致等量数据大小这对于优化管道效率至关重要

重质淡化

问题

重质淡化用于描述深度学习模型编程训练中出现的现象模型训练跨多机流出时,延迟发生时间介于数据前向计算发生时和基于梯度计算回演更新模型权值时。训练步骤后模型前向预测使用比梯度老化数列的权值计算延迟被称为“权值过期性”。

解决之道

有一些方法修复权值渐变首先是简单同步机器 相通信渐变封顶重量可变老但它会降低硬件效率,因为同步机使某些机器不得不等待其他人实现同一状态因此,减少培训时间不理想

或选用方法标题管道梦境研究者引入了称权值存储技术 系统“维护模型权值多版, 单小批数一版 ” 。 完成后系统可存储模型权值,作为小批量相关状态的一部分时间回讲时,从存储点检索小批量相关权值并用于渐变计算保证前向后向传递单小批数据时使用同版权值并改进编程中的统计趋同

模型并行使用需要数据并行使用

问题

分布式培训的两个主要范式是模型并行数据并行.模型并行大模型分布多机举例说,你可能把模型第1至4层放在机一上,5至8层放在机二上,9至12层放在机三等随着大语言模型如GPT-3和数十亿模型参数开始超出全模型存储到商品硬件时的大小,这种培训模式正变得越来越常见。训练期间数据渐变由机器间通信

反之,在数据并行范式中,全模型存储在每台机器上,但每台机器分配仅对全数据集子集培训模型完全数据集不搭配单机或多机都合用单模型并想缩短训练时间时使用此功能。模型权值梯度在培训期间传递并发式培训类型中,数据和模型并行并用以获取两个世界中最优数

解决之道

选择模型或数据并行对匹配正确培训方法需要选择模型并行性,如果训练异常大模型,无法搭配单机选择并行数据最后,你应该考虑使用混合模式培训范式

可能你还喜欢

GPT3或BERT理解语言吗?

驱动机和库机间不一致

问题

在一个理想世界中,分布式培训脚本会完美地跨同质机器组工作,但事实并非如此。常时意外错误可裁剪机器使用硬件、驱动器和库互不兼容版本举个例子,如果分布式培训机学习脚本使用PyTorrch实施,那么你应该确保每台机器安装同版PyTorrch安装类似地,你最理想地像每台机器使用兼容版CUDA,尽管这不是严格要求,因为大多数分布式培训库都能够连接CUDA的不同版本

解决之道

在所有机器中实现训练环境标准化的一个简单方法就是使用容器化解决方案如Docker.docker打包你分布式培训脚本 内含OS定义 库 工具 文档操作容器也是轻量级的 表示一旦容器图像搭建后 不需要高架运行使用容器或类似虚拟化解决方案可确保运行时跨机大都一致,避免软件搭建不兼容可能造成的许多头痛和摩擦

学习更多

如何跟踪PyTorrch机器学习实验

使用错误类型 sGD

多数机器学习模型使用优化算法培训,常有随机梯度下降的变异有两种主要方法在分布式设置中实施SGD同步异步.

问题

同步SGD中,每台机器同步更新权重表示每台机器计算数据中的梯度,传送到其他机器,并等待所有其他机器发送梯度只有在从所有其他机器接收梯度后,每台机器才能反向调整并更新权值以这种方式,每台机器的权重保持同步并避免重量下降实现这一点需要在每次小型批量培训结尾设置硬屏障,导致减速,特别是如果有压强机比其他人耗时长得多计算时。

解决之道

实践上异步SPD可成为分布式培训的极佳选择最出名异步SGD霍格维德显示SGD可并行运行,无锁运行,对算法趋同不产生太大效果异步SGD允许权值更新不由机器等待对方发送梯度表示权值更新仅使用局部信息,因为每台机器只能访问从培训数据子集衍生的渐变但在实践上,简单策略可用以确保算法仍然趋同

网络问题、防火墙、端口和通信错误

问题#1

计算机间通信,特别是网络通信中心分布式培训网络通信自然带来许多潜在问题,例如投包、网络攻击等

核心分布式培训脚本 枚举机器称军阶.机器排名内数列 与模型训练过程有关的所有机器通常,一机器排名0并处理其他机器间通信协调、发送数据汇总和梯度等其余机器向非等阶下所有其他机器传递网络上的数据和渐变如果某些事得不到处理,很容易出错

解决之道

向非等阶机器发送数据时,进程必须指定IP地址和端口号传递此信息本规范中的任何错误显然会导致培训过程失效类似地,如果防火墙或其他网络配置设置阻塞指定端口通信,接收机将永远得不到必要数据因此,确保网络配置正确并正确写入培训脚本是功能分布式培训机学习搭建的先决条件

问题2

NCCL和Gloo是PyTark分布式包使用的两个库,用于分布式培训期间机器间传递数据和模型参数机器间定期分享权数和数据对完全训练功能模型至关重要不幸的是,单机故障分布式环境时司空见惯,并经常无明显理由发生单机或多机可能用光内存,硬盘自发失效或受网络或停电影响

遇有这种情况,当另一机器从失效机接收数据时,NCCL或GLO可提供隐式错误消息错误太常见混淆到全局Github问题专心解决

解决之道

某些参数设置可以帮助错误更容易读化NCCL_DEBUG=WARN),但不管如何,这不完全解决问题

不幸地,这些问题是分布式系统编程的一部分分布式培训最佳做法解决这类错误包括培训时频繁备份(定期保存模型权数快照),写动词日志可回溯源头,并确保硬件维护良好(不包含云计算时代问题)。

慢数据传输

问题

RPC或远程程序调用是跨网络通信的基本要素分布式培训ML设置可编程RPC运行时增强学习跨网络代理类似地,网络传输时,渐变层输出由机器间发送泛泛地说,你希望避免编程RPC或发送到网络上,只要有可能,网络通信速度慢代价高,尤其是如果数据多传输时更是如此。多分布式培训错误也出自网络问题,因此减少对网络依赖也可以减少误差数当然,你无法完全避免使用网络, 但应注意避免轻率使用网络

解决之道

万一机器间完全需要传输数据时,可以做许多事情加速进程第一,您可以使用专用硬件促进网络传输可包括使用工人机高速互连并用Nvlink传输NvidiaGPUs数据

也可以降低传输梯度浮点精度,以降低数据传输量从fp32到fp16或evenfp8可对速度产生重大影响当心,虽然,它也会影响算法趋同性,所以使用明智

最后,一计算梯度子集时即可传输发送单层梯度)同时,后台剖析数据反向转换是另一种管道化形式,确保网络得到更高效利用它可以加速整体梯度转移时间并避免网络饱和

不够日志

问题

日志数据对调试培训特别重要多点分布式培训可能失效,应注意在培训过程多阶段写详细日志,以便在出错发生时可局部化并很容易回溯源头具体地说,所有主要分布式动作都应登录记录,例如当数据在机器间传递时,当权重更新执行时等最后日志应易搜索易存做所有这一切可确保当分布式培训错误发生时很容易回溯源头,并最小化系统故障时间

解决之道

mLops工具等奈普奈中自动登录所有相关元数据,如矩阵、参数、学习速率和变量可登录四大对象:运行模型模型Version和Project,并按需整理元数据,多亏弹性元数据结构

日后可查看所有你登录入海王星 web应用举例说 仪表板上像下方

Nptune.i仪表板合并多项元数据
海王星仪表板组合多项元 实例见海王星应用

校验教程学习跟踪海王星分布式培训作业.内容包括:

  • 跟踪单节多GPU作业
  • 跟踪多节点DDP作业

也可以检查关于使用Neptune管道库的文档.

云计算超支

问题

分布式培训常使用云提供商如AWS或GCP如果你不小心使用云服务很容易整理每月百元或千元帐单

解决之道

降低成本的第一件事就是使用点点可先验性实例。简言之,这些实例往往便宜得多,因为您允许在培训期间可能先发制人或中断作业。使用插件实例时,必须定期检查训练或使用容错解法,如ElasticHorovod

AG凯时手机版不选择超出需求计算资源也很重要举个例子,如果你分配64GBGPU,这可能超杀,因为你已经在分布式结构中工作。AG凯时手机版少资源实际使用更多实例比高贵GPU使用两到三大实例便宜得多提前进行这类成本效益分析可改善培训时间并降低与所期望云提供商完成培训所需的成本

并见

多GPU模型培训:监控优化

结尾取菜

分布式模型培训具有挑战性并涉及管理各种错误部分错误不可避免,但最好避免分布式环境训练时产生的陷阱和常用机器学习陷阱

管道化问题,如偏差阶段或错误选择模型或数据并行或完全非管道化可消除分布式培训的优势类似地,网络问题可能出现,培训制作过多RPC时会大大减速,错误配置防火墙或IP地址。同时,其他问题,如权质淡化或选择错误分布式SGD可消极地影响算法趋同

通过避免这些分布式培训错误,你可确保通过使用分布式培训的力量启动极大型复杂机学习模型培训的正确轨迹

引用

  1. https://arxiv.org/pdf/1806.03377.pdf
  2. https://towardsdatascience.com/a-guide-to-highly-distributed-dnn-training-9e4814fb8bd3

文章有用吗

感谢回馈