🗣️ LLM 力量中心
通过精选教程、最佳实践以及可用于自定义训练和推理的现成代码,释放 LLM 的潜力。
概述
欢迎来到 LLM-PowerHouse,您释放大型语言模型(LLMs)在自定义训练和推理方面全部潜力的终极资源。这个 GitHub 仓库是一个全面且精心策划的指南,旨在赋能开发者、研究人员和爱好者,帮助他们充分发挥 LLM 的真正能力,构建能够突破自然语言理解边界智能应用。
快速导航
按目标开始
仓库结构
完整目录
LLMs 的基础
本节提供了关于数学、Python 和神经网络的基础知识。这可能不是理想的起点,但您可以在需要时随时查阅。
⬇️ 准备好掌握 LLMs 的基础了吗? ⬇️
graph LR
Foundations["📚 大型语言模型(LLMs)的基础"] --> ML["1️⃣ 机器学习中的数学"]
Foundations["📚 大型语言模型(LLMs)的基础"] --> Python["2️⃣ 用于机器学习的 Python"]
Foundations["📚 大型语言模型(LLMs)的基础"] --> NN["3️⃣ 神经网络"]
Foundations["📚 大型语言模型(LLMs)的基础"] --> NLP["4️⃣ 自然语言处理(NLP)"]
ML["1️⃣ 机器学习中的数学"] --> LA["📐 线性代数"]
ML["1️⃣ 机器学习中的数学"] --> Calculus["📏 微积分"]
ML["1️⃣ 机器学习中的数学"] --> Probability["📊 概率与统计"]
Python["2️⃣ 用于机器学习的 Python"] --> PB["🐍 Python 基础"]
Python["2️⃣ 用于机器学习的 Python"] --> DS["📊 数据科学库"]
Python["2️⃣ 用于机器学习的 Python"] --> DP["🔄 数据预处理"]
Python["2️⃣ 用于机器学习的 Python"] --> MLL["🤖 机器学习库"]
NN["3️⃣ 神经网络"] --> Fundamentals["🔧 基础知识"]
NN["3️⃣ 神经网络"] --> TO["⚙️ 训练与优化"]
NN["3️⃣ 神经网络"] --> Overfitting["📉 过拟合"]
NN["3️⃣ 神经网络"] --> MLP["🧠 MLP 的实现"]
NLP["4️⃣ 自然语言处理(NLP)"] --> TP["📝 文本预处理"]
NLP["4️⃣ 自然语言处理(NLP)"] --> FET["🔍 特征提取技术"]
NLP["4️⃣ 自然语言处理(NLP)"] --> WE["🌐 词嵌入"]
NLP["4️⃣ 自然语言处理(NLP)"] --> RNN["🔄 循环神经网络"]
1. 机器学习中的数学
在掌握机器学习之前,理解支撑这些算法的基础数学概念至关重要。
| 概念 |
描述 |
| 线性代数 |
对于理解许多算法,尤其是深度学习中的算法,至关重要。关键概念包括向量、矩阵、行列式、特征值、特征向量、向量空间和线性变换。 |
| 微积分 |
在许多机器学习算法中,优化连续函数时非常重要。重要主题包括导数、积分、极限、级数、多元微积分和梯度。 |
| 概率与统计 |
理解模型如何从数据中学习并进行预测的关键。关键概念涵盖概率论、随机变量、概率分布、期望、方差、协方差、相关性、假设检验、置信区间、最大似然估计和贝叶斯推断。 |
拓展阅读
| 参考资料 |
描述 |
链接 |
| 3Blue1Brown - 线性代数的本质 |
提供一系列视频,以几何直观的方式讲解线性代数的基本概念。 |
🔗 |
| StatQuest with Josh Starmer - 统计学基础 |
通过视频教程,清晰简洁地解释各种统计学概念。 |
🔗 |
| AP Statistics Intuition by Ms Aerin |
整理了一系列Medium文章,提供对不同概率分布的直观见解。 |
🔗 |
| Immersive Linear Algebra |
以另一种视觉化方式呈现线性代数概念,帮助理解。 |
🔗 |
| 可汗学院 - 线性代数 |
专为初学者设计,提供线性代数基本主题的直观解释。 |
🔗 |
| 可汗学院 - 微积分 |
提供全面覆盖微积分要点的互动课程。 |
🔗 |
| 可汗学院 - 概率与统计 |
提供易于理解的材料,用于学习概率与统计概念。 |
🔗 |
2. 机器学习中的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 - 机器学习导论 |
面向初学者的机器学习入门课程,涵盖基础算法。 |
🔗 |
3. 神经网络
| 概念 |
描述 |
| 基础知识 |
理解神经网络的基本结构,包括层、权重、偏置以及sigmoid、tanh和ReLU等激活函数。 |
| 训练与优化 |
学习反向传播以及均方误差(MSE)和交叉熵等各种损失函数。熟悉梯度下降、随机梯度下降、RMSprop和Adam等优化算法。 |
| 过拟合 |
掌握过拟合的概念——即模型在训练数据上表现良好,但在未见过的数据上表现较差——并探索如dropout、L1/L2正则化、早停和数据增强等正则化技术,以缓解过拟合问题。 |
| 实现多层感知机(MLP) |
使用PyTorch构建一个多层感知机(MLP),也称为全连接网络。 |
拓展阅读
| 参考资料 |
描述 |
链接 |
| 3Blue1Brown - 但什么是神经网络? |
本视频以直观的方式解释神经网络及其内部工作原理。 |
🔗 |
| freeCodeCamp - 深度学习速成课 |
该视频高效地介绍了深度学习中最重要的一些概念。 |
🔗 |
| Fast.ai - 实用深度学习 |
一门专为有编程经验、希望学习深度学习的人设计的免费课程。 |
🔗 |
| Patrick Loeber - PyTorch教程 |
一系列面向完全初学者的视频,帮助学习PyTorch。 |
🔗 |
4. 自然语言处理(NLP)
| 概念 |
描述 |
| 文本预处理 |
学习各种文本预处理步骤,例如分词(将文本拆分为单词或句子)、词干提取(将单词还原为词根形式)、词形还原(与词干提取类似,但考虑上下文)以及停用词移除。 |
| 特征提取技术 |
熟悉将文本数据转换为机器学习算法可理解格式的技术。主要方法包括词袋模型(BoW)、词频-逆文档频率(TF-IDF)和n-gram。 |
| 词嵌入 |
理解词嵌入,这是一种词表示方法,能够使语义相似的词语具有相似的表示。主要方法包括Word2Vec、GloVe和FastText。 |
| 循环神经网络(RNNs) |
学习RNN,一种专为处理序列数据设计的神经网络,并探索LSTM和GRU这两种能够学习长期依赖关系的RNN变体。 |
深入探索
| 参考资料 |
描述 |
链接 |
| RealPython - 使用spaCy进行Python中的NLP |
一篇关于在Python中使用spaCy库进行NLP任务的详尽指南。 |
🔗 |
| Kaggle - NLP指南 |
一系列笔记本和资源,提供Python中NLP的实践性讲解。 |
🔗 |
| Jay Alammar - 图解Word2Vec |
一份详细参考资料,用于理解Word2Vec架构。 |
🔗 |
| Jake Tae - 从零开始的PyTorch RNN |
在PyTorch中对RNN、LSTM和GRU模型的实用且直接的实现。 |
🔗 |
| colah的博客 - 理解LSTM网络 |
一篇解释LSTM网络的理论文章。 |
🔗 |
解锁LLM科学的艺术
在本课程模块中,参与者将深入掌握通过前沿方法创建顶级LLM的技术。
⬇️ 准备好迎接LLM科学了吗? ⬇️
graph LR
Scientist["LLM科学的艺术 👩🔬"] --> Architecture["LLM架构 🏗️"]
Scientist["LLM科学的艺术 👩🔬"] --> Instruction["构建指令数据集 📚"]
Scientist["LLM科学的艺术 👩🔬"] --> Pretraining["预训练模型 🛠️"]
Scientist["LLM科学的艺术 👩🔬"] --> FineTuning["监督微调 🎯"]
Scientist["LLM科学的艺术 👩🔬"] --> RLHF["RLHF 🔍"]
Scientist["LLM科学的艺术 👩🔬"] --> Evaluation["评估 📊"]
Scientist["LLM科学的艺术 👩🔬"] --> Quantization["量化 ⚖️"]
Scientist["LLM科学的艺术 👩🔬"] --> Trends["新趋势 📈"]
Architecture["LLM架构 🏗️"] --> HLV["高层次视图 🔍"]
Architecture["LLM架构 🏗️"] --> Tokenization["分词 🔠"]
Architecture["LLM架构 🏗️"] --> Attention["注意力机制 🧠"]
Architecture["LLM架构 🏗️"] --> Generation["文本生成 ✍️"]
Instruction["构建指令数据集 📚"] --> Alpaca["类似Alpaca的数据集 🦙"]
Instruction["构建指令数据集 📚"] --> Advanced["高级技术 📈"]
Instruction["构建指令数据集 📚"] --> Filtering["数据过滤 🔍"]
Instruction["构建指令数据集 📚"] --> Prompt["提示模板 📝"]
Pretraining["预训练模型 🛠️"] --> Pipeline["数据流水线 🚀"]
Pretraining["预训练模型 🛠️"] --> CLM["因果语言建模 📝"]
Pretraining["预训练模型 🛠️"] --> Scaling["规模法则 📏"]
Pretraining["预训练模型 🛠️"] --> HPC["高性能计算 💻"]
FineTuning["监督微调 🎯"] --> Full["完全微调 🛠️"]
FineTuning["监督微调 🎯"] --> Lora["LoRA和QLoRA 🌀"]
FineTuning["监督微调 🎯"] --> Axoloti["Axoloti 🦠"]
FineTuning["监督微调 🎯"] --> DeepSpeed["DeepSpeed ⚡"]
RLHF["RLHF 🔍"] --> Preference["偏好数据集 📝"]
RLHF["RLHF 🔍"] --> Optimization["近端策略优化 🎯"]
RLHF["RLHF 🔍"] --> DPO["直接偏好优化 📈"]
Evaluation["评估 📊"] --> Traditional["传统指标 📏"]
Evaluation["评估 📊"] --> General["通用基准 📈"]
Evaluation["评估 📊"] --> Task["特定任务基准 📋"]
Evaluation["评估 📊"] --> HF["人工评估 👩🔬"]
Quantization["量化 ⚖️"] --> Base["基础技术 🛠️"]
Quantization["量化 ⚖️"] --> GGUF["GGUF和llama.cpp 🐐"]
Quantization["量化 ⚖️"] --> GPTQ["GPTQ和EXL2 🤖"]
Quantization["量化 ⚖️"] --> AWQ["AWQ 🚀"]
Trends["新趋势 📈"] --> Positional["位置嵌入 🎯"]
Trends["新趋势 📈"] --> Merging["模型合并 🔄"]
Trends["新趋势 📈"] --> MOE["专家混合模型 🎭"]
Trends["新趋势 📈"] --> Multimodal["多模态模型 📷"]
1. 大语言模型架构 🏗️
对 Transformer 架构的概述,重点介绍输入(标记)和输出(logits),以及理解原始注意力机制及其改进版本的重要性。
| 概念 |
描述 |
| Transformer 架构(高层次) |
回顾编码器-解码器型 Transformer,特别是现代大语言模型中使用的仅解码器 GPT 架构。 |
| 分词 |
理解如何将原始文本转换为模型可处理的标记(单词或子词)。 |
| 注意力机制 |
掌握注意力背后的理论,包括自注意力和缩放点积注意力,这些机制使模型在生成输出时能够关注输入的相关部分。 |
| 文本生成 |
学习模型用于生成输出序列的不同方法。常见策略包括贪心解码、束搜索、top-k 采样和核采样。 |
深入探索
| 参考资料 |
描述 |
链接 |
| Jay Alammar 的《图解 Transformer》 |
对 Transformer 模型的可视化且直观的解释 |
🔗 |
| Jay Alammar 的《图解 GPT-2》 |
专注于 GPT 架构,与 Llama 的架构类似。 |
🔗 |
| 3Blue1Brown 的 Transformer 视觉入门 |
简单的 Transformer 视觉介绍 |
🔗 |
| Brendan Bycroft 的 LLM 可视化 |
LLM 内部结构的 3D 可视化 |
🔗 |
| Andrej Karpathy 的 nanoGPT |
从零开始重新实现 GPT(面向程序员) |
🔗 |
| 大语言模型中的解码策略 |
提供解码策略的代码和可视化 |
🔗 |
2. 构建指令数据集 📚
虽然从维基百科和其他网站上很容易找到原始数据,但在实际环境中收集指令与答案的配对却很困难。与传统机器学习一样,数据集的质量会直接影响模型的质量,因此它可能是微调过程中最重要的组成部分。
| 概念 |
描述 |
| 类 Alpaca 数据集 |
这种数据集生成方法利用 OpenAI API(GPT)从头合成数据,允许指定种子和系统提示,以促进数据集的多样性。 |
| 高级技术 |
深入研究使用 Evol-Instruct 增强现有数据集的方法,并探索生成顶级合成数据的途径,类似于 Orca 和 phi-1 研究论文中所描述的方法。 |
| 数据过滤 |
采用传统的正则表达式、近似重复项去除以及优先选择具有大量标记的答案等技术来优化数据集。 |
| 提示模板 |
认识到目前尚无明确的标准来规范指令和响应的结构,强调熟悉各种聊天模板的重要性,例如 ChatML 和 Alpaca。 |
深入探索
| 参考资料 |
描述 |
链接 |
| Thomas Capelle 的《为指令微调准备数据集》 |
探讨 Alpaca 和 Alpaca-GPT4 数据集,并讨论格式化方法。 |
🔗 |
| Solano Todeschini 的《生成临床指令数据集》 |
提供使用 GPT-4 创建合成指令数据集的教程。 |
🔗 |
| Kshitiz Sahay 的《使用 GPT 3.5 进行新闻分类》 |
展示如何使用 GPT 3.5 创建用于在新闻分类任务中微调 Llama 2 的指令数据集。 |
🔗 |
| 用于微调 LLM 的数据集创建 |
包含过滤数据集并上传结果的技术的笔记本。 |
🔗 |
| Matthew Carrigan 的聊天模板 |
Hugging Face 关于提示模板的页面 |
🔗 |
3. 预训练模型 🛠️
预训练过程既耗时又昂贵,因此并非本课程的重点。虽然掌握预训练的基础知识很有帮助,但在这一领域获得实践经验并不是必需的。
| 概念 |
描述 |
| 数据流水线 |
预训练涉及处理海量数据集,例如 Llama 2 中使用的 2 万亿个 token,这需要执行诸如过滤、分词和词汇表准备等任务。 |
| 因果语言建模 |
理解因果语言建模与掩码语言建模之间的区别,包括相应的损失函数。通过 Megatron-LM 或 gpt-neox 等资源探索高效的预训练技术。 |
| 扩展定律 |
深入了解 扩展定律,它根据模型规模、数据集大小以及训练过程中所用的计算资源等因素,阐明了预期的模型性能。 |
| 高性能计算 |
虽然超出了本次讨论的范围,但对于那些考虑从头构建自己的 LLM 的人来说,深入理解 HPC 将变得至关重要,包括硬件选择和分布式工作负载管理等方面。 |
更多探索
| 参考资料 |
描述 |
链接 |
| Junhao Zhao 的 LLMDataHub |
提供精心策划的数据集集合,专为预训练、微调和 RLHF 设计。 |
🔗 |
| Hugging Face 的从零开始训练因果语言模型 |
引导用户使用 transformers 库从头开始对 GPT-2 模型进行预训练。 |
🔗 |
| Zhang 等人的 TinyLlama |
提供了从零开始训练 Llama 模型的过程见解,有助于全面理解。 |
🔗 |
| Hugging Face 的因果语言建模 |
探讨因果语言建模与掩码语言建模的区别,并提供高效微调 DistilGPT-2 模型的教程。 |
🔗 |
| nostalgebraist 的《Chinchilla 的深远影响》 |
深入探讨扩展定律及其对 LLM 的影响,提供了关于其更广泛意义的宝贵见解。 |
🔗 |
| BigScience 的 BLOOM |
对 BLOOM 模型的构建进行了全面概述,提供了有关其工程实现及所面临挑战的重要见解。 |
🔗 |
| Meta 的 OPT-175 日志 |
提供了研究日志,详细记录了在预训练一个拥有 1750 亿参数的大语言模型过程中遇到的成功与失败。 |
🔗 |
| LLM 360 |
展示了一个面向开源 LLM 的综合框架,涵盖训练和数据准备代码、数据集、评估指标以及模型。 |
🔗 |
4. 监督微调 🎯
预训练模型被训练用来预测下一个词,因此它们并不适合作为助手。但通过 SFT,你可以调整它们以更好地遵循指令。此外,你还可以在不同的数据上对其进行微调,甚至可以使用 GPT-4 从未见过的私有数据,并且无需依赖 OpenAI 等公司的付费 API 即可使用这些模型。
| 概念 |
描述 |
| 完全微调 |
完全微调是指训练模型中的所有参数,尽管这种方法效率不高,但可以获得略微更好的效果。 |
| LoRA |
LoRA 是一种基于低秩适配器的参数高效技术 (PEFT),它只专注于训练这些适配器,而不是整个模型的所有参数。 |
| QLoRA |
QLoRA 是另一种源自 LoRA 的 PEFT 技术,它还将模型权重量化为 4 位,并引入分页优化器来有效管理内存峰值。 |
| Axolotl |
Axolotl 是一款用户友好且功能强大的微调工具,已被广泛应用于众多最先进的开源模型中。 |
| DeepSpeed |
DeepSpeed 可以在多 GPU 和多节点环境中高效地进行大型语言模型的预训练和微调,通常与 Axolotl 集成以提升性能。 |
更多探索
| 参考资料 |
描述 |
链接 |
| Alpin 的新手 LLM 训练指南 |
提供了微调 LLM 所需的基本概念和参数概述。 |
🔗 |
| Sebastian Raschka 的 LoRA 洞察 |
提供了关于 LoRA 的实用见解,并指导如何选择最佳参数。 |
🔗 |
| 微调你自己的 Llama 2 模型 |
提供了一份使用 Hugging Face 库微调 Llama 2 模型的实践教程。 |
🔗 |
| Benjamin Marie 的《为大型语言模型填充数据》 |
阐述了在因果语言模型中填充训练样本的最佳实践。 |
🔗 |
RLHF 🔍
在监督微调之后,RLHF 是使大型语言模型的响应与人类期望相一致的关键步骤。这涉及从人类或人工智能反馈中获取偏好,从而减少偏差、实施模型审查或促进更具功利性的行为。RLHF 显然比 SFT 更为复杂,通常被视为可选步骤。
| 概念 |
描述 |
| 偏好数据集 |
通常包含若干答案及某种形式的排序,这类数据集比指令数据集更难构建。 |
| 近端策略优化 |
该算法利用奖励模型预测给定文本是否受到人类的高度评价。随后,它基于 KL 散度惩罚来优化 SFT 模型。 |
| 直接偏好优化 |
DPO 将这一过程简化为分类问题。它使用参考模型而非奖励模型(无需训练),且仅需一个超参数,因此更加稳定和高效。 |
深入探索
| 参考文献 |
描述 |
链接 |
| Ayush Thakur 的《使用 RLHF 训练 LLM 简介》 |
解释了为何 RLHF 有助于减少 LLM 中的偏差并提升性能。 |
🔗 |
| Hugging Face 的 RLHF 示例 |
介绍 RLHF,包括奖励模型的训练以及通过强化学习进行微调。 |
🔗 |
| Hugging Face 的 StackLLaMA |
使用 transformers 库通过 RLHF 高效对齐 LLaMA 模型的教程 |
🔗 |
| Sebastian Rashcka 的《LLM 训练中的 RLHF 及其替代方案》 |
概述 RLHF 流程及 RLAIF 等替代方案。 |
🔗 |
| 使用 DPO 微调 Llama2 |
使用 DPO 微调 Llama2 模型的教程 |
🔗 |
6. 评估 📊
评估大型语言模型往往是整个流程中被忽视的一个环节,其特点是耗时且可靠性一般。您的评估标准应根据下游任务量身定制,同时需牢记古德哈特定律:“当某项指标成为目标时,它就不再是好的指标了。”
进一步评估
| 参考文献 |
描述 |
链接 |
| Hugging Face 的固定长度模型困惑度 |
提供困惑度的概述,并附带使用 transformers 库实现困惑度的代码。 |
🔗 |
| Rachael Tatman 的“自担风险使用 BLEU” |
深入探讨 BLEU 分数,通过实例指出其存在的各种问题。 |
🔗 |
| Chang 等人的《LLM 评估综述》 |
全面阐述了应评估什么、在哪里评估以及如何评估语言模型。 |
🔗 |
| lmsys 的聊天机器人竞技场排行榜 |
展示了一个基于人类比较的通用语言模型 Elo 评分系统。 |
🔗 |
7. 量化 ⚖️
量化是指将模型的权重(以及激活值)转换为更低精度的数据表示。例如,原本用16位存储的权重可以被转换为4位表示。这一技术在降低大型语言模型相关的计算和内存开销方面变得愈发重要。
| 概念 |
描述 |
| 基础技术 |
探讨不同精度级别(FP32、FP16、INT8等),并学习如何使用如absmax和零点法等方法进行朴素量化。 |
| GGUF 和 llama.cpp |
llama.cpp 及其 GGUF 格式最初是为了在 CPU 上运行而设计的,如今已成为在消费级硬件上运行 LLM 的热门工具。 |
| GPTQ 和 EXL2 |
GPTQ 及其变体 EXL2 格式提供了惊人的速度,但仅限于 GPU 上运行。然而,使用这些格式对模型进行量化可能非常耗时。 |
| AWQ |
这种较新的格式相比 GPTQ 具有更高的准确性,表现为更低的困惑度,但需要显著更多的显存,并且不一定能带来更快的性能。 |
更多探索
| 参考资料 |
描述 |
链接 |
| 量化简介 |
提供量化的概述,包括 absmax 和零点量化,并演示了 LLM.int8() 方法及配套代码。 |
🔗 |
| 使用 llama.cpp 对 Llama 模型进行量化 |
提供使用 llama.cpp 和 GGUF 格式对 Llama 2 模型进行量化的方法教程。 |
🔗 |
| 使用 GPTQ 对 LLM 进行 4 位量化 |
提供使用 AutoGPTQ 和 GPTQ 算法对 LLM 进行量化的方法教程。 |
🔗 |
| ExLlamaV2 |
展示如何使用 EXL2 格式对 Mistral 模型进行量化,并借助 ExLlamaV2 库运行该模型——后者被誉为运行 LLM 最快的库。 |
🔗 |
| FriendliAI 关于激活感知权重量化技术的解读 |
提供 AWQ 技术及其相关优势的概述。 |
🔗 |
8. 新趋势 📈
更多探索
| 参考资料 |
描述 |
链接 |
| EleutherAI 关于扩展 RoPE 的讨论 |
总结各种位置编码技术的文章。 |
🔗 |
| Rajat Chawla 关于 YaRN 的理解 |
YaRN 的入门介绍。 |
🔗 |
| 使用 mergekit 合并 LLM |
关于使用 mergekit 进行模型合并的教程。 |
🔗 |
| Hugging Face 解释专家混合模型 |
关于 MoE 及其工作原理的全面指南。 |
🔗 |
| Chip Huyen 关于大型多模态模型的探讨: |
多模态系统及其领域内最新进展的概述。 |
🔗 |
构建生产就绪的LLM应用
学习如何创建和部署强大的LLM驱动的应用程序,重点在于模型增强以及适用于生产环境的实用部署策略。
⬇️ 准备好构建生产就绪的LLM应用了吗?⬇️
graph LR
Scientist["生产就绪的LLM应用 👩🔬"] --> Architecture["运行LLM 🏗️"]
Scientist --> Storage["构建向量存储 📦"]
Scientist --> Retrieval["检索增强生成 🔍"]
Scientist --> AdvancedRAG["高级RAG ⚙️"]
Scientist --> Optimization["推理优化 ⚡"]
Scientist --> Deployment["部署LLM 🚀"]
Scientist --> Secure["保护LLM 🔒"]
Architecture --> APIs["LLM API 🌐"]
Architecture --> OpenSource["开源LLM 🌍"]
Architecture --> PromptEng["提示工程 💬"]
Architecture --> StructOutputs["结构化输出 🗂️"]
Storage --> Ingest["文档摄取 📥"]
Storage --> Split["文档分割 ✂️"]
Storage --> Embed["嵌入模型 🧩"]
Storage --> VectorDB["向量数据库 📊"]
Retrieval --> Orchestrators["编排器 🎼"]
Retrieval --> Retrievers["检索器 🤖"]
Retrieval --> Memory["记忆 🧠"]
Retrieval --> Evaluation["评估 📈"]
AdvancedRAG --> Query["查询构造 🔧"]
AdvancedRAG --> Agents["智能体与工具 🛠️"]
AdvancedRAG --> PostProcess["后处理 🔄"]
AdvancedRAG --> Program["编程LLM 💻"]
Optimization --> FlashAttention["Flash Attention ⚡"]
Optimization --> KeyValue["键值缓存 🔑"]
Optimization --> SpecDecoding["推测解码 🚀"]
Deployment --> LocalDeploy["本地部署 🖥️"]
Deployment --> DemoDeploy["演示部署 🎤"]
Deployment --> ServerDeploy["服务器部署 🖧"]
Deployment --> EdgeDeploy["边缘部署 🌐"]
Secure --> PromptEngSecure["提示工程 🔐"]
Secure --> Backdoors["后门 🚪"]
Secure --> Defensive["防御措施 🛡️"]
1. 运行LLM
运行LLM可能非常耗费资源,因为对硬件要求很高。根据你的使用场景,你可以选择通过API调用模型(如GPT-4),或者在本地运行它。无论哪种方式,采用额外的提示和引导技术都可以改善并约束输出,以满足你的应用需求。
深入探索
| 参考 |
描述 |
链接 |
| 使用Nisha Arya的LM Studio在本地运行LLM |
关于如何使用LM Studio在本地运行LLM的简要指南。 |
🔗 |
| DAIR.AI的提示工程指南 |
包含示例的丰富提示技巧列表。 |
🔗 |
| Outlines - 快速入门 |
详细介绍Outlines库支持的引导式生成技术的快速入门指南。 |
🔗 |
| LMQL - 概述 |
对LMQL语言的介绍,解释其功能和用法。 |
🔗 |
2. 构建向量存储
构建向量存储是搭建检索增强生成(RAG)流水线的第一步。这一步骤包括加载和拆分文档,然后利用相关文本块生成向量表示(嵌入),并将这些嵌入存储起来,以供后续推理时使用。
| 类别 |
详情 |
| 文档摄取 |
文档加载器是便捷的封装工具,可处理多种格式,如 PDF、JSON、HTML、Markdown 等。它们还能直接从一些数据库和 API 中获取数据(例如 GitHub、Reddit、Google Drive)。 |
| 文档拆分 |
文本拆分器会将文档分解为更小、语义上更有意义的块。与按固定字符数拆分文本不同,通常建议根据标题或递归方式拆分,并附加一些元数据。 |
| 嵌入模型 |
嵌入模型可以将文本转换为向量表示,从而提供对语言更深入、更细腻的理解,这对于执行语义搜索至关重要。 |
| 向量数据库 |
向量数据库(如 Chroma、Pinecone、Milvus、FAISS、Annoy 等)用于存储嵌入向量,并能基于向量相似性高效地检索数据。 |
深入探索
| 参考 |
描述 |
链接 |
| LangChain - 文本拆分器 |
LangChain 中实现的各种文本拆分器列表。 |
🔗 |
| Sentence Transformers 库 |
一个流行的嵌入模型库。 |
🔗 |
| MTEB 排行榜 |
用于评估嵌入模型的排行榜。 |
🔗 |
| Moez Ali 的“前五名向量数据库” |
对最佳和最受欢迎的向量数据库的比较。 |
🔗 |
3. 检索增强生成
通过 RAG,大语言模型可以从数据库中访问相关文档,从而提高其回答的准确性。这种方法被广泛用于在无需微调的情况下扩展模型的知识库。
| 类别 |
详情 |
| 编排器 |
编排器(如 LangChain、LlamaIndex、FastRAG等)是流行的框架,用于将您的大语言模型与工具、数据库、记忆模块等连接起来,以增强其能力。 |
| 检索器 |
用户指令通常并未针对检索进行优化。可以采用不同的技术(例如多查询检索器、HyDE等)来改写或扩展这些指令,从而提升性能。 |
| 记忆模块 |
为了记住之前的指令和答案,大语言模型及 ChatGPT 等聊天机器人会将这些历史记录添加到上下文窗口中。这一缓冲区可以通过摘要化(例如使用较小的 LLM)、向量存储 + RAG 等方式加以改进。 |
| 评估 |
我们需要同时评估文档检索阶段(上下文的精确性和召回率)以及生成阶段(忠实度和答案的相关性)。可以借助 Ragas 和 DeepEval 等工具来简化评估过程。 |
更深入的探索
| 参考资料 |
描述 |
链接 |
| Llamaindex - 高层次概念 |
构建 RAG 流程时需要了解的主要概念。 |
🔗 |
| Pinecone - 检索增强 |
检索增强流程的概述。 |
🔗 |
| LangChain - 基于 RAG 的问答 |
构建典型 RAG 流程的分步教程。 |
🔗 |
| LangChain - 记忆模块类型 |
不同类型记忆模块及其适用场景的列表。 |
🔗 |
| RAG 流程 - 指标 |
用于评估 RAG 流程的主要指标概述。 |
🔗 |
4. 高级 RAG
现实世界的应用往往需要复杂的流程,这些流程会利用 SQL 或图数据库,并动态选择合适的工具和 API。这些高级方法能够改进基础解决方案,并提供额外的功能。
| 类别 |
详情 |
| 查询构建 |
存储在传统数据库中的结构化数据需要特定的查询语言,如 SQL、Cypher、元数据等。我们可以通过查询构建直接将用户指令转换为查询语句,从而访问数据。 |
| 智能体与工具 |
智能体会通过自动选择最相关的工具来辅助大语言模型给出答案。这些工具既可以是简单的 Google 或 Wikipedia,也可以是更复杂的 Python 解释器或 Jira。 |
| 后处理 |
最后一步对输入到大语言模型的内容进行处理。它通过重新排序、RAG-fusion 以及分类等方式,提升检索文档的相关性和多样性。 |
| 程序化优化大语言模型 |
像 DSPy 这样的框架允许您以编程化的方式,基于自动化评估结果优化提示词和权重。 |
更深入的探索
| 参考资料 |
描述 |
链接 |
| LangChain - 查询构建 |
关于不同类型查询构建的博客文章。 |
🔗 |
| LangChain - SQL |
使用大语言模型与 SQL 数据库交互的教程,包括文本转 SQL 以及可选的 SQL 智能体。 |
🔗 |
| Pinecone - 大语言模型智能体 |
不同类型智能体和工具的介绍。 |
🔗 |
| Lilian Weng 关于大语言模型驱动的自主智能体 |
更具理论性的关于大语言模型智能体的文章。 |
🔗 |
| LangChain - OpenAI 的 RAG |
OpenAI 采用的 RAG 策略概述,包括后处理环节。 |
🔗 |
| DSPy 八步指南 |
介绍 DSPy 模块、签名和优化器的通用指南。 |
🔗 |
5. 推理优化
文本生成是一个计算开销较大的过程,需要强大的硬件支持。除了量化之外,还有多种技术被提出用于提升吞吐量并降低推理成本。
| 类别 |
详情 |
| Flash Attention |
对注意力机制进行优化,将其复杂度从二次方降为线性,从而加速训练和推理过程。 |
| 键值缓存 |
理解键值缓存,以及在 多查询注意力 (MQA) 和 分组查询注意力 (GQA) 中引入的改进。 |
| 推测解码 |
使用小型模型生成草稿,再由大型模型进行校验,以加快文本生成速度。 |
深入探索
| 参考资料 |
描述 |
链接 |
| Hugging Face 的 GPU 推理 |
解释如何在 GPU 上优化推理过程。 |
🔗 |
| Databricks 的 LLM 推理 |
生产环境中优化 LLM 推理的最佳实践。 |
🔗 |
| Hugging Face 的 LLM 速度与内存优化 |
介绍三种主要的优化技术和方法:量化、Flash Attention 以及架构创新。 |
🔗 |
| Hugging Face 的辅助生成 |
HF 版本的推测解码,一篇有趣的博客文章,详细介绍了其工作原理及实现代码。 |
🔗 |
6. 部署 LLM
大规模部署 LLM 是一项复杂的工程任务,可能需要多个 GPU 集群。然而,对于演示和本地应用来说,所需的复杂度则要低得多。
深入探索
| 参考资料 |
描述 |
链接 |
| Streamlit - 构建基础 LLM 应用 |
使用 Streamlit 制作一个类似 ChatGPT 的基础聊天应用的教程。 |
🔗 |
| HF LLM 推理容器 |
使用 Hugging Face 的推理容器在 Amazon SageMaker 上部署 LLM。 |
🔗 |
| Philipp Schmid 的博客 |
收录了大量关于使用 Amazon SageMaker 部署 LLM 的高质量文章。 |
🔗 |
| Hamel Husain 的延迟优化 |
对 TGI、vLLM、CTranslate2 和 mlc 在吞吐量和延迟方面的比较。 |
🔗 |
7. 保障大语言模型的安全
除了软件常见的安全问题外,大语言模型还面临着由其训练和提示方法所引发的独特漏洞。
| 类别 |
详情 |
| 提示攻击 |
与提示工程相关的技术,包括提示注入(添加指令以改变模型的响应)、数据/提示泄露(访问原始数据或提示)以及越狱(设计提示以绕过安全机制)。 |
| 后门 |
针对训练数据本身的攻击向量,例如用虚假信息污染训练数据,或创建后门(在推理过程中触发以改变模型行为的隐藏信号)。 |
| 防御措施 |
保护大语言模型应用需要对其漏洞进行测试(如使用红队演练和 garak 等工具),并在生产环境中对其进行监控(使用 langfuse 等框架)。 |
深入探索
| 参考资料 |
描述 |
链接 |
| OWASP LLM Top 10 by HEGO Wiki |
大语言模型应用中发现的十大关键漏洞列表。 |
🔗 |
| Prompt Injection Primer by Joseph Thacker |
专为工程师准备的关于提示注入技术的简短指南。 |
🔗 |
| LLM Security by @llm_sec |
与大语言模型安全相关的丰富资源列表。 |
🔗 |
| Red teaming LLMs by Microsoft |
关于如何使用大语言模型进行红队评估的指南。 |
🔗 |
深度文章
自然语言处理
| 文章 |
资源 |
| 大语言模型概述 |
🔗 |
| NLP 嵌入 |
🔗 |
| 数据预处理 |
🔗 |
| 抽样 |
🔗 |
| 分词 |
🔗 |
| Transformer 架构 |
🔗 |
| 面试准备 |
🔗 |
模型
训练
| 文章 |
资源 |
| 激活函数 |
🔗 |
| 微调模型 |
🔗 |
| 提升模型压缩:推理与训练优化策略 |
🔗 |
| 模型概览 |
🔗 |
| 数据集拆分 |
🔗 |
| 训练损失 > 验证损失 |
🔗 |
| 参数高效微调 |
🔗 |
| 梯度下降与反向传播 |
🔗 |
| 过拟合与欠拟合 |
🔗 |
| 梯度累积与检查点 |
🔗 |
| Flash Attention |
🔗 |
提升模型压缩:推理与训练优化策略
| 文章 |
资源 |
| 量化 |
🔗 |
| 量化简介 |
🔗 |
| 知识蒸馏 |
🔗 |
| 剪枝 |
🔗 |
| DeepSpeed |
🔗 |
| 分片 |
🔗 |
| 混合精度训练 |
🔗 |
| 推理优化 |
🔗 |
评估指标
| 文章 |
资源 |
| 分类 |
🔗 |
| 回归 |
🔗 |
| 生成式文本模型 |
🔗 |
开放的LLM
| 文章 |
资源 |
| 用于商业用途的开源LLM领域 |
🔗 |
| 用于研究用途的开源LLM领域 |
🔗 |
| LLM训练框架 |
🔗 |
| 语言模型的有效部署策略 |
🔗 |
| 关于LLM的教程 |
🔗 |
| 关于LLM的课程 |
🔗 |
| 部署 |
🔗 |
成本分析与网络可视化资源
| 文章 |
资源 |
| Lambda Labs 与 AWS 成本分析 |
🔗 |
| 神经网络可视化 |
🔗 |
代码库精通:以完美打造
| 标题 |
仓库 |
| 基于指令的数据准备(使用 OpenAI) |
🔗 |
| 使用 Trainer API 进行最优微调:从训练到模型推理 |
🔗 |
| 利用 PEFT 和 LoRA 高效微调及推理大语言模型 |
🔗 |
| 加速大语言模型的高效微调与推理 |
🔗 |
| 使用 T5 进行高效微调 |
🔗 |
| 使用 LoRA 和 Hugging Face 训练大型语言模型 |
🔗 |
| 在 Colab 笔记本中微调您自己的 Llama 2 模型 |
🔗 |
| 基于 LLaMA-7B 模型的 Guanaco 聊天机器人演示 |
🔗 |
| 使用 PEFT 微调 Bloom-560m 标注器 |
🔗 |
| 使用 BNB 和 PEFT 微调 Meta OPT-6-1b 模型 |
🔗 |
| 使用 BNB 自监督训练微调 Falcon-7b |
🔗 |
| 使用 QLoRa 微调 LLaMa2 |
🔗 |
| Stable Vicuna13B 8-bit 版本在 Colab 中运行 |
🔗 |
| GPT-Neo-X-20B 使用 BNB 进行 2 位训练 |
🔗 |
| MPT-Instruct-30B 模型训练 |
🔗 |
| 针对任意模型的自定义数据集进行 RLHF 训练 |
🔗 |
| 在自定义数据集上微调 Microsoft Phi 1.5b(DialogStudio) |
🔗 |
| 微调 OpenAI GPT3.5 Turbo |
🔗 |
| 使用 Autotrain-advanced 微调 Mistral-7b 模型 |
🔗 |
| RAG LangChain 教程 |
🔗 |
| Mistral DPO 训练器 |
🔗 |
| LLM 分片 |
🔗 |
| 将非结构化数据和图谱知识与 Neo4j 和 LangChain 集成,以增强问答能力 |
🔗 |
| vLLM 基准测试 |
🔗 |
| Milvus 向量数据库 |
🔗 |
| 解码策略 |
🔗 |
| PEFT QLoRa 在 SageMaker 上的训练 |
🔗 |
| 优化单个模型的 SageMaker 终端节点 |
🔗 |
| 多适配器推理 |
🔗 |
| Inf2 LLM 的 SageMaker 部署 |
🔗 |
文本分块可视化 进行中 |
🔗 |
| 使用 ORPO 微调 Llama 3 |
🔗 |
| 使用 GPTQ 进行 4 位 LLM 量化 |
🔗 |
| 模型家族树 |
🔗 |
| 使用 MergeKit 创建 MoE 模型 |
🔗 |
| 在 AWS、GCP 或 Azure 上微调 Llama 3.1 |
🔗 |
| 在 AWS、GCP 或 Azure 上微调 Phi 3.5 |
🔗 |
LLM 玩乐实验室
| LLM 项目 |
仓库 |
| CSVQConnect |
🔗 |
| AI_VIRTUAL_ASSISTANT |
🔗 |
| DocuBot多PDF对话助手 |
🔗 |
| autogpt |
🔗 |
| meta_llama_2微调文本生成摘要 |
🔗 |
| 使用Llama进行文本生成 |
🔗 |
| 使用Petal网络的LLM |
🔗 |
| 使用Petal网络的LLM |
🔗 |
| Salesforce-xgen |
🔗 |
| 使用Open Llama 7B进行文本摘要 |
🔗 |
| 使用GPT-J进行文本摘要 |
🔗 |
| codllama |
🔗 |
| 使用LLaVA将图像转为文本 |
🔗 |
| 使用Llamaindex处理表格数据 |
🔗 |
| 下一个词句子预测 |
🔗 |
| 使用DeciLM-7B指令版进行文本生成 |
🔗 |
| Gemini博客创作 |
🔗 |
| 使用Gemini和Sheets制作节日贺卡 |
🔗 |
| 使用phi2 LLM进行代码生成 |
🔗 |
| 使用Gemini的RAG |
🔗 |
| 使用Gemini的多模态RAG餐厅推荐 |
🔗 |
| 简洁情感工具 |
🔗 |
| 使用LLM生成合成数据 |
🔗 |
| 构建聊天助手的架构 |
🔗 |
| 基于查询的动态上下文LLM聊天助手 |
🔗 |
| 使用LLM的文本分类器 |
🔗 |
| 多类别情感分析 |
🔗 |
| 使用GROQ进行文本生成 |
🔗 |
| 数据代理 |
🔗 |
| PandasQuery表格数据 |
🔗 |
| 使用LLM进行探索性数据分析 |
🔗 |
LLM 数据集
大语言模型对齐
对齐是一个新兴的研究领域,旨在确保人工智能系统按照预期的方式运行。具体到大语言模型(LLM),对齐是指通过训练使模型生成的输出与人类价值观和目标保持一致的过程。
目前有哪些大语言模型对齐的方法呢?
研究文献中提出了许多对齐方法,但为了便于讨论,我们仅介绍三种主要方法:
📌 RLHF:
步骤1 & 2:训练一个大语言模型(包括基础模型的预训练以及对话模型的监督/指令微调)。
步骤3:RLHF使用一个辅助语言模型(通常比主模型小得多)来学习人类偏好。这可以通过偏好数据集实现——该数据集包含提示词及由专业标注者评分的回答或一组回答,这一过程称为“奖励模型”的构建。
步骤4:采用强化学习算法(如PPO,即近端策略优化),其中大语言模型作为智能体,而奖励模型则根据其响应与“人类偏好评价”之间的匹配程度给予正面或负面奖励。
理论上,流程就是如此简单。然而实际操作却并不容易,需要大量专家参与和计算资源支持。为了解决RLHF成本高昂的问题,研究人员开发了DPO。
RLHF参考:RLHF:基于人类反馈的强化学习
📌 DPO:
- 步骤1和步骤2保持不变。
- 步骤4:DPO省去了奖励模型的训练环节(即步骤3)。它是如何做到的呢?DPO定义了一个额外的偏好损失函数,直接利用语言模型本身作为奖励模型。其核心思想是:既然已经训练了一个如此强大的大语言模型,为何不让它自己学会区分好与坏的回答,而不是再引入另一个模型呢?
- 研究表明,DPO在计算效率上更高(因为无需持续监控奖励模型的行为),并且在多种场景下表现优于RLHF。
- DPO相关博客:通过直接偏好优化(DPO)对齐大语言模型——背景、概述、直觉及论文总结
📌 ORPO:
- 这是三种方法中最新的,ORPO将步骤2、3和4合并为一步,因此所需的数据集是微调数据集与偏好数据集的结合。
- 监督微调和对齐/偏好优化在一个步骤中完成。这是因为微调虽然能使模型针对特定任务和领域进行专业化,但也可能增加模型产生不良响应的概率。
- ORPO通过引入优势比(OR)项,将这些步骤整合到单一目标函数中,从而奖励偏好评价并惩罚被拒绝的评价。
- ORPO相关博客:ORPO性能超越SFT+DPO | 使用ORPO训练Phi-2
数据生成
数据过滤
| 数据集 |
描述 |
链接 |
| 基于规则的过滤 |
根据黑名单词汇列表移除样本,例如拒绝回答或“作为一名AI助手”等内容 |
🔗 |
| SemHash |
基于蒸馏模型快速生成嵌入向量的模糊去重工具。 |
🔗 |
SFT数据集
| 数据集 |
描述 |
链接 |
| Distilabel |
通用框架,可利用UltraFeedback和DEITA等技术生成和增强数据(SFT、DPO)。 |
🔗 |
| Auto Data |
轻量级库,可通过API模型自动生成微调数据集。 |
🔗 |
| Bonito |
用于生成合成指令微调数据集的工具,无需GPT即可操作(也可参见AutoBonito)。 |
🔗 |
| Augmentoolkit |
利用开源和闭源模型将原始文本转换为数据集的框架。 |
🔗 |
| Magpie |
通过提示对齐的大语言模型,高效生成高质量的合成数据流水线。 |
🔗 |
| Genstruct |
指令生成模型,旨在从原始数据中生成有效指令。 |
🔗 |
| DataDreamer |
用于提示和合成数据生成的Python库。 |
🔗 |
预训练数据集
| 数据集 |
描述 |
链接 |
| llm-swarm |
使用本地大语言模型或Hugging Face Hub上的推理端点生成用于预训练或微调的合成数据集。 |
🔗 |
| Cosmopedia |
Hugging Face用于生成Cosmopedia数据集的代码。 |
🔗 |
| textbook_quality |
一个模仿微软Phi模型方法、用于生成教科书级别质量数据的仓库。 |
🔗 |
数据探索
| 数据集 |
描述 |
链接 |
| sentence-transformers |
用于处理流行语言嵌入模型的Python模块。 |
🔗 |
| Lilac |
用于为大语言模型筛选优质数据的工具,已被NousResearch、Databricks、Cohere和Alignment Lab AI等机构使用,同时具备过滤功能。 |
🔗 |
| Nomic Atlas |
可以交互式地探索指令数据,获取洞察并存储嵌入向量。 |
🔗 |
| text-clustering |
轻松嵌入、聚类并对文本数据进行语义标注。 |
🔗 |
数据抓取
| 数据集 |
描述 |
链接 |
| Trafilatura |
一款Python和命令行工具,用于在网络上收集文本和元数据。曾用于创建RefinedWeb数据集(参见arXiv:2306.01116)。 |
🔗 |
| marker |
能够快速且高精度地将PDF转换为Markdown和JSON格式。 |
🔗 |
了解大语言模型
| 资源 |
链接 |
| Brown, Tom B. “语言模型是少样本学习者。” arXiv预印本arXiv:2005.14165(2020年)。 |
🔗 |
| Kambhampati, Subbarao, 等人。“大语言模型无法进行规划,但在LLM-modulo框架中可以帮助规划。” arXiv预印本arXiv:2402.01817(2024年)。 |
🔗 |
我正在学习的内容
在过去将近一个月的时间里,我沉浸于最近的生成式AI文本语言模型热潮中,针对我在特定任务上的表现,得出了一些观察。
请注意,这些观察是主观的,仅基于我个人的经验,您的结论可能会有所不同。
- 为了获得最佳的自然语言理解性能,我们至少需要70亿参数级别的模型(<7B)。参数量更少的模型会导致性能显著下降。然而,使用超过70亿参数的模型则需要配备24GB以上显存的GPU(>24GB)。
- 基准测试可能比较棘手,因为不同的LLM在不同任务上的表现各有优劣。找到最适合您具体用例的模型至关重要。根据我的经验,MPT-7B仍然比Falcon-7B更胜一筹。
- 每次模型迭代时,提示词都会发生变化。因此,需要多次调整以适应这些变化。虽然有一些潜在的解决方案,但其有效性仍在评估中。
- 进行微调时,至少需要一块24GB以上的GPU(>24GB)。建议使用32GB或40GB显存的GPU。
- 仅对最后几层进行微调以加快LLM的训练或微调速度,可能无法达到满意的效果。我曾尝试过这种方法,但效果并不理想。
- 加载8位或4位模型可以节省显存。对于一个70亿参数的模型,原本需要16GB显存,现在分别只需约10GB或不到6GB。然而,这种显存占用的减少是以推理速度显著降低为代价的。同时,也可能导致文本理解任务的性能下降。
- 那些正在为公司探索LLM应用的人士,应当注意许可方面的考量。以其他模型作为参考并要求原始权重来训练模型,在商业环境中并不推荐。
- LLM主要有三种类型:基础型(如GPT-2/3)、具备聊天功能的以及具备指令执行能力的。大多数情况下,基础模型本身并不具备直接可用性,需要进行微调。聊天版本通常是最佳选择,但它们往往不是开源的。
- 并非所有问题都需要用LLM来解决。不要强行围绕LLM寻找解决方案。就像过去深度强化学习的情况一样,找到最合适的方法才是关键。
- 我尝试过但并未使用langchains和向量数据库。对我来说,它们并不是必需的。简单的Python脚本、嵌入技术和高效的点积运算已经足够满足需求。
- LLM并不需要拥有完整的世界知识。人类也并非无所不知,但我们能够灵活应变。LLM只需要知道如何利用现有的知识即可。或许可以通过分离知识组件来构建更小规模的模型。
- 下一波创新可能会是在回答之前先模拟“思考”,而不是简单地逐字预测下一个词。这种方法有望带来重大突破。
- LLM的过度参数化带来了一个重要挑战:它们往往会记住大量的训练数据。这在RAG场景中尤为突出,当上下文与这些“隐含”知识相冲突时。而当上下文本身包含相互矛盾的信息时,情况会更加复杂。一篇最新的综述论文全面分析了LLM中的“知识冲突”,将其分为三类:
- PPO与DPO的区别在于:在DPO中,不再需要训练奖励模型,只需提供好的和坏的数据即可!
- ORPO:“一种简单而创新的无参考模型单体似然比偏好优化算法ORPO,消除了对额外偏好对齐阶段的需求。” Hong, Lee, Thorne (2024)
- KTO:“KTO不需要偏好——只需要一个二元信号,表明对于给定输入,某个输出是可取的还是不可取的。这使得它在现实世界中更容易使用,因为在现实中偏好数据既稀缺又昂贵。” Ethayarajh et al (2024)
贡献
欢迎贡献!如果您想为这个项目做出贡献,请随时提出问题或提交拉取请求。
许可证
本项目采用MIT许可证。
关于作者
Sunil Ghimire是一位热衷于文学的NLP工程师。他认为,文字和数据是改变世界的两种最强大的工具。
由Sunil Ghimire用心制作
LLM PowerHouse 快速上手指南
LLM PowerHouse 是一个精选的大型语言模型(LLM)资源库,旨在通过教程、最佳实践和即用代码,帮助开发者掌握 LLM 的自定义训练与推理。本指南将协助你快速搭建环境并开始探索。
环境准备
在开始之前,请确保你的开发环境满足以下要求:
- 操作系统: Linux (推荐 Ubuntu 20.04+), macOS, 或 Windows (需 WSL2)。
- Python 版本: Python 3.8 或更高版本 (推荐 3.10+)。
- 硬件要求:
- 基础学习: 任意 CPU 即可运行基础数学和 NLP 概念演示。
- 模型训练/推理: 建议配备 NVIDIA GPU (显存 8GB 以上),并安装对应的 CUDA 驱动。
- 前置依赖:
git: 用于克隆仓库。
pip 或 conda: 用于管理 Python 包。
- (可选) 国内加速: 推荐使用清华源或阿里源加速 Python 包下载。
安装步骤
1. 克隆仓库
首先,将项目代码克隆到本地:
git clone https://github.com/SunilGhimire12/LLM-PowerHouse-A-Curated-Guide-for-Large-Language-Models-with-Custom-Training-and-Inferencing.git
cd LLM-PowerHouse-A-Curated-Guide-for-Large-Language-Models-with-Custom-Training-and-Inferencing
2. 创建虚拟环境
建议使用 conda 或 venv 创建独立的虚拟环境以避免依赖冲突。
使用 Conda:
conda create -n llm-powerhouse python=3.10
conda activate llm-powerhouse
使用 venv:
python -m venv llm-powerhouse
source llm-powerhouse/bin/activate # Windows: llm-powerhouse\Scripts\activate
3. 安装核心依赖
该项目主要作为资源索引和代码示例集合。根据你想运行的具体示例(位于 example_codebase 目录),可能需要安装不同的库。以下是通用的基础数据科学与深度学习栈安装命令:
使用国内镜像源加速安装 (推荐):
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
注意:如果根目录下没有 requirements.txt,请进入具体的示例文件夹安装。例如,对于基于 PyTorch 的神经网络示例:
cd example_codebase/neural_networks
pip install torch torchvision torchaudio numpy pandas matplotlib scikit-learn -i https://pypi.tuna.tsinghua.edu.cn/simple
基本使用
本项目核心在于“按目标学习”。你可以直接运行示例代码或阅读文章来开始。
示例:运行一个简单的多层感知机 (MLP)
根据仓库中的 "Foundations of LLMs" -> "Neural Networks" 部分,我们可以运行一个基础的 MLP 实现。
定位代码:
进入示例代码目录(假设路径如下,具体请以仓库实际结构为准):
cd example_codebase/neural_networks
执行脚本:
运行提供的 Python 脚本来体验神经网络的训练过程:
python mlp_implementation.py
预期输出:
脚本将初始化网络结构,执行前向传播和反向传播,并输出训练损失的变化情况,帮助你直观理解 Backpropagation 和 Optimization。
探索更多资源
- 学习基础理论: 查看
Articles/Foundations 目录下的数学与 NLP 笔记。
- 数据集探索: 访问
dataset 目录获取推荐的 LLM 训练数据集列表。
- 生产级应用: 参考
Articles/Building Production-Ready LLM Applications 学习 RAG 架构与安全部署。
现在,你已经准备好深入探索 LLM PowerHouse 的丰富内容了!