<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
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模型是一個很有價值的應用,可以實現各種語音任務,期待大家借助算能產品進行更多功能的開發。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 語音識別
    +關注

    關注

    38

    文章

    1650

    瀏覽量

    111894
  • 模型
    +關注

    關注

    1

    文章

    2775

    瀏覽量

    47873
  • 音頻數據
    +關注

    關注

    0

    文章

    11

    瀏覽量

    9957
收藏 人收藏

    評論

    相關推薦

    一文讀懂語言識別技術原理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 ?2792次閱讀

    一站式自動優化,思必馳&quot;千語千訓&quot;系統高效迭代語音識別模型

    ,滿足了多樣化的場景需求。 目前業界普遍采用的語音識別系統的核心主要由聲學模型、語言模型、解碼器三部分構成。語音
    的頭像 發表于 08-30 17:16 ?821次閱讀
    一站式自動<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 ?1094次閱讀

    語音識別技術優化與發展趨勢

    模型優化:針對模型結構的優化是提高語音識別技術的重要
    的頭像 發表于 10-12 18:33 ?496次閱讀

    語音識別技術在移動設備上的應用與優化

    隨著移動設備的普及和人工智能技術的發展,語音識別技術在移動設備上得到了廣泛應用。本文將探討語音識別
    的頭像 發表于 10-25 11:10 ?327次閱讀

    基于深度學習的情感語音識別模型優化策略

    基于深度學習的情感語音識別模型優化策略,包括數據預處理、模型結構優化、損失函數改進、訓練策略調
    的頭像 發表于 11-09 16:34 ?340次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>