栏:前沿进展】自十年前AlexNet等模型在计算机视觉领域大放异彩,深度学习算法逐渐流行起来。近年来,BERT等大模型深受大公司喜爱,自2018年至今,最顶尖的大模型的规模越来越大,如GPT-3有1750亿参数,2021年的Switch Transformer达到了1.6万亿参数,智源“悟道”模型更是达到了1.75万亿参数。由此,OpenAI做出了一个预测:顶尖的AI模型每3.5个月更新换代一次。而与之对应的,内存的更新换代速度却在35个月左右。也就是说,AI模型的翻倍速度十倍快于内存的翻倍速度,这就导致了AI应用与硬件的不匹配。

本文整理自青源 LIVE 第 33 期,视频回放链接:

https://hub.baai.ac.cn/live/?room_id=209

主讲:尤洋

整理:牛梦琳

审校:李梦佳

主讲人:尤洋是新加坡国立大学计算机系的校长青年教授 (Presidential Young Professor),加州大学伯克利分校博士。尤洋的研究专长包括高性能计算,并行算法,以及机器学习。他曾以第一作者身份获得了国际并行与分布式处理大会(IPDPS)的Best Paper Award(0.8%获奖率)和国际并行处理大会(ICPP)的Best Paper Award(0.3%获奖率)。尤洋曾获清华大学优秀毕业生,北京市优秀毕业生,国家奖学金,以及当时清华大学计算机系的西贝尔奖学金。他还在2017年获得美国计算机协会(ACM)官网上颁给优秀在读博士生的ACM-IEEE CS George Michael Memorial HPC Fellowship。他也获得了颁发给伯克利优秀毕业生的Lotfi A. Zadeh Prize。他还被伯克利提名为ACM Doctoral Dissertation Award候选人(81名博士毕业生中选2人)。他在2021年被选入福布斯30岁以下精英榜 (亚洲)并获得IEEE-CS超算杰出新人奖。

更多信息请查看研究小组主页(https://ai.comp.nus.edu.sg/) 。


01

背景

随着“普惠AI”时代的到来,深度学习算法被越来越多的应用于各行各业。然而,AI模型与硬件在更新速度上的差距,导致了AI应用于硬件的不匹配。这种不匹配,无疑会对未来整个计算机系统的发展产生一系列的影响。

“夸父”AI系统的设计目的就是使用户可以专注于实现AI的功能,而不必花费精力关注整个计算机系统的性能或者工程化问题。为此,我们希望拥有一个自动优化或者分布式调度系统,这个系统应当可以最大化运行效率并最小化运行时间,从而最小化通讯代价,最终降低企业实现AI落地的成本。

当前,为了实现上述优化,主要的思路是最大化地挖掘算法的并行度。

02

并行(Parallelism)

随着深度学习模型的参数量越来越多,数据集的尺寸也随之疯狂地增长。为了在一个巨大的数据集上训练一个复杂的深度学习模型,我们不得不使用多节点的并行方式。对于深度学习而言,目前工业界应用的并行方式主要有三种:数据并行,流水线并行和模型并行。

数据并行(Data Parallelism):在现代深度学习中,因为数据集越来越大,以至于很难将其把它全部载入内存,因此,通常把大的数据集分割为很多小批次(batch),使用随机梯度下降法,在不同GPU上计算一个小批次,对若干个GPU的梯度估计结果进行汇总后,进行加权平均,最终求和就得到了最终的数据集的梯度估计结果。数据并行是最简单,最稳定,也是现在应用最多的并行方式。

流水线并行(Pipeline Parallelism):深度学习通常由很多层构成,但流水线并行并非简单的对层与层之间的计算进行并行,而是将不同层的数据集分割为流水线批次,用不同的GPU计算不同的流水线批次。流水线并行本质上依赖于数据并行,只要保证batch size远大于GPU的数量,就可以保证流水线并行的效率。

模型并行(Tensor Parallelism):模型并行更多的是一种对计算机资源的分配问题,也可以理解为层内并行。把整个模型按层分解成若干份,把每一份(其中的层是连续的)载入不同的GPU中,也即是每个不同的GPU计算着整个模型的不同的层的梯度。模型并行减少了单个GPU的参数量,并且使得用更为精确的梯度进行计算提供了可能性。NVIDIA的Megatron和微软的DeepSpeed就应用了模型并行的方式。

除了以上三种并行方式外,为了最大化并行度,使处理时间缩到最短,在这里引入了新的并行方法:数据序列并行(Sequence Parallelism)。

模型的参数(weights)和梯度(Gradients)以及优化器(Optimizer),通常会占用很大的内存,极端情况下,如果数据序列过长,或者长序列的每个点(Sample)过大,会导致内存不能支持模型的训练。在这种情况下,数据序列并行更适合处理这种长序列数据。

对于数据序列并行的优势,以Transformer为例,将数据序列并行与1D的模型并行进行比较(如下图所示):

根据对比结果,在序列长度固定的情况下,线性增加batch size,数据序列并行占用的内存更小,并且基本恒定;而batch size不变,线性增加序列长度,可以看出数据序列并行也是更占优势。所以数据序列并行进一步提升了并行度。

03

优化

模型并行优化

对模型并行而言,不同GPU之间进行通信时,潜在通信代价非常高,为了降低这种代价,可以考虑将这些模型化成二维模型,即把矩阵划分成行列的模式,每次每个GPU只需跟同行或同列的GPU进行数据传输,所以可以极大地降低通信代价。

同理,可以将这个思路推广到三维的方式。

将1D与2D的模型并行进行比较,可以看出随着GPU个数的增加,并行的效率进一步提升(如下图所示):

LARS/LAMB算法

由于流水线并行依赖于数据并行,所以还需要优化数据并行,流水线并行也可以收益。

目前在工业界,数据并行的优化其实已经基本实现。但通常在优化数据并行时,增加batch size 往往会造成精度(Accuracy)的损失。通过之前英特尔的研究,可以发现large batche 很容易收敛到Sharp Minimum,这种最优点意味着训练精度高而测试精度低,所以并不是好的最优点。

通过实验发现,在每次循环中,深度学习模型不同的层的学力不同,学力的稳定性也不同,通过LARS/LAMB算法,设置一个指标反映每一层在循环中的稳定性,例如计算Lipschitz常数。Lipschitz常数越大,稳定性越差。这里利用Trust Ratio反应每一层的稳定性,然后在同义次循环内,让稳定的层计算更快,不稳定的层计算更慢,从而最大化学力。

利用LARS方法,对Larger batch进行训练是,可以得到较好的Accuracy。

LARS和LAMB也是Paperwithcode目前唯一认证的两种Large batch训练方法,由下图可以看出这两种方法在应用上的效果也很好。

04

「夸父」AI系统

为了实现让用户专注于实现上层功能,摆脱对计算机系统性能的关注,“夸父”AI系统采用了以下的技术:

1.6D并行:包括三维的模型并行与流水线并行和数据序列并行

2.隔离性:“夸父”系统采取了很好的隔离性,将分布式实现与应用的实现隔离开来,并建立不同的模块。

3.模块化:让不同的模块相互独立,互不干扰。

4.拓展性:允许用户自行更改个人组件。

5.兼容性:能够很好地兼容现有的系统,如DeepSpeed, Megatron-LM等。

以下是“夸父”AI的开源地址以及论文地址:

代码地址:

https://github.com/hpcaitech/ColossalAI

论文地址:https://arxiv.org/abs/2110.14883

05

精彩QA

Q1:如何实现大模型的产业落地?

A:可以分层次来看。首先,对于走在行业前端的大公司,如微软,谷歌,字节等,其实已经实现了大模型的落地。其次,当前可见许多典型的大模型应用场景,如AI制药,车载系统等,而从趋势上看,大模型的普及将会从这些典型例子慢慢延展开来。

Q2:像高校这种硬件资源相对缺乏的机构应如何进行大模型研究?在大模型应用过程中,如何处数据的隐私问题?

A:资源性的问题是难以避免的,可以考虑高校与工业界进行合作来解决这个问题,也欢迎大家与我们的团队进行合作。关于隐私问题,目前比较好的处理方式之一,是公司将大模型引入私有的计算资源,或直接进行加密的研究。

Q3:关于序列并行有哪些只得注意的地方?

A:序列并行下多GPU之间数据传输方式使用的是NVLink,但其他的Link也可以,实际上,序列并行的算法与Link并没有关系;序列并行模型与原模型是等价的,序列并行模型对原模型不会产生影响;“夸父”并不是只能在超算上使用,CPU,GPU都可以,没有限制。

Q4:在大模型训练中将Layer拆分到不同的GPU上进行并行处理,数据传输速度是关键指标吗?

A:传输速度的确很关键。以NVIDIA为例,他们的方案用了3072个GPU:一个服务器有8个GPU,用来专注于进行模型并行;然后在64个服务器之间运用流水线并行;再设置6个小组,每个组有64个服务器,这六个组之间进行数据并行。最后正好占满了3072个GPU。这是工业界为了降低传输速度影响的一个很好的解决方案。

Q5:当前框架是否会有硬件差异感知的考量,还是将系统并行节点当做对等的节点?

A:当前主流的框架,如pytorch等,确实是将并行节点当做对等的节点。但如果将来的语音环境更加复杂,那么硬件差异感知就会变得越来越重要的,到时候需要进一步的实现和优化。

Q6:「夸父」系统是如何提升内存效率的?

A:首先,如2D、2.5D等并行划分方式本身就是为了将模型更好地划分,以提升内存效率;然后,我们做了一些工作来提升内存效率,如基于微软的思路,对ZeRO进行改进;最近我们团队也做了一些其他的优化工作,这些工作展示在我们最新的论文里。

新国立尤洋:夸父AI——用于大规模并行训练的统一深度学习系统相关推荐

  1. 活动报名 | 新国立尤洋:FastFold——将AlphaFold训练时间从11天减少到67小时

    本期为青源LIVE第42期线上直播活动,参与直播互动有惊喜

  2. AI专家告诉你,机器学习与深度学习如何快速进阶?

    深度学习的浪潮重塑了很多的领域,也包括机器学习本身.深度学习是传统神经网络的发展延伸,随着AlphaGo的热潮成为当前机器学习最火热的前沿方向之一,大规模数据集加上深度卷积神经网络( CNNs )强大 ...

  3. 一口气发布11项新升级,免费送出1亿元算力:国产深度学习平台PaddlePaddle大更新...

    郭一璞 夏乙 发自 香格里拉 量子位 出品 | 公众号 QbitAI 深度学习框架里的唯一国货PaddlePaddle,集中迎来一大波更新. 百度PaddlePaddle全景图也首次曝光. 在框架核心 ...

  4. AI Studio 飞桨 零基础入门深度学习笔记4-飞桨开源深度学习平台介绍

    AI Studio 飞桨 零基础入门深度学习笔记4-飞桨开源深度学习平台介绍 深度学习框架 深度学习框架优势 深度学习框架设计思路 飞桨开源深度学习平台 飞桨开源深度学习平台全景 框架和全流程工具 模 ...

  5. 谷歌新深度学习系统可以促进放射科医生的发展

    编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 谷歌人工智能研究人员团队在<自然>上发表了一篇新论文,深度学习可以检测出异常胸部 X 光片,其准确度可与专业放射科医 ...

  6. 【AI初识境】近20年深度学习在图像领域的重要进展节点

    文章首发于微信公众号<有三AI> [AI初识境]近20年深度学习在图像领域的重要进展节点 这是专栏<AI初识境>的第3篇文章.所谓初识,就是对相关技术有基本了解,掌握了基本的使 ...

  7. AI学习笔记(九)从零开始训练神经网络、深度学习开源框架

    AI学习笔记之从零开始训练神经网络.深度学习开源框架 从零开始训练神经网络 构建网络的基本框架 启动训练网络并测试数据 深度学习开源框架 深度学习框架 组件--张量 组件--基于张量的各种操作 组件- ...

  8. 人工智能AI:TensorFlow Keras PyTorch MXNet PaddlePaddle 深度学习实战 part1

    日萌社 人工智能AI:TensorFlow Keras PyTorch MXNet PaddlePaddle 深度学习实战 part1 人工智能AI:TensorFlow Keras PyTorch ...

  9. AI Studio 飞桨 零基础入门深度学习笔记6.3-手写数字识别之数据处理

    AI Studio 飞桨 零基础入门深度学习笔记6.3-手写数字识别之数据处理) 概述 前提条件 读入数据并划分数据集 扩展阅读:为什么学术界的模型总在不断精进呢? 训练样本乱序.生成批次数据 校验数 ...

最新文章

  1. linux系统调用 ftruncate设置文件大小
  2. Hadoop运行模式 之 本地运行模式
  3. 一项震动制药行业的研究:大型制药公司AI的生产力
  4. javascript 判断 前端 是 pc端 还是 移动端
  5. iOS正则匹配手机号
  6. 进入正在运行的Docker容器的4种方式
  7. pip升级之后出现no module named pip
  8. groupby多个字段性能_MySQL今天我们说下分组(group by)
  9. 网络负载均衡适用场景
  10. python开发环境推荐_推荐一款Python开发环境管理神器
  11. java操作数据库,以页面显示学生信息为例
  12. 计算机重新启动操作处于挂起状态,PHOTOSHOPCS5安装程序检测到计算机重新启动操作可能处于挂起状态...
  13. python实现21根火柴游戏
  14. 使用HBuilder打包App教程
  15. 教你两步搞定机顶盒软件的安装
  16. 书论20 袁昂《古今书评》
  17. decimal比较大小
  18. LaTeX BibTeX的使用
  19. CodeForces - 835D Palindromic characteristics (dp)
  20. AlibabaProtect 卸载 windows系统

热门文章

  1. 【PHPWord】页面添加图片水印
  2. mdk编译后的HTML,[转载]keil MDK编译完成后,Program Size:
  3. python输入文字如何定义文字_python如何实现手动输入文字
  4. php多维数组和对象,在PHP中将多维多对象数组转换为标准多维数组
  5. python美国股票数据api_【美股量化00篇】Python获取新浪接口美股实时数据
  6. app图标圆角角度_怎样使用sketch绘制标准APP图标圆角矩形背景?
  7. sql优化ppt_一款跨平台免费的开源 SQL 编辑器和数据库管理器!
  8. mysql innerdb 索引_mysql innodb索引原理
  9. c语言链表创建递归,递归创建二叉树c语言实现+详细解释
  10. Android SDK Tools Setup 提示 “ java se development kit not found”