数据蒸馏&Scaling Law&提高RAG准确率&大模型训练流程&显存估算
一、数据蒸馏
数据蒸馏是一种从大规模原始数据集中提取核心信息,生成小规模高质量合成数据集的技术,旨在用这些合成数据替代原始数据用于模型训练,从而提升效率、降低成本或保护隐私。
1.1 性能匹配
- 原理:优化合成数据,使模型在其上训练的梯度更新方向与在真实数据上一致
1.2 参数匹配
- 核心思想:让合成数据和真实数据训练同一网络后,得到的参数尽可能一致
1.3 分布匹配
- 原理:匹配合成数据与真实数据在特征空间的统计分布(如均值、协方差)
其中,参数匹配最为常见最为有效。性能匹配次之,其内存开销太大。分布匹配最差,可能难以捕捉分布差异,影像蒸馏效果。
二、Scaling Law
随着AI技术的发展,出现了三条不同的法则来描述不同方式下计算资源的应用如何影响模型性能。它们分别是「预训练Scaling法则(Pretraining Scaling Law)」、「后训练Scaling法则(Post-Training Scaling Law)和推理阶段Scaling法则(Test-Time Scaling Law,又称Long Thinking)」。这三条法则共同反映了AI在不断丰富的复杂应用场景中,如何采用不同技术方式使用额外计算资源以提升表现。
2.1 预训练Scaling法则
预训练Scaling Law是AI发展的基础法则。「它证明了通过扩大训练数据集规模、增加模型参数数量和计算资源,可以实现模型性能的提升」。数据、模型规模、计算能力这三要素彼此密不可分。
2.2 后训练Scaling法则
「后训练技术能够进一步提升模型针对特定应用的适应性与相关性」。后训练Scaling法则认为,通过微调、剪枝、量化、蒸馏、强化学习和合成数据增强等技术,「可以进一步提升预训练模型的计算效率、准确率或领域适应性」:SFT(监督微调),模型蒸馏,强化学习(DPO,RL让模型对齐人类喜好),Best-of-n采样(生成多个模型输出,选择根据奖励模型评分最高的结果。开大内存)。
2.3 推理Scaling Law
「强调通过动态调整奖励机制来提升模型的推理能力,而非传统的通过增加模型参数或训练数据。」
这一推理能力让模型能探索不同问题解决方案,分解复杂需求,并在推理过程中向用户展示“解题步骤”。「研究发现,当AI模型面对需要多步推理与规划的开放式问题时,推理阶段Scaling显著提升了回答质量。」类似于CoT思维链,让大模型把思考过程写出来,输出的推理过程就像草稿纸一样,因为大模型是自回归模型,输出的每一个词都会帮助生成下一个词,所以让他把步骤写出来就能提准确率。
三、RAG准确率提高
第一,在做token切断的时候,不要按照固定token截断,有时会丧失重要的语义信息,而是应该用NLP模型检索句子边界,识别段落结构,并增加重叠窗口,这样可以让模型在分词截断更优秀。
第二,在查询处理的时候,有时模型会改写用户的提问以便于得到更好的回答,但是有时候对于用户提问的改写会改变用户的意思,这个时候的回答并不准确,应该增加一个语义校验的阶段,加一个相似度的计算,如果改写前后的embedding相似度小于某个数值,直接舍弃。
第三,混合检索机制,对于向量检索和关键词检索,有各自的评分机制,不能单纯的相加,否则没用,应使用,LambdaMART统一打分相加。
四、大模型训练流程
第一步,数据清洗,大模型需要以千亿记的数据,去除垃圾数据,去重,保证数据配比,也就是保证其中数学逻辑推理的比重。
第二步,预训练,注入世界知识,做Next-token预测;Scaling Law法则发力训练模型的能力,模型的能力天花板是在预训练这一步确定的,后面的SFT和RLHF只是提高它的表现,不能提高它的本质。
第三步,指令微调SFT,通过选择基座模型在专业领域比如coding、金融,做到更聪明,更专业,知道要回答什么问题,这个阶段的数据集要求质量极高。另外还有提示词工程,通过内嵌几个高质量例子,极大提高模型表现。
第四步,偏好对其(RLHF,DPO),确保大模型的回答更符合人类的喜好,抑制大模型的幻觉问题,确保回答有用且无害。
五、显存估算
主要从推理和训练两个方面来估算显存,以7B模型为例。
5.1 推理阶段的显存估算
显存主要分为权重占用和KV Cache占用,7B的模型的权重占用显存是14GB,大模型内部一般按照BF16来存储每一个数值,也就是两个字节,2 * 7 = 14GB。
关于KV Cache,对于1个tokne,公式为2 * L * H * 2,第一个2是K和V,蝶舞人个L是Layer,一般7B模型有32层,H就是Hidden size,一般4096维度,最后一个2是2字节,所以一个token需要0.5MB,如果一个任务有4096个token,那就有2GB,加入batch size为2,那就是4GB。
总结,对于7B模型推理大概需要18GB左右的显存。
5.2 训练阶段的显存估算
大模型分为静态权重和动态权重,静态权重就包括,权重,梯度,优化器;动态权重包括激活值。
先看静态权重,对于7B模型,权重为14GB,梯度也为14GB,一个权重对应一个梯度,优化器用Adam多,Adam中有三个部分,权重,一阶动量,二阶动量,且一切以32位来计算,所以三个部分都是28GB,加一起112GB的权重。大致的直觉对应7 * 16 = 112。
对于动态权重,动态显存就是激活值,我们把数据喂给网络,前向传播,但后向传播更新的时候我们要用到激活值,激活值也必须被保存,对于4096token长度的任务,占用的激活值大概是40GB。合计152GB的显存。
可以用梯度检查点的方法减少激活值显存的占用,只存储一半的激活值,另一半的激活值在反向传播时重新计算。
六、特殊情况显存估算
6.1 强化学习
对于PPO来说,包含actor,critic,reference,reward,模型,其中actor是我们要训练的模型,critic是和要训练的模型一样,两个模型直接显存翻倍,112变224,referencr和reward模型只需要实时显存每个需要14GB,倒是不大。
6.2 LoRA
大概更新6/10000,到1/1000,实际上对于7B模型大概只需要更新7MB的参数,除了模型权重不会被降低,其余的梯度和Adam的显存占用,都变为了几十MB。推理阶段保持不变。
6.3 MoE
专家模型,以QWEN - 32B - A3B举例,整个模型32B,但每次推理只会激活3B的参数值。MoE不会砍显存,所有的32B参数都要在显存中。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)