2014-04-01 24 views
11

Tôi đã dành gần một ngày để cố gắng chạy và cuối cùng quyết định đến SO vì sẽ có người ở đây đã thử cách này =)Sử dụng gói GPU của R trên Amazon

Tôi muốn nhận một máy GPU Amazon-EC2 chạy với rpud (hoặc một gói R GPU khác), hoặc là một cg1.4xlarge hoặc g2.2xlarge vì đó là hai máy GPU duy nhất Amazon (AWS) có.

Bài đăng này How to run a GPU instance using Amazon EC2 Panel? đã giúp tôi nhận ra rằng tôi không thể chỉ thay đổi máy rstudio-server thành máy gpu khi tôi đang sử dụng AMI không chính xác.

Bắt đầu với AMI này từ Amazon CentOS 6 (x86_64) - với cập nhật
Vì vậy, tôi quyết định rằng tôi đã phải xây dựng của riêng tôi và bắt đầu theo các hướng dẫn ở đây http://www.r-tutor.com/gpu-computing/rpud-installation. Cũng như http://www.louisaslett.com/Talks/GPU_Programming_Basics_Getting_Started/Handout.pdf (Louis Aslett là cùng một người có bản demo tuyệt vời khi sử dụng rstudio-server trên ec2 (http://www.louisaslett.com/RStudio_AMI/).

Cả hai người cuối cùng dẫn bạn đến đây: http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-linux/index.html#package-manager-installation, vì vậy bạn có thể lấy CUDA Một số máy AWS đã có một bộ công cụ Cuda được cài đặt, tuy nhiên tôi nghĩ rằng tôi sẽ làm theo các hướng dẫn trong lần thử đầu tiên của tôi (mặc dù chúng được cài đặt, đôi khi phiên bản của các công cụ không có Vì vậy, tôi làm theo những hướng dẫn để một T và tôi kết thúc nhận được một vài lỗi như nvidia-settings-319.37-30.fc18.x86_64 (cuda) Requires: libgdk-x11-2.0.so.0()(64bit) khi tôi cố gắng để chạy các ví dụ với $ cuda-install-samples-5.5.sh <dir>.Vì vậy, tôi tải về tất cả những người các gói bắt buộc. Tôi thử lại và kết thúc với các lỗi rpud (sẽ chi tiết các lỗi sau)

Máy này là Ubuntu-12.04
Vì vậy, tất nhiên tôi nghĩ, ai đó phải đã xây dựng một AMI cho điều này và tìm một ai đó đã làm nó với trăn. Tôi chỉ có thể kết thúc bằng python anyway vì nhiều tiền thưởng tốc độ, nhưng vào thời điểm này, tôi muốn nhận nó làm việc với R. đây: http://vasir.net/blog/opencl/installing-cuda-opencl-pyopencl-on-aws-ec2 là liên kết để AMI/hướng dẫn về việc làm thế nào để xây dựng nó từ đầu nếu bạn muốn. Tất nhiên, sau đó bạn phải cài đặt R, mặc định là R2.14, vì vậy sau bài đăng tuyệt vời này How to install R version 3 để chạy R.3.1.0 vì rpud yêu cầu R> = R.2.8.

Tiếp theo các hướng dẫn của trang web r-gia sư liệt kê ở trên (hoặc từ đơn giản sử dụng install.packages('rpud') hoặc $ R CMD INSTALL rpud_<version>.tar.gz hoặc bằng cách sử dụng các hướng dẫn http://cran.r-project.org/web/packages/rpud/INSTALL, tôi nhận được tin nhắn này:

* 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’ 

Vì vậy, tôi cố gắng tìm hiểu những gì -Wl đang làm dẫn tôi đến một ngõ cụt ở đây http://www.talkstats.com/showthread.php/43438-installing-rpud-got-unrecognized-option-Wl. Một người bạn của tôi đã chỉ cho tôi để http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html để biết thêm thông tin về -Wl, nhưng thay đổi mã nguồn của rpud hoặc tìm/cài đặt các mối liên kết chính xác có thể là ngay bên ngoài khả năng của tôi .

liên quan đến những nhận xét Với:

[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 

tôi hy vọng ai đó đang sử dụng rpud trên ubuntu và có thể cung cấp bất kỳ hướng dẫn thêm về cách để có được rpud làm việc. Cảm ơn trước cho thời gian của bạn. Nếu bạn cần thêm thông tin, hãy bình luận.

EDIT 4/8/2014

Tiếp nối hương trăn, http://enja.org/category/tutorial/advcl/, tôi có thể để có được một chương trình đơn giản chạy trên GPU, python/part1 dụ chạy một cách hoàn hảo.Vì vậy, tôi biết rằng các trình điều khiển NVIDIA đang làm việc đúng cách, ít nhất là cho python. Tuy nhiên tôi vẫn chưa định vị được R đi qua mà thậm chí sẽ nhận được các gói được tải chính xác.

phát hiện thêm từ thăm dò Python: Tôi có 2 thiết bị trên máy tính hiện tại của tôi rằng cả hai công việc.

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

* Những thể được nhìn thấy bằng cách chạy bất kỳ kịch bản python từ python GPU hướng dẫn

Sửa 4/9/2014

Biết rằng Python được giao tiếp với OpenCL khiến tôi suy nghĩ , R có thể làm như vậy không? Rõ ràng ai đó đã nghĩ điều tương tự và xây dựng gói 'OpenCL'

Vì vậy, tôi chạy install.packages('OpenCL') và LÀM VIỆC CNTT. Sau đó chạy một số mã mẫu từ http://cran.r-project.org/web/packages/OpenCL/OpenCL.pdf CSONG LÀM VIỆC.

Tại thời điểm này, câu hỏi duy nhất tôi còn lại là, có ai khác đã thành công với giao tiếp GPU với R và nếu có, làm thế nào họ làm điều đó?

tôi sẽ gửi từng bước như một câu trả lời của tôi, nhưng rất thích nhìn thấy những cách khác.

+0

Bạn đang sử dụng một HVM AMI với các trình điều khiển Nvidia? Có thể không có Ubuntu AMI nhưng có một số điểm khác nhau của AMI về Linux nên hoạt động – datasage

+0

có phải chỉnh sửa gần đây nhất trả lời câu hỏi của bạn không? Tôi cũng chạy 'nvidia-smi -a' để kiểm tra xem các trình điều khiển có vui không, nó tạo ra một tệp nhật ký đẹp mà tôi có thể đính kèm nếu bạn muốn xem. –

Trả lời

3

Walkthrough:

Bước 1: Tra cứu AMI-ID ami-87377cee (một trong những Erik Hazzard xây dựng tại http://vasir.net/blog/opencl/installing-cuda-opencl-pyopencl-on-aws-ec2) trong AWS trong AMIs cộng đồng và khởi động một máy cg1.4xlarge.

Bước 2: Từ dòng lệnh chạy: sudo apt-get update sau đó sudo apt-get install r-base-core

** này sẽ cài đặt R2.14.1. Nếu bạn muốn sử dụng phiên bản R mới nhất, tôi sẽ sử dụng các hướng dẫn ở đây: How to install R version 3

Bước 3: chạy R, sau đó sử dụng để cài đặt install.packages('OpenCL') OpenCL

Bước 4: Hãy vui vẻ học tập OpenCL !!

Nó thực sự là dễ dàng để làm cho nó làm việc. Viết mã theo cách mà OpenCL có thể sử dụng là một chút khó khăn, nhưng một khi bạn nhận được hang của nó sử dụng GPU có thể là một công cụ rất mạnh mẽ.

Xem http://cran.r-project.org/web/packages/OpenCL/OpenCL.pdf cho một số đoạn mã để giúp bạn bắt đầu.

Với máy này, bạn cũng có thể dễ dàng sử dụng Python với OpenCL, nơi tôi muốn giới thiệu: http://enja.org/category/tutorial/advcl/ nếu bạn muốn đi tuyến đường đó.

0

Giải pháp của tôi có thể áp dụng vào trường hợp của bạn. Tôi đã cài đặt thành công bằng cách giải quyết hai thông báo lỗi. Thông báo lỗi đầu tiên mà tôi đã giải quyết xuất phát từ tệp nguồn, rpudist.cu (trong thư mục src), vì thông báo lỗi cho biết nó nằm trong dòng 159. Bạn có thể sử dụng trình soạn thảo văn bản để đọc tệp nguồn và tìm mã này, (dev = 1.).

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

Vì vậy, tôi đã thay đổi nó thành (dev == 1.), sau đó thông báo lỗi sẽ biến mất.

Thông báo lỗi thứ hai, thực sự như bạn đã phát hiện ra, khoảng -Wl. Tôi nghĩ điều này có thể quan trọng hơn.Dường như xung đột với tùy chọn trình liên kết khác -Xlinker, được sử dụng trong tệp, Makefile.in trong thư mục src của thư mục rpud (nếu bạn giải nén tarball rpud_0.0.2.tar.gz).

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

Như được giải thích trong gcc doc và tôi sao chép ở đây, cả "Tùy chọn chuyển làm tùy chọn cho trình liên kết". Vì vậy, tôi nghĩ rằng họ đã thông qua các tùy chọn sau khi họ để ld để liên kết với các tập tin nvcc đã biên soạn. Trong đoạn mã sau, nvcc gọi cả -Xlinker, và -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 

Như vậy, cách giải quyết không-rất-nhã là để đảm nvcc chỉ sử dụng -Xlinker. Để tổng hợp, ngoại trừ việc thay đổi tệp (có thể không quan trọng), rpudist.cu, giải pháp là thay đổi nội dung trong các tệp (1) Makefile.in (trong thư mục src) và (2) configure (trong thư mục cấp cao nhất).

Thay đổi dòng 10 trong gốc Makefile.in từ

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

tới:

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

Sau đó thay đổi dòng 1786 trong bản gốc configure từ,

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" 

và dòng 1797 từ,

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

để

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

Cuối cùng, chỉ cần làm theo cài đặt hướng dẫn Chí Yau của

3) Mở rộng các gói trong một thư mục tạm thời:

tar xf rpud_<version>.tar.gz 

4) Chạy cấu hình trong rpud:

cd rpud 
./configure 
cd .. 

5) Sau đó nhập như sau:

R CMD INSTALL rpud 

HTH

Các vấn đề liên quan