作者JackBaska (Baska)
看板R_Language
標題Re: [討論] 有關R的平行計算應用
時間Mon May 2 08:33:31 2016
→ clickhere: OpenMP和OpenMPI是不同的東西.... 05/02 00:15
→ clickhere: OpenMPI和Rmpi都不需要permission.安裝在user下即可. 05/02 00:16
→ clickhere: 不需要root 05/02 00:17
→ JackBaska: 我直接裝library是會跳non-zero status ,然後參考原文 05/02 08:11
→ JackBaska: 網站的做法是先用command line安裝完OpenMP,然後CMD 05/02 08:11
→ JackBaska: Rmpi後再回到R裡面安裝library才成功,然而前面command 05/02 08:12
→ JackBaska: line的動作我在cluster好像沒有權限,然後試另一個方法 05/02 08:13
→ JackBaska: 都遇到版本問題,cluster的R是3.1.x,我還在找怎麼避開 05/02 08:13
→ JackBaska: permission做更新還有以上建置 05/02 08:14
由於C大有提出這個問題 , 想回答C大順便看是否知道怎麼解
我參考的設置是
http://www.stats.uwo.ca/faculty/yu/Rmpi/
網頁 , 由於工作環境的關係 , 我的測試機跟有Root的Server
跟沒有 Root的Cluster 分別是OS X/Linux Xbuntu/Linux CentOS
我已經試了幾個方法安好 parallel需要的東西 , 然而cluster
的 R 是 3.1.x 的 , 有一些 parallel提供的資料會一直跳沒有
支援該版本的 parallel , 所以我轉研究Rmpi相關的 , 前面在
OS X/Cluster的測試已經確定直接安裝Rmpi會出現 non-zero status
而OS X的經驗是只要照網站上做的先install 好 OpenMPI 後才能
成功讓 Rmpi 確實安裝好
所以在 Cluster 上我目前是打算研究是否有辦法像是 brew install
只安裝在 User 底下 , 以避開 permission 的問題 , 不過我剛注意
到Linux 好像是直接開始用 CMD INSTALL Rmpi , 我可能會再回Cluster
試 , 我不確定Cluster 的 OpenMPI是否已經安裝好了 , 但該Cluter
本身有被用 C++/CUDA 在跑平行 , 我可能要再研究一下C++/CUDA所用
的mpi跟 R 的是否有差異
===================補充給需要的人==========================
由於昨天到今天有被私訊發現有其他想碰平行的板友遇到類似的狀況
無法做平行 , 這裡補充一下使用的參考網頁
Rmpi的設置 (要先安好 OpenMPI)
http://www.stats.uwo.ca/faculty/yu/Rmpi/
我OpenMPI快安好了 參考網頁
https://www.open-mpi.org/software/ompi/v1.10/
OpenMPI 操作影片
https://www.youtube.com/watch?v=QIMAu_o_5V8
===========================================================
最後我在cluster 上有遇到最後要把Rmpi安上去時不斷出現此訊息
checking for stdint.h... yes
checking for unistd.h... yes
checking mpi.h usability... no
checking mpi.h presence... no
checking for mpi.h... no
configure: error: "Cannot find mpi.h header file"
ERROR: configuration failed for package ‘Rmpi’
爬原文網站發現似乎是 MPI安置位置並沒有寫到R用的路徑裡面
然而網站中提及的修改路徑的資料 , 我還沒找到
最後感謝 C 大的指導 , 小弟是平行運算菜鳥 , OpenMPI 跟 OenpMP
的差異還沒有很清晰 , 只知道做平行運算 這兩個都有在環境建置中
被使用過
==========能安裝 snow 以及 parallel的話 可參考這個 pseudo code===========
"**" : 自行加入自己想叫的額外套件
trainsmall : 一個超大型的 table資料 , 可自行改成自己要輸入的資料
library("**")
library(magrittr)
library(snow)
library(parallel)
no_core = detectCores() - 1
#用parallel 幫你找出所有cpu ,記得保留一個提供系統運作 , OS X試過若不保留
#R很容易整個當掉
cl = makeCluster(no_core)
#用snow 啟動多 cpu slave
transDat = list()
for(i in 1:5){ #以5個平行運行為例 把要用的資料跟需要引數包成 list
bb = list(1,trainsmalls)
transDat =transDat %>% append(list(bb))
}
#我用 parLapply 將資料傳進Slave 並依造各個 Slave需要讓他們自行拆出資料
#我是覺得這個做法有個缺點 , 就是他會將資料複製 , 我還在找比這個方法更好
#的方式
paraData = parLapply(cl,transDat,function(x) {
require("**")
set.seed(50+x[[1]])
result = "**"(Category ~ PdDistrict+ Months ,data=x[[2]],ntree=10)
return(result)})
paraData[1] # 確認資料有傳出 Slave
stopCluster(cl)
========================================================================
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.160.165.182
※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1462149214.A.2B6.html
※ 編輯: JackBaska (118.160.165.182), 05/02/2016 09:10:56
→ Wush978: 要跑的機器請全部都一樣的作業系統, 一樣的R版本, 05/02 09:50
※ 編輯: JackBaska (118.160.165.182), 05/02/2016 09:51:46
→ Wush978: 一樣的安裝方法... 最方便的就是全部都Ubuntu, 然後用 05/02 09:50
→ Wush978: apt-get 裝。你就會發現我過去寫的文章都是多餘的,因為 05/02 09:50
→ Wush978: linux上安裝簡單到不需要guide, 而其他作業系統就算裝完 05/02 09:50
→ Wush978: 也很難用 05/02 09:51
感謝Wush大大 你的文章讓我比較有點方向去查guide,不然剛開始完全不知道R怎麼
入手平行 ; Cluster以前是Ubuntu沒錯只是穩定性相對沒那那麼好,為了研究生的肝
後來被全改成CentOS了
以前常是半夜或假日被教授遠端去重開機或做修復動作,聽說有學長還有被問年假
要是crash了是否能隨傳隨到 ? 然後就怒換 CentOS了,不過CentOS 裝機建置非常
費工倒是....只是提前燒肝然後求個穩的概念
(雖然遇到有root的人改BIOS的話研究生還是得被遠端過去 XD)
由於計算能力比較強的Cluster是合作對象的,所以要更新版本得跟管理員說QQ
所以我還在研究是否能夠只在 User Local 更新
手邊的機器Ram只有 16核心(8個雙核) 64 GB的 RAM , 只有 Node的一半不到....
※ 編輯: JackBaska (118.160.165.182), 05/02/2016 10:14:52
→ Wush978: RAM不是重點呀,環境才是重點... CentOS的話,自己去抓 05/02 10:20
→ Wush978: OpenMPI來編譯也不會太難 05/02 10:21
→ Wush978: 不管怎麼說,我建議環境在Cluster上一定要要一模一樣 05/02 10:22
→ Wush978: R的執行路徑, MPI的執行路徑, 所有R套件的安裝路徑... 05/02 10:22
→ Wush978: 然後ssh全部都設定暢通, 讓彼此ssh都是輸入後直接登入 05/02 10:22
→ Wush978: 弄完之後,Rmpi / pbdMPI(我更推) 都是水到渠成 05/02 10:23
→ JackBaska: 嗯嗯 , RAM方面主要是有一個人請我幫忙的東西,很燒RAM 05/02 10:29
→ JackBaska: 感謝Wush的建議,我還要多爬爬文,之前太習慣直接用root 05/02 10:29
→ JackBaska: 設定東西,現在這個狀況我還要爬一下怎麼處理 05/02 10:30
→ JackBaska: 我其實有想過是否可以改他的算法,讓存取的東西分開計算 05/02 10:32
→ JackBaska: 再做最後的合併寫入,但我覺得我功力還不夠..... 05/02 10:33
→ JackBaska: 我今天早上是已經裝好OpenMPI,但編譯卡在R的路徑設定 05/02 10:46
→ JackBaska: 一直抓不到mpi的 header 05/02 10:46
→ Wush978: 以ubuntu為例,要裝 libopenmpi-dev, 光openmpi-bin不夠 05/02 12:10
※ 編輯: JackBaska (118.160.165.182), 05/02/2016 14:05:40
※ 編輯: JackBaska (118.160.165.182), 05/02/2016 14:06:21