LoginSignup
1
0

More than 3 years have passed since last update.

Ubuntu18.04で何もないところからTensorでのDeepLearning環境を整えるまで

Last updated at Posted at 2019-11-20

はじめに

手持ちの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の対応は大丈夫なのかな?と思い,こちらで確認.

スクリーンショット 2019-11-20 14.33.03.png
製品の名前を入れて,SEARCHをクリック.

スクリーンショット 2019-11-20 14.33.16.png

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のもので大丈夫のようです.

スクリーンショット 2019-11-20 14.57.10.png

スクリーンショット 2019-11-20 16.56.10.png

今回はローカルから作業しているのでダウンロードしてscpでサーバーに送ります.

local
$ 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

末尾に以下の文字列を入力し保存.

.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の公式サイト
スクリーンショット 2019-11-20 18.53.45.png
スクリーンショット 2019-11-20 18.52.49.png
とあるので,今回は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使えるようにするのは大変なんですね.
お疲れ様でした.

1
0
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
0