学习
#模型时代#
Hugging Face刚发布的开源大模型训练电子书《Ultra-Scale Playbook》很引发轰动,团队还用NotebookLM制作了一期90分钟的精华概要。
我把官方介绍再引用一下:
经过 6 个多月的制作和一年多的 GPU 计算时间,Hugging Face 团队刚刚发布了 "超大规模游戏手册"(《Ultra-Scale Playbook》)。播客和本书涵盖了人工智能构建者需要了解的有关如何在 GPU 集群上训练最新大型语言模型的所有内容:5D 并行性(数据并行性、张量并行性、序列并行性、上下文并行性、管道并行性、专家并行性)、ZeRO、快速 CUDA 内核、计算与通信重叠的方式和原因--所有扩展瓶颈和工具,以及我们 4000 多次扩展实验的动机、理论和交互式图表。
目前的播客是所有这些智慧讨论火花的 1 小时 30 分钟组合。在这本书/播客中,我们的目标是在一个地方收集一个连贯、易读而详细的故事,介绍使当今LLM扩展成为可能的所有技术。
它将帮助你回答以下问题
DeepSeek是如何只用 500 万美元进行训练的?
为什么米斯特拉尔要训练一名军事教官?
为什么 PyTorch 本机数据并行化的实现在引擎盖下如此复杂?
并行技术都有哪些,为什么会发明这些技术?
在扩展时,我应该使用 ZeRO-3 还是管道并行技术?
Meta 用来训练 Llama 3 的上下文并行性是什么?它不同于序列并行吗?
FP8 是什么?与 BF16 相比如何?
电子书的中文版链接在: 网页链接 ,使用GPT-o1翻译的,图文版式都蛮好的。
注意,这是播客,不是视频,大家可以空了当下饭伴音。不过……谁会在吃饭的时候学习怎么训练大模型?
***
播客概要:
The Ultra-Scale Playbook: Training LLMs on GPU Clusters
超大规模手册:如何在GPU集群训练LLMs
随着大语言模型规模的不断扩大,如何高效地训练这些动辄数十亿参数的庞然大物已成为 AI 领域的关键挑战。本期深度对话邀请到多位大规模模型训练专家,为我们揭开高效训练大语言模型的技术面纱。
大语言模型训练已经演变成一门精密的工程艺术,需要多种并行技术的精妙配合。从内存管理到计算加速,从单 GPU 优化到多 GPU 协同,每一项技术都在不断推动着大模型训练的边界。
1. 大模型训练的核心挑战:GPU 内存管理
"批量大小(batch size)是大模型训练中最关键的平衡点之一。你希望批量尽可能大以提高效率,但又总是受限于有限的 GPU 内存容量。"一位专家在讨论中开门见山地指出了大模型训练面临的根本性挑战。
在实践中,研究人员发现大语言模型的最佳批量大小通常在 400 万到 6000 万词元(tokens)之间。这个规模能够让模型从足够多的样本中学习,实现稳定高效的训练。然而,要在 GPU 上处理如此大规模的数据并非易事。正如专家解释的:“这就像同时处理一整摞教科书,而不是一次只看一章。模型可以更有效地调整参数,学习更快,但代价是更大的内存消耗。”
2. 解剖 GPU 内存消耗的“四大巨头”
深入探讨后,专家们详细分析了 GPU 训练过程中的四大内存消耗来源:模型权重、激活值、梯度和优化器状态。以一个具体的例子来说明:“一个 10 亿参数的模型在 FP32 精度下就需要约 16GB 的内存,仅仅用于存储模型权重。当你扩展到 70 亿参数时,这个数字暴增至 112GB,已经超出了大多数单个 GPU 的内存容量。而如果是 700 亿参数的模型,光是权重和梯度就需要超过 1TB 的内存。”
这些数字令人警醒,但更具挑战性的是激活值的内存消耗。正如一位专家指出:“激活值就像模型的工作记忆,其所需内存不仅取决于模型大小,还与输入序列的长度直接相关。处理更长的文本意味着产生更多的激活值,需要更多的内存。此外,当我们并行处理多个序列时,这个消耗会进一步倍增。”
3. 混合精度训练:巧妙的平衡之道
面对内存挑战,混合精度训练提供了一个优雅的解决方案。“BF16 格式每个参数只使用 2 字节,相比 FP32 的 4 字节减少了一半的内存占用。”一位专家解释道,“不过这并不总是意味着总体内存使用的减半,因为为了保持训练稳定性,我们通常需要在 FP32 中保留权重和梯度的额外副本。”
那么为什么还要使用 BF16 呢?答案在于速度。“即使 BF16 并不总能节省内存,它仍然能显著加速训练过程。这是一个典型的权衡:用稍低的精度换取更快的计算速度。”专家们进一步解释了如何通过梯度累积等技术来确保较低精度训练的稳定性,展示了在保持模型性能的同时优化资源使用的精妙之处。
4. 激活重计算:突破内存瓶颈的关键技术
“激活重计算是训练大模型的关键突破点之一。”正如专家在讨论中指出,“不需要存储所有前向传播的激活值,我们可以在反向传播时按需重新计算它们。”
这种方法就像阅读一篇密集的技术论文:我们不需要记住每一个细节,而是做一些关键笔记,需要时再回顾重新推导。通过在层与层之间设置检查点,模型可以在需要时从最近的检查点重新计算特定层的激活值。这种策略极大地降低了内存占用,尽管会带来一些额外的计算开销。
专家们还详细讨论了两种主要的重计算方案:完全重计算和选择性重计算。“完全重计算会在每一层之间设置检查点,这能提供最大的内存节省,但计算开销也最大。而选择性重计算则针对内存消耗最大的操作,比如注意力机制,可以在内存节省和计算效率之间取得更好的平衡。”研究表明,选择性重计算可以减少高达 70% 的激活内存占用,而只增加 2-3% 的计算成本。
5. 数据并行与梯度累积:扩展训练规模的双剑合璧
对于那些需要进一步扩大训练规模的情形,数据并行和梯度累积往往是首选的组合。“当我们谈到扩展训练规模时,数据并行和梯度累积是两个强大的互补技术。”专家解释道。
数据并行:在多个 GPU 上复制模型,同时处理不同的数据批次,最后汇总梯度更新模型。
梯度累积:允许在有限的 GPU 内存下,先多次计算小批次的梯度再进行一次权重更新,从而模拟更大的批量大小。
这种组合的威力可以通过一个具体例子来体现:“假设我们的目标是处理 400 万个词元的全局批量大小,每个序列长度为 4000 个词元。在单个 GPU 上,如果每次只能处理 2 个样本,我们需要 512 步梯度累积才能达到目标批量大小。但如果我们有 128 个 GPU,保持相同的微批量大小 2,只需要 4 步梯度累积就能达到同样的效果。”
6. ZeRO 和管道并行:突破单 GPU 限制的创新方案
如果模型大到连一层都无法放进单个 GPU,便需要更激进的解决方案——这就是 ZeRO(Zero Redundancy Optimizer) 和管道并行。
ZeRO:通过在 GPU 之间分割优化器状态、梯度和模型参数,最大化地减少内存冗余。
管道并行:将模型的不同层分配给不同的 GPU,“这就像一条装配线,每个 GPU 负责处理模型的特定阶段,然后将输出传递给下一个 GPU。”
不过,管道并行也带来了所谓的“气泡问题”——在某些 GPU 等待其他 GPU 完成处理时,可能会处于空闲状态。如何减少这种等待时间成为管道并行中的一个重要研究方向。
7. Attention:注意力机制的革命性优化
在讨论加速时,注意力机制的计算与内存占用始终是重点。传统的注意力实现需要存储完整的注意力矩阵,这在处理长序列时会导致巨大的内存消耗。专家们重点介绍了 Flash Attention 的创新之处,通过重新设计注意力计算流程,在共享内存中分块计算注意力分数,显著减少了对全局内存的依赖。
“就像在一个大型会议中,与其让所有人同时互相交流,不如将人们先分成小组进行充分讨论,再将各组结论进行整合。”这种方法不仅降低了内存使用,还提升了计算速度。
我把官方介绍再引用一下:
经过 6 个多月的制作和一年多的 GPU 计算时间,Hugging Face 团队刚刚发布了 "超大规模游戏手册"(《Ultra-Scale Playbook》)。播客和本书涵盖了人工智能构建者需要了解的有关如何在 GPU 集群上训练最新大型语言模型的所有内容:5D 并行性(数据并行性、张量并行性、序列并行性、上下文并行性、管道并行性、专家并行性)、ZeRO、快速 CUDA 内核、计算与通信重叠的方式和原因--所有扩展瓶颈和工具,以及我们 4000 多次扩展实验的动机、理论和交互式图表。
目前的播客是所有这些智慧讨论火花的 1 小时 30 分钟组合。在这本书/播客中,我们的目标是在一个地方收集一个连贯、易读而详细的故事,介绍使当今LLM扩展成为可能的所有技术。
它将帮助你回答以下问题
DeepSeek是如何只用 500 万美元进行训练的?
为什么米斯特拉尔要训练一名军事教官?
为什么 PyTorch 本机数据并行化的实现在引擎盖下如此复杂?
并行技术都有哪些,为什么会发明这些技术?
在扩展时,我应该使用 ZeRO-3 还是管道并行技术?
Meta 用来训练 Llama 3 的上下文并行性是什么?它不同于序列并行吗?
FP8 是什么?与 BF16 相比如何?
电子书的中文版链接在: 网页链接 ,使用GPT-o1翻译的,图文版式都蛮好的。
注意,这是播客,不是视频,大家可以空了当下饭伴音。不过……谁会在吃饭的时候学习怎么训练大模型?
***
播客概要:
The Ultra-Scale Playbook: Training LLMs on GPU Clusters
超大规模手册:如何在GPU集群训练LLMs
随着大语言模型规模的不断扩大,如何高效地训练这些动辄数十亿参数的庞然大物已成为 AI 领域的关键挑战。本期深度对话邀请到多位大规模模型训练专家,为我们揭开高效训练大语言模型的技术面纱。
大语言模型训练已经演变成一门精密的工程艺术,需要多种并行技术的精妙配合。从内存管理到计算加速,从单 GPU 优化到多 GPU 协同,每一项技术都在不断推动着大模型训练的边界。
1. 大模型训练的核心挑战:GPU 内存管理
"批量大小(batch size)是大模型训练中最关键的平衡点之一。你希望批量尽可能大以提高效率,但又总是受限于有限的 GPU 内存容量。"一位专家在讨论中开门见山地指出了大模型训练面临的根本性挑战。
在实践中,研究人员发现大语言模型的最佳批量大小通常在 400 万到 6000 万词元(tokens)之间。这个规模能够让模型从足够多的样本中学习,实现稳定高效的训练。然而,要在 GPU 上处理如此大规模的数据并非易事。正如专家解释的:“这就像同时处理一整摞教科书,而不是一次只看一章。模型可以更有效地调整参数,学习更快,但代价是更大的内存消耗。”
2. 解剖 GPU 内存消耗的“四大巨头”
深入探讨后,专家们详细分析了 GPU 训练过程中的四大内存消耗来源:模型权重、激活值、梯度和优化器状态。以一个具体的例子来说明:“一个 10 亿参数的模型在 FP32 精度下就需要约 16GB 的内存,仅仅用于存储模型权重。当你扩展到 70 亿参数时,这个数字暴增至 112GB,已经超出了大多数单个 GPU 的内存容量。而如果是 700 亿参数的模型,光是权重和梯度就需要超过 1TB 的内存。”
这些数字令人警醒,但更具挑战性的是激活值的内存消耗。正如一位专家指出:“激活值就像模型的工作记忆,其所需内存不仅取决于模型大小,还与输入序列的长度直接相关。处理更长的文本意味着产生更多的激活值,需要更多的内存。此外,当我们并行处理多个序列时,这个消耗会进一步倍增。”
3. 混合精度训练:巧妙的平衡之道
面对内存挑战,混合精度训练提供了一个优雅的解决方案。“BF16 格式每个参数只使用 2 字节,相比 FP32 的 4 字节减少了一半的内存占用。”一位专家解释道,“不过这并不总是意味着总体内存使用的减半,因为为了保持训练稳定性,我们通常需要在 FP32 中保留权重和梯度的额外副本。”
那么为什么还要使用 BF16 呢?答案在于速度。“即使 BF16 并不总能节省内存,它仍然能显著加速训练过程。这是一个典型的权衡:用稍低的精度换取更快的计算速度。”专家们进一步解释了如何通过梯度累积等技术来确保较低精度训练的稳定性,展示了在保持模型性能的同时优化资源使用的精妙之处。
4. 激活重计算:突破内存瓶颈的关键技术
“激活重计算是训练大模型的关键突破点之一。”正如专家在讨论中指出,“不需要存储所有前向传播的激活值,我们可以在反向传播时按需重新计算它们。”
这种方法就像阅读一篇密集的技术论文:我们不需要记住每一个细节,而是做一些关键笔记,需要时再回顾重新推导。通过在层与层之间设置检查点,模型可以在需要时从最近的检查点重新计算特定层的激活值。这种策略极大地降低了内存占用,尽管会带来一些额外的计算开销。
专家们还详细讨论了两种主要的重计算方案:完全重计算和选择性重计算。“完全重计算会在每一层之间设置检查点,这能提供最大的内存节省,但计算开销也最大。而选择性重计算则针对内存消耗最大的操作,比如注意力机制,可以在内存节省和计算效率之间取得更好的平衡。”研究表明,选择性重计算可以减少高达 70% 的激活内存占用,而只增加 2-3% 的计算成本。
5. 数据并行与梯度累积:扩展训练规模的双剑合璧
对于那些需要进一步扩大训练规模的情形,数据并行和梯度累积往往是首选的组合。“当我们谈到扩展训练规模时,数据并行和梯度累积是两个强大的互补技术。”专家解释道。
数据并行:在多个 GPU 上复制模型,同时处理不同的数据批次,最后汇总梯度更新模型。
梯度累积:允许在有限的 GPU 内存下,先多次计算小批次的梯度再进行一次权重更新,从而模拟更大的批量大小。
这种组合的威力可以通过一个具体例子来体现:“假设我们的目标是处理 400 万个词元的全局批量大小,每个序列长度为 4000 个词元。在单个 GPU 上,如果每次只能处理 2 个样本,我们需要 512 步梯度累积才能达到目标批量大小。但如果我们有 128 个 GPU,保持相同的微批量大小 2,只需要 4 步梯度累积就能达到同样的效果。”
6. ZeRO 和管道并行:突破单 GPU 限制的创新方案
如果模型大到连一层都无法放进单个 GPU,便需要更激进的解决方案——这就是 ZeRO(Zero Redundancy Optimizer) 和管道并行。
ZeRO:通过在 GPU 之间分割优化器状态、梯度和模型参数,最大化地减少内存冗余。
管道并行:将模型的不同层分配给不同的 GPU,“这就像一条装配线,每个 GPU 负责处理模型的特定阶段,然后将输出传递给下一个 GPU。”
不过,管道并行也带来了所谓的“气泡问题”——在某些 GPU 等待其他 GPU 完成处理时,可能会处于空闲状态。如何减少这种等待时间成为管道并行中的一个重要研究方向。
7. Attention:注意力机制的革命性优化
在讨论加速时,注意力机制的计算与内存占用始终是重点。传统的注意力实现需要存储完整的注意力矩阵,这在处理长序列时会导致巨大的内存消耗。专家们重点介绍了 Flash Attention 的创新之处,通过重新设计注意力计算流程,在共享内存中分块计算注意力分数,显著减少了对全局内存的依赖。
“就像在一个大型会议中,与其让所有人同时互相交流,不如将人们先分成小组进行充分讨论,再将各组结论进行整合。”这种方法不仅降低了内存使用,还提升了计算速度。