PlaidMLを使ってMacでDeep Learning:R編
前回導入したPlaidMLだが,実はRからも使うことができる. PlaidMLがkerasのバックエンドとして動くことは前回説明した通りだが,R用のkerasを導入すれば実現できるというわけだ. これにより,GPUを使った深層学習のためのコードをRで書くことができる.
私のように,PythonよりRの使用頻度が多い人には良いかもしれない.
前準備
まず前準備として,R用のkeras
パッケージをインストールする.
インストール方法は普通のRのパッケージと同様に
install.packages("keras")
でOK.
ターミナルからやってもよいし.RStudioからでもよい.
導入方法
Python 2.X系に導入するか,Python 3.X系に導入するかで手順が変わるらしい.
Python 3.X系の場合はかなり癖がありそうだったので,今回はMacでデフォルトのPython 2.X系を利用する.
ただし,anacondaは入っていない前提である.
デメリットとしては,2020年にPython 2.X系のサポート終了が確定しているため,将来性が薄いところか. とりあえずPlaidMLを試したい場合はこちらでよいだろう.
kerasをインストール
先ほどインストールしたパッケージを読み込み,install_keras()
コマンドでkerasをインストールする.
library(keras) install_keras()
すると,ユーザフォルダ直下に.virtualenvs
という仮想環境が生成されている.
PlaidMLのインストール
仮想環境.virtualenvs
にPlaidMLをインストールする.
まず,仮想環境をアクティベートする.
source ~/.virtualenvs/r-tensorflow/bin/activate
その後,pipでPlaidMLをインストールする.
pip install -U plaidml-keras
インストールが完了したら,以下のコマンドでPlaidMLの環境設定を行う.
plaidml-setup
環境設定については前回の記事を参考に↓
動かしてみる
さっそく動かしてみよう.
なお,今回の実行環境では外部GPUが無いので, PlaidMLの環境はIntel CPU (OpenCL)を選択した.
library(keras) library(reticulate) use_virtualenv("~/.virtualenvs/r-tensorflow") pml_keras <- import("plaidml.keras") pml_keras$install_backend() batch_size <- 128 num_classes <- 10 epochs <- 5 img_rows <- 28 img_cols <- 28 mnist <- dataset_mnist() x_train <- mnist$train$x y_train <- mnist$train$y x_test <- mnist$test$x y_test <- mnist$test$y x_train <- array_reshape(x_train, c(nrow(x_train), img_rows, img_cols, 1)) x_test <- array_reshape(x_test, c(nrow(x_test), img_rows, img_cols, 1)) input_shape <- c(img_rows, img_cols, 1) x_train <- x_train / 255 x_test <- x_test / 255 y_train <- to_categorical(y_train, 10) y_test <- to_categorical(y_test, 10) model <- keras_model_sequential() %>% layer_conv_2d(filters = 32, kernel_size = c(3,3), activation = 'relu', input_shape = input_shape) %>% layer_conv_2d(filters = 64, kernel_size = c(3,3), activation = 'relu') %>% layer_max_pooling_2d(pool_size = c(2, 2)) %>% layer_dropout(rate = 0.25) %>% layer_flatten() %>% layer_dense(units = 128, activation = 'relu') %>% layer_dropout(rate = 0.5) %>% layer_dense(units = num_classes, activation = 'softmax') model %>% compile( loss = loss_categorical_crossentropy, optimizer = optimizer_adadelta() ) model %>% fit( x_train, y_train, batch_size = batch_size, epochs = epochs, validation_split = 0.2 )
お,遅い… CPU版なので学習がかなり遅いが,ひとまずなんとか動くことを確認した.
ちなみに, Intel CPU (OpenCL)以外の選択肢であるLLVM_CPUやiGPUを選択するとlossがnanとなってしまい,まともに動かなかった(PlaidMLだとあるあるらしいが…)
RadeonのGPUだとちゃんと動くという報告が多いらしいので,今後eGPUを導入したら是非とも試してみたいところである.
まとめ
正直,かなり試行錯誤したので環境がゴチャゴチャになってしまった…
ただ,RでGPUを用いた深層学習ができる,というのはなかなか魅力的ではないだろうか.
今後色々試していきたいので,進展があればまた報告したいと思う.
参考
以下の記事を参考にさせていただいた.
PlaidML Kerasでやっていく #TokyoR 73
追記(2019.02.02)
最近,PlaidMLの新しいバージョン0.5.0がリリースされた. が,現状私のMacではバックエンド指定時にエラーが出て使えなかった.
同じくエラーが出る人は,PlaidMLのインストールの際に
pip install -U plaidml-keras==0.3.5
として古いバージョンをインストールすると良いだろう.