以前、DeepSpeedをwindowsにインストールしたので今回はそれを使って音声認識の速度比較をしてみようと思います。
比較用の音声認識モデルはrinna/nue-asrで、GPUはlaptop用のRTX 3080と4090を用意しました。
実験環境
OS : Windows 10 (11でも動作確認)
CUDA : 11.8
Visual C++ build tools : Visual Studio 2022 community
Python : 3.11.7 (3.10系でも動くそう, Anaconda環境下)
PyTroch : 2.1.1
Transformers : 4.35.2.
先にDeepSpeedをインストールした後にrinna/nue-asrのガイドに従ってモデルのインターフェースを落とします。
pip install git+https://github.com/rinnakk/nue-asr.git
データの用意
速度比較用のサンプルデータとして下記の動画の音声を使いました。(5分間)
今回見たいのは認識精度ではないので、取得した音声データを機械的に10sec毎で分割して認識モデルに入力するようにしました。
速度比較用コード
import nue_asr
import time
import glob
import re
def format_seconds(seconds):
mins, secs = divmod(seconds, 60)
return f"{mins:02d}:{secs:02d}"
files = glob.glob("*.wav")
model = nue_asr.load_model("rinna/nue-asr", use_deepspeed=True)
#model = nue_asr.load_model("rinna/nue-asr")
tokenizer = nue_asr.load_tokenizer("rinna/nue-asr")
secance_time = 0
speedData = []
for f in files:
start_time = time.time()
result = nue_asr.transcribe(model, tokenizer, f)
end_time = time.time()
speedData.append(end_time - start_time)
print("len {}, ave{}".format(len(speedData),sum(speedData)/len(speedData)))
結果
DeepSpeedの使用不使用に関わらずモデルのロードにRAMを20~23GB使用されます。
DeepSpeedをONにすると6割程度早くなりました。
DeepSpeed | GPU | 消費VRAM | 平均速度 (10secファイルの処理時間平均) |
---|---|---|---|
ON | RTX 4090 laptop | 8.8GB / 16GB | 0.42 msec |
OFF | RTX 4090 laptop | 8.0GB / 16GB | 0.65 msec |
OFF | RTX 3080 laptop | 7.8GB / 8GB | 3.89 msec |
DeepSpeedをonにするとモデルロード後に+0.8GB程度VARMが消費されます。
下図はタスクマネージャーのGPUパフォーマンス
