虽然使用预训练的大语言模型进行文本生成或问题回答(推理)等任务有其自身的硬件需求,但从头开始训练一个大语言模型,甚至是进行大幅度微调,都需要明显更多的资源。训练是模型通过处理海量数据并调整其内部参数来掌握其能力的过程。让我们看看为什么这个过程要求如此高。学习的计算负担训练包括反复向模型展示来自大型数据集的示例,并调整其参数以提升其表现。这个循环包含几个步骤,每个步骤的计算量都很大:前向传播: 与推理类似,输入数据通过模型的网络层来生成一个输出。损失计算: 将模型的输出与期望的输出(训练数据中的“真实值”)进行比较,并计算出一个“损失”值,量化模型的不准确程度。反向传播: 这一步是计算密集型。损失值用于计算梯度,梯度本质上是指导模型中数十亿参数应如何调整以减少该特定示例的损失。这需要将信息反向传播通过网络的层。参数更新: 优化算法(如Adam或SGD)使用计算出的梯度来更新模型的参数。这一步通常涉及额外的计算,并需要存储关于参数的额外信息。LLM训练通常对小“批次”数据进行,并且对整个数据集重复多次(称为“周期”)。训练大型模型可能涉及处理PB级别的数据,并执行数万亿次计算。为什么训练需要更多计算能力(GPU)反向传播和参数更新中涉及的如此大规模的计算,处理数十亿参数和大量数据集,都需要大规模并行处理能力。梯度计算: 为每个参数计算梯度是一项庞大的任务。对于一个700亿参数的模型,每一步都必须计算700亿个梯度值。优化: 优化算法基于这些梯度执行更多计算。重复: 整个过程在一次完整的训练运行中会重复数十亿或数万亿次。这就是为什么训练大型语言模型几乎完全依赖于图形处理单元(GPU),通常是在大型集群中进行:高端GPU: 训练需要具备强大原始计算能力(以FLOPS衡量)和专用核心(如NVIDIA GPU中的Tensor Core)的GPU,这些核心旨在加速深度学习的核心——矩阵乘法。分布式训练: 在单个GPU上训练大型模型通常太慢。它通常需要将工作负载分配到数十、数百甚至数千个GPU上并行运行。这需要复杂的软件框架和GPU之间的高速连接。虽然推理可能在单个强大的GPU上可行,但训练相同的模型可能需要许多这样的GPU持续运行数周或数月的协作努力。为什么训练需要更多内存(显存和内存)训练的内存需求使推理的内存需求相形见绌。推理主要需要显存来存储模型参数和当前输入的激活值,而训练则需要显存同时存储几份额外的大型信息:模型参数: 就像推理一样,模型本身的权重必须在显存中。梯度: 模型中的每个参数都必须存储一个梯度值。如果参数使用16位精度(FP16),那么梯度(通常最初以FP32等更高精度存储)所需的内存可能是参数本身的两倍。优化器状态: 大多数有效的优化器(如Adam)会为每个参数维护额外信息。例如,Adam通常为每个参数存储两个额外值(动量和方差估计)。如果这些值以32位精度(FP32)存储,它们消耗的内存可以是FP16参数的4倍(FP16参数为2个值 * 2字节/值,而FP32优化器状态为2个值 * 4字节/值)。总的来说,参数 + 梯度 + 优化器状态可以轻易地需要仅用于参数本身的显存的4到8倍(或更多)。激活值: 在前向传播过程中计算的中间结果(激活值)必须存储,因为它们在反向传播的梯度计算中是必需的。激活值所需的内存量取决于模型架构、批次大小和序列长度。数据批次: 当前正在处理的训练数据批次也需要适应显存。这种组合意味着一个GPU可能拥有足够的显存来运行大型模型的推理,但即使批次大小很小,也可能完全不足以进行训练。系统内存(RAM)在训练过程中也同样重要。它用于在批次数据传输到GPU显存之前加载和预处理庞大的训练数据集。如果系统没有足够的内存,或者存储数据集的设备太慢(磁盘I/O瓶颈),训练就可能轻易减慢。{"data":[{"type":"bar","x":[1,3,8,5],"y":["GPU计算","显存","系统内存","数据集存储"],"orientation":"h","name":"推理","marker":{"color":"#74c0fc"}},{"type":"bar","x":[10,10,7,10],"y":["GPU计算","显存","系统内存","数据集存储"],"orientation":"h","name":"训练","marker":{"color":"#f783ac"}}],"layout":{"title":{"text":"相对资源需求:推理与训练"},"xaxis":{"title":"相对需求(说明性等级1-10)","range":[0,11]},"yaxis":{"title":"资源类型"},"barmode":"group","legend":{"title":{"text":"操作"}},"margin":{"l":110,"r":20,"t":50,"b":40},"height":350}}与运行推理相比,训练对GPU计算能力、显存、系统内存和大型数据集存储的快速访问有着明显更高的要求。本质上,训练是关于构建和完善模型复杂结构的过程,需要极大的计算量和内存来同时追踪数十亿参数的学习过程。而推理则是关于运用那个已构建的结构。这个根本区别解释了所涉及的不同硬件规模。