首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Amazon上使用R的GPU包

在Amazon上使用R的GPU包
EN

Stack Overflow用户
提问于 2014-04-01 14:57:07
回答 2查看 1.6K关注 0票数 13

我花了几乎一整天的时间来尝试这样做,最后我决定这样做,因为这里会有一些人尝试过这个=)

我想让一台Amazon-EC2GPU机器与rpud (或另一个rpud包)一起运行,或者是cg1.4xlarge或g2.2xlarge,因为这是Amazon(AWS)仅有的两台GPU机器。

这篇文章如何使用亚马逊EC2面板运行GPU实例?帮助我认识到,当我使用不正确的AMI时,我不能仅仅将我的rstudio-服务器机器更改为gpu机器。

从亚马逊CentOS 6 (x86_64)的这个AMI开始-有更新

因此,我决定我必须建立自己的,并开始遵循这里的方向,http://www.r-tutor.com/gpu-computing/rpud-installation。和已启动/Handout.pdf一样(Louis也是一个在ec2 (阿美投资/)上使用rstudio的出色演示人员)。

这两种方法最终导致您来到这里:http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-linux/index.html#package-manager-installation,这样您就可以获得CUDA工具包(这似乎是GPU计算所必需的)。有些AWS机器已经安装了一个Cuda工具包,但是我想我在第一次尝试时就会按照说明行事(尽管它们已经安装,但有时的版本控制与我找到的一些教程不一样)。因此,我按照这些指导到T,当我尝试使用nvidia-settings-319.37-30.fc18.x86_64 (cuda) Requires: libgdk-x11-2.0.so.0()(64bit)运行示例时,我得到了一些类似于$ cuda-install-samples-5.5.sh <dir>的错误。所以我下载了所有所需的软件包。我再试一次,最后得到rpud错误(稍后将详细说明)。

这台机器是Ubuntu-12.04

因此,我当然认为,一定有人已经为此构建了一个AMI,并找到了一个使用python的人。无论如何,我可能会使用python,因为速度会更快,但是现在我想让它与R一起工作:http://vasir.net/blog/opencl/installing-cuda-opencl-pyopencl-on-aws-ec2是关于如何从零开始构建它的链接,如果您想要的话。当然,您必须安装R,它默认为R2.14,因此遵循这个伟大的post 如何安装R版本3,可以让R.3.1.0运行,因为rpud需要R>=R.2.8。

按照上面列出的r-家教站点的指示(或者简单地使用install.packages('rpud')$ R CMD INSTALL rpud_<version>.tar.gz,或者通过使用http://cran.r-project.org/web/packages/rpud/INSTALL指南),我得到了以下消息:

代码语言:javascript
复制
* installing *source* package ‘rpud’ ...
checking "environment variable CUDA_HOME"... "CUDA_HOME not set; using default /usr/local/cuda"
checking for /usr/local/cuda/bin/nvcc... yes
"nvcc found"
checking "whether this is the 64 bit linux version of CUDA"... checking for /usr/local/cuda/lib64/libcublas.so... yes
"yes -- using /usr/local/cuda/lib64 for CUDA libs"
"using -I/usr/share/R/include for R header files"
"using -Wl,--export-dynamic -fopenmp  -L/usr/lib/R/lib -lR -lpcre -llzma -lbz2 -lrt -ldl -lm for R shared libraries"
configure: creating ./config.status
config.status: creating src/Makefile
** libs
** arch -
/usr/local/cuda/bin/nvcc -c -I/usr/local/cuda/include -Xcompiler "-I/usr/share/R/include -fpic" rpud.cu -o rpud.o
/usr/local/cuda/bin/nvcc -c -I/usr/local/cuda/include -Xcompiler "-I/usr/share/R/include -fpic" rpudist.cu -o rpudist.o
rpudist.cu(159): warning: use of "=" where "==" may have been intended

rpudist.cu(159): warning: use of "=" where "==" may have been intended

ptxas /tmp/tmpxft_000006af_00000000-5_rpudist.ptx, line 904; warning : Double is not supported. Demoting to float
/usr/local/cuda/bin/nvcc -shared -Xlinker "-Wl,--export-dynamic -fopenmp  -L/usr/lib/R/lib -lR -lpcre -llzma -lbz2 -lrt -ldl -lm -Wl,-rpath,/usr/local/cuda/lib64" -L/usr/local/cuda/lib64 -lcublas -lcuda rpud.o rpudist.o -o rpud.so
/usr/bin/ld: unrecognized option '-Wl'
/usr/bin/ld: use the --help option for usage information
collect2: ld returned 1 exit status
make: *** [rpud.so] Error 1
ERROR: compilation failed for package ‘rpud’
* removing ‘/home/ubuntu/R/x86_64-pc-linux-gnu-library/3.1’/rpud’

所以我试着找出-Wl在做什么,这导致我到了另一个死胡同,http://www.talkstats.com/showthread.php/43438-installing-rpud-got-unrecognized-option-Wl。我的一位朋友告诉我有关http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html的更多信息,但是更改rpud的源代码或找到/安装正确的链接器可能超出了我的能力。

关于评论意见:

代码语言:javascript
复制
ubuntu@ip-xx-xx-xx:~$ dpkg -l | grep nvidia
ii  nvidia-current                   319.37-0ubuntu1                   NVIDIA binary Xorg driver, kernel module and VDPAU library
ii  nvidia-current-dev               319.37-0ubuntu1                   NVIDIA binary Xorg driver development files
ii  nvidia-modprobe                  319.37-0ubuntu1                   Load the NVIDIA kernel driver and create device files
ii  nvidia-settings                  319.37-0ubuntu1                   Tool for configuring the NVIDIA graphics driver

我希望有人正在使用rpud在ubuntu,并可以提供任何进一步的指导,如何使rpud工作。提前谢谢你的时间。如果您需要更多的信息,请随意评论。

编辑4/8/2014

按照python演练http://enja.org/category/tutorial/advcl/,我能够在GPU上运行一个简单的程序,python/part1示例运行得很好。所以我知道NVIDIA的驱动程序正在正常工作,至少对于python来说是这样。然而,我还没有找到一个R穿行,甚至将获得正确的包加载。

Python探索的进一步发现:我在当前的机器上有两个设备,它们都可以工作。

代码语言:javascript
复制
Choose device(s):
[0] <pyopencl.Device 'Tesla M2050' on 'NVIDIA CUDA' at 0x2806460>
[1] <pyopencl.Device 'Tesla M2050' on 'NVIDIA CUDA' at 0x28064b0>

*可以通过运行python教程中的任何python脚本来看到这些

2014年9月4日编辑

知道Python与OpenCL的接口让我想,R不能做同样的事情吗?显然,其他人也有同样的想法,并建立了'OpenCL‘软件包。

所以我运行了install.packages('OpenCL'),它起作用了。然后,运行http://cran.r-project.org/web/packages/OpenCL/OpenCL.pdf中的一些示例代码也是有效的。

在这一点上,我剩下的唯一的问题是,是否还有其他人成功地将GPU与R接口,如果是,他们是如何做到的?

我会一步一步地发布我的答案,但我想看看其他的方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-09 14:58:25

演练:

步骤1:在Community中查找AWS中的AMI-ID 87377cee(在http://vasir.net/blog/opencl/installing-cuda-opencl-pyopencl-on-aws-ec2中构建的Erik ),并启动一个cg1.4x大型机器。

步骤2:从命令行运行:sudo apt-get update然后sudo apt-get install r-base-core

**安装R2.14.1。如果您想使用最新的R版本,我将在这里使用指南:如何安装R版本3

步骤3:运行R,然后使用install.packages('OpenCL')安装OpenCL

第四步:愉快地学习OpenCL!

它真的很容易让它发挥作用。用OpenCL可以使用的方式编写代码有点棘手,但是一旦您掌握了它的诀窍,使用GPU可能是一个非常强大的工具。

请参阅http://cran.r-project.org/web/packages/OpenCL/OpenCL.pdf中的一些代码片段,以便您开始工作。

有了这台机器,您也可以很容易地在OpenCL中使用Python,如果您想走这条路线,我建议您使用:http://enja.org/category/tutorial/advcl/

票数 3
EN

Stack Overflow用户

发布于 2015-02-28 14:38:58

我的解决办法可能适用于你的案子。我通过解析两条错误消息成功地安装了。我解析的第一个错误消息来自源文件rpudist.cu (在src文件夹中),因为错误消息显示它位于第159行。您可以使用文本编辑器读取源文件并找到这段代码,(dev = 1.)

代码语言:javascript
复制
rpudist.cu(159): warning: use of "=" where "==" may have been intended

所以我把它改成了(dev == 1.),然后错误消息就消失了。

第二条错误消息,确实如您所发现的,是关于-Wl的。我认为这可能更重要。它似乎与文件中使用的另一个链接器选项-Xlinker冲突,即rpud文件夹中的src文件夹中的Makefile.in (如果您提取tarball rpud_0.0.2.tar.gz)。

代码语言:javascript
复制
LD_PARAMS := -Xlinker "@R_LIB@ @RPATHFLAG@"    

正如在gcc医生中所解释的,我在这里复制了两个"Pass选项作为链接器的选项“。因此,我认为他们随后将选项传递给ld,以链接到nvcc编译的文件。在下面的代码中,nvcc同时调用-Xlinker-Wl

代码语言:javascript
复制
/usr/local/cuda/bin/nvcc -shared -Xlinker "-Wl,--export-dynamic-fopenmp  -L/usr/lib/R/lib -lR -lpcre -llzma -lbz2 -lrt -ldl -lm -Wl,-rpath,/usr/local/cuda/lib64" -L/usr/local/cuda/lib64 -lcublas -lcuda rpud.o rpudist.o -o rpud.so

因此,不太优雅的解决办法是让nvcc只使用-Xlinker.总之,除了更改(可能不是关键的)文件rpudist.cu之外,解决方案是修改文件(1) Makefile.in (在src文件夹中)和(2) configure (在顶级文件夹中)中的内容。

更改原始Makefile.in中的第10行

代码语言:javascript
复制
LD_PARAMS := -Xlinker "@R_LIB@ @RPATHFLAG@"

至:

代码语言:javascript
复制
LD_PARAMS := -Xlinker @R_LIB@ -Xlinker @RPATHFLAG@

然后将原始configure中的第1786行改为,

代码语言:javascript
复制
R_LIB=`"${R_HOME}/bin/R" CMD config --ldflags`

代码语言:javascript
复制
R_LIB="-E -fopenmp  -L/usr/lib/R/lib -lR -lpcre -llzma -lbz2 -lz -lrt -ldl -lm"

第1797行,

代码语言:javascript
复制
RPATHFLAG="-Wl,-rpath,${CUDA_HOME}${CUDA_LIB_DIR}"

代码语言:javascript
复制
RPATHFLAG="-rpath=${CUDA_HOME}${CUDA_LIB_DIR}"

最后,只需按照志佑的安装说明

3)在临时文件夹中展开包: 焦油xf rpud_.tar.gz 4)在rpud中运行配置: cd rpud /配置cd . 5)然后输入以下内容: 安装rpud

HTH

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22789575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档