RでGPUを使う時がきたようだ。
しかし、使える環境を整備するだけで1日潰れた。
OS はubuntu 14.04
メモリは 32GB
CPU は Intel(R) Xeon(R) CPU E5-1620 v3 @ 3.50GHz
GPU は GeForce GTX 750 Ti が2枚
NVIDIA の準備
GTX 750 Ti のドライバーは361だが、apt-get でなれれば下でとってくる。
sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt-get update
CUDA ToolKit を入れる
こちらを参考にCUDA 7.5 にしておいた。
ダウンロードして
sudo dpkg -i cuda-repo-ubuntu1404_7.5-18_amd64.deb sudo aptitude update sudo aptitude install -y cuda sudo reboot # 再起動後 /usr/local/cuda-7.5/bin/cuda-install-samples . cd NVIDIA_CUDA-7.5_Samples/1_Utilities/deviceQuery/ make ./deviceQuery
これでGPU を使う準備はできた。ここからCaffeやChainer などGPU ツールも使うことがたぶんできる。
RでGPU を使うためのR パッケージをインストールするが、こちらやTask viewer のHPC一覧ではgputools, HiPLARM, rpud, magma, gcbd, OpenCL, WideLM, cudaBayesreg, permGPU, gmatrix, gpuR がある。
太字はがんばればインストールできたパッケージ、その他は依存関係をいろいろ入れてもできなかったパッケージ。
gputools
結局これになりそう。
普通にインストールしていたら、下のように言われてしまい、R.h がない。
classification.cu:24:14: error: R.h: No such file or directory make: *** [classification.o] Error 1 ERROR: compilation failed for package ‘gputools’ * removing ‘/usr/local/lib64/R/library/gputools’ The downloaded source packages are in ‘/tmp/RtmpD9AnXS/downloaded_packages’ Updating HTML index of packages in '.Library' Making packages.html ... done Warning message: In install.packages("gputools") : installation of package ‘gputools’ had non-zero exit status
こちらを参考に下記を実行すると、うまく行く。
cd /usr/lib/R sudo ln -s /usr/share/R/include .
やってみる。
行列積なのでのオーダーで時間がかかる。
あまり速くならない。3倍速くらい。
しかも途中で device memory allocation failed って言われるから小休止が必要。
library(gputools) gpu.matmult <- function(n) { A <- matrix(runif(n * n), n ,n) B <- matrix(runif(n * n), n ,n) tic <- Sys.time() C <- A %*% B toc <- Sys.time() comp.time1 <- toc - tic cat("CPU: ", comp.time1, "\n") tic <- Sys.time() C <- gpuMatMult(A, B) toc <- Sys.time() comp.time2 <- toc - tic cat("GPU: ", comp.time2, "\n") return(c(comp.time1, comp.time2)) } N <- c(5, 10, 50, 100, 500, 1000, 2000, 3000, 5000) com <- mapply(gpu.matmult, N) cols <- c("black", "blue") matplot(N, t(com), type="l", lwd=2, lty=1, xlab="No. N", ylab="Computation time [sec]", col=cols, log="xy") legend("topleft", legend=c("CPU", "GPU"), lty=1, lwd=2, col=cols)
rpud
RでGPU使ってみたでイチオシの
rpudをやってみる。
CRAN からはないっぽいのでソースを落としてきてインストールする。
依存関係として
install.packages(c("coda", "SparseM"))
としておけばわりと簡単にインストールできる。
というわけでやってみたら
rpuDist(m) : No active license is found.
ファッ!?!?
お金がいるらしい。
OpenCL
依存パッケージをいれていたらインストールできた。
R内でCpp 的に書ける様子。ガチ勢。
permGPU
Bioconductor のBiobase をいれたらインストールできた。
mRNA の検定がt.test やwilcoxon.test などできるらしい。が、他の使い方はよくわからない。