大模型(LLMs)基础面
1. 目前主流的开源模型体系有哪些?
目前主流的开源 LLM(语言模型)体系包括以下几个:
- GPT 系列:由 OpenAI 发布的一系列基于 Transformer 架构的语言模型,包括 GPT、GPT-2、GPT-3 等。GPT 模型通过在大规模无标签文本上进行预训练,然后在特定任务上进行微调,具有很强的生成能力和语言理解能力。
- BERT:由 Google 发布的一种基于 Transformer 架构的双向预训练语言模型。BERT 模型通过在大规模无标签文本上进行预训练,然后在下游任务上进行微调,具有强大的语言理解能力和表征能力。
- XLNet:由 CMU 和 Google Brain 发布的一种基于 Transformer 架构的自回归预训练语言模型。XLNet 模型通过自回归方式预训练,可以建模全局依赖关系,具有更好的语言建模能力和生成能力。
- RoBERTa:由 Facebook 发布的一种基于 Transformer 架构的预训练语言模型。RoBERTa 模型在 BERT 的基础上进行了改进,通过更大规模的数据和更长的训练时间,取得了更好的性能。
- T5:由 Google 发布的一种基于 Transformer 架构的多任务预训练语言模型。T5 模型通过在大规模数据集上进行预训练,可以用于多种自然语言处理任务,如文本分类、机器翻译、问答等。
这些模型在自然语言处理领域取得了显著的成果,并被广泛应用于各种任务和应用中。
2. Prefix LM 和 Causal LM 区别是什么?
Prefix LM(前缀语言模型)和 Causal LM(因果语言模型)是两种不同类型的语言模型,它们的区别在于生成文本的方式和训练目标。
- Prefix LM:前缀语言模型是一种生成模型,它在生成每个词时都可以考虑之前的上下文信息。在生成时,前缀语言模型会根据给定的前缀(即部分文本序列)预测下一个可能的词。这种模型可以用于文本生成、机器翻译等任务。
- Causal LM:因果语言模型是一种自回归模型,它只能根据之前的文本生成后续的文本,而不能根据后续的文本生成之前的文本。在训练时,因果语言模型的目标是预测下一个词的概率,给定之前的所有词作为上下文。这种模型可以用于文本生成、语言建模等任务。
总结来说,前缀语言模型可以根据给定的前缀生成后续的文本,而因果语言模型只能根据之前的文本生成后续的文本。它们的训练目标和生成方式略有不同,适用于不同的任务和应用场景。
3. 涌现能力是啥原因?
大模型的涌现能力主要是由以下几个原因造成的:
- 数据量的增加:随着互联网的发展和数字化信息的爆炸增长,可用于训练模型的数据量大大增加。更多的数据可以提供更丰富、更广泛的语言知识和语境,使得模型能够更好地理解和生成文本。
- 计算能力的提升:随着计算硬件的发展,特别是图形处理器(GPU)和专用的 AI 芯片(如 TPU)的出现,计算能力大幅提升。这使得训练更大、更复杂的模型成为可能,从而提高了模型的性能和涌现能力。
- 模型架构的改进:近年来,一些新的模型架构被引入,如 Transformer,它在处理序列数据上表现出色。这些新的架构通过引入自注意力机制等技术,使得模型能够更好地捕捉长距离的依赖关系和语言结构,提高了模型的表达能力和生成能力。
- 预训练和微调的方法:预训练和微调是一种有效的训练策略,可以在大规模无标签数据上进行预训练,然后在特定任务上进行微调。这种方法可以使模型从大规模数据中学习到更丰富的语言知识和语义理解,从而提高模型的涌现能力。
综上所述,大模型的涌现能力是由数据量的增加、计算能力的提升、模型架构的改进以及预训练和微调等因素共同作用的结果。
4. 大模型 LLM 的架构介绍?
LLM(Large Language Model,大型语言模型)是指基于大规模数据和参数量的语言模型。具体的架构可以有多种选择,以下是一种常见的架构介绍:
- Transformer 架构:大模型 LLM 常使用 Transformer 架构,它是一种基于自注意力机制的序列模型。Transformer 架构由多个编码器层和解码器层组成,每个层都包含多头自注意力机制和前馈神经网络。这种架构可以捕捉长距离的依赖关系和语言结构,适用于处理大规模语言数据。
- 自注意力机制(Self-Attention):自注意力机制是 Transformer 架构的核心组件之一。它允许模型在生成每个词时,根据输入序列中的其他词来计算该词的表示。自注意力机制能够动态地为每个词分配不同的权重,从而更好地捕捉上下文信息。
- 多头注意力(Multi-Head Attention):多头注意力是自注意力机制的一种扩展形式。它将自注意力机制应用多次,每次使用不同的权重矩阵进行计算,得到多个注意力头。多头注意力可以提供更丰富的上下文表示,增强模型的表达能力。
- 前馈神经网络(Feed-Forward Network):在 Transformer 架构中,每个注意力层后面都有一个前馈神经网络。前馈神经网络由两个全连接层组成,通过非线性激活函数(如 ReLU)进行变换。它可以对注意力层输出的表示进行进一步的映射和调整。
- 预训练和微调:大模型 LLM 通常采用预训练和微调的方法进行训练。预训练阶段使用大规模无标签数据,通过自监督学习等方法进行训练,使模型学习到丰富的语言知识。微调阶段使用有标签的特定任务数据,如文本生成、机器翻译等,通过有监督学习进行模型的微调和优化。
需要注意的是,大模型 LLM 的具体架构可能会因不同的研究和应用而有所不同。
大模型(LLMs)进阶面
1. Llama 输入句子长度理论上可以无限长吗?
理论上来说,LLMs(大型语言模型)可以处理任意长度的输入句子,但实际上存在一些限制和挑战:
- 计算资源:生成长句子需要更多的计算资源,包括内存和计算时间。由于 LLMs 通常是基于神经网络的模型,计算长句子可能会导致内存不足或计算时间过长的问题。
- 模型训练和推理:训练和推理长句子可能会面临一些挑战。在训练阶段,处理长句子可能会导致梯度消失或梯度爆炸的问题,影响模型的收敛性和训练效果。在推理阶段,生成长句子可能会增加模型的错误率和生成时间。
- 上下文建模:LLMs 是基于上下文建模的模型,长句子的上下文可能会更加复杂和深层。模型需要能够捕捉长句子中的语义和语法结构,以生成准确和连贯的文本。
尽管存在这些挑战,研究人员和工程师们已经在不断努力改进和优化 LLMs,以处理更长的句子。例如,可以采用分块的方式处理长句子,将其分成多个较短的片段进行处理。
2. 什么是 LLMs 复读机问题?
LLMs 复读机问题指的是大型语言模型(LLMs)在生成文本时出现的一种现象,即模型倾向于无限地复制输入的文本或者以过度频繁的方式重复相同的句子或短语。这种现象使得模型的输出缺乏多样性和创造性。
出现原因:
- 数据偏差:如果训练数据中存在大量的重复文本或者某些特定的句子或短语出现频率较高,模型在生成文本时可能会倾向于复制这些常见的模式。
- 训练目标的限制:基于自监督学习的方法,通过预测下一个词或掩盖词来学习语言模型,可能使得模型更倾向于生成与输入相似的文本。
- 缺乏多样性的训练数据:如果训练数据中缺乏多样性的语言表达和语境,模型可能无法学习到足够的多样性和创造性。
缓解策略:
- 多样性训练数据:尽量使用多样性的语料库来训练模型。
- 引入噪声:在生成文本时,引入一些随机性或噪声,例如通过采样不同的词或短语。
- 温度参数调整:通过调整温度参数的值,控制生成文本的独创性和多样性。
- 后处理和过滤:去除重复的句子或短语。
3. 什么情况用 Bert 模型,什么情况用 LLaMA、ChatGLM 类大模型,咋选?
选择使用哪种大模型取决于具体的应用场景和需求:
- Bert 模型:适用于各种自然语言处理任务,如文本分类、命名实体识别、语义相似度计算等。如果你的任务是通用的文本处理任务,而不依赖于特定领域的知识或语言风格,Bert 模型通常是一个不错的选择。Bert 由一个 Transformer 编码器组成,更适合于 NLU 相关的任务。
- LLaMA 模型:包含从 7B 到 65B 的参数范围,具有常识推理、问答、数学推理、代码生成、语言理解等能力。训练预料主要为以英语为主的拉丁语系,不包含中日韩文。所以适合于英文文本生成的任务。
- ChatGLM 模型:面向对话生成的语言模型,适用于构建聊天机器人、智能客服等对话系统。ChatGLM 的架构为 Prefix decoder,训练语料为中英双语,中英文比例为 1:1。所以适合于中文和英文文本生成的任务。
在选择模型时,还需要考虑数据可用性、计算资源、预训练和微调成本等因素。
4. 各个专业领域是否需要各自的大模型来服务?
各个专业领域通常需要各自的大模型来服务,原因如下:
- 领域特定知识:不同领域拥有各自特定的知识和术语,需要针对该领域进行训练的大模型才能更好地理解和处理相关文本。
- 语言风格和惯用语:各个领域通常有自己独特的语言风格和惯用语,专门针对某个领域进行训练的大模型可以更好地掌握该领域的语言特点。
- 领域需求的差异:不同领域对于文本处理的需求也有所差异。例如,金融领域可能更关注数字和统计数据的处理,而法律领域可能更关注法律条款和案例的解析。
- 数据稀缺性:某些领域的数据可能相对较少,无法充分训练通用的大模型。针对特定领域进行训练的大模型可以更好地利用该领域的数据。
5. 如何让大模型处理更长的文本?
要让大模型处理更长的文本,可以考虑以下几个方法:
- 分块处理:将长文本分割成较短的片段,然后逐个片段输入模型进行处理。在处理分块文本时,可以使用重叠的方式,以保持上下文的连贯性。
- 层次建模:通过引入层次结构,将长文本划分为更小的单元。例如,可以将文本分为段落、句子或子句等层次,然后逐层输入模型进行处理。
- 部分生成:如果只需要模型生成文本的一部分,而不是整个文本,可以只输入部分文本作为上下文,然后让模型生成所需的部分。
- 注意力机制:注意力机制可以帮助模型关注输入中的重要部分,用于处理长文本时的上下文建模。
- 模型结构优化:通过优化模型结构和参数设置,可以提高模型处理长文本的能力。
大模型(LLMs)微调面
1. 如果想要在某个模型基础上做全参数微调,究竟需要多少显存?
要确定全参数微调所需的显存量,需要考虑以下几个因素:
- 模型的大小:模型的大小是指模型参数的数量。通常,参数越多,模型的大小就越大。大型的预训练模型如 Bert、GPT 等通常有数亿到数十亿个参数。
- 批量大小:较大的批量大小可以提高训练的效率,但也需要更多的显存。
- 训练数据的维度:如果输入数据具有较高的维度,例如图像数据,那么所需的显存量可能会更大。
- 训练设备的显存限制:显卡的显存大小是一个硬性限制,超过显存限制可能导致训练失败或性能下降。
建议先评估所需的显存量,并确保训练设备具备足够的显存来支持训练过程。
2. 为什么 SFT 之后感觉 LLM 傻了?
在进行 Supervised Fine-Tuning(SFT)之后,有时可能会观察到基座模型的性能下降或产生一些'傻'的行为。这可能是由于以下原因:
- 数据偏移:SFT 过程中使用的微调数据集可能与基座模型在预训练阶段接触到的数据分布有所不同。
- 非典型标注:微调数据集的标注可能存在错误或不准确的标签。
- 过拟合:如果微调数据集相对较小,或者模型的容量较大,模型可能会过拟合微调数据。
- 缺乏多样性:微调数据集可能缺乏多样性,未能涵盖模型在新任务上可能遇到的各种输入情况。
解决方法:
- 收集更多的训练数据,以增加数据的多样性和覆盖范围。
- 仔细检查微调数据集的标注,确保标签的准确性和一致性。
- 使用正则化技术(如权重衰减、dropout)来减少过拟合的风险。
- 使用更复杂的模型架构或调整模型的超参数。
3. SFT 指令微调数据如何构建?
构建 Supervised Fine-Tuning(SFT)的微调数据需要以下步骤:
- 收集原始数据:收集与目标任务相关的原始数据,如对话数据、分类数据等。
- 标注数据:对原始数据进行标注,为每个样本提供正确的标签或目标输出。
- 划分数据集:将标注数据划分为训练集、验证集和测试集。
- 数据预处理:根据任务的要求,对数据进行预处理,如文本清洗、分词等。
- 格式转换:将数据转换为适合模型训练的格式,如 JSON 格式。
- 模型微调:使用转换后的数据对基座模型进行微调。
- 模型评估:使用测试集对微调后的模型进行评估。
4. 领域模型 Continue PreTrain 数据选取?
在领域模型的 Continue PreTrain 过程中,数据选取是关键步骤:
- 领域相关数据:收集与目标领域相关的数据,如互联网爬取、特定领域文档等。
- 领域专家标注:请领域专家对领域相关的数据进行标注。
- 伪标签:使用预训练的模型对领域相关的数据进行预测,将预测结果作为伪标签。
- 数据平衡:注意数据的平衡性,避免类别不平衡。
- 数据质量控制:筛选和过滤低质量数据。
5. 领域数据训练后,通用能力往往会有所下降,如何缓解模型遗忘通用能力?
当使用领域数据进行训练后,模型往往会出现遗忘通用能力的问题。以下是一些缓解方法:
- 保留通用数据:在进行领域数据训练时,仍然需要保留一部分通用数据用于模型训练。
- 增量学习:将领域数据与通用数据逐步交替进行训练。
- 预训练和微调:在领域数据训练之前,使用大规模通用数据进行预训练。
- 强化学习:通过给模型设置奖励机制,鼓励模型在领域任务上表现好,同时保持一定的通用能力。
- 领域适应技术:使用领域自适应和领域对抗训练,帮助模型在不同领域之间进行迁移学习。
6. 进行 SFT 操作的时候,基座模型选用 Chat 还是 Base?
- Chat 模型:如果您的监督任务是对话生成相关的,比如生成对话回复,选择 ChatGPT 模型作为基座模型可能更合适。
- Base 模型:如果您的监督任务是单轮文本生成或非对话生成任务,选择 Base GPT 模型作为基座模型可能更合适。
7. 领域模型微调指令&数据输入格式要求?
- 指令:明确所需的任务类型,如文本分类、命名实体识别等。
- 数据输入格式:输入数据应以文本形式提供,每个样本对应一行。对于分类任务,每个样本应包含文本和标签;对于生成任务,每个样本只需包含文本即可。
8. 领域模型微调领域评测集构建?
- 收集数据:收集与目标领域相关的数据。
- 标注数据:对收集到的数据进行标注。
- 划分数据集:划分为训练集、验证集和测试集。
- 设计评测指标:选择合适的评测指标。
- 进行评测:使用构建好的评测集对微调后的模型进行评测。
- 分析和改进:根据评测结果分析模型表现并改进。
9. 领域模型词表扩增是不是有必要的?
- 领域特定词汇:如果目标领域中存在特定的词汇或术语,而这些词汇在通用的预训练模型的词表中没有覆盖到,那么词表扩增就是必要的。
- 领域特定上下文:如果领域任务中的上下文与通用预训练模型的训练数据中的上下文有较大差异,词表扩增可以帮助模型更好地理解。
- 数据稀缺性:如果目标领域的训练数据相对较少,词表扩增可以帮助模型更好地利用预训练模型的知识。
10. 如何训练自己的大模型?
- 数据收集和准备:收集与目标任务和领域相关的大规模数据集。
- 模型设计和架构选择:选择适合的模型架构,如 Transformer。
- 数据划分和预处理:将数据集划分为训练集、验证集和测试集。
- 模型训练:使用训练集对模型进行训练。
- 模型调优和验证:使用验证集对训练过程中的模型进行调优。
- 模型评估和测试:使用测试集对最终训练好的模型进行评估。
- 模型部署和优化:将训练好的模型部署到实际应用中。
11. 训练中文大模型有啥经验?
- 数据预处理:分词、去除停用词、词性标注等。
- 数据增强:同义词替换、随机插入或删除词语等。
- 字词级别的表示:使用字符嵌入或者字级别的 CNN、RNN 等模型。
- 预训练模型:使用已经在大规模中文语料上预训练好的模型作为初始模型。
- 中文特定的任务:使用中文特定的工具或者模型来辅助训练。
- 计算资源:使用云计算平台或者分布式训练。
- 超参数调优:寻找最佳的超参数组合。
12. 指令微调的好处?
- 个性化适应:在大模型的基础上,使用特定任务或领域的数据进行微调。
- 提升性能:针对特定任务的要求,调整模型的参数和结构。
- 控制模型行为:引入特定的指令或约束,以约束模型的行为。
- 数据效率:利用大模型在通用数据上的预训练知识,结合少量特定任务数据进行微调。
- 提高训练效率:避免从头开始训练的时间和资源消耗。
13. 预训练和微调哪个阶段注入知识的?
知识注入通常是在预训练阶段进行的。预训练阶段使用大规模的通用数据对模型进行训练,以学习语言知识和表示能力。微调阶段则是在预训练模型的基础上,使用特定任务的数据进行进一步训练和调整,以提升性能。
14. 想让模型学习某个领域或行业的知识,是应该预训练还是应该微调?
建议进行微调而不是预训练。预训练模型通常具有较强的泛化能力,但对特定领域的知识和术语可能了解有限。微调可以帮助模型更深入地理解特定领域的术语、概念和语境,并提升在该领域任务上的性能。
15. 多轮对话任务如何微调模型?
- 数据准备:收集或生成与目标对话任务相关的数据集。
- 模型选择:选择一个合适的预训练模型作为基础模型。
- 任务特定层:添加一些任务特定的层来处理对话历史。
- 微调过程:使用多轮对话数据集对预训练模型进行微调。
- 超参数调整:选择合适的学习率、批次大小等。
- 评估和调优:使用验证集或开发集对微调后的模型进行评估。
- 推理和部署:将输入的多轮对话输入给模型,生成对应的回答。
16. 微调后的模型出现能力劣化,灾难性遗忘是怎么回事?
灾难性遗忘是指在模型微调过程中,当模型在新任务上进行训练时,可能会忘记之前学习到的知识。原因包括数据分布差异和参数更新冲突。
解决方法:
- 重播缓冲区:存储旧任务的样本,与新任务样本一起训练。
- 弹性权重共享:限制模型参数的变动范围。
- 增量学习:将微调过程分为多个阶段。
- 多任务学习:同时训练多个相关任务。
17. 微调模型需要多大显存?
取决于模型的大小、批次大小、序列长度和优化算法。对于大型语言模型,通常需要至少 16GB 以上的显存。如果显存不足,可以考虑减小批次大小、序列长度或使用分布式训练。
18. 大模型 LLM 进行 SFT 操作的时候在学习什么?
- 任务特定的标签预测:学习预测相应的标签或目标。
- 上下文理解和语言模式:利用学习到的知识来更好地理解任务相关的上下文。
- 特征提取和表示学习:通过学习任务相关的表示来提取有用的特征。
- 任务相关的优化:通过反向传播和优化算法来调整模型参数。
19. 预训练和 SFT 操作有什么不同?
- 目标:预训练是无监督学习,学习语言表示;SFT 是有监督学习,适应特定任务。
- 数据:预训练使用大规模无标签文本;SFT 使用带有标签的任务相关数据。
- 训练方式:预训练最大化预训练任务目标函数;SFT 最小化损失函数。
20. 样本量规模增大,训练出现 OOM 错
解决方案:
- 减少批量大小:减少每个训练步骤中所需的内存量。
- 分布式训练:将训练负载分散到多个设备上。
- 内存优化技术:使用混合精度训练、梯度累积等。
- 减少模型规模:减少模型的层数、隐藏单元的数量。
- 增加硬件资源:增加内存容量。
- 数据处理和加载优化:优化数据处理和加载过程。
21. 大模型 LLM 进行 SFT 如何对样本进行优化?
- 数据清洗和预处理:去除噪声、处理缺失值。
- 数据增强:扩充训练数据,增加样本的多样性和数量。
- 标签平衡:平衡样本标签。
- 样本选择:选择具有代表性的样本。
- 样本权重:给予重要样本更高的权重。
- 样本组合和分割:扩展训练数据。
- 样本筛选和策略:制定样本筛选策略。
大模型(LLMs)LangChain 面
1. 什么是 LangChain?
LangChain 是一个基于语言模型的框架,用于构建聊天机器人、生成式问答(GQA)、摘要等功能。它的核心思想是将不同的组件'链'在一起,以创建更高级的语言模型应用。
2. LangChain 包含哪些核心概念?
- StreamlitChatMessageHistory:用于在 Streamlit 应用程序中存储和使用聊天消息历史记录。
- CassandraChatMessageHistory:使用 Apache Cassandra 数据库存储聊天消息历史记录。
- MongoDBChatMessageHistory:使用 MongoDB 数据库存储聊天消息历史记录。
3. LangChain 支持哪些功能?
- 编写自定义的 LangChain 提示和链式代码的语法糖。
- 使用 IDE 内置的支持进行提示、类型检查和弹出文档。
- 利用 LangChain 生态系统的全部功能。
- 添加对可选参数的支持。
- 通过将参数绑定到一个类来轻松共享参数。
- 支持传递内存和回调函数。
- 简化的流式处理。
- 定义聊天消息提示。
- 输出解析器。
- 支持更复杂的数据结构。
4. LangChain 如何使用?
调用 LLMs 生成回复
from langchain.llms import OpenAI
from langchain.chains import LLMChain
llm = OpenAI(temperature=0.9)
prompt = "用户的问题"
chain = LLMChain(llm=llm, prompt=prompt)
response = chain.generate()
print(response)
修改提示模板
from langchain.prompts import ChatPromptTemplate
template = ChatPromptTemplate()
template.add_message("system", "You are a helpful AI bot.")
template.add_message("human", "Hello, how are you doing?")
template.set_message_content(0, "You are a helpful AI assistant.")
messages = template.format_messages()
print(messages)
链接多个组件处理下游任务
from langchain.chains import Chain
from langchain.components import Component1, Component2, Component3
component1 = Component1()
component2 = Component2()
component3 = Component3()
chain = Chain()
chain.add_component(component1)
chain.add_component(component2)
chain.add_component(component3)
output = chain.process_downstream_task()
print(output)
Embedding & Vector Store
from langchain.embeddings import Embedding
from langchain.vectorstore import VectorStore
embedding = Embedding()
embedding.embed("Hello, world!")
vector_store = VectorStore()
vector_store.store("hello", embedding.get_embedding())
vector = vector_store.retrieve("hello")
print(vector)
5. LangChain 存在的问题及方案?
- 低效的令牌使用问题:LangChain 使用 token-based 方法,可以通过调整 max_tokens 和 temperature 参数来控制。
- 文档问题:参考官方文档获取最新信息。
- 概念混淆:过多的'辅助'函数问题,需熟悉核心组件。
- 行为不一致:隐藏细节问题,需深入源码。
- 缺乏标准的可互操作数据类型:目前缺乏标准,需自行处理数据转换。
6. 替代方案?
LangChain 是一个独特的框架,目前没有直接的替代方案。它提供了一种简化开发过程的方式。虽然可能有其他类似的框架可用,但 LangChain 在其特定领域内提供了独特的功能和优势。
7. 基于 LLM+ 向量库的文档对话经验面
基础面
- 查询类型:确定用户可能的查询类型,构建相应的 prompt 模板。
- 查询内容:根据文档的特点和领域知识,确定用户可能会查询的内容。
- 上下文信息:将上下文信息加入到 prompt 模板中。
- 可变参数:在 prompt 模板中留出一些可变的参数。
- 核心技术:大语言模型、文档向量化、相似度计算、对话生成、对话交互。
优化面
- 数据准备:准备大量高质量的训练数据。
- 模型架构:选择合适的模型架构,如 Transformer。
- 微调和优化:使用预训练的模型作为起点,进行微调。
- 上下文建模:确保模型能够准确地理解和利用上下文信息。
- 评估和反馈:定期评估模型的性能。
- 多模态信息利用:整合多模态信息。
- 引入外部知识和资源:引入知识图谱、预训练的语言模型等。
痛点解决
- 文档切分粒度:使用主题建模、上下文信息、动态切分等方法。
- 垂直领域表现不佳:领域特定训练、增加领域知识、优化检索算法。
- LangChain 内置问答分句效果不佳:调整输入、引入标点符号、使用自定义规则、结合其他工具。
- 召回 Document 问题:建立索引、关键词匹配、向量化表示、语义匹配。
- 高质量 Response:合适的数据准备、模型架构选择、微调和优化。
大模型(LLMs)参数高效微调 (PEFT) 面
1. LoRA 篇
- 什么是 LoRA?:Low-Rank Adaptation,一种参数高效微调方法。
- 思路:冻结预训练模型权重,训练低秩分解矩阵。
- 特点:参数量少,训练速度快,易于部署。
- 优点:节省显存,加速训练。
- 合入原模型:LoRA 权重可以合入原模型。
2. QLoRA 篇
- 思路:Quantized LoRA,在 LoRA 基础上引入量化技术。
- 特点:进一步降低显存需求,支持更大模型。
3. AdaLoRA 篇
4. 提示学习(Prompting)
- 为什么需要:减少微调成本,利用预训练知识。
- 方法:P-tuning v2、Prefix-tuning、Adapter-tuning 等。
- P-tuning v2:连续提示向量,优化效果好。
- Prefix-tuning:在输入层添加前缀向量。
- Adapter-tuning:在 Transformer 层间插入适配器模块。
5. PEFT 对比
- Peft 和全量微调区别:PEFT 仅更新少量参数,全量微调更新所有参数。
- 显存速度:PEFT 显存占用更低,训练速度更快。
- 最佳实践:根据任务需求和资源选择合适的 PEFT 方法。
大模型(LLMs)推理面
1. 推理显存与速度
- 显存占用:推理时显存涨得高是因为加载了模型权重和 KV Cache。
- GPU 和 CPU 速度:GPU 推理速度远快于 CPU。
- int8 和 fp16:int8 推理速度更快,显存占用更少,但精度可能略降。
2. 省内存方法
- 量化:使用 int8、int4 量化。
- 卸载:将部分层卸载到 CPU 内存。
- 批处理优化:调整 batch size。
3. 合规化输出
- 约束解码:使用正则表达式或特定模板约束输出。
- 后处理:对生成结果进行过滤。
大模型(LLMs)评测面
1. 大模型怎么评测?
使用自动化指标(如 BLEU、ROUGE)和人工评估相结合。关注准确性、流畅性、相关性等维度。
2. Honest 原则
通过 RLHF 或自我反思机制,鼓励模型承认不知道的信息,减少幻觉。
大模型(LLMs)强化学习面
1. RLHF 流程
- SFT:有监督微调。
- RM:奖励模型训练。
- PPO:近端策略优化。
2. 实践不足与解决
- 成本高:使用自动标注或合成数据。
- 迭代慢:并行训练多个模型,优化 PPO 实现。
- 资源要求高:模型蒸馏或轻量化。
大模型(LLMs)软硬件配置面
- 训练集:SFT、RM、PPO 数据格式需符合相应框架要求。
- 数据集来源:公开数据集、内部数据、合成数据。
- 数据量:微调通常需要数千至数万条高质量数据。
大模型(LLMs)Token 及位置编码篇
1. Tokenizer
- BPE:Byte-Pair Encoding,常用分词方式。
- WordPiece:Google 提出,用于 BERT。
- SentencePiece:不依赖空格,支持多语言。
2. 位置编码
- 绝对位置编码:直接添加位置向量。
- 相对位置编码:计算相对距离。
- RoPE:旋转位置编码,支持外推。
- ALiBi:Attention with Linear Biases,无需位置编码。
大模型(LLMs)Layer Normalization 篇
- Layer Norm:标准归一化。
- RMS Norm:均方根归一化,去除了均值计算。
- Deep Norm:深度网络归一化,稳定深层训练。
大模型(LLMs)Agent 面
- 注入领域知识:通过 RAG 或微调。
- 快速体验模型:使用云端 API 或本地轻量级模型。
大模型(LLMs)显存与分布式训练面
- 显存问题:优化 Batch Size,使用 Gradient Checkpointing。
- 分布式训练:Data Parallelism, Tensor Parallelism, Pipeline Parallelism。