Skip to content

yuanzhongqiao/llm-course-cn

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

62 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🗣️大语言模型课程

在 X 上关注我博客实践 GNN

LLM课程分为三个部分:

  1. 🧩 LLM 基础知识涵盖有关数学、Python 和神经网络的基本知识。
  2. 🧑‍🔬LLM科学家专注于使用最新技术构建最好的LLM。
  3. 👷 LLM 工程师专注于创建基于 LLM 的应用程序并部署它们。

📝 笔记本

与大型语言模型相关的笔记本和文章列表。

工具

笔记本 描述 笔记本
🧐LLM自动评估 使用 RunPod 自动评估您的LLM 在 Colab 中打开
🥱 LazyMergekit 使用 mergekit 一键轻松合并模型。 在 Colab 中打开
⚡ AutoGGUF 一键量化 GGUF 格式的 LLM。 在 Colab 中打开

微调

笔记本 描述 文章 笔记本
在 Google Colab 中微调 Llama 2 微调您的第一个 Llama 2 模型的分步指南。 文章 在 Colab 中打开
使用 Axolotl 微调LLM 最先进的微调工具的端到端指南。 文章 在制品
使用 DPO 微调 Mistral-7b 模型 使用 DPO 提升监督微调模型的性能。 文章 在 Colab 中打开

量化

笔记本 描述 文章 笔记本
1. 权重量化简介 使用 8 位量化的大型语言模型优化。 文章 在 Colab 中打开
2. 使用 GPTQ 的 4 位 LLM 量化 量化您自己的开源 LLM 以在消费类硬件上运行它们。 文章 在 Colab 中打开
3. 使用 GGUF 和 llama.cpp 量化 Llama 2 模型 使用 llama.cpp 量化 Llama 2 模型并将 GGUF 版本上传到 HF Hub。 文章 在 Colab 中打开
4. ExLlamaV2:运行 LLM 最快的库 量化并运行 EXL2 模型并将其上传到 HF Hub。 文章 在 Colab 中打开

其他

笔记本 描述 文章 笔记本
大型语言模型中的解码策略 从波束搜索到核采样的文本生成指南 文章 在 Colab 中打开
可视化 GPT-2 的损失情况 基于重量扰动的损失景观的 3D 图。 鸣叫 在 Colab 中打开
使用知识图改进 ChatGPT 用知识图增强 ChatGPT 的答案。 文章 在 Colab 中打开

🧩 LLM 基础知识

1. 机器学习数学

在掌握机器学习之前,了解支持这些算法的基本数学概念非常重要。

  • 线性代数:这对于理解许多算法至关重要,尤其是深度学习中使用的算法。关键概念包括向量、矩阵、行列式、特征值和特征向量、向量空间和线性变换。
  • 微积分:许多机器学习算法涉及连续函数的优化,这需要了解导数、积分、极限和级数。多变量微积分和梯度的概念也很重要。
  • 概率和统计:这些对于理解模型如何从数据中学习并做出预测至关重要。关键概念包括概率论、随机变量、概率分布、期望、方差、协方差、相关性、假设检验、置信区间、最大似然估计和贝叶斯推理。

📚 资源:


2. 用于机器学习的Python

Python 是一种强大而灵活的编程语言,由于其可读性、一致性和强大的数据科学库生态系统,特别适合机器学习。

  • Python基础知识:Python编程需要很好地理解基本语法、数据类型、错误处理和面向对象编程。
  • 数据科学库:包括熟悉用于数值运算的 NumPy、用于数据操作和分析的 Pandas、用于数据可视化的 Matplotlib 和 Seaborn。
  • 数据预处理:这涉及特征缩放和标准化、处理缺失数据、异常值检测、分类数据编码以及将数据拆分为训练集、验证集和测试集。
  • 机器学习库:熟练使用 Scikit-learn(一个提供多种监督和非监督学习算法的库)至关重要。了解如何实现线性回归、逻辑回归、决策树、随机森林、k 最近邻 (K-NN) 和 K 均值聚类等算法非常重要。PCA 和 t-SNE 等降维技术也有助于可视化高维数据。

📚 资源:


3. 神经网络

神经网络是许多机器学习模型的基本组成部分,特别是在深度学习领域。为了有效地利用它们,全面了解它们的设计和机制至关重要。

  • 基础知识:这包括理解神经网络的结构,例如层、权重、偏差、激活函数(sigmoid、tanh、ReLU 等)
  • 训练和优化:熟悉反向传播和不同类型的损失函数,例如均方误差 (MSE) 和交叉熵。了解各种优化算法,例如梯度下降、随机梯度下降、RMSprop 和 Adam。
  • 过度拟合:了解过度拟合的概念(模型在训练数据上表现良好,但在未见过的数据上表现不佳)并学习各种正则化技术(dropout、L1/L2 正则化、提前停止、数据增强)来防止过度拟合。
  • 实现多层感知器 (MLP):使用 PyTorch 构建 MLP,也称为全连接网络。

📚 资源:


4.自然语言处理(NLP)

NLP 是人工智能的一个令人着迷的分支,它弥合了人类语言和机器理解之间的差距。从简单的文本处理到理解语言的细微差别,NLP 在翻译、情感分析、聊天机器人等许多应用中发挥着至关重要的作用。

  • 文本预处理:学习各种文本预处理步骤,例如分词(将文本分割成单词或句子)、词干提取(将单词还原为其词根形式)、词形还原(与词干提取类似,但考虑上下文)、停用词删除等。
  • 特征提取技术:熟悉将文本数据转换为机器学习算法可以理解的格式的技术。主要方法包括词袋 (BoW)、词频-逆文档频率 (TF-IDF) 和 n-gram。
  • 词嵌入:词嵌入是一种词表示形式,允许具有相似含义的词具有相似的表示形式。主要方法包括 Word2Vec、GloVe 和 FastText。
  • 递归神经网络 (RNN):了解 RNN 的工作原理,RNN 是一种设计用于处理序列数据的神经网络。探索 LSTM 和 GRU,这两种能够学习长期依赖关系的 RNN 变体。

📚 资源:

🧑‍🔬 LLM科学家

1. LLM架构

虽然不需要深入了解 Transformer 架构,但深入了解其输入(令牌)和输出(logits)非常重要。普通的注意力机制是另一个需要掌握的关键组成部分,稍后会介绍它的改进版本。

  • 高级视图:重新审视编码器-解码器 Transformer 架构,更具体地说,是仅解码器的 GPT 架构,该架构在每个现代 LLM 中都使用。
  • 标记化:了解如何将原始文本数据转换为模型可以理解的格式,这涉及将文本拆分为标记(通常是单词或子词)。
  • 注意力机制:掌握注意力机制背后的理论,包括自注意力和缩放点积注意力,这使得模型在产生输出时能够关注输入的不同部分。
  • 文本生成:了解模型生成输出序列的不同方式。常见的策略包括贪婪解码、波束搜索、top-k 采样和核采样。

📚参考资料

  • nanoGPT,作者:Andrej Karpathy:一段 2 小时长的 YouTube 视频,用于从头开始重新实现 GPT(针对程序员)。
  • 注意力?注意力!作者:Lilian Weng:以更正式的方式介绍关注的必要性。
  • LLM中的解码策略:提供代码和对生成文本的不同解码策略的直观介绍。

2. 构建指令数据集

虽然从维基百科和其他网站找到原始数据很容易,但在野外收集成对的指令和答案却很困难。与传统机器学习一样,数据集的质量将直接影响模型的质量,这就是为什么它可能是微调过程中最重要的组成部分。

  • Alpaca -like 数据集:使用 OpenAI API (GPT) 从头开始​​生成合成数据。您可以指定种子和系统提示来创建多样化的数据集。
  • 高级技术:了解如何使用Evol-Instruct改进现有数据集,如何生成Orcaphi-1论文中的高质量合成数据。
  • 过滤数据:传统技术涉及正则表达式、删除近似重复项、关注具有大量标记的答案等。
  • 提示模板:没有真正的标准方法来格式化说明和答案,这就是为什么了解不同的聊天模板很重要,例如ChatMLAlpaca等。

📚参考资料


3. 预训练模型

预训练是一个非常漫长且成本高昂的过程,这就是为什么这不是本课程的重点。对预培训期间发生的情况有一定程度的了解是很好的,但不需要实践经验。

  • 数据管道:预训练需要巨大的数据集(例如,Llama 2使用 2 万亿个标记进行训练),需要对这些数据集进行过滤、标记化并与预定义的词汇进行整理。
  • 因果语言建模:了解因果语言建模和屏蔽语言建模之间的区别,以及本例中使用的损失函数。为了进行高效的预训练,请了解有关Megatron-LMgpt-neox的更多信息。
  • 缩放法则缩放法则根据模型大小、数据集大小和用于训练的计算量描述预期的模型性能。
  • 高性能计算:超出了本文的范围,但如果您打算从头开始创建自己的LLM(硬件、分布式工作负载等),那么更多有关 HPC 的知识是基础。

📚参考资料


4. 监督微调

预训练模型仅针对下一个标记预测任务进行训练,这就是为什么它们不是有用的助手。SFT 允许您调整它们以响应指令。此外,它允许您根据任何数据(私有数据、GPT-4 无法看到的数据等)微调您的模型并使用它,而无需支付 OpenAI 等 API 的费用。

  • 全微调:全微调是指训练模型中的所有参数。这不是一种有效的技术,但它会产生稍微好一点的结果。
  • LoRA:一种基于低阶适配器的参数高效技术(PEFT)。我们不训练所有参数,而是只训练这些适配器。
  • QLoRA:另一种基于 LoRA 的 PEFT,它还将模型的权重量化为 4 位,并引入分页优化器来管理内存峰值。将其与Unsloth结合使用,可以在免费的 Colab 笔记本上高效运行。
  • Axolotl:一种用户友好且功能强大的微调工具,用于许多最先进的开源模型。
  • DeepSpeed:针对多 GPU 和多节点设置的 LLM 的高效预训练和微调(在 Axolotl 中实现)。

📚参考资料


5. 根据人类反馈进行强化学习

经过监督微调后,RLHF 是用于使 LLM 的答案与人类期望保持一致的一个步骤。这个想法是从人类(或人工)反馈中学习偏好,这可用于减少偏见、审查模型或使它们以更有用的方式行事。它比 SFT 更复杂,并且通常被视为可选的。

  • 偏好数据集:这些数据集通常包含具有某种排名的多个答案,这使得它们比指令数据集更难生成。
  • 近端策略优化:该算法利用奖励模型来预测给定文本是否被人类排名较高。然后使用该预测来优化 SFT 模型,并根据 KL 散度进行惩罚。
  • 直接偏好优化:DPO 通过将其重新定义为分类问题来简化该过程。它使用参考模型而不是奖励模型(无需训练),并且只需要一个超参数,使其更加稳定和高效。

📚参考资料


六、评价

评估LLM是管道中被低估的部分,既耗时又不可靠。您的下游任务应该决定您想要评估的内容,但请始终记住古德哈特定律:“当一项措施成为目标时,它就不再是一个好的措施。”

  • 传统指标:困惑度和 BLEU 分数等指标并不像以前那样流行,因为它们在大多数情况下都存在缺陷。了解它们以及何时应用它们仍然很重要。
  • 通用基准:基于语言模型评估工具开放 LLM 排行榜是通用 LLM(如 ChatGPT)的主要基准。还有其他流行的基准测试,如BigBenchMT-Bench等。
  • 特定于任务的基准:摘要、翻译、问答等任务有专用的基准、指标,甚至子领域(医学、金融等),例如用于生物医学问答的PubMedQA 。
  • 人工评价:最可靠的评价是用户的接受率或人工的比较。如果你想知道一个模型表现是否良好,最简单但最可靠的方法就是自己使用它。

📚参考资料


7. 量化

量化是使用较低精度转换模型权重(和激活)的过程。例如,使用 16 位存储的权重可以转换为 4 位表示。这项技术对于降低LLM相关的计算和内存成本变得越来越重要。

  • 基本技术:学习不同级别的精度(FP32、FP16、INT8 等)以及如何使用 absmax 和零点技术执行简单量化。
  • GGUF 和 llama.cpp : llama.cpp和 GGUF 格式最初设计为在 CPU 上运行,现已成为在消费级硬件上运行 LLM 的最流行工具。
  • GPTQ 和 EXL2GPTQ,更具体地说,EXL2格式提供了令人难以置信的速度,但只能在 GPU 上运行。模型也需要很长时间才能量化。
  • AWQ:这种新格式比 GPTQ 更准确(更低的复杂性),但使用更多的 VRAM,并且不一定更快。

📚参考资料


8. 推理优化

人们开发了许多优化技术来减少 VRAM 使用并提高生成速度。除了量化方法之外,这些改进还经常涉及更有效的注意力机制和架构变化的实施。

  • Flash Attention:优化注意力机制,将其复杂度从二次型转变为线性型,加快训练和推理速度。
  • 键值缓存:了解键值缓存以及多查询注意(MQA)和分组查询注意(GQA)中引入的改进。
  • 推测性解码:使用小型模型生成草稿,然后由较大模型进行审查以加快文本生成速度。
  • 位置编码:了解 Transformer 中的位置编码,特别是RoPEALiBiYaRN等相关方案。(与推理优化没有直接关系,而是与更长的上下文窗口相关。)

📚参考资料

👷 LLM 工程师

在制品


致谢

该路线图的灵感来自 Milan Milanović 和 Romano Roth 的出色DevOps 路线图

特别感谢 Thomas Thelen 激励我创建路线图,并感谢 André Frade 对初稿的投入和审查。

免责声明:我不隶属于此处列出的任何来源。


明星历史图

About

学习大语言模型LLM的 roadmaps and Colab notebooks.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Jupyter Notebook 100.0%