大语言模型训练:从数据集到内存优化
立即解锁
发布时间: 2025-09-02 00:44:33 阅读量: 33 订阅数: 33 AIGC 


生成式AI实战:从理论到应用
# 大语言模型训练:从数据集到内存优化
## 1. 序列到序列模型与预训练数据集
序列到序列模型最初是为翻译任务设计的,在文本摘要任务中也非常有用。T5 及其微调版本 FLAN - T5 是著名的编码器 - 解码器、序列到序列模型,广泛应用于各种生成式语言任务。
生成式模型在预训练阶段通过大量的训练数据(通常达到 TB 甚至 PB 级别)来学习其能力。这些数据集通常来自公共互联网,也可以包含来自私有 Amazon S3 存储桶或数据库的专有数据。
两个最流行的用于预训练大语言模型的数据集是 Wikipedia 和 Common Crawl。Wikipedia 提供了 2022 年其内容的多语言提取版本,而 Common Crawl 是每月对整个互联网文本的转储。
由于这种自由形式的互联网数据非常杂乱,因此有一些变体数据集,如 Wiki - 40B、Colossal Clean Crawled Corpus (C4)、The Pile 和 RefinedWeb,它们试图清理数据以进行更高质量的模型训练。特别是 RefinedWeb,它试图使用统计方法过滤掉机器生成的文本,以确定文本是人类生成还是机器生成。
Falcon 系列模型在名为 RefinedWeb 的 1.5 万亿个标记的数据上进行训练。这些数据在由 257 个 ml.c5.18xlarge SageMaker 实例组成的集群上进行处理,该集群包含 18,504 个 CPU 和 37TB 的 CPU 内存。
### 预训练数据集对比
| 数据集名称 | 特点 |
| ---- | ---- |
| Wikipedia | 2022 年多语言内容提取 |
| Common Crawl | 每月互联网文本转储 |
| Wiki - 40B | 清理后的数据 |
| C4 | 清理后的数据 |
| The Pile | 清理后的数据 |
| RefinedWeb | 过滤机器生成文本,用于 Falcon 模型训练 |
## 2. 缩放定律
对于生成式模型,已经出现了一组缩放定律,描述了在固定计算预算(例如 GPU 小时数)下模型大小和数据集大小之间的权衡。这些缩放定律表明,通过增加标记数量或模型参数数量,可以提高生成式模型的性能。
扩大两者通常需要更高的计算预算,通常以每秒浮点运算次数(FLOPs)来定义。不同变体和大小的 BERT、T5 和 GPT - 3 预训练所需的计算预算有所不同。BERT 是仅编码器模型,T5 是编码器 - 解码器模型,GPT - 3 是仅解码器模型。
虽然 1750 亿参数的 GPT - 3 模型在生成任务上优于 T5 和 BERT 模型,但更大的模型需要更大的计算预算。研究人员发现,通过增加训练数据集大小而不是模型大小,可以用更少的权重获得超过 1750 亿参数模型的性能。
### 常见模型预训练要求对比
| 模型 | 类型 | 计算预算对比 |
| ---- | ---- | ---- |
| BERT | 仅编码器 | - |
| T5 | 编码器 - 解码器 | - |
| GPT - 3 | 仅解码器 | 1750 亿参数模型需要较大计算预算 |
## 3. 计算最优模型
2022 年的一项研究对比了各种模型和数据集大小组合的性能。该研究表明,像 GPT - 3 这样的 1000 亿以上参数的大型模型可能存在参数过多和训练不足的问题。研究人员假设,通过为较小的模型提供更多的训练数据,可以实现与 1000 亿以上参数模型相当的性能。
具体来说,该研究声称最优训练数据集大小(以标记数衡量)是模型参数数量的 20 倍,低于这个比例的模型可能存在参数过多和训练不足的问题。
### 不同模型的参数与数据集大小对比
| 模型 | 模型大小(参数) | 最优数据集大小(标记) | 实际数据集大小(标记) | 假设情况 |
| ---- | ---- | ---- | ---- | ---- |
| Chinchilla | 700 亿 | 1.4 万亿 | 1.4 万亿 | 计算最优(20 倍) |
| LLaMA - 65B | 650 亿 | 1.3 万亿 | 1.4 万亿 | 计算最优(20 倍) |
| GPT - 3 | 1750 亿 | 3.5 万亿 | 3000 亿 | 数据集大小参数过多(<20 倍) |
| OPT - 175B | 1750 亿 | 3.5 万亿 | 1800 亿 | 数据集大小参数过多(<20 倍) |
| BLOOM | 1760 亿 | 3.5 万亿 | 3500 亿 | 数据集大小参数过多(<20 倍) |
| Llama2 - 70B | 700 亿 | 1.4 万亿 | 2.0 万亿 | 优于计算最优(>20 倍) |
从这个表格可以看出,根据 Chinchilla 缩放定律,这些 1750 亿以上参数的模型应该在 3.5 万亿个标记上进行训练,但实际训练的标记数比推荐的小一个数量级。最近发布的 Llama 2 700 亿参数模型在 2 万亿个标记上进行训练,超过了 20:1 的标记与参数比例,并且在各种基准测试中表现优于原始的 LLaMA 模型,这体现了在保持参数数量相对固定的情况下增加预训练数据量的趋势。
## 4. 内存挑战
在训练或微调基础模型时,最常见的问题之一是内存不足。当在 NVIDIA GPU 上训练甚至只是加载模型时,可能会遇到 CUDA 内存不足的错误。
CUDA 是为 NVIDIA GPU 开发的一组库和工具,用于提升常见深度学习操作(包括矩阵乘法等)的性能。深度学习库如 PyTorch 和 TensorFlow 广泛使用 CUDA 来处理底层的硬件特定细节,包括 CPU 和 GPU 内存之间的数据移动。
一个单模型参数在 32 位全精度下由 4 个字节表示。因此,一个 10 亿参数的模型仅加载到 GPU 内存就需要 4GB 的 GPU 内存。如果要训练该模型,则需要更多的 GPU 内存来存储数值优化器的状态、梯度、激活值以及函数使用的任何临时变量。
### 训练模型所需额外内存
| 状态 | 每个参数的字节数 |
| ---- | ---- |
| 模型参数(权重) | 4
0
0
复制全文
相关推荐









