GPU
DeepLearning
ubuntu16.04

PCにGPUを導入した後にやること

条件

2017/07/25
Ubuntu 16.04
GeForce GTX 970

GPUのドライバ

もし,ディープラーニングをやらないのであれば,

sudo apt-get install nvidia-375
sudo reboot

でおしまい.
数字が一番大きい(=最新のドライバ?)ものを選んどけば間違いない.

もし,ディープラーニングをやるのであれば,aptで入れてはダメで,手順としては

  1. もしaptで入れていたら消す
  2. cudaを入れる: https://developer.nvidia.com/cuda-downloads
  3. cuDNNを入れる: https://developer.nvidia.com/rdp/form/cudnn-download-survey
  4. .bashrcに設定を書く

が必要で,
2に関してはInstaller Typeをdeb(network)にした.この時同時にGPUのドライバ(?)も入るので,1を先にやっておく必要がある.
3に関しては,tensorflowが対応しているv5.1を入れた.v6.0だとtensorflowが動かなかったので.

4に関しては以下を追記.

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

2018/07/04 追記

ここにtensorflow向けのCUDAとcuDNNのversionのオススメ対応表が載っているので,都度確認してからインストールする.
CUDAはaptで入れたり消したりすればよいが,
cuDNNは消すときは手動で消す必要があって,ここが分かりやすい.

具体的には,sudo rm /usr/local/lib/libcudnn* /usr/local/include/cudnn.hをすればよい.

また,cudaをaptで新しいversionを入れるときは,

sudo apt autoremo # 一旦綺麗にする
sudo aptitude cuda-X-X # aptitudeで関連パッケージ(?)も消す
sudo apt install cuda-Y-Y # 新しいversionを入れる

という手順でやる.aptでなくてaptitudeで消すと安心できる.

virtualenvの導入

環境を汚したくないので,virtualenvを使う.
virtualenvよりも良い方法があるかもしれないし,時代遅れかもしれないが,とりあえずこれで.

sudo pip install virtualenv
sudo pip install virtualenvwrapper

で入れて,

if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then
    export WORKON_HOME=$HOME/.virtualenvs
    source /usr/local/bin/virtualenvwrapper.sh
fi

.bashrcに追記.

そのあと,

mkvirtualenv dnn

で環境構築が出来る.workon dnnで入れる.

virtualenv上にDNNのフレームワークを入れる

  • tensorflow
  • chainer

を入れる.

pip install tensorflow-gpu
pip install chainer
pip install cupy

としたら入る.
cupychainerでGPUを使うのに必要で,installが上手く行かないかもしれないが, https://docs-cupy.chainer.org/en/latest/install.html とかをちゃんと読むと普通にpipで入る.何を苦労したかは忘れたが,pipで普通に入る.

chainer.cuda.available
chainer.cuda.cudnn_enabled

で確認できるとのこと.

今後はworkon dnnで進める.

OpenAI Gymを入れる

流行っているっぽいので入れる.

workon dnn
cdvirtualenv
mkdir src
cd src
git clone https://github.com/openai/gym
cd gym
pip install -e .[all]

でハマりポイント無く入る.

import gym
env = gym.make('CartPole-v0')
env.reset()
for _ in range(1000):
    env.render()
    env.step(env.action_space.sample())

で動作確認可能.