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 推理任務的需求。
圖 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 架構中獲得更高效的矩陣運算執行,提高計算效率和性能。
圖 2:矩陣乘指令
PyTorch 可以支持 Arm 架構的硬件加速資源,但需要安裝適用于 Arm 架構的 PyTorch 版本,或者是從開源源代碼編譯支持 Arm 架構硬件加速的 PyTorch 版本。Arm Compute Library (ACL, Arm 計算庫) 實現了 Arm 架構的硬件加速資源的優化封裝,通過 OneDNN 來使 PyTorch 對 Arm 優化加速調用。下面介紹如何生成帶 ACL 加速的 PyTorch 版本。
圖 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
圖 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
圖 5:使能 ACL 的 PyTorch 運行日志
得到如上的輸出結果,可以看到已經啟用了 ACL。
為了使優化有明確的目標,在運行大模型時,用 PyTorch 的 profiler 做整個模型的數據統計,即在調用大模型之前加上統計操作,為了減少單次運行的統計誤差,可以在多次運行之后做統計并輸出統計結果,如下面的示例:
默認運行是用 FP32 的格式,如果需要指定 BF16 的格式運行,需要加上 “ONEDNN_DEFAULT_FPMATH_MODE=BF16” 的參數。
# OMP_NUM_THREADS=16 ONEDNN_DEFAULT_FPMATH_MODE=BF16 python profile.py
得到 profile 的統計數據:
圖 6:統計分析日志
分析運行的結果,找出需要優化的算子,在這個示例中,mkldnn_convolution 運行的時間顯著較長。
圖 7:優化前統計分析
通過分析定位,發現在 OMP 的操作中,數據并沒有按照多處理器進行并行數據處理,修復問題后,再次測試,發現 Convolution 的效率大大提升。
圖 8:卷積優化后統計分析
在 Arm 架構處理器中,SVE2 可以對 INT8 進行并行數據處理,比如單指令周期可以做到 16 個 INT8 的乘累加操作,對 INT8 的執行效率非常高,在對模型執行效率有更高要求的場景下,可以用 INT8 來動態量化模型,進一步提高效率。當然,也可以把 INT8 和 BF16 相結合,模型用 INT8 量化,中間計算用 BF16 格式,相較其他平臺,有 1.5 倍的效率提升。
圖 9:動態量化優化
圖 10:優化結果對比
綜上,通過充分利用 Armv9 架構中的 SVE2 指令、BF16 數據類型等特性,并引入動態量化等技術,能夠實現以 FunASR 為例的大模型在 Arm Neoverse 平臺的服務器上高效率運行。
審核編輯:劉清
-
處理器
+關注
關注
68文章
19286瀏覽量
229817 -
ARM
+關注
關注
134文章
9094瀏覽量
367541 -
語音識別
+關注
關注
38文章
1739瀏覽量
112656 -
pytorch
+關注
關注
2文章
808瀏覽量
13225
原文標題:FunASR 語音大模型在 Arm Neoverse 平臺上的優化實踐
文章出處:【微信號:Arm社區,微信公眾號:Arm社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論