【LLM开发实验】LLM推理基本介绍

目录

显存需求估算:参数量经验法则

基本计算

激活内存

激活占用显存 (VRAM)

键值(KV)缓存

[关于权重 (weight)的考量](#关于权重 (weight)的考量)

[推理 (inference)与训练的 FLOPS](#推理 (inference)与训练的 FLOPS)

容量和速度都重要

量化简介

权衡:准确性


显存需求估算:参数量经验法则

估算运行大型语言模型(LLM)所需的硬件可能看起来很复杂。一个直接的估算方法可以简化这一过程。决定内存需求的最主要因素,特别是图形处理单元(GPU)的显存(VRAM),是模型本身的规模,由其参数 (parameter)数量衡量。

可以把模型中的每个参数看作一个数字,需要存储在某个可用于计算的位置。由于GPU是运行LLM的主要计算设备(如第二章所述),这些参数主要加载到GPU的专用内存------显存中。

每个参数占用多少空间?这取决于存储时使用的精度数据类型。常见的精度类型包含:

  • FP32(单精度浮点): 每个参数占用32位,相当于4字节。这提供高精度,但需要更多内存。
  • FP16(半精度浮点): 每个参数占用16位,即2字节。这使得内存需求大约是FP32的一半,通常对推理 (inference)性能影响很小。
  • INT8(8位整数): 每个参数仅占用8位,即1字节。这能进一步大幅减少内存使用,但有时会导致模型准确性出现可察觉的下降。这通常通过一个称为量化 (quantization)的过程来实现(我们在第三章简要介绍过)。

最常见的估算起点假设模型将使用FP16精度运行,因为它在内存使用和性能之间提供了良好的平衡。

基本计算

基于此,我们可以建立一个简单的经验法则来估算仅加载模型参数 (parameter)所需的最小显存 (VRAM):

所需 显存 (GB)≈参数数量 (十亿)×每参数字节数10243 (字节/GB)所需显存(GB)≈10243(字节/GB)参数数量(十亿)×每参数字节数

然而,一个更简单的速算方法,尤其是对于FP16,常被使用:

所需 显存 (GB)≈参数数量 (十亿)×2 (FP16的字节数)所需显存(GB)≈参数数量(十亿)×2(FP16的字节数)

来看几个例子:

  1. 一个70亿参数模型(例如,Llama 2 7B):

    • 使用FP16精度(2字节/参数): VRAM≈7 十亿×2 字节=14 十亿 字节VRAM≈7十亿×2字节=14十亿 字节 VRAM≈14×10910243≈13.04 GBVRAM≈1024314×109≈13.04GB 因此,仅在FP16中容纳模型权重 (weight),您大约需要14 GB的显存。
    • 使用FP32精度(4字节/参数): VRAM≈7 十亿×4 字节=28 十亿 字节VRAM≈7十亿×4字节=28十亿 字节 VRAM≈28×10910243≈26.07 GBVRAM≈1024328×109≈26.07GB 以完整精度加载相同模型将需要约28 GB的显存。
    • 使用INT8精度(1字节/参数,量化 (quantization)后): VRAM≈7 十亿×1 字节=7 十亿 字节VRAM≈7十亿×1字节=7十亿 字节 VRAM≈7×10910243≈6.52 GBVRAM≈102437×109≈6.52GB 使用8位量化能大幅减少需求,大约降至7 GB的显存。

激活内存

估算大型语言模型(LLM)的内存需求涉及多个因素。模型参数 (parameter)是此估算中的一个主要组成部分。此外,另一个主要因素是激活所消耗的内存。当LLM处理您的输入(例如一个问题)并生成输出(例如一个回答)时,它会逐层执行大量的计算。这些计算的中间结果被称为激活。

可以把它想象成在白板上解决一个复杂的数学问题。模型参数就像您永久写下的已学公式和常数。而激活就像您在逐步计算最终答案时,在工作区临时记下的数字和结果。正如您需要在白板上留出空间来放置这些临时笔记一样,GPU在工作时也需要内存(显存 (VRAM))来存储这些激活。

激活占用显存 (VRAM)

神经网络 (neural network)中的每一层都会接收输入(可以是原始输入,也可以是来自上一层的激活),使用其参数 (parameter)进行处理,并生成新的激活作为下一层的输出。这些激活必须保留在内存中,直到它们在该特定处理步骤(通常称为"前向传播")的后续计算中不再被需要为止。

重要的是,激活所需的显存量不像模型参数那样是固定不变的。它是动态的,并且很大程度上取决于所执行任务的特点:

  1. 序列长度(上下文 (context)长度): 更长的输入提示或生成更长的响应,要求模型记录更多信息。这通常会导致激活尺寸更大,从而需要更多显存。想象一下,对于一个更长的问题,您需要在白板上保留更多的中间步骤。
  2. 批处理大小: 如果您同时处理多个输入序列(一个"批次")以提高效率,那么批次中每个 序列的激活都需要存储。运行批处理大小为4将比批处理大小为1大约需要四倍的激活内存。
  3. 模型架构: 大型语言模型的内部设计,例如层数、这些层的"宽度"(隐藏维度)以及使用的注意力机制 (attention mechanism),直接影响所生成激活的大小和数量。

键值(KV)缓存

在文本生成过程中,LLM通常顺序运行,根据前面的词元 (token)一次生成一个词元。为避免对已处理词元的重复计算,会使用一种名为键值(KV)缓存的技术。

模型会为序列中的每个词元计算某些内部状态(称为键和值,这与你可能听说过的注意力机制 (attention mechanism)有关)。KV缓存将这些状态存储在显存 (VRAM)中。生成下一个 词元时,模型会重复使用所有先前词元的缓存状态,从而节省大量计算时间。

然而,这个缓存会占用内存。其大小取决于:

  • 序列长度: 缓存大小与当前上下文 (context)中(输入+生成)的词元数量呈线性增长。更长的序列意味着更大的缓存。
  • 批处理大小: 批处理中的每个序列都需要自己的KV缓存。
  • 模型配置: 模型的隐藏层大小和注意力头数量决定了每个词元存储的键和值的大小。

对于长序列或大批处理,KV缓存会变得相当大,有时甚至能与模型权重 (weight)本身的大小相当。这是使用非常长的上下文窗口进行推理 (inference)时,显存需求远超基础模型大小所暗示值的一个主要原因。

关于权重 (weight)的考量

请记住,这些计算仅提供了模型权重的基准。您还需要额外的显存 (VRAM)用于:

  • 激活值: 推理 (inference)过程中执行的中间计算。所需量很大程度上取决于上下文 (context)长度(模型一次处理的文本量)和批处理大小(同时处理的请求数量)。
  • KV缓存: 存储关于正在生成的序列的信息,随生成文本的长度而增加。
  • 软件开销: 运行时环境、库(如CUDA)和操作系统都会占用一些显存。

推理 (inference)与训练的 FLOPS

需要注意的是,从头开始 训练 LLM 的计算需求比仅仅 运行 推理(使用预训练 (pre-training)模型)高出几个数量级。训练涉及反复处理大量数据集并调整所有模型参数 (parameter),需要长时间维持巨大的 FLOPS。

对于大多数用户的重点------推理,目标通常是获得足够快的响应以进行交互。虽然仍然是计算密集型任务,特别是对于大型模型,但所需的 FLOPS 远低于训练。然而,对于大型模型而言,拥有足够 FLOPS 能力的 GPU 对于流畅的用户体验仍然必不可少。

容量和速度都重要

LLM中的大量参数 (parameter)需要存储在GPU的显存(VRAM)中。然而,仅仅拥有足够的显存容量还不足够。数据在显存和GPU处理核心之间传输的速度 也格外重要。这种速度被称为内存带宽

在评估用于运行LLM的硬件时,显存 (VRAM)大小(容量)告诉您模型是否 能装下,但内存带宽(速度)则极大影响其运行速度。对于需要不断传输大量参数 (parameter)数据的大型语言模型,更高的内存带宽通常直接转化为更好的性能,体现在更快的响应时间或每秒生成更多词元 (token)上。这两个因素在为您的LLM需求选择GPU时都是重要的考量。

量化简介

量化的主要优势是内存占用减少。 如果你将模型从 FP16FP16(16位)量化到 INT8INT8(8位),你实际上可以将存储模型参数 (parameter)所需的显存 (VRAM)量减半。

  • 一个 FP16FP16 参数需要16位,即2字节。
  • 一个 INT8INT8 参数需要8位,即1字节。

权衡:准确性

量化 (quantization)听起来几乎完美无缺,那缺点是什么?主要权衡是模型准确性或性能的潜在损失 。通过降低参数 (parameter)的精度,你本质上是在近似原始模型。这种近似有时会导致输出质量略有下降、响应细节减少,或在某些复杂任务上的能力下降。

相关推荐
Bruce_Liuxiaowei17 分钟前
机器人的自由意志:约翰·麦卡锡《Free Will—Even for Robots》论文解读
人工智能·ai
阿里云大数据AI技术23 分钟前
使用 PAI ,一行命令跑起来云端 DeepSeek Agent
人工智能·agent·deepseek
hangzhouhuanyu24 分钟前
从培训到创业:AI工具在数字经济中的落地路径与避坑指南
大数据·人工智能
Lalolander26 分钟前
WorkBuddy App 怎么发起任务?输入栏与发送全流程
大数据·人工智能·金蝶erp·workbuddy
集芯微电科技有限公司30 分钟前
700V/17A高频开关低导通阻GaN HEMT驱动器适用于快充,LLC,PFC功率校正
人工智能·嵌入式硬件·深度学习·神经网络·机器学习·生成对抗网络·计算机外设
qq_252941316832 分钟前
窗户清洁检测数据集 | 窗户清洁检测 建筑运维 二分类任务 YOLO格式 深度学习数据集9019期
运维·人工智能·深度学习·yolo·目标检测·分类·窗户清晰度
落魄实习生36 分钟前
Spring AI Alibaba入门-生态集成
java·人工智能·spring
YOLO数据集集合36 分钟前
尼帕果实目标检测数据集 | 尼帕果实检测 农业视觉 热带作物 目标检测 YOLO格式9013期
人工智能·yolo·目标检测·机器学习·计算机视觉·农业果实
码视野41 分钟前
基于 Spring Boot + Vue3 的【高校化学实验室安全准入考试与危化品配伍排查系统】设计与实现(含PRD/三端高保真源码/大屏)
前端·人工智能·spring boot·后端·安全·vue3