让我们将讨论过的经验估算方法应用起来。请记住,这些都是估算值,主要关注于存储模型权重 (weight)所需的内存。实际使用量会更高,因为会涉及到激活值、操作系统开销以及您使用的特定软件。
我们的主要估算工具是这个关系式:
所需显存≈参数数量×每个参数的字节数
我们将关注FP16(16位浮点数)精度,这在推理 (inference)中非常常见。在FP16中,每个参数 (parameter)需要2字节的存储空间。
示例1:估算70亿参数 (parameter)模型(FP16)的显存 (VRAM)需求
考虑一个通常被称为“7B”的模型,这意味着它大约有70亿个参数。
- 参数数量: 7,000,000,000
- 每个参数的字节数(FP16): 2字节
- 计算:
VRAMFP16≈7,000,000,000参数×2字节/参数
VRAMFP16≈14,000,000,000字节
要将字节转换为吉字节(GB),我们除以 10243(或者大致除以十亿进行快速估算)。
14,000,000,000字节÷(1024×1024×1024)≈13.04GB
结果: 一个70亿参数模型在FP16精度下运行,仅仅为了存储模型权重 (weight),大约需要13-14 GB的显存。
示例2:估算130亿参数 (parameter)模型(FP16)的显存 (VRAM)需求
现在我们来看一个稍大一点的“13B”模型。
- 参数数量: 13,000,000,000
- 每个参数的字节数(FP16): 2字节
- 计算:
VRAMFP16≈13,000,000,000参数×2字节/参数
VRAMFP16≈26,000,000,000字节
转换为GB:
26,000,000,000字节÷(10243)≈24.21GB
结果: 一个130亿参数模型在FP16精度下,其权重 (weight)需要大约24-25 GB的显存。这已经超出了许多消费级GPU的显存容量。
示例3:比较70亿模型在FP16和INT8下的显存 (VRAM)需求
让我们再次审视70亿参数 (parameter)模型,但这次考虑通过量化 (quantization)使用INT8(8位整数)精度。在INT8中,每个参数仅需要1字节。
- 参数数量: 7,000,000,000
- 每个参数的字节数(INT8): 1字节
- 计算:
VRAMINT8≈7,000,000,000参数×1字节/参数
VRAMINT8≈7,000,000,000字节
转换为GB:
7,000,000,000字节÷(10243)≈6.52GB
结果: 通过使用INT8量化,70亿参数模型的权重 (weight)显存需求降至大约6.5-7 GB。这使得它在显存较少的GPU上运行成为可能,例如那些拥有8GB或12GB显存的GPU,尽管您仍然需要为激活值和开销预留空间。
仅70亿参数模型的权重所需的估算显存,使用FP16(16位浮点数)和INT8(8位整数)精度。
关于权重 (weight)的考量
请记住,这些计算仅提供了模型权重的基准。您还需要额外的显存 (VRAM)用于:
- 激活值: 推理 (inference)过程中执行的中间计算。所需量很大程度上取决于上下文 (context)长度(模型一次处理的文本量)和批处理大小(同时处理的请求数量)。
- KV缓存: 存储关于正在生成的序列的信息,随生成文本的长度而增加。
- 软件开销: 运行时环境、库(如CUDA)和操作系统都会占用一些显存。
一个更安全的经验估算方法是,在权重显存估算值之上增加20-40%的缓冲区,或者简单地确保您的GPU显存显著多于计算出的权重需求。例如,要流畅运行70亿参数 (parameter)的FP16模型(权重估算需要13-14 GB),拥有16GB或理想情况下24GB显存的GPU会更合适,特别是对于更长的上下文。
将这些估算值与您硬件的规格进行比较(如“检查硬件规格”一节中所述),以判断在您的系统上运行特定模型是否可行。