はじめに
手持ちのmacじゃGPU動かせないし気軽に回せないなあ,と思いなかなか手がつけれていなかったLinuxを動かしていくぞ!というお気持ちでとりあえず書いた記事です.
簡単にいうと,研究室内のLinuxサーバーでユーザーをもらったので,TensorなどでGPUを動かせるまでにした時の覚え書きです.自分用メモ.
基本的にこちらのubuntu18.04でTensorFlow-gpuを動かすを参考にしながら進めていきます.
英語だけどA step by Step Guide to Install Tensorflow GPU on Ubuntu 18.04 LTSも参考になりました.
環境
- HP Z640 Workstation
- OS: Ubuntu 18.04LTS
- メモリ: 256GB
- GPU: GeForce GTX 1080 Ti
手順
パスワード変更
ユーザーをsudo権限付きでいただいたので,パスワード変更をしましょう
$ passwd [ユーザー名]
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
現在のパスワードを入れた後に2回新しいパスワードを入れれば完了です.
passwd: password updated successfully
Nvidia driverのインストール
とりあえず下記コマンドで現在の状況を確認します.
$ nvidia-smi
すると,
Wed Nov 20 13:44:59 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.129 Driver Version: 390.129 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Quadro K620 Off | 00000000:02:00.0 On | N/A |
| 34% 39C P8 1W / 30W | 124MiB / 1994MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 GeForce GTX 108... Off | 00000000:03:00.0 Off | N/A |
| 23% 40C P8 26W / 250W | 2MiB / 11178MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 2599 G /usr/lib/xorg/Xorg 49MiB |
| 0 2929 G /usr/bin/gnome-shell 71MiB |
+-----------------------------------------------------------------------------+
と出てきましたので,すでにインストールされているようです.
なので次,CUDA cuDNNを導入していきます.
CUDA9.0とcuDNNのインストール
これもとりあえず下記コマンドで確認です.
$ nvcc -V
Command 'nvcc' not found, but can be installed with:
apt install nvidia-cuda-toolkit
Please ask your administrator.
と出てきたので,こちらはインストールが必要なようですね.
Please ask your administrator
とあります,管理者権限もらっといてよかった.
ではインストールを進めていきます.
参考にしているこちらの
ubuntu18.04でTensorFlow-gpuを動かす
や,
GPU付きのTensorflowをUbuntu18.04に入れる
では最新のCUDA10.0はTensorflow-gpuがサポートされていないとのことでCIDA9.0をインストールしていました.
どちらも1年前ほどの記事なので,2019年11月20日現在, Tensorflowの公式ウェブサイトを見てみると,
The following NVIDIA® software must be installed on your system:
NVIDIA® GPU drivers —CUDA 10.0 requires 410.x or higher.
CUDA® Toolkit —TensorFlow supports CUDA 10.0 (TensorFlow >= 1.13.0)
CUPTI ships with the CUDA Toolkit.
cuDNN SDK (>= 7.4.1)
(Optional) TensorRT 5.0 to improve latency and throughput for inference on some models.
と書いてありました.
CUDA® Toolkit —TensorFlow supports CUDA 10.0 (TensorFlow >= 1.13.0)
とあるので,どうやら1.13.0以上のTensorFlowを使うのであればCUDA10.0でも大丈夫なようです.
ただ,NVIDIA® GPU drivers —CUDA 10.0 requires 410.x or higher.
とあります.
あれ,nvidiaのバージョンいくつだったっけ?と確認しに戻ります.
$ nvidia-smi
Wed Nov 20 13:44:59 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.129 Driver Version: 390.129 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Quadro K620 Off | 00000000:02:00.0 On | N/A |
| 34% 39C P8 1W / 30W | 124MiB / 1994MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 GeForce GTX 108... Off | 00000000:03:00.0 Off | N/A |
| 23% 40C P8 26W / 250W | 2MiB / 11178MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 2599 G /usr/lib/xorg/Xorg 49MiB |
| 0 2929 G /usr/bin/gnome-shell 71MiB |
+-----------------------------------------------------------------------------+
390.120でした.
nvidiaをアップデートするかCUDAを9.0にするか,どちらかのようです.
そもそも使用しているGPUの対応は大丈夫なのかな?と思い,こちらで確認.
440.31のバージョンのドライバインストールを推奨されました.どうやら全然大丈夫みたい.
nvidiaをアップデートしてTensorFlow1.13.0とCUDA10.0を入れるか,TensorFlow1.12.0以前のものとCUDA9.0でいくか30秒ほど悩んだ結果,後者でいくことにしました.
まあ,一応共用のサーバーなので,アップデートしてなんかあったら困るし,最新より一つ前の方がなんか安心.
ちなみに,このNvidiaとかCUDAとかTensorFlowとかのバージョン関係のことを調べるにあたり,こちらの記事→NvidiaドライバとCUDAとcuDNNとTensorflow-gpuとPythonのバージョンの対応
がとっても参考になりました!ありがとうございます.
ではようやく,CUDA9.0のインストールに進みます.
NVIDIAの公式インストールページ→CUDA Toolkit 9.0 Downloadsにアクセスし,下のように選択.
18.04がないので良いのかな?と思いましたが,調べてみると17.04のもので大丈夫のようです.
今回はローカルから作業しているのでダウンロードしてscpでサーバーに送ります.
$ scp -P [ポート番号] Downloads/cuda-repo-ubuntu1704_9.0.176-1_amd64.deb [ユーザー名]@[IPアドレス]:[コピー先パス]
普段ポート指定 -p だけど,scpの時は-Pです.
$ wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/[debファイル]
でも良い.
その後,公式サイトに沿ってインストールを進めます.
なお,最後のsudo apt-get install cuda
だと最新のものがインストールされてしまうようなので,末尾に対応するバージョンを指定することが大事みたい.
今回は,-toolkit-9-0
を追加.
$ sudo dpkg -i cuda-repo-ubuntu1704_9.0.176-1_amd64.deb
$ sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1704/x86_64/7fa2af80.pub
$ sudo apt-get update
$ sudo apt-get install cuda-toolkit-9-0
次にPATHを通す作業が必要のようです.
以下のコマンドを入力し,「.bashrc」を編集.
$ nano ~/.bashrc
末尾に以下の文字列を入力し保存.
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
再起動
$ sudo reboot
起動後,以下のコマンドでCUDAがインストールされているか確認.
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Cuda compilation tools, release 9.0, V9.0.176
と表示されたのでOK.
cuDNNのインストール
cuDNNはCUDAと一緒にインストールする多ライブラリで,CUDAを用いてGPU上で計算を高速に行うためのものみたいです.
下記のサイトにアクセスし,会員登録をする必要があります.
https://developer.nvidia.com/rdp/cudnn-download
その後,Download cuDNN v7.6.4 for CUDA9.0
から以下の3つをインストール.
- cuDNN v7.6.4 Runtime Library for Ubuntu16.04 (Deb)
- cuDNN v7.6.4 Developer Library for Ubuntu16.04 (Deb)
- cuDNN v7.6.4 Code Samples and User Guide for Ubuntu16.04 (Deb)
ダウンロードしたディレクトリで,以下のコマンドを順に実施.
バージョンのところは適宜ダウンロードしたバージョンに変えましょう.
$ sudo dpkg -i libcudnn7_7.6.4.38-1+cuda9.0_amd64.deb
$ sudo dpkg -i libcudnn7-dev_7.6.4.38-1+cuda9.0_amd64.deb
$ sudo dpkg -i libcudnn7-doc_7.6.4.38-1+cuda9.0_amd64.deb
これでcuDNNのインストールは終了です.
pyenv, Anacondaのインストール,環境構築(Python環境の構築)
pyenvからAnacondaをインストールして,いつでもpyenvでAnacondaのバージョンを切り替えられるようにしながら,Anacondaで仮想環境を作り作業していくという環境を作成したいのです.
pyenv
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ nano ~/.bashrc
インストールしたら,.bashrc
に以下を追記.
export PYENV_ROOT=$HOME/.pyenv
export PATH=$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"
再起動して,pyenvのパスが通っていることを確認したらAnacondaのインストールに進みます.
Anaconda
$ pyenv install --list | grep anaconda
でインストールできるAnacondaのバージョンを確認.
今回は5.2.0をインストールします.
$ pyenv install anaconda3-5.2.0
バージョンを切り替えて,反映されているか確認します.
$ pyenv global anaconda3-5.2.0
$ pyenv versions
system
* anaconda3-5.2.0 (set by /home/okuda/.pyenv/version)
$ python --version
Python 3.6.5 :: Anaconda, Inc.
良さそうです.
次にanacondaで仮想環境を作成します.
$ conda -V
conda 4.5.4
しっかりと動いていることを確認して,
$ conda create -n tensor pip python=3.6
でtensor
と言う名前の仮想環境を作成します.pipとpython3.6も一緒にインストール.
そして仮想環境の切り替えを行いたいところですが,
pyenv環境上でanacondaを使用する時にそのままではconda activate
が使用できないのです.
$ conda activate tensor
CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
If your shell is Bash or a Bourne variant, enable conda for the current user with
$ echo ". /home/okuda/.pyenv/versions/anaconda3-5.2.0/etc/profile.d/conda.sh" >> ~/.bashrc
or, for all users, enable conda with
$ sudo ln -s /home/okuda/.pyenv/versions/anaconda3-5.2.0/etc/profile.d/conda.sh /etc/profile.d/conda.sh
The options above will permanently enable the 'conda' command, but they do NOT
put conda's base (root) environment on PATH. To do so, run
$ conda activate
in your terminal, or to put the base environment on PATH permanently, run
$ echo "conda activate" >> ~/.bashrc
Previous to conda 4.4, the recommended way to activate conda was to modify PATH in
your ~/.bashrc file. You should manually remove the line that looks like
export PATH="/home/okuda/.pyenv/versions/anaconda3-5.2.0/bin:$PATH"
^^^ The above line should NO LONGER be in your ~/.bashrc file! ^^^
と怒られます.
If your shell is Bash or a Bourne variant, enable conda for the current user with
$ echo ". /home/okuda/.pyenv/versions/anaconda3-5.2.0/etc/profile.d/conda.sh" >> ~/.bashrc
と書いてくれているので,そのまま
$ echo ". /home/okuda/.pyenv/versions/anaconda3-5.2.0/etc/profile.d/conda.sh" >> ~/.bashrc
を実行し,bashrcをもう一度読んでやれば
$ source .bashrc
$ conda activate tensor
(tensor) :~$
無事切り替わりました!
あとは必要なライブラリのインストールです.
まず有名なフレームワークであるTensorFlowをインストールしていきます.
TensorFlow-GPUのインストール
バージョンですが,TensorFlowの公式サイトに
とあるので,今回はtensorflow_gpu-1.12.0をダウンロードします.
$ pip install tensorflow-gpu==1.12.0
完了したら,GPUでTensorFlowが動くか動作確認を一応します.
$ python
Python 3.6.9 |Anaconda, Inc.| (default, Jul 30 2019, 19:07:31)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>import tensorflow as tf
>>> tf.test.gpu_device_name()
2019-11-20 19:02:23.713902: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2019-11-20 19:02:24.115406: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1432] Found device 0 with properties:
name: GeForce GTX 1080 Ti major: 6 minor: 1 memoryClockRate(GHz): 1.582
pciBusID: 0000:03:00.0
totalMemory: 10.92GiB freeMemory: 10.76GiB
2019-11-20 19:02:24.278457: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1432] Found device 1 with properties:
name: Quadro K620 major: 5 minor: 0 memoryClockRate(GHz): 1.124
pciBusID: 0000:02:00.0
totalMemory: 1.95GiB freeMemory: 1.80GiB
2019-11-20 19:02:24.278929: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1496] Ignoring visible gpu device (device: 1, name: Quadro K620, pci bus id: 0000:02:00.0, compute capability: 5.0) with Cuda multiprocessor count: 3. The minimum required count is 8. You can adjust this requirement with the env var TF_MIN_GPU_MULTIPROCESSOR_COUNT.
2019-11-20 19:02:24.278972: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1511] Adding visible gpu devices: 0
2019-11-20 19:02:24.784359: I tensorflow/core/common_runtime/gpu/gpu_device.cc:982] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-11-20 19:02:24.784436: I tensorflow/core/common_runtime/gpu/gpu_device.cc:988] 0 1
2019-11-20 19:02:24.784450: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1001] 0: N N
2019-11-20 19:02:24.784459: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1001] 1: N N
2019-11-20 19:02:24.784905: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] Created TensorFlow device (/device:GPU:0 with 10403 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1080 Ti, pci bus id: 0000:03:00.0, compute capability: 6.1)
'/device:GPU:0'
別のGPUも認識している?ちょっと後で調べます.
'/device:GPU:0'となったのでOKです.
Jupyter Labのインストール
ここからは個人的にJupyterが好きなので入れていきます.好みです.
$ conda install jupyterlab
あとはリモートからアクセスできるように,こちらでやったことを行えば,終わりです.
意外とGPU使えるようにするのは大変なんですね.
お疲れ様でした.