Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
RでGPU使ってみた           Tokyo.R #19            和田 計也サイバー系
サイバー系     はじめに     ※この発表は個人の     見解であり、所属する     組織の公式見解では     ありません。2011/11/19            1
サイバー系     アジェンダ     1.      自己紹介     2.      GPUの話     3.      R上で動くGPU演算をしてくれるパッケージ紹介     4.      ベンチマーク結果2011/11/19     ...
サイバー系     自己紹介  和田 計也(@wdkz)         静岡県袋井市出身  サイバー系企業でデータマイニングエンジニア職         創立記念日が3月18日         社長の出身地が福井県鯖江市  前職は...
サイバー系     唐突ですが      R遅!!ですね。                あまりの遅さに気を失いかけたことありませんか?                 そこで                 GPUですよ2011/11/1...
サイバー系     GPU      GPUとは?                Graphics Processing Unitの略                3Dグラフィックスの表示に必要な計算処理(3D座標から2D座標へ    ...
サイバー系     GPU    東工大のスパコン、TSUBAME2.0にもGPUが使われています!2011/11/19                                6
サイバー系     GPGPU    General-purpose computing on graphics processing     units; GPUによる汎目的計算                CUDA          ...
サイバー系     ちょっと待てでもお高いんでしょ?2011/11/19            8
サイバー系     高い…      Amazonで(専用の)GPUカードだけ買うと      しても28万くらいする..       GPUカード搭載のサーバマシンだと90万弱もする..2011/11/19                  ...
サイバー系     じゃあどうするの?             こんなのとかでも一応動く。             Amazonだと5000円くらいから             一応問題点             ・デスクトップマシンもってない...
サイバー系     結局GPUはどうすればいいの?            AWS(Amazon Web Service)で可能です                                            これ2011/11/19...
サイバー系     AWS Management Consoleから始める            とりあえず試すだけなので「Spot Instances」でいいや                                        ...
サイバー系     AWS Management Consoleから始めるSAS美        1時間0.665ドルからってかいてあるから、Max Priceのとこに         「0.665」っていれてContinueボタン押しとく2...
サイバー系     3.1 Rのビルド            まあ、あれだ。いろいろやるとこんな感じ↓で使えるように             なった。        詳しくは@KenTamagawa さんをフォロー         するか本...
サイバー系     AWS上のAmazon Linux AMIでRをコンパイル     sudo yum install gccsudo     sudo yum install gcc-gfortran                  何か...
サイバー系     AWS上のAmazon Linux AMIでGPU関連のを入れる     yum install libGLU-devel libXi-devel libXmu-devel freeglut-devel kernel-dev...
サイバー系     動作確認する・Win  cd NVIDIA_GPU_Computing_SDK/C  ./bin/linux/release/deviceQuery     ここまでで、CUDAが動く環境     が整った。次にR上でCUD...
サイバー系     RでGPUを使えるパッケージ      Gputool              http://brainarray.mbni.med.umich.edu/brainarray/rgpgpu/             ...
サイバー系     Rpudをインストール     export CUDA_HOME=“/usr/local/cuda”     export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${CUDA_HOME}/l...
サイバー系     (参考資料)gputoolsのインストール            今回は使わなかったけど…            前々々ページに記載してあるCUDAインストールまで完了しているとする       R       > in...
サイバー系     Rpudパッケージについて            基本的に以下の4つの手法しか(まだ)実装されていません            基本的に普通の関数と同様の引数で使えますので悩みません                   ...
サイバー系     Rpudをちょっと使ってみる     R     >library(rpud) #これでrpudもrpudplusも両方読み込まれる     >A <- runif(100000000); B <- runif(100000...
サイバー系     Rpudをちょっと使ってみる・2     R     >library(rpud) #これでrpudもrpudplusも両方読み込まれる     >A <- runif(100000000); B <- runif(1000...
サイバー系     ベンチマークのマシン構成            CPUマシン              Intel Xeon L5520@2.27GHz(L2 8M), 4Cores (8Threads) x 2            ...
サイバー系     ベンチマーク①       >var.nums <- c(1000,5000,10000,50000,1e+5,5e+5,1e+6,5e+6)       >for(i in 1:length(var.nums)){    ...
サイバー系     ベンチマーク②       >var.nums <- c(1000,5000,10000,50000)       >for(i in 1:length(var.nums)){       A <- matrix(runif...
サイバー系     ベンチマーク③       >var.nums <- c(1000,5000,10000,50000)       >for(i in 1:length(var.nums)){       A <- matrix(runif...
サイバー系     ベンチマーク④       >var.nums <- c(1000,5000,10000,50000)       >for(i in 1:length(var.nums)){       A <- matrix(runif...
サイバー系     明細             27時間使って1500円くらい2011/11/19                     29
サイバー系     (参考) gputoolsパッケージ       項目              説明       gpuCor          各種相関係数の計算       gpuCrossprod    行列のクロス積       ...
サイバー系     最後に             これはなかなか使えるな。              メモリ使用量は少ないんだけどCPU時間がやたら長い処理に向く              SVMとか階層クラスタリングとか      ...
Upcoming SlideShare
Loading in …5
×

RでGPU使ってみた

13,590 views

Published on

第19回R勉強会@東京での発表資料です

Published in: Education
  • Be the first to comment

RでGPU使ってみた

  1. 1. RでGPU使ってみた Tokyo.R #19 和田 計也サイバー系
  2. 2. サイバー系 はじめに ※この発表は個人の 見解であり、所属する 組織の公式見解では ありません。2011/11/19 1
  3. 3. サイバー系 アジェンダ 1. 自己紹介 2. GPUの話 3. R上で動くGPU演算をしてくれるパッケージ紹介 4. ベンチマーク結果2011/11/19 2
  4. 4. サイバー系 自己紹介  和田 計也(@wdkz)  静岡県袋井市出身  サイバー系企業でデータマイニングエンジニア職  創立記念日が3月18日  社長の出身地が福井県鯖江市  前職はバイオベンチャー  バイオマーカ探索してた  学生時代は枯草菌の研究2011/11/19 3
  5. 5. サイバー系 唐突ですが  R遅!!ですね。  あまりの遅さに気を失いかけたことありませんか? そこで GPUですよ2011/11/19 4
  6. 6. サイバー系 GPU  GPUとは?  Graphics Processing Unitの略  3Dグラフィックスの表示に必要な計算処理(3D座標から2D座標へ の座標変換など)を行う半導体チップ  (最新のは)448コア2011/11/19 5
  7. 7. サイバー系 GPU  東工大のスパコン、TSUBAME2.0にもGPUが使われています!2011/11/19 6
  8. 8. サイバー系 GPGPU  General-purpose computing on graphics processing units; GPUによる汎目的計算  CUDA 今日はこれ(一般的だから)  ATI Stream  OpenCL2011/11/19 7
  9. 9. サイバー系 ちょっと待てでもお高いんでしょ?2011/11/19 8
  10. 10. サイバー系 高い… Amazonで(専用の)GPUカードだけ買うと しても28万くらいする.. GPUカード搭載のサーバマシンだと90万弱もする..2011/11/19 9
  11. 11. サイバー系 じゃあどうするの? こんなのとかでも一応動く。 Amazonだと5000円くらいから 一応問題点 ・デスクトップマシンもってない ・それなりのスペックでベンチマークしないと 過小評価しちゃって二度と日の目を見ないかもしれんし。 それなりのスペック・・・①GPUカードに搭載されてるメモリ量 ②IO速度 ③倍精度浮動小数点計算2011/11/19 10
  12. 12. サイバー系 結局GPUはどうすればいいの?  AWS(Amazon Web Service)で可能です これ2011/11/19 11
  13. 13. サイバー系 AWS Management Consoleから始める  とりあえず試すだけなので「Spot Instances」でいいや よくわからん からこっち 使ってみた SAS美2011/11/19 12
  14. 14. サイバー系 AWS Management Consoleから始めるSAS美  1時間0.665ドルからってかいてあるから、Max Priceのとこに 「0.665」っていれてContinueボタン押しとく2011/11/19 13
  15. 15. サイバー系 3.1 Rのビルド  まあ、あれだ。いろいろやるとこんな感じ↓で使えるように なった。  詳しくは@KenTamagawa さんをフォロー するか本読んでね♪2011/11/19 14
  16. 16. サイバー系 AWS上のAmazon Linux AMIでRをコンパイル sudo yum install gccsudo sudo yum install gcc-gfortran 何か絶望的にいろいろ入ってない sudo yum install gcc-c++ sudo yum install readline-devel sudo yum install make wget ftp://ftp.u-aizu.ac.jp/pub/lang/R/CRAN/src/base/R-2/R-2.14.0.tar.gz tar -xvf R-2.14.0.tar.gz cd R-2.14.0 ←このオプションつけとかないと後でGPU関連の パッケージがインストールできない。 ./configure --enable-R-shlib make sudo make install2011/11/19 15
  17. 17. サイバー系 AWS上のAmazon Linux AMIでGPU関連のを入れる yum install libGLU-devel libXi-devel libXmu-devel freeglut-devel kernel-devel 必要なライブラリをいれて wget http://developer.download.nvidia.com/compute/cuda/4_0/drivers/devdriver_4.0 _linux_64_270.41.19.run Developer Drivers for Linux sudo ./devdriver_4.0_linux_64_270.41.19.run を入れて wget http://developer.download.nvidia.com/compute/cuda/4_0/toolkit/cudatoolkit _4.0.17_linux_64_rhel6.0.run CUDAを入れて sudo sh cudatoolkit_4.0.17_linux_64_rhel6.0.run (Amazon Linux AMIのベースlinuxが何かよく わからんかったけどredhat 6.0のでいけたわ~) wget http://developer.download.nvidia.com/compute/cuda/4_0/sdk/gpucomputingsdk_ 4.0.17_linux.run ./gpucomputingsdk_4.0.17_linux.run GPU Computing SDKを入れる cd NVIDIA_GPU_Computing_SDK/C sudo make *ここら辺のはもともとインストール済みっていう噂なんだけど, 全部入れ直してみた。2011/11/19 16
  18. 18. サイバー系 動作確認する・Win cd NVIDIA_GPU_Computing_SDK/C ./bin/linux/release/deviceQuery ここまでで、CUDAが動く環境 が整った。次にR上でCUDAが 利用することを考える2011/11/19 17
  19. 19. サイバー系 RでGPUを使えるパッケージ  Gputool  http://brainarray.mbni.med.umich.edu/brainarray/rgpgpu/  使える関数多い  Rpud  http://www.r-tutor.com/content/download  Gputoolより高速だった  svmはe1071パッケージのsvmに準拠  いろんなカーネルトリック使える  こっち使ってみた2011/11/19 18
  20. 20. サイバー系 Rpudをインストール export CUDA_HOME=“/usr/local/cuda” export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${CUDA_HOME}/lib64“ export PATH=${CUDA_HOME}/bin:${PATH} 環境変数を設定して export R_LIBS_USER="${HOME}/lib/R“ R 必要なパッケージSparseMを >install.packages("SparseM") インストールして >q(“no”) wget http://www.r-tutor.com/sites/default/files/rpud/rpud_0.1.1.tar.gz R CMD INSTALL rpud_0.1.1.tar.gz Rpudをいれて wget http://www.r-tutor.com/sites/default/files/rpud/rpudplus_0.1.1.tar.gz tar xvf rpudplus_0.1.1.tar.gz Rpudplusをいれる cd rpudplus_0.1.1 ./install.sh RPUSVMってのもあるので お好きな人はどうぞ2011/11/19 19
  21. 21. サイバー系 (参考資料)gputoolsのインストール  今回は使わなかったけど…  前々々ページに記載してあるCUDAインストールまで完了しているとする R > install.packages(“gputools”)’ お手軽♪2011/11/19 20
  22. 22. サイバー系 Rpudパッケージについて  基本的に以下の4つの手法しか(まだ)実装されていません  基本的に普通の関数と同様の引数で使えますので悩みません CPUで計算 GPUで計算 (rpud) 相関 cor rpuCor 距離 dist rpuDist 階層クラスタリング hclust rpuHclust SVM(トレーニング) e1071::svm rpuSvm SVM(予測) e1071::predict.svm predict.rpuSvm2011/11/19 21
  23. 23. サイバー系 Rpudをちょっと使ってみる R >library(rpud) #これでrpudもrpudplusも両方読み込まれる >A <- runif(100000000); B <- runif(100000000) >system.time(cor (A, B), method=“pearson”) まずは通常のCPUで(ピアソンの)相関計数計算 ># user system elapsed ># 1.858 0.003 1.860 >system.time(gpuCor(A, B, method="pearson")) ># user system elapsed 次にGPUで(ピアソンの)相関計数計算 ># 1.858 0.002 1.8602011/11/19 ← Kendall以外はCPUで処理されてた 22
  24. 24. サイバー系 Rpudをちょっと使ってみる・2 R >library(rpud) #これでrpudもrpudplusも両方読み込まれる >A <- runif(100000000); B <- runif(100000000) >system.time(cor (A, B), method=“kendall”) まずは通常のCPUで(ケンドールの順位)相関計数計算 ># user system elapsed ># 199.025 0.000 198.926 >system.time(gpuCor(A, B, method=“kendall")) ># user system elapsed 次にGPUで(ケンドールの順位)相関計数計算 ># 4.262 2.183 6.581 速っ!!2011/11/19 23
  25. 25. サイバー系 ベンチマークのマシン構成  CPUマシン  Intel Xeon L5520@2.27GHz(L2 8M), 4Cores (8Threads) x 2 なんだけど、シングルスレッドしか使わなかった  32Gbyte メモリ  CPUマシン  Intel Xeon X5570@2.93GHz(L2 8M), 4Cores (8Threads) x 2  24Gbyte メモリ  Tesla M2050 x 2  1.15GHz GPU (448 Cores)  3Gbyte グローバルメモリ  48Kbyte / blockの共有メモリ2011/11/19 24
  26. 26. サイバー系 ベンチマーク① >var.nums <- c(1000,5000,10000,50000,1e+5,5e+5,1e+6,5e+6) >for(i in 1:length(var.nums)){ A <- runif(var.nums[i]); B <- runif(var.nums[i]) +#CPUで計算 +System.time(cor(A, B), method=“kendall”) + +#GPUで計算 +System.time(rpuCor(A, B), method=“kendall”) } ケンドールの順位相関係数計算時間 30000 25000長いベクトル同士の相関係数 20000を算出。戻り値は長さ1のベクトル 処理時間(秒) 約40倍高速化 15000 CPU GPU 10000 5000 0 0 1000000 2000000 3000000 4000000 5000000 6000000 変数の数2011/11/19 25
  27. 27. サイバー系 ベンチマーク② >var.nums <- c(1000,5000,10000,50000) >for(i in 1:length(var.nums)){ A <- matrix(runif(var.nums[i]*100), var.num(i), 100) B <- matrix(runif(var.nums[i]*100), var.num[i], 100) +#CPUで計算 +System.time(dist(A, B), method=“euclidean”) + +#GPUで計算 +System.time(rpuDist(A, B), method=“euclidean”) ユークリッド距離計算時間 } 300 250 長い行 x 100列のマトリックス同士 200 の距離を算出。 処理時間(秒) 戻り値はdistオブジェクト 150 約7~8倍高速化 CPU (結構大きい) GPU 100 50 0 0 5000 10000 15000 20000 25000 30000 35000 行数(列数は100に固定)2011/11/19 26
  28. 28. サイバー系 ベンチマーク③ >var.nums <- c(1000,5000,10000,50000) >for(i in 1:length(var.nums)){ A <- matrix(runif(var.nums[i]*100), var.num(i), 100) B <- matrix(runif(var.nums[i]*100), var.num[i], 100) +#CPUで計算 d <- dist(A, B) +System.time(hclust(d), method=“complete”) + +#GPUで計算 +System.time(rpuHclust(d), method=“complete”) 完全連結法階層クラスタリング計算時間 } 8000 7000 長い行 x 100列のマトリックス同士 6000 の距離を算出後階層クラスタリング。5000 処理時間(秒) 戻り値はhclustオブジェクト 約200~300倍高速化 4000 CPU 3000 GPU 2000 1000 0 0 5000 10000 15000 20000 25000 30000 35000 行数(列数は100に固定)2011/11/19 27
  29. 29. サイバー系 ベンチマーク④ >var.nums <- c(1000,5000,10000,50000) >for(i in 1:length(var.nums)){ A <- matrix(runif(var.nums[i]*100), var.num(i), 100) +#CPUで計算 +System.time(svm(y=A[,1], x=A[,-1], scale=FALSE, type="eps-regression")) + +#GPUで計算 +System.time(rpusvm(y=A[,1], x=A[,-1], scale=FALSE, ガウシアンカーネル利用SVM計算時間 type="eps-regression")) 3000 } 2500 CPU 長い行 x 100列のマトリックスを GPU 生成して、1列目を目的変数に 2000 処理時間(秒) それ以外を説明変数としてsvmで 約5~20倍高速化 1500 モデルを構築。パラメータは チューニングしていなくて 1000 デフォルト値を使用 500 0 0 50000 100000 150000 200000 250000 行数(列数は100に固定)2011/11/19 28
  30. 30. サイバー系 明細 27時間使って1500円くらい2011/11/19 29
  31. 31. サイバー系 (参考) gputoolsパッケージ 項目 説明 gpuCor 各種相関係数の計算 gpuCrossprod 行列のクロス積 gpuDist ベクトル間距離計算 gpuDistClust ベクトル間の距離と階層型クラスタリング計算 gpuFastICA 独立成分分析 gpuGlm 一般化線形モデル gpuGranger ベクトルの階層型クラスタリングの実行 gpuLm 線形モデル gpuMatMult 実行マトリックス乗算 gpuMi 相互情報をベースにした B スプライン gpuQr マトリックスの QR 分解の推定 gpuSolve マトリックスベクトル式の解の推定 gpuSvd 特異値分解 gpuSvmPredict サポートベクターマシンスタイルの2値分類器 gpuSvmTrain データセットのサポートベクターマシンのトレイニング gpuTcrossprod 転置行列のクロス積 gpuTtest T 検定推定2011/11/19 30
  32. 32. サイバー系 最後に  これはなかなか使えるな。  メモリ使用量は少ないんだけどCPU時間がやたら長い処理に向く  SVMとか階層クラスタリングとか  ただし  Rpud(Rpudplus)もgputoolsも商用利用するには 作者からライセンスを購入して下さい。2011/11/19 31

×