大语言模型课程
?在 X 上关注我•?拥抱脸•博客•?实践 GNN
LLM课程分为三个部分:
- ? LLM 基础知识涵盖数学、Python 和神经网络的基本知识。
- ??法学硕士科学家专注于使用最新技术构建最好的法学硕士。
- ? LLM 工程师专注于创建基于 LLM 的应用程序并部署它们。
对于本课程的交互式版本,我创建了两名法学硕士助理,他们将以个性化的方式回答问题并测试您的知识:
- ? HuggingChat Assistant :使用 Mixtral-8x7B 的免费版本。
- ? ChatGPT 助手:需要高级帐户。
笔记本电脑
与大型语言模型相关的笔记本和文章列表。
工具
笔记本 | 描述 | 笔记本 |
---|
? LLM自动评估 | 使用 RunPod 自动评估您的法学硕士 | |
?惰性合并工具包 | 使用 MergeKit 一键轻松合并模型。 | |
?懒惰蝾螈 | 使用 Axolotl 一键微调云中的模型。 | |
⚡ 自动定量 | 一键量化 GGUF、GPTQ、EXL2、AWQ 和 HQQ 格式的 LLM。 | |
?模型家谱 | 可视化合并模型的家谱。 | |
零空间 | 使用免费的 ZeroGPU 自动创建 Gradio 聊天界面。 | |
微调
笔记本 | 描述 | 文章 | 笔记本 |
---|
使用 QLoRA 微调 Llama 2 | 在 Google Colab 中监督微调 Llama 2 的分步指南。 | 文章 | |
使用 Axolotl 微调 CodeLlama | 最先进的微调工具的端到端指南。 | 文章 | |
使用 QLoRA 微调 Mistral-7b | 与 TRL 一起在免费的 Google Colab 中监督微调 Mistral-7b。 | | |
使用 DPO 微调 Mistral-7b | 使用 DPO 提升监督微调模型的性能。 | 文章 | |
使用 ORPO 微调 Llama 3 | 使用 ORPO 在单级中进行更便宜、更快速的微调。 | 文章 | |
使用 Unsloth 微调 Llama 3.1 | Google Colab 中的超高效监督微调。 | 文章 | |
量化
笔记本 | 描述 | 文章 | 笔记本 |
---|
量化简介 | 使用 8 位量化的大型语言模型优化。 | 文章 | |
使用 GPTQ 的 4 位量化 | 量化您自己的开源 LLM 以在消费类硬件上运行它们。 | 文章 | |
使用 GGUF 和 llama.cpp 进行量化 | 使用 llama.cpp 量化 Llama 2 模型并将 GGUF 版本上传到 HF Hub。 | 文章 | |
ExLlamaV2:运行 LLM 最快的库 | 量化并运行 EXL2 模型并将其上传到 HF Hub。 | 文章 | |
其他
笔记本 | 描述 | 文章 | 笔记本 |
---|
大型语言模型中的解码策略 | 从波束搜索到核采样的文本生成指南 | 文章 | |
使用知识图改进 ChatGPT | 用知识图增强 ChatGPT 的答案。 | 文章 | |
使用 MergeKit 合并法学硕士 | 轻松创建您自己的模型,无需 GPU! | 文章 | |
使用 MergeKit 创建 MoE | 将多个专家合并为一个单一的 FrankenMoE | 文章 | |
取消任何带有删除的法学硕士的审查 | 无需重新训练即可微调 | 文章 | |
?法学硕士基础知识
本节介绍数学、Python 和神经网络的基本知识。您可能不想从这里开始,但可以根据需要参考它。
切换部分
1. 机器学习数学
在掌握机器学习之前,了解支持这些算法的基本数学概念非常重要。
- 线性代数:这对于理解许多算法至关重要,尤其是深度学习中使用的算法。关键概念包括向量、矩阵、行列式、特征值和特征向量、向量空间和线性变换。
- 微积分:许多机器学习算法涉及连续函数的优化,这需要了解导数、积分、极限和级数。多变量微积分和梯度的概念也很重要。
- 概率和统计:这些对于理解模型如何从数据中学习并做出预测至关重要。关键概念包括概率论、随机变量、概率分布、期望、方差、协方差、相关性、假设检验、置信区间、最大似然估计和贝叶斯推理。
资源:
- 3Blue1Brown - 线性代数的本质:一系列视频,为这些概念提供了几何直观。
- StatQuest with Josh Starmer - 统计基础知识:为许多统计概念提供简单明了的解释。
- Aerin 女士的 AP 统计直觉:提供每个概率分布背后的直觉的中等文章列表。
- 沉浸式线性代数:线性代数的另一种视觉解释。
- Khan Academy - 线性代数:非常适合初学者,因为它以非常直观的方式解释了概念。
- 可汗学院 - 微积分:一门涵盖微积分所有基础知识的互动课程。
- 可汗学院 - 概率与统计:以易于理解的格式提供材料。
2. 用于机器学习的Python
Python 是一种强大而灵活的编程语言,由于其可读性、一致性和强大的数据科学库生态系统,特别适合机器学习。
- Python基础知识:Python编程需要很好地理解基本语法、数据类型、错误处理和面向对象编程。
- 数据科学库:包括熟悉用于数值运算的 NumPy、用于数据操作和分析的 Pandas、用于数据可视化的 Matplotlib 和 Seaborn。
- 数据预处理:这涉及特征缩放和标准化、处理缺失数据、异常值检测、分类数据编码以及将数据拆分为训练集、验证集和测试集。
- 机器学习库:熟练使用 Scikit-learn(一个提供多种监督和非监督学习算法的库)至关重要。了解如何实现线性回归、逻辑回归、决策树、随机森林、k 最近邻 (K-NN) 和 K 均值聚类等算法非常重要。 PCA 和 t-SNE 等降维技术也有助于可视化高维数据。
资源:
- Real Python:综合资源,包含针对初学者和高级 Python 概念的文章和教程。
- freeCodeCamp - 学习 Python:长视频,完整介绍了 Python 中的所有核心概念。
- Python 数据科学手册:免费的数字书籍,是学习 pandas、NumPy、Matplotlib 和 Seaborn 的绝佳资源。
- freeCodeCamp - 适合所有人的机器学习:针对初学者的不同机器学习算法的实用介绍。
- Udacity - 机器学习简介:免费课程,涵盖 PCA 和其他几个机器学习概念。
3. 神经网络
神经网络是许多机器学习模型的基本组成部分,特别是在深度学习领域。为了有效地利用它们,全面了解它们的设计和机制至关重要。
- 基础知识:这包括理解神经网络的结构,例如层、权重、偏差和激活函数(sigmoid、tanh、ReLU 等)
- 训练和优化:熟悉反向传播和不同类型的损失函数,例如均方误差 (MSE) 和交叉熵。了解各种优化算法,例如梯度下降、随机梯度下降、RMSprop 和 Adam。
- 过度拟合:了解过度拟合的概念(模型在训练数据上表现良好,但在未见过的数据上表现不佳)并学习各种正则化技术(dropout、L1/L2 正则化、提前停止、数据增强)来防止过度拟合。
- 实现多层感知器 (MLP) :使用 PyTorch 构建 MLP,也称为全连接网络。
资源:
- 3Blue1Brown - 但什么是神经网络?:该视频直观地解释了神经网络及其内部工作原理。
- freeCodeCamp - 深度学习速成课程:该视频有效地介绍了深度学习中所有最重要的概念。
- Fast.ai - 实用深度学习:为具有编码经验、想要了解深度学习的人设计的免费课程。
- Patrick Loeber - PyTorch 教程:为初学者学习 PyTorch 的系列视频。
4.自然语言处理(NLP)
NLP 是人工智能的一个令人着迷的分支,它弥合了人类语言和机器理解之间的差距。从简单的文本处理到理解语言的细微差别,NLP 在翻译、情感分析、聊天机器人等许多应用中发挥着至关重要的作用。
- 文本预处理:学习各种文本预处理步骤,例如分词(将文本分割成单词或句子)、词干提取(将单词还原为其词根形式)、词形还原(与词干提取类似,但考虑上下文)、停用词删除等。
- 特征提取技术:熟悉将文本数据转换为机器学习算法可以理解的格式的技术。主要方法包括词袋 (BoW)、词频-逆文档频率 (TF-IDF) 和 n-gram。
- 词嵌入:词嵌入是一种词表示形式,允许具有相似含义的词具有相似的表示形式。主要方法包括 Word2Vec、GloVe 和 FastText。
- 递归神经网络 (RNN) :了解 RNN 的工作原理,RNN 是一种设计用于处理序列数据的神经网络。探索 LSTM 和 GRU,这两种能够学习长期依赖关系的 RNN 变体。
资源:
- RealPython - NLP with spaCy in Python:有关 Python 中用于 NLP 任务的 spaCy 库的详尽指南。
- Kaggle - NLP 指南:一些笔记本和资源,用于对 Python 中的 NLP 进行实际解释。
- Jay Alammar - Word2Vec 插图:了解著名的 Word2Vec 架构的一个很好的参考。
- Jake Tae - PyTorch RNN from Scratch:在 PyTorch 中实用且简单地实现 RNN、LSTM 和 GRU 模型。
- colah 的博客 - Understanding LSTM Networks:一篇关于 LSTM 网络更具理论性的文章。
??法学硕士科学家
本课程的这一部分重点学习如何使用最新技术构建最好的法学硕士。
1. 法学硕士架构
虽然不需要深入了解 Transformer 架构,但深入了解其输入(令牌)和输出(logits)非常重要。普通的注意力机制是另一个需要掌握的关键组成部分,稍后会介绍它的改进版本。
- 高级视图:重新审视编码器-解码器 Transformer 架构,更具体地说,是仅解码器的 GPT 架构,该架构在每个现代 LLM 中都使用。
- 标记化:了解如何将原始文本数据转换为模型可以理解的格式,这涉及将文本拆分为标记(通常是单词或子词)。
- 注意力机制:掌握注意力机制背后的理论,包括自注意力和缩放点积注意力,这使得模型在产生输出时能够关注输入的不同部分。
- 文本生成:了解模型生成输出序列的不同方式。常见的策略包括贪婪解码、波束搜索、top-k 采样和核采样。
参考:
- Jay Alammar 绘制的 Transformer 插图:Transformer 模型的直观解释。
- Jay Alammar 的 GPT-2 插图:比上一篇文章更重要,它重点关注 GPT 架构,与 Llama 非常相似。
- 3Blue1Brown 的《变形金刚》视觉介绍:简单易懂的《变形金刚》视觉介绍
- Brendan Bycroft 的 LLM 可视化:以令人难以置信的 3D 可视化方式呈现 LLM 内部发生的情况。
- nanoGPT,作者:Andrej Karpathy:一段 2 小时长的 YouTube 视频,用于从头开始重新实现 GPT(针对程序员)。
- 注意力?注意力!作者:Lilian Weng:以更正式的方式介绍关注的必要性。
- 法学硕士中的解码策略:提供代码和对生成文本的不同解码策略的直观介绍。
2. 构建指令数据集
虽然从维基百科和其他网站找到原始数据很容易,但很难在野外收集成对的指令和答案。与传统机器学习一样,数据集的质量将直接影响模型的质量,这就是为什么它可能是微调过程中最重要的组成部分。
- 类似 Alpaca 的数据集:使用 OpenAI API (GPT) 从头开始生成合成数据。您可以指定种子和系统提示来创建多样化的数据集。
- 高级技术:了解如何使用 Evol-Instruct 改进现有数据集,如何生成 Orca 和 phi-1 论文中的高质量合成数据。
- 过滤数据:传统技术涉及正则表达式、删除近似重复项、关注具有大量标记的答案等。
- 提示模板:没有真正的标准方法来格式化说明和答案,这就是为什么了解不同的聊天模板(例如 ChatML、Alpaca 等)很重要。
参考:
- 为指令调整准备数据集,作者:Thomas Capelle:探索 Alpaca 和 Alpaca-GPT4 数据集以及如何格式化它们。
- 生成临床指导数据集 作者:Solano Todeschini:有关如何使用 GPT-4 创建综合指导数据集的教程。
- 用于新闻分类的 GPT 3.5,作者:Kshitiz Sahay:使用 GPT 3.5 创建指令数据集来微调 Llama 2 的新闻分类。
- 用于微调 LLM 的数据集创建:包含一些过滤数据集和上传结果的技术的笔记本。
- Matthew Carrigan 的聊天模板:Hugging Face 关于提示模板的页面
3. 预训练模型
预训练是一个非常漫长且成本高昂的过程,这就是为什么这不是本课程的重点。对预训练期间发生的情况有一定程度的了解是很好的,但不需要实践经验。
- 数据管道:预训练需要巨大的数据集(例如,Llama 2 使用 2 万亿个标记进行训练),需要对这些数据集进行过滤、标记化并与预定义的词汇进行整理。
- 因果语言建模:了解因果语言建模和屏蔽语言建模之间的区别,以及本例中使用的损失函数。为了进行高效的预训练,请了解有关 Megatron-LM 或 gpt-neox 的更多信息。
- 缩放法则:缩放法则根据模型大小、数据集大小和用于训练的计算量描述预期的模型性能。
- 高性能计算:超出了本文的范围,但如果您打算从头开始创建自己的法学硕士(硬件、分布式工作负载等),那么更多有关 HPC 的知识是基础。
参考:
- LLMDataHub,作者:Junhao Zhu:用于预训练、微调和 RLHF 的精选数据集列表。
- 通过 Hugging Face 从头开始训练因果语言模型:使用 Transformers 库从头开始预训练 GPT-2 模型。
- TinyLlama,作者:Zhang 等人:查看此项目,可以很好地了解 Llama 模型是如何从头开始训练的。
- Hugging Face 的因果语言建模:解释因果语言建模和屏蔽语言建模之间的区别以及如何快速微调 DistilGPT-2 模型。
- 怀旧学者对 Chinchilla 的疯狂暗示:讨论缩放定律并解释它们对法学硕士的一般意义。
- BigScience 的 BLOOM:概念页面,描述了如何构建 BLOOM 模型,其中包含有关工程部分和遇到的问题的大量有用信息。
- Meta 的 OPT-175 日志:研究日志显示出了什么问题以及什么是正确的。如果您计划预训练非常大的语言模型(在本例中为 175B 参数),则非常有用。
- LLM 360:开源法学硕士框架,包含培训和数据准备代码、数据、指标和模型。
4. 监督微调
预训练模型仅针对下一个标记预测任务进行训练,这就是为什么它们不是有用的助手。 SFT 允许您调整它们以响应指令。此外,它允许您根据任何数据(私有数据、GPT-4 无法看到的数据等)微调您的模型并使用它,而无需支付 OpenAI 等 API 的费用。
- 全微调:全微调是指训练模型中的所有参数。这不是一种有效的技术,但它会产生稍微好一点的结果。
- LoRA :一种基于低阶适配器的参数高效技术(PEFT)。我们不训练所有参数,而是只训练这些适配器。
- QLoRA :另一种基于 LoRA 的 PEFT,它还将模型的权重量化为 4 位,并引入分页优化器来管理内存峰值。将其与 Unsloth 结合使用,可以在免费的 Colab 笔记本上高效运行。
- Axolotl :一种用户友好且功能强大的微调工具,用于许多最先进的开源模型。
- DeepSpeed :针对多 GPU 和多节点设置的 LLM 的高效预训练和微调(在 Axolotl 中实现)。
参考:
- Alpin 的新手 LLM 培训指南:概述微调 LLM 时要考虑的主要概念和参数。
- Sebastian Raschka 的 LoRA 见解:有关 LoRA 以及如何选择最佳参数的实用见解。
- 微调您自己的 Llama 2 模型:有关如何使用 Hugging Face 库微调 Llama 2 模型的实践教程。
- 填充大型语言模型作者:Benjamin Marie:为因果法学硕士填充训练示例的最佳实践
- LLM 微调初学者指南:有关如何使用 Axolotl 微调 CodeLlama 模型的教程。
5. 偏好调整
经过监督微调后,RLHF 是用于使 LLM 的答案与人类期望保持一致的一个步骤。这个想法是从人类(或人工)反馈中学习偏好,这可用于减少偏见、审查模型或使它们以更有用的方式行事。它比 SFT 更复杂,并且通常被视为可选的。
- 偏好数据集:这些数据集通常包含具有某种排名的多个答案,这使得它们比指令数据集更难生成。
- 近端策略优化:该算法利用奖励模型来预测给定文本是否被人类排名较高。然后使用该预测来优化 SFT 模型,并根据 KL 散度进行惩罚。
- 直接偏好优化:DPO 通过将其重新定义为分类问题来简化该过程。它使用参考模型而不是奖励模型(无需训练),并且只需要一个超参数,使其更加稳定和高效。
参考:
- Distilabel by Argilla:创建自己的数据集的优秀工具。它是专门为偏好数据集设计的,但也可以进行 SFT。
- Ayush Thakur 的《使用 RLHF 培训法学硕士简介》:解释为什么 RLHF 对于减少法学硕士的偏见和提高绩效是可取的。
- Hugging Face 插图 RLHF:RLHF 简介,包括奖励模型训练和强化学习微调。
- 通过 Hugging Face 进行偏好调整 LLM:比较 DPO、IPO 和 KTO 算法以执行偏好对齐。
- LLM 培训:RLHF 及其替代方案,作者:Sebastian Rashcka:RLHF 流程和 RLAIF 等替代方案的概述。
- 使用 DPO 微调 Mistral-7b:使用 DPO 微调 Mistral-7b 模型并重现 NeuralHermes-2.5 的教程。
六、评价
评估法学硕士是管道中被低估的部分,既耗时又不可靠。您的下游任务应该决定您想要评估的内容,但请始终记住古德哈特定律:“当一项措施成为目标时,它就不再是一个好的措施。”
- 传统指标:困惑度和 BLEU 分数等指标并不像以前那么受欢迎,因为它们在大多数情况下都存在缺陷。了解它们以及何时应用它们仍然很重要。
- 通用基准:基于语言模型评估工具,开放 LLM 排行榜是通用 LLM(如 ChatGPT)的主要基准。还有其他流行的基准测试,如 BigBench、MT-Bench 等。
- 特定于任务的基准:摘要、翻译和问答等任务有专用的基准、指标,甚至子领域(医学、金融等),例如用于生物医学问答的 PubMedQA。
- 人工评价:最可靠的评价是用户的接受率或人工的比较。除了聊天记录之外,记录用户反馈(例如,使用 LangSmith)有助于识别潜在的改进领域。
参考:
- Hugging Face 的固定长度模型的困惑:使用 Transformer 库实现它的代码的困惑概述。
- BLEU 风险自负,作者:Rachael Tatman:BLEU 分数及其许多问题的概述和示例。
- Chang 等人的法学硕士评估调查:关于评估内容、评估地点以及如何评估的综合论文。
- lmsys 的 Chatbot Arena 排行榜:基于人类进行的比较的通用 LLM 的 Elo 评级。
7. 量化
量化是使用较低精度转换模型权重(和激活)的过程。例如,使用 16 位存储的权重可以转换为 4 位表示。这项技术对于降低法学硕士相关的计算和内存成本变得越来越重要。
- 基本技术:学习不同级别的精度(FP32、FP16、INT8 等)以及如何使用 absmax 和零点技术执行简单量化。
- GGUF 和 llama.cpp :llama.cpp 和 GGUF 格式最初设计为在 CPU 上运行,现已成为在消费级硬件上运行 LLM 的最流行工具。
- GPTQ 和 EXL2 :GPTQ,更具体地说,EXL2 格式提供了令人难以置信的速度,但只能在 GPU 上运行。模型也需要很长时间才能量化。
- AWQ :这种新格式比 GPTQ 更准确(更低的复杂性),但使用更多的 VRAM,并且不一定更快。
参考:
- 量化简介:量化概述、absmax 和零点量化以及 LLM.int8() 和代码。
- 使用 llama.cpp 量化 Llama 模型:有关如何使用 llama.cpp 和 GGUF 格式量化 Llama 2 模型的教程。
- 使用 GPTQ 进行 4 位 LLM 量化:有关如何使用 GPTQ 算法和 AutoGPTQ 来量化 LLM 的教程。
- ExLlamaV2:运行 LLM 最快的库:有关如何使用 EXL2 格式量化 Mistral 模型并使用 ExLlamaV2 库运行它的指南。
- 了解 FriendliAI 的激活感知权重量化:AWQ 技术及其优势概述。
8. 新趋势
- 位置嵌入:了解 LLM 如何编码位置,尤其是 RoPE 等相对位置编码方案。实现 YaRN(将注意力矩阵乘以温度因子)或 ALiBi(基于标记距离的注意力惩罚)来扩展上下文长度。
- 模型合并:合并经过训练的模型已成为创建高性能模型而无需任何微调的流行方式。流行的 mergekit 库实现了最流行的合并方法,例如 SLERP、DARE 和 TIES。
- 专家混合:Mixtral 凭借其出色的性能重新流行了 MoE 架构。与此同时,OSS 社区中出现了一种 FrankenMoE,它合并了 Phixtral 等模型,这是一种更便宜且高性能的选择。
- 多模态模型:这些模型(如 CLIP、Stable Diffusion 或 LLaVA)使用统一的嵌入空间处理多种类型的输入(文本、图像、音频等),从而解锁文本到图像等强大的应用程序。
参考:
- Extending the RoPE by EleutherAI:总结不同位置编码技术的文章。
- Rajat Chawla 的《理解 YaRN》:YaRN 简介。
- 使用 mergekit 合并 LLM:有关使用 mergekit 进行模型合并的教程。
- Hugging Face 解释了专家的混合:关于 MoE 及其工作方式的详尽指南。
- 大型多模态模型,作者:Chip Huyen:多模态系统概述和该领域的最新历史。
?法学硕士工程师
本课程的这一部分重点学习如何构建可在生产中使用的由 LLM 支持的应用程序,重点是增强模型和部署它们。
1. 运行法学硕士
由于硬件要求较高,运行法学硕士可能很困难。根据您的用例,您可能只想通过 API(如 GPT-4)使用模型或在本地运行它。无论如何,额外的提示和指导技术可以改进和限制应用程序的输出。
- LLM API :API 是部署 LLM 的便捷方法。这个空间分为私人法学硕士(OpenAI、Google、Anthropic、Cohere 等)和开源法学硕士(OpenRouter、Hugging Face、Together AI 等)。
- 开源法学硕士:Hugging Face Hub 是寻找法学硕士的好地方。您可以直接在 Hugging Face Spaces 中运行其中一些,或者在 LM Studio 等应用程序中本地下载并运行它们,或者通过 CLI 使用 llama.cpp 或 Ollama。
- 提示工程:常见技术包括零样本提示、少样本提示、思维链和 ReAct。它们与较大的模型配合得更好,但也可以适应较小的模型。
- 结构化输出:许多任务需要结构化输出,例如严格的模板或 JSON 格式。 LMQL、Outlines、Guidance 等库可用于指导生成并尊重给定的结构。
参考:
- Nisha Arya 的使用 LM Studio 在本地运行法学硕士:有关如何使用 LM Studio 的简短指南。
- DAIR.AI 的提示工程指南:带有示例的提示技术的详尽列表
- Outlines - 快速入门:Outlines 支持的引导生成技术列表。
- LMQL - 概述:LMQL 语言简介。
2. 构建向量存储
创建向量存储是构建检索增强生成 (RAG) 管道的第一步。加载、分割文档,并使用相关块来生成向量表示(嵌入),并将其存储起来以供将来在推理过程中使用。
- 摄取文档:文档加载器是方便的包装器,可以处理多种格式:PDF、JSON、HTML、Markdown 等。它们还可以直接从某些数据库和 API(GitHub、Reddit、Google Drive 等)检索数据。
- 分割文档:文本分割器将文档分解为更小的、具有语义意义的块。与其在n 个字符后分割文本,不如按标题或递归方式分割文本,并使用一些附加元数据。
- 嵌入模型:嵌入模型将文本转换为向量表示。它允许对语言有更深入、更细致的理解,这对于执行语义搜索至关重要。
- 向量数据库:向量数据库(如 Chroma、Pinecone、Milvus、FAISS、Annoy 等)旨在存储嵌入向量。它们能够根据向量相似性高效检索与查询“最相似”的数据。
参考:
- LangChain - 文本分割器:LangChain 中实现的不同文本分割器的列表。
- Sentence Transformers 库:流行的嵌入模型库。
- MTEB Leaderboard:嵌入模型的排行榜。
- Moez Ali 的前 5 个矢量数据库:最好和最流行的矢量数据库的比较。
3. 检索增强生成
借助 RAG,法学硕士可以从数据库中检索上下文文档,以提高答案的准确性。 RAG 是一种无需任何微调即可增强模型知识的流行方法。
- Orchestrators :Orchestrators(如LangChain、LlamaIndex、FastRAG等)是流行的框架,用于将LLM与工具、数据库、内存等连接起来并增强他们的能力。
- 检索器:用户指令未针对检索进行优化。可以应用不同的技术(例如,多查询检索器、HyDE 等)来重新表述/扩展它们并提高性能。
- 记忆:为了记住以前的说明和答案,LLM 和 ChatGPT 等聊天机器人会将此历史记录添加到其上下文窗口中。该缓冲区可以通过汇总(例如,使用较小的 LLM)、向量存储 + RAG 等来改进。
- 评估:我们需要评估文档检索(上下文精度和召回率)和生成阶段(可信度和答案相关性)。可以使用 Ragas 和 DeepEval 工具进行简化。
参考:
- Llamaindex - 高级概念:构建 RAG 管道时需要了解的主要概念。
- Pinecone - 检索增强:检索增强过程概述。
- LangChain - RAG 问答:构建典型 RAG 管道的分步教程。
- LangChain - 内存类型:不同类型内存及其相关用途的列表。
- RAG 管道 - 指标:用于评估 RAG 管道的主要指标的概述。
4.高级RAG
现实应用程序可能需要复杂的管道,包括 SQL 或图形数据库,以及自动选择相关工具和 API。这些先进技术可以改进基准解决方案并提供附加功能。
- 查询构造:传统数据库中存储的结构化数据需要特定的查询语言,如SQL、Cypher、元数据等。我们可以通过查询构造将用户指令直接翻译为查询来访问数据。
- 代理和工具:代理通过自动选择最相关的工具来提供答案来增强法学硕士。这些工具可以像使用 Google 或 Wikipedia 一样简单,也可以像 Python 解释器或 Jira 一样复杂。
- 后处理:处理输入到 LLM 的输入的最后一步。它通过重新排序、RAG 融合和分类增强了检索到的文档的相关性和多样性。
- 程序法学硕士:DSPy 等框架允许您以编程方式基于自动评估来优化提示和权重。
参考:
- LangChain - 查询构造:关于不同类型的查询构造的博客文章。
- LangChain - SQL:关于如何使用 LLM 与 SQL 数据库交互的教程,涉及文本到 SQL 和可选的 SQL 代理。
- Pinecone - LLM代理:不同类型代理和工具的介绍。
- Lilian Weng 的 LLM Powered Autonomous Agents:有关 LLM 代理的更多理论文章。
- LangChain - OpenAI 的 RAG:OpenAI 采用的 RAG 策略概述,包括后处理。
- DSPy 的 8 个步骤:DSPy 通用指南,介绍模块、签名和优化器。
5. 推理优化
文本生成是一个成本高昂的过程,需要昂贵的硬件。除了量化之外,还提出了各种技术来最大化吞吐量并降低推理成本。
- Flash Attention :优化注意力机制,将其复杂度从二次型转变为线性型,加快训练和推理速度。
- 键值缓存:了解键值缓存以及多查询注意(MQA)和分组查询注意(GQA)中引入的改进。
- 推测性解码:使用小型模型生成草稿,然后由较大模型进行审查以加快文本生成速度。
参考:
- GPU Inference by Hugging Face:解释如何优化 GPU 上的推理。
- Databricks 的 LLM 推理:如何在生产中优化 LLM 推理的最佳实践。
- Optimizing LLMs for Speed and Memory by Hugging Face:解释优化速度和内存的三种主要技术,即量化、Flash Attention 和架构创新。
- Assisted Generation by Hugging Face:HF 版本的推测解码,这是一篇有趣的博客文章,介绍了它如何使用代码来实现。
6. 部署法学硕士
大规模部署 LLM 是一项工程壮举,可能需要多个 GPU 集群。在其他场景中,可以以低得多的复杂度来实现演示和本地应用程序。
- 本地部署:隐私是开源 LLM 相对于私有 LLM 的一个重要优势。本地 LLM 服务器(LM Studio、Ollama、oobabooga、kobold.cpp 等)利用这一优势来支持本地应用程序。
- 演示部署:Gradio 和 Streamlit 等框架有助于构建应用程序原型并共享演示。您还可以轻松地在线托管它们,例如使用 Hugging Face Spaces。
- 服务器部署:在大规模上部署LLM需要云(另请参见Skypilot)或本地基础架构,并且经常利用优化的文本生成框架(如TGI,VLLM,等)。
- 边缘部署:在受约束的环境中,MLC LLM和MNN-LLM等高性能框架可以在Web浏览器,Android和iOS中部署LLM。
参考:
- 简化 - 构建一个基本的LLM应用程序:教程,使用简化制作基本的类似于ChatGpt的应用程序。
- HF LLM推理容器:使用拥抱Face的推理容器在Amazon Sagemaker上部署LLM。
- Philipp Schmid的Philschmid博客:使用Amazon Sagemaker收集了有关LLM部署的高质量文章。
- Hamel Husain优化潜伏期:根据吞吐量和潜伏期的TGI,VLLM,Ctranslate2和MLC的比较。
7。固定LLM
除了与软件相关的传统安全问题外,LLM还具有独特的弱点,因为它们的训练和提示方式。
- 及时黑客入侵:与及时工程有关的不同技术,包括及时注入(劫持模型答案的其他指示),数据/提示泄漏(检索其原始数据/提示)和越狱(工艺提示绕过安全功能)。
- 后门:攻击向量可以通过中毒培训数据(例如,使用虚假信息)或创建后门(在推理期间改变模型的行为)来定位培训数据本身。
- 防御措施:保护您的LLM应用程序的最佳方法是测试它们,以防止这些漏洞(例如,使用红色小组和Garak之类的检查),并在生产中观察它们(具有Langfuse之类的框架)。
参考:
- OWASP LLM Hego Wiki的前10名:LLM应用中看到的10个批评家漏洞的清单。
- 约瑟夫·塔克(Joseph Thacker)的及时注射底漆:简短指南致力于为工程师提示注射。
- @LLM_SEC的LLM Security:与LLM Security相关的资源的广泛列表。
- Microsoft的Red Teamle LLMS:如何与LLMS执行红色团队的指南。
致谢
该路线图的灵感来自MilanMilanović和Romano Roth的出色Devops路线图。
特别鸣谢:
- 托马斯·塞伦(Thomas Thelen)激励我创建路线图
- 安德烈·弗雷德(AndréFrade)的投入和审查初稿
- Dino Dunn提供有关LLM安全的资源
- Magdalena Kuhn改善了“人类评估”部分
- odoverdose建议3Blue1brown关于变形金刚的视频
免责声明:我不隶属于此处列出的任何来源。