#概要
前回の投稿はTF2.4だったが、今回は最新版のTF2.8をまっさらのUbuntu20.04にインストールした。その作業手順を残しておく。
- 実施時期: 2022年2月
- OS: Ubuntu20.04LTS
- CPU: Ryzen 5600X
- GPU: GeForce RTX3070
- Python: 標準のPython3.9.10
##経緯
日本語wikipediaのフルデータでNLPモデル作成作業中、システムが起動できなくなるまで裏で巨大logを書き出しやがって、Ubuntuが起動しなくなり再インストール羽目になった。
githubに落ちてるコードを拾い喰いするとこんなことになる。
##前準備
CUDA対応NVIDIAボードが刺さっていることを確認する。
$ lspci | grep -i nvidia
07:00.0 VGA compatible controller: NVIDIA Corporation Device 2484 (rev a1)
07:00.1 Audio device: NVIDIA Corporation Device 228b (rev a1)
TFと必要ライブラリの最新依存関係を調べる。
「ソフトウェア要件」曰く、
- NVIDIA® GPU ドライバ - CUDA® 11.2 には 450.80.02 以降が必要です。
- CUDA® ツールキット - TensorFlow は CUDA® 11.2 に対応しています(TensorFlow は 2.5.0 以降)
- cuDNN SDK 8.1.0 cuDNN バージョン
この順に入れるが、相変わらず色々とトラップありUbuntuを2度ほど入れ直した。
##Nvidia Driverのインストール
sudo ubuntu-drivers devices
コマンドでrecommendされた470をインストールしてからCUDA Toolkit 11.2をインストールしようとすると、「460のドライバが見つからないのでインストールに失敗しました」的なメッセージでdead endとなる。「450.80.02 以降が必要です。」は間違いではないが、ドライバのアンインストールは失敗することが多いので、はっきり460が必要です、と書いてほしかった。
sudo apt install --no-install-recommends nvidia-driver-460
sudo reboot
インストールされたか確認する。
$ sudo nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.103.01 Driver Version: 470.103.01 CUDA Version: 11.4 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... Off | 00000000:07:00.0 On | N/A |
| 0% 41C P8 12W / 220W | 281MiB / 7973MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 984 G /usr/lib/xorg/Xorg 35MiB |
| 0 N/A N/A 1541 G /usr/lib/xorg/Xorg 124MiB |
| 0 N/A N/A 1671 G /usr/bin/gnome-shell 37MiB |
| 0 N/A N/A 2373 G ...892649246251055168,131072 70MiB |
+-----------------------------------------------------------------------------+
ドライバインストール直後は460と表示されていたが、CUDA関連をインストールすると勝手に470に上がっていた。
ドライバインストールせず、いきなりCUDA関連をインストールしても良いのかも。次回試してみる。
##CUDA Toolkitのインストール
要件である11.2の最終マイナバージョンの11.2.2を入れた。
CUDA Toolkit 11.2.2 (March 2021), Versioned Online Documentation
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.2.2/local_installers/cuda-repo-ubuntu2004-11-2-local_11.2.2-460.32.03-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2004-11-2-local_11.2.2-460.32.03-1_amd64.deb
sudo apt-key add /var/cuda-repo-ubuntu2004-11-2-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda
下記のフォルダが作成されていることは少なくとも確認する。
/usr/local/cuda-11.2/bin
.bashrcに下記の2行を追加する。
export PATH=/usr/local/cuda-11.2/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
source ~/.bashrc
を実行する。
##CuDNNのインストール
要件である下記をインストールする。
Download cuDNN v8.1.0 (January 26th, 2021), for CUDA 11.0,11.1 and 11.2
cuDNN Library for Linux (x86_64)
"cudnn-11.2-linux-x64-v8.1.0.77.tgz"というファイルがDownloadsに落ちるので、その場で解凍しそこで作業する。
一番近い手順は下記オフィシャルにあり。ピシャリとあっていないがバージョンが多いため仕方ないので、経験で解凍したものを見ながら読み替える。
apt-get install
する方法も書かれているが、いつもファイルをコピーする手順で済ませているので今回もそうする。
解凍したフォルダ中のincludeフォルダとlib64フォルダの中身を/usr/local/cudaのそれぞれにコピーする。
cd cudnn-11.2-linux-x64-v8.1.0.77/cuda
sudo cp include/cudnn*.h /usr/local/cuda/include
sudo cp -P lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
sudo apt-get update
##Tensorflowのインストール
コンパイルせずに簡単なpipでインストールする。これもTFのオフィシャルを一読しておく。
書かれているインストール要件は下記なので、python -V
で確認しておく
Ubuntu20.04LTSのPythonは3.9.10だった。
対応Python: 3.6~3.9
pip: 19.0以降
sudo apt install python3-dev python3-pip python3-venv
pip install --upgrade pip
前回のTF2.4の投稿ではcondaの仮想環境にpipでインストールしたが、同時に使用するかもしれない他のcondaパケージと依存関係が壊れてしまう可能性があるので、pythonのvenvを作ってそこにpipインストールする。
たとえばDocuments直下にvenvの"hoge"を作る。
cd Documents
python -m venv hoge
cd hoge # venvコマンドで作られるフォルダ
source bin/activate
TFが依存しているパケージも同時にインストールされるので、最初にpipでTFをインストールする。pip list
の実行結果を見れば多くのそれらパケージがインストールされたことがわかる。その上で足りないものを個別にインストールする。
(hoge)$ pip install --upgrade tensorflow
(hoge)$ pip list
(hoge)$ pip install pandas
(hoge)$ pip install jupyterlab==3
jupyter notebookを起動し、セルで下記を確認する。
import tensorflow as tf
print(tf.__version__)
print(len(tf.config.list_physical_devices('GPU'))>0)
2.8.0
True
ただし、初回実行時に下記のInfoが表示された。これはjupyter labを起動するたびに表示されて目障り。
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:936] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
下記コマンドでNUMA_nodeの値を確認できる。-1になっていれば、その下のコマンドですべて0(無効)に書き換えることができる。さすればこのInfoは今後出なくなる。
grep . /sys/bus/pci/devices/*/numa_node
for a in /sys/bus/pci/devices/*; do echo 0 | sudo tee -a $a/numa_node; done
下記参照のこと。
以上