AIの環境を作ろうとしたらめちゃくちゃ躓いた話(Windows 11, Anaconda, tensorflow-gpu OpenCV, 23/04/08時点)

諸事情により自分でもライブラリ触って勘所を掴んでおこう、って色々サイトとか見て回りながら入れようとしたらあらゆるところにトラップが仕込まれていたので「うがああああああ!」ってなったので、備忘録的に残しとこうかな、と。尚、躓いた時系列をそのまま載せていくので、結論だけ知りたい人には向いてないです。というか私がそういう記事をいくつか齧りながらやったら躓きまくったという話なので、はい。。。。。。あとあくまで色んなところから集めてきて何とか解決した経験になるので、「正確じゃない!」とか「その場しのぎの解決方法で根本的な構造をわかってない!」みたいなツッコミは多々あるかもしれません。後教訓ですが、公式資料から逃げると大体死ぬ。つらいけど頑張って読もう。

さて、まずはJupyter labとNotebookを使ってブラウザ上でいじいじしたいので、Anacondaをインストールしに行きました。

https://www.anaconda.com/products/distribution

で、promptでconda create -n hoge python=3 、もしくはnavigatorのEnvironmentのCreateとかお決まりのアレで環境を作ります。

まずはとりあえず必要なパッケージをインストールするわけですが……Anaconda navigatorから直接パッケージを探してtensorflowを入れました。これがまず最初の躓き。実はtensorflowにはtensorflowとtensorflow-gpuがあり、このGPUの方じゃないとGPUを学習に使えない……というのがあるんです、が!これがまたややこしく、詳細なバージョンによってはtensorflowでもGPUが使えるものがあったり、変にtensorflow-gpuを入れようとすると「cpu版とgpu版が分かれてるのは昔のバージョンだから代わりにtensorflowからバージョン指定してね、それで動くよ」とか言われます。マジでなんなんだ。とりあえずnavigatorから見ると詳細が分かりにくいのでお勧めしません。下で改めて説明しますが、tensorflowの公式見に行った方がいい。

そこでなんとかターミナルからtensorflow-gpuを指定してインストール。第二の躓き。Anacondaにはcondaでのパッケージ管理とpipでのパッケージ管理が出来て、両方で入れちゃうとそれぞれでどのパッケージ入れたかわかんなくなるから片方で全部管理した方がいいよー、というのがあります(最新状況はわかりませんが。)ここで私はcondaで管理するかー、とやったところ、更新が止まってるのか最新版のパッケージが見つからないという事態に。しかもそれに気づくこともできなかったのでそのまま進めてしまいました。この時インストールしたのはtensorflow-gpu 2.6.0。

実はこれだけなら恐らくそれなりに動くんですが、OpenCVとかmatplotlibとかを入れようとするとですね、競合回避の為にダウングレードが走ってですね、tensorflowがCPU版に勝手に書き換えられます。しかも2.1.0とかまで落ちます。そうすると関数の呼び出し方とかが変わるのでコードが死にます。仕方ないので環境をぽしゃらせました。

condaがダメなのでpip install tensorflow-gpuを入れてみましょう。第三の躓き。これまではNVIDIAドライバとかCUDA、cuDNNが適当でもなんかうまくいくことがある(それはそれで困るんだよな)があったんですが、ちゃんとインストールしないといけません。そしてうかつにドライバを最新のものを持ってくると対応しないので(やらかしました)、tensorflowの公式のGPUテスト済み環境を確認しましょう。Linuxとmacしか書いてないですけど、LinuxのGPUを参考にしてかまいません。私はCUDA11.2、cuDNN8.1、tensorflow2.10で整えました。ちなみにcuDNNかなんかはちょっとアンケートに答えたりしないといけません。うーん面倒。ちなみに古いやつだとwin10版しか置いて無かったりしますが、win11で入れても私の場合は動きました。

https://www.nvidia.co.jp/Download/index.aspx?lang=jp
https://developer.nvidia.com/cuda-toolkit-archive
https://developer.nvidia.com/cudnn
https://www.tensorflow.org/install/gpu?hl=ja
(追記)cuDNNはここから落とせるとか教えていただきました。
https://t.co/CYKCl2MXBU

さてこれで行けるかなー、と思ったら、どうも環境変数でPATHを通してあげないといけないらしい。ということでPATHにこの辺を通してあげます(バージョンとかDLした場所によって若干変わりますが)。

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\bin;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\extras\CUPTI\lib64;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\include;
C:\Program Files\NVIDIA GPU Computing Toolkit\cuDNN\v8.1.1\bin;

さて、これで後はpythonで確認のテンプレコードがあるので適当にターミナルを立ち上げて、

python
import os
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())

とかでGPUを確認してくれたらいいなー、なんですが……はい。上手くいきません。なんかdllが見つからないとか怒られました。さっき環境変数登録したのにね。どうやら、python3.8以降では追加でdllのある場所を指定してあげないとダメらしく(もしかしたら環境変数上手く通してあげるとかすれば要らないのかもですけど)、

os.add_dll_directory(os.path.join(os.environ['CUDA_PATH_V11_2’], 'bin’))

をimportの前に入れる必要がありました(パス名とかは各自で環境変数調べてください)。ここまで来てようやくGPU認識できたヤッター!になりました。さて、navigatorからjupyter labをinstall, launchして……エラー。お前はさあ……

と、調べてみると、今度はpip install chardetを行うと解決できるとのこと。これがどういうパッケージなのか分かってないので説明を書く側からするとよくないのですが、とりあえず導入すると立ち上がるようになったので良しとします。

ここまでくれば後はpipで色々(競合やダウングレードに気を付けながら)落として自由にAIを触れるところまで行けるようになったんじゃないでしょうか。condaのチャンネル増やしたら行けるよ、みたいなのもあったんですけど、私はなんかうまくいかなかったのでこういう遠回りをする羽目になりました。もうね、途中で多少コードが動いてたりしたのも相まって完全解決まで一週間ぐらい潰しましたね……このほかにもAIモデル作る方ですぐメモリ馬鹿食いして配列初期化できずにエラー落ちしたり、レイヤー間違えて学習に失敗したりと散々でしたが、それはまた別のお話。

誰かが同じように躓いてて、解決の参考になったらいいですね。私はこれからあらゆる論文やリファレンスとにらめっこしないといけないようですが……まあ、それは平日の私に投げておきます。

Loading

日記

Posted by aiwanabetty