先日、行動計量学会の春セミナーに参加させていただき、モデリングの勉強をしながら様々な方と交流させていただきました。その中で、私が「RでGPUを使ってtensorflowを動かしている」という話になり、やり方を教えてほしいとお声をいただいたので記事にしてみます。
私はRが大好きなので、できることならなんでもRでやりたがる人間です。加えて、tensorflowはPython用に作られているパッケージである点およびRでのすべての計算にGPUを使うことは不可能な点からあまりメリットはありません。それでも以下のようなメリットはあります。
・データの取得、加工から計算および可視化まで1つの言語で行える
・慣れ親しんだ記法でtensorflowを動かせる
特に、1つ目の利点は大きいです。Pythonでもデータ加工や分析は行えますが、統計的な処理や可視化にはRが向いていると私は考えています。なので、言語を切り替えることなく、最初から最後まですべての工程を行えることで、ヒューマンエラーの発生を少なくできるのは有用かと思います。
2つ目はRを普段から使っている方向けにはなりますが、慣れ親しんだ記法やパッケージを使ってデータの加工やモデルの構築ができるので、気が楽かなと思います。
あと、この記事を読んで試してPCが爆発する、データが吹っ飛ぶ等何があっても一切責任は負いませんので自己責任でお願いします。
Rで直接GPUに計算を任せることはできません(多分)。そこで発想としては「GPU版tensorflowを使えるPython環境を作る」+「Rからtensorflowを動かせるパッケージを使う」という形になります。
GPU版tensorflowをローカルで動かせる環境を作るのがめんどくさいです。Rでtensorflowを動かすパッケージはすでにあるのでそちらを使用します。
では、実際に環境を作っていきます。
OS: windows10 CPU: Intel(R) Core(TM) i5-11400
GPU: GeForce(R) GTX 1080Ti
メモリ: 32Gb
R環境
R.version
## _
## platform x86_64-w64-mingw32
## arch x86_64
## os mingw32
## crt ucrt
## system x86_64, mingw32
## status
## major 4
## minor 2.2
## year 2022
## month 10
## day 31
## svn rev 83211
## language R
## version.string R version 4.2.2 (2022-10-31 ucrt)
## nickname Innocent and Trusting
Python環境
#python version
import sys
print(sys.version)
#tensorflow version
## 3.9.13 (tags/v3.9.13:6de2ca5, May 17 2022, 16:36:42) [MSC v.1929 64 bit (AMD64)]
import tensorflow as tf
print(tf.__version__)
#keras version
## 2.10.1
import keras
print(keras.__version__)
## 2.10.0
Rのバージョンは特にこだわる必要はなく、よほど古いバージョンじゃなければ大丈夫だと思います。Pythonに関してのちに記述しますが、バージョンが少しでも違うと動かなくなることがあります。
まず、自身のGPUがtensorflow等の計算に使えるか以下のサイトで確認してください。なお、NVIDIA製のGPUでないと基本的にはできないと思います。AMD製でもできると噂では聞きましたが私はわからないです。 https://developer.nvidia.com/cuda-gpus
自身のGPUが使用できると分かったら、必要なソフトをインストールしていきます。
必要なソフトは3つ
・NVIDIA Driver
・CUDA
・cuDNN
これらはGPUの開発元であるNVIDIAからリリースされていて、GPUを計算に使うのに必要です。 1つずつインストールします。
これはすでに入ってる人もいるかと思います。ない場合は下のサイトを開いて自分のGPUを選択してください。
https://www.nvidia.co.jp/Download/index.aspx?lang=jp
「探す」を押すと、ダウンロードの画面になるのでダウンロードしてください。
この時、バージョンと書かれている数字を後で使うのでメモを取るか覚えておいてください。
次にCUDAを入れていきます。CUDAはGPUを深層学習などの計算に使うために必要なツールキットです。
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
ここで、先ほどのNVIDIA Driverのバージョンが関係してきます。下の画像でDriverのバージョンが小さいやつが使えます。例えば、私はDriverのバージョンが531.41なので最新のCUDAが使えることになります。
しかし、さらに注意するべき点があります。私が確認した中ではCUDAの数字が12のやつはTensorFlowがGPUで動きませんでした(最新版はまだtensorflow for GPUに対応されてないのかも?)。なので、11.xのCUDAを入れることをお勧めします。
よって、「自分のバージョンで使える」かつ「CUDA 11.x」のCUDAをダウンロードしてください。
最後にcuDNNをインストールします。cuDNNはGPUでディープニューラルネットワークへの使用のために必要なライブラリです。
まず、下のURLに飛んでDownload cuDNNをクリックします。この時、NVIDIAへのログインを求められるので登録するかログインしてください。
https://developer.nvidia.com/cudnn
そしたら、Agreeにチェックを入れると次のような画面になるのでArchiveをクリックします。
するといままでリリースされたバージョンが出てくるのでcuDNNのバージョンが8.1.xでfor CUDAに11.0,11.1 and 11.2のものをダウンロードしてください。
condaやVScodeなどで仮想環境でのpython環境を作ります。この際、pythonのバージョンは3.7から3.10の間で作ってください(私は3.9.13)。そしたら、R側でそのpythonを選択してください。Rstudioなら左上の「Tools」→「Global Options」→「Python」→「Select」から選べます。
そしたら、Rでtensorflowを動かすためのパッケージを入れます。
install.packages("keras")
install.packages("tensorflow")
library(keras)
install_keras(tensorflow = "gpu",version = "2.10.0")
一、二行目でkerasパッケージとTensorFlowパッケージをインストールし、三行目でkerasパッケージを呼び出す。四行目でkerasパッケージからtensorflowをGPU版のバージョン2.10.0でダウンロードします。結構時間がかかった気がします。
library(tensorflow)
tf$config$list_physical_devices("GPU")
## [[1]]
## PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')
この時、出力結果にGPUが表示されればR上でtensorflowを動かすときにGPUが使われます。結構大変でしたね。これで動かない場合は、自動で追加されるはずのPATHが追加されていなかったり、Pythonのバージョンが間違っていたりといろいろな原因が考えられるので、ほかのサイトも参考にして解決してみてください。