ICLR Spotlight|Facebook提出无损INT8优化器,单机可以跑千亿参数模型了??

1b54c2a076d31f66bccd7ec1157a145d.jpeg

文 | 王思若

2018年GPT、BERT预训练模型的提出吹响了大模型“军备竞赛”冲锋的号角,一场大模型的狂欢拉开帷幕,业界强大的算力支撑起例如Megatron-Turing、Switch Transformer、悟道2.0等千亿&万亿参数量模型。与此同时,面对着超大模型训练在内存存储、网络通信、性能功耗等方面的严峻挑战,这同样是一场工程上极致优化的探索之旅,各家公司纷纷提供了自己的解决方案或训练框架,常用的方法有以下几种:

1. 并行化方法: 主要包括数据并行、模型并行和流水线并行,切分数据、Tensor或模型Block到不同GPU上从而达到并行化的效果。之后,Google提出了基于专家并行的MoE架构,通过稀疏结构拓展实现了大模型万亿参数量的飞跃。

2. 内存&通信优化方法: 进一步为了应对并行化方法在内存及通信量上的局限,16年,陈天奇团队提出亚线性内存优化的Checkpointing(重计算)方法,在反向传播时重新计算前向传播的中间激活达到节省显存的目的。21年,微软提出了CPU offload的ZeRO-Offload方案,将梯度、优化器、参数在CPU和GPU间Swapping,通过通信成本来大幅度的节省显存开销。当然,混合精度或者半精度模型训练即采用FP16代替FP32模型参数的量化方法是更加常见有效的方案,大幅度减少内存带宽和存储空间并且提高系统吞吐量,几乎可以成倍提升模型训练速度。

在这场巅峰较量中,Facebook表示:只需更改两行代码,带你体验极致的显存优化,单机即可训练千亿模型,助力贫民玩家实现大模型梦!虽然这里单机至少需要8张RTX 3090, 但未来可期呀!

哇喔~ 请各位抓紧上车并系好安全带,下一站是位于ICLR2022 Spotlight的8-BIT优化器,“一个故事,两行代码,无限显存优化”,祝您路途愉快~

064cd99b5d1f3c0848f76bb5c428032d.jpeg

论文题目:
8-BIT OPTIMIZERS VIA BLOCK-WISE QUANTIZATION

论文链接:
https://arxiv.org/pdf/2110.02861.pdf

Github:
https://github.com/TimDettmers/bitsandbytes

一、优化器遇到量化的故事

随着Transformer模型不断scale参数,Transformer家族迎来了110亿参数量的T5,1750亿参数量的OPT,1760亿参数量的BLOOM......,这些开源模型给了科研人员更多的可能去进一步探索大模型未知的潜力。但尴尬的是,8张80GB A100依然不足以对T5模型进行微调,显存又双叒叕爆掉了。实际的境况比你想的更加糟糕,仅仅对BLOOM-176B模型进行推理,就需要8张80GB的A100,如果想要进一步的对模型进行微调,至少需要72张!

e43e3aa108ef31221c37efba78373cec.png

我们不禁要问,模型训练时是谁占据了大量的显存?

10亿 (1 Billion)参数量的模型使用Adam优化器进行训练,所有数据使用FP32进行存储,模型权重(Model weights)和梯度(Gradients)分别需要4GB存储空间,Adam优化器保存了梯度的一阶矩估计(First Moment Estimation,即梯度的均值)和二阶矩估计(Second Moment Estimation,即梯度的未中心化的方差)又分别需要4GB存储空间。Adam优化器占据了50%的显存空间!!!

如何缩减Adam优化器的显存占用无疑成为了重点,微软提出了ZeRO-Offload方案把优化器参数卸载到CPU内存中,那是否还有其他方法呢?使用半精度或者FP8来代替全精度数据类型去存储参数?实际上,一种称为量化的方法已经广泛应用于深度学习中。

那么,下一个问题,什么是量化?

量化: 通俗理解就是将权值参数或中间激活值用更少位数的数据类型近似表示FP32浮点型数据。16年Deep Compression论文中首次提出参数量化方法,使用K-means聚类方法将参数矩阵进行聚类,使用聚类中心来代替原值,模型只需存储聚类的index和聚类中心centroid,从而达到压缩参数的目的,一般来讲为了更好的聚类首先会将参数归一化到某个区间范围,让不同张量值的量级保持一致。

这是量化操作的一种方案,反过来从量化数值转化为原始数值的过程称为反量化,量化可以有效降低内存消耗和计算强度但也带来了严重的精度损失问题。

5c4705ab603bece4df9f2f2d218adbd0.png
▲Deep Compression

当优化器遇到了量化,思路很简单,但是优化很难,FP16优化器已经很不稳定,但Facebook直接使用FP8优化器,直接减少38%的显存占用,需要更少的模型训练时间,但拥有和FP32优化器完全相当的效果。

30cd31d5a23929aee4ab839e4ee7e9d9.png

二、三个方法构建无损FP8优化器

FP8优化器会以低精度的状态存储在显存中,在参数更新时会反量化为FP16的高精度状态,从而既能够高精度的更新参数,也可以尽可能缩减存储空间,如下图所示。为了构建无损FP8优化器,作者提出了逐块量化和动态量化的量化策略,以及稳定化词嵌入层的方法。c56582f600facbb05d2df0e668a67900.png

逐块量化 Block-wise Quantization

量化的第一步需要将张量归一到[-1,1]范围内,常见的归一化需要将整个张量的缩减,但这样多GPU核心同步会带来一定的通信消耗。块级动态量化将输入张量划分为2048大小的块来降低这个代价,每个块归一化可以独立的计算,不需要在核心之间同步,提供了吞吐量。此外,它对输入张量中的异常值也有更强的鲁棒性,在逐块量化中,异常值的影响被限制在单个块上。因此,大多数比特在其他块中被有效地使用,保证了量化的鲁棒性和精确性。

动态量化 Dynamic Quantization

首先简绍一下动态树量化,动态树量化包括四部分:(1) 符号位Sign;(2)指数Exponent,使用0的数量表示指数大小;(3)标志位,表明后面是线性量化的数值;(4)线性数值。75148652a512700ac2885a2718526041.png

与固定指数和分数的数据类型不同,动态树量化可以通过移动标志位,随每个数字动态变化指数和分数的范围,从而保留更多小数位的信息。动态量化实际上就是动态树量化在优化器场景下的拓展,优化器二阶矩估计恒为正,不需要符号位,因此将符号位重新利用来拓展线性数值的表达范围。

稳定的词嵌入层 Stable Embedding Layer

词嵌入层(embedding layer)经常在模型训练的时候发生梯度溢出的情况,从而让模型不能稳定训练。稳定的词嵌入层方法通过Xavier uniform进行参数初始化并在Embedding Layer后加上层归一化操作,保证张量大致为1的方差,并且均匀分布初始化相对于正态分布初始化避免了极值的出现,保证梯度不会溢出,极大地提高了训练稳定性。

三、效果

作者在机器翻译、基于RoBERTa模型的文本预训练及其在GLUE任务上微调、图像预训练和分类任务上比较了8位优化器和32位优化器的性能表现,效果如下图所示:54668b62c94dac4687c1e8f5a69c1f21.png

8位优化器在包括翻译、文本理解和图像的7个基准数据集上相对于32位优化器均有相当甚至更优的性能指标,此外,8位优化器极大减少了内存消耗并在一定程度上提升了模型的训练速度。

此外,作者进一步通过基于模型预训练的消融实验验证了动态量化、逐块量化和稳定词嵌入层三种方法对模型效果的影响,如下图所示:8178f95b9fc8cd7ea39f5a536c5cc8e2.png

我们可以看到动态量化对整体稳定性至关重要,缺少动态量化会导致模型不能正常收敛;逐块量化对更大规模模型的训练稳定性产生了更为关键的作用;稳定的词嵌入层对8位和32位优化器都是有用的,在一定程度上提高了稳定性。

总结

8位优化器减少了内存占用,并在广泛的任务上实现了加速优化。目前Facebook提供了bitsandbytes库,两行代码即可调用8位优化器,一键实现广大“贫民”炼丹玩家小显存玩转大模型的梦,大家赶快动手试试吧~

204a20b266e0dcb5b50be69009c832d1.jpeg后台回复关键词【入群

加入卖萌屋NLP、CV、搜推广与求职讨论群

 40e1e92e6a349a10c30739f0cbe72366.png

[1] 8-BIT OPTIMIZERS VIA BLOCK-WISE QUANTIZATION https://arxiv.org/pdf/2110.02861.pdf

[2] bitsandbytes库 https://github.com/TimDettmers/bitsandbytes

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员面试金典 - 面试题 04.01. 节点间通路(图的遍历)

1. 题目 节点间通路。给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。 示例1:输入:n 3, graph [[0, 1], [0, 2], [1, 2], [1, 2]],start 0, target 2输出:true 示例2:输入:n 5, graph [[0, 1], […

签名程序集密钥文件路径

在AssemblyInfo.cs 文件中 [assembly: AssemblyKeyFileAttribute("文件名")] 文件名是以解决方案.sln文件的路径为准的相对路径转载于:https://www.cnblogs.com/hjf1223/archive/2005/09/14/236590.html

华为天才少年谢凌曦:关于视觉识别领域发展的个人观点

文 | 谢凌曦知乎最近,我参加了几个高强度的学术活动,包括CCF计算机视觉专委会的闭门研讨会和VALSE线下大会。经过与其他学者的交流,我产生了许多想法,千头万绪,便希望把它们整理下来,供自己和同行们参考。当…

程序员面试金典 - 面试题 04.03. 特定深度节点链表(BFS)

1. 题目 给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。 例: 输入:[1,2,3,…

microsoft WINDOWS 系统错误代码 [收藏]

MS Windows Error Messages Code Error Message 0 操作成功完成。 1 功能错误。 2 系统找不到指定的文件。 3 系统找不到指定的路径。 4 系统无法打开文件。 5 拒绝访问。 6 句柄无效。 7 存储控制块被损坏。 8 存储空间不足,无法处理此命…

月薪3w算法工程师日均7行代码被开除 / AI歌手入学上海音乐学院 / 天文照片被植入恶意代码...

文 | 日报君 发自 凹非寺源 | 量子位又到周四,不少人心中的「小周末」!你有没考虑下班后放松放松?劳逸结合,别忘关注这些「科技圈都在看」的新鲜事!今日大新闻月薪3.6万算法工程师,日均写7行代码被开除&…

程序员面试金典 - 面试题 04.04. 检查平衡性(二叉树高度)

1. 题目 实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7]3/ \9 20/ \15 7 返回 true 。示例 2: 给定二叉树 [1,2…

火树银花的夜晚

好些年前就想看国际音乐烟花节,但不是有事就是错过了买票的时间,这次很早就订好了票子一定要去凑个热闹~!特定定了6号希腊专场,结果看来很明智,3号那天这么大的雨,哈哈!上午去看了《神话》&…

扩散模型背后的数学太难,谷歌发论文带路

源 | 机器之心扩散模型背后的数学可是难倒了一批人。最近一段时间,AI 作画可谓是火的一塌糊涂。在你惊叹 AI 绘画能力的同时,可能还不知道的是,扩散模型在其中起了大作用。就拿热门模型 OpenAI 的 DALLE 2 来说,只需输入简单的文本…

程序员面试金典 - 面试题 04.05. 合法二叉搜索树(中序遍历)

1. 题目 实现一个函数,检查一棵二叉树是否为二叉搜索树。 示例 1: 输入:2/ \1 3 输出: true示例 2: 输入:5/ \1 4/ \3 6 输出: false 解释: 输入为: [5,1,4,null,null,3,6]。根节点的值为 5 ,但是其右子节点值为 4 。2. 解题 该题要求严格&…

2 MyWarCraftStudio v0.6版

MyWarCraftStudio v0.6版,可以查看Wow的BLP2、M2、WMO、WDL、ADT、DBC格式的文件 如题。平民程序2005.03.11放出。大家可去平民程序下载:http://blog.gameres.com/show.asp?BlogID144&column0// --- 这个Blog作者不再更新了,如果下载不了&#xff0…

我是如何从头开始写一篇顶级论文的

文 | 重剑无锋知乎源 | 极市平台关于一篇顶会论文是如何产生的这件事—且看作者为你娓娓道来,如何从一形成routine的日常科研生活中挖掘到巧妙的产出。最近完成了一篇很满意的论文,不仅整个过程愉快,回味无穷,而且真正做到了“学术…

程序员面试金典 - 面试题 05.06. 整数转换(位运算)

1. 题目 整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。 示例1:输入:A 29 (或者0b11101), B 15(或者0b01111)输出:2示例2:输入:A 1,B 2输出&am…

论文模型构建的步骤_【论文分享】AiR:具有推理能力的注意力模型框架

大家好,今天我们分享一篇来自于ECCV 2020的论文《AiR: Attention with Reasoning Capability》。这篇论文主要研究的是在视觉推理过程中,人和机器的注意力在时域上的渐进变化。论文代码​github.com一. 论文的动机现有的工作在视觉任务中,例如…

第一次Blog

没有经验请多关照转载于:https://www.cnblogs.com/oiramario/archive/2005/10/18/257414.html

这可能是中国最穷的211大学!连研究生奖学金都发不起了....

源 | 募格学术万万没想到曾经因为“穷”而登上了微博热搜榜的西北大学。最近又因为“没钱”惹的祸而闯上了风口浪尖....近日,西北大学因研究生奖学金发放问题引发关注。起因是临近开学,西北大学通知调整奖学金发放政策,不仅取消了考研新生的奖…

LintCode 1862. 给树浇水的时间(图的遍历)

1. 题目 有一棵n个节点的树,节点编号是0至 n−1,其中 0号节点是根节点,i号节点的父亲节点是father[i] 。 现在要对树浇水,把水撒到根节点上,水会顺着每一条边流下去,从 i 号节点的父亲流到 i 号节点需要 …

potainer 日志_日志系统落地:制定日志规范

我们的系统,已经接入阿里云的日志服务很长一段时间了,存了数以TB级别的日志,突然有一天,领导说,我们需要所有订单的ip信息用于审计订单的真实性,突然发现日志系统无法一次性查找到我所有需要的信息&#xf…

软件项目管理的质量保证

软件工程项目管理是一个系统工程,软件工程项目管理的主要目标是保证项目在规定时间内高质量地完成。项目管理包括了项目组开发各阶段的人员结构的配置,质量控制的实施方略,内部文档和产品文档的组织编写等多项工作,其中质量控制方…

8 月份 Github 上最火的10篇 AI 论文!

文 | 天于刀刀不晓得各位同学在看论文的时候最关注的是什么?也许是论文的创新点,或是被引用的数量,还是...是不是自带代码!重要的事说三遍!复现,复现,还是复现!(ーー゛)为了方便各位…