【课程笔记】华为 HCIP-AI Solution Architect 人工智能08:人工智能模型部署介绍
人工智能模型部署介绍
目录
一、模型部署概述
(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 API或GRPC接口,使得用户可以方便地调用模型进行预测和推理
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):在模型中同时使用FP32和FP16的权重数值格式。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 cache和value 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) 分布式推理:并行处理机制,通过并行方式,降低每张显卡显存占用量,释放更多的算力,从而降低模型计算过程的时间
更多推荐



所有评论(0)