人工智能模型部署介绍

目录

人工智能模型部署介绍

一、模型部署概述

二、大模型部署概述

三、大模型部署常见优化方式

1. 模型压缩

2. 计算加速


一、模型部署概述

(1) AI应用部署全流程

第一步:确定目标和任务

目标:自然语言处理、图像生成、图像判断、视频生成

自然语言处理分支

①判别式大模型(Encoder-only):序列标注、文本分类、意图识别

②生成式大模型(Decoder-only):文本生成、文案撰写

③翻译类大模型(Encoder-Decoder):语言翻译

④Decoder-only和Encoder-Decoder模型区别是什么?

-> encoder文本编码处理的操作(将文本语义进行提取),Decoder会根据encoder的语义进行处理,会有很大限制

-> Decoder-only根据之前的文本内容,进行后续token概率预测

第二步:收集和准备数据

L0通用大模型(涵盖互联网大部分信息,但是针对某个专业而言,效果不好)

①(预训练)爬虫数据、专业书籍、百科数据、交互平台的对话信息

L1行业大模型

①(微调,效果好,成本高)基于L0大模型的前提下,输入专业知识(问答对)

②(知识库RAG,有一定效果,成本相对较低)基于公司内部文档进行处理操作

第三步:选择合适的框架和工具

编程框架,智能体开发框架

算力工具

第四步:模型结构设计/选择

大模型选择:Deepseek(推理大模型),qianwen(通用大模型)

设备端:计算资源,数据量,训练时间因素 -> 并行化设计

第五步:模型训练/微调

如何检测训练、微调的效果,如何进行优化

第六步:模型性能评估与测试

根据实际项目场景,生成内容测试

第七步:应用开发与部署

效率:推理速度,token/s,10token/s用户体验感比较好,成本控制好

精度:用户反馈的效果

成本:在效率和精度的前提下,保证更低的部署成本

①理清业务逻辑

②明确部署策略

③推理API接口的实现

④推理指标的测定

⑤产品(Web/App等)页面的设计

第八步:模型持续优化和更新

L0:模型更新一版的大模型

L1:优化数据进行模型微调,更新知识库

(2) 模型部署过程中的优化技术和工具

在模型部署过程中,可以采用一些优化技术和方法来提高模型的性能、可靠性和安全性:

①通过模型压缩技术减小模型体积,减少计算资源消耗和存储资源占用

②通过模型加速技术提高推理速度

③通过容器化技术实现模型的快速部署和版本控制等

利用一些有用的工具来辅助模型部署任务:

①使用MindSpore Serving、TensorFlow Serving、ONNX Runtime等开源框架提供的部署服务

②利用Docker、Kubernetes等容器化技术实现模型的快速部署和管理

③借助Huawei Cloud、NVIDIA GPU Cloud等云服务提供商提供的AI计算资源等

(3) 部署方案:云端部署

云端部署是指将模型部署到云端计算资源商,用户通过网页访问或API接口调用等形式向云端服务器发出请求,云端服务器收到请求后处理并返回结果

云端部署优点:

①更高的计算能力:云计算平台通常具有大量的计算资源,扩展性强,可以满足AI大模型的高性能计算需求

②更好的资源利用率:云端部署可以实现资源的共享和合理分配,提高资源利用率

③更低的运维成本:云计算平台负责硬件和软件的维护和管理,降低了运维成本

④对功耗、温度、模型大小没有严格限制;模型更容易在云端得到保护;模型的执行平台和AI框架统一

⑤适用于大规模数据处理复杂计算场景

云端部署的问题:

①推理服务对网络依赖度高、数据运输成本也较高

②数据隐私问题

③很难定制化模型

举例:智能推荐、自动审核、在线翻译、AI滤镜、ChatGPT、Midjournry等

(4) 部署方案:边缘/端侧部署

边缘/端侧部署则主要用于嵌入式设备,通过将模型打包封装成SDK(software Developer kit软件开发工具包)形式,集成到嵌入式设备中,数据的处理和模型推理都在终端设备上执行

边缘/端侧部署优点:

①低延迟、高可靠性和较高的隐私保护

②设备体积小、功耗低

③适用于对实时性要求较高的场景

边缘/端侧部署的问题:

①严格约束功耗、热量,模型尺寸小于设备内存

②硬件算力较低

③数据分散且难以训练

④模型在边缘更容易受到攻击

⑤平台多样,无通用解决方案

举例:手机上的OCR功能、笑脸自动抓拍、人脸识别闸机等

(5) 部署方案:端云协同模式成为主流

端云协同:即终端和云端协同工具分流AI计算的工作负载

根据工作负载分流模式,有不同的云端混合模式:

①以终端为重心的混合AI,其中终端将充当锚点,用于实时推理,云端仅用于分流处理终端无法充分执行的任务以及模型的调优迭代

终端与云端协同处理的混合AI,终端用于采集数据并发送给云端,云端调用模型能力完成推理

(6) 模型部署方案特点总结

(7) 部署形态:Service部署和SDK部署

Service部署主要用于中心服务器云端部署,一般直接以训练的引擎库作为推理服务模式。通过提供RESTful APIGRPC接口,使得用户可以方便地调用模型进行预测和推理

SDK部署则主要用于嵌入式端部署场景,以C++、Python等语言实现一套高效的前后处理和推理引擎库。开发者可以将SDK集成到嵌入式设备中,实现模型的本地推理和实时响应

-> SDK是“开发工具包”,就像一套乐高积木,提供各种现成的模块,让开发者能快速搭建软件应用


总结

· 部署方案

①云端部署

优势:算力强大,扩展空间足

劣势:隐私保护存在问题,推理成本由运行商承担,受网络条件影响大

②端侧、边缘部署

优势:隐私保护强,实时性好

劣势:算力性能受限

③端云协同部署:折中方案,端侧处理部分信息,后续再交给云端做处理,降低网络传输的要求,同时降低云侧的计算压力

· 部署形态

①Service部署:云端部署方式,提供API接口,方便用于进行使用

②SDK部署(分为在线和离线两种方式):Software Developer Kit软件开发工具包,适应与端侧边缘部署,可以快速进行预测操作 -> SDK更多使用将模型打包的方式进行处理

二、大模型部署概述

(1) 大模型与小模型

小模型通常指参数较少层数较浅的模型,它们具有轻量级、高效率、易于部署等优点,适用于数据量较小、计算资源有限的场景,例如移动端应用、嵌入式设备、物联网等

大模型(Large Model,也称基础模型),是指具有大量参数复杂结构的机器学习模型,能够处理海量数据、完成各种复杂的任务。相比小模型,大模型通常参数较多、层数较深,具有更强的表达能力和更高的准确度,但也需要更多的计算资源和时间来训练和推理,适用于数据量较大、计算资源充足的场景,例如云端计算、高性能计算等

维度 大模型 小模型
架构分析 Transformer、扩散模型等架构实现的模型 传统CNN、RNN实现的人工智能模型
模型参数量 十亿级别 B Billion 百万级别 M Million
应用场景 应用范围广泛 单一功能
部署方式 云侧 云、端
功能 生成 判别

(2) 大模型推理显存

推理阶段通常比训练阶段需要更低的显存,因为不涉及梯度计算和参数更新等大量计算 -> 训练和推理的显存比一般为6:1

模型推理时所需显存的一些关键因素:

模型结构:模型的结构包含层数、每层的神经元数量、卷积核大小等。较深的模型通常需要更多的显存,因为每一层都会包含大量参数

输入数据:推理时所需的显存与输入数据的尺寸有关。更大尺寸的输入数据会占用更多的显存

批处理大小Batch Size:批处理大小是指一次推理中处理的样本数量。较大的批处理大小可能会增加显存使用,因为需要同时存储多个样本的计算结果

数据类型DType:使用的数据类型(如单精度浮点数、半精度浮点数)也会影响显存需求。较低精度的数据类型通常会减少显存需求

中间计算:在模型的推理过程中,可能会产生一些中间计算结果,这些中间结果也会占用一定的显存

三、大模型部署常见优化方式

1. 模型压缩

(1) 衡量模型推理速度的评估指标

首个词元生成时间(Time To First Token,简称TTFT):即用户输入查询后,模型生成第一个输出所需的时间

首个输出词元的生成时间(Time Per Output Token,简称TPOT):为每个查询系统的用户生成一个输出词元所需的时间。这一指标与每个用户对模型“速度”的感知相关。例如,TPOT为100毫秒/词元表示每个用户每秒可处理10个词元,或每分钟处理约450个词,这一速度远超普通人的阅读速度

-> 简单说:TPOT是“第一个字多久出来”,TTFT是“第一句话多久出来”

时延:模型为用户生成完整响应所需的总时间。整体响应时延可使用前两个指标计算得出:时延 = (TTFT) + (TPOT) * (待生成的词元数)

吞吐量:推理服务器在所有用户和请求中每秒可生成的输出词元数

性能 -> 速度 , 精度 -> 准确率

(2) 影响模型推理速度的因素

FLOPs(模型总的加乘运算):每秒进行浮点运算的次数 -> 参与运算的模型参数量,降低参数精度

MAC(内存访问成本) -> offload(CPU运算),infinity(显存转到内存)

并行度(模型推理时操作的并行度越高,速度越快) -> Zero-DP stage 3 数据并行的前提下,将模型参数拆分到不同计算节点

计算平台(NPU,GPU,CPU等)

(3) 模型量化

模型量化是指将神经网络的浮点算法转换为定点

低精度模型:表示模型权重数值格式为FP16(半精度浮点)或者INT8(8位的定点整数)

常规精度模型:一般表示模型权重数值格式为FP32(32位浮点,单精度)

混合精度(Mixed precision):在模型中同时使用FP32FP16的权重数值格式。FP16减少了一半的内存大小,但有些参数或操作符必须采用FP32格式才能保持准确度

模型量化的好处:

①减小模型尺寸,如8位整型量化可减少75%的模型大小

②减少存储空间,在边缘侧存储空间不足时更具有意义

③减少内存耗用,更小的模型大小意味着不需要更多的内存

④加快推理速度,访问一次FP32浮点型可以访问四次INT8整型,整型运算浮点型运算更快

⑤减少设备功耗,内存耗用少了,推理速度快了,自然减少了设备功耗

⑥支持微处理器,有些微处理器属于8位的,低功耗运行浮点运算速度慢,需要进行8bit量化

(4) 模型量化分类

按照量化方案的不同:

L1:data free,不使用校准集,直接将浮点参数转化成量化数,使用上非常简单,但是一般会带来很大的精度损失

L2:Calibration,基于校准集方案,通过输入少量真实数据进行统计分析。很多芯片厂商都提供这样的功能,如TensorRT、高通、海思、地坪线、寒武纪

L3:Finetune,基于训练finetune的方案,将量化误差在训练时仿真建模,调整权重使其更适合量化。好处是能带来更大的精度提升,缺点是要修改模型训练代码,开发周期较长

按照量化阶段的不同:

Post-training quantization:PTQ(训练后量化、离线量化) 

Quantization-Aware Fine-tuning:QAF(量化感知微调)

Quantization-aware training:QAT(量化感知训练,训练时量化,伪量化,在线量化)

按照量化公式的不同:

线性量化

非线性量化

(5) 模型量化原理

模型量化的原理就是定点浮点,建立了一种有效的数据映射关系

两个重要过程,一个是量化(Quantize),另一个是反量化(Dequantize)

①量化就是将浮点型实数量化为整型数(FP32 -> INT8)

②反量化就是将整型数转换为浮点型实数(INT8 -> FP32)

(6) 线性量化

(7) 对称量化和非对称量化

(8) 大模型量化算法举例:QLoRA

(9) 模型剪枝

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

剪枝可以分为非结构化剪枝结构化剪枝,两者的主要区别在于剪枝目标和由此产生的网络结构。结构化剪枝剪掉基于特定规则的连接或分层结构,同时保留整体网络结构。非结构化剪枝针对单个参数,会导致不规则的稀疏结构

(10) 模型剪枝的一般步骤

①训练初始模型:首先,需要训练一个初始的大模型,通常是为了达到足够的性能水平

②精准评估参数重要性:利用权重的绝对值梯度信息等方法,深入剖析模型各参数作用,为优化决策提供有力支撑

③剪枝:根据评估结果,剪掉不重要的参数或连接,可以是结构化的非结构化的

④修正和微调:进行剪枝后,需要进行一定的修正和微调,以确保模型的性能不会显著下降

(11) 非结构化剪枝

“非结构化稀疏”(Unstructured Sparsity)也叫细粒度稀疏,主要通过对权重矩阵中的单个或整行、整列的权重值进行修剪。修剪后的新权重矩阵会变成稀疏矩阵(被修剪的值会设置为0)

细粒度的剪枝会带来计算特征上的“不规则”,对计算设备中的数据访问和大规模并行计算非常不友好

(12) 大模型非结构化剪枝典型算法:SparseGPT算法

(13) 大模型非结构化剪枝典型算法:Wanda算法

(14) 结构化剪枝

“结构化稀疏”(Structured Sparsity)的基本修剪单元是卷积核权重矩阵的一个或多个Channel。由于结构化剪枝没有改变权重矩阵本身的稀疏程度,现有的计算平台和框架大都可以实现很好的支持

结构化稀疏(Structured Sparsity),在很多文献中也被称之为粗粒度稀疏(Coarse-grained Sparsity)或块稀疏(Block Sparsity)

(15) 大模型结构化剪枝典型算法:LLM-Pruner算法

(16) 低秩分解

(17) 大模型低秩分解典型算法:LoRAPrune

(18) 知识蒸馏

知识蒸馏(Knowledge Distillation,简称KD):把复杂模型或者多个模型Ensemble(Teacher)学到的知识迁移到另一个轻量级模型(Student)上,使模型变轻量的同时(方便部署)尽量不损失性能

知识蒸馏使用的是Teacher-Student模型,其中teacher是“知识”的输出者,student是“知识”的接受者

(19) 大模型知识蒸馏思路


总结

(1) 压缩目的:提升推理速度,那么,哪些因素会影响速度?

①FLOPs(模型综合的加成运算)

②MAC(内存访问成本)

③并行度(推理时,并行度越高,速度越快)

④计算平台(GPU,NPU,CPU)

(2) 模型压缩:量化通过修改精度进行调整;剪枝蒸馏是通过修改参数量进行处理

①量化:将Float类型转化为int类型的方式,将高精度数据处理,转化为低精度数据处理的方式

量化幅度

(1)低精度模型,使用int8或fp16进行处理的模型 -> 推理阶段

(2)常规精度模型,fp32精度级别处理 -> 学术类型训练

(3)混合精度模型,fp16、fp32混合训练操作方式

优势:减小模型尺寸,推理加速,降低模型能耗

模型量化方案

L1:Data Free,不需要数据的量化,精度相对较低 -> PTQ(训练后量化)

L2:基于校准集的方式,调整量化的数据 -> QAF(量化感知微调)

L3:Finetune,基于微调过程进行模型量化的处理过程

反量化:在训练过程提升训练的速度,到推理过程时,将低精度数据提升到高精度数据类型进行处理 -> 可以提升推理内容的准确度

②剪枝:将模型中贡献度不高的参数去除

剪枝方法

(1)分析参数的取值范围,越接近0的参数,效果越差,需要进行剪枝处理

(2)根据激活函数的效果,激活函数值越高,代表模型参数贡献度越大

(3)通过筛选部分的遮盖,分析哪些参数更重要

③蒸馏:将优秀的参数量大的模型作为老师模型,将它的知识传递给一个小参数量的模型进行处理的过程

2. 计算加速

(1) 显存优化之KV Cache

生成式generative模型的推理过程:给一个输入文本,模型会输出一个答案(长度为N),其实该过程执行了N次推理。即GPT类模型一次推理只输出一个token,输出token会与输入tokens拼接在一起,然后作为下一次推理的输入,这样不断反复知道遇到终止符

KV Cache技术实现了将可复用的键值向量结果保存下来,从而避免了重复计算

大模型推理性能优化的一个最常用技术就是KV Cache,该技术可以在不影响任何计算精度的前提下,通过空间换时间思想,提高推理性能。目前业界主流LLM推理框架均默认支持并开启该功能

-> KV Cache就像“记忆便签”:GPT每次生成一个词时,都需要回顾之前的所有词来计算当前结果。KV Cache把之前计算过的关键中间结果(Key/Value向量)存下来,下次生成新词时直接读取“便签”复用,避免重复计算

(2) KV Cache计算过程

KV Cache的引入使得推理过程分为如下两个不同阶段:

预填充阶段:发生在计算第一个输出token过程中,计算时需要为每个Transformer layer计算并保存key cachevalue cache;FLOPs同KV Cache关闭一致,存在大量GEMM操作,属于Compute-bound类型计算 -> 计算所有词的Key/Value并缓存,最耗时(Compute-bound),但为后续省时间

解码阶段:发生在计算第二个输出token至最后一个token过程中,这时KV Cache已存有历史键值结果,每轮推理只需读取Cache,同时将当前轮计算出的新的Key、Value追加写入至Cache;GEMM变为GEMV操作,FLOPs降低,推理速度相对预填充阶段变快,这时属于Memory-bound类型计算 -> 读取KV Cache,处理新加的当前词,速度飞快(Memory-bound)

(3) KV Cache存在问题

KV Cache是以空间换时间,当输入序列非常长的时候,需要缓存非常多K和V,显存占用非常多

(4) KV Cache改进

①共用KV cache:MQA,GQA

MQA(Multi Query Attention,多查询注意力)是多头注意力的一种变体。其主要区别在于,在MQA中不同的注意力头共享一个K和V的集合,每个头只单独保留了一份查询参数。因此K和V的矩阵仅有一份,这大幅度减少了显存占用,使其更高效

GQA(Grouped Query Attention,分组查询注意力)是一种介于多头注意力MQA之间的折中方案。它将查询头(Query Heads)分组,并在每组中共享一个键头(Key Head)和一个值头(Value Head)

MQA和GQA都是对标准多头注意力(MHA)的“瘦身”优化,通过共享K/V来减少计算量和显存占用:
MQA(多查询注意力)所有注意力头共享同一份K和V,只保留独立的Q(查询),显存占用最小,但可能降低精度 -> 全班共用一份答案
GQA(分组查询注意力)将注意力头分成几个小组,组内共享K和V,平衡了显存效率和模型性能 -> 小组内共用答案

MHA(标准版):每人独立查字典(Q/K/V全独立)→ 最准但最慢
MQA(极致精简):全班共用一本字典(K/V全共享)→ 最快但可能漏细节
GQA(折中方案):分小组共用字典 → 又快又相对靠谱

②窗口优化

③量化与稀疏

④存储与计算优化:Paged Attention

(5) 硬件选择

(6) 算子编译优化

(7) Continuous Batching

(8) 分布式推理

数据并行(DataParallel):将模型放在多个Node上,每个Node都包含完整的模型,将数据集切分成多份,每个Node负责推理一部分数据

张量并行(TensorParallel):将模型横向拆分,将模型的每一层拆分开,放到不同的Node上,每一层的计算都需要多个Node合作完成
-> 同一层拆开算(空间拆分):把每一层神经网络横向切成多块,不同机器各自计算一部分(比如一层的前半段在机器A,后半段在机器B),必须拼起来才能得到完整结果

流水线并行:流水线并行技术使得推理过程可以在多个Node上同时进行,从而减少了计算延迟
-> 不同层分开算(时间拆分):把神经网络的不同层分给不同机器(比如机器1算第1层,机器2算第2层),像工厂流水线一样逐层传递数据

(9) 推理工具


总结

· 计算加速

(1) KV Cache:通过牺牲显存容量,换取模型推理的速度 -> 虽然可以帮助换取推理速度,但是显存消耗也是非常大的

解决方案(根据多头注意力机制进行修改的方案,每个头没有独立QKV存在):

①MQA:全部的注意力头,共用一组KV矩阵,使用这样的方式,可以大幅度降低KV cache的显存量

②GQA:MQA与多头注意力机制折中版本,可以更具实现情况,添加KV矩阵的数量,可以在显存占用量计算精度之间进行抉择

(2) 算子编译优化:底层异构的路径,将QKV计算封装到一个算子中,计算过程中,仅调用一次算子,节省了算子调度的时间

(3) 分布式推理:并行处理机制,通过并行方式,降低每张显卡显存占用量,释放更多的算力,从而降低模型计算过程的时间

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐