SlideShare une entreprise Scribd logo
1  sur  32
RでGPU使ってみた

           Tokyo.R #19
            和田 計也

サイバー系
サイバー系


     はじめに



     ※この発表は個人の
     見解であり、所属する
     組織の公式見解では
     ありません。

2011/11/19            1
サイバー系


     アジェンダ

     1.      自己紹介
     2.      GPUの話
     3.      R上で動くGPU演算をしてくれるパッケージ紹介
     4.      ベンチマーク結果




2011/11/19                                     2
サイバー系


     自己紹介

  和田 計也(@wdkz)
         静岡県袋井市出身



  サイバー系企業でデータマイニングエンジニア職
         創立記念日が3月18日
         社長の出身地が福井県鯖江市



  前職はバイオベンチャー
         バイオマーカ探索してた
         学生時代は枯草菌の研究




2011/11/19                          3
サイバー系


     唐突ですが

      R遅!!ですね。
                あまりの遅さに気を失いかけたことありませんか?




                 そこで
                 GPUですよ
2011/11/19                                         4
サイバー系


     GPU

      GPUとは?
                Graphics Processing Unitの略
                3Dグラフィックスの表示に必要な計算処理(3D座標から2D座標へ
                 の座標変換など)を行う半導体チップ
                (最新のは)448コア




2011/11/19                                             5
サイバー系


     GPU

    東工大のスパコン、TSUBAME2.0にもGPUが使われています!




2011/11/19                                6
サイバー系


     GPGPU

    General-purpose computing on graphics processing
     units; GPUによる汎目的計算

                CUDA
                                  今日はこれ(一般的だから)



                ATI Stream




                OpenCL




2011/11/19                                                  7
サイバー系


     ちょっと待て




でもお高い
んでしょ?
2011/11/19            8
サイバー系


     高い…




      Amazonで(専用の)GPUカードだけ買うと
      しても28万くらいする..




       GPUカード搭載のサーバマシンだと90万弱もする..

2011/11/19                                  9
サイバー系


     じゃあどうするの?

             こんなのとかでも一応動く。
             Amazonだと5000円くらいから




             一応問題点
             ・デスクトップマシンもってない
             ・それなりのスペックでベンチマークしないと
              過小評価しちゃって二度と日の目を見ないかもしれんし。

                    それなりのスペック・・・①GPUカードに搭載されてるメモリ量
                                ②IO速度
                                ③倍精度浮動小数点計算


2011/11/19                                               10
サイバー系


     結局GPUはどうすればいいの?
            AWS(Amazon Web Service)で可能です




                                            これ




2011/11/19                                           11
サイバー系


     AWS Management Consoleから始める
            とりあえず試すだけなので「Spot Instances」でいいや




                                                よくわからん
                                                からこっち
                                                使ってみた




                                SAS美




2011/11/19                                            12
サイバー系


     AWS Management Consoleから始めるSAS美




        1時間0.665ドルからってかいてあるから、Max Priceのとこに
         「0.665」っていれてContinueボタン押しとく

2011/11/19                                         13
サイバー系


     3.1 Rのビルド

            まあ、あれだ。いろいろやるとこんな感じ↓で使えるように
             なった。




        詳しくは@KenTamagawa さんをフォロー
         するか本読んでね♪

2011/11/19                                     14
サイバー系


     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 install




2011/11/19                                                                      15
サイバー系


     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
サイバー系


     動作確認する・Win

  cd NVIDIA_GPU_Computing_SDK/C
  ./bin/linux/release/deviceQuery




     ここまでで、CUDAが動く環境
     が整った。次にR上でCUDAが
     利用することを考える



2011/11/19                              17
サイバー系


     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
サイバー系


     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
サイバー系


     (参考資料)gputoolsのインストール

            今回は使わなかったけど…
            前々々ページに記載してあるCUDAインストールまで完了しているとする

       R
       > install.packages(“gputools”)’




              お手軽♪
2011/11/19                                     20
サイバー系


     Rpudパッケージについて
            基本的に以下の4つの手法しか(まだ)実装されていません
            基本的に普通の関数と同様の引数で使えますので悩みません


                            CPUで計算               GPUで計算
                                                 (rpud)
              相関            cor                  rpuCor
              距離            dist                 rpuDist
              階層クラスタリング     hclust               rpuHclust
              SVM(トレーニング)   e1071::svm           rpuSvm
              SVM(予測)       e1071::predict.svm   predict.rpuSvm




2011/11/19                                                            21
サイバー系


     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.860




2011/11/19
                                       ←     Kendall以外はCPUで処理されてた

                                                                      22
サイバー系


     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
サイバー系


     ベンチマークのマシン構成
            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
サイバー系


     ベンチマーク①

       >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
サイバー系


     ベンチマーク②

       >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
サイバー系


     ベンチマーク③

       >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
サイバー系


     ベンチマーク④

       >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
サイバー系


     明細




             27時間使って1500円くらい
2011/11/19                     29
サイバー系


     (参考) 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
サイバー系


     最後に

             これはなかなか使えるな。
              メモリ使用量は少ないんだけどCPU時間がやたら長い処理に向く
              SVMとか階層クラスタリングとか
             ただし




              Rpud(Rpudplus)もgputoolsも商用利用するには
               作者からライセンスを購入して下さい。



2011/11/19                                            31

Contenu connexe

Tendances

比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!
takehikoihayashi
 
グラフィカルモデル入門
グラフィカルモデル入門グラフィカルモデル入門
グラフィカルモデル入門
Kawamoto_Kazuhiko
 
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)
Takao Yamanaka
 
パターン認識 第10章 決定木
パターン認識 第10章 決定木 パターン認識 第10章 決定木
パターン認識 第10章 決定木
Miyoshi Yuya
 
パターン認識 04 混合正規分布
パターン認識 04 混合正規分布パターン認識 04 混合正規分布
パターン認識 04 混合正規分布
sleipnir002
 
Rで階層ベイズモデル
Rで階層ベイズモデルRで階層ベイズモデル
Rで階層ベイズモデル
Yohei Sato
 

Tendances (20)

SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
 
2 4.devianceと尤度比検定
2 4.devianceと尤度比検定2 4.devianceと尤度比検定
2 4.devianceと尤度比検定
 
2 3.GLMの基礎
2 3.GLMの基礎2 3.GLMの基礎
2 3.GLMの基礎
 
pymcとpystanでベイズ推定してみた話
pymcとpystanでベイズ推定してみた話pymcとpystanでベイズ推定してみた話
pymcとpystanでベイズ推定してみた話
 
15分でわかる(範囲の)ベイズ統計学
15分でわかる(範囲の)ベイズ統計学15分でわかる(範囲の)ベイズ統計学
15分でわかる(範囲の)ベイズ統計学
 
比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!
 
グラフィカルモデル入門
グラフィカルモデル入門グラフィカルモデル入門
グラフィカルモデル入門
 
【解説】 一般逆行列
【解説】 一般逆行列【解説】 一般逆行列
【解説】 一般逆行列
 
PyMCがあれば,ベイズ推定でもう泣いたりなんかしない
PyMCがあれば,ベイズ推定でもう泣いたりなんかしないPyMCがあれば,ベイズ推定でもう泣いたりなんかしない
PyMCがあれば,ベイズ推定でもう泣いたりなんかしない
 
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)
 
合成変量とアンサンブル:回帰森と加法モデルの要点
合成変量とアンサンブル:回帰森と加法モデルの要点合成変量とアンサンブル:回帰森と加法モデルの要点
合成変量とアンサンブル:回帰森と加法モデルの要点
 
ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定
 
パターン認識 第10章 決定木
パターン認識 第10章 決定木 パターン認識 第10章 決定木
パターン認識 第10章 決定木
 
深層生成モデルと世界モデル
深層生成モデルと世界モデル深層生成モデルと世界モデル
深層生成モデルと世界モデル
 
Stan超初心者入門
Stan超初心者入門Stan超初心者入門
Stan超初心者入門
 
パターン認識 04 混合正規分布
パターン認識 04 混合正規分布パターン認識 04 混合正規分布
パターン認識 04 混合正規分布
 
階層ベイズとWAIC
階層ベイズとWAIC階層ベイズとWAIC
階層ベイズとWAIC
 
[DL輪読会]Pay Attention to MLPs (gMLP)
[DL輪読会]Pay Attention to MLPs	(gMLP)[DL輪読会]Pay Attention to MLPs	(gMLP)
[DL輪読会]Pay Attention to MLPs (gMLP)
 
Rで階層ベイズモデル
Rで階層ベイズモデルRで階層ベイズモデル
Rで階層ベイズモデル
 
階層モデルの分散パラメータの事前分布について
階層モデルの分散パラメータの事前分布について階層モデルの分散パラメータの事前分布について
階層モデルの分散パラメータの事前分布について
 

Similaire à RでGPU使ってみた

Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込むDjangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む
2bo 2bo
 
Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825
hiro345
 
OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾
外道 父
 
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
maebashi
 
サーバ構築自動化 On aws sqaleの場合
サーバ構築自動化 On aws   sqaleの場合サーバ構築自動化 On aws   sqaleの場合
サーバ構築自動化 On aws sqaleの場合
Ryo Kuroda
 
Osc10do linux nextstep
Osc10do linux nextstepOsc10do linux nextstep
Osc10do linux nextstep
smokey monkey
 
Next-L Enju 開発ワークショップ #10
Next-L Enju 開発ワークショップ #10Next-L Enju 開発ワークショップ #10
Next-L Enju 開発ワークショップ #10
Kosuke Tanabe
 

Similaire à RでGPU使ってみた (20)

Pdp11 on-fpga
Pdp11 on-fpgaPdp11 on-fpga
Pdp11 on-fpga
 
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
 
GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -
 
Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込むDjangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む
 
Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825
 
OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾
 
Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6
 
Puppet on AWS
Puppet on AWSPuppet on AWS
Puppet on AWS
 
Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CD
Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CDAzure DevOps で実現する Unity アプリのハイパフォーマンス CI/CD
Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CD
 
kube-system落としてみました
kube-system落としてみましたkube-system落としてみました
kube-system落としてみました
 
20230511_Node-RED_Park_vol11_kitazaki_v1.pdf
20230511_Node-RED_Park_vol11_kitazaki_v1.pdf20230511_Node-RED_Park_vol11_kitazaki_v1.pdf
20230511_Node-RED_Park_vol11_kitazaki_v1.pdf
 
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
 
(JP) GPGPUがPostgreSQLを加速する
(JP) GPGPUがPostgreSQLを加速する(JP) GPGPUがPostgreSQLを加速する
(JP) GPGPUがPostgreSQLを加速する
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
S3 を単純ストレージとして 利用する手段の比較
S3 を単純ストレージとして 利用する手段の比較S3 を単純ストレージとして 利用する手段の比較
S3 を単純ストレージとして 利用する手段の比較
 
サーバ構築自動化 On aws sqaleの場合
サーバ構築自動化 On aws   sqaleの場合サーバ構築自動化 On aws   sqaleの場合
サーバ構築自動化 On aws sqaleの場合
 
Osc10do linux nextstep
Osc10do linux nextstepOsc10do linux nextstep
Osc10do linux nextstep
 
Osc2013 tokyospring
Osc2013 tokyospringOsc2013 tokyospring
Osc2013 tokyospring
 
Next-L Enju 開発ワークショップ #10
Next-L Enju 開発ワークショップ #10Next-L Enju 開発ワークショップ #10
Next-L Enju 開発ワークショップ #10
 
AWSとGPUインスタンスのご紹介
AWSとGPUインスタンスのご紹介AWSとGPUインスタンスのご紹介
AWSとGPUインスタンスのご紹介
 

Plus de Kazuya Wada

RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみた
Kazuya Wada
 

Plus de Kazuya Wada (17)

オンラインTVサービスの分析事例
オンラインTVサービスの分析事例オンラインTVサービスの分析事例
オンラインTVサービスの分析事例
 
DeployR使ってみた話
DeployR使ってみた話DeployR使ってみた話
DeployR使ってみた話
 
道玄坂Lt#2 wdkz
道玄坂Lt#2 wdkz道玄坂Lt#2 wdkz
道玄坂Lt#2 wdkz
 
ハイレゾの話
ハイレゾの話ハイレゾの話
ハイレゾの話
 
Shiny-Serverあれこれ
Shiny-ServerあれこれShiny-Serverあれこれ
Shiny-Serverあれこれ
 
データサイエンティストカジュアルトーク by wdkz
データサイエンティストカジュアルトーク by wdkzデータサイエンティストカジュアルトーク by wdkz
データサイエンティストカジュアルトーク by wdkz
 
R-3.0.0でGLM
R-3.0.0でGLMR-3.0.0でGLM
R-3.0.0でGLM
 
はじめてのShiny
はじめてのShinyはじめてのShiny
はじめてのShiny
 
JuliaでGLM
JuliaでGLMJuliaでGLM
JuliaでGLM
 
Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~
 
RのffでGLMしてみたけど...
RのffでGLMしてみたけど...RのffでGLMしてみたけど...
RのffでGLMしてみたけど...
 
そろそろRStudioの話
そろそろRStudioの話そろそろRStudioの話
そろそろRStudioの話
 
RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~
 
Rでウォーリを探してみた
Rでウォーリを探してみたRでウォーリを探してみた
Rでウォーリを探してみた
 
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみた
 
Tokyo.R#16 wdkz
Tokyo.R#16 wdkzTokyo.R#16 wdkz
Tokyo.R#16 wdkz
 

Dernier

TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
YukiTerazawa
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
koheioishi1
 

Dernier (7)

TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 

RでGPU使ってみた

  • 1. RでGPU使ってみた Tokyo.R #19 和田 計也 サイバー系
  • 2. サイバー系 はじめに ※この発表は個人の 見解であり、所属する 組織の公式見解では ありません。 2011/11/19 1
  • 3. サイバー系 アジェンダ 1. 自己紹介 2. GPUの話 3. R上で動くGPU演算をしてくれるパッケージ紹介 4. ベンチマーク結果 2011/11/19 2
  • 4. サイバー系 自己紹介  和田 計也(@wdkz)  静岡県袋井市出身  サイバー系企業でデータマイニングエンジニア職  創立記念日が3月18日  社長の出身地が福井県鯖江市  前職はバイオベンチャー  バイオマーカ探索してた  学生時代は枯草菌の研究 2011/11/19 3
  • 5. サイバー系 唐突ですが  R遅!!ですね。  あまりの遅さに気を失いかけたことありませんか? そこで GPUですよ 2011/11/19 4
  • 6. サイバー系 GPU  GPUとは?  Graphics Processing Unitの略  3Dグラフィックスの表示に必要な計算処理(3D座標から2D座標へ の座標変換など)を行う半導体チップ  (最新のは)448コア 2011/11/19 5
  • 7. サイバー系 GPU  東工大のスパコン、TSUBAME2.0にもGPUが使われています! 2011/11/19 6
  • 8. サイバー系 GPGPU  General-purpose computing on graphics processing units; GPUによる汎目的計算  CUDA 今日はこれ(一般的だから)  ATI Stream  OpenCL 2011/11/19 7
  • 9. サイバー系 ちょっと待て でもお高い んでしょ? 2011/11/19 8
  • 10. サイバー系 高い… Amazonで(専用の)GPUカードだけ買うと しても28万くらいする.. GPUカード搭載のサーバマシンだと90万弱もする.. 2011/11/19 9
  • 11. サイバー系 じゃあどうするの? こんなのとかでも一応動く。 Amazonだと5000円くらいから 一応問題点 ・デスクトップマシンもってない ・それなりのスペックでベンチマークしないと 過小評価しちゃって二度と日の目を見ないかもしれんし。 それなりのスペック・・・①GPUカードに搭載されてるメモリ量 ②IO速度 ③倍精度浮動小数点計算 2011/11/19 10
  • 12. サイバー系 結局GPUはどうすればいいの?  AWS(Amazon Web Service)で可能です これ 2011/11/19 11
  • 13. サイバー系 AWS Management Consoleから始める  とりあえず試すだけなので「Spot Instances」でいいや よくわからん からこっち 使ってみた SAS美 2011/11/19 12
  • 14. サイバー系 AWS Management Consoleから始めるSAS美  1時間0.665ドルからってかいてあるから、Max Priceのとこに 「0.665」っていれてContinueボタン押しとく 2011/11/19 13
  • 15. サイバー系 3.1 Rのビルド  まあ、あれだ。いろいろやるとこんな感じ↓で使えるように なった。  詳しくは@KenTamagawa さんをフォロー するか本読んでね♪ 2011/11/19 14
  • 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 install 2011/11/19 15
  • 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. サイバー系 動作確認する・Win cd NVIDIA_GPU_Computing_SDK/C ./bin/linux/release/deviceQuery ここまでで、CUDAが動く環境 が整った。次にR上でCUDAが 利用することを考える 2011/11/19 17
  • 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. サイバー系 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. サイバー系 (参考資料)gputoolsのインストール  今回は使わなかったけど…  前々々ページに記載してあるCUDAインストールまで完了しているとする R > install.packages(“gputools”)’ お手軽♪ 2011/11/19 20
  • 22. サイバー系 Rpudパッケージについて  基本的に以下の4つの手法しか(まだ)実装されていません  基本的に普通の関数と同様の引数で使えますので悩みません CPUで計算 GPUで計算 (rpud) 相関 cor rpuCor 距離 dist rpuDist 階層クラスタリング hclust rpuHclust SVM(トレーニング) e1071::svm rpuSvm SVM(予測) e1071::predict.svm predict.rpuSvm 2011/11/19 21
  • 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.860 2011/11/19 ← Kendall以外はCPUで処理されてた 22
  • 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. サイバー系 ベンチマークのマシン構成  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. サイバー系 ベンチマーク① >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. サイバー系 ベンチマーク② >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. サイバー系 ベンチマーク③ >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. サイバー系 ベンチマーク④ >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. サイバー系 明細 27時間使って1500円くらい 2011/11/19 29
  • 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. サイバー系 最後に  これはなかなか使えるな。  メモリ使用量は少ないんだけどCPU時間がやたら長い処理に向く  SVMとか階層クラスタリングとか  ただし  Rpud(Rpudplus)もgputoolsも商用利用するには 作者からライセンスを購入して下さい。 2011/11/19 31