1. 为什么大模型推理时显存涨的那么多还一直占着?
- 模型参数占用显存:大语言模型本身具有大量参数量,这些参数需要存储在显存中以供推理使用。不量化的情况下这部分显存占用和大模型所占存储空间相同。
- 输入数据占用显存:进行推理时,需要将输入数据加载到显存中。对于大语言模型而言,输入数据通常也会占用较大的显存空间,尤其是对于较长的文本输入。
- 中间计算结果占用显存:在推理过程中,模型会进行一系列的计算操作,生成中间结果。这些中间结果也需要存储在显存中,以便后续计算使用。对于大语言模型而言,中间计算结果可能会占用较多的显存空间。
- 内存管理策略:某些深度学习框架在推理时采用了一种延迟释放显存的策略,即显存不会立即释放,而是保留一段时间以备后续使用。这种策略可以减少显存的分配和释放频率,提高推理效率,但也会导致显存一直占用的现象。
2. 大模型在 GPU 和 CPU 上推理速度如何?
- GPU推理速度快:GPU 具有大量的并行计算单元,可以同时处理多个计算任务。对于大语言模型而言, GPU 可以更高效地执行矩阵运算和神经网络计算,从而加速推理过程。
- CPU推理速度相对较慢:相较于 GPU,CPU 的计算能力较弱,主要用于通用计算任务。虽然 CPU 也可以执行大语言模型的推理任务,但由于计算能力有限,推理速度通常会较慢。
- 使用GPU加速推理:为了充分利用GPU的计算能力,通常会使用深度学习框架提供的 GPU 加速功能,如 CUDA,CUDA 可以将计算任务分配给GPU并利用其并行计算能力,从而加快大语言模型的推理速度。
3. 推理速度上,INT8 和 FP16 比起来怎么样?
在大语言模型的推理速度上,使用 INT8(8位整数量化)和 FP16(半精度浮点数)相对于 FP32(单精度浮点数)可以带来一定的加速效果。因为 INT8 和 FP16 的数据类型在表示数据时所需的内存和计算资源较少,从而可以加快推理速度。
一般来说 INT8 在推理时会比 FP16 更快,因为 INT8 在相同的内存空间下可以存储更多的数据,可以在相同的计算资源下进行更多的并行计算。这可以提高每秒推理操作数(Operations Per Second,OPS)的数量,加速推理速度。
4. 大模型有推理能力吗?
逻辑推理是大语言模型“智能涌现”出的核心能力之一,好像AI有了人的意识一样。而推理能力的关键,在于一个技术——思维链(Chain of Thought,CoT)。当模型规模足够大的时候,LLM本身是具备推理能力的。在简单推理问题上,LLM已经达到了很好的能力;复杂推理问题上,还需要更多深入的研究。
5. 大模型生成时的参数怎么设置?
- Temperature:用于调整随机从生成模型中抽样的程度,使得相同的提示可能会产生不同的输出。温度为 0 将始终产生相同的输出,该参数设置越高随机性越大。
- 波束搜索宽度:波束搜索是许多 NLP 和语音识别模型中常用的一种算法,作为在给定可能选项的情况下选择最佳输出的最终决策步骤。波束搜索宽度是一个参数,用于确定算法在搜索的每个步骤中应该考虑的候选数量。
- Top p:动态设置tokens候选列表的大小。 将可能性之和不超过特定值的top tokens列入候选名单。
Top p 通常设置为较高的值(如 0.75),目的是限制可能被采样的低概率 token 的长度。 - Top k:允许其他高分tokens有机会被选中。 这种采样引入的随机性有助于在很多情况下生成的质量。 Top k 参数设置为 3 则意味着选择前三个tokens。
若 Top k 和 Top p 都启用,则 Top p 在 Top k 之后起作用。
6. 有哪些省内存的大语言模型训练/微调/推理方法?
- 参数共享(Parameter Sharing):通过共享模型中的参数,可以减少内存占用。例如,可以在不同的位置共享相同的嵌入层或注意力机制。
- 梯度累积(Gradient Accumulation):在训练过程中,将多个小批次的梯度累积起来,然后进行一次参数更新。这样可以减少每个小批次的内存需求,特别适用于GPU内存较小的情况。
- 梯度裁剪(Gradient Clipping):通过限制梯度的大小,可以避免梯度爆炸的问题,从而减少内存使用。
- 分布式训练(Distributed Training):将训练过程分布到多台机器或多个设备上,可以减少单个设备的内存占用。分布式训练还可以加速训练过程。
- 量化(Quantization):将模型参数从高精度表示(如FP32)转换为低精度表示(如INT8或FP16),可以减少内存占用。量化方法可以通过减少参数位数或使用整数表示来实现。
- 剪枝(Pruning):通过去除冗余或不重要的模型参数,可以减少模型的内存占用。剪枝方法可以根据参数的重要性进行选择,从而保持模型性能的同时减少内存需求。
- 蒸馏(Knowledge Distillation):使用较小的模型(教师模型)来指导训练较大的模型(学生模型),可以从教师模型中提取知识,减少内存占用。
- 分块处理(Chunking):将输入数据或模型分成较小的块进行处理,可以减少内存需求。例如,在推理过程中,可以将较长的输入序列分成多个较短的子序列进行处理。