在亚马逊上使用R&R的GPU包

时间:2014-04-01 14:57:08

标签: r amazon-ec2 opencl gpu

我花了差不多一整天的时间试图让这个运行起来,最后决定来到SO,因为这里会有人试过这个=)

我想得到一台运行rpud(或其他R GPU包)的Amazon-EC2 GPU机器,cg1.4xlarge或g2.2xlarge,因为它们是亚马逊(AWS)唯一的两台GPU机器。

这篇文章How to run a GPU instance using Amazon EC2 Panel?帮助我意识到我不能将我的rstudio-server机器改为gpu机器,因为我使用的AMI不正确。

从Amazon CentOS 6(x86_64)开始使用此AMI - 带有更新
所以我决定自己建立自己并开始遵循这里的指示http://www.r-tutor.com/gpu-computing/rpud-installation。和http://www.louisaslett.com/Talks/GPU_Programming_Basics_Getting_Started/Handout.pdf一样(路易斯·阿斯莱特也是一个在ec2(http://www.louisaslett.com/RStudio_AMI/)上使用rstudio-server的惊人演示的人。

这两个最终都会引导您到这里:http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-linux/index.html#package-manager-installation,因此您可以获得CUDA工具包(这似乎是GPU计算的必需品)。一些AWS机器已经安装了Cuda工具包,但是我想我会在第一次尝试时遵循指示(即使它们已经安装,有时版本的东西也和我的一些教程不一样)找到)。因此,当我尝试使用nvidia-settings-319.37-30.fc18.x86_64 (cuda) Requires: libgdk-x11-2.0.so.0()(64bit)运行示例时,我会将这些说明发送到T并最终得到一些错误,例如$ 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是关于如何从头开始构建它的AMI /指令的链接你想要。当然,那么你必须安装R,默认为R2.14,所以按照这个伟大的帖子How to install R version 3来运行R.3.1.0,因为rpud需要R&gt; = R.2.8。

按照上面列出的r-tutor网站的说明(仅使用install.packages('rpud')$ R CMD INSTALL rpud_<version>.tar.gz 或使用路线http://cran.r-project.org/web/packages/rpud/INSTALL,我收到以下消息:

* 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有关-Wl的更多信息,但更改rpud的源代码或查找/安装正确的链接器可能只是在我的能力之外。

关于评论:

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

我希望有人在ubuntu上使用rpud,并且可以提供有关如何让rpud工作的任何进一步指导。在此先感谢您的时间。如果您需要更多信息,请随时发表评论。

2014年4月8日编辑

在python演练http://enja.org/category/tutorial/advcl/之后,我能够在GPU上运行一个简单的程序,python / part1示例运行完美。所以我知道NVIDIA驱动程序工作正常,至少对于python而言。但是我还没有找到一个R-walk-through,甚至可以正确加载包。

Python探索的进一步发现:我当前的机器上有2台设备都可以使用。

Choose device(s):
[0] <pyopencl.Device 'Tesla M2050' on 'NVIDIA CUDA' at 0x2806460>
[1] <pyopencl.Device 'Tesla M2050' on 'NVIDIA CUDA' at 0x28064b0>

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

编辑2014年4月9日

知道Python与OpenCL接口让我觉得,R不能做同样的事吗?显然,其他人已经想到了同样的事情并构建了包'OpenCL'

所以我跑了install.packages('OpenCL')并且工作了。然后从http://cran.r-project.org/web/packages/OpenCL/OpenCL.pdf运行一些示例代码也已经工作了。

此时,我唯一的问题是,是否有其他人成功将GPU与R接口,如果是,他们是如何做到的?

我将逐步发布作为答案,但我很乐意看到其他方式。

2 个答案:

答案 0 :(得分:3)

操作实例:

步骤1:在社区AMI中查找AWS中的AMI-ID ami-87377cee(Erik Hazzard在http://vasir.net/blog/opencl/installing-cuda-opencl-pyopencl-on-aws-ec2构建的那个)并启动cg1.4xlarge机器。

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

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

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

第4步:玩得开心学习OpenCL !!

实现它真的很容易。以OpenCL可以使用的方式编写代码有点棘手,但是一旦掌握了它,利用GPU就可以成为一个非常强大的工具。

请参阅http://cran.r-project.org/web/packages/OpenCL/OpenCL.pdf了解一些代码段,以帮助您入门。

使用这台机器,您也可以轻松地将Python与OpenCL一起使用,我建议您使用:http://enja.org/category/tutorial/advcl/如果您想要使用该路线。

答案 1 :(得分:0)

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

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)。

LD_PARAMS := -Xlinker "@R_LIB@ @RPATHFLAG@"    

gcc doc中所述,我在这里复制,两个&#34; Pass选项作为链接器的选项&#34;。所以我认为他们将选项传递给ld以链接文件nvcc已编译。在以下代码中,nvcc同时调用-Xlinker-Wl

/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行

LD_PARAMS := -Xlinker "@R_LIB@ @RPATHFLAG@"

为:

LD_PARAMS := -Xlinker @R_LIB@ -Xlinker @RPATHFLAG@

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

R_LIB=`"${R_HOME}/bin/R" CMD config --ldflags`

R_LIB="-E -fopenmp  -L/usr/lib/R/lib -lR -lpcre -llzma -lbz2 -lz -lrt -ldl -lm"

和第1797行,

RPATHFLAG="-Wl,-rpath,${CUDA_HOME}${CUDA_LIB_DIR}"

RPATHFLAG="-rpath=${CUDA_HOME}${CUDA_LIB_DIR}"

最后,请按照Chi Yau的安装说明进行操作

  

3)在临时文件夹中展开包:

tar xf rpud_<version>.tar.gz
     

4)在rpud中运行configure:

cd rpud
./configure
cd ..
     

5)然后输入以下内容:

R CMD INSTALL rpud

HTH