52 KiB
Note
本文档由 WeHub 基于上游 README 翻译整理,属于社区翻译,非官方中文文档。
English · 原始项目 · 上游 README
原作者、版权与许可证归属以原始项目及本仓库 LICENSE 文件为准。
𝕏 在 X 上关注我 • 🤗 Hugging Face • 💻 博客 • 📙 LLM Engineer's Handbook
- 🧩 LLM Fundamentals 为可选部分,涵盖数学、Python 和神经网络等基础知识。
- 🧑🔬 The LLM Scientist 专注于运用最新技术构建尽可能优秀的 LLM。
- 👷 The LLM Engineer 专注于创建基于 LLM 的应用并将其部署上线。
Note
基于本课程,我与人合著了 LLM Engineer's Handbook, a hands-on book that covers an end-to-end LLM application from design to deployment. LLM 课程将始终保持免费,你也可以通过购买这本书来支持我的工作。
如需更全面的课程版本,请查看 DeepWiki.
📝 Notebooks
我撰写的关于 LLM 的 Notebook 与文章列表。
展开/收起本节(可选)
Tools
| Notebook | Description | Notebook |
|---|---|---|
| 🧐 LLM AutoEval | 使用 RunPod 自动评估你的 LLM | |
| 🥱 LazyMergekit | 一键使用 MergeKit 轻松合并模型。 | |
| 🦎 LazyAxolotl | 一键使用 Axolotl 在云端微调模型。 | |
| ⚡ AutoQuant | 一键将 LLM 量化为 GGUF、GPTQ、EXL2、AWQ 和 HQQ 格式。 | |
| 🌳 Model Family Tree | 可视化合并模型的族谱树。 | |
| 🚀 ZeroSpace | 使用免费的 ZeroGPU 自动创建 Gradio 聊天界面。 | |
| ✂️ AutoAbliteration | 使用自定义数据集自动进行 abliteration 处理模型。 | |
| 🧼 AutoDedup | 使用 Rensa 库自动对数据集去重。 |
Fine-tuning
| Notebook | Description | Article | Notebook |
|---|---|---|---|
| Fine-tune Llama 3.1 with Unsloth | 在 Google Colab 中进行超高效率的监督微调(Supervised Fine-tuning)。 | Article | |
| Fine-tune Llama 3 with ORPO | 使用 ORPO 以单阶段方式实现更便宜、更快速的微调。 | Article | |
| Fine-tune Mistral-7b with DPO | 使用 DPO 提升监督微调模型的性能。 | Article | |
| Fine-tune Mistral-7b with QLoRA | 在免费版 Google Colab 中使用 TRL 对 Mistral-7b 进行监督微调。 | ||
| Fine-tune CodeLlama using Axolotl | 面向最先进微调工具的全流程指南。 | Article | |
| Fine-tune Llama 2 with QLoRA | 在 Google Colab 中监督微调 Llama 2 的分步指南。 | Article |
Quantization
| Notebook | Description | Article | Notebook |
|---|---|---|---|
| Introduction to Quantization | 使用 8 位量化(Quantization)优化大语言模型。 | Article | |
| 4-bit Quantization using GPTQ | 量化你自己的开源 LLM,以便在消费级硬件上运行。 | Article | |
| Quantization with GGUF and llama.cpp | 使用 llama.cpp 量化 Llama 2 模型,并将 GGUF 版本上传至 HF Hub。 | Article | |
| ExLlamaV2: The Fastest Library to Run LLMs | 量化并运行 EXL2 模型,并将其上传至 HF Hub。 | Article |
Other
| Notebook | Description | Article | Notebook |
|---|---|---|---|
| Merge LLMs with MergeKit | 轻松创建你自己的模型,无需 GPU! | Article | |
| Create MoEs with MergeKit | 将多个专家合并为单个 frankenMoE | Article | |
| Uncensor any LLM with abliteration | 无需重新训练即可微调 | Article | |
| Improve ChatGPT with Knowledge Graphs | 使用知识图谱增强 ChatGPT 的回答。 | Article | |
| Decoding Strategies in Large Language Models | 从束搜索(beam search)到核采样(nucleus sampling)的文本生成指南 | Article |
🧩 LLM 基础
本节介绍数学、Python 与神经网络方面的必备知识。你可能不必从这里开始学习,但可以在需要时查阅。
展开/收起本节(可选)
1. 机器学习数学基础
在掌握机器学习之前,理解支撑这些算法的基本数学概念非常重要。
- 线性代数(Linear Algebra):这对于理解许多算法至关重要,尤其是深度学习中的算法。核心概念包括向量、矩阵、行列式、特征值与特征向量、向量空间以及线性变换。
- 微积分(Calculus):许多机器学习算法涉及连续函数的优化,这需要理解导数、积分、极限与级数。多元微积分以及梯度(gradient)概念同样重要。
- 概率与统计(Probability and Statistics):这对于理解模型如何从数据中学习并做出预测至关重要。核心概念包括概率论、随机变量、概率分布、期望、方差、协方差、相关性、假设检验、置信区间、最大似然估计以及贝叶斯推断(Bayesian inference)。
📚 学习资源:
- 3Blue1Brown - The Essence of Linear Algebra:) 一系列视频,为这些概念提供几何直觉。
- StatQuest with Josh Starmer - Statistics Fundamentals:) 对许多统计概念提供简单清晰的讲解。
- Seeing Theory:) 布朗大学出品的概率与统计可视化入门。
- Immersive Linear Algebra:) 线性代数的另一种可视化解读。
- Khan Academy - Linear Algebra:) 非常适合初学者,以非常直观的方式讲解概念。
- Khan Academy - Calculus:) 涵盖微积分所有基础内容的互动课程。
- Khan Academy - Probability and Statistics:) 以易于理解的格式呈现教学内容。
2. 机器学习 Python 编程
Python 是一门强大而灵活的编程语言,凭借可读性、一致性与健壮的数据科学库生态,特别适合机器学习。
- Python 基础:Python 编程需要扎实掌握基本语法、数据类型、错误处理以及面向对象编程。
- 数据科学库:需要熟悉用于数值运算的 NumPy、用于数据处理与分析的 Pandas,以及用于数据可视化的 Matplotlib 和 Seaborn。
- 数据预处理:包括特征缩放与归一化、处理缺失数据、异常值检测、类别数据编码,以及将数据划分为训练集、验证集与测试集。
- 机器学习库:熟练掌握 Scikit-learn 至关重要——该库提供大量监督学习与无监督学习算法。理解如何实现线性回归、逻辑回归、决策树、随机森林、k 近邻(k-nearest neighbors,K-NN)以及 K 均值聚类(K-means clustering)等算法也很重要。PCA 与 t-SNE 等降维技术也有助于可视化高维数据。
📚 学习资源:
- Real Python:) 涵盖初学者与进阶 Python 概念的综合性文章与教程资源。
- freeCodeCamp - Learn Python:) 长视频课程,全面介绍 Python 的所有核心概念。
- Python Data Science Handbook:) 免费电子书,是学习 pandas、NumPy、Matplotlib 与 Seaborn 的优质资源。
- freeCodeCamp - Machine Learning for Everybody:) 面向初学者的实用机器学习算法入门。
- Udacity - Intro to Machine Learning:) 免费课程,涵盖 PCA 及若干其他机器学习概念。
3. 神经网络
神经网络是许多机器学习模型,尤其是深度学习领域的核心组成部分。要有效运用它们,必须全面理解其设计与运行机制。
- 基础概念:包括理解神经网络的结构,例如层、权重、偏置以及激活函数(sigmoid、tanh、ReLU 等)。
- 训练与优化:熟悉反向传播(backpropagation)以及不同类型的损失函数,如均方误差(Mean Squared Error,MSE)与交叉熵(Cross-Entropy)。理解梯度下降(Gradient Descent)、随机梯度下降(Stochastic Gradient Descent)、RMSprop 与 Adam 等优化算法。
- 过拟合(Overfitting):理解过拟合的概念(模型在训练数据上表现良好,但在未见数据上表现较差),并学习各种正则化技术(dropout、L1/L2 正则化、早停、数据增强)来防止过拟合。
- 实现多层感知机(Multilayer Perceptron,MLP):使用 PyTorch 构建 MLP,也称为全连接网络(fully connected network)。
📚 学习资源:
- 3Blue1Brown - But what is a Neural Network?:) 该视频直观讲解了神经网络及其内部工作原理。
- freeCodeCamp - Deep Learning Crash Course:) 该视频高效介绍了深度学习中所有最重要的概念。
- Fast.ai - Practical Deep Learning:) 面向有编程经验、希望学习深度学习者的免费课程。
- Patrick Loeber - PyTorch Tutorials:) 面向零基础初学者的 PyTorch 系列视频教程。
4. 自然语言处理(Natural Language Processing,NLP)
NLP 是人工智能中一个引人入胜的分支,它弥合人类语言与机器理解之间的鸿沟。从简单的文本处理到理解语言细微差别,NLP 在翻译、情感分析、聊天机器人等众多应用中发挥着关键作用。
- 文本预处理:学习各种文本预处理步骤,如分词(tokenization,将文本拆分为词或句子)、词干提取(stemming,将词还原为词根形式)、词形还原(lemmatization,与词干提取类似但会考虑上下文)、停用词移除等。
- 特征提取技术:熟悉将文本数据转换为机器学习算法可理解格式的技术。主要方法包括词袋模型(Bag-of-words,BoW)、词频-逆文档频率(Term Frequency-Inverse Document Frequency,TF-IDF)以及 n-gram。
- 词嵌入(Word Embeddings):词嵌入是一种词表示方法,使语义相近的词具有相近的表示。主要方法包括 Word2Vec、GloVe 与 FastText。
- 循环神经网络(Recurrent Neural Networks,RNNs):理解 RNN 的工作原理——这是一种专为序列数据设计的神经网络。探索 LSTM 与 GRU,这两种能够学习长期依赖关系的 RNN 变体。
📚 学习资源:
- Lena Voita - Word Embeddings:) 面向初学者的词嵌入相关概念课程。
- RealPython - NLP with spaCy in Python:) 关于在 Python 中使用 spaCy 库完成 NLP 任务的详尽指南。
- Kaggle - NLP Guide:) 若干 notebook 与资源,用于动手讲解 Python 中的 NLP。
- Jay Alammar - The Illustration Word2Vec:) 理解著名 Word2Vec 架构的优质参考资料。
- Jake Tae - PyTorch RNN from Scratch:) 在 PyTorch 中实现 RNN、LSTM 与 GRU 模型的实用且简洁示例。
- colah's blog - Understanding LSTM Networks:) 一篇关于 LSTM 网络的偏理论文章。
🧑🔬 LLM 科学家
本课程的这一部分侧重于学习如何运用最新技术构建尽可能优秀的 LLM。
1. LLM 架构
不必深入掌握 Transformer 架构,但理解现代 LLM 的主要步骤很重要:通过分词(tokenization)将文本转换为数字,通过包含注意力机制的各层处理这些 token,最后通过多种采样策略生成新文本。
- 架构概览:理解从编码器-解码器(encoder-decoder)Transformer 到仅解码器(decoder-only)架构(如 GPT)的演进,后者构成了现代 LLM 的基础。重点关注这些模型在宏观层面如何处理和生成文本。
- 分词(Tokenization):学习分词原理——文本如何转换为 LLM 可处理的数值表示。探索不同分词策略及其对模型性能和输出质量的影响。
- 注意力机制:掌握注意力机制的核心概念,尤其是自注意力(self-attention)及其变体。理解这些机制如何使 LLM 能够处理长程依赖并在整个序列中保持上下文。
- 采样技术:探索各种文本生成方法及其权衡。将贪心搜索(greedy search)、束搜索(beam search)等确定性方法与温度采样(temperature sampling)、核采样(nucleus sampling)等概率方法进行比较。
📚 参考资料:
- Transformers 可视化入门 by 3Blue1Brown:面向零基础读者的 Transformers 可视化介绍。
- LLM 可视化 by Brendan Bycroft:LLM 内部结构的交互式 3D 可视化。
- nanoGPT by Andrej Karpathy:长达 2 小时的 YouTube 视频,从零实现 GPT(面向程序员)。他还制作了一个关于 分词(tokenization).
- Attention? Attention! by Lilian Weng:历史综述,介绍注意力机制的必要性。
- LLM 中的解码策略 by Maxime Labonne:提供代码及不同文本生成解码策略的可视化介绍。
2. 预训练模型
预训练是计算密集且成本高昂的过程。虽然本课程不以此为重点,但扎实理解模型如何预训练(尤其在数据和参数方面)很重要。爱好者也可以小规模预训练参数量小于 1B 的模型。
- 数据准备:预训练需要海量数据集(例如,Llama 3.1 在 15 万亿 token 上训练),需精心策划、清洗、去重和分词。现代预训练流水线会实施复杂过滤,以剔除低质量或有问题的内容。
- 分布式训练:组合多种并行策略:数据并行(批次分布)、流水线并行(层分布)和张量并行(运算拆分)。这些策略需要在 GPU 集群间优化网络通信和内存管理。
- 训练优化:使用带预热(warm-up)的自适应学习率、梯度裁剪和归一化以防止爆炸,采用混合精度训练以提高内存效率,并使用调优超参数的现代优化器(AdamW、Lion)。
- 监控:使用仪表盘跟踪关键指标(损失、梯度、GPU 统计),针对分布式训练问题实施定向日志记录,并设置性能剖析以识别跨设备的计算与通信瓶颈。
📚 参考资料:
- FineWeb by Penedo et al.:重现用于 LLM 预训练的大规模数据集(15T)的文章,包含高质量子集 FineWeb-Edu。
- RedPajama v2 by Weber et al.:另一篇关于大规模预训练数据集的文章和论文,包含诸多有趣的质量过滤器。
- nanotron by Hugging Face:用于训练 SmolLM2. 的极简 LLM 训练代码库
- 并行训练 by Chenyan Xiong:优化与并行技术概览。
- 分布式训练 by Duan et al.:关于在分布式架构上高效训练 LLM 的综述。
- OLMo 2 by AI2:开源语言模型,包含模型、数据、训练与评估代码。
- LLM360 by LLM360:开源 LLM 框架,提供训练与数据准备代码、数据、指标和模型。
3. 后训练数据集
后训练数据集具有精确结构:指令与答案(监督微调),或指令与优选/拒绝答案(偏好对齐)。对话结构远比预训练所用的原始文本稀少,因此我们常需处理种子数据并精炼样本,以提高准确性、多样性和复杂度。更多信息与示例见我的仓库 💾 LLM Datasets.
- 存储与对话模板:由于对话结构,后训练数据集以 ShareGPT 或 OpenAI/HF 等特定格式存储。随后将这些格式映射到 ChatML 或 Alpaca 等对话模板,生成模型最终训练所用的样本。
- 合成数据生成:基于种子数据,使用 GPT-4o 等前沿模型创建指令-回答对。该方法可灵活、可扩展地构建高质量回答的数据集。关键考量包括设计多样化种子任务和有效的系统提示(system prompts)。
- 数据增强:使用经验证输出(单元测试或求解器)、带拒绝采样的多答案、Auto-Evol, 思维链(Chain-of-Thought)、Branch-Solve-Merge、角色人设(personas)等技术增强现有样本。
- 质量过滤:传统技术包括基于规则的过滤、去除重复或近重复项(MinHash 或嵌入向量),以及 n-gram 去污染。奖励模型和评判 LLM 以细粒度、可定制的质量控制补充这一步骤。
📚 参考资料:
- Synthetic Data Generator by Argilla:在 Hugging Face Space 中用自然语言构建数据集的入门友好方式。
- LLM Datasets by Maxime Labonne:后训练数据集与工具的精选列表。
- NeMo-Curator by Nvidia:用于预训练与后训练数据的数据集准备与策划框架。
- Distilabel by Argilla:生成合成数据的框架,还包含 UltraFeedback 等论文的有趣复现。
- Semhash by MinishLab:使用蒸馏嵌入模型进行近去重与去污染的极简库。
- Chat Template by Hugging Face:Hugging Face 关于对话模板的文档。
4. 监督微调
监督微调(SFT)将基座模型转化为有用的助手,能够回答问题并遵循指令。在此过程中,模型学习如何组织答案,并重新激活预训练所学知识的子集。注入新知识是可能的,但较为肤浅:无法用于学习一门全新的语言。始终将数据质量置于参数优化之上。
- 训练技术:全量微调(Full fine-tuning)会更新所有模型参数,但需要大量算力。参数高效微调(Parameter-efficient fine-tuning)技术如 LoRA 和 QLoRA 通过训练少量适配器参数并保持基础权重冻结来降低内存需求。QLoRA 将 4-bit 量化与 LoRA 结合以降低 VRAM 使用。这些技术都在最流行的微调框架中实现:TRL, Unsloth, and Axolotl.
- 训练参数:关键参数包括带调度器的学习率、批次大小、梯度累积、训练轮数(epochs)、优化器(如 8-bit AdamW)、用于正则化的权重衰减(weight decay),以及用于训练稳定性的预热步数(warmup steps)。LoRA 还增加了三个参数:秩(rank,通常为 16-128)、alpha(通常为 rank 的 1-2 倍)以及目标模块(target modules)。
- 分布式训练:使用 DeepSpeed 或 FSDP 在多块 GPU 上扩展训练。DeepSpeed 提供三个 ZeRO 优化阶段,通过状态分区实现逐级提升的内存效率。两种方法都支持梯度检查点(gradient checkpointing)以节省内存。
- 监控:跟踪训练指标,包括损失曲线、学习率调度和梯度范数。关注常见问题,如损失突增、梯度爆炸或性能下降。
📚 参考资料:
- Fine-tune Llama 3.1 Ultra-Efficiently with Unsloth by Maxime Labonne:使用 Unsloth 微调 Llama 3.1 模型的动手教程。
- Axolotl - Documentation by Wing Lian:大量与分布式训练和数据集格式相关的实用信息。
- Mastering LLMs by Hamel Husain:关于微调的教育资源合集(也涵盖 RAG、评估、应用和提示工程)。
- LoRA insights by Sebastian Raschka:关于 LoRA 的实用见解以及如何选择最佳参数。
5. 偏好对齐
偏好对齐是后训练流程中的第二阶段,专注于使生成答案与人类偏好对齐。该阶段旨在调整 LLM 的语气并减少毒性与幻觉。然而,提升性能与实用性也变得越来越重要。与 SFT 不同,偏好对齐算法有很多种。此处我们聚焦三种最重要的:DPO、GRPO 和 PPO。
- 拒绝采样(Rejection sampling):对每个提示,使用已训练模型生成多个回复并打分,以推断被选/被拒绝的答案。这会创建 on-policy 数据,其中两条回复均来自正在训练的模型,从而提升对齐稳定性。
- Direct Preference Optimization 直接优化策略,以最大化被选回复相对被拒绝回复的似然。它不需要奖励建模,因此在计算上比 RL 技术更高效,但质量略逊一筹。非常适合创建聊天模型。
- 奖励模型(Reward model):用人类反馈训练奖励模型,以预测人类偏好等指标。可借助 TRL, verl, and OpenRLHF 等框架进行可扩展训练。
- 强化学习(Reinforcement Learning):像 GRPO and PPO 这样的 RL 技术会迭代更新策略,在最大化奖励的同时尽量贴近初始行为。它们可使用奖励模型或奖励函数为回复打分。通常计算开销大,且需仔细调优超参数,包括学习率、批次大小和裁剪范围(clip range)。适合创建推理模型。
📚 参考资料:
- Illustrating RLHF by Hugging Face:介绍 RLHF,包括奖励模型训练与强化学习微调。
- LLM Training: RLHF and Its Alternatives by Sebastian Raschka:概述 RLHF 流程及 RLAIF 等替代方案。
- Preference Tuning LLMs by Hugging Face:比较 DPO、IPO 和 KTO 算法以进行偏好对齐。
- Fine-tune with DPO by Maxime Labonne:使用 DPO 微调 Mistral-7b 模型并复现 NeuralHermes-2.5. 的教程。
- Fine-tune with GRPO by Maxime Labonne:使用 GRPO 微调小模型的实践练习。
- DPO Wandb logs by Alexander Vishnevskiy:展示应跟踪的主要 DPO 指标及预期趋势。
6. 评估
可靠地评估 LLM 是一项复杂但至关重要的任务,可指导数据生成与训练。它能提供关于改进方向的宝贵反馈,可用于调整数据配比、质量和训练参数。但始终要记住古德哈特定律(Goodhart's law):「当一项指标成为目标时,它就不再是好的指标。」
- 自动化基准测试:使用精选数据集和指标(如 MMLU)在特定任务上评估模型。对具体任务效果较好,但在抽象与创造性能力上表现不足,也容易出现数据污染。
- 人工评估:由人类提示模型并对回复评分。方法从 vibe check 到带明确指南的系统化标注,再到大规模社区投票(arena)不等。更适合主观任务,在事实准确性上可靠性较低。
- 基于模型的评估:使用评判模型和奖励模型评估模型输出。与人类偏好高度相关,但存在偏向自身输出和评分不一致的问题。
- 反馈信号:分析错误模式以识别具体弱点,例如遵循复杂指令能力不足、缺乏特定知识,或易受对抗性提示影响。可通过改进数据生成与训练参数加以改善。
📚 参考资料:
- LLM evaluation guidebook by Hugging Face:关于评估的综合指南,含实用见解。
- Open LLM Leaderboard by Hugging Face:以开放、可复现方式比较 LLM 的主要排行榜(自动化基准测试)。
- Language Model Evaluation Harness by EleutherAI:使用自动化基准测试评估 LLM 的流行框架。
- Lighteval by Hugging Face:另一评估框架,也包含基于模型的评估。
- Chatbot Arena by LMSYS:基于人类对比评分的通用 LLM Elo 评级(人工评估)。
7. 量化
量化是将模型参数和激活转换为更低精度的过程。例如,以 16 位存储的权重可转换为 4 位表示。该技术对降低与 LLM 相关的计算与内存成本日益重要。
- 基础技术:了解不同精度级别(FP32、FP16、INT8 等),以及如何使用 absmax 和 zero-point 技术进行朴素量化。
- GGUF & llama.cpp:最初为在 CPU 上运行而设计,llama.cpp 与 GGUF 格式已成为在消费级硬件上运行 LLM 的最流行工具。它支持在单个文件中存储特殊 token、词表和元数据。
- GPTQ & AWQ:GPTQ/EXL2 and AWQ 等技术引入逐层校准,在极低比特宽度下仍能保持性能。它们通过动态缩放降低灾难性离群值影响,并有选择地跳过或重新居中最重参数。
- SmoothQuant & ZeroQuant:新的量化友好变换(SmoothQuant)和基于编译器的优化(ZeroQuant)有助于在量化前缓解离群值。它们还通过融合特定算子并优化数据流来降低硬件开销。
📚 参考资料:
- Introduction to quantization by Maxime Labonne:量化概述,包括 absmax 与 zero-point 量化,以及带代码的 LLM.int8()。
- Quantize Llama models with llama.cpp by Maxime Labonne:使用 llama.cpp 与 GGUF 格式量化 Llama 2 模型的教程。
- 4-bit LLM Quantization with GPTQ by Maxime Labonne:使用 GPTQ 算法与 AutoGPTQ 量化 LLM 的教程。
- Understanding Activation-Aware Weight Quantization by FriendliAI:AWQ(Activation-Aware Weight Quantization,激活感知权重量化)技术及其优势概述。
- SmoothQuant on Llama 2 7B by MIT HAN Lab:在 8 位精度下将 SmoothQuant 用于 Llama 2 模型的教程。
- DeepSpeed Model Compression by DeepSpeed:使用 DeepSpeed Compression 中的 ZeroQuant 与极端压缩(XTC)的教程。
8. 新兴趋势
以下是未归入其他类别的值得关注的主题。其中一些是成熟技术(模型合并、多模态),另一些则更具实验性(可解释性、测试时算力扩展),也是众多研究论文的焦点。
- Model merging(模型合并):合并已训练模型已成为一种流行的方式,无需任何微调即可创建高性能模型。流行的 mergekit 库实现了最流行的合并方法,如 SLERP、DARE, 与 TIES.
- Multimodal models(多模态模型):这类模型(如 CLIP, Stable Diffusion, 或 LLaVA))以统一的嵌入空间处理多种类型的输入(文本、图像、音频等),从而解锁文生图等强大应用。
- Interpretability(可解释性):稀疏自编码器(Sparse Autoencoders,SAE)等机制可解释性技术取得了显著进展,为理解 LLM 内部运作提供洞见。这也已应用于 abliteration 等技术,使你无需训练即可修改模型行为。
- Test-time compute(测试时算力):通过强化学习(RL)技术训练的推理模型,可在测试时扩展算力预算以进一步提升。这可能涉及多次调用、MCTS,或 Process Reward Model(PRM)等专用模型。带精确评分的迭代步骤能显著提升复杂推理任务的性能。
📚 参考资料:
- Merge LLMs with mergekit by Maxime Labonne:使用 mergekit 进行模型合并的教程。
- Smol Vision by Merve Noyan:面向小型多模态模型的笔记本与脚本合集。
- Large Multimodal Models by Chip Huyen:多模态系统概述及该领域近期发展史。
- Unsensor any LLM with abliteration by Maxime Labonne:将可解释性技术直接应用于修改模型风格。
- Intuitive Explanation of SAEs by Adam Karvonen:介绍 SAE 的工作原理及其对可解释性的意义。
- Scaling test-time compute by Beeching et al.:教程与实验,展示如何用 3B 模型在 MATH-500 上超越 Llama 3.1 70B。
👷 LLM 工程师
本课程章节聚焦学习如何构建可用于生产的 LLM 驱动应用,重点在于增强模型与部署。
1. 运行 LLM
由于硬件要求较高,运行 LLM 可能较为困难。根据你的用例,你可能只想通过 API(如 GPT-4)消费模型,或在本地运行。无论哪种方式,额外的提示(prompting)与引导技术都能改进并约束应用输出。
- LLM APIs:API 是部署 LLM 的便捷方式。该领域分为私有 LLM(OpenAI, Google, Anthropic, 等)与开源 LLM(OpenRouter, Hugging Face, Together AI, 等)。
- Open-source LLMs: Hugging Face Hub 是寻找 LLM 的绝佳去处。你可以直接在 Hugging Face Spaces, 中运行其中一些,或下载后在 LM Studio 等应用中本地运行,也可通过 CLI 使用 llama.cpp 或 ollama.
- Prompt engineering(提示工程):常用技术包括 zero-shot prompting、few-shot prompting、chain of thought 与 ReAct。它们在更大模型上效果更好,但也可适配较小模型。
- Structuring outputs(结构化输出):许多任务需要结构化输出,如严格模板或 JSON 格式。可使用 Outlines 等库引导生成并遵循给定结构。部分 API 也支持通过 JSON schema 原生生成结构化输出。
📚 参考资料:
- Run an LLM locally with LM Studio by Nisha Arya:使用 LM Studio 的简短指南。
- Prompt engineering guide by DAIR.AI:附带示例的提示技术详尽列表
- Outlines - Quickstart: Outlines 支持的引导式生成技术列表。
- LMQL - Overview: LMQL 语言介绍。
2. 构建向量存储
创建向量存储是构建检索增强生成(Retrieval Augmented Generation,RAG)流水线的第一步。文档被加载、切分,相关块用于生成向量表示(embeddings)并存储,以供推理时后续使用。
- Ingesting documents(文档摄入):文档加载器(document loaders)是便捷封装,可处理多种格式:PDF、JSON、HTML、Markdown 等。它们也可直接从部分数据库与 API(GitHub、Reddit、Google Drive 等)获取数据。
- Splitting documents(文档切分):文本切分器(text splitters)将文档拆分为更小、语义上有意义的块。相比在 n 个字符后切分,通常更宜按标题或递归切分,并附加一些元数据。
- Embedding models(嵌入模型):嵌入模型将文本转换为向量表示。选择面向特定任务的模型能显著提升语义搜索与 RAG 的性能。
- Vector databases(向量数据库):向量数据库(如 Chroma, Pinecone, Milvus, FAISS, Annoy, 等)专为存储嵌入向量而设计。它们基于向量相似度,高效检索与查询“最相似”的数据。
📚 参考资料:
- LangChain - Text splitters: LangChain 中实现的各类文本切分器列表。
- Sentence Transformers library: 流行的嵌入模型库。
- MTEB Leaderboard: 嵌入模型排行榜。
- The Top 7 Vector Databases by Moez Ali:对最佳且最流行的向量数据库的比较。
3. 检索增强生成(Retrieval Augmented Generation)
借助 RAG,LLM 会从数据库检索上下文文档,以提高回答的准确性。RAG 是一种流行的方式,可在不进行任何微调的情况下扩充模型的知识。
- 编排器(Orchestrators):像 LangChain 和 LlamaIndex 这样的编排器,是连接 LLM 与工具和数据库的流行框架。模型上下文协议(Model Context Protocol, MCP)引入了一项新标准,用于跨提供商向模型传递数据和上下文。
- 检索器(Retrievers):像 CoRAG 和 HyDE 这样的查询重写器与生成式检索器,通过转换用户查询来增强搜索。多向量与混合检索方法将嵌入与关键词信号相结合,以提高召回率和精确率。
- 记忆(Memory):为记住先前的指令和回答,LLM 以及像 ChatGPT 这样的聊天机器人会将这段历史添加到其上下文窗口中。可通过摘要(例如使用较小的 LLM)、向量存储 + RAG 等方式改进该缓冲区。
- 评估(Evaluation):我们需要同时评估文档检索(上下文精确率与召回率)和生成阶段(忠实度与答案相关性)。可使用 Ragas 和 DeepEval 等工具简化评估(用于质量评估)。
📚 参考资料:
- Llamaindex - High-level concepts: 构建 RAG 流水线时需要了解的主要概念。
- Model Context Protocol: MCP 简介,包含动机、架构与快速入门。
- Pinecone - Retrieval Augmentation: 检索增强流程概述。
- LangChain - Q&A with RAG: 构建典型 RAG 流水线的分步教程。
- LangChain - Memory types: 不同类型的记忆列表及其相关用法。
- RAG pipeline - Metrics: 用于评估 RAG 流水线的主要指标概述。
4. 高级 RAG(Advanced RAG)
实际应用可能需要复杂的流水线,包括 SQL 或图数据库,以及自动选择相关工具和 API。这些高级技术可以改进基线方案,并提供额外功能。
- 查询构建(Query construction):存储在传统数据库中的结构化数据需要特定的查询语言,如 SQL、Cypher、元数据等。我们可以通过查询构建,将用户指令直接翻译为查询以访问数据。
- 工具(Tools):智能体(Agents)通过自动选择最相关的工具来提供答案,从而增强 LLM。这些工具可以很简单,例如使用 Google 或 Wikipedia;也可以更复杂,例如 Python 解释器或 Jira。
- 后处理(Post-processing):对输入 LLM 的内容进行处理的最后一步。它通过重排序、RAG-fusion, 和分类等方式,提升所检索文档的相关性与多样性。
- 程序化 LLM(Program LLMs):像 DSPy 这样的框架,允许你以程序化方式,基于自动化评估来优化提示词和权重。
📚 参考资料:
- LangChain - Query Construction: 关于不同类型查询构建的博客文章。
- LangChain - SQL: 关于如何使用 LLM 与 SQL 数据库交互的教程,涉及 Text-to-SQL 和可选的 SQL 智能体。
- Pinecone - LLM agents: 智能体与工具的介绍,涵盖不同类型。
- LLM Powered Autonomous Agents by Lilian Weng:一篇关于 LLM 智能体的偏理论文章。
- LangChain - OpenAI's RAG: OpenAI 所采用的 RAG 策略概述,包括后处理。
- DSPy in 8 Steps: DSPy 通用指南,介绍模块、签名与优化器。
5. 智能体(Agents)
LLM 智能体可以基于对环境进行推理而自主执行任务,通常通过使用工具或函数与外部系统交互。
- 智能体基础(Agent fundamentals):智能体通过思考(内部推理以决定下一步做什么)、行动(执行任务,通常通过与外部工具交互)和观察(分析反馈或结果以优化下一步)来运作。
- 智能体协议(Agent protocols):Model Context Protocol(MCP)是通过 MCP 服务器与客户端将智能体连接到外部工具和数据源的行业标准。近来,Agent2Agent(A2A)尝试为智能体互操作性标准化一种通用语言。
- 厂商框架(Vendor frameworks):每个主要云模型提供商都有自己的智能体框架,包括 OpenAI SDK,、Google ADK, 和 Claude Agent SDK;如果你特别绑定某一家厂商,可以选择对应方案。
- 其他框架(Other frameworks):可使用不同框架简化智能体开发,例如 LangGraph(工作流设计与可视化)、LlamaIndex(结合 RAG 的数据增强型智能体),或自定义方案。更具实验性的框架包括不同智能体之间的协作,例如 CrewAI(基于角色的团队工作流)和 AutoGen(对话驱动的多智能体系统)。
📚 参考资料:
- Agents Course: Hugging Face 制作的关于 AI 智能体的热门课程。
- LangGraph: 如何使用 LangGraph 构建 AI 智能体的概述。
- LlamaIndex Agents: 使用 LlamaIndex 构建智能体的用例与资源。
6. 推理优化(Inference optimization)
文本生成是一个成本高昂的过程,需要昂贵的硬件。除量化之外,还提出了多种技术,以最大化吞吐量并降低推理成本。
- Flash Attention:对注意力机制进行优化,将其复杂度从二次降为线性,从而加速训练与推理。
- 键值缓存(Key-value cache):理解键值缓存,以及 Multi-Query Attention(MQA)和 Grouped-Query Attention(GQA)带来的改进。
- 推测解码(Speculative decoding):使用小模型生成草稿,再由大模型审核,以加速文本生成。EAGLE-3 是一种特别流行的方案。
📚 参考资料:
- GPU Inference by Hugging Face:讲解如何在 GPU 上优化推理。
- LLM Inference by Databricks:在生产环境中优化 LLM 推理的最佳实践。
- Optimizing LLMs for Speed and Memory by Hugging Face:讲解优化速度与内存的三项主要技术,即量化、Flash Attention 和架构创新。
- Assisted Generation by Hugging Face:Hugging Face 版本的推测解码。这是一篇有趣的文章,讲解其工作原理,并附有实现代码。
- EAGLE-3 paper: 介绍 EAGLE-3,并报告最高可达 6.5× 的加速。
- Speculators: 由 vLLM 开发的库,用于为 LLM 推理构建、评估和存储推测解码算法(例如 EAGLE-3)。
7. 部署 LLM
大规模部署 LLM 是一项工程挑战,可能需要多个 GPU 集群。在其他场景下,演示和本地应用可以用低得多的复杂度实现。
- 本地部署:隐私是开源 LLM 相对闭源模型的一项重要优势。本地 LLM 服务器(LM Studio, Ollama, oobabooga, kobold.cpp, 等)利用这一优势为本地应用提供动力。
- 演示部署:像 Gradio 和 Streamlit 这样的框架有助于原型化应用并分享演示。你也可以轻松将它们托管到线上,例如使用 Hugging Face Spaces.
- 服务器部署:大规模部署 LLM 需要云端(另见 SkyPilot) 或本地(on-prem)基础设施,并常借助 TGI, vLLM, 等优化的文本生成框架。
- 边缘部署:在资源受限的环境中,MLC LLM 和 mnn-llm 等高性能框架可以在 Web 浏览器、Android 和 iOS 上部署 LLM。
📚 参考资料:
- Streamlit - Build a basic LLM app: 使用 Streamlit 制作基础 ChatGPT 风格应用的教程。
- HF LLM Inference Container: 使用 Hugging Face 推理容器在 Amazon SageMaker 上部署 LLM。
- Philschmid blog Philipp Schmid 撰写:关于使用 Amazon SageMaker 部署 LLM 的高质量文章合集。
- Optimizing latence Hamel Husain 撰写:从吞吐量和延迟角度对比 TGI、vLLM、CTranslate2 和 mlc。
8. 保护 LLM 安全
除软件常见的传统安全问题外,LLM 因其训练和提示(prompting)方式而存在独特弱点。
- 提示攻击(Prompt hacking):与提示工程相关的多种技术,包括提示注入(prompt injection,通过额外指令劫持模型回答)、数据/提示泄露(data/prompt leaking,检索其原始数据/提示)和越狱(jailbreaking,精心构造提示以绕过安全机制)。
- 后门(Backdoors):攻击向量可直接针对训练数据,通过污染训练数据(例如植入虚假信息)或创建后门(秘密触发器,在推理时改变模型行为)。
- 防御措施:保护 LLM 应用的最佳方式是针对这些漏洞进行测试(例如使用红队演练以及 garak) 等检查工具),并在生产环境中进行观测(可借助 langfuse). 等框架)。
📚 参考资料:
- OWASP LLM Top 10 HEGO Wiki:LLM 应用中最常见的 10 项关键漏洞清单。
- Prompt Injection Primer Joseph Thacker 撰写:面向工程师的提示注入简明指南。
- LLM Security @llm_sec: 撰写:与 LLM 安全相关的广泛资源列表。
- Red teaming LLMs Microsoft 撰写:如何使用 LLM 进行红队演练的指南。
致谢
本路线图受到 Milan Milanović 和 Romano Roth 优秀的 DevOps Roadmap 启发。
特别感谢:
- Thomas Thelen 激励我创建这份路线图
- André Frade 对初稿提供意见并进行审阅
- Dino Dunn 提供 LLM 安全相关资源
- Magdalena Kuhn 改进「人工评估」部分
- Odoverdose 推荐 3Blue1Brown 关于 Transformer 的视频
- 为本课程教育参考资料做出贡献的所有人 :)
免责声明:本人与本文列出的任何来源均无隶属关系。



