网站建设的参考文献英文,wordpress群站域名,建设网证书查询平台免费,用虚拟机做网站的心得体会文 | 王思若2018年GPT、BERT预训练模型的提出吹响了大模型“军备竞赛”冲锋的号角#xff0c;一场大模型的狂欢拉开帷幕#xff0c;业界强大的算力支撑起例如Megatron-Turing、Switch Transformer、悟道2.0等千亿万亿参数量模型。与此同时#xff0c;面对着超大模型训练…文 | 王思若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优化器“一个故事两行代码无限显存优化”祝您路途愉快~论文题目: 8-BIT OPTIMIZERS VIA BLOCK-WISE QUANTIZATION论文链接:https://arxiv.org/pdf/2110.02861.pdfGithub: https://github.com/TimDettmers/bitsandbytes一、优化器遇到量化的故事随着Transformer模型不断scale参数Transformer家族迎来了110亿参数量的T5,1750亿参数量的OPT,1760亿参数量的BLOOM......,这些开源模型给了科研人员更多的可能去进一步探索大模型未知的潜力。但尴尬的是8张80GB A100依然不足以对T5模型进行微调显存又双叒叕爆掉了。实际的境况比你想的更加糟糕仅仅对BLOOM-176B模型进行推理就需要8张80GB的A100如果想要进一步的对模型进行微调至少需要72张我们不禁要问模型训练时是谁占据了大量的显存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从而达到压缩参数的目的一般来讲为了更好的聚类首先会将参数归一化到某个区间范围让不同张量值的量级保持一致。这是量化操作的一种方案反过来从量化数值转化为原始数值的过程称为反量化量化可以有效降低内存消耗和计算强度但也带来了严重的精度损失问题。▲Deep Compression当优化器遇到了量化思路很简单但是优化很难FP16优化器已经很不稳定但Facebook直接使用FP8优化器直接减少38%的显存占用需要更少的模型训练时间但拥有和FP32优化器完全相当的效果。二、三个方法构建无损FP8优化器FP8优化器会以低精度的状态存储在显存中在参数更新时会反量化为FP16的高精度状态从而既能够高精度的更新参数也可以尽可能缩减存储空间如下图所示。为了构建无损FP8优化器作者提出了逐块量化和动态量化的量化策略以及稳定化词嵌入层的方法。逐块量化 Block-wise Quantization量化的第一步需要将张量归一到[-1,1]范围内常见的归一化需要将整个张量的缩减但这样多GPU核心同步会带来一定的通信消耗。块级动态量化将输入张量划分为2048大小的块来降低这个代价每个块归一化可以独立的计算不需要在核心之间同步提供了吞吐量。此外它对输入张量中的异常值也有更强的鲁棒性在逐块量化中异常值的影响被限制在单个块上。因此大多数比特在其他块中被有效地使用保证了量化的鲁棒性和精确性。动态量化 Dynamic Quantization首先简绍一下动态树量化动态树量化包括四部分(1) 符号位Sign(2)指数Exponent使用0的数量表示指数大小(3)标志位表明后面是线性量化的数值(4)线性数值。与固定指数和分数的数据类型不同动态树量化可以通过移动标志位随每个数字动态变化指数和分数的范围从而保留更多小数位的信息。动态量化实际上就是动态树量化在优化器场景下的拓展优化器二阶矩估计恒为正不需要符号位因此将符号位重新利用来拓展线性数值的表达范围。稳定的词嵌入层 Stable Embedding Layer词嵌入层embedding layer经常在模型训练的时候发生梯度溢出的情况从而让模型不能稳定训练。稳定的词嵌入层方法通过Xavier uniform进行参数初始化并在Embedding Layer后加上层归一化操作保证张量大致为1的方差并且均匀分布初始化相对于正态分布初始化避免了极值的出现保证梯度不会溢出极大地提高了训练稳定性。三、效果作者在机器翻译、基于RoBERTa模型的文本预训练及其在GLUE任务上微调、图像预训练和分类任务上比较了8位优化器和32位优化器的性能表现效果如下图所示8位优化器在包括翻译、文本理解和图像的7个基准数据集上相对于32位优化器均有相当甚至更优的性能指标此外8位优化器极大减少了内存消耗并在一定程度上提升了模型的训练速度。此外作者进一步通过基于模型预训练的消融实验验证了动态量化、逐块量化和稳定词嵌入层三种方法对模型效果的影响如下图所示我们可以看到动态量化对整体稳定性至关重要缺少动态量化会导致模型不能正常收敛逐块量化对更大规模模型的训练稳定性产生了更为关键的作用稳定的词嵌入层对8位和32位优化器都是有用的在一定程度上提高了稳定性。总结8位优化器减少了内存占用并在广泛的任务上实现了加速优化。目前Facebook提供了bitsandbytes库两行代码即可调用8位优化器一键实现广大“贫民”炼丹玩家小显存玩转大模型的梦大家赶快动手试试吧~后台回复关键词【入群】加入卖萌屋NLP、CV、搜推广与求职讨论群 [1] 8-BIT OPTIMIZERS VIA BLOCK-WISE QUANTIZATION https://arxiv.org/pdf/2110.02861.pdf[2] bitsandbytes库 https://github.com/TimDettmers/bitsandbytes