Hello Wor.log

IT系大学生4人による備忘録のようなもの

ubuntu18.04 + 2080ti + cuda10 + tensorflow を整える

CPPXのXです。

適当にちょちょいとtensorflowを入れてもGPUを認識しなかったのでまとめておきます。
cuda10を入れて、tensorflowをビルドしていきます。

現在(2019年5月18日)もう既にpipでちょちょいと入るようになっていました。

pip install tensorflow-gpu --user

自分でビルドしたい方は下へどうぞ

ubuntu18.04とpythonは入っているものとして進めていきます。

ちなみに、2080tiでなくともこの方法で入れらました。
1080tiでやった時はnouveauというのを無効にしなきゃならなかったです。

では目次です。

参考にした記事

cuda10のインストールは以下の記事を参考にしています。

qiita.com

tensorflowのビルドは以下の記事を参考にしています。

qiita.com

環境

  • ubuntu 18.04
  • cuda10.0
  • python 3.6.7
  • tensorflow 1.13.0
  • bazel 0.21.0

driver install

driverを入れます。
nvidia-smiが正常に動いているなら次の項目に進んでください。

NVIDIAドライバダウンロード
ここから対応する.runファイルを落としてきます。

自分の場合はこれでした。

wget "http://jp.download.nvidia.com/XFree86/Linux-x86_64/410.93/NVIDIA-Linux-x86_64-410.93.run"

権限を与えて実行します。

chmod +x NVIDIA-Linux-x86_64-410.93.run
sudo ./NVIDIA-Linux-x86_64-410.93.run

何か出てくると思いますが、基本的にエンター押してたら大丈夫だと思います。

動作確認します。

nvidia-smi

ちゃんと出てくれば成功です。

cuda install

cudaを入れます。

CUDA Toolkit 10.1 Update 1 Download | NVIDIA Developer

上記から対応するパッケージを落としてきます。

linux -> x86_64 -> Ubuntu -> 18.04 -> deb[local]と選択していきました。
wgetで落とすとこうです。.debが消えていたのでつけています。

wget "https://developer.nvidia.com/compute/cuda/10.0/Prod/local_installers/cuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64"
mv cuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64 cuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64.deb

あとはその下に書いてある通りぽちぽちと打っていきます。
<version>のところは補完すると出てきます。
補完で出てこなければlsで/varを見るといいです。

sudo dpkg -i cuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-10-0-local-10.0.130-410.48/7fa2af80.pub
sudo apt update
sudo apt install cuda-10-0

バージョン指定をしないでcudaをインストールすると、10.1が入ってきたため追記しました(2019 4/26)

/usr/localにcudaがいたら成功しています。

cudnn install

cudnnも入れます。

https://developer.nvidia.com/rdp/cudnn-download

ここから対応したバージョンを落としてきます。

Download cuDNN v7.4.2 (Dec 14, 2018), for CUDA 10.0これの
cuDNN Library for Linuxこれを落としてきました。

ファイルの名前はこうでした。cudnn-10.0-linux-x64-v7.4.2.24.tgz

解凍します。

tar -zxf cudnn-10.0-linux-x64-v7.4.2.24.tgz

中身をコピーしていきます。

sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp -R cuda/lib64/* /usr/local/cuda/lib64/
sudo ldconfig

普通にコピーするとsymlinkが実体化するので、-Rをつけてsymlinkのままコピーしています。

bazel install

bazelを入れます。

公式を参照しつつ、必要なパッケージを入れます。
Installing using binary installer の参照しています。

sudo apt install pkg-config zip g++ zlib1g-dev unzip

bazelを落としてきます。releasesです。
適当に最新(2019/1/29時点)を落としました。

wget "https://github.com/bazelbuild/bazel/releases/download/0.21.0/bazel-0.21.0-installer-linux-x86_64.sh"
chmod +x bazel-0.21.0-installer-linux-x86_64.sh
./bazel-0.21.0-installer-linux-x86_64.sh --user

.bashrcにexport PATH="$PATH:$HOME/bin"を追記します。

echo 'export PATH="$PATH:$HOME/bin"' >> ~/.bashrc
exec $SHELL

zshとか使ってる人は適宜そっちの設定ファイルに書いてください。

動作確認します。

bazel version

いい感じに動けば成功です。

tensorflow install

公式を参照しつつ、必要なライブラリを入れます。

pip install pip six numpy wheel mock
pip install keras_applications==1.0.6 --no-deps --user
pip install keras_preprocessing==1.0.5 --no-deps --user

tensorflowをcloneします。

git clone https://github.com/tensorflow/tensorflow
cd tensorflow

git tagでreleaseを確認します。
v1.13.0-rc0が最新だったのでそれを入れます。

git checkout r1.13
./configure

Do you wish to build TensorFlow with CUDA support? [y/N]:を y で叩く以外デフォルトで大丈夫でした。

ビルドします。
公式を見ながらやってると、間違えてCPU-onlyの方で叩きがちなので間違えないようにしてください。

bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package

........ かなり時間がかかります。

終わったらパッケージを作成してインストールします。

./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
pip install /tmp/tensorflow_pkg/tensorflow-1.13.0rc0-cp36-cp36m-linux_x86_64.whl

入ったか確認します。

pip freeze | grep tensor

tensorflow==1.13.0rc0 いいですね。

GPUが認識されているかも確認しておきます。
今いるtensorflowのディレクトリから出ておきます。
出ないとtensorflowをimportした際にbuild_infoがどうたらのエラーが出てきます。

pythonにて以下を実行します。

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

いい感じに認識されていました。

おわり

1080tiでも同様の手順でcuda10 + tensorflow1.13が動きました。

今回は.bashrcに以下を書かずに進めていたのですが、書いておくといいかもしれません。

export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"