0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

wenet的优化

jf_pJlTbmA9 来源:jf_pJlTbmA9 作者:jf_pJlTbmA9 2023-08-18 11:29 次阅读

wenet概述#

wenet处理流程#

wKgZomTeyZ-ALa7SAAEqdc2qTVM476.png

wav语音经过一系列前处理之后送入encoder,encoder的输出会给到ctc decoder和attention decoder。其中ctc decoder是深度优先的搜索程序,负责搜索出n段候选预测序列,然后ctc的结构与encoder的结果一起送入attention decoder进行预测序列的打分,选出最好的预测序列,输出结果

模型结构#

encoder#

wKgaomTeyaGANoGsAAK69w7W7co878.png

encoder是12个conformer模块堆叠

decoder#

wKgZomTeyaKAWDXwAAEnAKQVIqs107.png

decoder基本结构是transformer,先经过字的自注意力再和mel特征进行交叉注意力,wenet的decoder是双向decoder,有一个预测序列从左到右的打分,还一个从右到左的打分,每个decoder堆叠3个transformer(取决于训练时的配置文件,也可以是6个)

模型优化#

图优化#

结合netron观察模型图结构,考虑以下几个优化方向

删除冗余算子

算子融合

改变算子执行顺序

Where(MaskedFill)的优化#

wKgaomTeyaSAWoIsAAFcCwqRa6c404.png

这段网络是在做掩码操作,即输入一个掩码 Tensor对数据做Mask,第一个Where把不需要的数据设置为-inf。经过Softmax之后这些数据已经变成了0,但是后面又增加了一个Where,把相同位置再次设置为了0。

wKgZomTeyaWAcfanAACtJEluenk518.png

这段结构在网络中出现了12次,单Where算子耗时30 ms相当于多了一倍的计算时间,可以在编译阶段使用图优化进行消除,减少模型计算量。

耗时从30ms降低到15ms

MatMul的优化#

wKgZomTeyaeAEPc8AAJ5lfAzfvs517.png

1.这段结构在Decoder中出现6次,且属于计算集中的attention部分。但是C维度在transpose之后只有8,我们的TPU有64个lane,算力没有完全利用起来

2.有transpose隔断了layer group,增加了数据搬运

优化:

1.可以使用hdim_is_batch优化,把attention的head放在h维。为了保证网络变换前后等效,需要在matmul后面新生成一个transpose。

2.生成新的transpose之后,实现masked fill算子、softmax算子的transpose move down的优化pattern,使得tranpose的执行顺序可以放到该段结构结束处,同时与结束处原本有的tranpose做抵消,达到减少数据搬运的目的。

3.由于消除了transpose,使得这段网络可以做到local layer,同时因为把349放到c维度了,又可以充分利用64个lane的计算资源了

wKgZomTeyayAel42AAXTamGxFwg298.png

其余的算子经过transpose move down,可以实现transpose的一路下移,在局部网络中让C可以保持349,使得64个lane可以获得更充分的利用

算子层面优化#

Where(MaskedFill)的优化#

wKgaomTeya6AWz52AADcT8Oon-k569.png

MaskedFill如果全走Global耗时30ms,即便减少一半的算子数量还是15ms。而Select算子有local的实现,同时可以通过参数配置完成MaskedFill的功能,但不支持广播。所以在编译阶段加入Tile完成广播,从而支持Local Layer。

wKgaomTeya-AcNzRAACBcIJMIgQ887.png

但引入了Tile,Tile操作本身耗时3.8ms,代价可接受,后续可以进一步优化

wKgZomTeybCAJk57AAEuRK3GEhE470.png

MaskedFill算子从30ms 减半数量后到15ms,引入tile之后减少到3.8ms(Tile)+127us(MaskedFill)

后续考虑使用bdc完成tile操作,完成进一步优化

CPU Layer的优化#

wKgaomTeybKAPHY9AAG_G_CQhVo143.png

两个CPU Gather PT操作占用456ms,可以使用dma的Gather操作在TPU实现算子

wKgZomTeybOAIYa6AADikm9Wew4063.png

Gather PT算子从456ms减少到68us

优化结果#

WeNet Decoder 耗时
原始模型 611ms
CPU Layer替换 156ms
MaskedFill 减半 141ms
MatMul hdim_is_batch优化+Permute Move优化+MaskedFill支持Local 71ms


审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10824

    浏览量

    211108
  • 模型
    +关注

    关注

    1

    文章

    3160

    浏览量

    48703
  • 算子
    +关注

    关注

    0

    文章

    16

    浏览量

    7252
收藏 人收藏

    评论

    相关推荐

    UG编程:深入解析UG编程优化刀路,收获巨大#硬声创作季

    优化UGUG编程
    电子学习
    发布于 :2022年11月18日 20:33:34

    [7.2.1]--b)综合及优化_clip001

    IC设计优化
    jf_60701476
    发布于 :2022年11月26日 23:29:40

    [7.2.1]--b)综合及优化_clip002

    IC设计优化
    jf_60701476
    发布于 :2022年11月26日 23:30:42

    [7.2.1]--b)综合及优化_clip003

    IC设计优化
    jf_60701476
    发布于 :2022年11月26日 23:31:44

    04_异步V值更新优化算法实现D(2)#人工智能

    人工智能优化
    jf_49750429
    发布于 :2022年11月28日 02:44:58

    优化模型与Lindo/Lingo优化软件

    优化模型与Lindo/Lingo优化软件 优化模型简介 LINDO公司的主要软件产品及功能简介 LINDO软件的使用简介 LINGO软件的使用简介  建模与求解实例(结合软件使用
    发表于 09-15 12:22

    优化的度

    优化的度  网站优化的方法有很多,下面是一等一SEO教程学习网总结了一些内容,分享一下。在我们进行网站优化时,总会出现些优化过度而导致网站被降权,甚至被K站。那么怎么才能知道自己是否网
    发表于 11-13 15:21

    使用gcc编译优化与不优化问题

    同样的程序,使用gcc编译优化与不优化的结果不一代码如下:1. #include 2.3. int main()4. {5.int i = 1;6.7.i
    发表于 09-27 10:33

    MySQL优化之查询性能优化之查询优化器的局限性与提示

    MySQL优化三:查询性能优化之查询优化器的局限性与提示
    发表于 06-02 06:34

    什么是内存优化?有那些优化措施?

    什么是内存优化?有那些优化措施?
    发表于 01-14 06:22

    请问Transaction interval是否可以优化?如何优化

    的8bit中进行数据编码),只能每18bit或者27bit执行一次发送事务。在一次发送事务中,Transaction interval大约占了94.5%(20MHz SCLK见下图)。请问Transaction interval是否可以优化? 如何优化
    发表于 03-03 06:16

    优化Unity程序的方法

    优化是接受应用程序并使其更有效率的过程。对于图形应用程序,优化通常意味着修改应用程序以使其更快。例如,低帧率的游戏可能会显得跳跃,这会给人留下不好的印象,并可能使游戏难以玩。您可以使用优化来提高游戏
    发表于 08-02 18:52

    软件优化指南

    优化对不同的人意味着不同的事情。 在某些情况下,您可能只是希望代码尽可能快地运行。 但是,如果您正在为嵌入式系统编写代码,您可能更喜欢优化代码密度以减少应用程序的内存占用。 通常,这些优化约束相互
    发表于 08-28 06:41

    优化模型与LINDO/LINGO优化软件

    优化模型与LINDO/LINGO优化软件: 优化模型简介LINDO公司的主要软件产品及功能简介LINDO软件的使用简介LINGO软件的使用简介建模与求解实例(结合软件使用)
    发表于 09-24 09:04 23次下载

    利用NVIDIA Triton推理服务器加速语音识别的速度

    网易互娱 AI Lab 的研发人员,基于 Wenet 语音识别工具进行优化和创新,利用 NVIDIA Triton 推理服务器的 GPU Batch Inference 机制加速了语音识别的速度,并且降低了成本。
    的头像 发表于 05-13 10:40 1840次阅读