2014-04-01 313 views
11

基于R的GPU封装我花了差不多一整天的时间试图让这个运行,最后决定来,是因为那里将是这里的人谁也试过这种=)亚马逊

我想获得使用rpud(或其他R GPU软件包)运行的Amazon-EC2 GPU计算机,无论是cg1.4xlarge还是g2.2xlarge,因为这些是亚马逊(AWS)仅有的两台GPU计算机。

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

开始了与这个AMI从亚马逊的CentOS 6(x86_64的) - 与更新
所以我决定,我不得不建立自己的,并开始在这里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服务器的一个惊人的演示一样的家伙

这两项的最终导致你在这里:http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-linux/index.html#package-manager-installation,这样你就可以得到CUDA工具包(这似乎是GPU计算的必需品)一些AWS机器已经安装了Cuda工具包,但是我想我会在第一次尝试时遵循指示(即使它们已安装,有时版本化的东西也没有和我发现的一些教程是一样的),所以我按照T的指示行事,当我试着用$ cuda-install-samples-5.5.sh <dir>运行示例时,最终得到了一些错误,如nvidia-settings-319.37-30.fc18.x86_64 (cuda) Requires: libgdk-x11-2.0.so.0()(64bit),所以我下载了所有这些需要的软件包,我再试一次,最后出现rpud错误(将在后面详细介绍)

本机是Ubuntu的12.04
所以我当然认为,必须有人已经建立了这样的一个AMI并找到谁与蟒蛇做的。我可能因为更多的速度奖金而最终使用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> = R.2.8。

在从上面列出的R-导师站点上的(无论是从简单地使用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的源代码或查找/安装正确的链接器可能超出我的能力。

关于评论:

[email protected]:~$ 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日

继蟒演练,http://enja.org/category/tutorial/advcl/,我能够获得在GPU上运行一个简单的程序,蟒蛇/ part1的例子完美运行。所以我知道NVIDIA驱动程序工作正常,至少对于Python而言。然而,我还没有找到一个R走查,甚至会正确加载软件包。

来自Python探索的进一步发现:我有两台设备在我的当前机器上工作。

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教程

编辑2014年4月9日

知道了Python与OpenCL的接口运行任何Python脚本中可以看到让我觉得,R不能做同样的事情吗?显然有人想到了同样的东西,并建立了'OpenCL'包'

所以我跑install.packages('OpenCL')和IT工作。然后运行http://cran.r-project.org/web/packages/OpenCL/OpenCL.pdf中的一些示例代码。

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

我会一步一步回复,但很乐意看到其他方式。

+0

您是否使用了HVM AMI与NVIDIA驱动HTH?有可能没有Ubuntu AMI的,但有证据表明AMI的其他风格的Linux应该工作 – datasage

+0

是否最近的编辑回答你的问题?我还运行'nvidia-smi -a'来检查驱动程序是否开心,如果您想查看的话,它会生成一个很好的日志文件。 –

回答

3

演练:

步骤1:查找在社区的AMI的AMI-ID AMI-87377cee(一个埃里克哈扎德在http://vasir.net/blog/opencl/installing-cuda-opencl-pyopencl-on-aws-ec2内置)在AWS和启动一个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了解一些代码片段以帮助您入门。

有了这台机器,您还可以在OpenCL中轻松使用Python,我会推荐:http://enja.org/category/tutorial/advcl/如果您想要使用该路线。

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 "@[email protected] @[email protected]"  

gcc doc解释,我在这里复制,无论是“把option作为一个选项给连接器”。所以我认为他们通过后选择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(在顶层文件夹中)中的内容。

LD_PARAMS := -Xlinker "@[email protected] @[email protected]" 

在原始Makefile.in改变线10:

LD_PARAMS := -Xlinker @[email protected] -Xlinker @[email protected] 

然后改变在原始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}" 

最后,只要按照智丘的安装指导

3)扩展包中的临时文件夹:

tar xf rpud_<version>.tar.gz 

4)运行配置rpud:

cd rpud 
./configure 
cd .. 

5)然后输入如下内容:

R CMD INSTALL rpud