LoginSignup
1
1

More than 1 year has passed since last update.

Tensorflow2.8 Install to Ubuntu20.04 備忘録

Posted at

概要

前回の投稿は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と必要ライブラリの最新依存関係を調べる。

「ソフトウェア要件」曰く、

  1. NVIDIA® GPU ドライバ - CUDA® 11.2 には 450.80.02 以降が必要です。
  2. CUDA® ツールキット - TensorFlow は CUDA® 11.2 に対応しています(TensorFlow は 2.5.0 以降)
  3. 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

Screenshot from 2022-02-07 22-07-12.png

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)

Screenshot from 2022-02-07 22-18-49.png

"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

下記参照のこと。

以上

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1