前言

在 LLM 面试中,面试官都会问同样一个问题: “如何快速估计大模型显存?”今天就为大家解读一下这道面试题。

1、面试官心理分析

这个问题不仅工作中有,面试时也会被问到。一般会分成两种情况:推理和训练。

推理时,我们主要考虑模型权重、KV 缓存和激活显存。而训练相比推理,还需要额外存储优化器状态和梯度,显存需求会更高。

我们先说推理。

2、面试题解析

推理的显存主要有三部分:模型权重、KV缓存和激活显存。首先加载模型权重是显存的主要开销。

计算公式很简单:

模型大小=参数数量×精度

比如全精度(FP32)每个参数占 4 字节;半精度(FP16)是 2 字节;更小的量化,比如 int8 和 int4,则分别是 1 字节和 0.5 字节。

要减少这部分显存,可以用 权重量化 技术,比如将 FP32 的权重压缩成 int8 或 int4。

接着是 KV 缓存。在解码时每生成一个 token,模型都会用到之前所有的 K V值。为了避免重复计算,需要把这些历史值缓存起来。

计算公式是:

KV 缓存=2×批次大小×序列长度×层数×隐藏层大小×精度

优化这部分显存,可以用 PagedAttention,通过更高效的机制减少缓存需求。

最后是激活显存,在模型的前向传播中,每层的中间激活值都需要存储。

计算公式稍微复杂一点:

激活显存 = 批次大小 * 序列长度 * 隐藏层大小 * (34 + (5 * 序列长度 * 注意力头数量) / (隐藏层大小))

激活显存的优化方式有 PagedAttention、序列并行 和 激活重计算,比如重计算可以在需要时动态生成激活值,而不是一直存着。

接下来我们来看看训练显存如何估计,训练显存的需求更高,因为除了推理显存,还要加上优化器状态和梯度。

训练时的显存计算公式:

总显存 = 模型大小 + KV缓存 + 激活 + (优化器状态 + 梯度) * 可训练参数数量

优化器状态和梯度对显存的影响?

先说优化器状态,它需要额外存储一些辅助变量,比如动量和方差,用来指导参数的更新。

以常见的 AdamW 为例,它有两个状态,每个参数需要占用 8 字节的显存。

如果使用量化的优化器,比如 BitsAndBytes 的实现,可以将这个开销降到每个参数 2 字节。

而像 SGD 这种优化器,由于只需要存储一个状态,每个参数只需要 4 字节,显存占用会更少。

因此为了进一步降低优化器状态的显存需求,可以选择一些高级优化器,比如 NVIDIA Apex 或 Adafactor,它们通过更高效的实现显著减少显存消耗。

另外,在超大模型的训练场景下,分页优化器也常被使用,能够将部分状态存储在内存中,减轻显存压力。

然后是梯度,它们是反向传播过程中存储的中间结果,表示每个参数的更新方向。梯度一般是以 FP32 精度存储的,这样可以保持数值稳定性。

优化梯度显存的方法有两种:

  • 一种是梯度累积,通过将多个小批次的梯度累加,减少每个批次显存的占用;
  • 另一种是梯度检查点,它可以动态计算梯度,而不是一次性存储所有的梯度值,从而显著降低显存需求,但代价是增加了一些计算量。

训练时的显存计算公式:

总显存 = 模型大小 + KV缓存 + 激活 + (优化器状态 + 梯度) * 可训练参数数量

此外在微调中,由于优化器状态和梯度的计算,显存需求会更高。

如果显存资源有限,可以通过参数高效微调(PEFT)技术,比如 LoRA 或 QLoRA,这些方法通过固定大部分模型参数,只训练少量额外参数,能够有效减少显存占用。

最后提供一个预估显存的经验法则:

推理:参数数量 * 精度(通常为 2 或 4 字节)

训练:推理资源的 4-6 倍

最后

为了助力朋友们跳槽面试、升职加薪、职业困境,提高自己的技术,本文给大家整了一套涵盖AI大模型所有技术栈的快速学习方法和笔记。目前已经收到了七八个网友的反馈,说是面试问到了很多这里面的知识点。

面试题展示

1、请解释一下BERT模型的原理和应用场景。

答案:BERT(Bidirectional Encoder Representations from Transformers)是一种预训练的语言模型,通过双向Transformer编码器来学习文本的表示。它在自然语言处理任务中取得了很好的效果,如文本分类、命名实体识别等。

2、什么是序列到序列模型(Seq2Seq),并举例说明其在自然语言处理中的应用。

答案:Seq2Seq模型是一种将一个序列映射到另一个序列的模型,常用于机器翻译、对话生成等任务。例如,将英文句子翻译成法文句子。

3、请解释一下Transformer模型的原理和优势。

答案:Transformer是一种基于自注意力机制的模型,用于处理序列数据。它的优势在于能够并行计算,减少了训练时间,并且在很多自然语言处理任务中表现出色。

4、什么是注意力机制(Attention Mechanism),并举例说明其在深度学习中的应用。

答案:注意力机制是一种机制,用于给予模型对不同部分输入的不同权重。在深度学习中,注意力机制常用于提升模型在处理长序列数据时的性能,如机器翻译、文本摘要等任务。

5、请解释一下卷积神经网络(CNN)在计算机视觉中的应用,并说明其优势。

答案:CNN是一种专门用于处理图像数据的神经网络结构,通过卷积层和池化层提取图像特征。它在计算机视觉任务中广泛应用,如图像分类、目标检测等,并且具有参数共享和平移不变性等优势。

6、请解释一下生成对抗网络(GAN)的原理和应用。

答案:GAN是一种由生成器和判别器组成的对抗性网络结构,用于生成逼真的数据样本。它在图像生成、图像修复等任务中取得了很好的效果。

7、请解释一下强化学习(Reinforcement Learning)的原理和应用。

答案:强化学习是一种通过与环境交互学习最优策略的机器学习方法。它在游戏领域、机器人控制等领域有广泛的应用。

8、请解释一下自监督学习(Self-Supervised Learning)的原理和优势。

答案:自监督学习是一种无需人工标注标签的学习方法,通过模型自动生成标签进行训练。它在数据标注困难的情况下有很大的优势。

9、解释一下迁移学习(Transfer Learning)的原理和应用。

答案:迁移学习是一种将在一个任务上学到的知识迁移到另一个任务上的学习方法。它在数据稀缺或新任务数据量较小时有很好的效果。

10、请解释一下模型蒸馏(Model Distillation)的原理和应用。

答案:模型蒸馏是一种通过训练一个小模型来近似一个大模型的方法。它可以减少模型的计算和存储开销,并在移动端部署时有很大的优势。

11、请解释一下LSTM(Long Short-Term Memory)模型的原理和应用场景。

答案:LSTM是一种特殊的循环神经网络结构,用于处理序列数据。它通过门控单元来学习长期依赖关系,常用于语言建模、时间序列预测等任务。

12、请解释一下BERT模型的原理和应用场景。

答案:BERT(Bidirectional Encoder Representations from Transformers)是一种预训练的语言模型,通过双向Transformer编码器来学习文本的表示。它在自然语言处理任务中取得了很好的效果,如文本分类、命名实体识别等。

13、什么是注意力机制(Attention Mechanism),并举例说明其在深度学习中的应用。

答案:注意力机制是一种机制,用于给予模型对不同部分输入的不同权重。在深度学习中,注意力机制常用于提升模型在处理长序列数据时的性能,如机器翻译、文本摘要等任务。

14、请解释一下生成对抗网络(GAN)的原理和应用。

答案:GAN是一种由生成器和判别器组成的对抗性网络结构,用于生成逼真的数据样本。它在图像生成、图像修复等任务中取得了很好的效果。

15、请解释一下卷积神经网络(CNN)在计算机视觉中的应用,并说明其优势。

答案:CNN是一种专门用于处理图像数据的神经网络结构,通过卷积层和池化层提取图像特征。它在计算机视觉任务中广泛应用,如图像分类、目标检测等,并且具有参数共享和平移不变性等优势。

16、请解释一下强化学习(Reinforcement Learning)的原理和应用。

答案:强化学习是一种通过与环境交互学习最优策略的机器学习方法。它在游戏领域、机器人控制等领域有广泛的应用。

17、请解释一下自监督学习(Self-Supervised Learning)的原理和优势。

答案:自监督学习是一种无需人工标注标签的学习方法,通过模型自动生成标签进行训练。它在数据标注困难的情况下有很大的优势。

18、请解释一下迁移学习(Transfer Learning)的原理和应用。

答案:迁移学习是一种将在一个任务上学到的知识迁移到另一个任务上的学习方法。它在数据稀缺或新任务数据量较小时有很好的效果。

19、请解释一下模型蒸馏(Model Distillation)的原理和应用。

答案:模型蒸馏是一种通过训练一个小模型来近似一个大模型的方法。它可以减少模型的计算和存储开销,并在移动端部署时有很大的优势。

20、请解释一下BERT中的Masked Language Model(MLM)任务及其作用。

答案:MLM是BERT预训练任务之一,通过在输入文本中随机mask掉一部分词汇,让模型预测这些被mask掉的词汇。

【AI大模型福报厂面经】面试官扎心一问:大模型显存如何估算?_语言模型

【AI大模型福报厂面经】面试官扎心一问:大模型显存如何估算?_agi_02