推理加速与部署
文章目录
- 推理加速与部署
- 服务级别的推理加速
- 模型级别的推理加速
- 量化
- 图优化
- kernel级别的推理加速
- GPU常见优化方式
- 特殊Kernel的优化方式
- 推理框架
- 可供学习的框架
-
最近学的有点杂,梳理一下我的个人体系,接下来我会花一定时间梳理下面这些东西:
-
我理解的推理加速分为三个层次:
- 服务级别的推理加速
- 模型级别的推理加速
- kernel级别的推理加速
-
目前推理部署框架/AI-Compiler解决的问题:
- 对于多种上游模型格式,需要做统一的加速,并且部署到下游多种目标设备上
服务级别的推理加速
- 目前我理解的服务级别的推理加速就是将加速好的模型(单模型推理加速)封装成一个服务,在整体的服务流程中,作为一个子节点存在,而此处的加速更多被看作一个服务调度的加速问题
- 有点类似于Java后端中的请求处理,多个模型之间如何调度能充分利用带宽和算力这么一个问题
- 或者分布式推理归于这一类?待学习
- TODO
模型级别的推理加速
- 目前我的理解是对单模型进行加速,当然这个层次包括了下面kernel级别的推理加速,也包括其他的推理加速手段,比如量化,图优化等
量化
- TODO
图优化
- TODO
kernel级别的推理加速
- 简单理解就是对kernel进行加速,在算力与访存一定的情况下,对某个kernel的计算存在一个理论峰值,kernel加速就是通过某种方法逼近这个极限,可以是搜出来的(比如TVM schedule),也可以是手搓kernel
- 对于性能要求没那么极限的kernel,可以用搜索,但是搜索的局限性就在于搜索空间/模式是人为定义的,一旦搜索空间不包括某种有效且特殊的优化方式,就必定搜不出来(就比如self-attention的gemm softmax gemm计算模式,schedule是一定搜不出flash attention的计算模式的),这时候就需要用到手动优化kernel了,目前业界可能更多是对kernel的手动针对性优化。
GPU常见优化方式
- TODO
特殊Kernel的优化方式
- Flash-Attention(2)
- TODO
推理框架
- TVM
- XLA
- Poros
- …
可供学习的框架
- kuiperinfer
- nndeploy