作者:Arm 工程部主任軟件工程師 Alexey Vilkin 等
在邊緣側運行高質量的語音與音頻模型頗具挑戰,需滿足時延、內存、功耗和模型大小等多方面的嚴苛約束。不同于云端部署,邊緣側系統通常離線運行,需兼顧用戶隱私與可預測的實時性能。這些落地場景涵蓋端側語音轉文本、語音助手、語音控制的物聯網設備、工業人機界面,以及常開式音頻應用等諸多用例。
Conformer 模型結合卷積層與基于 Transformer 的自注意力機制,具備出色的語音識別精度。若要在嵌入式硬件上實現高效執行,需對量化與部署環節進行精細處理。
本文將展示一個涵蓋訓練、量化及在基于 Arm 架構的嵌入式平臺上部署 int8 Conformer 模型的端到端的工作流。通過使用 ExecuTorch 為模型進行量化,最終得以高效地部署到 Arm Ethos-U85 NPU 上。該演示表明基于 Transformer 架構的現代語音識別模型可以在 Arm 軟硬件生態系統中高效運行。
開發者可通過 Arm 固定虛擬平臺 (Fixed Virtual Platform, FVP) 仿真平臺來使用 Arm 機器學習嵌入式評估套件 (Machine Learning Embedded Evaluation Kit, MLEK)[1]體驗部署本演示。
[1] Arm MLEK: https://gitlab.arm.com/artificial-intelligence/ethos-u/ml-embedded-evaluation-kit
模型訓練
本演示選用了一個主流的開源 Conformer 模型。該模型是一個基于 Transformer 架構的語音識別網絡,適用于嵌入式設備。由于原模型未提供預訓練權重,我們首先訓練了一個性能良好的 FP32 基準模型,作為后續量化與部署到 Ethos-U85 的基礎。經過推理速度測試,我們最終選定 Conformer-S 架構,其采用 144 維編碼器、16 層網絡結構與 4 個注意力頭,并使用 CTC 損失函數完成語音轉文本的序列對齊。訓練所用的數據集為 LibriSpeech 標準訓練與評估子集。
我們采用了一個直接在 LibriSpeech 數據集上訓練的 SentencePiece 分詞器。它生成了一個包含 128 個詞元 (token) 的精簡詞表,使整個流程簡單、獨立運行、無需外部依賴。該分詞器采用 Unigram 模型實現,且在訓練與評估階段保持配置完全一致。
早期實驗中,我們曾采用僅包含英文字母的基礎字符級詞表訓練模型。該方案雖可正常運行,但模型收斂速度較慢,詞錯誤率 (WER) 也顯著增高。Subword 單元通過合并高頻詞素與短詞匯來縮短目標序列,既能引入適度的弱語言先驗,又能穩定 CTC 任務中聲學特征到詞元的映射關系,進而有效提升模型收斂速度與識別準確度。
在預處理階段,本流程以 16kHz 采樣率提取 80 維的對數梅爾頻譜圖。我們嘗試了多種數據增強方法,其中頻率遮擋、時間遮擋以及隨機語速擾動,在訓練過程中帶來了穩定的 WER 改進,使得模型識別結果更準確。
在初期實驗中,我們遇到了收斂問題,這類問題在 Conformer 類模型中較為常見。我們通過將批次大小與學習率調度方案對齊、并引入權重衰減以約束權重取值,成功地解決了該問題;同時權重衰減通常也能有效提升后續 int8 量化的精度。
在該配置下,模型在 test?clean 測試子集上取得了 6.43% 的詞錯誤率,我們將這一結果作為量化環節的 FP32 基準。經內部評估確認,該精度水平已滿足演示場景的需求,因此我們在此階段完成模型訓練。
Conformer-S 架構本身仍具備進一步優化的潛力。在后續迭代中,我們計劃將數據集拓展至 LibriSpeech 之外,并嘗試更豐富的數據增強方法。因為我們在訓練后期觀察到模型出現過擬合的早期跡象。為簡化實現,當前系統直接采用了 Conformer 的原始輸出。根據多項相關研究表明,引入一個輕量級語言模型(例如 N?gram 或小型 LSTM 等),可進一步降低詞錯誤率。
模型訓練過程中我們采用了動態長度的語音樣本,而端側推理時卻必須處理固定長度的音頻片段。我們對多種音頻切片的策略進行了評估驗證,結果表明:對重疊片段的預測結果進行聚合,能在精度與時延之間取得最優平衡。該方案使得系統能夠使用更短的音頻片段來實現實時推理,同時保持較高的識別水準。
訓練后量化 (PTQ)
我們采用 ExecuTorch 來進行模型的訓練后量化及后續部署。ExecuTorch 中的 Arm 后端已支持包括 Conformer 在內的數百種模型。模型部署流程如下:
第一步:通過 torch.export.export API 將模型導出至 ATen 算子集。
第二步:為實現在 Ethos-U85 NPU 上部署,使用 ExecuTorch 中的 Ethos-U 量化器對模型執行量化操作。Ethos-U 量化器的定義方式如下:
compile_spec = EthosUCompileSpec(
target="ethos-u85-256",
system_config="Ethos_U85_SYS_Flash_High",
memory_mode="Shared_Sram",
extra_flags=["--output-format=raw", "--debug-force-regor"],
)
quantizer = EthosUQuantizer(compile_spec)
config = get_symmetric_quantization_config(is_per_channel=True)
quantizer.set_global(config)
第三步:采用逐通道量化,以保證優異的 int8 精度。
quantized_graph_module = prepare_pt2e(graph_module, quantizer) # Annotate the graph with observers
print("Calibrating...")
for feats, feat_lens, *_ in calibration_loader:
quantized_graph_module(feats, feat_lens) # Pass true data, similar to what the model will see when running inference
quantized_graph_module = convert_pt2e(quantized_graph_module)
第四步:對模型進行校準。校準過程會在數據類型從 FP32 轉換為 int8 時,為每一層選取最優的量化參數。在 ExecuTorch 中,可按照以下步驟對模型進行校準:
partitioner = EthosUPartitioner(compile_spec)
edge_program_manager = to_edge_transform_and_lower(
quant_exported_program,
partitioner=[partitioner],
compile_config=EdgeCompileConfig(
_check_ir_validity=False,
),
)
第五步:調用 to_edge_transform_and_lower 函數,將神經網絡轉換下沉至 TOSA 格式,并完成模型編譯。
第六步:將程序轉換至 ExecuTorch 后端,并保存為 .pte 模型文件。
executorch_program_manager = edge_program_manager.to_executorch(
config=ExecutorchBackendConfig(extract_delegate_segments=False)
)
save_pte_program(
executorch_program_manager, f"conformer_quantized_{npu_variant}_{memory_mode}.pte"
)
借助 ExecuTorch 進行訓練后量化的完整代碼可在此[2]獲取。若不想自行執行訓練后量化操作,可在 Hugging Face 上獲取該模型的量化版本[3]。
[2] https://github.com/Arm-Examples/ML-examples/tree/main/pytorch-conformer-train-quantize/post_training_quantization
[3] https://huggingface.co/Arm/stt_en_conformer_executorch_small
將上述操作所生成的 .pte 文件保存至系統級芯片 (SoC) 的外部存儲器中。該文件包含模型權重、偏置以及供 NPU 使用的指令流。Ethos-U 會讀取此文件并自主完成推理。
在 Arm 平臺上部署
Arm MLEK 是部署與評估 Ethos-U85 的主要工具。通過與 ExecuTorch 集成,可實現在嵌入式目標平臺上高效地執行 PyTorch 模型。下圖展示了更新后的軟件棧,支持在 MLEK 中啟用 ExecuTorch 運行時。

圖:更新后的 MLEK 軟件架構:在共享抽象層下,實現 ExecuTorch 與 TensorFlow Lite Micro 的集成;可復用的平臺無關 API 支持各類示例用例跨框架、跨目標平臺運行。
MLEK 25.12 版本新增了對 ExecuTorch 1.0.0 的支持。在本次 Conformer 模型部署中,我們復用了現有的自動語音識別示例并完成適配,實現量化后的 Conformer 模型在 Ethos-U85 上的端到端運行。
在 Corstone?320 FVP 上運行演示
Arm 提供了一款示例應用,可借助 Arm Corstone-320 FVP,在 Ethos-U85 上運行預訓練的 Conformer 模型。請參照以下步驟:
第一步:確保已安裝前置依賴項:
Arm Corstone-320 FVP:
https://developer.arm.com/Tools%20and%20Software/Fixed%20Virtual%20Platforms/IoT%20FVPs
適用 AArch32 裸機環境的 Arm GNU 工具鏈:
https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
第二步:克隆并初始化 Arm MLEK 項目:
git clone https://gitlab.arm.com/artificial-intelligence/ethos-u/ml-embedded-evaluation-kit.git
cd ml-embedded-evaluation-kit
git checkout 9e9957c6
git submodule update --init --recursive
第三步:構建 Ethos-U85 項目:
python set_up_default_resources.py --parallel $(nproc) --ml-framework executorch --use-case asr
cmake -B build --preset mps4-320-gcc -DML_FRAMEWORK="ExecuTorch" -DUSE_CASE_BUILD="asr" -DETHOS_U_NPU_TIMING_ADAPTER_ENABLED="OFF"
cmake --build build -j $(nproc)
第四步:在 Corstone-320 FVP 上運行自動語音識別應用:
~/FVP_Corstone_SSE-320/models/Linux64_GCC-9.3/FVP_Corstone_SSE-320
-a build/bin/ethos-u-asr.axf
-C mps4_board.subsystem.ethosu.extra_args="--fast"
應用將對一組示例音頻片段開展語音檢測。推理運行期間,可視化界面會顯示輸入音頻的波形與生成的梅爾頻譜圖。系統會將梅爾頻譜圖數據填充至 15 秒時長,并作為輸入送入 Conformer 模型。

通過 Conformer 模型對應用內置的示例音頻片段進行語音檢測。在控制臺中,可查看模型當前使用的具體輸入音頻文件,以及輸入/輸出張量的形狀與內存占用等信息:
INFO - Number of input tensors: 2
INFO - Tensor: 480000 bytes; 120000 elements
INFO - Shape:[1, 1500, 80]
INFO - Type:fp32
INFO - Tensor: 4 bytes; 1 elements
INFO - Shape:[1]
INFO - Type:int32
INFO - Number of output tensors: 2
INFO - Tensor: 192984 bytes; 48246 elements
INFO - Shape:[1, 374, 129]
INFO - Type:fp32
INFO - Tensor: 4 bytes; 1 elements
INFO - Shape:[1]
INFO - Type:int32
INFO - Total memory usage:
INFO - Method memory: Used: 1080898; Peak: 1080898; Available: 2097152
INFO - Temp memory: Used: 0; Peak: 117; Available: 33554432
INFO - Model initialisation complete
INFO - Initialising audio interface: Static sample audio files
INFO - Using sample audio: another_door.wav
稍等片刻后,即可在控制臺中看到解碼后的輸出結果。
INFO - Decoded output: and he walked immediately out of the apartment by another door
源音頻文件位于 resources/asr/samples 目錄下,你可以播放這些音頻,并與控制臺輸出的解碼文本進行對比。界面中同樣會顯示性能相關數據。
性能評估
在前面章節中,我們在 FVP 的快速模式下運行了該應用。該模式有助于驗證功能,但其顯示的性能數據并不準確。若要獲取準確的性能指標,需關閉快速模式,重新構建并運行該應用。這個過程耗時較長,可能超過 1 小時。具體步驟如下:
# Build
rm-rf build
python set_up_default_resources.py --parallel $(nproc) --ml-framework executorch --use-case asr
cmake -B build --preset mps4-320-gcc -DML_FRAMEWORK="ExecuTorch" -DUSE_CASE_BUILD="asr"
cmake --build build -j $(nproc)
# Run
~/FVP_Corstone_SSE-320/models/Linux64_GCC-9.3/FVP_Corstone_SSE-320
-a build/bin/ethos-u-asr.axf
若按照上述步驟正確構建并運行應用,將看到類似于如下所示的性能指標:
INFO - NPU ACTIVE: 206370332 cycles
INFO - NPU ETHOSU_PMU_SRAM_RD_DATA_BEAT_RECEIVED: 13858306 beats
INFO - NPU ETHOSU_PMU_SRAM_WR_DATA_BEAT_WRITTEN: 7968438 beats
INFO - NPU ETHOSU_PMU_EXT_RD_DATA_BEAT_RECEIVED: 26978241 beats
INFO - NPU ETHOSU_PMU_EXT_WR_DATA_BEAT_WRITTEN: 18985466 beats
INFO - NPU IDLE: 724 cycles
INFO - NPU TOTAL: 206371056 cycles
控制臺輸出將展示多項性能指標。例如,NPU ACTIVE 指標用于統計 Ethos-U85 完成 Conformer 模型推理所消耗的時鐘周期數。我們所使用的 Conformer 模型,采用 15 秒音頻的固定輸入規格;當硬件系統主頻為 1.0 GHz 時,該性能數據表明,模型推理可在 0.206 秒內完成。MLEK 項目文檔中,詳細說明了各類性能計數器的具體含義,包括內存帶寬及時延配置相關指標。
結論與后續工作
本文展示了在 Arm 嵌入式平臺上,訓練、量化并部署 int8 Conformer 語音識別模型的端到端工作流。借助 ExecuTorch 與 Ethos-U85 NPU,我們驗證了基于 Transformer 架構的語音模型可在邊緣側高效運行,同時滿足嚴格的性能與功耗約束。這充分體現了 Arm 軟硬件生態系統賦能開發者,將性能卓越的語音與音頻模型落地到嵌入式設備中,且無需犧牲能效與識別精度。
歡迎各位開發者們點擊閱讀原文,進一步了解如何在 Arm 平臺上使用 ExecuTorch 部署優化后的 AI 工作負載,也可以使用 Arm MLEK 探索 Ethos-U 系列 NPU,優化邊緣側 AI 部署!
* 本文為 Arm 原創文章,轉載請留言聯系獲得授權并注明出處。
-
ARM
+關注
關注
135文章
9552瀏覽量
391817 -
嵌入式
+關注
關注
5198文章
20442瀏覽量
333961 -
模型
+關注
關注
1文章
3751瀏覽量
52097
原文標題:基于 Arm 平臺的端到端 int8 Conformer:訓練、量化及 Ethos-U85 上部署
文章出處:【微信號:Arm社區,微信公眾號:Arm社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
esp-dl int8量化模型數據集評估精度下降的疑問求解?
為什么無法在GPU上使用INT8 和 INT4量化模型獲得輸出?
INT8量化常見問題的解決方案
Xilinx INT8 優化開發嵌入式視覺
DSP48E2 Slice 上優化 INT8 深度學習運算分析
基于TensorRT完成NanoDet模型部署
Int8量化-ncnn社區Int8重構之路
探索ChatGLM2在算能BM1684X上INT8量化部署,加速大模型商業落地
基于Arm平臺的端到端int8 Conformer模型部署
評論