欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 公开课 | 2024清华大模型公开课 第8课 大模型实战指导

公开课 | 2024清华大模型公开课 第8课 大模型实战指导

2024/10/23 19:54:51 来源:https://blog.csdn.net/ys707663989/article/details/143097463  浏览:    关键词:公开课 | 2024清华大模型公开课 第8课 大模型实战指导

本文由readlecture.cn转录总结专注于音、视频转录与总结,2小时视频,5分钟阅读,加速内容学习与传播。

大纲

  • 介绍

    • 个人背景

      • 首席科学官和Hugging Face联合创始人

      • 创建Transformers和Datasets库

      • 从开源转向开放科学

      • 著作《Natural Language Processing with Transformers》

    • Hugging Face概述

      • 开源平台

      • 模型和数据集的托管

      • 用户和组织的使用情况

      • 提供的开源库和工具

  • 构建大型语言模型(LLM)的现状

    • 数据准备

      • 数据的重要性

      • 数据准备的步骤

        • 语言过滤

        • 质量过滤

        • 去重

        • 数据洗牌和分词

      • 数据质量评估

    • 模型训练

      • 训练流程

        • 数据准备

        • 高效训练技术

        • 评估

        • 微调

        • 部署

      • 训练技术和工具

        • Datatrove

        • Nanotron

        • LightEval

        • TRL

        • Text Generation Inference

    • 模型架构和并行化

      • 模型架构

        • 混合专家系统(MoE)

        • Mamba(非Transformer架构)

      • 并行化技术

        • 数据并行

        • 张量并行

        • 流水线并行

        • 序列并行

    • 模型部署和推理

      • 量化

      • 推理优化

      • 模型共享和评估

  • 结论

    • 总结和未来展望

内容总结

一句话总结

本文详细介绍了2024年构建大型语言模型的现状,包括数据准备、模型训练、架构设计、并行化技术以及模型部署和推理的最新进展。

观点与结论

  • 开源模型在成本和透明度方面具有优势,但性能通常低于闭源模型。

  • 数据质量对模型性能至关重要,需要仔细准备和评估。

  • 并行化技术是提高模型训练效率的关键,包括数据并行、张量并行、流水线并行和序列并行。

  • 模型部署时需要考虑量化和推理优化,以提高效率和降低成本。

  • 开放科学和共享模型是推动AI领域发展的重要途径。

自问自答

  1. 问:Hugging Face的主要功能是什么?

    • 答:Hugging Face是一个开源平台,主要用于托管模型和数据集,提供各种开源库和工具,支持模型开发、部署和研究。

  2. 问:为什么数据准备对大型语言模型如此重要?

    • 答:数据质量直接影响模型性能,因此需要仔细准备和评估数据,包括语言过滤、质量过滤、去重和分词等步骤。

  3. 问:有哪些并行化技术可以提高模型训练效率?

    • 答:常用的并行化技术包括数据并行、张量并行、流水线并行和序列并行,这些技术可以有效提高训练效率和利用GPU资源。

  4. 问:模型部署时需要考虑哪些因素?

    • 答:模型部署时需要考虑量化、推理优化和模型共享,以提高效率、降低成本并促进模型的广泛应用。

  5. 问:开放科学在AI领域中的作用是什么?

    • 答:开放科学通过共享方法和知识,促进AI领域的透明度和合作,有助于推动整个领域的发展和进步。

关键词标签

  • 大型语言模型

  • 数据准备

  • 模型训练

  • 并行化技术

  • 模型部署

  • 开源平台

  • 开放科学

适合阅读人群

  • AI研究人员

  • 数据科学家

  • 软件工程师

  • 技术爱好者

  • 学术界人士

术语解释

  • 开源模型:指源代码公开可用的模型,用户可以自由修改和分发。

  • 闭源模型:指源代码不公开的模型,用户无法访问其内部实现。

  • 并行化技术:指在多个计算资源上同时执行任务的技术,以提高效率和性能。

  • 量化:指将模型参数从高精度转换为低精度的过程,以减少模型大小和提高推理速度。

  • 混合专家系统(MoE):一种模型架构,通过路由机制将输入分配给不同的专家网络。

  • Mamba:一种非Transformer的模型架构,具有更快的推理速度。

  • Flash Attention:一种高效的注意力计算方法,避免生成完整的注意力矩阵。

  • Direct Preference Optimization (DPO):一种简化的人类反馈强化学习方法,减少模型复杂性。

视频来源

bilibili: Lecture 8 大模型实战指导_哔哩哔哩_bilibili

讲座回顾

  • 演示文稿内容:总结2024年构建大型语言模型的现状。

  • 内容涵盖:当前位置、地位及公开了解的信息。

  • 贡献团队:中国团队和清华大学团队。

  • 目的:尽管观点可能不新鲜,但汇集信息仍具趣味性。

这是几周前我准备的一个演示文稿,总结了2024年构建大型语言模型的现状,包括我们目前的位置、我们的地位以及我们所公开了解的内容。这个演示文稿有很大一部分是由中国团队和清华大学团队贡献的。祝贺他们,尽管其中许多观点对你们中的一些人来说可能并不新鲜,但将它们汇集在一起或许仍然颇具趣味。

  • 作者是Hugging Face的首席科学官兼联合创始人。

  • 创建了Transformers和Datasets库。

  • 从开源转向开放科学,关注AI领域的方法论和知识分享。

  • 观察到AI研究变得更为封闭,对此表示遗憾。

  • 撰写了《基于Transformers的自然语言处理》一书,但承认可能存在个人偏见。

在某个角落,我想简单介绍一下自己。我是Hugging Face的首席科学官兼联合创始人。我在Hugging Face创建了Transformers和Datasets库。最近,我逐渐从开源转向更专注于开放科学,旨在分享人工智能领域的方法论和知识。这一转变的部分原因在于,我注意到与过去相比,现在的AI研究似乎变得更加封闭,我认为这颇为遗憾。此外,我还撰写了一本名为《基于Transformers的自然语言处理》的书籍。不过,我得承认,由于是我自己写的,我可能会有所偏颇。

我写了这篇文章,不过确实,今天天气很好。所以我会快速介绍一下什么是 Hugging Face,然后。2024年如何构建大型语言模型?

  • Hugging Face 是一个基于开源理念的平台。

  • 开源模型与闭源模型在安全性、成本和性能方面有显著差异。

  • 开源模型提供更高的透明度和控制权,允许用户进行定制和微调。

  • 开源模型成本较低,延迟小,但性能通常低于闭源模型。

  • 开源模型正在迅速改进,一些中国模型如 Yiyi、DeepSeek 和 MiniCPM 正在追赶闭源模型。

那么,Hugging Face 是什么?Hugging Face 是一个围绕开源理念构建的平台。在这里,我将简要讨论开源模型与闭源模型之间的区别。我承认自己对开源模型有些偏爱,但在使用闭源模型时也有许多有趣之处值得考虑。

在安全性方面,你可以将模型托管在自己的数据中心或笔记本电脑上。将模型保存在本地设备(如笔记本电脑)上是有益的。你对开源模型有更大的控制权,因为它们类似于开源代码,就像一个开放的盒子。你可以进行定制、微调和修改部分内容。开源模型更加透明,让你能看到用于创建模型的数据和代码。有时,你只能访问模型的权重,这透明度较低,但总体而言,开源模型提供了更多的透明度。你可以理解模型及其支持其功能的相关系统。

在成本方面,开源模型相当经济实惠。你经常能在开源项目中找到较小的模型,如果在自己的笔记本电脑上运行,成本非常低。延迟可以非常低,特别是如果你在本地运行模型或模型本身较小。目前,开源模型的质量是限制因素,因为它们的性能通常低于闭源模型。然而,开源模型在最近几个月和几年里迅速改进。一些令人印象深刻的中国模型,如 Yi、DeepSeek 和 MiniCPM,正在与闭源模型强势追赶。在2024年,使用开源模型是令人兴奋的。

  • Hugging Face 是一个托管模型数据集和演示的平台。

  • 平台目前拥有接近100万个模型,数量以指数级增长。

  • 平台拥有超过10万个数据集,数据集数量大约在200万到400万之间。

所以,Hugging Face 是一个托管模型数据集和演示的平台。我们拥有大量的模型,实际上,这个说法已经有点过时了,因为我们现在接近拥有100万个模型。这个数字正在以指数级增长。我们拥有超过10万个数据集,大约在200万到400万之间。

用户几乎无处不在,至少在众多组织中都能见到他们的身影,我们通常将他们视为介于各大组织之间的独立第三方。

  • 该组织专注于人工智能领域,提供多种开源库。

  • 这些开源库支持模型开发和部署的全过程。

  • 具体库如Transformers和Accelerate,以及相关数据集,用于模型构建、应用和研究。

  • 开发后的模型可用于推理部署。

该组织在人工智能领域运作,提供众多开源库,这些库可在模型开发和部署的全过程中集成使用。例如,像Transformers和Accelerate这样的库,以及相关数据集,可供构建模型、应用模型或进行研究之用。随后,这些模型可用于推理目的的部署。

  • 开源生态系统最初由两个库发起。

  • 开发了多个其他库,包括Gradio、SafeTensors和Transformers.js等。

  • Gradio用于快速创建模型演示。

  • SafeTensors提供安全的模型存储方式,避免pickle的风险。

  • Transformers.js是JavaScript版本的库。

我们拥有一个庞大的开源生态系统,最初由这两个库发起。随后,我们开发了许多其他库。例如,Gradio非常适合快速创建演示来展示模型。SafeTensors提供了一种安全的方法来存储模型,因为pickle存在相当大的风险。Transformers.js是JavaScript版本,我们还有许多其他库。

它们中的大多数都得到了广泛应用。接下来,我要谈谈Hugging Face。现在让我来详细介绍一下。

  • 数据准备:使用Datatrove库进行。

  • 训练技术:采用Nanotron库以提高效率。

  • 性能评估:通过LightEval库完成。

  • 微调:使用RLHF方法和TRL库进行,以适应特定用途如聊天机器人。

  • 模型部署:包括量化(使用bits和bytes工具)和生产环境部署(由Text Generation Inference库支持)。

大型语言模型需要一个结构化的工作流程。这一过程始于使用名为Datatrove的库进行数据准备。高效的训练技术至关重要,为此我们采用了一个名为Nanotron的库。评估是衡量性能的关键环节,这由LightEval辅助完成。为了使模型适应特定用途,如聊天机器人,通常需要进行微调,这一般通过一种称为RLHF的方法实现,利用名为TRL的库。训练和微调之后,模型需要部署。这包括使用bits和bytes等工具进行量化,以减小尺寸并提高速度。在生产环境中部署是最后一步,由名为Text Generation Inference的库支持。

  • 能源消耗问题:大型语言模型(LLM)的制造和使用消耗大量能源,与当前的气候变化和能源限制背景相冲突。

  • 使用LLM的必要性:在决定是否使用LLM时,应考虑是否有必要从头开始预训练,或从现有的预训练模型开始并进行微调。

  • 选择和优化模型:建议选择计算效率高的模型,如7B或3B模型,并在能源组合良好的环境中部署。

  • 预训练和部署策略:如果需要预训练LLM,应考虑模型的整个生命周期,特别是在大规模生产部署时,可能需要训练更小的模型并延长训练时间以降低成本。

这对于生产使用的规模来说非常有用。关于碳足迹和大型语言模型(LLM),这有点不幸,因为今天我可以说,出于气候变化的原因,我们正在耗尽某些类型的能源供应,因此有一些兴趣限制我们使用的能源,使其更加合理。LLM确实需要大量的能源来制造和使用。因此,有一个问题是,如果你在做某件事,你真的需要一个LLM吗?这是一个需要了解的流程图。我认为,如果你有一个具体的任务,你应该真正问自己,我是否需要先预训练一个LLM?大多数情况下,你可以从一个已经由其他人创建的预训练LLM开始,这就是为什么我们在平台上有很多开源模型,你可以对这个LLM进行微调。所以很可能,我今天讨论的内容,解释了如何从头开始构建这个LLM,有点超出了你需要做的事情,然后当你进行微调时,你可能会想要选择一个计算效率高的模型,如果可能的话。因此,通常情况下,你可以尝试找到最适合你的最小的LLM,例如,现在有很多高质量的7B模型甚至3B模型,你可以从这个开始,你可以对其进行量化,你也可以在一个有良好能源组合的环境中部署它。现在,如果你需要预训练一个LLM,例如,假设你只有英语模型,那么你需要预训练一个,然后很高兴能稍微考虑一下LLM的整个生命周期。因此,特别是如果你认为你将在生产中大规模部署它,你可能想要训练一个比可能的最低损失的最优大小模型更小的模型,并训练更长时间。所以通常情况下,现在人们倾向于训练比几个月前更小的模型,并且训练时间更长,以便达到相同的性能,但在推理部署时,成本要低得多。

所以,虽然笔记很多,但现在让我们深入探讨如何准备数据。

  • 数据在深度学习和大型语言模型中的重要性常被忽视。

  • 模型性能不佳往往是因为输入数据不正确。

  • 专家强调所有行为源自数据,模型并无魔法。

  • 专注于数据是提升模型性能的正确方法。

准备好的数据。这里有一个重要方面,我们往往忽视数据,因为它比起模型来说不那么激动人心,对吧?我们都喜欢思考如何安排这些层,如何加入层归一化,以及深度学习的各种技巧,但事实是,这一切并非凭空而来。我提到的引用,上面一条来自Anthropic的Amanda,下面一条来自OpenAI的某人。可以说,他们都是该领域的专家。他们都强调,所有行为都源自数据。因此,如果你的模型表现不如预期,那只是因为你没有输入正确的数据。这些模型并没有真正的魔法,尽管我们倾向于这样认为。实际上,它们并不神奇。因此,专注于数据通常是深入学习和大型语言模型的正确方法。这是一段不错的视频。

  • 富人们每年讨论如何拯救地球,涉及税收等议题。

  • 讨论与大型语言模型(LLM)的语境相似。

  • 数据是应关注的核心议题,但很少被讨论。

  • 讨论内容与实际重要议题之间存在鸿沟。

你可能听不到这个声音,但每年富人们都会热烈讨论如何拯救地球。有人提到,我们需要考虑税收和其他鲜少触及的方面。这与大型语言模型(LLM)的语境有些相似。有一个我们很少讨论的话题,那就是数据。实际上,数据才是我们真正应该关注的核心议题。令人惊讶的是,我们谈论的内容与真正重要的事之间存在着巨大的鸿沟。

  • 01.AI的开源基础模型Yi具有先进能力。

  • 基本假设:在高质量大数据集上训练的标准架构能展现先进能力。

现在,让我们深入探讨这些重要方面。确实,这是来自01.AI优秀开源基础模型Yi的一个值得注意的引用。他们还声称,基本假设是,当在一个质量足够高的大量数据集上训练时,一个标准架构能够展现出先进的能力。

  • 提到了一系列最近的论文,这些论文质量不错。

  • 特别提到了来自Hugging Face的最新论文“FineWeb”,是“RefineWeb”的进一步发展。

  • 建议可以通过谷歌搜索获取更多信息。

  • 论文是几周前刚刚发表的。

它的先进功能。那么现在,你如何准备你的数据呢?这里有一系列最近的论文,如果你想阅读的话。它们都非常不错。我可以再加上一篇来自Hugging Face的最新论文,即FineWeb论文。它是RefineWeb的进一步发展。你可以谷歌搜索一下。我可以添加进来。我们几周前刚刚发表了它。这也是一篇不错的报告。

如何处理这些数据。在大型语言模型(LLM)训练过程中,你将经历几个阶段。包括预训练阶段、指令调优阶段或对齐阶段。如果你愿意,可以进行更具体的上下文学习或不同的微调阶段。

  • 预训练阶段的目标是训练一个具有广泛覆盖范围的通用型模型。

  • 训练数据量巨大,至少需要一万亿个词元,目标更高,如十万亿个词元。

  • 面临的挑战包括:最大化数据多样性和覆盖范围,防止模型创造新行为,以及提高数据质量。

  • 在大量数据中衡量数据质量非常困难。

对于每个阶段,你确实会希望另一种类型的数据。因此,我将重点放在预训练阶段。在这里,目标是训练一个具有最大覆盖范围的通用型模型。这包括在大量文本上进行训练,如今至少需要一万亿个词元,目标是更多,比如达到十万亿个词元。面临的挑战包括最大化多样性和覆盖范围,确保模型不会创造新行为,以及最大化数据质量。衡量数据质量也至关重要,这在数十亿或数万亿个词元的情况下极其困难。

  • 数据集规模大,质量难以确定。

  • 预训练数据清洗流程包括:

    • 收集原始数据

    • 语言过滤

    • 剔除低质量数据

    • 去重处理

    • 主题特定过滤

由于数据集规模庞大,其质量难以确定。以下是一条典型的预训练数据清洗流程,源自Yi,被视为相当标准。该流程包括收集原始数据、进行语言过滤,并实施一系列步骤以剔除质量较低的数据、执行去重处理,并可能包含主题特定的过滤,以突出所需方面。

  • 数据集准备过程中使用了RefineWeb的例子。

  • 数据来源为互联网数据,特别是Common Crawl。

  • 仅保留所需语言(如英语),导致约一半数据被移除。

  • 应用了一系列过滤器来进一步处理数据。

在准备您的数据集时,这里有一个额外的例子。这个例子来自RefineWeb,它处于类似阶段。您从互联网数据开始,特别是Common Crawl。您只保留所需的语言,比如英语,这导致大约一半的Common Crawl数据集被移除。接下来,您应用一系列过滤器。

随后出现重复。

  • 数据源需求:需要庞大的数据源,目标是获取整个互联网的副本。

  • 常用工具:英语数据常用Common Crawl,其他语言可能需其他爬虫或自行爬取。

  • 代码仓库:常用GitHub和Software Heritage,后者类似Common Crawl,负责爬取和存档代码。

  • 精选数据:包括维基百科和书籍,但需注意版权问题。

  • 数据趋势:近期趋势包括使用合成数据,即自行生成的数据。

另一个例子,我们从哪里开始呢?首先,你需要一个非常庞大的数据源。本质上,你的目标是获取整个互联网的副本。对于英语,我们通常使用Common Crawl,这是一个由美国非营利组织运营的服务。对于其他语言,可能需要使用其他爬虫或自行爬取。对于代码,这是一个重要的部分,有几个大型仓库。一个是GitHub,另一个是Software Heritage,类似于Common Crawl,这是一个非营利组织,负责从网络上爬取和存档代码。你还可以包括经过精心挑选的数据,如维基百科或书籍,尽管某些书籍会涉及版权问题。维基百科虽然可以在线获取,但它也是Common Crawl的一部分。如果你手动添加它,实际上是在对其进行上采样。最近一个有趣的趋势是包含合成数据,即由你自己生成的数据。

  • Hugging Face团队创建了名为Cosmopedia的合成数据集。

  • 计划在下星期发布Cosmopedia的第二个版本。

  • 合成数据的优势包括精确控制内容。

  • 通过合成数据生成了高质量数据集,如Ultrachat。

  • 当前大型语言模型(LLMs)对这些数据集的表现良好。

在我们于Hugging Face的工作中,我们创建了一个名为Cosmopedia的合成数据集。我们计划在下星期发布Cosmopedia的第二个版本。合成数据的优势在于能够精确控制其内容。这使得我们能够创造出提示并生成高质量的数据集,例如完全由合成生成的Ultrachat。鉴于当前大型语言模型(LLMs)的表现,这些数据集的质量相当高。

你好。在这里你可以看到数据集中的一些内容。

对于代码数据,如果你想从预处理过的材料开始,我们也发布了一个名为“The Stack”的大型数据集。第二版确实非常庞大,包含近一万亿个token,涵盖了众多编程语言。它源自软件遗产档案库。

来自软件遗产档案库。具体是哪些数据?你应该查看FineWeb。

博客文章将在最后发布。现在,让我们讨论一下处理流程的步骤。第一步是语言过滤,因为你不想在不必要的语言上浪费精力。FastText 是一个合适的选择,这也是我们使用的工具。

  • 质量过滤方法包括统计分析和启发式方法。

  • 统计分析实例:统计字符重复次数、计算字符与换行符比例、确定行平均长度、移除异常值。

  • 启发式方法实例:基于换行符数量异常移除文档。

我们通常采用质量过滤,这主要包括两种主要类型:数据的统计分析和启发式方法。例如,我们会统计字符的重复次数,计算文档中字符与换行符的比例,确定行平均长度,并从数据集中移除异常值。使用启发式统计方法的优势在于,你能清楚地知道你在移除什么。比如,你可能会因为某文档的换行符数量远超正常比例而将其移除。

该系统表现出良好的透明度和低偏差,但其主要问题在于过度依赖表面分析。这意味着它并未深入探究所处理内容的语义或含义,而是仅关注其外在表现。因此,它有时可能会删除过多或过少的信息。

  • 机器学习过滤是一种与传统方法不同的过滤技术。

  • 需要收集好坏文档样本以训练分类器。

  • 分类器可以是fastText或小型语言模型,使用困惑度作为衡量标准。

  • 设定阈值以进行内容层面的过滤。

  • 优势:能够进行基于质量和语义的深入过滤,如专门设计广告过滤器。

  • 缺点:可能引入样本偏见,且分类器操作具有一定的不确定性。

另一种过滤方法是机器学习过滤,这是第二种方法,与前述方法截然不同。首先,你需要收集一组好坏文档的样本,然后利用这些样本来训练一个分类器。这个分类器可以是fastText分类器,也可以是一个小型语言模型,其中困惑度被用作衡量标准。根据这一标准设定一个阈值。这种方法的优势在于它能够进行更基于质量和内容层面的过滤,深入考察数据的语义。例如,如果你想过滤掉广告,你可以专门设计一个针对广告的过滤器。然而,这种方法的缺点在于它可能会根据提供的样本来引入偏见,并且它在某种程度上是一个黑箱操作;你知道分类器的训练依据,但具体的结果可能存在不确定性。

  • 数据过滤的重要性:在理解分类器决策时,数据过滤是关键步骤。

  • 人工检查的必要性:特定领域(如数学数据)需要人工检查,以避免过滤掉重要元素(如LaTeX或数学方程)。

  • 自定义规则的应用:许多领域需要实施自定义规则,并进行人工检查。

  • 审查流程:从每个领域抽取10份文档进行审查,并人工检查每个过滤器的结果。

  • 去重的必要性:过滤后,进行去重处理。

当你希望理解分类器做出的决策时,考虑数据过滤至关重要。一个重要方面是某些领域应进行人工检查。例如,如果你处理的是数学数据,有一个著名的数据集叫做OpenMath。确保不无意中过滤掉LaTeX或数学方程等元素至关重要。对于许多领域,你需要实施自定义规则,并可能需要人工检查结果。通常,我们会从每个领域抽取10份文档,审查它们的处理方式,并人工检查每个过滤器的结果。你也应遵循这一流程。过滤后,去重是必要的。

  • 网络上的页面副本可能提升某些区域的权重。

  • 内容如维基百科或知识库的副本可能有益。

  • JavaScript模板或广告页面的副本则不利,因为它们对模型无益。

如果你有多种语言,推理是这样的:在网络上,一个页面的多个副本会人为地提升某些区域的权重。如果这些副本是像维基百科或知识库这样的内容,那可能是有益的。然而,如果它们是JavaScript模板或广告页面的副本,那就相当不利了,因为尽管我们希望频繁生成这类内容,但它们对模型并无益处。

  • 去重方法包括模糊去重(如MinHash结合BLOOM过滤器)和精确去重(如后缀数组)。

  • MinHash在速度和内存使用上提供了良好的平衡,被广泛使用。

  • 处理大规模数据时,去重可能导致显著的内存需求。

  • 去重应适度,避免过度去重,保留一定数量的文档副本是可接受的。

你有几种去重方法。可以采用更模糊的方式,比如在MinHash上使用BLOOM过滤器。MinHash是我们广泛使用的工具。或者,也可以进行精确去重,使用诸如后缀数组的精确子串技术。在速度和内存方面存在许多权衡,尤其是在处理十亿级token规模的去重时,可能会导致显著的内存需求。通常,MinHash在速度和内存之间提供了良好的平衡,这就是我们使用它的原因。去重有一些反直觉的方面。如果你阅读我们的博客文章,你会发现许多关于这方面的故事。本质上,存在一个可以停止去重的点。不需要走极端。建议移除包含数千份相同文档的大型集群。然而,保留10或20份文档副本,比如维基百科页面或引用,是可以接受的。不应过度去重。

  • 打乱数据顺序在机器学习中是重要但常被忽视的步骤。

  • 即使是专家如 Andrej Karpathy 也可能忘记打乱数据。

  • 分词处理复杂,需从数据集中广泛采样以防过度拟合。

  • GPT-2 的分词器在 Reddit 数据上因用户账户名称而过度拟合。

  • 处理数学内容时,需确保数字被适当处理。

既然你已经完成了数据的准备工作,那么打乱数据顺序至关重要。这是机器学习中的常见做法,却常常被忽视。即便是像 Andrej Karpathy 这样的专家也可能忘记这一步,正如我们最近所经历的那样。因此,请务必记得打乱你的数据。接下来,你需要对数据进行分词处理。分词可能比较复杂,因为有多种选项可供选择。然而,一些普遍的良好实践包括从数据集中广泛采样,以防止过度拟合到某个小部分。例如,GPT-2 的分词器在 Reddit 数据上过度拟合,其中包含许多用户账户名称,这是不理想的。此外,在处理数学内容时要小心谨慎,确保数字要么被拆分,要么手动添加。

  • 数字处理:需要手动插入分词器以确保数字的公平处理。

  • 代码模型处理:需注意缩进和空格的处理。

  • 分词器挑战:许多语言的单词边界不明确,确保分词过程公平至关重要。

  • Andres Carpati的视频:提供了关于分词器及其潜在陷阱的有益信息。

  • 分词方法

    • 动态分词:在训练期间进行,允许分词器变化,但确定停止点具有挑战性。

    • 预先分词:可以进行数据分割和并行处理。

你可能需要将数字分开,或手动将其插入分词器,以确保所有数字都得到公平处理。对于代码模型,你必须小心处理缩进和空格。此外,根据语言的不同,许多分词器是基于单词概念构建的,但在许多语言中,单词边界并不明确。因此,确保你的分词过程公平至关重要。Andres Carpati有一个关于分词器及其潜在陷阱的有益视频。处理数万亿个token时,分词可能会消耗大量时间。主要有两种方法:在训练期间进行动态分词,这允许分词器的变化,但在重新开始训练时确定确切的停止点具有挑战性。另一种方法是预先进行分词,这样可以进行数据分割和并行处理。

  • 评估大规模数据集的数据质量具有挑战性,人工检查效果有限。

  • OpenBMB的论文提出使用高信号基准来评估数据质量。

  • 选择高信号基准时应考虑单调递增性和低方差。

  • 根据模型大小,有不同的方法构建和评估模型表现。

  • Allen的论文《Elements》提供了相关方法的参考。

现在,关键问题在于,你如何评估你的数据质量?这相当具有挑战性,因为在如此大规模的数据集上,人工检查只能提供非常有限的数据视角。目前人们正在做的是,今年有一篇论文发表了,特别是OpenBMB的论文,他们使用了一系列高信号基准。所以我在这里列出了一组针对英语的高信号基准,但如果你也有多语言数据,你会希望将其扩展一些。我还稍微指出了如何选择高信号基准。你希望在训练过程中它是单调递增的,你希望方差低,这样你可以依赖你的信号。还有一些棘手的细节。你有几种方式来构建你的形式并评估你的表现,这取决于你的模型是小还是大。最近,Allen有一篇很好的论文叫做《Elements》。

  • 人工数据检查的重要性:手动审查数据能提供意外的洞见,不应被忽视。

  • 手动检查的实用性:即使在大量文档中,手动检查几页也能有效执行。

  • 数据检查方法:通过分词训练检查最常见、最不常见及最长的词汇,以识别异常词汇和潜在的异常情况。

深入挖掘数据的AI固然重要,但我依然坚信人工数据检查至关重要。手动审查数据常常能带来意想不到的洞见。因此,切勿忽视这一步骤。即便在大量文档中手动检查几页看似有些不合常规,但这种方法却能有效执行。一种有趣的检查数据方法是对数据进行分词训练,然后检查最常见、最不常见以及最长的词汇,以此识别任何异常词汇,进而发现数据中潜在的异常情况。

我们有一个数据处理库,你可以查看一下,还有一个评估库叫做lighteval,你也可以了解一下。这两个库都是为此目的而设计的。

现在我们来简要探讨一下建模。

  • 训练大型语言模型时需关注的关键参数主要涉及训练效率。

  • 高效利用GPU或加速器,避免闲置。

  • 需要高效的关注机制和稳定的训练方法。

  • 新探索包括“专家混合”技术和Mamba架构。

可以说,近期人们在模型中采用的技术颇具看点。在训练大型语言模型时,有一系列关键参数需要留意。这些参数大多与如何高效训练有关。你希望并行处理数据,高效利用GPU或加速器,避免它们因等待CPU调用而闲置。同时,你还需要一种高效的关注机制和一些稳定的训练方法。最近,一些新的探索也颇具启发性。其中,一个非常有趣的方法是“专家混合”技术。另一个引人注目的则是Mamba,这是一种非Transformer架构。看到一种全新的架构,确实令人兴奋。

在建筑领域,我将简要探讨并行化的各种方法。基本上有四种方法,被称为4D并行化。最常用的方法是数据并行化,相对简单直接。张量并行化稍显复杂,其次是流水线并行化,更为精细。序列并行化则是一种较新的方法。

  • 数据并行通过复制模型到多个GPU并分配不同数据部分实现。

  • 主要挑战是GPU间梯度平均计算的通信瓶颈。

  • 复制模型增加批次大小,但过大批次会降低训练效率。

  • 数据并行存在扩展极限,需要其他工具支持。

确实有趣。数据并行通常很容易实现,你只需注意数据加载即可。它的工作原理是将模型复制到多个GPU上,并为每个GPU提供数据的不同部分,然后对梯度进行求和。扩展数据并行时的主要挑战在于,所有GPU间的梯度平均计算可能成为瓶颈。这需要跨所有GPU通信梯度,数据量可能非常庞大,从而在规模化时成为瓶颈。另一个限制是,复制模型会增加批次大小,这在一定程度上是有益的,但超过某个限度后,批次变得过大,会降低训练效率,无法有效利用每个数据样本。数据并行的扩展存在极限,这也是我们需要其他工具的原因。

  • 张量并行是一种技术,可能实现起来更具挑战性,需要重写模型代码。

  • 张量并行通过垂直分割矩阵(列方向)或水平分割矩阵(行方向),并将每个部分放置在不同的GPU上进行操作。

  • 每个GPU独立进行计算。

你可以首先尝试的技术是张量并行。这可能实现起来更具挑战性,因为它需要重写模型代码。张量并行通过在列方向上垂直分割矩阵或在行方向上水平分割矩阵,并将每个部分放置在不同的GPU上来进行操作。每个GPU随后独立进行计算。

然后你需要将输出结果相加。因此,你需要重写你的建模代码,因为你需要处理每次乘法运算的分裂过程。

  • 模型内部的矩阵乘法可能成为GPU间的同步点,增加复杂性。

  • 采用张量并行技术,利用GPU间的高速网络进行通信。

  • 数据中心将GPU分组到节点,节点内GPU通过快速互连通信,节点间通过较慢互连通信。

  • 张量并行在节点内部执行,避免使用较慢的节点间互连。

因此,情况变得更加复杂,因为模型内部的每次矩阵乘法都可能成为一个同步点。这可能导致GPU之间存在大量同步点。通常情况下,人们会采用张量并行,利用GPU之间的高速网络。数据中心通常将GPU分组到节点中,每个节点通常包含四个或八个GPU,并通过快速互连实现直接通信,无需涉及CPU。这些节点再通过较慢的互连相连。张量并行在节点内部执行,从而避免了较慢的互连。

  • 流水线并行技术将模型的不同层分配到不同的GPU上。

  • 这种分配减少了GPU间的通信需求,因为通信仅在层组间切换时发生。

  • 存在GPU闲置的风险,即当一个GPU处理模型的一部分时,另一个GPU可能闲置。

  • 为了提高效率,需要合理划分批次以保持所有GPU的活跃状态。

互连。然后是流水线并行,这是最后一部分。这里,概念涉及将某些层放在一个GPU上,而其他层放在另一个GPU上。这减少了通信需求,因为仅在从一个层组过渡到下一个层组时才发生通信。然而,风险在于,在处理模型的第二部分时,第一部分的GPU可能会闲置,导致效率低下。挑战在于同时保持所有GPU的活跃状态。为此,你需要划分你的批次。

  • 在较小批次中智能组织计算,过程复杂。

  • 前向传播过程在GPU间转移,大批次分割成小批次。

  • 反向传播在前向传播进行时开始,存在并行性。

  • 图表中灰色部分代表GPU空闲状态,即“气泡”。

  • 避免GPU空闲状态,流水线并行性具挑战性。

在较小的批次中,你会尝试智能地组织所有这些计算。如你所见,这可能相当复杂。在这里,你可以看到蓝色的前向传播过程,从一个GPU转移到下一个GPU。我们将大批次分割成较小的批次,形成了四个编号的批次。接着,是反向传播过程,它可以在某些前向传播仍在进行时就开始。本质上,图表中所有灰色的部分代表我们所说的“气泡”,即GPU在等待下一批次时的空闲状态,类似于短暂的休息。这是我们力求避免的情况,因此流水线并行性成为一个具有挑战性的方面。

  • 序列并行技术与张量并行互补,适用于无法分割的矩阵操作如层归一化和dropout。

  • 序列并行通过分割长序列并在不同GPU上运行来实现并行处理。

  • 存在两种不同的序列并行技术:一种是通过分割序列,另一种是环注意力方法,用于处理非常长的序列。

  • 环注意力方法将在未来几周内通过博客文章详细介绍。

最后一个技术是序列并行,它在某种程度上与张量并行互补,因为在某些情况下,你并没有可以分割的矩阵乘法。在张量并行中,我提到过将矩阵分成两部分,然后在两块GPU上运行。然而,对于层归一化或dropout这样的操作,它们对每个token是独立的,不能像矩阵那样分割。这不是矩阵乘法。在这里,你可以通过分割序列顺序来应用一些并行性。模型接收一个长序列作为输入,将序列分成两部分,对于这部分模型,你在一块GPU上运行一个序列,在另一块GPU上运行另一个序列。这很有趣。但在寻找序列并行时需要小心,因为有两个非常不同的技术都被称作序列并行,这可能会造成混淆。一个是我在描述的方法,即我们在序列上进行分割。另一个叫做环注意力,这是一种扩展序列并在非常长的序列上执行自注意力的方法。这也很引人入胜。我们将在几周后发布一篇关于此的博客文章,但它与前一种方法截然不同。

  • 找到包含所有并行性相关信息的单一来源很困难。

  • 推荐阅读《广度优先流水线并行》,该论文全面涵盖了并行性主题。

  • 另外两篇重要论文是《序列并行》和《减少大型Transformer模型中的激活重计算》。

如果你需要关于并行性的参考资料,找到一个包含所有相关信息的单一来源相当困难。不过,我强烈推荐第一篇论文《广度优先流水线并行》,它全面涵盖了这些主题。此外,另外两篇值得注意的论文是《序列并行》和《减少大型Transformer模型中的激活重计算》。

在多GPU训练中,另一个重大挑战是如何进行同步,尤其是在通信重叠的情况下。

  • 数据并行中存在一个重要的通信步骤,即all-reduce操作。

  • all-reduce操作的规模可能与计算量相当,导致信息交换时间与计算时间相近。

稍微放大一点,这里有一个图表或许能更清楚地说明问题。正如我一开始提到的,当你采用数据并行时,例如,在最后会有一个重要的通信步骤,你可以在图表顶部看到,这里有一个非常大的all-reduce操作,它可能和你的计算量一样大,这意味着你可能会花费同样多的时间在信息交换上。

  • 智能方法用于优化计算资源分配,避免GPU空闲等待通信。

  • 常见策略是重叠通信和计算,利用GPU的多个流式多处理器(SMs)。

  • 高效训练的关键在于策略性重叠通信与计算,确保连续处理。

  • PyTorch中的数据并行All Reduce支持计算和通信的重叠。

在分配计算资源时,有几种智能方法可以解决这一问题,或者至少避免在GPU空闲时等待通信。通常,一般的做法是重叠通信和计算。这在GPU上是可以实现的,因为你有多个流式多处理器(SMs)。你可以使用其中一些来传输数据,同时进行计算。高效训练的一个重要部分就是策略性地重叠通信与计算,以确保连续处理。一个典型的例子是PyTorch中的数据并行All Reduce,它本身就支持计算和通信的重叠。

但我认为,这是在扩展过程中面临的主要挑战之一。Flash Attention 确实有些复杂,所以我不会深入太多细节,但其核心理念非常

  • 智能方法在处理极大矩阵乘法(如注意力矩阵)时,通常涉及序列大小的平方计算。

  • 可以通过分解计算和使用移动平均来维持统计数据,这是Flash Attention的核心。

  • 作者认为,由于Flash Attention的出现,开发更高效注意力机制的研究已经不再受欢迎,该领域可能已过时。

在我看来,智能的方法是当你需要计算极大的矩阵乘法时,比如注意力矩阵,它通常是序列大小的平方。你也可以将其分解为更小的计算,并使用移动平均来维持所需的统计数据。这本质上就是为什么大家都在使用Flash Attention。我认为,现在已经没有人对开发更高效的注意力机制感兴趣了。如果你两年前关注这个领域,你会发现很多人都在研究高度高效的注意力机制,试图解决它与序列长度平方成正比的问题。但现在,既然我们已经有了一个完全避免具体化注意力矩阵的方法,我相信这个研究领域已经过时了。

译文终稿 Flash Attention V2 只是一个优化版本,但它相当技术性。

  • 作者将简要介绍如何使用稳定配方进行训练。

  • 提到MiniCPM的博客文章是一个重要的参考资料,有中文版本。

  • 稳定训练需考虑模型初始化和超参数调整,特别是学习率。

  • 余弦学习率曾受青睐,但最新研究表明,恒定学习率后跟衰减阶段可产生类似性能。

因此,我不会过多深入这个话题。你需要了解的最后一部分是如何使用稳定的配方进行训练。我将涵盖几个关键点。你可能熟悉的一个值得注意的参考资料是MiniCPM的博客文章,它还有一个优秀的中文版本。在追求稳定训练并避免发散或尖峰时,有几个因素需要考虑,比如模型初始化和超参数调整,特别是学习率。历史上,余弦学习率受到青睐,但最近的研究表明,使用恒定学习率后跟一个衰减阶段,可以产生与复杂的余弦计划相媲美的性能,正如MiniCPM博客文章和我们最近在Hugging Face的论文中所展示的那样。

  • 专家混合(MoE)是一种大型语言模型中的技术。

  • MoE允许将标记(token)路由到不同的多层感知器(MLP),以实现专门化处理。

  • 过去MoE未被广泛采用,因其效率低且可能导致标记丢失。

现在,让我们来谈谈一个更新的发展。如果你想深入理解大型语言模型(LLM)中的“专家混合”(Mixture-of-Experts,简称MoE),有两点你需要了解。专家混合的概念是,你可以将你的标记(token)路由到模型中的一个或另一个多层感知器(MLP),而不是将它们全部放在同一个MLP中。这样做的好处是,这些多层感知器能够针对数据的某些方面进行一定程度的专门化处理。长期以来,这种方法并未被广泛采用,主要原因是实现它的方式效率极低,这样会导致我们丢失一些标记。

  • 每位专家分配了两个token的记忆量。

  • 超过两个token时,多余的token会被丢弃。

  • 引入“巨块”机制,利用密集稀疏矩阵提高GPU执行效率。

  • “巨块”机制改善了多个专家混合(MoE)代码的运行效率。

  • 不同专家规模的调整是一个有潜力的研究领域。

对于每位专家,我们分配了一定数量的token预算。具体来说,每位专家可以处理两个token作为输入,这是我们为其分配的记忆量。如果我们向这位专家路由三个或四个token,我们会丢弃多余的token。这很遗憾,因为被丢弃的token可能非常重要。情况得到显著改善的是引入了“巨块”机制,它利用了一种简单的稀疏模式,即密集稀疏矩阵,主要是密集的,带有一些稀疏性,从而允许在GPU上高效执行。这一改动使我们能够有效地运行多个专家混合(MoE)代码。这是一个引人入胜的发展,尤其是在尚未探索的领域,比如不同专家规模的调整。这可能是一个极具吸引力的研究项目领域。

  • 出现了Transformer的替代方案,主要基于状态空间模型。

  • 状态空间模型类似于LSTM,但更简单。

  • Mamba是一个特别有趣的状态空间模型,虽然技术细节复杂,但推理速度更快。

  • 初步实验显示Mamba尚未完全达到Transformer的水平,但未来可能是两者的融合。

我愿意尝试这个任务。另一个有趣的现象是,在相当长一段时间里,我们首次有了一些引人注目的Transformer替代方案。这些替代方案主要围绕状态空间模型展开,这是一种带有记忆的模型。它在某种程度上类似于LSTM,但在某些方面更为简单。一个特别有趣的模型是Mamba。不幸的是,解释Mamba的技术细节相当复杂,描述起来也比Transformer更为繁琐。然而,它的优势在于推理速度更快,因为它减少了注意力计算。这非常引人注目。在过去一个月的初步实验中,我们一直在广泛训练Mamba。尽管我们尚未完全达到Transformer的水平,但最终的架构很可能是Transformer和Mamba的融合,结合两者的层级。因此,Mamba是否会成为广泛采用的架构,目前尚无定论。

我们有一个很棒的库叫做Nanotron,我们在其中实现了所有这些功能,包括MOE和Mamba等。你可以去看看。

  • 预训练语言模型后,目标是使其对齐。

  • 对齐过程采用强化学习方法。

  • 强化学习在语言模型中非常有效,可能是其最显著的应用。

  • 机制是基于人类反馈训练奖励模型,而非手动设计奖励函数。

  • 这种方法避免了过度适应特定环境,依赖于训练的奖励预测器。

在此,我将简要总结:关于这一主题,有大量的信息可供参考。接下来,我将加快讲解速度。通常,在预训练语言模型之后,你的目标是使其对齐。这一过程特别引人入胜,因为我们采用了强化学习。历史上,尽管强化学习一直是一个令人兴奋的课题,但它往往难以产生实际成果。然而,在语言模型的背景下,它却极为有效,可能标志着全球范围内强化学习最显著的应用。其机制是通过基于人类反馈训练一个复杂的奖励模型,而非像传统强化学习那样手动设计复杂的奖励函数。这种方法避免了过度适应特定环境,而是依赖于一个经过训练的奖励预测器。

从人类的反馈来看,第一个示例在性能表现上非常令人印象深刻,但由于需要将四个模型同时装入GPU内存,因此也非常复杂。

  • 记忆领域近期取得显著进展。

  • 引入直接偏好优化(DPO)方法,特点是仅需保留两个模型在内存中。

  • DPO的训练目标与预训练目标相似,使过程更直接且适用范围广泛。

记忆。近来,这一领域取得了显著进展,其中包括直接偏好优化(DPO)的引入,该方法因其仅需在内存中保留两个模型而显得相当简便。这种方法采用的训练目标与预训练目标极为相似,使得整个过程更为直接且适用范围广泛。

自然语言处理技术与强化学习。尽管仍存在挑战,但有些人正在倡导使用强化学习技术,如REINFORCE算法。因此,关于DPO是否更简单的结论仍未定论。

  • 在生产环境中部署技术时,网络信息丰富,进展迅速。

  • 目标是量化模型,有多种方法实现。

  • 三种技术比较显示,它们表现都相当出色。

  • 量化模型简单高效,令人惊讶。

  • 使用复杂方法进行推测性解码,包括并行使用小模型和大模型。

  • 有更高级的方法编译模型以提高性能。

技术终将胜出。当你在生产环境中部署时,网上有丰富的信息,因此我进展相当迅速。本质上,你的目标是量化你的模型。有多种方法可以实现这一点。以下是所有三种技术的比较。老实说,它们的表现都相当出色。量化模型既令人惊讶,又简单高效。你有一些复杂的方法用于推测性解码,其中你并行使用两个模型:一个运行速度极快的小模型和一个用于验证小模型结果的大型模型。此外,你还有更高级的方法来编译模型,以实现更快的性能。

  • 推理阶段最后一步是分享或评估模型。

  • Hugging Face提供资源,包括开放式大型语言模型排行榜和基准测试比较。

  • LMSys Chatbot Arena是广为人知的评估平台。

  • 用户可以在Hugging Face上发布模型演示。

在推理阶段,如果你已经训练出了一个优秀的模型并对其进行了良好的调整,最后一步就是分享或评估它。在这里,你可以查看我们在Hugging Face上的资源。我们有一个全面的开放式大型语言模型排行榜,我们在一系列基准测试中比较了所有模型。此外,还有广为人知的LMSys Chatbot Arena。同时,你也可以在Hugging Face上发布你的模型演示。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com