- 投稿日:2019-10-28T18:37:32+09:00
Tensorflow2.0をubuntu18.04LTS on WSL にインストール
はじめに
WSLで tensorflow 2.0.0 を動かしたときのメモ。
環境
ソフトウェア バージョン 備考 OS Windows 10 Pro 64bit 最新update適用済 Ubuntu on WSL ubuntu 18.04 LTS python python 3.6.9 pyenv, venv利用 tensorflow 2.0.0 前提
- WSL で ubuntu 18.04LTS が動作している
- 基本的な Linux / python の知識がある
インストール
ubuntu on wsl
ログイン後パッケージをアップデート。必要なパッケージをインストール
$ sudo apt update $ sudo apt upgrade $ sudo apt install bzip2 zlib1g-dev libssl-dev readline-common sqlite3 $ sudo apt install libssl-dev libbz2-dev libreadline-dev libsqlite3-dev zlib1g-dev libffi-dev gcc makesqlite3などは念のため。
pyenv
Githubの pyenv-installer を使う方法でインストール
$ curl https://pyenv.run | bash $ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash~/.bashrc に以下を追加し、source ~/.bashrc などで反映。 username は実際のユーザ名にする
export PATH="/home/username/.pyenv/bin:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"Bash on Windows 起動時に~/.bashrcを参照するように ~/.bash_profile に以下の内容を追加。
if [[ -f ~/.bashrc ]] ; then . ~/.bashrc fipython
準備
sudo apt install gcc bzip2 zlib1g-dev libssl-dev readline-common sqlite3コンパイルしてインストール
$ pyenv install -list # インストールできるバージョンの確認 $ pyenv install 3.6.9 $ pyenv versions # インストールバージョンの確認 $ pyenv global 3.6.9 # 全体のバージョン指定、必要に応じて変更 $ python --version # python のバージョン確認python 3.7.5 だと Tensolflow のインストールに失敗したので、3.6系の最新である 3.6.9 を利用。原因不明。
venv仮想環境設定
$ cd work # 任意のディレクトリに移動 $ python -m venv tf2 $ ls -la ./tf2/bin # ディレクトリの存在確認 $ source ./tf2/bin/activate # 有効化、常時使う場合は.bashrcなどに書いておくTensolFlow本体インストール
GPUを使わない場合
$ pip install --upgrade pip # pipの更新 $ pip install tensorflow==2.0.0以上でインストール完了
参考
- https://www.tensorflow.org/install
- https://www.tensorflow.org/tutorials
- https://qiita.com/nuka137/items/6966efeddceb96012819
- https://qiita.com/shoji9x9/items/5110ef7f59c678d07aa0
- https://qiita.com/imsk/items/d14be2a7fcca8a080a8d
蛇足
昔、インストールでハマったのがウソみたい。
- 投稿日:2019-10-28T16:18:46+09:00
【分散学習】 TensorflowにおけるCPU/GPU使い分け
TensorflowにおけるプロセスごとのCPU/GPU使い分けについて記述します。
背景
Ape-x,DISTRIBUTEDPRIORITIZEDEXPERIENCEREPLAY
R2D2,Recurrent Experience Replay in Distributed Reinforcement Learning強化学習において、Ape-x、R2D2のように経験の獲得はCPUを用いて並列化し、その経験を中央のGPUが学習する手法が提案されています。
CPUは並列化しやすいため、学習効率の改善が期待できます。環境
Ubuntu18.04
Python 3.6.8
Tensorflow 1.12.0
CUDA 10.1CPU/GPU使い分け
解決策
Ape-x,R2D2ではマルチプロセスを用い、GPU計算をするLearnerと、CPU計算をするActorを生成します。
このとき、プロセス間のCPUとGPUの使い分けは下記コードで実現出来ます。import os,multiprocessing def hoge_cpu(): #CPU計算をしたい os.environ["CUDA_VISIBLE_DEVICES"] = "" #""には何も書かない ... def hoge_gpu(): #GPU計算をしたい ... multiprocessing.Process(target=hoge) multiprocessing.Process(target=hoge_gpu)os.environ["CUDA_VISIBLE_DEVICES"]がポイントです。これを書くだけです。
別の実装
他の方の実装では下記のコードがありました。
import tensorflow as tf with tf.device("/gpu:0"): multiprocessing.Process(target=hoge_gpu) with tf.device("/cpu:0"): multiprocessing.Process(target=hoge_cpu)しかしこの実装ではCPU側の実行にGPUのメモリ領域が確保されていました。プロセス数に余裕があってもGPUのメモリサイズが限界となり、並列化の数が小さくなってしまいます。