Posted at

pyenv上でAnacondaを使ったKeras(Tensorflow)のインストール


はじめに

完全に自分用なのでグダグダガバガバです。参考元の記事を見ていただいたほうがいいかもしれません。

大いなる力がない人の為の記事です。


環境


  • OS : Debian 9.4

  • CPU : Intel Core i7-5930K 3.5GHz

  • GPU : GeForce GTX 980Ti

  • Shell : bash


pyenvのダウンロードとセッティング

参考元 : pyenvのインストール、使い方、pythonのバージョン切り替えできない時の対処法

pyenvを以下のコマンドでGithubからダウンロード(クローン)します。

 $ git clone https://github.com/pyenv/pyenv.git ~/.pyenv 

~/.bashrcにPATHを追加しましょう。

 $ echo '##-------- pyenv settings --------##' >> ~/.bashrc

$ echo 'export PYENV_HOME=$HOME/.pyenv' >> ~/.bashrc
$ echo 'export PATH=$PATH:$PYENV_HOME/bin' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc

エディターで.bashrcに直書きでも大丈夫です。

 export PYENV_HOME=$HOME/.pyenv

export PATH=$PATH:$PYENV_HOME/bin
eval "$(pyenv init -)"

最後の evalコマンドを忘れないようにしましょう。

"pyenv init -"ではpyenvで使用する環境変数を出力します。

evalコマンドでは直後の文字列を評価した値(コマンドとして実行した出力)を実行します。


"pyenv init -"の出力

export PATH="/home/username/.pyenv/shims:${PATH}"

export PYENV_SHELL=bash
source '/home/username/.pyenv/libexec/../completions/pyenv.bash'
command pyenv rehash 2>/dev/null
pyenv() {
local command
command
="${1:-}"
if [ "$#" -gt 0 ]; then
shift
fi

case "$command" in
rehash|shell)
eval "$(pyenv "sh-$command" "$@")";;
*)
command pyenv "$command" "$@";;
esac
}


追加したPATHを適応させましょう。

下記のコマンドを実行するか,再度ログインしましょう

 $ source ~/.bashrc


pyenvでAnacondaをインストール

下記のコマンドでAnacondaをインストールしましょう。Anacondaのバージョンはお好きにどうぞ。

$ pyenv install anaconda3-5.3.1

pythonのバージョン切り替えは,"local" オプションで今いるディレクトリに,"global" オプションで全体に反映されます。

 $ pyenv local anaconda3-5.3.1

$ pyenv global anaconda3-5.3.1

適応されているかpythonのバージョンを確認しましょう。

 $ python -V

Python 3.6.8 :: Anaconda, Inc.

上のようになれば大丈夫です。 Python自体のバージョンは変わることがありますので末尾に "Anaconda, Inc." と入っているのが確認できれば問題ありません。


パッケージのインストール

KerasとTensorflowをインストールしましょう。

GPUも使うのでtensorflow-gpu, cudatoolkit, cudnnを入れましょう。

 $ conda install cudatoolkit==9.0

$ conda install cudnn==7.3.1
$ conda install tensorflow-gpu==1.9.0
$ conda install keras==2.2.4

私の環境ではこれでkerasのexampleがGPUで動作しました。

tensorflow-gpuを最新の1.13.xにすると,CUDA Tool KitとかcuDNNのバージョンがよくわからないことになるので動く組み合わせを探してみてください。


補足:GPUメモリの制限

複数人で使うことを想定したマシンにはGPUメモリに制限をかけなければメモリの取り合いになってしまいます。

制限をかけるには以下のコードをソースの先頭に記入してください。

0.25 は約25%ではなくあくまでも目安です。私の環境では約29%(1818MiB/6083MiB)の制限がかかりました。

import warnings

warnings.simplefilter(action='ignore', category=FutureWarning)
# GPUメモリ制限
import tensorflow as tf
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.25
config.gpu_options.visible_device_list = '0'
session = tf.Session(config=config)
from keras import backend as K
K.set_session(settion)


参考にしたサイト