Transformer量化部署初步探讨

这篇博客探讨了Transformer模型在各领域的广泛应用及其部署挑战,主要介绍了四种模型部署方式:1) MNN,常见于手机端;2) TurboTransformers,提供专门的Transformer优化;3) TVM,通过指令集优化模型;4) ONNXRuntime,支持多种硬件并提供性能优化。文章强调了ONNXRuntime的广泛硬件支持和性能提升,并提到将进行不同框架的性能对比测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

随着transformer模型在各个领域大杀四方,包括我常接触的检测,追踪,语音识别等各种领域都取得了远超先辈的成就,因此,开始有越来越多的厂商讨论如何将transformer模型部署起来,但是我们都知道,由于transformer中有大量的matmul等操作,致使其计算量远超普通的cnn网络,给部署带来困难(这部分后面再说)。
综上考虑,我们大致介绍一下部署方面的点

Transformer模型部署方式

目前大家框架各种各样,据我了解总结下来大致分为这么几种:

1. mnn等

这种方式看到一篇写的不错也比较详细的文章:
记录使用 Swin Transformer主干网络去实现分类,并转化NCNN、TNN、MNN模型以及部署
但是这种方式更多的比较常用于手机等arm端,对于很多比如fpganpu等嵌入式场景支持比较少(只是比较少,不是不支持奥)

2. TurboTransformers

同样是腾讯开源的一款非常不错的工具,本人已经亲测了,各方面都还不错。
怎么说呢,turbotransformers可以说是一个专为transformer定制化的工具,我们都知道mnn这些工具都是首先把encoder转成matmul,softmax等一个个算子的组合,然后再顺序执行。
而turbotransformers可以简单理解为把整个encoder或者decoder等看成一整个算子(你可以简单这么理解哈哈),内部使用指令集及存取优化等对这个算子进行优化,这样就消除了算子与算子之间的延迟
图片来源:https://www.infoq.cn/article/zL6LPrUfXROrNAZDKaiV

说到这里就不得不说,TVM还是真的一个天才的想法,基本你看到这些turbotransformers都可以看成是autotvm的初始手工设计学习样本,但是他可以从中学习后碰到类似的自己推理出最优组合,或许图中这几个直接组合并不是最优呢,对吧

3. TVM

这种方式我还没试过,等实测与mnn的performance对比后再来补上

4. onnxruntime

下面介绍一个我当前正在使用的工具onnxruntime,当时之所以选择ort原因也比较简单,因为大部分框架都会选择onnx作为中间键,比如首先将torch等模型转到onnx后,再统一接到后端生成寄存器列表或者调用后端接口,那么既然我使用了onnx,就理所当然的去看了下对onnx支持最好的ort
使用ort有这么几个好处:

  1. 基本不会存在说一个onnx模型拿过来某些层不支持导致跑不起来这种说法,除非你有customer op
  2. 同样对于transformer有优化,onnxruntime-tools除了流程优化外,还会将其转成fp16以提升推理速度(众所周知,fp16精度与fp32基本相同)
  3. ort对于异构支持的还是比较好的,可以调用的硬件也就是providers非常多,arm,gpu,npu等等都支持,甚至可以接tvm,这样可以将ort当作callback实现器配合npu等使用可以省去许多工作量

performance对比

正在整合,计划半个月内完成

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值