<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天內不再提示

FunASR語音大模型在Arm Neoverse平臺上的優化實踐流程

Arm社區 ? 來源:Arm社區 ? 2024-02-22 13:41 ? 次閱讀

Arm 架構在服務器領域發展勢頭前景看好。目前已有許多頭部云服務提供商和服務器制造商推出了基于 Arm Neoverse 平臺的服務器產品,例如 AWS Graviton、阿里云的倚天 710 系列等。這些廠商提供了完整的軟硬件支持和優化,使得大模型推理在基于 Arm 架構的服務器上運行更加便捷和高效。

Arm 架構的服務器通常具備低功耗的特性,能帶來更優異的能效比。相比于傳統的 x86 架構服務器,Arm 服務器在相同功耗下能夠提供更高的性能。這對于大模型推理任務來說尤為重要,因為大模型通常需要大量的計算資源,而能效比高的 Arm 架構服務器可以提供更好的性能和效率。

Armv9 新特性提高大模型推理的計算效率

Armv9 架構引入了 SVE2 (Scalable Vector Extension,可擴展向量延伸指令集)。SVE2 是一種可擴展的向量處理技術,它允許處理器同時執行多個數據元素的操作,可以提供更高效的向量計算和人工智能 (AI) 硬件加速,從而加快了 AI 任務的執行速度,提高了能效和性能。這對于在 Arm 架構的服務器上進行大規模 AI 推理和訓練任務非常有益,不論是實現更好的用戶體驗或是更高的計算效率。

SVE2 對 AI 推理引擎的支持有效地使用了 BFloat16 (BF16) 格式,BF16 是一種浮點數格式,它使用 16 位表示浮點數,其中 8 位用于指數部分,7 位用于尾數部分,還有 1 位用于符號位。相比于傳統的 32 位浮點數格式(如 FP32),BF16 在表示范圍和精度上有所減少,但仍然能夠滿足大多數 AI 推理任務的需求。

a998db7a-d13c-11ee-a297-92fbcf53809c.jpg

圖 1:BFloat16 格式

BF16 格式可以在減少存儲和帶寬需求之余,同時提供足夠的精度,來滿足大多數 AI 推理任務的要求。由于 SVE2 提供了針對 BF16 的向量指令,可以在同一條指令中同時處理多個 BF16 數據元素,從而提高計算效率。理論上來說,采用 BF16 可以實現雙倍的 FP32 的性能。

SVE2 的矩陣運算在 AI 推理中扮演著重要的角色,它可以顯著提高計算效率和性能。比如矩陣乘法 (Matrix Multiplication) 是許多 AI 任務中常見的運算,如卷積運算和全連接層的計算。SVE2 的向量指令可以同時處理多個數據元素,使得矩陣乘法的計算能夠以向量化的方式進行,從而提高計算效率。指令 FMMLA 可以實現 FP32 格式下兩個 2x2 矩陣乘法運算,指令 BFMMLA 可以通過單指令實現 BF16 格式下 4x2 矩陣和 2x4 矩陣的乘法,UMMLA、SMMLA 等可以實現 INT8 格式下 8x2 矩陣和 2x8 矩陣的矩陣乘法運算。通過 SVE2 的硬件加速功能,AI 推理可以在 Arm 架構中獲得更高效的矩陣運算執行,提高計算效率和性能。

a9abce92-d13c-11ee-a297-92fbcf53809c.png

圖 2:矩陣乘指令

ACL 實現 PyTorch 的計算加速

PyTorch 可以支持 Arm 架構的硬件加速資源,但需要安裝適用于 Arm 架構的 PyTorch 版本,或者是從開源源代碼編譯支持 Arm 架構硬件加速的 PyTorch 版本。Arm Compute Library (ACL, Arm 計算庫) 實現了 Arm 架構的硬件加速資源的優化封裝,通過 OneDNN 來使 PyTorch 對 Arm 優化加速調用。下面介紹如何生成帶 ACL 加速的 PyTorch 版本。

a9c5afd8-d13c-11ee-a297-92fbcf53809c.png

圖 3:Arm Neoverse 平臺 AI/ML 軟件組合

ACL 是開源軟件,下載后編譯并設定相應的系統路徑。

鏈接:https://github.com/arm-software/ComputeLibrary

# git clone https://github.com/ARM-software/ComputeLibrary.git

# scons arch=armv8.6-a-sve debug=0 neon=1 os=linux opencl=0 build=native -j 32 Werror=false

validation_tests=0 multi_isa=1 openmp=1 cppthreads=0 fixed_format_kernels=1

# export ACL_ROOT_DIR=/path_to_ACL/ComputeLibrary

開源軟件 OpenBLAS 也實現了部分 Neon 的加速,PyTorch 同樣也要依賴 OpenBLAS,下載相應源代碼編譯和安裝。

鏈接:https://github.com/OpenMathLib/OpenBLAS

# git clone https://github.com/OpenMathLib/OpenBLAS.git

# cmake & make & make install

獲取開源的 PyTorch 代碼,下載相應的依賴開源軟件,指定使能 ACL 的方法進行編譯,獲取 PyTorch 的安裝包并更新。

# git clone https://github.com/pytorch/pytorch

# git submodule update --init –recursive

# MAX_JOBS=32 PYTORCH_BUILD_VERSION=2.1.0 PYTORCH_BUILD_NUMBER=1 OpenBLAS_HOME=/opt/openblas

BLAS="OpenBLAS" CXX_FLAGS="-O3 -mcpu=neoverse-n2 -march=armv8.4-a" USE_OPENMP=1 USE_LAPACK=1 USE_CUDA=0

USE_FBGEMM=0 USE_DISTRIBUTED=0 USE_MKLDNN=1 USE_MKLDNN_ACL=1 python setup.py bdist_wheel

# pip install --force-reinstall dist/torch-2.x.x-cp310-cp310-linux_aarch64.whl

配置了運行環境,就可以利用 Arm 架構的硬件加速資源來加速 PyTorch 的計算。盡管 PyTorch 可以在 Arm 架構上利用硬件加速資源,但針對具體模型和應用場景,需要對模型和代碼進行一些調整以最大程度地發揮硬件的加速優勢。

基于 FunASR 的優化實踐

FunASR 是阿里巴巴達摩院開發的開源的基于 Paraformer 的大模型語音識別模型,提供包括語音識別 (ASR)、語音端點檢測 (VAD)、標點恢復、語言模型、說話人驗證、說話人分離和多人對話語音識別等在內的多種功能。本文以 FunASR 在 Arm Neoverse 平臺上優化的過程做為大模型的優化實踐案例。

倉庫地址:https://github.com/alibaba-damo-academy/FunASR

a9d9164a-d13c-11ee-a297-92fbcf53809c.png

圖 4:FunASR

本次優化是基于 ACL v23.08、oneDNN v3.3、PyTorch v2.1 進行,測試平臺基于阿里云的 ECS 公有云,包括 C8Y、C8I、C7 等云實例。

為了確保 PyTorch 已經啟動 ACL 進行加速,可以加上 “DNNL_VERBOSE=1” 來查看運行的日志輸出。

# OMP_NUM_THREADS=16 DNNL_VERBOSE=1 python runtimes.py

a9fdfca8-d13c-11ee-a297-92fbcf53809c.png

圖 5:使能 ACL 的 PyTorch 運行日志

得到如上的輸出結果,可以看到已經啟用了 ACL。

為了使優化有明確的目標,在運行大模型時,用 PyTorch 的 profiler 做整個模型的數據統計,即在調用大模型之前加上統計操作,為了減少單次運行的統計誤差,可以在多次運行之后做統計并輸出統計結果,如下面的示例:

aa1c9a14-d13c-11ee-a297-92fbcf53809c.jpg

默認運行是用 FP32 的格式,如果需要指定 BF16 的格式運行,需要加上 “ONEDNN_DEFAULT_FPMATH_MODE=BF16” 的參數。

# OMP_NUM_THREADS=16 ONEDNN_DEFAULT_FPMATH_MODE=BF16 python profile.py

得到 profile 的統計數據:

aa27300a-d13c-11ee-a297-92fbcf53809c.png

圖 6:統計分析日志

分析運行的結果,找出需要優化的算子,在這個示例中,mkldnn_convolution 運行的時間顯著較長。

aa481f86-d13c-11ee-a297-92fbcf53809c.jpg

圖 7:優化前統計分析

通過分析定位,發現在 OMP 的操作中,數據并沒有按照多處理器進行并行數據處理,修復問題后,再次測試,發現 Convolution 的效率大大提升。

aa6a77d4-d13c-11ee-a297-92fbcf53809c.jpg

圖 8:卷積優化后統計分析

在 Arm 架構處理器中,SVE2 可以對 INT8 進行并行數據處理,比如單指令周期可以做到 16 個 INT8 的乘累加操作,對 INT8 的執行效率非常高,在對模型執行效率有更高要求的場景下,可以用 INT8 來動態量化模型,進一步提高效率。當然,也可以把 INT8 和 BF16 相結合,模型用 INT8 量化,中間計算用 BF16 格式,相較其他平臺,有 1.5 倍的效率提升。

aa81fd5a-d13c-11ee-a297-92fbcf53809c.png

圖 9:動態量化優化

aa9b7398-d13c-11ee-a297-92fbcf53809c.png

圖 10:優化結果對比

綜上,通過充分利用 Armv9 架構中的 SVE2 指令、BF16 數據類型等特性,并引入動態量化等技術,能夠實現以 FunASR 為例的大模型在 Arm Neoverse 平臺的服務器上高效率運行。





審核編輯:劉清

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

    關注

    68

    文章

    18512

    瀏覽量

    223331
  • ARM
    ARM
    +關注

    關注

    134

    文章

    8708

    瀏覽量

    362609
  • 語音識別
    +關注

    關注

    38

    文章

    1650

    瀏覽量

    111894
  • pytorch
    +關注

    關注

    2

    文章

    766

    瀏覽量

    12877

原文標題:FunASR 語音大模型在 Arm Neoverse 平臺上的優化實踐

文章出處:【微信號:Arm社區,微信公眾號:Arm社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    ArmArm Neoverse計算子系統(CSS):Arm Neoverse CSS V3和Arm Neoverse CSS N3

    Arm宣布了兩款新的Arm Neoverse計算子系統(CSS),它們基于“迄今為止最好的一代Neoverse技術”。是什么讓這些新產品在擁擠的計算技術領域脫穎而出?
    的頭像 發表于 04-24 17:53 ?588次閱讀
    <b class='flag-5'>Arm</b>新<b class='flag-5'>Arm</b> <b class='flag-5'>Neoverse</b>計算子系統(CSS):<b class='flag-5'>Arm</b> <b class='flag-5'>Neoverse</b> CSS V3和<b class='flag-5'>Arm</b> <b class='flag-5'>Neoverse</b> CSS N3

    高通支持Meta Llama 3大語言模型在驍龍旗艦平臺上實現終端側執行

    高通和Meta合作優化Meta Llama 3大語言模型,支持在未來的驍龍旗艦平臺上實現終端側執行。
    的頭像 發表于 04-20 09:13 ?219次閱讀

    Google Cloud推出基于Arm Neoverse V2定制Google Axion處理器

    Arm Neoverse 平臺已成為云服務提供商優化其從芯片到軟件全棧的心儀之選。近日,Google Cloud 推出了基于 Arm
    的頭像 發表于 04-16 14:30 ?355次閱讀

    Arm發布新一代Neoverse數據中心計算平臺,AI負載性能顯著提升

    據公開信息顯示,Arm去年推出的Neoverse CSS運算子系統提供了包含處理器設計的預驗證平臺,加快了定制SoC上市進程,首發型號為Neoverse CSS N2。
    的頭像 發表于 02-22 14:48 ?310次閱讀

    Arm 更新 Neoverse 產品路線圖,實現基于 Arm 平臺的人工智能基礎設施

    新聞重點: Arm 宣布推出兩款基于全新第三代 Neoverse IP 構建的新的 Arm Neoverse 計算子系統 Arm
    發表于 02-22 11:41 ?149次閱讀

    Cadence 與 Arm 合作,成功利用 Cadence AI 驅動流程加速 Neoverse V2 數據中心設計

    內容提要 ● Cadence 優化了其 AI 驅動的 RTL-to-GDS 數字流程,并為 Arm Neoverse V2 平臺提供了相應的
    的頭像 發表于 09-05 12:10 ?3238次閱讀

    ARM Neoverse?N1核心技術參考手冊

    包括一個超標量、可變長度、無序的管道。 NeoverseDSU N1核心Dynamiq?共享單元(?)集群內實現。 有關更多信息,請參閱ARM?Dynamiq?共享單元技術參考手冊。 下圖顯示了具有四個Neoverse?N1核
    發表于 08-29 08:05

    Arm Neoverse? E1核心軟件優化指南

    組中的指令的操作所看到的最小延遲。 執行吞吐量定義為指定指令組整個Neoverse E1微體系結構中可以實現的最大吞吐量(以每周期的指令數為單位)。 同時Neoverse E1上運
    發表于 08-29 07:51

    ARM Neoverse?V1參考設計軟件開發人員指南

    CMN-650 CML鏈接的四個計算子系統組成。 它提供了一個四芯片系統的功能模型。 每個子系統包含四個ARM?Neoverse?V1核心,因此FVP中總共有16個核心。 有關更多信息,請參見第49頁的固定虛擬
    發表于 08-29 06:59

    Arm Neoverse? V2核心軟件優化指南

    本文檔描述了影響軟件性能的Neoverse V2核心微體系結構的各個方面。 微體系結構細節僅限于對軟件優化有用的細節。 文檔僅涉及Neoverse V2核心的軟件可見行為,而不涉及該行為背后的硬件原理
    發表于 08-24 06:29

    智能語音開放平臺選哪家,啟英泰倫提供硬件、軟件一體化開發服務

    語音誤識別初步測試時,只需上傳固件后選擇測試的語料集,10分鐘左右即可獲得識別測試結果。測試完成后會提供詳盡的測試報告,開發者可以根據報告再通過【語言模型優化】組件進行調優。 04標
    發表于 08-17 14:00

    Arm Neoverse? N1 PMU指南

    本文檔提供了Neoverse N1 PMU事件的高級描述。 對體系結構行為和Neoverse N1微體系結構行為的引用闡明了這些事件描述。 有關ARM架構的更完整描述,請參閱ARM?架
    發表于 08-12 07:10

    Arm Neoverse N1軟件優化指南

    本文檔提供了有關Neoverse N1管道、指令性能特征和特殊性能注意事項的高級信息。此信息旨在幫助優化Neoverse N1軟件和編譯器的人員。有關Neoverse N1處理器的更完
    發表于 08-11 06:56

    Arm Neoverse V1 PMU指南

    本文檔描述了不同性能監視器單元(PMU)事件的行為Neoverse V1。 Neoverse V1有六個可編程的32位計數器(計數器0-5),每個計數器計數器可以編程為本文檔中描述
    發表于 08-09 07:30

    ARM Neoverse N1 Core性能分析方法

    Arm Neoverse生態系統正在大幅增長,許多Arm硬件和軟件合作伙伴正在開發應用程序,并將其工作負載移植到基于Arm的云實例上。隨著基于Neo
    發表于 08-09 06:01
    亚洲欧美日韩精品久久_久久精品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>