大模型相关常见问题概念
背景
有些东西,名词,经常听见,也大概知道是什么意思,但是就是总记不住,列个case。
幻觉
**如果AI模型所生成输出没有任何已知事实的支持,幻觉便会发生。**产生与训练数据不一致或与输入无关的输出的模型。
简而言之:一本正经,胡说八道
包括RAG在内的自回归模型中幻觉的不可避免性可以最小化,但不能完全根除。
根据来源分类
内在幻觉:生成的内容与输入上下文不一致
外在幻觉:生成的内容不能被证伪
例如:明天会下雨
内在幻觉:明天会晴天
外在幻觉:明天好好玩呀(不知道真假)
为什么会幻觉
预训练数据本身就有矛盾,错误的信息
大模型本身是一个概率模型,幻觉理论上是不可避免的,只能是低概率。
RAG相关
向量数据库
HNSW算法
HNSW(Hierarchical Navigable Small World)算法是一种用于高效近似最近邻搜索(Approximate Nearest Neighbor Search, ANNS)的图结构算法。它在处理高维数据时表现出色,广泛应用于图像检索、推荐系统、自然语言处理等领域。HNSW算法的核心思想是通过构建一个分层的小世界图(Small World Graph),使得在高维空间中进行近似最近邻搜索变得更加高效。
HNSW算法的基本原理
- 分层结构:HNSW构建了一个多层次的图结构,每一层都是一个小世界图。顶层的图节点较少,底层的图节点较多。每一层的图都是前一层的子集,顶层的图节点是底层图节点的超集。
- 小世界图:每一层的图都是一个小世界图,具有较短的平均路径长度和较高的聚类系数。小世界图的特性使得在图中进行搜索时,可以快速接近目标节点。
- 导航机制:搜索过程从顶层开始,逐层向下进行。在每一层中,算法会从当前节点的邻居中选择最接近目标节点的节点,直到到达底层。在底层进行精确的近邻搜索。
多路召回重排
RRF
RF的基本原理
**倒数排序融合(RRF)**是基于倒数排名的概念。其核心思想是,一个项目在各个源中的排名的倒数可以被累加,从而得到一个综合分数,用于最终的排名。RRF的公式如下:
- 其中,ranki 是一个项目在第 i 个源中的排名。(倒数可以让排名越高,得到的分数越高)
- k 是源的数量。
- c 是一个常数,通常设为60,用于减轻排名靠后的项目的权重。
Chat 和 Completion 的区别
OpenAI的ChatCompletion和Completion都是自然语言生成模型的接口,但它们的用途和应用场景略有不同。
ChatCompletion | Completion | |
---|---|---|
区别 | 专为生成对话和聊天场景而设计。 | 是一个通用的自然语言生成接口,支持生成各种类型的文本,包括段落、摘要、建议、答案等等。 |
适用场景 | ChatCompletion接口生成的文本通常会更具有人类对话的风格和语调,可以用于智能客服、聊天机器人等场景,以及在日常聊天中帮助用户自动生成回复。 | Completion接口的输出更为多样化,可能会更加严谨和专业,适用于各种文本生成场景,例如文章创作、信息提取、机器翻译、自然语言问题回答等等。 |
本质上,是类似的,都是通过构造prompt输入给大模型,只是输入的方式不一样,一个是直接总结好所有的背景,要求输入给大模型,一个是把历史对话记录输入给大模型。
ChatCompletion
|
|
messages必须是消息对象的数组,其中每个对象都有一个角色(“system”、“user”、“assistant”)和内容(消息的内容)。对话可以短至 1 条消息或填满许多页面。
通常,对话的格式首先是system消息,然后是交替的user和assistant消息。
- system消息有助于设置聊天AI助手的行为。在上面的例子中,被指示“你是一个乐于助人的助手”。
- user消息有助于指示助手。它们可以由应用程序的最终用户生成,也可以由开发人员设置为指令。
- assistant消息有助于存储先前的响应。它们也可以由开发人员编写,以帮助提供所需行为的示例。
微调
Megatron 和deep speed(TODO:)
RLHF
RLHF的基本流程
RLHF的基本流程通常包括以下几个步骤:
-
初始训练:
- 使用传统的强化学习方法或监督学习方法对智能体进行初始训练,使其具备基本的任务执行能力。
-
收集人类反馈:
- 人类观察智能体的行为,并提供反馈。这些反馈可以是对智能体行为的评分、偏好比较(如选择更好的行为)或其他形式的评价。
-
反馈建模:(形成一个reward model)
- 将人类反馈转化为奖励信号或偏好模型。常见的方法包括使用监督学习模型来预测人类的评分或偏好。
-
强化学习优化:(结合奖励模型利用强化学习算法如PPO算法来优化策略)
- 使用强化学习算法(如策略梯度、Q学习等)结合人类反馈进行优化。智能体根据新的奖励信号或偏好模型进行学习和改进。
-
迭代训练:
- 重复收集人类反馈和强化学习优化的过程,逐步提高智能体的性能。
MOE
MoE结构大模型
- 多专家网络:MoE模型包含多个专家网络,每个专家网络可以是一个独立的神经网络。专家网络的数量可以非常多,从几十到上千不等。
- 门控机制:MoE模型使用一个门控网络(Gate)来决定在每次推理时激活哪些专家。门控网络根据输入数据的特征,选择最适合处理该数据的专家。
- 稀疏激活:在每次推理过程中,MoE模型只激活一小部分专家(例如,2-4个),而不是所有专家。这种稀疏激活机制大大减少了计算量。
- 高效计算:由于只激活少量专家,MoE模型在保持高表达能力的同时,显著降低了计算成本。
对比普通模型
- 计算效率:
- MoE模型:通过稀疏激活机制,只计算少量专家的输出,计算效率更高。
- 普通模型:所有参数和层都参与计算,计算量较大。
- 模型容量:
- MoE模型:可以包含大量专家网络,总参数量可以非常大,但每次推理只使用一部分参数。
- 普通模型:参数量固定,所有参数都参与计算,模型容量受限于计算资源。
占用的显存还是变大了,只是计算速度确实很快,且性能大大提高了。
Mixtral 8x7B同样是一个Decoder Only的模型,区别于传统的LLaMA等模型,FNN层由8个前馈神经网络(Expert)组成。如果我们从某一个Token的视角看,这个Token会经过其中的2个前馈神经网络或者说Expert。也就是说虽然整个模型的参数量是46B,但是在推理过程中激活的参数只有13B。
虽然Mixtral 8x7B在推理过程中同一时间激活的参数只有13B左右,但是为了保证推理性能,还是需要将全部参数(46B)读入显存,以A100-80GB为例,对于46B的参数的模型,按照FP16精度来估算,参数预期占用92GB显存。以batch为20、Context length=1024、Generate length=1024来看、KV Cache需要的显存为20GB**[2]** ,也就是说理想态下(不考虑显存碎片,Activate output),至少需要2张A100-80GB完成推理。
量化与精度
量化是大模型压缩方法的一种,
常见的精度。
dtype | 每10亿参数需要占内存 |
---|---|
float32 | 4G |
fp16/bf16 | 2G |
int8 | 1G |
int4 | 0.5G |
fp16/bf16 的区别
两个都是16位的浮点数,但是其中整数位和浮点数的数量占比不一样。
二者都是占用16bit空间。
- FP16由1个符号位、5个指数位和10个尾数位组成。FP16在表达小数时具有较高的精度,但表示的最大范围相对BF16比较小。相比BF16,在表达较大的数时更容易出现上溢的情况。
- BF16由1个符号位、8个指数位和7个尾数位组成。相比于FP16,BF16牺牲了一些尾数位以增加指数位,扩大了表达的范围,但是精度降低了,因此对于对精度需求比较高的模型,模型可能效果不如FP16。
模型训练时使用BF16和FP16都可以降低内存使用和传输量,提高训练效率。
模型格式
GGUF
GGUF文件全称是GPT-Generated Unified Format,是由Georgi Gerganov定义发布的一种大模型文件格式。Georgi Gerganov是著名开源项目llama.cpp的创始人。
GGUF就是一种二进制格式文件的规范,原始的大模型预训练结果经过转换后变成GGUF格式可以更快地被载入使用,也会消耗更低的资源。
经常是量化后的大模型
ONNX文件
ONNX(Open Neural Network Exchange)文件是一种开放的神经网络交换格式,由微软和Facebook共同发起。ONNX旨在促进不同深度学习框架之间的互操作性,使得模型可以在不同的框架之间无缝转换和部署。
大小模型协同
大模型在云端,能够提供更高的算力以及更加丰富的资源。
小模型在本地,可以实现高速的推理,更加个性化的适配,两个模型协作推理。
方式1:大模型调度小模型
让大模型选择不同的小模型进行调度,任务规划,模型选择
方式2:大模型反馈
大模型在云端进行复杂的计算和分析后,将结果反馈给本地的小模型。小模型根据大模型的反馈进行进一步的推理和决策,从而实现更高效的本地处理。这种方式可以充分利用大模型的强大计算能力,同时发挥小模型的快速响应优势。
优点:
- 高效利用资源:大模型负责复杂计算,小模型负责快速响应,资源利用更高效。
- 个性化适配:小模型可以根据大模型的反馈进行个性化调整,满足用户的特定需求。
- 降低延迟:通过本地小模型的快速响应,减少了云端计算带来的延迟。
方式3:分层推理
在这种方式中,推理任务被分层处理。简单的任务由本地小模型直接处理,而复杂的任务则被发送到云端的大模型进行处理。大模型处理完后,将结果返回给小模型,继续进行后续的推理和决策。
优点:
- 任务分层:根据任务的复杂度进行分层处理,提高了系统的整体效率。
- 灵活性:可以根据实际需求动态调整任务的分配,提高系统的灵活性。
- 资源优化:充分利用本地和云端的资源,避免资源浪费。
关于AI训练相关概念
在自然语言处理(NLP)领域,特别是大规模语言模型的训练过程中,通常会经历多个阶段,以逐步提升模型的性能和适应性。以下是这些阶段的综合讲述:
1. Pretraining — 预训练阶段
预训练阶段是整个训练过程的基础。在这个阶段,模型在大规模的无监督文本数据上进行训练。目标是让模型学习语言的基本结构、语法、词汇和一些常见的知识。
- 数据来源:互联网文本、书籍、文章、维基百科等。
- 训练目标:通常使用自监督学习方法,如掩码语言模型(Masked Language Model, MLM)或自回归语言模型(Autoregressive Language Model)。
- 结果:模型在广泛的语言理解和生成任务上具备基本能力,但对特定任务的适应性较差。
例子:GPT-3在大量互联网文本上进行预训练,学习了广泛的语言知识。
2. Supervised Finetuning(SFT) — 监督微调,也叫指令微调阶段
监督微调阶段,也称为指令微调阶段,是在预训练模型的基础上,使用特定任务的数据进行进一步训练。这个阶段的目标是让模型更好地理解和执行特定的指令或任务。
- 数据来源:标注好的任务数据集,如问答对、翻译对、情感分析数据等。
- 训练目标:通过监督学习方法,优化模型在特定任务上的表现。
- 结果:模型在特定任务上的性能显著提升,能够更准确地理解和执行指令。
例子:使用标注好的问答数据集对预训练的GPT-3进行微调,使其在问答任务上表现更好。
3. Reward Modeling — 奖励模型训练阶段
奖励模型训练阶段是为了进一步优化模型的输出质量。在这个阶段,训练一个奖励模型来评估生成的文本质量,并为后续的增强学习提供奖励信号。
- 数据来源:人类反馈数据,通常是人类对模型生成的文本进行评分或排序。
- 训练目标:训练一个奖励模型,使其能够根据人类反馈评估生成文本的质量。
- 结果:奖励模型能够为生成的文本提供质量评分,指导后续的增强学习过程。
例子:人类对GPT-3生成的回答进行评分,训练一个奖励模型来评估回答的质量。
4. Reinforcement Learning(RL)— 增强学习微调阶段
增强学习微调阶段使用奖励模型提供的反馈信号,通过增强学习方法进一步优化模型的行为。这个阶段的目标是让模型在实际应用中生成更高质量的输出。
- 数据来源:奖励模型提供的反馈信号。
- 训练目标:通过增强学习算法(如Proximal Policy Optimization, PPO),优化模型的策略,使其生成的文本在奖励模型的评分下表现更好。
- 结果:模型在实际应用中的表现进一步提升,生成的文本质量更高,更符合人类期望。
例子:使用PPO算法,根据奖励模型的反馈信号,对GPT-3进行增强学习微调,使其生成的回答更符合人类期望。
微调数据集构建
- 人工手写
- 数据爬取
- 大模型辅助生成
- 大模型规范化qa对
- 大模型生成,抽取
CPU和GPU区别
CPU(中央处理器)和GPU(图形处理器)是计算机中的两种不同处理器,主要区别如下:
-
结构和设计:
- CPU:设计用于处理复杂的指令和任务,具有少量强大的核心,适合单线程任务。
- GPU:设计用于并行计算,具有大量简单的核心,适合大规模并行任务。
-
用途:
- CPU:用于执行操作系统和应用程序的指令,处理日常计算任务。
- GPU:最初用于图形渲染,现在广泛用于科学计算、机器学习等并行计算任务。
-
性能特点:
- CPU:高时钟速度和强大的单线程性能。
- GPU:极高的并行处理能力。
-
内存架构:
- CPU:具有较大的缓存(Cache)。
- GPU:具有专用的显存(VRAM)。
总结:CPU擅长处理复杂、高精度任务,GPU擅长处理大规模并行计算任务。
大模型分布式训练
DeepSpeed
- 数据并行(Data Parallelism):在数据并行中,模型的参数在所有设备上保持相同。训练数据被分割成多个子集,每个设备处理一个子集。设备独立地计算梯度,然后将梯度聚合并更新模型参数。这种方法可以有效地利用多个设备的计算能力,但可能受到通信开销的影响。
- 模型并行(Model Parallelism):在模型并行中,模型的参数被划分成多个部分,并分布在不同的设备上。每个设备只负责计算其对应部分的前向和反向传播。这种方法适用于参数量非常大的模型,但需要对模型结构进行精细的划分,以平衡计算负载和减少通信开销。
大模型微调数据集构建流程
LLMs_interview_notes/大模型(LLMs)微调面.md at main · naginoa/LLMs_interview_notes
- 首先确认任务,
- 收集原始数据,例如从wiki爬取,聊天记录汇总
- 数据清洗,变成比较正常的文本,如果是爬取的,考虑去除掉一些不合理的html标签,如果是文章,最好结构化html格式,针对其中的表格,图片,都要有办法。
- 注意数据集一定要能够match到你要使用的情景,要够丰富。不然可能效果很差。
- 训练后,通用能力会下降,解决办法如下:
- 训练时保留一定通用数据
- 如果是RLHF,那么需要让LLM对通用回答也保持一定奖励
- **数据增强:**中文数据集可能相对有限,可以考虑使用数据增强技术来扩充数据集。例如,可以使用同义词替换、随机插入或删除词语、句子重组等方法来生成新的训练样本。(我考虑用LLM来直接扩写问题)
- 💡 微调后的模型出现能力劣化,灾难性遗忘是怎么回事?
- 数据分布差异,和以前的数据冲突了,
- 引入多任务,增量学习
prefix LM 和 causal LM 区别是什么?
- Prefix LM:Encoder-Decoder 模型的一种变体。 在 Prefix LM 中,Encoder 和 Decoder 共享同一个 Transformer 结构。前缀语言模型是一种生成模型,它在生成每个词时都可以考虑之前的上下文信息。在生成时,前缀语言模型会根据给定的前缀(即部分文本序列)预测下一个可能的词。这种模型可以用于文本生成、机器翻译等任务。
- 与标准Encoder-Decoder类似,Prefix LM在Encoder部分采用Auto Encoding (AE-自编码)模式,即前缀序列中任意两个token都相互可见,而Decoder部分采用Auto Regressive (AR-自回归)模式,即待生成的token可以看到Encoder侧所有token(包括上下文)和Decoder侧已经生成的token,但不能看未来尚未产生的token。
- Causal LM:因果语言模型是一种自回归模型,它只能根据之前的文本生成后续的文本,而不能根据后续的文本生成之前的文本。在训练时,因果语言模型的目标是预测下一个词的概率,给定之前的所有词作为上下文。这种模型可以用于文本生成、语言建模等任务。Causal LM是因果语言模型,目前流行地大多数模型都是这种结构,别无他因,因为GPT系列模型内部结构就是它,还有开源界的LLaMa也是。
- Causal LM只涉及到Encoder-Decoder中的Decoder部分,采用Auto Regressive模式,直白地说,就是根据历史的token来预测下一个token,也是在Attention Mask这里做的手脚。
大模型涌现能力
- 数据量大
- 模型大
- 预训练和微调+人类反馈强化
常见向量库
Milvus
- 优点:Milvus 是一个开源的向量数据库,支持多种类型的向量索引,如IVF、HNSW、Flat等。它提供了可扩展的架构,可以处理大量数据,并支持云原生部署。
- 缺点:由于是较新的项目,社区和文档可能不如一些老牌数据库成熟。
Faiss
-
优点:Faiss 是由Facebook AI团队开发的高效相似性搜索和密集向量聚类库。它提供了多种向量索引算法,性能极高。
-
缺点:作为一个库而不是完整的数据库系统,Faiss 不提供完整的数据管理功能,需要用户自己集成到应用中。
Tencent Cloud VectorDB
大模型分词技术
Byte Pair Encoding (BPE)与wordpiece
字节对编码(Byte Pair Encoding,BPE)算法是一种用于文本数据压缩和自然语言处理中的词汇表生成的方法。BPE的核心思想是通过频繁出现的字符对来合并字符,从而减少文本的大小。以下是BPE算法的流程:
- 将文本分割成单词,然后将每个单词分割成字符,用空格分隔每个字符。例如,单词 “apple” 可以表示为 “a p p l e”。
- 统计所有字符对(即相邻字符)在文本中出现的频率。(不同的是,**WordPiece 算法在选择子词时,**相比于 BPE 算法,WordPiece 的区别主要是在选取待合并的两个单元时所采取的方法不同,其他部分的算法流程是相同的。在 WordPiece 中使用点互信息表示两个子词之间的凝聚程度的高低。在选取待合并的两个单元时就选取点互信息最高的。)
- 寻找出现频率最高的字符对,将其合并为一个新的字符。例如,如果 “e s” 是出现频率最高的字符对,那么将所有 “e s” 替换为 “es”。
- 重复步骤2和3,直到达到预设的迭代次数或者没有更多的字符对可以合并。每次迭代会生成一个新的字符,这些新字符可以看作是文本中的子词(subword)。
- 根据生成的子词,重新构建词汇表。词汇表中的每个词都可以表示为一个或多个子词的组合。
BPE算法的优点在于它可以生成一个较小的词汇表,同时保留了文本中的语义信息。这使得BPE在自然语言处理任务中非常有用,特别是在处理未知词汇或者低频词汇的情况下。
WordPiece 是一种基于子词的分词方法,与 BPE 类似,通过合并频繁出现的字符对来生成子词。
常见模型:Bert,GPT 和 LAMA 一般采用 BPE 算法进行分词
SentencePiece
SentencePiece 是一种统一的分词框架,它提供了一种简单且高效的方法来处理神经网络自然语言处理任务中的文本预处理。SentencePiece 支持多种分词方法,如 BPE(Byte Pair Encoding)和 Unigram。下面分别介绍 BPE 和 Unigram 在 SentencePiece 中的原理。
- BPE(Byte Pair Encoding):
BPE 的原理在之前的回答中已经介绍过,这里再简要概括一下。BPE 的核心思想是通过频繁出现的字符对来合并字符,从而减少文本的大小。SentencePiece 中的 BPE 算法与标准 BPE 算法非常相似,主要区别在于 SentencePiece 的 BPE 是基于字节而非字符进行合并。
- Unigram:
Unigram 是一种基于子词的分词方法,它的目标是找到一组子词,使得给定文本的概率最大化。Unigram 分词的原理如下:
- 初始化:首先,将所有的字符加入到词汇表中。
- 构建语言模型:然后,使用训练语料库,统计每个可能的子词在语料库中出现的次数,并计算它们的概率。这里的子词可以是一个字符,也可以是由多个字符组成的字符串。
- 选择和合并子词:接下来,根据子词的概率,选择概率最大的子词,然后将其合并为一个新的子词,并更新词汇表。这个过程会重复进行,直到词汇表的大小达到预设的上限。
- 分词:最后,对于任意一个单词,如果它完全包含在词汇表中,则不需要分词;否则,将其分解为多个子词。分解的原则是尽可能选择最长的子词,且这些子词都必须包含在词汇表中。
多种语言和字符集,同时支持多种分词方法。此外,由于它不依赖于预先定义的词汇表,因此可以轻松地应用于大规模的文本数据和预训练模型。
有哪些省内存的大语言模型训练/微调/推理方法?
- 模型剪枝:通过移除模型中的冗余结构和参数,减少模型的内存占用。
- 知识蒸馏:使用一个大型教师模型来指导一个小型学生模型,使学生模型能够学习到教师模型的知识,同时减少内存占用。
- 量化:将模型的权重和激活从浮点数转换为低精度整数,减少模型的内存占用和计算需求。
- 模型并行:将大型模型分割到多个设备上进行训练和推理,减少单个设备的内存需求。
- 数据并行:将训练数据分割到多个设备上,每个设备训练模型的一个副本,减少单个设备的内存需求。
- 动态批处理:根据可用内存动态调整批量大小,以适应内存限制。
常见大模型得架构区别
GLM和LLAMA2架构的区别
GLM和LLaMA在架构和设计理念上有显著的区别。GLM使用完整的Transformer架构,结合了双向和自回归注意力机制,适用于多种NLP任务。
LLaMA则使用Transformer的解码器部分,采用单向注意力机制,擅长生成自然语言文本。选择哪种模型取决于具体的任务需求和应用场景。
GPT3、LLAMA、ChatGLM 的Layer Normalization 的区别是什么?各自的优缺点是什么?
- GPT3:采用了Post-Layer Normalization(后标准化)的结构,即先进行自注意力或前馈神经网络的计算,然后进行Layer Normalization。这种结构有助于稳定训练过程,提高模型性能。
- LLAMA:采用了Pre-Layer Normalization(前标准化)的结构,即先进行Layer Normalization,然后进行自注意力或前馈神经网络的计算。这种结构有助于提高模型的泛化能力和鲁棒性。
- ChatGLM:采用了[Post-Layer Normalization](https://www.zhihu.com/search?q=Post-Layer Normalization&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={“sourceType”%3A"answer"%2C"sourceId"%3A3402960181})的结构,类似于GPT3。这种结构可以提高模型的性能和稳定性。
QPS和QPM
QPS(Queries Per Second)和 QPM(Queries Per Minute)是衡量系统处理请求能力的性能指标,分别表示每秒和每分钟处理的查询请求数。它们的区别在于时间单位不同,QPS以秒为单位,QPM以分钟为单位。
LLM建议一般用QPM好点。
ref
Reciprocal Rank Fusion (RRF) – 我的AI
naginoa/LLMs_interview_notes: LLMs interview notes and answers:该仓库主要记录大模型(LLMs)算法工程师相关的面试题和参考答案