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

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

3天内不再提示

重塑翻译与识别技术:开源语音识别模型Whisper的编译优化与部署

算能开发者社区 2024-01-06 08:33 次阅读

模型介绍

Whisper模型是一个由OpenAI团队开发的通用语音识别模型。它的训练基于大量不同的音频数据集,是一个多任务模型,可以执行语音识别、语言翻译、语言识别。下面是模型的整体架构:

31bd2894-ac2b-11ee-aa22-92fbcf53809c.png

使用方法如下:

31d4587a-ac2b-11ee-aa22-92fbcf53809c.png

通过修改TPU-MLIR编译器代码,可以对Whisper模型性能进行深度优化,使得模型在SOPHON BM1684X处理器上运行时间减少到原来的一半,本篇文章将带领大家对Whisper模型进行编译与优化,并完成实际应用的部署

优化方法

本次模型优化很具有典型性,不仅适用当前模型,对其他模型也有帮助,下面对相关的优化方法进行介绍

Tile算子转广播

模型转换完成后,观察Profile时序图和对应的MLIR文件,可以看到MatMulOp前面有两个Tile操作,通过复制数据来使数据shape对齐,并且耗时占用十分明显(如红框所示),实际上完全可以利用算子的广播功能实现,解决方法是使MatMulOp在hdim_is_batch的情况下支持n维度的广播 (形如:5x1x8x64@1x1500x8x64 )。

31e978ea-ac2b-11ee-aa22-92fbcf53809c.png31f9b840-ac2b-11ee-aa22-92fbcf53809c.png

KVCache动态转静态

由于模型结构是基于Transformer模型结构构建的,KVCache的使用是比较常见的,对于使用KVCache的模型,我们的做法是,将KVCache作为模型的输入和输出。但在推理过程中KVCache会不断增长,呈现一定的动态性,这就使得有一些数据需要PCIe重复搬运;内存管理比较复杂。通过padding将动态模型转换为输入和输出为固定大小的静态模型,并且在内部利用Slice和Concat算子自动完成数据拼接,减少外部内存处理复杂性,而且通过优化runtime过程避免多余的PCIe搬运。

3214dbac-ac2b-11ee-aa22-92fbcf53809c.png

Permute算子消除

完成上面两步优化后,通过观察Profile时序图和分析final.MLIR文件发现,这一部分的网络被分为了两个LayerGroup,之间还存在许多Global Layer,这些都会导致额外的数据搬运。追溯这一现象的原因,很大可能是由于Slice、Concat和Permute三种操作的存在阻断了LayerGroup的划分。而且Permute、Concat和Slice的GDMA操作带宽利用率低,浪费了较多时间。下面从这三个算子入手进行优化。

322c3130-ac2b-11ee-aa22-92fbcf53809c.png323ffbb6-ac2b-11ee-aa22-92fbcf53809c.png

在Transformer类的模型里,由于数据需要维度翻转整理,造成模型里有很多的Permute操作,但是通过算子的实现,一些运行前后的Permute是可以相互抵消的。如下图所示,MatMul算子输入和输出的Permut是可以消除的,主要步骤是将输入的Permute算子移动到输出,MatMul利用TPU指令的特性,实现转置的矩阵乘法,并在输出处与原来的Permute抵消掉。最终结果下图右侧所示。

325442ba-ac2b-11ee-aa22-92fbcf53809c.png

Slice+Concat算子融合

Slice和Concat本质上是将已经计算好但放置位置错误的结果进行截取或搬运。如果我们能提前知道结果应该放到哪里,就可以完全去掉这两种操作。下面是一个典型的Slice+Concat的Pattern。通过分析右图,可以看到为了将数据排到前面,Slice将Load后的数据进行搬运,之后Concat将MatMul的结果搬运到Slice后数据后面。其实这两次搬运如果提前知道了放置位置,是可以去掉的。

326bcf0c-ac2b-11ee-aa22-92fbcf53809c.png

下图示意了简单的优化方法,在Load操作中引入一个Offset参数,表示数据在Global中的偏移,相当于在Load时直接做Slice, 减少了重复数据搬运,另外直接将Concat的输出地址分配给Load,将数据直接写在Concat的输出地址,省去Concat的GDMA搬运时间。

327efdca-ac2b-11ee-aa22-92fbcf53809c.png

最终效果如下:

32917c0c-ac2b-11ee-aa22-92fbcf53809c.png

可以对比下优化前后的final.MLIR文件

323ffbb6-ac2b-11ee-aa22-92fbcf53809c.png32aa3abc-ac2b-11ee-aa22-92fbcf53809c.png

比较上面两图,可以看到Concat和Slice, Permute大部分都去掉了。从下面的Profile也可以看出明显的提升:

32c3c90a-ac2b-11ee-aa22-92fbcf53809c.png

优化结果

经过上述优化,模型的运行时间由原来的23.143ms变为13.589ms。为方便定量分析,下面提供了优化前后的算子性能统计结果。

优化前性能统计

32d66448-ac2b-11ee-aa22-92fbcf53809c.png

优化后性能统计

32e611fe-ac2b-11ee-aa22-92fbcf53809c.png

部署代码

部署代码目前已经开源(https://github.com/JKay0327/whisper-TPU_pyd)。本Whisper应用整体是由多个环节串联起来的,包括前处理、Encoder、Language Detect Decoder、以及主循环中的Decoder迭代过程。上面优化的主要是针对主循环中的Decoder模型进行的。具体运行过程如下图所示。

32fe7ae6-ac2b-11ee-aa22-92fbcf53809c.png

使用方法如下:330f722e-ac2b-11ee-aa22-92fbcf53809c.png

下面是实际的运行结果展示:3321113c-ac2b-11ee-aa22-92fbcf53809c.png

结论

本文是对在Whisper模型应用过程中的总结,说明了在模型优化过程中采用的各种思路和方法,最终将模型的性能翻倍。Whisper模型是一个很有价值的应用,可以实现各种语音任务,期待大家借助算能产品进行更多功能的开发。

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

    关注

    37

    文章

    1635

    浏览量

    111837
  • 模型
    +关注

    关注

    1

    文章

    2704

    浏览量

    47696
  • 音频数据
    +关注

    关注

    0

    文章

    11

    浏览量

    9950
收藏 人收藏

    评论

    相关推荐

    一文读懂语言识别技术原理1

    的孤立词识别取得实质性进展。到了1980年,语音识别技术已经从从孤立词识别发展到连续词识别,当时
    发表于 06-28 11:27

    基于labview的语音识别

    处理过程基本上是一致的。目前主流的语音识别技术是基于统计模式识别的基本理论。一个完整的语音识别
    发表于 03-10 22:00

    阿里开源自研语音识别模型DFSMN使用技巧指南

    重磅!阿里开源自研语音识别模型DFSMN,准确率高达9604%
    发表于 09-16 06:53

    语音识别的现状如何?

    语音识别技术的最重大突破是隐含马尔科夫模型Hidden Markov Model的应用。从Baum提出相关数学推理,经过Labiner等人的研究,卡内基梅隆大学的李开复最终实现了第一个
    发表于 10-08 14:29

    详解语音识别技术原理

    声音波形的一个个点了。下图是一个波形的示例。 在开始语音识别之前,有时需要把首尾端的静音切除,降低对后续步骤造成的干扰。这个静音切除的操作一般称为VAD,需要用到信号处理的一些技术。要对声音进行分析
    发表于 05-30 07:41

    【HarmonyOS HiSpark AI Camera】基于图像的手语识别机器人系统

    端微量部署优化,实现脱离电脑云,离线的情况下便捷的识别手语图像输入。⑤开源分享。预计成果①目前已经完成神经网络部分权重训练,根据OpenPose人体姿态
    发表于 09-25 10:11

    语音识别】你知道什么是离线语音识别和在线语音识别吗?

    很多都会问:我测X大讯飞的识别效果很好呀,为什么你们的不能达到这个效果呢?原因很简单,因为你所测试的是X大讯飞在线的语音识别模块,而我们的是离线的语音
    发表于 04-01 17:11

    语音识别技术的基本原理及应用是什么?

    语音识别技术的基本原理是什么?语音识别技术的应用是什么?
    发表于 05-31 06:50

    离线语音识别及控制是怎样的技术

    信号转化为文本或语义结果。  与传统的云端语音识别相比,离线语音识别的工作原理是将语音识别
    发表于 11-24 17:41

    语音识别技术,语音识别技术是什么意思

    语音识别技术,语音识别技术是什么意思  语音
    发表于 03-06 11:16 2785次阅读

    一站式自动优化,思必驰"千语千训"系统高效迭代语音识别模型

    ,满足了多样化的场景需求。 目前业界普遍采用的语音识别系统的核心主要由声学模型、语言模型、解码器三部分构成。语音
    的头像 发表于 08-30 17:16 796次阅读
    一站式自动<b class='flag-5'>优化</b>,思必驰&quot;千语千训&quot;系统高效迭代<b class='flag-5'>语音</b><b class='flag-5'>识别</b><b class='flag-5'>模型</b>

    语音识别技术的应用及优化

    一、引言 语音识别技术是一种能够让计算机“听懂”人类语言的技术。随着科技的不断发展,语音识别
    的头像 发表于 10-10 17:26 1012次阅读

    语音识别技术优化与发展趋势

    模型优化:针对模型结构的优化是提高语音识别技术的重要
    的头像 发表于 10-12 18:33 413次阅读

    语音识别技术在移动设备上的应用与优化

    随着移动设备的普及和人工智能技术的发展,语音识别技术在移动设备上得到了广泛应用。本文将探讨语音识别
    的头像 发表于 10-25 11:10 295次阅读

    基于深度学习的情感语音识别模型优化策略

    基于深度学习的情感语音识别模型优化策略,包括数据预处理、模型结构优化、损失函数改进、训练策略调
    的头像 发表于 11-09 16:34 260次阅读