机器翻译正文由机器翻译自项目原始文档(英文),排版经程序统一处理,可能存在偏差,请以原项目仓库为准。
𝕏 Follow me on X • 🤗 Hugging Face • 💻 Blog • 📙 LLM Engineer's Handbook
- 🧩 LLM基础 是可选的,涵盖数学、Python和神经网络的基础知识。
- 🧑🔬 LLM科学家 专注于使用最新技术构建尽可能最好的LLM。
- 👷 LLM工程师 专注于创建基于LLM的应用程序并进行部署。
[!注意]
基于本课程,我共同编写了《LLM工程师手册》,这是一本实践性书籍,涵盖从设计到部署的端到端LLM应用。LLM课程将始终免费,但你可以通过购买此书来支持我的工作。
欲了解本课程的更全面版本,请查看《DeepWiki》.
📝 笔记本
我撰写的关于大型语言模型(LLMs)的笔记本和文章列表。
切换部分(可选)
工具
| 笔记本 | 描述 | 笔记本 |
|---|---|---|
| 🧐 LLM 自动评估 | 使用 RunPod 自动评估您的 LLM | |
| 🥱 懒人合并工具包 | 使用 MergeKit 一键轻松合并模型。 | |
| 🦎 懒洋洋的墨西哥钝口螈 | 使用 Axolotl,一键在云端微调模型。 | |
| ⚡ 自动量化 | 一键将 LLMs 量化为 GGUF、GPTQ、EXL2、AWQ 和 HQQ 格式。 | |
| 🌳 模型家谱 | 可视化合并模型的家谱。 | |
| 🚀 零空间 | 使用免费的 ZeroGPU 自动创建 Gradio 聊天界面。 | |
| ✂️ 自动消融 | 使用自定义数据集自动进行消音模型。 | |
| 🧼 自动去重 | 使用 Rensa 库自动去重数据集。 |
微调
| 笔记本 | 描述 | 物品 | 笔记本 |
|---|---|---|---|
| 使用 Unsloth 对 Llama 3.1 进行微调 | 在 Google Colab 中进行超高效的监督微调 | 文章 | |
| 使用 ORPO 对 Llama 3 进行微调 | 使用 ORPO 在单阶段中进行更便宜、更快速的微调。 | 文章 | |
| 使用 DPO 对 Mistral-7b 进行微调 | 使用 DPO 提升监督微调模型的性能 | 文章 | |
| 使用 QLoRA 微调 Mistral-7b | 在免费版 Google Colab 中使用 TRL 对 Mistral-7b 进行监督微调 | ||
| 使用 Axolotl 微调 CodeLlama | 端到端指南,针对微调的最先进工具。 | 文章 | |
| 使用 QLoRA 对 Llama 2 进行微调 | 在 Google Colab 中对 Llama 2 进行监督微调的分步指南 | 文章 |
量化
| 笔记本 | 描述 | 物品 | 笔记本 |
|---|---|---|---|
| 量化简介 | 使用 8 位量化进行大型语言模型优化。 | 文章 | |
| 使用 GPTQ 进行 4 位量化 | 对您的开源 LLM 进行量化,以便在消费者硬件上运行它们。 | 文章 | |
| 使用 GGUF 和 llama.cpp 进行量化 | 使用 llama.cpp 对 Llama 2 模型进行量化,并将 GGUF 版本上传到 HF Hub。 | 文章 | |
| ExLlamaV2:运行 LLM 的最快库 | 对 EXL2 模型进行量化和运行,并将它们上传到 HF Hub。 | 文章 |
其他
| 笔记本 | 描述 | 物品 | 笔记本 |
|---|---|---|---|
| 使用 MergeKit 合并 LLMs | 轻松创建您自己的模型,无需 GPU! | 文章 | |
| 使用 MergeKit 创建 MoEs | 将多个专家组合成单个 frankenMoE | 文章 | |
| 用消灭功能解除任何大型语言模型的审查 | 无需重新训练即可微调 | 文章 | |
| 使用知识图谱改进 ChatGPT | 使用知识图谱增强 ChatGPT 的回答。 | 文章 | |
| 大型语言模型中的解码策略 | 文本生成指南,从束搜索到核采样 | 文章 |
🧩 大语言模型基础
本节介绍了数学、Python 和神经网络的基础知识。你可能不想从这里开始,但可以根据需要参考。
切换部分(可选)
1. 机器学习的数学
在掌握机器学习之前,理解支撑这些算法的基本数学概念非常重要。
- 线性代数:这是理解许多算法,尤其是深度学习中使用的算法的关键。主要概念包括向量、矩阵、行列式、特征值和特征向量、向量空间以及线性变换。
- 微积分:许多机器学习算法涉及连续函数的优化,这需要理解导数、积分、极限和级数。多变量微积分和梯度的概念也很重要。
- 概率与统计:这些对于理解模型如何从数据中学习和进行预测至关重要。主要概念包括概率论、随机变量、概率分布、期望、方差、协方差、相关性、假设检验、置信区间、最大似然估计和贝叶斯推断。
📚 资源:
- 3Blue1Brown - 线性代数的本质:一系列视频,提供对这些概念的几何直观理解。
- StatQuest with Josh Starmer - 统计基础:为许多统计概念提供简单明了的解释。
- Seeing Theory:布朗大学提供的概率与统计的可视化入门。
- Immersive Linear Algebra: Another visual interpretation of linear algebra.
- 可汗学院 - 线性代数:非常适合初学者,因为它以非常直观的方式解释概念。
- 可汗学院 - 微积分:一个互动课程,涵盖微积分的所有基础知识。
- 可汗学院 - 概率与统计:以易于理解的形式呈现内容。
2. 用于机器学习的Python
Python是一种强大且灵活的编程语言,特别适合用于机器学习,这要归功于它的可读性、一致性以及强大的数据科学库生态系统。
- Python基础:Python编程需要对基本语法、数据类型、错误处理和面向对象编程有很好的理解。
- 数据科学库:这包括熟悉用于数值运算的NumPy,用于数据处理和分析的Pandas,以及用于数据可视化的Matplotlib和Seaborn。
- 数据预处理:这涉及特征缩放和归一化、处理缺失数据、异常值检测、分类数据编码,以及将数据分为训练集、验证集和测试集。
- 机器学习库:熟练使用Scikit-learn库非常重要,该库提供了多种监督学习和无监督学习算法。理解如何实现如线性回归、逻辑回归、决策树、随机森林、k近邻(K-NN)和K均值聚类等算法也很重要。像PCA和t-SNE这样的降维技术对于高维数据的可视化也很有帮助。
📚 资源:
- Real Python:一个全面的资源,提供针对初学者和高级Python概念的文章和教程。
- freeCodeCamp - Learn Python:一段很长的视频,提供对Python所有核心概念的完整介绍。
- Python 数据科学手册:免费的电子书,是学习 pandas、NumPy、Matplotlib 和 Seaborn 的极好资源。
- freeCodeCamp - 面向所有人的机器学习:为初学者提供不同机器学习算法的实用入门介绍。
- Udacity - 机器学习入门:免费课程,涵盖PCA及其他几个机器学习概念。
3. 神经网络
神经网络是许多机器学习模型的基础部分,特别是在深度学习领域。要有效利用它们,全面理解其设计和机制是必不可少的。
- 基础知识:这包括理解神经网络的结构,例如层、权重、偏置和激活函数(sigmoid、tanh、ReLU 等)
- 训练与优化:熟悉反向传播和不同类型的损失函数,如均方误差(MSE)和交叉熵。了解各种优化算法,如梯度下降、随机梯度下降、RMSprop 和 Adam。
- 过拟合:理解过拟合的概念(模型在训练数据上表现良好但在未见数据上表现较差),并学习各种正则化技术(dropout、L1/L2 正则化、提前停止、数据增强)来防止过拟合。
- 实现多层感知器 (MLP):使用 PyTorch 构建多层感知器,也称为全连接网络。
📚 资源:
- 3Blue1Brown - 什么是神经网络?: 这个视频直观地解释了神经网络及其内部工作原理。
- freeCodeCamp - 深度学习速成课程: 这个视频高效地介绍了深度学习中最重要的所有概念。
- Fast.ai - 实用深度学习: 免费课程,面向有编程经验且想学习深度学习的人。
- Patrick Loeber - PyTorch 教程: 为完全初学者设计的系列视频,用于学习 PyTorch。
4. 自然语言处理 (NLP)
自然语言处理(NLP)是人工智能中一个令人着迷的分支,它弥合了人类语言与机器理解之间的鸿沟。从简单的文本处理到理解语言细微差别,NLP 在翻译、情感分析、聊天机器人等许多应用中都发挥着至关重要的作用。
- 文本预处理:学习各种文本预处理步骤,如分词(将文本拆分为单词或句子)、词干提取(将单词还原为词根形式)、词形还原(类似于词干提取,但考虑上下文)、停用词移除等。
- 特征提取技术:熟悉将文本数据转换为机器学习算法可理解格式的技术。主要方法包括词袋模型(BoW)、词频-逆文档频率(TF-IDF)和n-gram模型。
- 词向量:词向量是一种词表示方法,使具有相似意义的单词具有相似的表示。主要方法包括Word2Vec、GloVe和FastText。
- 循环神经网络(RNN):理解RNN的工作原理,这是一种设计用于处理序列数据的神经网络。探索LSTM和GRU,这两种RNN变体能够学习长期依赖关系。
📚 资源:
- Lena Voita - 词嵌入:面向初学者的课程,讲解与词嵌入相关的概念。
- RealPython - 使用 Python 中的 spaCy 进行 NLP:关于在 Python 中使用 spaCy 库进行 NLP 任务的详尽指南。
- Kaggle - NLP 指南:一些笔记本和资源,用于 Python 中 NLP 的实践讲解。
- Jay Alammar - 图解 Word2Vec:理解著名 Word2Vec 架构的良好参考资料。
- Jake Tae - 从零开始的 PyTorch RNN:在 PyTorch 中实现 RNN、LSTM 和 GRU 模型的实用且简单的方法。
- colah 博客 - 理解 LSTM 网络:一篇关于 LSTM 网络的更理论化的文章。
🧑🔬 大语言模型科学家
本课程部分侧重于学习如何使用最新技术构建最佳的LLM。
1. LLM架构
不需要深入了解Transformer架构,但理解现代LLM的主要步骤很重要:通过分词将文本转换为数字,通过包括注意力机制的层处理这些标记,最后通过各种采样策略生成新文本。
- 架构概述:了解从编码器-解码器Transformer向仅解码器架构(如GPT)的演变,这些是现代LLM的基础。重点关注这些模型如何高层次地处理和生成文本。
- 分词:学习分词的原理——文本如何转换为LLM可以处理的数字表示。探索不同的分词策略及其对模型性能和输出质量的影响。
- 注意力机制:掌握注意力机制的核心概念,特别是自注意力及其变体。理解这些机制如何使LLM能够处理长程依赖并在序列中保持上下文。
- 采样技术:探索各种文本生成方法及其权衡。比较贪婪搜索和束搜索等确定性方法与温度采样和核采样等概率方法。
📚 参考文献:
- Transformer可视化介绍 由3Blue1Brown制作:面向初学者的Transformer可视化介绍。
- LLM可视化 由Brendan Bycroft制作:LLM内部的互动3D可视化。
- nanoGPT 由Andrej Karpathy制作:一个2小时的YouTube视频,从零实现GPT(适合程序员)。他还制作了关于分词的视频。
- Attention? Attention! 由Lilian Weng制作:历史概述,介绍注意力机制的必要性。
- LLM中的解码策略 由Maxime Labonne制作:提供代码和不同解码策略生成文本的可视化介绍。
2. 预训练模型
预训练是一个计算密集且成本高昂的过程。虽然这不是本课程的重点,但深入了解模型的预训练方式非常重要,尤其是在数据和参数方面。业余爱好者也可以在小规模上使用<1B模型进行预训练。
- 数据准备:预训练需要大量数据集(例如,Llama 3.1 在 15 万亿个标记上进行训练),这些数据集需要仔细策划、清理、去重和分词。现代预训练流程实施了复杂的过滤机制,以去除低质量或有问题的内容。
- 分布式训练:结合不同的并行化策略:数据并行(批处理分发)、流水线并行(层分配)和张量并行(操作拆分)。这些策略需要优化GPU集群间的网络通信和内存管理。
- 训练优化:利用自适应学习率配合热身、梯度裁剪和归一化防止爆炸,混合精度训练提升记忆效率,以及现代优化器(AdamW、Lion)和调优超参数。
- 监控:利用仪表盘跟踪关键指标(损耗、梯度、GPU统计),针对分布式训练问题实施有针对性日志,并设置性能分析以识别设备间计算和通信的瓶颈。
📚 参考文献:
- FineWeb 由 Penedo 等人撰写:文章旨在重建用于大型语言模型预训练的大规模数据集(15T),包括 FineWeb-Edu,一个高质量的子集。
- RedPajama v2 由 Weber 等人撰写:另一篇关于大规模预训练数据集的文章和论文,该数据集包含许多有趣的质量筛选。
- nanotron 由 Hugging Face 提供:用于创建 SmolLM2 的极简 LLM 训练代码库。
- 并行训练 作者:熊晨妍:优化和并行技术概述。
- 分布式训练 作者:Duan 等人:关于在分布式架构上高效训练大语言模型的综述。
- OLMo 2 作者:AI2:开源语言模型,提供模型、数据、训练和评估代码。
- LLM360 作者:LLM360:一个开源大语言模型框架,提供训练和数据准备代码、数据、评估指标和模型。
3. 训练后数据集
后训练数据集具有精确的结构,包括指令和答案(监督微调)或指令以及选择/拒绝的答案(偏好对齐)。与用于预训练的原始文本相比,会话结构要少得多,这就是为什么我们经常需要处理种子数据并进行优化以提高样本的准确性、多样性和复杂性。更多信息和示例可以在我的仓库中找到 💾 LLM Datasets。
- 存储与聊天模板:由于对话结构,训练后数据集会以特定格式存储,如ShareGPT或OpenAI/HF。然后,这些格式会映射到ChatML或Alpaca等聊天模板,生成模型训练的最终样本。
- 合成数据生成:利用前沿模型如GPT-4o基于种子数据创建指令-响应对。这种方法实现了灵活且可扩展的数据集创建,并能获得高质量的答案。关键考虑因素包括设计多样化的种子任务和有效的系统提示。
- 数据增强:使用经过验证的输出(通过单元测试或求解器)、使用拒绝采样的多重答案、Auto-Evol、链式思维、分支-求解-合并、角色扮演等技术增强现有样本。
- 质量过滤:传统技术包括基于规则的过滤、去除重复或接近重复的(使用MinHash或嵌入),以及n-gram去污。奖励模型和评判大型语言模型通过细粒度和可定制的质量控制补充这一步骤。
📚 参考文献:
- Synthetic Data Generator 由 Argilla 提供:在 Hugging Face 空间中使用自然语言构建数据集的初学者友好方法。
- LLM 数据集 作者 Maxime Labonne:为后训练整理的数据集和工具列表。
- Nvidia 的 NeMo-Curator:用于训练前和训练后数据的数据集准备和整理框架。
- Argilla 的 Distilabel:一个生成合成数据的框架。它还包括像 UltraFeedback 这样的论文的有趣复现。
- Semhash 由 MinishLab 提供:用于近重复检测和去污染的极简库,使用精简的嵌入模型。
- Hugging Face 的 聊天模板:Hugging Face 关于聊天模板的文档。
4. 监督微调
SFT 将基础模型转变为有用的助手,能够回答问题并执行指令。在此过程中,它们学习如何构建回答并重新激活预训练期间学到的部分知识。注入新知识是可能的,但只是一种表层效果:不能用于学习全新的语言。始终优先考虑数据质量,而不是参数优化。
- 训练技术:全量微调会更新所有模型参数,但需要大量计算资源。像 LoRA 和 QLoRA 这样的参数高效微调技术通过训练少量适配器参数,同时保持基础权重冻结,从而减少内存需求。QLoRA 将 4 位量化与 LoRA 结合以降低显存使用。这些技术都在最流行的微调框架中实现:TRL、Unsloth 和 Axolotl。
- 训练参数:关键参数包括带调度器的学习率、批量大小、梯度累积、训练轮次、优化器(如 8-bit AdamW)、用于正则化的权重衰减,以及用于训练稳定性的预热步。LoRA 还增加了三个参数:rank(通常为 16-128)、alpha(为 rank 的 1-2 倍)和目标模块。
- 分布式训练:使用 DeepSpeed 或 FSDP 在多个 GPU 上扩展训练。DeepSpeed 提供三个 ZeRO 优化阶段,通过状态分割逐步提高内存效率。两种方法都支持梯度检查点以提高内存效率。
- 监控:跟踪训练指标,包括损失曲线、学习率调度和梯度范数。监控常见问题,例如损失突升、梯度爆炸或性能下降。
📚 参考资料:
- 使用 Unsloth 高效微调 Llama 3.1 by Maxime Labonne:关于如何使用 Unsloth 微调 Llama 3.1 模型的实用教程。
- Axolotl - 文档 by Wing Lian:涉及分布式训练和数据集格式的大量有趣信息。
- 精通 LLMs by Hamel Husain:关于微调的教育资源集合(也包括 RAG、评估、应用程序和提示工程)。
- LoRA 见解 by Sebastian Raschka:关于 LoRA 的实用见解以及如何选择最佳参数。
5. 偏好对齐
偏好对齐是训练后流程的第二阶段,重点是将生成的答案与人类偏好对齐。这一阶段旨在调谐LLM的语气,减少毒性和幻觉。然而,提升其性能和提升其实用性也变得越来越重要。与SFT不同,偏好匹配算法众多。这里我们将重点介绍三个最重要的:DPO、GRPO和PPO。
- 拒绝抽样:对每个提示,使用训练好的模型生成多个响应,并对其进行评分以推断所选/被拒绝的答案。这会创建策略上的数据,两个响应都来自被训练的模型,从而提升对齐稳定性。
- 直接偏好优化 直接优化策略,以最大化被选择的响应相对于被拒绝响应的可能性。它不需要奖励建模,这使其在计算上比强化学习技术更高效,但在质量上略逊一筹。非常适合创建聊天模型。
- 奖励模型:使用人类反馈训练奖励模型,以预测如人类偏好等指标。它可以利用像 TRL、verl 和 OpenRLHF 这样的框架进行可扩展训练。
- 强化学习:像 GRPO 和 PPO 这样的 RL 技术通过迭代更新策略以最大化奖励,同时保持接近初始行为。它们可以使用奖励模型或奖励函数来对响应进行评分。它们通常计算量大,并且需要对超参数进行仔细调整,包括学习率、批量大小和裁剪范围。非常适合创建推理模型。
📚 参考文献:
- 由 Hugging Face 提供的 RLHF 说明:RLHF 入门,包括奖励模型训练和通过强化学习进行微调。
- LLM训练:RLHF及其替代方案 作者:Sebastian Raschka:RLHF流程概述及RLAIF等替代方案。
- Hugging Face 的 偏好调优 LLMs:DPO、IPO 和 KTO 算法在执行偏好对齐方面的比较。
- 使用 DPO 微调 - 作者 Maxime Labonne:使用 DPO 微调 Mistral-7b 模型的教程,并复现 NeuralHermes-2.5。
- 使用 GRPO 微调 by Maxime Labonne:使用 GRPO 微调一个小模型的实际练习。
- Alexander Vishnevskiy 的 DPO Wandb 日志:它向你展示了需要跟踪的主要 DPO 指标以及你应预期的趋势。
6. 评估
可靠地评估大型语言模型是一项复杂但至关重要的任务,指导数据生成和训练。它提供了关于改进领域的宝贵反馈,可用于调整数据的组合、质量和训练参数。然而,记住古德哈特定律总是值得记住的:“当一个指标成为目标时,它就不再是一个好的指标。”
- 自动化基准:利用精心策划的数据集和指标(如MMLU)评估特定任务的模型。它在具体任务中表现良好,但在抽象和创意能力方面存在困难。它也容易被数据污染。
- 人类评估:涉及人类提示模型和评分回答。方法涵盖氛围检测到系统注释,并有具体指导方针和大规模社区投票(arena)。它更适合主观任务,事实准确性可靠性较低。
- 基于模型的评估:使用评判和奖励模型来评估模型输出。它与人类偏好高度相关,但存在对自身输出的偏见和评分不一致的问题。
- 反馈信号:分析错误模式以识别具体弱点,如执行复杂指令的限制、缺乏具体知识或易受对抗性提示影响。通过更好的数据生成和训练参数,这一点可以改进。
📚 参考文献:
- Hugging Face 的 LLM 评估指南:关于评估的综合指南,包含实用见解。
- Open LLM 排行榜 由 Hugging Face 提供:主要排行榜,用于以开放和可重复的方式比较大型语言模型(自动化基准测试)。
- 语言模型评估工具 由 EleutherAI 提供:一个使用自动化基准测试评估大型语言模型(LLM)的流行框架。
- Lighteval 由 Hugging Face 提供:一种替代的评估框架,也包括基于模型的评估。
- Chatbot Arena 由 LMSYS 提供:通用型大型语言模型的 Elo 等级评分,基于人类进行的比较(人工评估)。
7. 量子化
量化是将模型的参数和激活转化为更低精度的过程。例如,使用16位存储的权重可以转换为4位表示。该技术日益重要,以降低大型语言模型相关的计算和内存成本。
- 基础技术:学习不同的精度等级(FP32、FP16、INT8等),以及如何用absmax和零点技术进行天真量化。
- GGUF 与 llama.cpp:最初设计用于在 CPU 上运行,llama.cpp 和 GGUF 格式已经成为在消费级硬件上运行大型语言模型(LLM)的最流行工具。它支持将特殊标记、词汇表和元数据存储在单个文件中。
- GPTQ 与 AWQ:像 GPTQ/EXL2 和 AWQ 这样的技术引入了逐层校准,即使在极低位宽下也能保持性能。它们通过动态缩放减少灾难性异常值,有选择地跳过或重新中心化最重的参数。
- SmoothQuant 和 ZeroQuant:新的量化友好变换(SmoothQuant)和基于编译器的优化(ZeroQuant)帮助减少量化前的异常值。它们还通过融合某些运算和优化数据流,降低了硬件开销。
📚 参考文献:
- 量化简介 作者Maxime Labonne:量化概述、绝对最大值和零点量化,以及带代码的LLM.int8()。
- 用 llama.cpp 量化 Llama 模型 作者:Maxime Labonne:关于如何使用 llama.cpp 和 GGUF 格式量化 Llama 2 模型的教程。
- 4位LLM量化与GPTQ 作者 Maxime Labonne:关于如何使用GPTQ算法结合AutoGPTQ对LLM进行量化的教程。
- 理解激活感知权重量化 —— FriendliAI:AWQ 技术及其优势概览。
- MIT HAN实验室的 SmoothQuant 在 Llama 2 7B 上演示:关于如何在 8 位精度下将 SmoothQuant 应用于 Llama 2 模型的教程。
- DeepSpeed 模型压缩 by DeepSpeed:关于如何使用 ZeroQuant 和极端压缩(XTC)进行 DeepSpeed 压缩的教程。
8. 新趋势
以下是一些未归入其他类别的显著主题。有些是成熟的技术(模型合并、多模态),但另一些则更具实验性(可解释性、测试时计算尺度),是众多研究论文的重点。
- 模型合并:合并已训练的模型已成为创建高性能模型而无需任何微调的一种流行方法。流行的 mergekit 库实现了最流行的合并方法,如 SLERP、DARE 和 TIES。
- 多模态模型:这些模型(如 CLIP、Stable Diffusion 或 LLaVA)可以在统一的嵌入空间中处理多种类型的输入(文本、图像、音频等),从而解锁如文本生成图像等强大应用。
- 可解释性:机制性可解释性技术如稀疏自编码器(SAE)在揭示大型语言模型内部运作方面取得了显著进展。这也应用于诸如消除等技术,允许你无需训练即可修改模型的行为。
- 测试时计算:通过测试时间扩展计算预算,使用强化学习技术训练的推理模型还可进一步改进。这可能涉及多次调用、MCTS,或像过程奖励模型(PRM)这样的专用模型。带有精确评分的迭代步骤显著提升复杂推理任务的性能。
📚 参考文献:
- 使用 mergekit 合并 LLMs 作者:Maxime Labonne:关于使用 mergekit 进行模型合并的教程。
- Smol Vision 作者 Merve Noyan:用于小型多模态模型的笔记本和脚本合集。
- 大型多模态模型 作者 Chip Huyen:多模态系统概述以及该领域的近期发展历史。
- 通过消解对任何大型语言模型进行去审查 —— Maxime Labonne:将可解释性技术直接应用于修改模型的风格。
- 由 Adam Karvonen 撰写的 SAEs 的直观解释:关于 SAEs 工作原理以及为什么它们对可解释性有意义的文章。
- 扩大测试时计算 由 Beeching 等人撰写:教程和实验,以 3B 模型在 MATH-500 上超越 Llama 3.1 70B。
👷 大语言模型工程师
本课程的这一部分侧重于学习如何构建可用于生产环境的 LLM 驱动的应用程序,重点是增强模型和部署模型。
1. 运行大型语言模型
由于高硬件要求,运行 LLM 可能很困难。根据你的使用场景,你可能希望通过 API(如 GPT-4)直接使用模型,或者在本地运行。在任何情况下,额外的提示和引导技术都可以改善并约束应用程序的输出。
- LLM API:API 是部署 LLM 的方便方式。这个领域分为私有 LLM(OpenAI、Google、Anthropic 等)和开源 LLM(OpenRouter、Hugging Face、Together AI 等)。
- 开源 LLM:Hugging Face Hub 是查找 LLM 的好地方。你可以直接在 Hugging Face Spaces 上运行其中一些模型,或者下载并在应用程序中本地运行,如 LM Studio,或者通过 CLI 使用 llama.cpp 或 ollama。
- 提示工程:常用技术包括零样本提示、少样本提示、思维链(chain of thought)和 ReAct 技术。这些方法在大模型上效果更好,但也可以适应小模型。
- 结构化输出:许多任务需要结构化输出,如严格的模板或 JSON 格式。像 Outlines 这样的库可以用来引导生成并遵循既定结构。一些 API 也原生支持使用 JSON 模式生成结构化输出。
📚 参考资料:
- Nisha Arya 的《使用 LM Studio 在本地运行 LLM》:关于如何使用 LM Studio 的简短指南。
- DAIR.AI 的《提示工程指南》:提供了详细的提示技术列表及示例。
- Outlines - 快速上手:列出了 Outlines 支持的引导生成技术。
- LMQL - 概览:LMQL 语言介绍。
2. 构建向量存储
创建向量存储是构建检索增强生成(RAG)流水线的第一步。文档被加载、分割,相关的片段用于生成向量表示(嵌入),并存储以便在推理时使用。
- 文档导入:文档加载器是方便的封装器,可以处理多种格式:PDF、JSON、HTML、Markdown 等。它们还可以直接从一些数据库和 API(如 GitHub、Reddit、Google Drive 等)检索数据。
- 文档分割:文本分割器将文档拆分为更小的、有语义意义的片段。与其在 n 个字符后分割文本,通常更好的方法是按标题或递归进行分割,并添加一些附加的元数据。
- 嵌入模型:嵌入模型将文本转换为向量表示。选择针对特定任务的模型可以显著提高语义搜索和 RAG 的性能。
- 向量数据库:向量数据库(如 Chroma、Pinecone、Milvus、FAISS、Annoy 等)用于存储嵌入向量。它们可以基于向量相似度高效地检索与查询“最相似”的数据。
📚 参考资料:
- LangChain - 文本分割器:LangChain 中实现的不同文本分割器列表。
- Sentence Transformers 库:流行的嵌入模型库。
- MTEB 排行榜:嵌入模型的排行榜。
- Moez Ali 的顶级七大向量数据库:最佳和最流行向量数据库的比较。
3. 检索增强生成
通过 RAG,LLM 从数据库中检索上下文文档,以提高答案的准确性。RAG 是在不进行任何微调的情况下增强模型知识的流行方法。
- 协调器:像 LangChain 和 LlamaIndex 这样的协调器是将 LLM 与工具和数据库连接的流行框架。模型上下文协议 (MCP) 引入了一种新的标准,用于跨供应商向模型传递数据和上下文。
- 检索器:像 CoRAG 和 HyDE 这样的查询重写器和生成型检索器通过转换用户查询来增强搜索效果。多向量和混合检索方法将嵌入与关键字信号结合,以提高召回率和精确度。
- 记忆:为了记住之前的指令和答案,LLM 和聊天机器人(如 ChatGPT)会将这些历史添加到其上下文窗口中。这个缓冲区可以通过摘要(例如使用较小的 LLM)、向量存储 RAG 等方式进行改进。
- 评估:我们需要评估文档检索(上下文精度和召回率)和生成阶段(可信度和答案相关性)。可以使用工具 Ragas 和 DeepEval(评估质量)来简化。
📚 参考资料:
- Llamaindex - 高级概念:构建 RAG 流程时需要了解的主要概念。
- 模型上下文协议:MCP 的简介,包括动机、架构和快速入门。
- Pinecone - 检索增强:检索增强流程概述。
- LangChain - 使用 RAG 的问答:构建典型 RAG 流程的逐步教程。
- LangChain - 记忆类型:不同类型记忆及其相关用法列表。
- RAG 流程 - 指标:评估 RAG 流程使用的主要指标概述。
4. 高级RAG
实际应用可能需要复杂的流水线,包括SQL或图形数据库,以及自动选择相关工具和API。这些高级技术可以提升基线解决方案并提供额外功能。
- 查询构建:存储在传统数据库中的结构化数据需要特定的查询语言,如SQL、密码、元数据等。我们可以直接将用户指令转化为查询,通过查询构建访问数据。
- 工具:代理通过自动选择最相关的工具来提供答案,从而增强大型语言模型。这些工具可以简单到使用谷歌或维基百科,也可以更复杂,比如Python解释器或Jira。
- 后处理:处理输入到大语言模型(LLM)的最终步骤。它通过重新排序、RAG-fusion 和分类来提高检索文档的相关性和多样性。
- 编程 LLMs:像 DSPy 这样的框架允许你以编程的方式根据自动化评估优化提示和权重。
📚 参考文献:
- LangChain - 查询构建:关于不同类型的查询构建的博客文章。
- LangChain - SQL:关于如何使用大语言模型与 SQL 数据库交互的教程,涉及文本到 SQL 的转换以及可选的 SQL 代理。
- Pinecone - LLM 代理: 介绍具有不同类型的代理和工具。
- LLM 驱动的自主代理 作者 Lilian Weng:一篇关于 LLM 代理的更偏理论性的文章。
- LangChain - OpenAI 的 RAG:OpenAI 使用的 RAG 策略概述,包括后处理。
- DSPy 八步法:介绍模块、签名和优化器的通用 DSPy 指南。
5. 代理
LLM 代理可以通过基于对环境的推理采取行动来自主执行任务,通常通过使用工具或功能与外部系统交互。
- 代理基础:代理通过思想(内部推理以决定下一步行动)、行动(执行任务,通常通过与外部工具交互)和观察(分析反馈或结果以优化下一步)来运作。
- 代理协议:模型上下文协议(MCP)是将代理连接到外部工具和数据源的行业标准,使用 MCP 服务器和客户端。最近,Agent2Agent(A2A)尝试将代理互操作的通用语言进行标准化。
- 供应商框架:每个主要云模型提供商都有自己的代理框架,如 OpenAI SDK、Google ADK 和 Claude Agent SDK,适用于特别依赖单一供应商的情况。
- 其他框架:可以使用不同的框架来简化代理开发,如 LangGraph(工作流的设计与可视化)、LlamaIndex(数据增强型代理与 RAG)、或自定义解决方案。更具实验性的框架包括不同代理之间的协作,例如 CrewAI(基于角色的团队工作流)和 AutoGen(对话驱动的多代理系统)。
📚 参考文献:
- Agents Course:Hugging Face 制作的关于 AI 代理的热门课程。
- LangGraph:关于如何使用 LangGraph 构建 AI 代理的概览。
- LlamaIndex Agents:使用 LlamaIndex 构建代理的案例和资源。
6. 推理优化
文本生成是一个耗费资源的过程,需要昂贵的硬件。除了量化之外,还提出了各种技术来最大化吞吐量并降低推理成本。
- 闪存注意力 (Flash Attention):对注意力机制进行优化,将其复杂度从二次降低为线性,加快训练和推理速度。
- 键值缓存 (Key-value cache):了解键值缓存以及在 多查询注意力 (Multi-Query Attention) (MQA) 和 分组查询注意力 (Grouped-Query Attention) (GQA) 中引入的改进。
- 推测解码 (Speculative decoding):使用小模型生成草稿,然后由大模型进行审核,以加速文本生成。EAGLE-3 是一个特别受欢迎的解决方案。
📚 参考文献:
- GPU 推理 by Hugging Face:解释如何在 GPU 上优化推理。
- 大语言模型推理 (LLM Inference) by Databricks:在生产中优化大语言模型推理的最佳实践。
- 优化大语言模型的速度和内存 by Hugging Face:解释优化速度和内存的三种主要技术,即量化、闪存注意力和架构创新。
- 辅助生成 (Assisted Generation) by Hugging Face:HF 的推测解码版本。这是一篇有趣的博客文章,介绍其工作原理并提供实现代码。
- EAGLE-3 论文:介绍 EAGLE-3,并报告了高达 6.5× 的加速。
- Speculators:由 vLLM 制作的库,用于构建、评估和存储用于大语言模型推理的推测解码算法(例如 EAGLE-3)。
7. 部署大型语言模型
大规模部署大型语言模型是一项工程壮举,可能需要多个GPU集群。在其他场景中,演示和本地应用的复杂度可以大大降低。
- 本地部署:隐私是开源大语言模型相对于私有模型的重要优势。本地 LLM 服务器(LM Studio、Ollama、oobabooga、kobold.cpp 等)利用这一优势来为本地应用提供支持。
- 演示部署:像 Gradio 和 Streamlit 这样的框架有助于原型应用程序和共享演示。你也可以轻松地在线托管它们,例如使用 Hugging Face Spaces。
- 服务器部署:大规模部署大型语言模型(LLM)需要云(另见 SkyPilot )或本地基础设施,并且通常利用优化的文本生成框架,如 TGI、vLLM 等。
- 边缘部署:在受限环境中,高性能框架如 MLC LLM 和 mnn-llm 可以在网页浏览器、Android 和 iOS 上部署大型语言模型(LLM)。
📚 参考文献:
- Streamlit - 构建一个基础的 LLM 应用:使用 Streamlit 制作一个类似 ChatGPT 的基础应用的教程。
- HF LLM 推理容器:使用 Hugging Face 的推理容器在 Amazon SageMaker 上部署 LLM。
- Philschmid 博客 由 Philipp Schmid 撰写:关于使用 Amazon SageMaker 部署大语言模型的高质量文章合集。
- 优化延迟 由 Hamel Husain 撰写:对 TGI、vLLM、CTranslate2 和 mlc 在吞吐量和延迟方面的比较。
8. 保护大型语言模型(LLMs)
除了与软件相关的传统安全问题之外,LLMs由于其训练和提示方式,还具有独特的弱点。
- 提示攻击:与提示工程相关的不同技术,包括提示注入(通过额外指令劫持模型的答案)、数据/提示泄露(获取其原始数据/提示)以及越狱(设计提示以绕过安全功能)。
- 后门:攻击向量可能直接针对训练数据,通过污染训练数据(例如,包含虚假信息)或创建后门(在推理过程中改变模型行为的秘密触发器)。
- 防御措施:保护LLM应用的最佳方法是针对这些漏洞进行测试(例如,使用红队测试和诸如 garak 的检查)并在生产环境中观察其表现(使用诸如 langfuse 的框架)。
📚 参考文献:
- OWASP LLM 前十 — HEGO Wiki 提供:列出了LLM应用中最关键的十个漏洞。
- 提示注入入门 — Joseph Thacker 提供:针对工程师的提示注入简短指南。
- LLM 安全 — @llm_sec 提供:与LLM安全相关的大量资源列表。
- LLM红队测试 — Microsoft 提供:关于如何使用红队方法测试LLM的指南。
致谢
这份路线图的灵感来源于 Milan Milanović 和 Romano Roth 出色的 DevOps 路线图。
特别感谢:
- Thomas Thelen 鼓励我创建这份路线图
- André Frade 对初稿的反馈和审查
- Dino Dunn 提供关于 LLM 安全性的资源
- Magdalena Kuhn 改进了“人工评估”部分
- Odoverdose 建议了 3Blue1Brown 关于 Transformers 的视频
- 感谢所有为本课程教育参考资料做出贡献的人 :)
免责声明:我与此处列出的任何来源无关联。
- 本文标题:llm-course - 入门大型语言模型(LLM)的课程
- 本文链接:https://cn121.com/llm/mlabonne-llm-course.html
- 原项目:mlabonne/llm-course 版权归原作者 mlabonne 及贡献者所有
- 收录信息:本站于 2026-09-22 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
- 开源协议:收录时本项目采用 Apache-2.0(查看 LICENSE 原文),本站译文为其衍生内容;使用、修改、分发请以该仓库 LICENSE 原文为准。本站对原文仅作排版与图片地址适配, 并保留原项目的 NOTICE 与署名要求。
- 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 mlabonne/llm-course。
- 翻译说明:本页正文为人工智能生成内容——由机器翻译对原项目 README 初译、经程序校验排版,可能存在错漏,请以原项目文档为准。
- 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
- 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。