2022年10月26日水曜日

WSL2でTensorflowのGPUが実行できない?初心者が詰まりやすいポイントを紹介

機械学習を始めて当初はWindows版のanacondaを使っていたのでTensorflowのGPU実行は当たり前のように出来ていた。

しかし相性の問題かanacondaは稀にフリーズするし動作も遅いし悩まされていた。
pip Packageとconda Packageが混在するのもトラブルの元だったし、肥大化したせいかanaconda自体が調子悪くなってきたので、トラブルシューティングとしてanacondaの再インストールを試みた所、遂にanaconda自体が起動しなくなってしまった。

そこで、古いPCパーツを活用してLinuxマシンを組み上げ、Ubuntu20.04を入れ、VScodeでTensorflowを使うとGPUが全然利用されない、使用率も消費電力も温度も上がらないしCPU使用率は100%に近い。
PytorchならGPUが正常に稼働するが、Tensorflowは、どのコードも駄目だ。

ドライバーの問題か?CUDAToolkitのバージョンや相性だろうか?
検索しても事例が出てこないし、導入の仕方やanacondaがオススメだとか、DockerDesktopの紹介ばかりだ。

その後Windows環境に戻りVScodeにWSL2をリンクしてWindowsからLinuxを利用できるようにした。

そしたらLinuxPCと全く同じで、PytorchならGPUが使えるがTensorflowだとGPUが動かない。

そこで、今まで良くわからないからすっ飛ばしていた事を、ちゃんとやることにした。
cuDNNの導入だ。
デバイスドライバーやCUDAToolkitと違って、NVIDIAのDeveloper登録が必要だし、検索しても環境変数とか面倒な情報ばっかりだったので、放おって置いたのだが、真面目に導入してみることにした。


今考えると、これが原因なのだが、初心者からすれば「PytorchならGPUで機械学習が動いているのだから別にcuDNNは必須では無いのだろう」と思いこんでいた。

ちなみにanacondaはconda installで簡単にcuDNNが実装できるので動いていたと言うわけだ。

やってみると意外と簡単だ。
NVIDIAのDeveloper登録だが下記のサイトから行う

普通にDownload cuDNN>をクリックすれば良い。
次にJoin nowでユーザー登録を行う
メールアドレスを入れてNextを押すと
後はパスワードを作成してI am human、メール認証で登録完了だ。
無事にログインできたらCUDAバージョンに合わせたcuDNNをダウンロードしよう。

さて、ここからが本題だ。
・ダンロードしたファイルをどこに入れれば良いのか?
・どうやってインストールすれば良いのか?

まず、ダウンロードしたdebファイルをWindowsだったら7ZIPなどの圧縮解凍ソフトで開く。

そしたdata.tarを更に開いていく。
この階層に有る
libcudnn8_8.6.0.163-1+cuda10.2_amd64.debがcuDNNのインストーラーパッケージだ。※今回は10.2を使っているので、このファイル名だが、もちろんバージョンによって異なる。

該当のファイルをWSLの/home/ユーザー名フォルダにコピーする。

次にターミナルでsudo dpkg -i libcudnn8_8.6.0.163-1+cuda10.2_amd64.debを実行※sudoが必要なことに注意
これでcuDNNがバッチリ入る。

Tensorflowのチュートリアル機械学習コードで試してみると見事にGPUで機械学習が出来ていることが確認できる。

同様にUbuntuをインストールしたLinuxPCでも全く同様の手順でcuDNNはインストールできる。
機械学習をしようと調べるとanacondaやらDockerDesktopの話ばっかり出てきて、色んなものをインストールしてストレージを逼迫したり、重くなるのが嫌でLinuxやWSL2でシンプルにTensorflowをGPU実行したい人は参考になれば幸いだ。

2022年10月3日月曜日

OpenAIのWhisperを試してみたらRuntimeError: “slow_conv2d_cpu” not implemented for ‘Half’ と表示されたので修正してみた

2022年9月の末に人工知能を研究する非営利団体OPENAIがwhisperと言うAI文字起こしを公開した。

今どきスマホでも音声検索や文字起こしアプリは有るがwhisperは何が凄いのだろう?GitHubで見てみようまずはその誤認識率

https://github.com/openai/whisper


日本語が6.4%と驚異的な低さだ(低いほど良い)ちなみにスペイン語が突出して低いがAIはスペイン語が得意なのだろうか?発音が認識しやすいのかな?とても自分には聞き取れないが。

OPENAIの公式ブログを見ると「Whisperは、ウェブから収集した68万時間に及ぶ多言語・マルチタスク教師付きデータで学習させた自動音声認識(ASR)システムである。」

68万時間!データセットを作るのに、どれだけ莫大な計算能力と時間がかかったのだろう。さすが、かの有名なGPT-3を作ったOPENAIだ。

早口言葉や、スポーツの実況、K-POPの歌詞や、多人数での会話まで文字起こし出来るらしい。

さっそくローカル環境で動かしてみることにした。


しかし早速エラーが

RuntimeError: “slow_conv2d_cpu” not implemented for ‘Half’

ハーフつまり浮動小数点演算精度 半精度 FP16のことだろう。

そこで該当のPythonファイルdecoding.pyを調べる


どうやら100行目にuse fp16 for most of the calculation(計算の大部分にfp16を使用)と、いかにもなコメントを発見

TrueからFalseへ変更して保存。Notebookを再起動して実行!果たして…

見事に文字起こし成功!精度も素晴らしい。しかし40秒もかかっている…

このwhisper学習モデルが選べるのだが、下記の表の通り、モデルが大きくなれば処理に時間がかかりVRAM使用量も増える。私のGPUはGTX1660Ti 6GBだから~5GBのmediumで試したのだが、標準のbaseに比べたら8倍も時間がかかるようだ。よし、ここは素直に標準のbaseで試そう。



baseにした所、時間は10倍以上短縮されたが、「whisper」が「ビスパー」になってるし「文字起こし」は「文字を越し」

これでは『最新の凄い文字起こしAI』とはいえない。最近のスマホ以下だろう。やはり圧倒的な精度で実行したい。

そこで違和感に気がつく、さっきのランタイムエラー

“slow_conv2d_cpu”・・・CPU?

GTX1660Tiを使っていたから、いつも通りGPUのせいかと思ったら、これCPU実行じゃん!タスクマネージャーでもnvidia-smiでもVRAM全然使ってない!

かと言ってコードに不審な点もない。

そこでPIP LISTでTorchバージョンを見たところ、やはりCPUバージョンのTorchが入っていた。最近あまり使っていないconda環境だからPytorchのバージョンを忘れていたのが原因だった。

pip3 uninstall torch torchvision torchaudioで現状インストールされているPytorchを全て消し。

pip3 install torch torchvision torchaudioでCUDAバージョンのPytorchを入れた。

さあ、これでwhisperの真の実力がわかる!いざmediumモデルで実行!


11.7s!! CPUで実行した際の40.1秒から4倍近く早くなった!文字起こしの精度も完璧だ!

ちなみに、なんでこんな事になったかというとubuntu 20.04だと上手くGit installが出来ず、WSL2でubuntu 18.04を開くもPython3.7や3.6だとtransformerの互換性エラーが出てしまう。

そこで以前Stable Diffusionのときに作ったconda環境のPython3.85をTerminalで開いて

pip install git+https://github.com/openai/whisper.git

と打ったらあっけなくinstall出来たので、そのまま使っていた(どのPytorchを入れていたかは忘れていた。)と言うわけだ。

Stable DiffusionもFP16を使うのでGPUがエラーを起きた際にCPUで動かしたりしたのだろう。その後Stable Diffusionは別の方法で解決したので※別の記事で解説 CPUバージョンのPytorchのままだったのかもしれない。

最近はWSL2 DockerDesktop anaconda3と簡単に様々な仮想環境を作成出来るので、それぞれの詳細なSitePackageまでは把握しきれない。

ただ、フレームワークやライブラリの確認は開発の基本だから今後は気を付けたい。

ちなみにOPENAIのwhisperは、あらゆるフォーマットに対応するffmpegを利用するのでmp3でもAACはもちろん。mp4の動画でも、ファイルを指定すれば文字起こししてくれる。

一度ローカル環境を作ってしまえば、何度でもすぐに使える今日現在最高に便利な文字起こしAIなので、みなさんも是非試してみてはいかがだろうか。

【AI向けで高コスパなGPU RTX3060 12GB】

AIミステリー小説 第2章

俺は情報提供の準備を進め、信頼性のある報道機関に証拠を届けるための手段を探った。 メディアに証拠を提供することで、事件を世間に知らせ、製薬会社の闇を暴露するための力を高めることが不可欠だと考えていた。 その準備の過程で、俺は元アナウンサーで現在はジャーナリストとして活躍している久...