2022年10月26日水曜日
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
OPENAIの公式ブログを見ると「Whisperは、ウェブから収集した68万時間に及ぶ多言語・マルチタスク教師付きデータで学習させた自動音声認識(ASR)システムである。」
68万時間!データセットを作るのに、どれだけ莫大な計算能力と時間がかかったのだろう。さすが、かの有名なGPT-3を作ったOPENAIだ。
早口言葉や、スポーツの実況、K-POPの歌詞や、多人数での会話まで文字起こし出来るらしい。
さっそくローカル環境で動かしてみることにした。
RuntimeError: “slow_conv2d_cpu” not implemented for ‘Half’
ハーフつまり浮動小数点演算精度 半精度 FP16のことだろう。
そこで該当のPythonファイルdecoding.pyを調べる
このwhisper学習モデルが選べるのだが、下記の表の通り、モデルが大きくなれば処理に時間がかかりVRAM使用量も増える。私のGPUはGTX1660Ti 6GBだから~5GBのmediumで試したのだが、標準のbaseに比べたら8倍も時間がかかるようだ。よし、ここは素直に標準のbaseで試そう。
これでは『最新の凄い文字起こしAI』とはいえない。最近のスマホ以下だろう。やはり圧倒的な精度で実行したい。
そこで違和感に気がつく、さっきのランタイムエラー
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モデルで実行!
ちなみに、なんでこんな事になったかというと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なので、みなさんも是非試してみてはいかがだろうか。
2022年9月25日日曜日
GTX1660TiとGTX1060 VRAM6GBのGPUでstable diffusionを動かした方法
現在、巷で話題のstable diffusionをローカル環境で動かしてみた。
しかしエラーに継ぐエラー、私の環境はGTX1660TiとGTX1060両方共VRAM6GBしかない。stable diffusionはVRAM10GBの環境を想定しているそうだ。
しかし今現在、一般的なGPUのVRAMは4GBから8GB程度。Steamでも未だに主流のGPUはGTX1060 6GB。 stable diffusionの掲げる「AIの民主化」を実現するならば、主流のGTX1060 6GBや同じく6GBのGPUで動かせてこその「AIの民主化」だ。
よって色んな試行錯誤を経てVRAM6GBのGPUのローカル環境でstable diffusionを使えるようにした手段を書いていく。
まず私がメインで使っているのはGTX1660Ti VRAMは6GB。最新のPCゲームでも、解像度1600×900なら案外、最高設定で結構動いてくれる代物だ。
その理由は特殊な設計に有る。Turing世代なのにRT CoreもTensor Coreも無いTU116ベースのGPU。Tensor Coreを持たない代わりにFP16専用の演算器を32基載せ、FP32とINT32に関しては、それぞれ16基載せたレアというか”変り者”仕様だ。
だからFP32の演算能力は5.5TFLOPSだがFP16なら11TFLOPS出る。
しかもFP32とINT32のオーバーラップ実行。だから新しめのゲームなら先代Pascal仕様のGTX1060が100命令かかるのにGTX1660Tiなら62命令で済む。
古いゲームなら先代の上位機種GTX1070に少し及ばないか、同等。
新しいゲームならGTX1070を超え、更に上位のGTX1070Tiに迫る実力だ。
しかも先代のPascalはFP16でもFP32でも演算能力が変わらない(GTX1060 6GBなら、どちらも4.4TFLOPS)
そして機械学習において浮動小数点演算精度を下げて演算能力やGPUメモリ使用量を減らすのは、もはや定石だ。この時点で私は過去にGTX1660Tiを買ったことをラッキーだと思っていた。
しかしstable diffusionにおいてfloat値、float16にしても思ったような結果が出ない。
VSCodeはfloat値でエラーを吐きまくるし、float値を標準に戻して解像度を下げても緑色の画像。
なんてこった!せっかく武器になると思っていたGTX1660シリーズのFP16演算器が邪魔になっていたなんて、浮動小数点演算精度を半精度のFP16にすればVRAM6GB以下でも動かせるし、演算精度も2倍になることを期待していたのに!
ならばとfloat値をFP32に固定すれば当然VRAM不足だ。
仕方がない、解像度を下げようPythonコードの解像度指定値を探して512×512からピクセル数4分の1の256×256でやっと画像が出力できた。
deviceをCPUに指定すれば、まともな画像は出せるが、CPUは第12世代corei5を使っているのに5分以上かかる。でもGPUなら数十秒に短縮できる。なら、どうしてもGPUで実行したい。
なら先代のGTX1060はどうだ?GTX1660のFP16演算器は相性問題があるが、サブで使っているGTX1060なら相性問題が無い。
しかも演算精度も単精度FP32なら4.4TFLOPSと、5.5TFLOPSのGTX1660Tiと大差ない。
FP16も4.4TFLOPSなのは残念だがFP16ならVRAM6GBでもメモリ不足にならずにディフォルトの512×512で出力できるはずだ。
そこで最新のStable_Diffusion_with_🧨_diffusers.ipynbのコードを編集した。場所は「Next, let’s move the pipeline to GPU to have faster inference.」の下「pipe = pipe.to(“cuda”)」を「pipe = pipe.to(“cuda:1”)」に編集してセカンダリGPU GPU:1(GTX1060)を指定。
GTX1660なら40秒程度、FP16が使えれば20秒程度に短縮できそうだが、FP16との相性問題で緑色の画像しか出力できないなら仕方がない。今後stable diffusion側が対応してくれるまで待つしか無い。
しかしこれで枚数制限もなくローカル環境で数十秒でAI画像生成が可能になった。
私と同じ様にGTX1600シリーズをメインで使っているが相性問題でstable diffusionが実行できない人は試しに古いグラフィックボードを引っ張り出してみてはいかがだろうか?おかげで私は出費0円でstable diffusionが実行できた。
両方共コスパの良いグラボで大いに売れたから未だに所持しており、似たような構成が可能な人も多いんじゃないだろうか?
ならGTX1060はマザーボードの下の方。PCIExpressの4X レーンにでも挿せば良い。そうすればプライマリのGTX1660はCPU直結の16Xレーンのままだ。
GTX1060は4X レーンでもstable diffusionなどの機械学習やビデオエンコードやNVIDIA PhysXを任せれば、むしろプライマリのGTX1660に余裕が生まれる。
消費電力だってアイドル時は7W程度でLED電球程度。PC全体から見れば微々たるものだ。
案外古くて持て余してるPCパーツが試行錯誤と工夫によって役に立つかもしれない。しかも、それは自身の経験や知識になる。
参考になれば幸いだ。
AIミステリー小説 第2章
俺は情報提供の準備を進め、信頼性のある報道機関に証拠を届けるための手段を探った。 メディアに証拠を提供することで、事件を世間に知らせ、製薬会社の闇を暴露するための力を高めることが不可欠だと考えていた。 その準備の過程で、俺は元アナウンサーで現在はジャーナリストとして活躍している久...
-
機械学習を始めて当初はWindows版のanacondaを使っていたのでTensorflowのGPU実行は当たり前のように出来ていた。 しかし相性の問題かanacondaは稀にフリーズするし動作も遅いし悩まされていた。 pip Packageとconda Packageが混在する...
-
現在、巷で話題のstable diffusionをローカル環境で動かしてみた。 しかしエラーに継ぐエラー、私の環境はGTX1660TiとGTX1060両方共VRAM6GBしかない。stable diffusionはVRAM10GBの環境を想定しているそうだ。 しかし今現在、...
-
俺は情報提供の準備を進め、信頼性のある報道機関に証拠を届けるための手段を探った。 メディアに証拠を提供することで、事件を世間に知らせ、製薬会社の闇を暴露するための力を高めることが不可欠だと考えていた。 その準備の過程で、俺は元アナウンサーで現在はジャーナリストとして活躍している久...
























