作者JackBaska (Baska)
看板R_Language
标题Re: [讨论] 有关R的平行计算应用
时间Mon May 2 08:33:31 2016
Mac 直接参考 Rmpi 设置网页即可 , 有安装home brew 的话 , 基本上
没大问题 , 不熟home brew 安装的人可以直接查 home brew 网页,已经
整理到只要把上面那行原封不动贴到 command line 即可安装好home brew
由於小弟有点菜加上手边机器都是借别人的 , 版本跟系统都很乱 , 才
会搞了好几种 , 感谢 W 大还有 C 大详细的指教
=================Linux Ubuntu 快速安装============================
1. 把OpenMPI装好 (安装过程本内容有写)
2. 回去R安装其他的.......... end
由於我照参考连结还是会遇到自动抓取常常说找不到或版本不行 , 如 Wush 大所说
如果单装openmpi , 依旧不能用 还要装很多东西,所以我直接加了apt-get的默认字
元 "*"
一行解:
sudo apt-get install openmpi-* libopenmpi-* openssh-*
参考连结:
(过长 缩网址会被当广告 请自行拼贴)
http://lsi.ugr.es/~jmantas/pdp/ayuda/datos/instalaciones/
Install_OpenMPI_en.pdf
==============================================================================
==========================CentOS 保险版安装===================================
1. 下载 OpenMPI
OpenMPI 参考网页
https://www.open-mpi.org/software/ompi/v1.10/
OpenMPI 安装影片
https://www.youtube.com/watch?v=QIMAu_o_5V8
2. 设定环境告知mpi 位址(此段请加入 .bashrc):
export PATH=/home/user_local/openmpi_install_dir/bin:$PATH
export LD_LIBRARY_PATH=/home/user_local/openmpi_install_dir/lib:$LD_LIBRARY_PAT
export LD_PRELOAD=/home/user_local/openmpi_install_dir/lib/libmpi.so:$LD_PRELOAD
(第三行是在你一直跳load 问题用的)
3. Compile Rmpi (请确定抓好了Rmpi):
R CMD INSTALL Rmpi_your_version.tar.gz \
--configure-args="--with-mpi-type=OPENMPI \
--with-mpi=/home/user_local/openmpi_install_dir"
Rmpi的设置
http://www.stats.uwo.ca/faculty/yu/Rmpi/
OpenMPI 操作影片
https://www.youtube.com/watch?v=QIMAu_o_5V8
MPI 後续设定文献
http://lsi.ugr.es/~jmantas/pdp/ayuda/datos/
instalaciones/Install_OpenMPI_en.pdf
参考pbdMPI 的安装文献:
https://cran.r-project.org/web/packages/pbdMPI/INSTALL
因为没有Root 还要手动设定 ./configure , 参考make install文献:
http://unix.stackexchange.com/questions/42567/
how-to-install-program-locally-without-sudo-privileges
==============================================================================
→ 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安装完OpenMPI,然後CMD 05/02 08:11
→ JackBaska: Rmpi後再回到R里面安装library才成功,然而前面command 05/02 08:12
→ JackBaska: line的动作我在cluster好像没有权限,然後试另一个方法 05/02 08:13
→ JackBaOBska: 都遇到版本问题,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 的是否有差异
=============安装时遇到找不到支援版本时=====================
如果你跟我一样在新电脑装了 R 但莫名其妙的连 dplyr都跟你说没
支援版本 , 我还没确定原因 , 但以下做法是可以work的
"**" : 你要的 package
install.packages("**", dependencies=TRUE,
repos='
http://cran.rstudio.com/')
=============补充给需要OpenMPI/RMPI的人=====================
由於昨天到今天有被私讯发现有其他想碰平行的板友遇到类似的状况
无法做平行 , 这里补充一下使用的参考网页
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
MPI 後续设定文献
http://lsi.ugr.es/~jmantas/pdp/ayuda/datos/
instalaciones/Install_OpenMPI_en.pdf
===========================================================
最後我在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用的路径里面
然而网站中提及的修改路径的资料 , 我还没找到
====================without Root ============================
设定环境告知mpi 位址:
export PATH=/home/user_local/openmpi_install_dir/bin:$PATH
export LD_LIBRARY_PATH=/home/user_local/openmpi_install_dir/lib:$LD_LIBRARY_PATH
export LD_PRELOAD=/home/user_local/openmpi/lib/libmpi.so:$LD_PRELOAD
Compile Rmpi (请确定抓好了Rmpi):
R CMD INSTALL Rmpi_your_version.tar.gz \
--configure-args="--with-mpi-type=OPENMPI \
--with-mpi-include=/home/user_local/openmpi_install_dir"
参考pbdMPI 的安装文献:
https://cran.r-project.org/web/packages/pbdMPI/INSTALL
因为没有Root 还要手动设定 ./configure , 参考make install文献:
http://unix.stackexchange.com/questions/42567/
how-to-install-program-locally-without-sudo-privileges
========================================================
export LD_PRELOAD=/home/user_local/openmpi/lib/libmpi.so:$LD_PRELOAD
R里面叫 mpi时出现时使用上面这行:
Error : .onLoad failed in loadNamespace() for 'Rmpi', details:
call: dyn.load(file, DLLpath = DLLpath, ...)
error: unable to load shared object
'/home/user_local/R/x86_64-redhat-linux-gnu-library/3.1/Rmpi/libs/Rmpi.so':
libmpi.so.12: cannot open shared object file: No such file or directory
Error: package or namespace load failed for ‘Rmpi’
最後感谢 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://webptt.com/cn.aspx?n=bbs/R_Language/M.1462149214.A.2B6.html
※ 编辑: JackBaska (118.160.165.182), 05/02/2016 09:10:56
1F:→ Wush978: 要跑的机器请全部都一样的作业系统, 一样的R版本, 05/02 09:50
※ 编辑: JackBaska (118.160.165.182), 05/02/2016 09:51:46
2F:→ Wush978: 一样的安装方法... 最方便的就是全部都Ubuntu, 然後用 05/02 09:50
3F:→ Wush978: apt-get 装。你就会发现我过去写的文章都是多余的,因为 05/02 09:50
4F:→ Wush978: linux上安装简单到不需要guide, 而其他作业系统就算装完 05/02 09:50
5F:→ 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
6F:→ Wush978: RAM不是重点呀,环境才是重点... CentOS的话,自己去抓 05/02 10:20
7F:→ Wush978: OpenMPI来编译也不会太难 05/02 10:21
8F:→ Wush978: 不管怎麽说,我建议环境在Cluster上一定要要一模一样 05/02 10:22
9F:→ Wush978: R的执行路径, MPI的执行路径, 所有R套件的安装路径... 05/02 10:22
10F:→ Wush978: 然後ssh全部都设定畅通, 让彼此ssh都是输入後直接登入 05/02 10:22
11F:→ Wush978: 弄完之後,Rmpi / pbdMPI(我更推) 都是水到渠成 05/02 10:23
12F:→ JackBaska: 嗯嗯 , RAM方面主要是有一个人请我帮忙的东西,很烧RAM 05/02 10:29
13F:→ JackBaska: 感谢Wush的建议,我还要多爬爬文,之前太习惯直接用root 05/02 10:29
14F:→ JackBaska: 设定东西,现在这个状况我还要爬一下怎麽处理 05/02 10:30
15F:→ JackBaska: 我其实有想过是否可以改他的算法,让存取的东西分开计算 05/02 10:32
16F:→ JackBaska: 再做最後的合并写入,但我觉得我功力还不够..... 05/02 10:33
17F:→ JackBaska: 我今天早上是已经装好OpenMPI,但编译卡在R的路径设定 05/02 10:46
18F:→ JackBaska: 一直抓不到mpi的 header 05/02 10:46
19F:→ 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
※ 编辑: JackBaska (220.136.225.41), 05/03/2016 21:01:14
※ 编辑: JackBaska (140.109.196.140), 05/05/2016 10:50:41
※ 编辑: JackBaska (140.109.196.140), 05/05/2016 11:30:04
※ 编辑: JackBaska (140.109.196.140), 05/05/2016 11:31:42
※ 编辑: JackBaska (140.109.196.140), 05/05/2016 11:32:34
※ 编辑: JackBaska (140.109.196.140), 05/06/2016 13:21:04
※ 编辑: JackBaska (140.109.196.140), 05/06/2016 13:22:37
※ 编辑: JackBaska (220.136.229.38), 05/06/2016 22:58:32
※ 编辑: JackBaska (220.136.229.38), 05/06/2016 23:03:09
※ 编辑: JackBaska (220.136.229.38), 05/06/2016 23:12:01
※ 编辑: JackBaska (220.136.229.38), 05/06/2016 23:13:55
※ 编辑: JackBaska (220.136.229.38), 05/06/2016 23:17:54