我花了差不多一整天的时间试图让这个运行起来,最后决定来到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接口,如果是,他们是如何做到的?
我将逐步发布作为答案,但我很乐意看到其他方式。
答案 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