Whisper是由OpenAI開發(fā)的一種通用語音識別模型,具備多語言語音識別、翻譯和語言檢測能力。該模型基于大規(guī)模多樣化的音頻數(shù)據(jù)進行訓練,能夠有效應對不同口音、背景噪聲及專業(yè)術語,在語音轉(zhuǎn)文本任務中表現(xiàn)出較高的準確性和魯棒性。
其支持多種音頻格式和實時處理特性,使其廣泛應用于語音交互、會議記錄、字幕生成、內(nèi)容審核等多個領域。Whisper的開源版本為語音技術的研究與應用提供了重要基礎,尤其在與邊緣計算設備(如搭載NPU的嵌入式芯片)結合時,可實現(xiàn)低延遲、高效率的端側語音處理,進一步拓展了其在物聯(lián)網(wǎng)、智能助理、遠程教育、跨境通信等場景中的實用價值。
Anaconda是一個流行的開源軟件包管理和環(huán)境管理系統(tǒng),用于科學計算、數(shù)據(jù)分析和大數(shù)據(jù)處理,特別是在Python環(huán)境中。它包含了許多常用的科學計算和數(shù)據(jù)分析的軟件包,并提供了一個方便的方式來管理這些軟件包的安裝、更新和環(huán)境配置。以下是Anaconda的主要特點和用途:
提供的虛擬機系統(tǒng)內(nèi)已預裝Python 3.10及RKNN-Toolkit 2.1.0,專為模型轉(zhuǎn)換與量化打造。若需使用其他版本Python或相關工具,推薦在虛擬機中另行安裝Anaconda以避免環(huán)境沖突。虛擬機系統(tǒng)來自“ELF 2開發(fā)板資料包”的“08-開發(fā)環(huán)境”路徑。
可通過以下兩種方式獲取安裝文件:
安裝步驟(上傳腳本至虛擬機后執(zhí)行):
# 賦予腳本執(zhí)行權限
elf@ubuntu:~$ chmod +x Miniconda3-4.7.12.1-Linux-x86_64.sh
# 執(zhí)行安裝腳本
elf@ubuntu:~$ ./Miniconda3-4.7.12.1-Linux-x86_64.sh
執(zhí)行腳本后按Enter鍵,輸入“yes”同意協(xié)議,設置安裝路徑后等待安裝完成。若出現(xiàn)硬件架構提示(如“Your machine hardware does not appear to be aarch64”),仍輸入“yes”繼續(xù)。
conda操作指令跨平臺(支持Linux/Windows),以下為虛擬機環(huán)境中的操作示范:
conda env list
執(zhí)行后將顯示已創(chuàng)建的虛擬環(huán)境及路徑,示例輸出:
(base) elf@ubuntu:~$ conda env list
# conda environments:
#
base /home/elf/miniconda3
conda create --name <虛擬環(huán)境名稱> python=<版本號>
示例(創(chuàng)建名為myenv、Python 3.10的環(huán)境):
conda create --name myenv python=3.10
說明:不指定Python版本時,將安裝Anaconda發(fā)行版默認版本。
conda activate <虛擬環(huán)境名稱>
示例(激活myenv環(huán)境):
(base) elf@ubuntu:~$ conda activate myenv
(myenv) elf@ubuntu:~$
說明:激活后安裝的包僅在當前環(huán)境可用,避免依賴沖突。
conda deactivate
說明:執(zhí)行一次退出當前環(huán)境(返回base環(huán)境),再次執(zhí)行退出base環(huán)境。
# 方式1:使用conda安裝(推薦,自動處理依賴)
conda install <包名>
# 方式2:使用pip安裝(conda無對應包時使用)
pip install <包名>
示例(安裝numpy):
conda install numpy 或 pip install numpy
conda env remove --name <虛擬環(huán)境名稱>
示例(刪除myenv環(huán)境):
elf@ubuntu:~$ conda env remove --name myenv
說明:將刪除指定環(huán)境及旗下所有安裝包。
創(chuàng)建并激活專為Whisper部署設計的虛擬環(huán)境:
# 創(chuàng)建虛擬環(huán)境(Python 3.10)
elf@ubuntu:~$ conda create --name RKLLM-Toolkit-pyth3.10 python=3.10
# 激活虛擬環(huán)境
elf@ubuntu:~$ conda activate RKLLM-Toolkit-pyth3.10
# 激活后終端提示(驗證)
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~$
RKNN-Toolkit2是瑞芯微電子開發(fā)的深度學習模型優(yōu)化與推理工具,支持Caffe、TensorFlow、PyTorch等框架的模型轉(zhuǎn)換為RKNN格式,提供模型轉(zhuǎn)換、量化、推理等功能。主要面向瑞芯微SoC的AI應用開發(fā),也可在PC平臺進行模型預處理操作。
需先將以下文件拷貝到虛擬機中:
文件獲取路徑:“ELF 2開發(fā)板資料包\03-例程源碼\03-4 AI例程源碼\rknn-toolkit2-2.1.0\rknn-toolkit2\packages”。
安裝步驟(在RKLLM-Toolkit-pyth3.10環(huán)境中執(zhí)行):
# 安裝依賴包(使用清華鏡像加速)
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/qwen2_vl$ pip install -r requirements_cp310-2.1.0.txt -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple some-package
# 安裝RKNN-Toolkit2
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/qwen2_vl$ pip install rknn_toolkit2-2.1.0+708089d1-cp310-cp310-linux_x86_64.whl -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple some-package
RKNN-Toolkit-Lite2是瑞芯微為輕量級NPU(神經(jīng)網(wǎng)絡處理單元)提供的工具包,專注于簡化深度學習模型在瑞芯微硬件平臺的部署與推理過程,相比RKNN-Toolkit2更適配輕量級應用和低計算需求場景。
需先將“rknn_toolkit_lite2-2.1.0-cp310-cp310-linux_aarch64.whl”拷貝到ELF 2開發(fā)板中,文件獲取路徑:“ELF 2開發(fā)板資料包\03-例程源碼\03-4 AI例程源碼\rknn-toolkit2-2.1.0\rknn-toolkit-lite2\packages”。
安裝步驟(在開發(fā)板終端執(zhí)行):
# 更新apt源
elf@elf2-desktop:~$ sudo apt-get update
# 安裝pip3
elf@elf2-desktop:~$ sudo apt-get install python3-pip
# 安裝RKNN-Toolkit-Lite2(使用清華鏡像加速)
elf@elf2-desktop:~$ pip install rknn_toolkit_lite2-2.1.0-cp310-cp310-linux_aarch64.whl -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple some-package
安裝驗證(啟動Python交互式環(huán)境導入庫):
# 啟動Python3
elf@elf2-desktop:~$ python3
# 查看Python版本(確認環(huán)境)
Python 3.10.12 (main, Nov 6 2024, 20:22:13) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
# 導入RKNNLite庫
>>> from rknnlite.api import RKNNLite
>>>
需使用瑞芯微提供的交叉編譯工具,否則編譯應用例程會報錯。工具包名稱:“gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.gz”。
下載后解壓至虛擬機指定路徑(如“/home/elf/work/”),后續(xù)編譯時需指定該工具路徑。
步驟如下:
# 解壓壓縮包
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work$ unzip rknn_model_zoo-2.1.0.zip
# 設置文件夾權限(避免后續(xù)操作權限不足)
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work$ chmod -R 755 rknn_model_zoo-2.1.0
# 進入whisper模型目錄
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work$ cd rknn_model_zoo-2.1.0/examples/whisper/model
# 執(zhí)行模型下載腳本
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/rknn_model_zoo-2.1.0/examples/whisper/model$ sh download_model.sh
腳本執(zhí)行完成后,將自動下載Whisper的encoder和decoder模型。
進入指定路徑,執(zhí)行轉(zhuǎn)換命令(將ONNX格式模型轉(zhuǎn)為RKNN格式,適配RK3588芯片):
# 進入whisper模型轉(zhuǎn)換腳本目錄
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work$ cd rknn_model_zoo-2.1.0/examples/whisper/python
# 轉(zhuǎn)換encoder模型
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/rknn_model_zoo-2.1.0/examples/whisper/python$ python3 convert.py ../model/whisper_encoder_base_20s.onnx rk3588
# 轉(zhuǎn)換decoder模型
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/rknn_model_zoo-2.1.0/examples/whisper/python$ python3 convert.py ../model/whisper_decoder_base_20s.onnx rk3588
模型轉(zhuǎn)換正常后,需編譯CPP例程并推送至開發(fā)板,步驟如下:
# 進入rknn_model_zoo根目錄
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work$ cd rknn_model_zoo-2.1.0
# 設置交叉編譯工具路徑(替換為實際解壓路徑)
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/rknn_model_zoo-2.1.0$ export GCC_COMPILER=/home/elf/work/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu
# 編譯whisper應用例程(適配rk3588芯片,aarch64架構)
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/rknn_model_zoo-2.1.0$ ./build-linux.sh -t rk3588 -a aarch64 -d whisper
編譯完成后,生成文件將保存在“rknn_model_zoo-2.1.0/install/rk3588_linux_aarch64/rknn_whisper_demo”路徑下,包含可執(zhí)行文件、庫文件、模型文件等。
將編譯生成的“rknn_whisper_demo”文件夾內(nèi)容拷貝到ELF 2開發(fā)板,注意:
在開發(fā)板終端進入部署目錄,執(zhí)行測試命令:
# 進入部署目錄
elf@elf2-desktop:~$ cd rknn_whisper_demo
# 執(zhí)行whisper推理 demo(格式:./可執(zhí)行文件 encoder模型路徑 decoder模型路徑 測試音頻路徑)
elf@elf2-desktop:~/rknn_whisper_demo$ ./rknn_whisper_demo model/whisper_encoder_base_20s.rknn model/whisper_decoder_base_20s.rknn model/test.wav
正常執(zhí)行后,終端將輸出模型輸入輸出信息、初始化耗時、推理耗時及最終識別結果,示例輸出:
model input num: 1, output num: 1
input tensors:
index=0, name=x, n_dims=3, dims=[1, 80, 2000], n_elems=160000, size=320000, fmt=UNDEFINED, type=FP16, qnt_type=AFFINE, zp=0, scale=1.000000
output tensors:
index=0, name=out, n_dims=3, dims=[1, 1000, 512], n_elems=512000, size=1024000, fmt=UNDEFINED, type=FP16, qnt_type=AFFINE, zp=0, scale=1.000000
-- init_whisper_encoder_model use: 72.816002 ms
model input num: 2, output num: 1
input tensors:
index=0, name=tokens, n_dims=2, dims=[1, 12], n_elems=12, size=96, fmt=UNDEFINED, type=INT64, qnt_type=AFFINE, zp=0, scale=1.000000
index=1, name=audio, n_dims=3, dims=[1, 1000, 512], n_elems=512000, size=1024000, fmt=UNDEFINED, type=FP16, qnt_type=AFFINE, zp=0, scale=1.000000
output tensors:
index=0, name=out, n_dims=3, dims=[1, 12, 51865], n_elems=622380, size=1244760, fmt=UNDEFINED, type=FP16, qnt_type=AFFINE, zp=0, scale=1.000000
-- init_whisper_decoder_model use: 238.526001 ms
-- read_mel_filters & read_vocab & read_audio use: 11.602000 ms
-- inference_whisper_model use: 1436.499023 ms
Whisper result: Mr. Quilter is the apostle of the middle classes and we are glad to welcome his gospel.
Real Time Factor (RTF): 1.436 / 5.855 = 0.245
