20191028のTensorFlowに関する記事は2件です。

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 make

sqlite3などは念のため。

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
fi

python

準備

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

以上でインストール完了

参考

蛇足

昔、インストールでハマったのがウソみたい。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【分散学習】 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.1

CPU/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のメモリサイズが限界となり、並列化の数が小さくなってしまいます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む