第一次跑出结果以后,很容易想试试更大的模型。可从0.5B换到7B,但原来的机器就未必还够用了。
选资源时,先分清几个东西。CPU和GPU负责计算,内存和显存用来容纳运行中的数据,磁盘负责保存模型文件。模型下载得下来,只说明磁盘放得下,能不能顺利运行,还得看内存、显存和计算能力。同一个模型,用什么精度加载、输入多长、同时处理多少请求,都会影响资源占用。推理和训练的需求也不同。
下面先看CPU和GPU各自适合做什么,再算一算模型参数会占用多少空间,为后面选择笔记本或云端实例做准备。
CPU和GPU在计算方式上存在明显差异。
CPU面向通用计算,每个核心都具备较完整的控制和运算能力,可以根据程序执行过程进行判断、跳转和任务调度,能够灵活处理不同类型的计算任务。
GPU采用并行计算架构,包含大量计算单元,可以同时执行大量计算任务。适合处理数据规模较大、计算过程重复性较高的任务。
CPU和GPU的处理速度取决于任务类型和计算规模。
对于包含大量逻辑判断、程序控制和任务调度的场景,CPU具有更高的执行效率。像操作系统运行、数据库查询这样的任务,适合在CPU上完成。
对于大规模并行计算任务,GPU能提供更高的计算吞吐量。深度学习中的矩阵乘法和卷积运算,可以拆分成多个并行子任务,由GPU计算单元同时执行,提升整体计算效率。
不过,只有计算任务规模较大时,GPU的优势才会比较明显。当数据量较小时,GPU的计算资源无法充分利用,CPU和GPU之间的数据传输和任务调度也会带来额外开销,此时使用CPU可能更加高效。
CPU和GPU的成本不仅包括硬件采购价格,还包括运行过程中的功耗,以及后续的使用和维护成本。
在硬件采购方面,CPU是标配,普通服务器和个人计算机都需要配置CPU。用于AI训练和推理的高性能GPU价格通常较高,除了GPU本身,还需要考虑服务器、显存、存储以及其他配套硬件的成本。
运行过程中,GPU进行大规模计算时功耗较高,服务器中GPU数量越多,供电和散热的压力越大,数据中心的电力、散热成本会显著增加。
使用和维护时,CPU生态比较成熟,常规服务器维护相对简单。GPU需要考虑驱动程序、计算框架和硬件环境的兼容性,不同版本间的冲突可能导致模型无法正常运行。多GPU环境还涉及设备之间的数据通信,对硬件连接和软件配置有一定要求。
训练和推理任务对资源的要求不同,不同规模和类型的模型对计算资源的差异也很大。硬件选型需综合考虑模型规模、数据量、性能要求,以及训练与推理两个场景下的资源需求。
在模型训练阶段,数据规模较小时,CPU可以满足大部分传统机器学习模型的训练需求,如线性回归、逻辑回归、随机森林。部分轻量级神经网络也可以使用CPU完成训练,但随着数据规模和模型结构复杂度的增加,训练时间会明显变长。如果需要频繁进行模型调优,使用GPU能够缩短训练时间。
大规模神经网络和大语言模型训练需要进行大量矩阵计算,对计算能力和显存容量的要求很高。像Qwen这种数十亿参数量级的大语言模型,需要依赖GPU等高性能加速设备完成训练。
模型在推理阶段对硬件的要求和训练阶段不同。参数规模较小、访问量较低的场景,CPU就可以满足推理需求,还可以通过量化等方法降低资源占用。大模型、高并发服务以及需要快速响应的场景,GPU能提供更高的推理效率。
CPU和GPU各有适用场景,需要综合考虑模型规模、数据量、并发请求、性能要求和部署成本。
评估模型对运行资源的需求,主要看两个指标:参数规模和数据精度。
模型参数规模一般用B表示,1B代表10亿参数。参数是模型在训练过程中学习得到的数值,推理时需要将这些参数加载到内存(CPU)或显存(GPU)中。参数量越大,占用的资源就越大。
数据精度是指模型参数采用什么样的数值格式进行存储和计算。常见的格式包括FP32、FP16、BF16,用于量化的INT8、INT4等。相同参数量的模型,数据精度越高,占用的资源就越大。
不同精度下,1B参数的存储占用量估算如下:
| 精度 | 每1B参数占用空间(约) | 常见用途 |
| FP32(单精度) | 4GB | 训练、高精度推理 |
| FP16(半精度) | 2GB | 训练、推理 |
| BF16 | 2GB | 训练、推理 |
| INT8 | 1GB | 量化推理 |
| INT4 | 0.5GB | 低精度量化推理 |
模型权重 = 参数量 × 该精度下1B参数存储占用量。以7B模型、FP16精度推理为例,模型权重占用约为:7 × 2GB ≈ 14GB。
模型推理阶段除了加载模型权重,还需要额外的资源用于KV Cache、运行框架以及临时计算。
KV Cache用于保存生成过程中已经计算过的Token相关信息,避免重复计算。它的占用大小与模型结构、上下文长度和并发请求数量有关。上下文越长,需要保存的信息越多;同时处理的请求越多,KV Cache的占用也会增加。
推理资源占用的估算公式:
登录 参与讨论
CPU推理所需内存 ≈ 模型权重 + 框架及临时开销。
GPU推理所需显存 ≈ 模型权重 + KV Cache + 框架及临时开销。
其中权重是静态的,框架开销基本恒定,变量全在KV Cache。在长序列场景下,需要预留KV Cache的空间。
模型训练阶段的资源需求高于推理阶段。除了保存模型权重,还需要存储梯度、优化器状态以及训练过程中的中间结果,需要更多资源。训练资源需求取决于优化器类型和训练策略。
(1)完整模型训练
对于完整模型训练,需要同时存储模型权重、梯度、优化器状态、激活值。以采用Adam优化器、FP16精度的完整训练为例,每1B参数约需:
| 组成部分 | 每1B参数占用 |
| 模型权重(FP16) | 2 GB |
| 梯度(FP16) | 2 GB |
| 优化器状态 | 8 GB |
| FP32权重副本 | 4 GB |
| 小计(不含激活值) | 16 GB |
注:Adam优化器需要保存两份FP32精度的状态(动量和方差),因此优化器状态占8GB;FP32权重副本用于优化器参数更新。
完整训练初步估算公式为:
GPU训练所需显存 ≈ 参数量 × 16 Byte + 激活值开销
CPU训练所需内存 ≈ 参数量 × 16 Byte + 激活值开销
在GPU训练受限于显存容量,CPU上训练则受限于计算速度。如7B模型采用FP16在GPU上进行完整训练,至少需要7B × 16 Byte ≈ 112GB显存,加上激活值后实际需求会更大。
(2)参数高效微调(如LoRA)
对于大模型微调,实际应用中更常采用LoRA(Low-Rank Adaptation)等参数高效微调方法。LoRA训练时不更新原模型全部参数,而是冻结原模型权重,仅训练新增的低秩适配参数,显存需求明显降低。
LoRA训练显存 ≈ 基础模型权重 + LoRA参数 + LoRA参数梯度和优化器状态 + 激活值。
其中,基础模型权重只需要加载,不参与更新;LoRA新增参数量仅为原模型的0.1%~1%,其梯度与优化器开销几乎忽略不计。实际显存主要取决于模型权重、上下文长度、批次大小以及训练框架优化方式,LoRA微调相比完整训练可以显著降低显存需求。
例如,使用FP16加载7B模型,模型权重占4GB。在单张24GB显存的GPU上,LoRA微调通常可以运行(需适当调整批次大小和上下文长度)。若使用QLoRA(将基础模型量化为INT4),可以继续降低显存占用,从而在更有限的硬件环境下完成微调。