三方网优转行

职场   2024-11-12 16:10   江苏  

最近送书,结识一个三方网优转行,他讲自己现在主要做在做Agent的东西,我在的项目就是做大模型的,运营商自己的大模型项目,自己在AI中心,做的就是网优的产品。

他谈到自己转行,之前做替换加班太狠了、想转行,做手机测试去了,中间学了阵代码。现在做的就是干掉三方网优的活,做智能路测平台。

之前在京城做手机测试这块,不光是芯片,还有新手机出场标准测试,手机厂家自己的投诉,好多类。

去年做的,税前8K(公积金是双边1400块钱,自己交700块钱),满额五险一金,出差每天补助100,加班是没有加班费的,但是凑够8小时调休一天,这一点网优强太多了。有的人在外边一直出差,一个月就额外3000。只要出你在的城市就算出差,有的时候测高铁来回也算一天出差。

公司不安排住宿,自己租房花一千块,住在6环外,因为不用坐班,有活就去干活,干完活就回家,晚上可能会上传log,也不需要打卡。

优点:比网优轻松,没有压力,只需要测试,分析是厂家做的,比较正规 加班有调休,出差有额外补助,期间交通住宿全报,全国都有,相当于旅游了,可以到处打卡,基本都是2人一组,工作氛围好。

缺点:全国跑时间长也会累、各个项目来回切换、不是只做一个项目或者一款产品(手表产品也会有)报销慢、标准走oa、流程繁琐、报销周期半年左右、离职了也不结算、正常走流程、后期因为有一个月没有活公司让请假、没有调休就扣工资、这点很坑、之前是没活去公司坐班、因为这点我才想走的、后来我走了打听到制度又改了、没活去公司坐班了。

全国都可以去,而且都是年轻人或者实习生,男女都有,氛围很轻松,没有客户压力,按时交付测试log就好。

我们直接外场测试外包了,去驻场的也是实验室测试 真正的东西都是厂家自己做的。雇佣模式也是厂家招标,我们投标,但是不是长期的

我因为有测试经验所以工资是这样,在那里边你能看懂信令就是大佬了。正常实习生是220一天,上一天班一天钱。入职后是6000左右,要是有经验的去7K起,学历基本都是大专,本科我知道的就一个。

很多网优想转行到有前景的行业,主要是因为自己无法判断行业的前瞻性!!!




为了感谢通信人长期以来的支持,前景理论公众号联合机械工业出版社华章分社通过本次活动送书6本大语言模型:原理、应用与优化 ! ! !


本书适合网优工程师的工作者、以及想转行大模型训练的网优工程师们、以及前景理论公众号的读者。


留言分享您对在大模型行业的一些建议或看法不少于50字),入选留言点赞最多的前5名和知识星球VIP用户1名(公众号只支持100条留言,所以一定要趁早), 我们会赠送价值99元的大语言模型:原理、应用与优化1本(大陆地区包邮、港澳台除外)。


截止时间:2024年11月19日中午12:00,禁止技术手段刷赞,发现取消资格。

导读:在训练大规模模型时,除了采用分布式训练降低单节点内存使用之外,还有一些其他的内存优化策略。

首先我们分析一下训练过程中内存的开销,主要可分为以下4部分

  • 模型参数:神经网络权重。

  • 优化器状态:与优化算法相关,不同算法需要不同的中间变量存储。

  • 中间结果:前向计算得到的激活中间结果,存储待反向传播时计算梯度使用。

  • 临时存储:模型实现中的其他计算临时变量,用完后尽快释放。

其中,模型参数与临时存储在训练和推断中都需要,而优化器状态和中间结果仅在训练中使用。

本文将介绍的几种显存优化方案从模型训练本身入手,对上面一个或多个部分进行优化:

  • 混合精度训练可以优化模型参数、优化器状态和中间结果存储

  • 梯度检查点和梯度累积主要优化中间结果存储

  • FlashAttention是专为处理Transformer中的注意力层内存限制而设计的

1混合精度训练

更大的模型需要更多的计算和存储资源进行训练和推理,而模型性能由3个因素决定:存储带宽、算术带宽和延迟

降低精度可以解决前两者的瓶颈:用更少的比特存储同样参数量减少存储带宽压力,低精度计算也会带来更高的吞吐。

混合精度训练(Mixed Precision Training)可以在尽量不损失模型精度的条件下,加速模型训练并减少显存占用。同时,它也不需要改变模型结构和参数,是大模型训练的重要技术之一。

现代深度学习系统默认使用单精度(FP32)格式进行训练。所谓混合精度训练,并不是简单地将模型参数和激活精度降至半精度(FP16),这么做可能导致严重的模型精度损失或参数溢出问题。因此,混合精度训练主要解决的问题是如何在不损失模型精度的条件下使用FP16进行训练。具体来说需要结合3项技术:维护一套单精度的模型权重、缩放损失和使用FP32进行加法累积。

先回顾半精度浮点数FP16的定义,IEEE754标准定义了半精度浮点数的格式:

  • 符号位:1bit。

  • 指数位宽:5bit。

  • 尾数精度:10bit。

单精度与半精度浮点数格式对比如图1所示,与单精度浮点数相比,半精度浮点数的指数位宽由8bit缩为5bit,尾数精度由23bit缩为10bit。


图1 浮点数定义格式

我们具体介绍混合精度训练的关键技术与细节,主要包括母版权重复制(Master Copy of Weight)、损失缩放(Loss Scaling)与精度累加(Precision Accumulated)三部分。


1. 母版权重复制


首先,需要额外存储一套FP32模型权重,即母版权重,而中间结果如激活和梯度都存储为FP16格式。

图2对神经网络中的一层的训练过程进行示意。对于一层神经网络,在每轮迭代中,先将母版权重复制成FP16格式权重(float2half),然后参与前向计算和后向计算,从而降低一半的存储和带宽开销。最后将FP16的权重梯度更新至母版权重,一轮迭代完成。

图2 混合精度训练过程示意

存储FP32的母版权重有两个原因:

  • 第一,待更新的梯度值非常小,以至于FP16无法表示。经验统计,约有5%的权重更新值小于,此时更新梯度归零,影响模型精确度。

  • 第二,权重值与权重更新值之间的差异过大(两者比值大于2048)时,浮点数计算右移对齐可能导致权重更新值归零。
这两种归零情况都可以通过使用FP32母版权重进行参数更新来解决。


2. 损失缩放


虽然存储FP32参数复制会带来一些额外的存储开销,但考虑到训练过程中主要的存储开销来源于较大的批次和用于反向传播的中间结果,而这些激活值使用FP16进行存储,所以总体存储开销还是可以降低大约一半

如图3所示,统计Multibox SSD detector network训练中所有神经网络层的梯度值,其中,梯度为0的激活值约占67%,单独表示。显然,大部分的指数表示都偏左(偏小),超出了FP16的最小表示范围,因此会归零。


图3 Multibox SSD detector network训练梯度值柱状图

考虑到梯度取值都很小,一种简单、高效的做法是将它们在前向计算时扩大数倍,而在反向传播后更新参数前再同比缩小,从而减少计算精度损失,这种方法被称为损失缩放。

缩放的倍数选择对结果影响不大,只要缩放后的计算不产生溢出就不会对模型带来负面影响。在计算过程中如果发现有溢出,直接将本次迭代忽略即可。

对于图3中的示例,将在FP16中变为0的部分缩放至FP16可表示区域即可,即缩放倍数为8(将平移至)即可达到与FP32训练相同的模型准确度,这在一定程度上说明当梯度小于时,这些更新对模型精度的影响已然微乎其微,而处于之间的梯度更新对最终结果有显著影响。


3. 精度累加


最后,点乘和向量元素累加归约算术操作(如批归一化和Softmax)需要用FP32格式,而在写入内存前转换成FP16,可以减少模型精度损失。在训练过程中,这些运算的瓶颈是存储带宽,变为FP32后虽然算术操作速度本身变慢,但对总体的训练速度影响不大。

表1对混合精度训练的性能进行了对比,实验证明,混合精度训练对模型精度的影响不大,但可以减少约一半的显存开销

表1 混合精度训练性能对比

模型

基线

混合精度

AlexNet

56.77%

56.93%

VGG-D

65.40%

65.43%

GoogleLeNet(Inception v1)

68.33%

68.43%

Inception v2

70.03%

70.02%

Inception v3

73.85%

74.13%

Resnet50

75.92%

76.04%

2梯度检查点


前文提到显存的主要开销之一是反向传播所需要的中间结果,梯度检查点(Gradient Checkpointing)的主要优化点就在于此。梯度检查点是个典型的用时间换空间节省显存开销的方案,可以将训练的显存开销由降至

训练过程中显存的开销主要是模型参数、参数梯度、优化器状态及中间结果。大多数算子都依赖前向计算的中间结果进行反向传播,因此我们需要的显存存储这些前向中间结果。

为了节省显存开销,梯度检查点仅保留少量前向计算结果,而在反向传播需要这些结果时,再进行一次前向计算将中间结果恢复。更具体来说,将神经网络切分成几段,仅记录每段的输出而扔掉在此段中的所有中间结果,这些丢弃的中间结果在反向传播时重新计算并恢复。对于前馈神经网络,梯度检查点技术可用牺牲20%训练时间的代价,训练10倍于原始方案的模型,显著降低显存的占用。

图4所示为五节点前馈神经网络,可在前向计算过程中仅保留1、3、5三个节点的中间结果,而在反向传播需要时,通过前向计算恢复2(最近节点为1)、4(最近节点为3)节点的中间结果。


图4 五节点前馈神经网络


图5展示了使用梯度检查点技术后,在GTX1080上训练不同规模ResNet所用内存和训练时间的变化,训练过程中的峰值显存使用显著降低,代价是训练时长的些许增加。

图5 应用梯度检查点后,在GTX1080上训练不同规模ResNet所用内存和训练时间对比

3梯度累积

在训练模型时,不同的批次大小对最终结果的影响很大。研究证明,更大的批次可以使训练更加高效,模型性能更好。但更大的批次占用更多显存,GPU显存的硬件限制导致批次的扩展受限。

为解决此问题,梯度累积(Gradient Accumulation)应运而生,通过累积多个批次的梯度,可将一个大批次分割成多个迷你批次,从而降低每次计算的显存开销

如前所述,训练时显存占用主要由模型参数、优化器状态、中间结果和临时存储构成。随着批次增大,更多样本的计算结果如激活需要在前向计算过程中存储,也就导致中间结果所需显存增加。可以认为,激活所占存储与批次大小成正比。

为了突破显存的限制,还是采取分治的思想切分批次,有两种不同的实现方式:梯度累积或数据并行。

梯度累积是在同一GPU上串行计算多个迷你批次的结果,最后将它们的梯度累加并更新模型参数。具体来说,梯度累积修改了训练的最后一个步骤,原始实现是在每个批次计算完毕后都更新模型参数,梯度累积则是继续进行下一个批次,并将梯度累加,在多个批次执行完毕之后,将累加后的梯度一并更新模型参数。

如图6所示,假设全局批次有128个样本,将原本的一个批次分为4个迷你批次后,每个迷你批次含有32个样本,每个批次仅需要对32个样本进行梯度计算,对4个迷你批次计算完成后,将累积的4个梯度一并更新模型参数即可。

图6 梯度累积示意


数据并行则是一种分布式训练架构,用多个GPU分别训练更小的批次,在每个迭代的末尾将梯度归约,更新模型参数。

对比图6与图7可以发现,数据并行与梯度累积的主要区别在于切分的维度不同,数据并行按空间切分,将迷你批次放置于不同GPU上,而梯度累积按时间切分,将迷你批次分时计算。

图7 数据并行示意


显然,数据并行可以加速训练,梯度累积会消耗更多的训练时间。但是数据并行与梯度累积可以结合使用,用多个GPU并进行梯度累积,更高效地训练大模型。

值得注意的是,由于某些网络层如批正则(Batch Normalization)将会在迷你批次中计算而非在原始批次中计算,梯度累积的结果可能与原始训练的结果稍有不同。

4FlashAttention

 

FlashAttention是专为处理Transformer中的注意力层内存限制而设计的。

在原始的Transformer模型中,由于注意力层的内存需求与序列长度呈平方增长()关系,大模型受到了计算和存储的双重制约。

FlashAttention通过减少GPU高带宽内存和GPU片上SRAM之间的内存读写次数,解决了Transformer在处理长序列时速度较慢和内存占用过高的问题。

如图8所示,从访问速度来看,GPU SRAM优于GPU高带宽内存(High Bandwidth Memory,HBM),而GPU HBM又优于CPU内存。

图8 内存访问速度与大小层次示意

基于此观察,FlashAttention通过将注意力矩阵分解为多个小块,将内存读写次数降至最低。具体来说,FlashAttention将注意力矩阵分解为多个子矩阵,并将每个子矩阵存储在GPU SRAM中。这样,当计算注意力矩阵时,仅需要在GPU HBM和GPU SRAM之间进行少量的内存读写操作,从而大大减少了内存读写次数,提高了计算效率。

与传统实现不同,FlashAttention在前向传递期间避免存储大型注意力矩阵,而在反向传播期间在SRAM中重新计算(思路与梯度检查点类似),从而显著降低了内存占用,同时为长序列计算带来了显著的加速(2~4倍)。

此外,FlashAttention还具有IO感知能力,它可以根据不同的硬件配置和数据集特征,自动调整注意力矩阵的分解方式,以最大程度地减少内存读写次数。这使得FlashAttention可以在不同的硬件平台上实现高效的计算,并且具有更好的可移植性。该算法不仅实现了更快的Transformer训练,而且在模型性能上也优于现有的注意力方法。

5四种策略的适用情况

 

  • 混合精度训练通过使用半精度浮点数(FP16)替代传统的单精度浮点数(FP32),减少了内存占用,同时引入了母版权重复制、损失缩放和精度累加等机制来保证模型精度不受影响。

  • 梯度检查点技术则通过在反向传播时重新计算中间结果来节省内存,尽管这会增加一定的计算时间。

  • 梯度累积允许将大批次划分为多个小批次进行计算,从而降低单次计算的内存需求,适用于显存受限的情况。

  • FlashAttention专注于解决Transformer模型在处理长序列时遇到的内存和计算效率问题,通过将注意力矩阵分解为多个小块并利用GPU的快速存储,减少了内存读写次数,提高了计算效率。


这些内存优化策略各有侧重,能够有效应对大规模模型训练中面临的内存挑战,提升训练效率和模型性能。

作者简介:

苏之阳(博士),现任微软资深应用科学家,小冰前研发总监,专注于搜索排序算法和对话系统研发,曾主导了小冰智能评论和小冰框架等项目的架构设计和开发,在大语言模型的研发与应用方面具有丰富的经验。

王锦鹏(博士),致力于自然语言处理和推荐系统的研发,拥有在微软亚洲研究院等科技公司担任关键技术岗位的经验,参与了Office文档预训练、推荐大模型等多个重要项目的研发和优化工作。

姜迪(博士),拥有十余年工业界研发和管理经验,在雅虎、百度等知名互联网企业工作期间,为企业的多个关键业务研发了核心解决方案。

宋元峰(博士),曾就职于百度、腾讯等互联网公司,在人工智能产品开发领域拥有丰富的经验,研究涉及自然语言处理、数据挖掘与可视化等方向。

文章来源:IT阅读排行榜

本文摘编自《大语言模型:原理、应用与优化》,苏之阳、王锦鹏、姜迪、宋元峰 著,机械工业出版社出版,经出版方授权发布,转载请标明文章来源。

延伸阅读

大语言模型:原理、应用与优化

苏之阳 等著

微软等大厂的4位博士撰写

为研究人员和开发者提供系统性参考

零基础理解大模型、构建大模型和使用大模型

内容简介:

这是一本从工程化角度讲解大语言模型的核心技术、构建方法与前沿应用的著作。首先从语言模型的原理和大模型的基础构件入手,详细梳理了大模型技术的发展脉络,深入探讨了大模型预训练与对齐的方法;然后阐明了大模型训练中的算法设计、数据处理和分布式训练的核心原理,展示了这一系统性工程的复杂性与实现路径。

除了基座模型的训练方案,本书还涵盖了大模型在各领域的落地应用方法,包括低参数量微调、知识融合、工具使用和自主智能体等,展示了大模型在提高生产力和创造性任务中的卓越性能和创新潜力。此外,书中进一步介绍了大模型优化的高级话题和前沿技术,如模型小型化、推理能力和多模态大模型等。最后,本书讨论了大模型的局限性与安全性问题,展望了未来的发展方向,为读者提供了全面的理解与前瞻性的视角。

  • 本文来源:原创,图片来源:原创

  • 责任编辑:王莹,部门领导:宁姗

  • 发布人:白钰

前景理论
存在只为分享 . . .
 最新文章