作者:Arm 工程部主任軟件工程師 Alexey Vilkin 等
在邊緣側(cè)運(yùn)行高質(zhì)量的語音與音頻模型頗具挑戰(zhàn),需滿足時(shí)延、內(nèi)存、功耗和模型大小等多方面的嚴(yán)苛約束。不同于云端部署,邊緣側(cè)系統(tǒng)通常離線運(yùn)行,需兼顧用戶隱私與可預(yù)測的實(shí)時(shí)性能。這些落地場景涵蓋端側(cè)語音轉(zhuǎn)文本、語音助手、語音控制的物聯(lián)網(wǎng)設(shè)備、工業(yè)人機(jī)界面,以及常開式音頻應(yīng)用等諸多用例。
Conformer 模型結(jié)合卷積層與基于 Transformer 的自注意力機(jī)制,具備出色的語音識別精度。若要在嵌入式硬件上實(shí)現(xiàn)高效執(zhí)行,需對量化與部署環(huán)節(jié)進(jìn)行精細(xì)處理。
本文將展示一個涵蓋訓(xùn)練、量化及在基于 Arm 架構(gòu)的嵌入式平臺上部署 int8 Conformer 模型的端到端的工作流。通過使用 ExecuTorch 為模型進(jìn)行量化,最終得以高效地部署到 Arm Ethos-U85 NPU 上。該演示表明基于 Transformer 架構(gòu)的現(xiàn)代語音識別模型可以在 Arm 軟硬件生態(tài)系統(tǒng)中高效運(yùn)行。
開發(fā)者可通過 Arm 固定虛擬平臺 (Fixed Virtual Platform, FVP) 仿真平臺來使用 Arm 機(jī)器學(xué)習(xí)嵌入式評估套件 (Machine Learning Embedded Evaluation Kit, MLEK)[1]體驗(yàn)部署本演示。
[1] Arm MLEK: https://gitlab.arm.com/artificial-intelligence/ethos-u/ml-embedded-evaluation-kit
模型訓(xùn)練
本演示選用了一個主流的開源 Conformer 模型。該模型是一個基于 Transformer 架構(gòu)的語音識別網(wǎng)絡(luò),適用于嵌入式設(shè)備。由于原模型未提供預(yù)訓(xùn)練權(quán)重,我們首先訓(xùn)練了一個性能良好的 FP32 基準(zhǔn)模型,作為后續(xù)量化與部署到 Ethos-U85 的基礎(chǔ)。經(jīng)過推理速度測試,我們最終選定 Conformer-S 架構(gòu),其采用 144 維編碼器、16 層網(wǎng)絡(luò)結(jié)構(gòu)與 4 個注意力頭,并使用 CTC 損失函數(shù)完成語音轉(zhuǎn)文本的序列對齊。訓(xùn)練所用的數(shù)據(jù)集為 LibriSpeech 標(biāo)準(zhǔn)訓(xùn)練與評估子集。
我們采用了一個直接在 LibriSpeech 數(shù)據(jù)集上訓(xùn)練的 SentencePiece 分詞器。它生成了一個包含 128 個詞元 (token) 的精簡詞表,使整個流程簡單、獨(dú)立運(yùn)行、無需外部依賴。該分詞器采用 Unigram 模型實(shí)現(xiàn),且在訓(xùn)練與評估階段保持配置完全一致。
早期實(shí)驗(yàn)中,我們曾采用僅包含英文字母的基礎(chǔ)字符級詞表訓(xùn)練模型。該方案雖可正常運(yùn)行,但模型收斂速度較慢,詞錯誤率 (WER) 也顯著增高。Subword 單元通過合并高頻詞素與短詞匯來縮短目標(biāo)序列,既能引入適度的弱語言先驗(yàn),又能穩(wěn)定 CTC 任務(wù)中聲學(xué)特征到詞元的映射關(guān)系,進(jìn)而有效提升模型收斂速度與識別準(zhǔn)確度。
在預(yù)處理階段,本流程以 16kHz 采樣率提取 80 維的對數(shù)梅爾頻譜圖。我們嘗試了多種數(shù)據(jù)增強(qiáng)方法,其中頻率遮擋、時(shí)間遮擋以及隨機(jī)語速擾動,在訓(xùn)練過程中帶來了穩(wěn)定的 WER 改進(jìn),使得模型識別結(jié)果更準(zhǔn)確。
在初期實(shí)驗(yàn)中,我們遇到了收斂問題,這類問題在 Conformer 類模型中較為常見。我們通過將批次大小與學(xué)習(xí)率調(diào)度方案對齊、并引入權(quán)重衰減以約束權(quán)重取值,成功地解決了該問題;同時(shí)權(quán)重衰減通常也能有效提升后續(xù) int8 量化的精度。
在該配置下,模型在 test?clean 測試子集上取得了 6.43% 的詞錯誤率,我們將這一結(jié)果作為量化環(huán)節(jié)的 FP32 基準(zhǔn)。經(jīng)內(nèi)部評估確認(rèn),該精度水平已滿足演示場景的需求,因此我們在此階段完成模型訓(xùn)練。
Conformer-S 架構(gòu)本身仍具備進(jìn)一步優(yōu)化的潛力。在后續(xù)迭代中,我們計(jì)劃將數(shù)據(jù)集拓展至 LibriSpeech 之外,并嘗試更豐富的數(shù)據(jù)增強(qiáng)方法。因?yàn)槲覀冊谟?xùn)練后期觀察到模型出現(xiàn)過擬合的早期跡象。為簡化實(shí)現(xiàn),當(dāng)前系統(tǒng)直接采用了 Conformer 的原始輸出。根據(jù)多項(xiàng)相關(guān)研究表明,引入一個輕量級語言模型(例如 N?gram 或小型 LSTM 等),可進(jìn)一步降低詞錯誤率。
模型訓(xùn)練過程中我們采用了動態(tài)長度的語音樣本,而端側(cè)推理時(shí)卻必須處理固定長度的音頻片段。我們對多種音頻切片的策略進(jìn)行了評估驗(yàn)證,結(jié)果表明:對重疊片段的預(yù)測結(jié)果進(jìn)行聚合,能在精度與時(shí)延之間取得最優(yōu)平衡。該方案使得系統(tǒng)能夠使用更短的音頻片段來實(shí)現(xiàn)實(shí)時(shí)推理,同時(shí)保持較高的識別水準(zhǔn)。
訓(xùn)練后量化 (PTQ)
我們采用 ExecuTorch 來進(jìn)行模型的訓(xùn)練后量化及后續(xù)部署。ExecuTorch 中的 Arm 后端已支持包括 Conformer 在內(nèi)的數(shù)百種模型。模型部署流程如下:
第一步:通過 torch.export.export API 將模型導(dǎo)出至 ATen 算子集。
第二步:為實(shí)現(xiàn)在 Ethos-U85 NPU 上部署,使用 ExecuTorch 中的 Ethos-U 量化器對模型執(zhí)行量化操作。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)
第三步:采用逐通道量化,以保證優(yōu)異的 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)
第四步:對模型進(jìn)行校準(zhǔn)。校準(zhǔn)過程會在數(shù)據(jù)類型從 FP32 轉(zhuǎn)換為 int8 時(shí),為每一層選取最優(yōu)的量化參數(shù)。在 ExecuTorch 中,可按照以下步驟對模型進(jìn)行校準(zhǔn):
partitioner = EthosUPartitioner(compile_spec)
edge_program_manager = to_edge_transform_and_lower(
quant_exported_program,
partitioner=[partitioner],
compile_config=EdgeCompileConfig(
_check_ir_validity=False,
),
)
第五步:調(diào)用 to_edge_transform_and_lower 函數(shù),將神經(jīng)網(wǎng)絡(luò)轉(zhuǎn)換下沉至 TOSA 格式,并完成模型編譯。
第六步:將程序轉(zhuǎn)換至 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 進(jìn)行訓(xùn)練后量化的完整代碼可在此[2]獲取。若不想自行執(zhí)行訓(xùn)練后量化操作,可在 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 文件保存至系統(tǒng)級芯片 (SoC) 的外部存儲器中。該文件包含模型權(quán)重、偏置以及供 NPU 使用的指令流。Ethos-U 會讀取此文件并自主完成推理。
在 Arm 平臺上部署
Arm MLEK 是部署與評估 Ethos-U85 的主要工具。通過與 ExecuTorch 集成,可實(shí)現(xiàn)在嵌入式目標(biāo)平臺上高效地執(zhí)行 PyTorch 模型。下圖展示了更新后的軟件棧,支持在 MLEK 中啟用 ExecuTorch 運(yùn)行時(shí)。

圖:更新后的 MLEK 軟件架構(gòu):在共享抽象層下,實(shí)現(xiàn) ExecuTorch 與 TensorFlow Lite Micro 的集成;可復(fù)用的平臺無關(guān) API 支持各類示例用例跨框架、跨目標(biāo)平臺運(yùn)行。
MLEK 25.12 版本新增了對 ExecuTorch 1.0.0 的支持。在本次 Conformer 模型部署中,我們復(fù)用了現(xiàn)有的自動語音識別示例并完成適配,實(shí)現(xiàn)量化后的 Conformer 模型在 Ethos-U85 上的端到端運(yùn)行。
在 Corstone?320 FVP 上運(yùn)行演示
Arm 提供了一款示例應(yīng)用,可借助 Arm Corstone-320 FVP,在 Ethos-U85 上運(yùn)行預(yù)訓(xùn)練的 Conformer 模型。請參照以下步驟:
第一步:確保已安裝前置依賴項(xiàng):
Arm Corstone-320 FVP:
https://developer.arm.com/Tools%20and%20Software/Fixed%20Virtual%20Platforms/IoT%20FVPs
適用 AArch32 裸機(jī)環(huán)境的 Arm GNU 工具鏈:
https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
第二步:克隆并初始化 Arm MLEK 項(xiàng)目:
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
第三步:構(gòu)建 Ethos-U85 項(xiàng)目:
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 上運(yùn)行自動語音識別應(yīng)用:
~/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"
應(yīng)用將對一組示例音頻片段開展語音檢測。推理運(yùn)行期間,可視化界面會顯示輸入音頻的波形與生成的梅爾頻譜圖。系統(tǒng)會將梅爾頻譜圖數(shù)據(jù)填充至 15 秒時(shí)長,并作為輸入送入 Conformer 模型。

通過 Conformer 模型對應(yīng)用內(nèi)置的示例音頻片段進(jìn)行語音檢測。在控制臺中,可查看模型當(dāng)前使用的具體輸入音頻文件,以及輸入/輸出張量的形狀與內(nèi)存占用等信息:
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
稍等片刻后,即可在控制臺中看到解碼后的輸出結(jié)果。
INFO - Decoded output: and he walked immediately out of the apartment by another door
源音頻文件位于 resources/asr/samples 目錄下,你可以播放這些音頻,并與控制臺輸出的解碼文本進(jìn)行對比。界面中同樣會顯示性能相關(guān)數(shù)據(jù)。
性能評估
在前面章節(jié)中,我們在 FVP 的快速模式下運(yùn)行了該應(yīng)用。該模式有助于驗(yàn)證功能,但其顯示的性能數(shù)據(jù)并不準(zhǔn)確。若要獲取準(zhǔn)確的性能指標(biāo),需關(guān)閉快速模式,重新構(gòu)建并運(yùn)行該應(yīng)用。這個過程耗時(shí)較長,可能超過 1 小時(shí)。具體步驟如下:
# 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
若按照上述步驟正確構(gòu)建并運(yùn)行應(yīng)用,將看到類似于如下所示的性能指標(biāo):
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
控制臺輸出將展示多項(xiàng)性能指標(biāo)。例如,NPU ACTIVE 指標(biāo)用于統(tǒng)計(jì) Ethos-U85 完成 Conformer 模型推理所消耗的時(shí)鐘周期數(shù)。我們所使用的 Conformer 模型,采用 15 秒音頻的固定輸入規(guī)格;當(dāng)硬件系統(tǒng)主頻為 1.0 GHz 時(shí),該性能數(shù)據(jù)表明,模型推理可在 0.206 秒內(nèi)完成。MLEK 項(xiàng)目文檔中,詳細(xì)說明了各類性能計(jì)數(shù)器的具體含義,包括內(nèi)存帶寬及時(shí)延配置相關(guān)指標(biāo)。
結(jié)論與后續(xù)工作
本文展示了在 Arm 嵌入式平臺上,訓(xùn)練、量化并部署 int8 Conformer 語音識別模型的端到端工作流。借助 ExecuTorch 與 Ethos-U85 NPU,我們驗(yàn)證了基于 Transformer 架構(gòu)的語音模型可在邊緣側(cè)高效運(yùn)行,同時(shí)滿足嚴(yán)格的性能與功耗約束。這充分體現(xiàn)了 Arm 軟硬件生態(tài)系統(tǒng)賦能開發(fā)者,將性能卓越的語音與音頻模型落地到嵌入式設(shè)備中,且無需犧牲能效與識別精度。
歡迎各位開發(fā)者們點(diǎn)擊閱讀原文,進(jìn)一步了解如何在 Arm 平臺上使用 ExecuTorch 部署優(yōu)化后的 AI 工作負(fù)載,也可以使用 Arm MLEK 探索 Ethos-U 系列 NPU,優(yōu)化邊緣側(cè) AI 部署!
* 本文為 Arm 原創(chuàng)文章,轉(zhuǎn)載請留言聯(lián)系獲得授權(quán)并注明出處。
-
ARM
+關(guān)注
關(guān)注
135文章
9552瀏覽量
391781 -
嵌入式
+關(guān)注
關(guān)注
5198文章
20434瀏覽量
333869 -
模型
+關(guān)注
關(guān)注
1文章
3749瀏覽量
52087
原文標(biāo)題:基于 Arm 平臺的端到端 int8 Conformer:訓(xùn)練、量化及 Ethos-U85 上部署
文章出處:【微信號:Arm社區(qū),微信公眾號:Arm社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
esp-dl int8量化模型數(shù)據(jù)集評估精度下降的疑問求解?
是否可以輸入隨機(jī)數(shù)據(jù)集來生成INT8訓(xùn)練后量化模型?
在OpenVINO?工具套件的深度學(xué)習(xí)工作臺中無法導(dǎo)出INT8模型怎么解決?
為什么無法在GPU上使用INT8 和 INT4量化模型獲得輸出?
INT8量化常見問題的解決方案
Xilinx INT8 優(yōu)化開發(fā)嵌入式視覺
DSP48E2 Slice 上優(yōu)化 INT8 深度學(xué)習(xí)運(yùn)算分析
基于TensorRT完成NanoDet模型部署
Int8量化-ncnn社區(qū)Int8重構(gòu)之路
探索ChatGLM2在算能BM1684X上INT8量化部署,加速大模型商業(yè)落地
Yolo系列模型的部署、精度對齊與int8量化加速
理想汽車自動駕駛端到端模型實(shí)現(xiàn)
基于Arm平臺的端到端int8 Conformer模型部署
評論