大模型相关问题
大模型问题汇总
-
llama 2注意力机制,手写分组注意力机制
- GQA分组注意力机制(为了加速模型训练和推理,MHA每个head都需要一个QKV矩阵,于是有了将K,V矩阵分组,几个head共用一个KV矩阵,Q矩阵不变)
- MQA 则是所有的head共用KV矩阵
-
langchain介绍,主要组件
- langchain主要包含langchain,langchain-core,langchain-community,LangServe,LangSmith
-
langchain: 包含ModelIO,Retrieval,Agent,Chains,Memory,Callbacks
- ModelIO主要是和LLM进行交互
- Retrieval主要是和外部数据检索交互
- Agent提供工具的代理能力
- Chains提供调用序列抽象能力
- Memory存储会话状态和记录
- Callbacks回调监控、日志
-
Langchain-community: 提供第三方集成的功能,譬如文档载入、分割等
-
langchain-core: 包含langchain的基本抽象已经LCEL(Langchain Expression Language)
-
LangServe: 使用了FastAPI提供服务能力,有server和client端侧的能力
-
LangSmith: 提供测试、开发、监控的平台
-
- 具体详细介绍http://shiyanjun.cn/archives/2613.html
- langchain主要包含langchain,langchain-core,langchain-community,LangServe,LangSmith
-
位置编码,几种位置编码的异同
-
绝对位置向量编码(1...N),扩展性差,很难外推,泛化性不好
-
正余弦标准位置编码(偶数正弦,基数余弦编码)
-
; -
RoPE 旋转位置编码(QK进行乘法的时候,会将绝对位置转化成相对位置,可以理解是一种位置编码的转换)
详细介绍:https://blog.csdn.net/v_JULY_v/article/details/134085503- 具体实施步骤:
- token编码向量后+pos编码向量,使用Q,K矩阵计算出
, 向量,此时向量携带绝对位置 - 然后对
, 应用旋转矩阵,具体做法针对向量元素,每2个一组进行旋转操作,也就是乘以旋转矩阵 ,其中d对应的向量维度 - RoPE有相应的局限,无法聚焦远处;attention score在随着distance很大时候会很小
- token编码向量后+pos编码向量,使用Q,K矩阵计算出
-
ALiBi(Attention with Linear Biases) 不和标准transformer那样,在embedding层添加位置编码,而是QK^T结果后添加一个静态的不可学习的偏置项(说白了,就是数值固定)
, ,其中n是head的索引
-
-
PPO相关内容
- 强化学习中的动作价值函数和状态价值函数互推和递推关系,如下图所示
- 两者可以递推,也能互推
- 如何求解最优策略
- 有递推公式,可以使用DP(动态规划),拆解成小问题迭代
- MC蒙特卡洛法,统计模拟法,通过大量的随机样本来估算或近似真实值,需要采样完整的路径
- 时序差分,
,TD误差,也叫一步时序差分法; 也叫单步回报 - TD和MC不同,不需要等待交互最终结果,才可以更新
- SARSA(0) 单步回报
- QLearning 动作价值函数
- 策略梯度(直接对策略分布进行参数化)
- 参数为
的策略 接受状态s,输出动作概率分布,在动作概率分布中采样动作,执行动作(形成运动轨迹 ),得到奖励r,跳到下一个状态 - 使用策略
收集一批样本,然后使用梯度下降算法学习这些样本,不过当策略 的参数更新后,这些样本不能继续被使用,还要重新使用策略 与环境互动收集数据 - 为了避免采样的数据只能使用一次,需要使用重要性采样;使用另外一个分布和环境交互产生数据
- 为避免奖励总为正以及奖励方差偏大问题,
有正有负,而且减少奖励方差 b一般可为平均奖励 或者状态价值函数 ,当为状态价值函数时候,Advantage Actor-Critic(A2C)优势演员评论家模型进行策略梯度优化时候, ,是对一个动作在平均意义上比其他动作好多少的度量,刚好状态价值可以理解为平均的动作期望 - 基于信任区域的TRPO:加进KL散度解决两个分布相差大或步长难以确定的问题
- TRPO使用KL散度作为约束条件,没放在目标函数,所以计算量很大
- PPO将KL散度约束条件加入到约束条件
- 参数为
- 强化学习中的动作价值函数和状态价值函数互推和递推关系,如下图所示
-
RLHF具体流程,包含几种模型
- 包含3个步骤,4个模型(actor,critic,SFT,reward)四个模型
- 3个步骤:
- 使用人类的问答数据去微调预训练模型,形成SFT
- 通过人类偏好数据训练RM奖励模型
- 通过奖励模型以及PPO策略优化策略模型
- 通过PPO-clip目标函数,重写InstructGPT训练的目标函数
其中
- 具体四个模型作用如下:
- 总结一下
- 采样一批prompt数据经过actor模型,获取response,这样就能获取actor模型的logits,也就是旧策略预估
- 通过旧的critic模型获取旧的values(旧的价值回报)
- 通过reward模型,获取奖励值
- [seq,action_logits,adv,values,reword] 经验数据 expbuf数据
- 根据上面获取经验数据,再细分批次去迭代actor和critic网络
- actor评论家模型,基于优势函数adv(高于平均回报动作鼓励,低于则惩罚)不断去更新策略参数
- critic评论家模型(试图减少预期回报和经验回报returns的差异,从而更新网络),相当于评论模型不断优化评估回报的标准,是的模型预期回报越来越符合经验回报
- 最后优化好的actor(策略模型)就是符合人类偏好的
-
encoder-only,decoder-only,encoder-decoder代表模型
- encoder-only bert以及bert变种模型
- decoder-only llama2等一些大模型
- encoder-decoder 模型有T5模型,GLM第一代模型
-
数据并行和模型并行
-
模型并行(TP),主要是将模型tensor切分放到不同GPU上
-
- MLP层的数据并行:
将A先按列进行切分,这样每块GPU获取到的xA'相当于行切分了,否则结果要concate在一起; 如果输入xA'按照行切分了,那B也要按照行切分,最终各个GPU结果merge就行; - self-attention: 本身各个head头操作就是并行,只需要把各个head放到对应GPU上,最后cat在一起即可
- MLP层的数据并行:
-
Pipeline Parallelism 流水线并行,也是模型并行的一种
-
-
只需要减少bubble占比,batch拆分的更细
-
数据并行(模型小、数据大则适合采用数据并行的训练方式),DistributedDataParallel,简称DDP,各GPU复制一份模型,数据则切分到不同机器上,然后各GPU进行梯度计算,最后汇总梯度再反向传播。数据并行因其易用性,得到了最为广泛的应用。
-
deepspeed针对数据并行的Zero方案,大规模训练中的显存占用可以分为 Model States 与 Activation 两部分,而 ZeRO 就是为了解决 Model States 而诞生的一项技术, Model States分成:
- Optimizer States
- Gradient
- Model Parameter
-
ZeRO-1:分割 Optimizer States,ZeRO-2:分割 Optimizer States 与 Gradients,ZeRO-3:分割 Optimizer States、Gradients 与 Parameters
-
-
-
-
p-turing,lora微调方法介绍,与传统finetune区别
- p-turing 讲prompt进行参数隐式微调;一般会通过训练一些隐式的token(也有对应的emb参数),有些可能会通过MLP+LSTM训练拿到emb
- lora则是通过外挂一个低秩的矩阵进行参数微调,一般在nn.linear线性矩阵层,attention矩阵参数
- Qlora则是quant+lora
- 一般量化针对比较稳定的参数,譬如nn.linear层参数;激活层参数有较大值,量化可能会影响精度
- 量化可以降低显存占用,加快运算速度
- quant: float -> int8 (先将矩阵参数float映射到int8;计算【forward,backward】的时候再反量化回去);所以量化的好坏取决于映射函数的压缩比以及反量化解码效率
- 譬如int8量化策略:
,这样将量化到区间[-127,127]之间
-
显存不够一般怎么解决
- 训练:
- 量化参数,主要量化nn.linear线性层参数
- Zero3优化数据并行
- FlashAttention
- PageAttention
- 训练:
-
主流大模型的loss了解过吗?
- 参考speedchat函数损失,主要
,参考第5点RLHF训练流程
- 参考speedchat函数损失,主要
-
deepspeed介绍,使用情况
- 微软开发的并行训练框架,为训练大规模模型提供了一系列优化工具和技术,包括内存优化、并行训练、混合精度训练等
-
领域模型continue Pretrain数据选取?
- 混合领域与通用数据:在进行领域特定微调时,加入部分通用领域的数据,确保模型在特定领域精细化的同时,不丧失对其他领域的认知能力。
- 多领域微调:在微调过程中,轮换或交替使用来自不同领域的数据集,以保持模型的多样性,减少单一领域数据对模型的过度影响。
- 高质量数据:选择文本流畅、结构清晰、信息准确的高质量数据源。低质量数据(如拼写错误多、语法混乱)可能会导致模型学习到不良的语言模式。
- 内容多样性:引入不同主题和类型的文本,如科技、金融、医疗、法律等,以提升模型的通用能力和在不同任务上的适应性。
- 多样的数据来源:选取多种数据来源可以提高模型的鲁棒性。常见的数据来源包括维基百科、新闻网站、学术文章、论坛、社交媒体等。
-
领域模型训练后通用能力下降,怎么缓解幻觉
- RAG
- 领域数据混合一些通用数据进行微调(p-turning或LORA等)
-
指令微调、如何选择、设定、优化不同的超参数(具体实践)
- batch_size,lr,Zero开启和关闭,epoch,优化器选择
-
指令微调如何选择最佳指令策略,以及该指令对模型的效果影响(更多偏大模型训练实践)
- 精心设计指令模板,使其清晰、具体,减少模型的理解偏差
- 实验不同指令模板,观察其对模型性能的影响,基于验证集或开发集的结果,调整指令的复杂度和结构,找到最佳的指令设计
-
llama,glm,bloom等大模型在数据处理,训练细节以及模型结构的优化点,包括但不限于注意力机制,归一化,嵌入层
- llama采用decoder-only结构,使用RMSlayernorm进行归一化,同时位置编码采用了RoPE,llama long版本更是采用PI(位置插值)进行外推扩展,注意力机制使用了GQA分组注意力机制,KV分组共享矩阵,Q矩阵不共享
- GLM采用encoder-decoder结构,使用post-norm归一化,注意力机制使用MQA,KV矩阵共享1个,Q不共享;同时使用RoPE位置编码
- bloom不清楚
相关文章:
强化学习:https://blog.csdn.net/v_JULY_v/article/details/128965854
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)