模型部署

推理阶段是大模型「服务化」和「产品化」的关键环节,并且推理通常是实时的、在线的,对延迟、吞吐量和资源消耗有较高要求。大模型的部署和应用过程中,通常需要很高的计算成本,内存访问和存储占用成本,在资源受限的场景中,推理效率也会大幅降低(如延迟、吞吐量,功耗和存储等问题),以致于严重影响大模型服务的可用性和稳定性。

(一)大模型推理部署过程

当前主流的大模型,即 decoder-only 架构的大模型通常采用自回归的方式生成输出语句,自回归的方式是逐token的进行输出。在每一次生成步中,大模型将过去的全部token序列作为输入,包括输入token以及刚刚生成的token,并生成下一个token。

    生成式大模型的推理可以分为两个阶段:Prefilling阶段 和 Decoding阶段。其中:

  • Prefilling:也称 Context阶段,大模型批量计算并存储原始输入Prompt中token的KV缓存,并生成第一个输出token。这一阶段属于计算密集型。

  • Decoding:也称 Generation阶段,大模型利用KV 缓存逐个生成下一个token,并用新生成的token的KV(键-值)对进行KV缓存的更新。这一阶段属于访存密集型,虽然每一轮 Generation 的计算量小于 Context 阶段,但是访存量相当。

image

(二)大模型部署成本

在资源受限的场景中,部署大模型并保持其推理效率以及性能对于工业界和科研及都是巨大的挑战。例如,对有700亿参数量的LLaMA-2-70B进行部署,以FP16数据格式对其权重进行加载需要140GB显存(VRAM),进行推理需要至少6张 RTX 3090Ti GPU(单卡显存24GB)或者2张NVIDIA的A100 GPU(单卡显存80GB)。在推理延迟方面,2张NVIDIA的A100 GPU上生成一个token需要100毫秒。因此,生成一个具有数百个token的序列需要超过10秒。除去内存占用和推理延迟,吞吐量以及能源电量的消耗都需要被考虑。

     大模型推理过程中,三个重要因素将很大程度上影响上述指标。计算成本(computational cost),内存访问成本(memory access cost)和内存使用(memory usage)。

     大模型推理低效率的根本原因需要关注三个关键因素:

  • Model Size:主流大模型通常包含数十亿甚至万亿的参数。例如,LLaMA-70B模型包括700亿参数,而GPT-3为1750亿参数。在推理过程中,模型大小对计算成本、内存访问成本和内存使用产生了显著影响。

  • Attention Operation:prefilling阶段中自注意操作的计算复杂度为输入序列长度的平方,因此输入长度的增加,计算成本、内存访问成本和内存使用都会显著增加。

  • Decoding Approach:自回归解码是逐token的进行生成。在每个decoding阶段,所有模型权重都来自于GPU芯片的片下HBM,导致内存访问成本巨大。此外,KV缓存随着输入长度的增长而增长,也可能导致内存分散和不规则内存访问。

(三)大模型推理评估指标

下图展示了提升推理效率的关键指标。对于横轴

  • 首字延迟:Latency(延迟,在预填充(prefilling)阶段,将first token latency记作生成第一个token的时间

  • 字间延迟:在decoding阶段,将per-output token latency记作生成一个token的平均时间

  • 整体延迟:此外,generation latency表示输出整个token序列的时间。

对于纵轴Memory(内存)

  • 最大内存占用:Peak Memory代表在生成工程中需要占用的最大内存。其大约为model size与KV cache size之和。

  • 模型大小:Model Size被用来表示存储模型权重所需要的内存大小

  • KV cache size:代表存储存储KV缓存的内存大小

  • image

     

大多数时候我们使用吞吐量和响应时间来度量一个系统。大体上可以这样理解:吞吐量关注系统整体性能,与系统的成本有关;响应时间关注单个请求,跟用户的体验有关。

  • 响应时间:

    • 整体延迟: 模型生成一次完整响应所需的总时间;

    • 首字延迟:Time To First Token (TTFT),即首个token生成的延迟。指的是当一批用户进入到推理系统之后,用户完成 Prefill 阶段的过程需要花多长时间。这也是系统生成第一个字符所需的响应时间。很多服务关注这一指标,希望用户在系统上输入问题后得到回答的时间小于 2~3 秒。

    • 字间延迟:Time Between Tokens (TBT),平均每个token的生成延迟;

  • 吞吐量:

    • Token Throughput:是指当系统的负载达到最大的时候,在单位时间内能够执行多少个 decoding,即生成多少个字符。单位:tokens/s 。

    • Request Throughput:系统最高负载时每秒能够完成的请求数,也即QPS。


推理部署优化

  • 简单介绍一下模型推理链路。模型输入(图片/文字/音频等)被输出预处理转化为矩阵/向量,再经过模型层(矩阵计算),最后生成预测的结果(向量)。

  • image

     

  • (一)并行技术

  • image

     

  • 当数据/模型太大,涉及并行技术,将数据/模型分配到不同的 GPU 上,增加资源利用率。

  • 1: 数据并行

image

在模型推理时,当数据集规模庞大时,为了充分利用多设备资源,将数据切成几部分,分别在不同的卡上进行推理。大规模的数据分到各个显卡上进行推理。

数据并行是最常见的并行形式,因为它很实现简单。
  • 数据切分:在数据并行训练中,一批数据集被分割成几部分,每部分被分配到一个设备上。

  • 模型完整:每个设备将持有一个完整的模型副本,并对分配的数据集部分进行推理。

  • 2: 张量并行

image

 

模型并行是不同设备负责单个计算图不同部分的计算。而将计算图中的层内的参数(张量)切分到不同设备(即层内并行),每个设备只拥有模型的一部分,以减少内存负荷,称之为张量模型并行。

  • 3: 流水线并行

image

随着模型参数量越来越大,单张卡已经无法装下完整的模型。此时将模型分成几部分,每个部分分别装载在不同的卡上进行推理,这往往是对模型不同的层进行切分。

(二)模型压缩

模型压缩是指通过一定的技术手段,在不改变模型推理效果的前提下,减小模型对于显存的占用。常见的模型压缩手段有 量化、剪枝、蒸馏(训练阶段压缩方法)等。

  1. 量化

模型参数的保存往往是 FP32 (表示范围为 [-2^{32}-1, 2^{32}-1])格式的,一个参数占用4字节。在推理时,当模型量化到8bit(表示范围 [-127,127]),就能让模型占用存储变成原来的 1/4。

  • image

最简单的方式,强行将模型按照 MinMax 的方式归一化到 [-127,127]。下图将模型从 FP32 强行量化成 INT8。可以看到,由于异常值(个别参数远远大于/小于其他参数)的出现,会导致大量的参数被量化成0。

image

INT8 量化就是将原来基于浮点型的 fp32 转化成 8bit 表示去计算,从而加快推理速度。

给定 FP16 的矩阵 X 和 W。

(1)异常通道计算:量化时检测到 X 的第2、4列为异常通道,将其剥离出来(同时权重 W 剥离出2,4行),计算时使用 fp16计算,计算结果                                    用 fp16表示。

(2)常规通道计算:其余通道按照int8的量化方式计算

  1. 计算最大值:计算 X 矩阵的每一行的绝对值的最大值 C_x和 W 的每一列的绝对值的最大值C_w。

  2. int8量化:将 X 和 W 量化到 INT8 的表示范围中X_{I8}和W_{I8}

  3. int8计算:计算 X_{I8} \cdot W_{I8}=Out_{I32}

  4. 反量化:将计算结果 Out_{I32}反量化成Out_{I16}。

(3)合并:最后常规通道和异常通道计算后的结果合并即为最终结果。

  1. 剪枝

模型剪枝(Pruning)也叫模型稀疏化,不同于模型量化对每一个权重参数进行压缩,稀疏化方法是尝试直接“删除”部分权重参数。模型剪枝的原理是通过剔除模型中「不重要」的权重,使得模型减少参数量和计算量,同时尽量保证模型的精度不受影响。

image

 

在大多数神经网络中,通过对网络层(卷积层或者全连接层)对权重数值进行直方图统计,可以发现,权重(训练前/训练后)的数值分布很像正太分布(或者是多正太分布的混合),且越接近于 0,权重越多,这就是权重稀疏现象。有论文认为,权重数值的绝对值大小可以看做重要性的一种度量,权重数值越大对模型输出贡献也越大,反正则不重要,删去后模型精度的影响应该也比较小。

即使是移除绝对值接近于 0 的权重也会带来推理精度的损失,因此为了恢复模型精度,通常在剪枝之后需要再训练模型。典型的模型剪枝三段式工作(训练、剪枝、微调) pipeline 流程和剪枝前后网络连接变化如下图所示。

image

 

推理技术方案及改进点

(一)基座模型替换成本大

由于Lora的原理,如果要将基座替换,那么所有部署的Lora都将重新训练,成本将会非常高。

解决方案

基座模型替换依赖于大模型自动迭代平台,离线对「线上基座模型」进行多风险场景的Lora微调,同时对「最新基座模型」也进行Lora微调(这里准备多个prompt),最后与线上指标进行「三方对比评估」,评估通过后直接进行线上替换。

image

 


(二)资源利用率低

目前线上推理方式如下,横坐标是时间,纵坐标是模型层,L表示模型的不同层,不同颜色表示不同batch的数据。如下图所示,同一时刻只有一层模型在推理,这样显然效率较低。

image

 

解决

一个解决方案是采用流水线并行方式,增加同一时刻的资源利用率(需要衡量不同GPU通信带来延迟问题)。

当第一批样本经过模型的第一层后,传入第二层时,第二批样本传入模型的第一层,显然,在同一时刻资源的利用率是增加的。

image

 







posted @ 2026-06-08 14:29  Adara  阅读(5)  评论(0)    收藏  举报