こんにちは。機械学習っていうのをやってみたくて(Microsoft Flight simulator2020もやりたくて)PCを組みました。
- Ryzen 7 3700X
- GeForce RTX 2070
- 32GBメモリ
- 1TB m.2 SSD + 256GB SATA-SSD
- Windows10pro + Debian Buster
ハコとかその他はもらったりしたものなのと、Windows 8 Proのライセンスがあったので上記あわせて11万円くらいでした。今までグラボはS3派じゃないMatrox派じゃないATI派じゃないAMD派でGeForce使うのは初めてです。
Windows以外で機械学習をやる人はubuntuを使うようですが、前々から使っていたDebianでやってみたいという野望があり、なんとかしています。手元には直感Deep Learningという本があります。これが問題になるのですが後述します。
インストール
OSのインストールは型のごとく行います。Windowsに1TBくれてやり(ゲーム用)、Debian側には256GBというかわいそうな割り当てにしてあります。Linuxのスワップはメモリの2倍、という話が昔からありますが、32GBもメモリつんでてスワップが発生する気がしないのと、64GBもスワップスペースをつくると作業用スペースがなくなるので、8GB程度のスワップとしました。いろいろ現在は流派があるようでスワップサイズが何が正解かは正直わかりません。
https://www.tensorflow.org/install/ を見てtensorflowを入れます。どうも新しい2.xではgpu用のパッケージも一緒になっているらしい。Debianではpython3系のプログラムはpython3だったりpip3だったりするので、pip3コマンドで導入します。
まじめに開発する人は仮想環境を入れた方がいいでしょう。
# Requires the latest pippip3 install --upgrade pip
# Current stable release for CPU and GPUpip3 install tensorflow
https://www.tensorflow.org/install/gpu を参考にgpu対応に必要なものを入れます。Tensorflowを入れるところでwarningが出る(setuptoolsのバージョンが古い)のでもう一回やったら改善しました。Debian BusterのdefaultのNVIDIA driverはVersion 450.66だったのでドライバのアップデートはかからなかったような気がしますが、CUDAを入れるときに勝手に新しくなったよう。
CUDA toolkit (11.1 Sept 2020というのを入れた) https://developer.nvidia.com/cuda-downloads
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/debian10/x86_64/7fa2af80.pub
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/debian10/x86_64/ /"
sudo add-apt-repository contribsudo apt-get updatesudo apt-get -y install cuda
CUPTI;上記CUDA toolkitに入っているらしい
cuDNN 8.0.4 Download cuDNN v8.0.4 (September 28th, 2020), for CUDA 11.1 ここはCUDA toolkitとバージョンを合わせた方がいいと思ったので、やはり最新を。具体的には以下の3つをdpkg -i で無理やり導入しました。
cuDNN Runtime Library for Ubuntu18.04 x86_64 (Deb)
cuDNN Developer Library for Ubuntu18.04 x86_64 (Deb)
cuDNN Code Samples and User Guide for Ubuntu18.04 x86_64 (Deb)
以上で一応入りますが、エラーがとにかく出ます。多くはライブラリが存在しないよ、っていうやつです。ビデオカードのドライバ更新も必要ですが、確かCUDAを入れるときに勝手に更新された気がします。
インストールができて、GPUが使われているかはnvidia-smiか何かで見ればいいんですが、サンプルプログラム程度ではCPUで計算してもそれなりに速くってほんとにGPU使ってんのか? っていう感じになり、ちょっと実感としてわかりません。Tensorflow2はご丁寧にGPUが使えない場合、しれっとCPUで計算してくれてしまいます。最初は実行時のログファイルにImportErrorがいっぱい出ていて、これがGPUを使わない原因になっていたようでした。
環境変数 $LD_LIBRARY_PATHに/usr/local/cuda/lib64 を追加することと、/usr/local/cuda/lib64 以下のファイルにシンボリックリンクを張り直すことで対応しました。
libcupti.so.11.0 -> libcupti.so.11.1
libcusparse.so.10 -> libcusparse.so.11
libcusolver.so.10 -> libcusolver.so.11
libcublas.so.10 -> libcublas.so.11
あと確か/usr/lib/x86_64-linux-gnu中の
libcudnn.so.7 -> libcudnn.so.8 にも張った気がする。
それでもエラーが出ていて、
https://qiita.com/nall2240/items/31e821758ff618774d93 Tensorflow-gpuを使う際にはまったこと
を参考にして、
pip3 install tf-nightly-gpu
を導入したら解決できました。というわけでDebianでもTensorflow-GPUで遊べます。ただし、 nightlyなのでサンプルプログラムがなかなか動きません。ちゃんと使える人はいいんだろうけど、最新を追いかけるのはやめたほうがいいように思えます。これを書いたあと、結局自分の目的はインストールではなく機械学習の学習であることを思い出し、 ubuntuに入れ直そうと思います。さようなら DebianとTensorflow2.4。楽しかったよ。
で、当初の直感Deep LearningはTensorflow2に対応してなかった・・・Tensorflow2では旧バージョンとの互換機能を使えるらしいけど、わざわざ古いもの入門するのもどうかと思い
https://www.packtpub.com/product/deep-learning-with-tensorflow-2-and-keras-second-edition/9781838823412 Deep learning with tensorflow2 and keras 2nd edition
っつー第2版をKindleで買った。現場からは以上です。