WhisperをWSL2で動かそうとしたらCUDA errorが出た際の対処作業メモ
元ネタ
はじめに
OpenAIが発表した音声認識モデルをGPU付きのローカルのWSL2で動かそうとしてCUDA errorが出た対処の作業メモです。
手軽にWhisperを動かしたいだけならGoogle Colabで動くので
上記のブログ等を参考に手を動かしてみると早いです。ほんとWhisperすごい。
本ページではローカルのWSL2で動かしたときに遭遇したエラーへの対処を書きます。
環境
環境作成
今回はvenvを利用して環境を作りました。
$ mkdir whisper_run $ cd whisper_run $ python3 -m venv whisper_test $ source ./whisper_test/bin/activate
ドライバ、CUDA Toolkitのアップデート
公式からたどって最新にしておきました。
Whisperのインストール
公式
こちらも公式にしたがいます。
$ pip install git+https://github.com/openai/whisper.git $ sudo apt update && sudo apt install ffmpeg
音声ファイルの準備
今回テスト用に『青空朗読』から音声ファイルをお借りしました。
※音声ファイルはダウンロードできますが、フリー音源ではないのでご注意ください
テストコード
これも公式から。
import whisper model = whisper.load_model("small") result = model.transcribe("rd745.mp3") print(result["text"])
公式からmodelとファイル名を書き換えてます。 上記をsample.pyとして保存。
実行
$ python3 sample.py
実行結果(エラー)
$ python3 sample.py Traceback (most recent call last): File "/home/yiw/dev/whisper_run/sample.py", line 4, in <module> result = model.transcribe("rd745.mp3") File "/home/yiw/dev/whisper_run/whisper_test/lib/python3.10/site-packages/whisper/transcribe.py", line 88, in transcribe _, probs = model.detect_language(segment) File "/home/yiw/dev/whisper_run/whisper_test/lib/python3.10/site-packages/torch/autograd/grad_mode.py", line 27, in decorate_context return func(*args, **kwargs) File "/home/yiw/dev/whisper_run/whisper_test/lib/python3.10/site-packages/whisper/decoding.py", line 43, in detect_language mel = model.encoder(mel) File "/home/yiw/dev/whisper_run/whisper_test/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1130, in _call_impl return forward_call(*input, **kwargs) File "/home/yiw/dev/whisper_run/whisper_test/lib/python3.10/site-packages/whisper/model.py", line 156, in forward x = block(x) File "/home/yiw/dev/whisper_run/whisper_test/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1130, in _call_impl return forward_call(*input, **kwargs) File "/home/yiw/dev/whisper_run/whisper_test/lib/python3.10/site-packages/whisper/model.py", line 127, in forward x = x + self.mlp(self.mlp_ln(x)) File "/home/yiw/dev/whisper_run/whisper_test/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1130, in _call_impl return forward_call(*input, **kwargs) File "/home/yiw/dev/whisper_run/whisper_test/lib/python3.10/site-packages/torch/nn/modules/container.py", line 139, in forward input = module(input) File "/home/yiw/dev/whisper_run/whisper_test/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1130, in _call_impl return forward_call(*input, **kwargs) File "/home/yiw/dev/whisper_run/whisper_test/lib/python3.10/site-packages/whisper/model.py", line 36, in forward return F.linear( RuntimeError: CUDA error: CUBLAS_STATUS_EXECUTION_FAILED when calling `cublasGemmEx( handle, opa, opb, m, n, k, &falpha, a, CUDA_R_16F, lda, b, CUDA_R_16F, ldb, &fbeta, c, CUDA_R_16F, ldc, CUDA_R_32F, CUBLAS_GEMM_DFALT_TENSOR_OP)`
RuntimeError: CUDA error
torchでCUDA使おうとして使えてない。
調査
$ pip list | grep torch torch 1.12.1
torchはpip install git+https://github.com/openai/whisper.git
したときに一緒にインストールされたようだけど、cudaに対応していないものでは?
対策
torchをアンインストール
$ pip uninstall torch
を参考にcuda対応のtourchをインストール。
$ pip install torch --extra-index-url https://download.pytorch.org/whl/cu116
インストール後
$ pip list | grep torch torch 1.12.1+cu116
再実行
$ python3 sample.py Detected language: japanese グリムサク 矢崎玄黒役赤ずきんむかしむかし あるところにちっちゃなかわいい女の子がおりました。その子はちょっと見ただけでどんな人でもかわいくなってしまうような子でしたが、誰よりも一番かわいがっていたのはこの子のおばあさんでした。おばあさんはこの子の顔を見ると何でもやりたくなってしまって、一体何をやったらいいのかわからなくなってしまうほどでした。あるとき、おばあさんはこの子に赤いビロードでかわいいずきんをこじらえてやりました。するとそれがまたこの子にとっても役に合いましたので、それからはもう他のものはちっともかぶらなくなってしまいました。それでこの子はみんなに赤ずきんちゃん、赤ずきんちゃんと呼ばれるようになりました。 (以下略)
動いた!
まとめ
(私の環境では)公式手順だとcuda対応ではないtorchがインストールされてしまっていたので、cuda対応のtourchを入れなおすことで動作しました。
Whisperは多少変な認識もありますが、手軽に日本語の音声認識を使えたことを考えるととても面白いですね。 しかも多言語対応してるって、なんて強力なんだ……。