Arm 架構在服務器領域發(fā)展勢頭前景看好。目前已有許多頭部云服務提供商和服務器制造商推出了基于 Arm Neoverse 平臺的服務器產品,例如 AWS Graviton、阿里云的倚天 710 系列等。這些廠商提供了完整的軟硬件支持和優(yōu)化,使得大模型推理在基于 Arm 架構的服務器上運行更加便捷和高效。
Arm 架構的服務器通常具備低功耗的特性,能帶來更優(yōu)異的能效比。相比于傳統(tǒng)的 x86 架構服務器,Arm 服務器在相同功耗下能夠提供更高的性能。這對于大模型推理任務來說尤為重要,因為大模型通常需要大量的計算資源,而能效比高的 Arm 架構服務器可以提供更好的性能和效率。
Armv9 新特性提高大模型推理的計算效率
Armv9 架構引入了 SVE2 (Scalable Vector Extension,可擴展向量延伸指令集)。SVE2 是一種可擴展的向量處理技術,它允許處理器同時執(zhí)行多個數(shù)據(jù)元素的操作,可以提供更高效的向量計算和人工智能 (AI) 硬件加速,從而加快了 AI 任務的執(zhí)行速度,提高了能效和性能。這對于在 Arm 架構的服務器上進行大規(guī)模 AI 推理和訓練任務非常有益,不論是實現(xiàn)更好的用戶體驗或是更高的計算效率。
SVE2 對 AI 推理引擎的支持有效地使用了 BFloat16 (BF16) 格式,BF16 是一種浮點數(shù)格式,它使用 16 位表示浮點數(shù),其中 8 位用于指數(shù)部分,7 位用于尾數(shù)部分,還有 1 位用于符號位。相比于傳統(tǒng)的 32 位浮點數(shù)格式(如 FP32),BF16 在表示范圍和精度上有所減少,但仍然能夠滿足大多數(shù) AI 推理任務的需求。
圖 1:BFloat16 格式
BF16 格式可以在減少存儲和帶寬需求之余,同時提供足夠的精度,來滿足大多數(shù) AI 推理任務的要求。由于 SVE2 提供了針對 BF16 的向量指令,可以在同一條指令中同時處理多個 BF16 數(shù)據(jù)元素,從而提高計算效率。理論上來說,采用 BF16 可以實現(xiàn)雙倍的 FP32 的性能。
SVE2 的矩陣運算在 AI 推理中扮演著重要的角色,它可以顯著提高計算效率和性能。比如矩陣乘法 (Matrix Multiplication) 是許多 AI 任務中常見的運算,如卷積運算和全連接層的計算。SVE2 的向量指令可以同時處理多個數(shù)據(jù)元素,使得矩陣乘法的計算能夠以向量化的方式進行,從而提高計算效率。指令 FMMLA 可以實現(xiàn) FP32 格式下兩個 2x2 矩陣乘法運算,指令 BFMMLA 可以通過單指令實現(xiàn) BF16 格式下 4x2 矩陣和 2x4 矩陣的乘法,UMMLA、SMMLA 等可以實現(xiàn) INT8 格式下 8x2 矩陣和 2x8 矩陣的矩陣乘法運算。通過 SVE2 的硬件加速功能,AI 推理可以在 Arm 架構中獲得更高效的矩陣運算執(zhí)行,提高計算效率和性能。
圖 2:矩陣乘指令
ACL 實現(xiàn) PyTorch 的計算加速
PyTorch 可以支持 Arm 架構的硬件加速資源,但需要安裝適用于 Arm 架構的 PyTorch 版本,或者是從開源源代碼編譯支持 Arm 架構硬件加速的 PyTorch 版本。Arm Compute Library (ACL, Arm 計算庫) 實現(xiàn)了 Arm 架構的硬件加速資源的優(yōu)化封裝,通過 OneDNN 來使 PyTorch 對 Arm 優(yōu)化加速調用。下面介紹如何生成帶 ACL 加速的 PyTorch 版本。
圖 3:Arm Neoverse 平臺 AI/ML 軟件組合
ACL 是開源軟件,下載后編譯并設定相應的系統(tǒng)路徑。
鏈接: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 也實現(xiàn)了部分 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
配置了運行環(huán)境,就可以利用 Arm 架構的硬件加速資源來加速 PyTorch 的計算。盡管 PyTorch 可以在 Arm 架構上利用硬件加速資源,但針對具體模型和應用場景,需要對模型和代碼進行一些調整以最大程度地發(fā)揮硬件的加速優(yōu)勢。
基于 FunASR 的優(yōu)化實踐
FunASR 是阿里巴巴達摩院開發(fā)的開源的基于 Paraformer 的大模型語音識別模型,提供包括語音識別 (ASR)、語音端點檢測 (VAD)、標點恢復、語言模型、說話人驗證、說話人分離和多人對話語音識別等在內的多種功能。本文以 FunASR 在 Arm Neoverse 平臺上優(yōu)化的過程做為大模型的優(yōu)化實踐案例。
倉庫地址:https://github.com/alibaba-damo-academy/FunASR
圖 4:FunASR
本次優(yōu)化是基于 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
圖 5:使能 ACL 的 PyTorch 運行日志
得到如上的輸出結果,可以看到已經啟用了 ACL。
為了使優(yōu)化有明確的目標,在運行大模型時,用 PyTorch 的 profiler 做整個模型的數(shù)據(jù)統(tǒng)計,即在調用大模型之前加上統(tǒng)計操作,為了減少單次運行的統(tǒng)計誤差,可以在多次運行之后做統(tǒng)計并輸出統(tǒng)計結果,如下面的示例:
默認運行是用 FP32 的格式,如果需要指定 BF16 的格式運行,需要加上 “ONEDNN_DEFAULT_FPMATH_MODE=BF16” 的參數(shù)。
# OMP_NUM_THREADS=16 ONEDNN_DEFAULT_FPMATH_MODE=BF16 python profile.py
得到 profile 的統(tǒng)計數(shù)據(jù):
圖 6:統(tǒng)計分析日志
分析運行的結果,找出需要優(yōu)化的算子,在這個示例中,mkldnn_convolution 運行的時間顯著較長。
圖 7:優(yōu)化前統(tǒng)計分析
通過分析定位,發(fā)現(xiàn)在 OMP 的操作中,數(shù)據(jù)并沒有按照多處理器進行并行數(shù)據(jù)處理,修復問題后,再次測試,發(fā)現(xiàn) Convolution 的效率大大提升。
圖 8:卷積優(yōu)化后統(tǒng)計分析
在 Arm 架構處理器中,SVE2 可以對 INT8 進行并行數(shù)據(jù)處理,比如單指令周期可以做到 16 個 INT8 的乘累加操作,對 INT8 的執(zhí)行效率非常高,在對模型執(zhí)行效率有更高要求的場景下,可以用 INT8 來動態(tài)量化模型,進一步提高效率。當然,也可以把 INT8 和 BF16 相結合,模型用 INT8 量化,中間計算用 BF16 格式,相較其他平臺,有 1.5 倍的效率提升。
圖 9:動態(tài)量化優(yōu)化
圖 10:優(yōu)化結果對比
綜上,通過充分利用 Armv9 架構中的 SVE2 指令、BF16 數(shù)據(jù)類型等特性,并引入動態(tài)量化等技術,能夠實現(xiàn)以 FunASR 為例的大模型在 Arm Neoverse 平臺的服務器上高效率運行。
審核編輯:劉清
-
處理器
+關注
關注
68文章
19548瀏覽量
231872 -
ARM
+關注
關注
134文章
9217瀏覽量
371162 -
語音識別
+關注
關注
38文章
1761瀏覽量
113299 -
pytorch
+關注
關注
2文章
808瀏覽量
13514
原文標題:FunASR 語音大模型在 Arm Neoverse 平臺上的優(yōu)化實踐
文章出處:【微信號:Arm社區(qū),微信公眾號:Arm社區(qū)】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
利用Arm Kleidi技術實現(xiàn)PyTorch優(yōu)化

HAL庫在Arduino平臺上的使用
Arm Neoverse如何加速實現(xiàn)AI數(shù)據(jù)中心
【實操文檔】在智能硬件的大模型語音交互流程中接入RAG知識庫
深度學習算法在嵌入式平臺上的部署
ARM進軍汽車芯片市場,推出Neoverse設計
【大語言模型:原理與工程實踐】大語言模型的評測
【大語言模型:原理與工程實踐】探索《大語言模型原理與工程實踐》2.0
【大語言模型:原理與工程實踐】探索《大語言模型原理與工程實踐》
Arm新Arm Neoverse計算子系統(tǒng)(CSS):Arm Neoverse CSS V3和Arm Neoverse CSS N3

高通支持Meta Llama 3大語言模型在驍龍旗艦平臺上實現(xiàn)終端側執(zhí)行
Google Cloud推出基于Arm Neoverse V2定制Google Axion處理器
Arm Neoverse CSS V3 助力云計算實現(xiàn) TCO 優(yōu)化的機密計算

Arm首次面向汽車應用發(fā)布Neoverse級芯片設計
Neoverse CSS V3助力云計算實現(xiàn)TCO優(yōu)化的機密計算

評論