LLM-PowerHouse-A-Curated-Guide-for-Large-Language-Models-with-Custom-Training-and-Inferencing

GitHub
727 121 简单 1 次阅读 昨天MIT图像语言模型开发框架
AI 解读 由 AI 自动生成,仅供参考

LLM-PowerHouse 是一个专为大型语言模型(LLM)定制训练与推理打造的开源指南库。它致力于解决开发者在从理论入门到落地生产全过程中面临的资源分散、实践门槛高以及最佳实践缺失等痛点。通过整合精心策划的教程、行业公认的最佳实践以及开箱即用的代码示例,该项目帮助用户充分释放大模型的潜力。

无论是希望夯实数学与神经网络基础的学习者,还是专注于模型微调、对齐及压缩优化的研究人员,亦或是需要构建包含 RAG(检索增强生成)、部署与安全机制的生产级应用的工程师,都能在此找到针对性的指导。其独特亮点在于结构化的学习路径设计:用户可根据目标快速导航,从底层原理直达可运行的代码库;同时涵盖了从数据集探索、评估指标分析到成本优化策略的深度文章。LLM-PowerHouse 不仅提供了丰富的技术文档,更通过实战案例连接了理论与应用,是构建智能自然语言处理应用的理想资源站。

使用场景

某金融科技公司的算法团队急需构建一个能精准解读复杂信贷条款并生成合规报告的垂直领域大模型,但团队缺乏从数据准备到模型微调的全链路实战经验。

没有 LLM-PowerHouse-A-Curated-Guide-for-Large-Language-Models-with-Custom-Training-and-Inferencing 时

  • 基础理论缺失:团队成员对 Transformer 架构背后的数学原理理解模糊,导致在调整超参数时只能盲目试错,浪费大量算力资源。
  • 数据工程混乱:缺乏高质量的金融领域指令数据集构建指南,清洗后的数据格式不统一,严重影响了模型微调的收敛效果。
  • 部署落地困难:在将模型推向生产环境时,面对量化压缩、推理加速和安全对齐等难题束手无策,项目迟迟无法上线。
  • 代码复用率低:网上教程碎片化严重,找不到经过验证的端到端训练代码,开发人员需重复造轮子,开发周期被大幅拉长。

使用 LLM-PowerHouse-A-Curated-Guide-for-Large-Language-Models-with-Custom-Training-and-Inferencing 后

  • 夯实理论根基:通过"LLM 基础”模块中系统的数学与神经网络教程,团队快速掌握了核心原理,能够科学地制定训练策略。
  • 数据质量飞跃:参考"LLM 数据集”和“数据生成”章节的最佳实践,构建了标准化的金融指令数据集,显著提升了模型的专业度。
  • 生产级交付:利用“构建生产就绪应用”指南中的 RAG 架构、模型压缩及安全对齐方案,顺利解决了部署瓶颈,实现了低延迟上线。
  • 效率大幅提升:直接复用"Codebase Mastery"中经过验证的完整代码库,将原本需要数周的开发工作缩短至几天,专注于业务逻辑优化。

LLM-PowerHouse-A-Curated-Guide-for-Large-Language-Models-with-Custom-Training-and-Inferencing 通过提供从理论基础到生产落地的全栈式指南与代码,帮助团队跨越了技术鸿沟,实现了垂直大模型的高效定制与商业化交付。

运行环境要求

GPU

未说明

内存

未说明

依赖
notes该 README 内容主要是一个关于大语言模型(LLM)的学习指南、教程目录和资源索引,涵盖了数学基础、Python 编程、神经网络原理及 NLP 基础知识。文中并未提供具体的可运行代码库的安装说明、环境配置需求或依赖列表。虽然提到了使用 PyTorch 实现 MLP 作为学习示例,但整个项目本身是一个文档集合而非单一的可安装软件工具,因此无法从中提取具体的操作系统、GPU、内存或 Python 版本等运行环境需求。
python未说明
LLM-PowerHouse-A-Curated-Guide-for-Large-Language-Models-with-Custom-Training-and-Inferencing hero image

快速开始

🗣️ 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 增强现有数据集的方法,并探索生成顶级合成数据的途径,类似于 Orcaphi-1 研究论文中所描述的方法。
数据过滤 采用传统的正则表达式、近似重复项去除以及优先选择具有大量标记的答案等技术来优化数据集。
提示模板 认识到目前尚无明确的标准来规范指令和响应的结构,强调熟悉各种聊天模板的重要性,例如 ChatMLAlpaca

深入探索

参考资料 描述 链接
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-LMgpt-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. 评估 📊

评估大型语言模型往往是整个流程中被忽视的一个环节,其特点是耗时且可靠性一般。您的评估标准应根据下游任务量身定制,同时需牢记古德哈特定律:“当某项指标成为目标时,它就不再是好的指标了。”

概念 描述
传统指标 困惑度和 BLEU 分数等指标虽然因其上下文局限性而如今不太受青睐,但它们对于理解模型及其适用场景仍然至关重要。
通用基准 对于 ChatGPT 等通用大型语言模型而言,主要基准是 Open LLM Leaderboard,该榜单基于 Language Model Evaluation Harness。其他著名的基准还包括 BigBench 和 MT-Bench。
任务特定基准 总结、翻译和问答等任务拥有专门的基准、指标,甚至子领域(如医学、金融),例如用于生物医学问答的 PubMedQA
人工评估 最可靠的评估方法是用户接受率或人机对比指标。此外,借助 LangSmith 等工具记录用户反馈及聊天轨迹,有助于 pinpoint 潜在的改进方向。

进一步评估

参考文献 描述 链接
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. 新趋势 📈

概念 描述
位置嵌入 探讨 LLM 如何编码位置信息,重点关注相对位置编码方案,如 RoPE。通过诸如 YaRN(将注意力矩阵乘以温度因子)或 ALiBi(根据标记距离施加注意力惩罚)等技术扩展上下文长度。
模型合并 模型合并作为一种无需额外微调即可创建高性能模型的方法,近年来日益流行。广泛使用的 mergekit 库集成了多种合并方法,包括 SLERP、DARETIES
专家混合模型 Mixtral 为代表的 MoE 架构的复兴,催生了诸如 frankenMoE 等替代方案,例如社区开发的 Phixtral 等模型,它们提供了经济高效且性能优越的替代选择。
多模态模型 这些模型,如 CLIPStable DiffusionLLaVA 等,能够在统一的嵌入空间中处理多种输入(文本、图像、音频等),从而实现文本到图像生成等多种应用。
glaive-function-calling-v2 高质量数据集,包含不同语言的指令与答案配对。
可参阅 Locutusque/function-calling-chatml,其中不含对话标签。
Agent-FLAN AgentInstruct、ToolBench 和 ShareGPT 数据集的混合。

更多探索

参考资料 描述 链接
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),或者在本地运行它。无论哪种方式,采用额外的提示和引导技术都可以改善并约束输出,以满足你的应用需求。

类别 详情
LLM API API提供了一种便捷的方式来部署LLM。这一领域分为私有LLM(如OpenAIGoogleAnthropicCohere等)和开源LLM(如OpenRouterHugging FaceTogether AI等)。
开源LLM Hugging Face Hub是寻找LLM的绝佳资源。有些可以直接在Hugging Face Spaces中运行,也可以下载后使用LM Studio等应用程序或通过命令行界面借助llama.cppOllama在本地运行。
提示工程 零样本提示、少样本提示、思维链以及ReAct等技术常用于提示工程。这些方法在大型模型上效果更好,但也可以适配到小型模型上。
结构化输出 许多任务要求输出必须符合特定格式,例如严格的模板或JSON。像LMQLOutlinesGuidance这样的库可以帮助引导生成过程,以满足这些结构化要求。

深入探索

参考 描述 链接
使用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)。
文档拆分 文本拆分器会将文档分解为更小、语义上更有意义的块。与按固定字符数拆分文本不同,通常建议根据标题或递归方式拆分,并附加一些元数据。
嵌入模型 嵌入模型可以将文本转换为向量表示,从而提供对语言更深入、更细腻的理解,这对于执行语义搜索至关重要。
向量数据库 向量数据库(如 ChromaPineconeMilvusFAISSAnnoy 等)用于存储嵌入向量,并能基于向量相似性高效地检索数据。

深入探索

参考 描述 链接
LangChain - 文本拆分器 LangChain 中实现的各种文本拆分器列表。 🔗
Sentence Transformers 库 一个流行的嵌入模型库。 🔗
MTEB 排行榜 用于评估嵌入模型的排行榜。 🔗
Moez Ali 的“前五名向量数据库” 对最佳和最受欢迎的向量数据库的比较。 🔗

3. 检索增强生成

通过 RAG,大语言模型可以从数据库中访问相关文档,从而提高其回答的准确性。这种方法被广泛用于在无需微调的情况下扩展模型的知识库。

类别 详情
编排器 编排器(如 LangChainLlamaIndexFastRAG等)是流行的框架,用于将您的大语言模型与工具、数据库、记忆模块等连接起来,以增强其能力。
检索器 用户指令通常并未针对检索进行优化。可以采用不同的技术(例如多查询检索器、HyDE等)来改写或扩展这些指令,从而提升性能。
记忆模块 为了记住之前的指令和答案,大语言模型及 ChatGPT 等聊天机器人会将这些历史记录添加到上下文窗口中。这一缓冲区可以通过摘要化(例如使用较小的 LLM)、向量存储 + RAG 等方式加以改进。
评估 我们需要同时评估文档检索阶段(上下文的精确性和召回率)以及生成阶段(忠实度和答案的相关性)。可以借助 RagasDeepEval 等工具来简化评估过程。

更深入的探索

参考资料 描述 链接
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 集群。然而,对于演示和本地应用来说,所需的复杂度则要低得多。

类别 详情
本地部署 开源 LLM 相较于闭源 LLM 的一个重要优势在于隐私保护。本地 LLM 服务器(如 LM StudioOllamaoobaboogakobold.cpp 等)正是利用这一优势来支持本地应用程序。
演示部署 GradioStreamlit 这样的框架,非常适合快速原型化应用并分享演示。你也可以轻松地将这些应用部署到线上,例如使用 Hugging Face Spaces
服务器部署 大规模部署 LLM 需要云基础设施(参见 SkyPilot)或本地基础设施,并且通常会借助优化的文本生成框架,如 TGIvLLM 等。
边缘部署 在资源受限的环境中,高性能框架如 MLC LLMmnn-llm 能够将 LLM 部署到 Web 浏览器、Android 和 iOS 设备上。

深入探索

参考资料 描述 链接
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 架构 🔗
面试准备 🔗

模型

文章 资源
GPT(生成式预训练变压器) 🔗

训练

文章 资源
激活函数 🔗
微调模型 🔗
提升模型压缩:推理与训练优化策略 🔗
模型概览 🔗
数据集拆分 🔗
训练损失 > 验证损失 🔗
参数高效微调 🔗
梯度下降与反向传播 🔗
过拟合与欠拟合 🔗
梯度累积与检查点 🔗
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 数据集

数据集 数量 作者 日期 备注 类别
Buzz 3120万 Alignment Lab AI 2024年5月 包含435个数据集的庞大集合,采用数据增强、去重等技术。 通用
WebInstructSub 239万 Yue等 2024年5月 通过从Common Crawl中检索文档、提取问答对并进行优化生成的指令数据集。参见MAmmoTH2论文(此为子集)。 通用
Bagel >200万? Jon Durbin 2024年1月 使用余弦相似度去污的数据集集合。 通用
Hercules v4.5 172万 Sebastian Gabarain 2024年4月 包含数学、代码、角色扮演等内容的大规模通用数据集。数据集列表参见v4 通用
Dolphin-2.9 139万 Cognitive Computations 2023年4月 Dolphin模型使用的大型通用数据集。 通用
WildChat-1M 104万 Zhao等 2023年5月 GPT-3.5/4与人类用户之间的真实对话,包含元数据。参见WildChat论文 通用
OpenHermes-2.5 100万 Teknium 2023年11月 OpenHermes模型使用的另一份大规模数据集。 通用
SlimOrca 51.8万 Lian等 2023年9月 使用GPT-4作为评判者,剔除错误答案后精选出的OpenOrca子集。 通用
Tulu V2 Mix 32.6万 Ivison等 2023年11月 高质量数据集的混合。参见Tulu 2论文 通用
UltraInteract SFT 28.9万 Yuan等 2024年4月 专注于数学、编程和逻辑任务,提供分步解答。参见Eurus论文 通用
NeurIPS-LLM-data 20.4万 Jindal等 2023年11月 获得NeurIPS LLM效率挑战赛冠军,采用有趣的预处理策略。 通用
UltraChat 200k 20万 Tunstall等、Ding等 2023年10月 UItraChat数据集进行深度过滤后的版本,由ChatGPT生成的140万条对话组成。 通用
WizardLM_evol_instruct_V2 14.3万 Xu等 2023年6月 将Evol-Instruct最新版本应用于Alpaca和ShareGPT数据。参见WizardLM论文 通用
sft_datablend_v1 12.8万 NVIDIA 2024年1月 混合了公开可用的数据集:OASST、CodeContests、FLAN、T0、Open_Platypus以及GSM8K等共45个数据集。 通用
Synthia-v1.3 11.9万 Migel Tissera 2023年11月 使用GPT-4生成的高质量合成数据。 通用
FuseChat-Mixture 9.5万 Wan等 2024年2月 精选自高质量数据集的样本。参见FuseChat论文 通用
oasst1 8.44万 Köpf等 2023年3月 以35种不同语言编写的、由人类生成的助手风格对话语料库。参见OASST1论文oasst2 通用
WizardLM_evol_instruct_70k 7万 Xu等 2023年4月 将Evol-Instruct应用于Alpaca和ShareGPT数据。参见WizardLM论文 通用
airoboros-3.2 5.87万 Jon Durbin 2023年12月 高质量无审查数据集。 通用
ShareGPT_Vicuna_unfiltered 5.3万 anon823 1489123 2023年3月 ShareGPT数据集的过滤版,包含用户与ChatGPT的真实对话。 通用
lmsys-chat-1m-smortmodelsonly 4.58万 Nebulous、Zheng等 2023年9月 lmsys-chat-1m进行过滤,仅保留GPT-4、GPT-3.5-turbo、Claude-2、Claude-1和Claude-instant-1的回答。 通用
Open-Platypus 2.49万 Lee等 2023年9月 使用Sentence Transformers去重的数据集集合,其中包含NC数据集。参见Platypus论文 通用
databricks-dolly-15k 1.5万 Conover等 2023年5月 由Databricks员工生成的指令类数据,涵盖InstructGPT论文中提到的七类指令。 通用
OpenMathInstruct-1 575万 Toshniwal等 2024年2月 来自GSM8K和MATH的数据集中的问题,由Mixtral-8x7B生成解答。 数学
MetaMathQA 39.5万 Yu等 2023年12月 通过从多个角度改写问题来生成数学问题。参见MetaMath论文 数学
MathInstruct 26.2万 Yue等 2023年9月 汇总了13个数学推理数据集,其中6个是新整理的,重点在于思维链和程序性思维。 数学
Orca-Math 20万 Mitra等 2024年2月 使用GPT4-Turbo生成的小学数学应用题。参见Orca-Math论文 数学
CodeFeedback-Filtered-Instruction 15.7万 Zheng等 2024年2月 Magicoder-OSS-Instruct、ShareGPT(Python)、Magicoder-Evol-Instruct以及Evol-Instruct-Code的过滤版。 编程
Tested-143k-Python-Alpaca 14.3万 Vezora 2024年3月 通过自动测试的高质量Python代码集合。 编程
glaive-code-assistant 13.6万 Glaive.ai 2023年9月 合成数据,包含问题和解答,约60%为Python样本。另请参阅v2版本。 编程
Magicoder-Evol-Instruct-110K 11万 Wei等 2023年11月 evol-codealpaca-v1的去污版本。去污方式与StarCoder相同(参考bigcode去污流程)。参见Magicoder论文 编程
dolphin-coder 10.9万 Eric Hartford 2023年11月 该数据集由leetcode-rosetta转换而来。 编程
synthetic_tex_to_sql 10万 Gretel.ai 2024年4月 合成文本转SQL样本(约2300万token),覆盖多个领域。 编程
sql-create-context 7.86万 b-mc2 2023年4月 清洗并扩充后的WikiSQLSpider数据集。 编程
Magicoder-OSS-Instruct-75K 7.5万 Wei等 2023年11月 gpt-3.5-turbo-1106生成的OSS-Instruct数据集。参见Magicoder论文 编程
Code-Feedback 6.64万 Zheng等 2024年2月 多轮对话和文本与代码交替回复的多样化Code Interpreter类似数据集。参见OpenCodeInterpreter论文 编程
Open-Critic-GPT 5.51万 Vezora 2024年7月 使用本地模型在多种编程语言中创建、引入并识别代码中的缺陷。 编程
self-oss-instruct-sc2-exec-filter-50k 5.07万 Lozhkov等 2024年4月 经过三步生成:从TheStack v1中获取种子函数,使用StarCoder2进行自我指令,最后进行自我验证。参见博客文章 编程
Bluemoon 29万 Squish42 2023年6月 由第三方清理和爬取的Blue Moon角色扮演论坛帖子。 对话与角色扮演
PIPPA 1.68万 Gosling等、kingbri 2023年8月 Pygmalion的PIPPA在ShareGPT格式下的去重版本。 对话与角色扮演
Capybara 1.6万 LDJnr 2023年12月 强调跨领域信息多样性,支持多轮对话。 对话与角色扮演
RPGPT_PublicDomain-alpaca 4260 practical dreamer 2023年5月 使用build-a-dataset制作的角色扮演公共领域人物对话合成数据集。 对话与角色扮演
Pure-Dove 3860 LDJnr 2023年9月 GPT-4与真人之间高度过滤后的多轮对话。 对话与角色扮演
Opus Samantha 1850 macadelicc 2024年4月 与Claude 3 Opus的多轮对话。 对话与角色扮演
LimaRP-augmented 804 lemonilia、grimulkan 2024年1月 LimaRP的增强和清洗版本,包含人类角色扮演对话。 对话与角色扮演
glaive-function-calling-v2 11.3万 Sahil Chaudhary 2023年9月 高质量的指令与答案配对数据集,支持多种语言。
参见Locutusque/function-calling-chatml,该版本不含对话标签。
代理与函数调用
xlam-function-calling-60k 6万 Salesforce 2024年6月 通过专为函数调用应用设计的数据生成流水线创建的样本。 代理与函数调用
Agent-FLAN 3.44万 internlm 2024年3月 AgentInstruct、ToolBench和ShareGPT数据集的混合。 代理与函数调用

大语言模型对齐

对齐是一个新兴的研究领域,旨在确保人工智能系统按照预期的方式运行。具体到大语言模型(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中的“知识冲突”,将其分为三类:
    • 上下文-记忆冲突:当外部上下文与LLM的内部知识相矛盾时产生。

      • 解决方案:
        • 在反事实上下文中进行微调,以优先考虑外部信息。
        • 使用专门的提示词来强化对上下文的遵循。
        • 应用解码技术,放大上下文的概率。
        • 在跨文档的多样化上下文中进行预训练。
    • 上下文间冲突:多个外部来源之间的矛盾。

      • 解决方案:
        • 使用专门的模型来检测矛盾。
        • 结合外部工具的事实核查框架。
        • 微调判别器以识别可靠来源。
        • 从增强查询中聚合高置信度的答案。
    • 内部记忆冲突:由于内部知识相互矛盾,LLM对相似输入给出不一致的输出。

      • 解决方案:
        • 使用一致性损失函数进行微调。
        • 实施插件方法,重新训练词汇定义。
        • 将一个模型的输出与另一个模型的一致性评分相结合。
        • 应用对比解码,专注于真实的层或头。
  • PPO与DPO的区别在于:在DPO中,不再需要训练奖励模型,只需提供好的和坏的数据即可!
  • ORPO:“一种简单而创新的无参考模型单体似然比偏好优化算法ORPO,消除了对额外偏好对齐阶段的需求。” Hong, Lee, Thorne (2024)
  • KTO:“KTO不需要偏好——只需要一个二元信号,表明对于给定输入,某个输出是可取的还是不可取的。这使得它在现实世界中更容易使用,因为在现实中偏好数据既稀缺又昂贵。” Ethayarajh et al (2024)

贡献

欢迎贡献!如果您想为这个项目做出贡献,请随时提出问题或提交拉取请求。

许可证

本项目采用MIT许可证

关于作者

Sunil Ghimire是一位热衷于文学的NLP工程师。他认为,文字和数据是改变世界的两种最强大的工具。


Star History Chart

Sunil Ghimire用心制作

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|5天前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|5天前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

150k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|今天
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|昨天
插件Agent图像

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|4天前
插件开发框架