Использование пакетов R GPU на Amazon

Я потратил почти целый день, пытаясь добиться этого, и, наконец, решил прийти к SO, потому что здесь будут люди, которые пробовали это =)

Я хотел бы получить машину GPU Amazon-EC2, работающую с rpud (или другим пакетом R GPU), либо cg1.4xlarge, либо g2.2xlarge, поскольку это единственные две машины с графическим процессором Amazon (AWS).

Этот пост Как запустить экземпляр GPU с помощью панели Amazon EC2? помог мне понять, что я не мог просто изменить мою машину rstudio-server на машину gpu, как Я использовал неправильный AMI.

Начал работу с этим AMI от Amazon 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 (Луис Аслетт - тот же парень, у которого есть потрясающая демонстрация использования rstudio-сервера на ec2 (http://www.louisaslett.com/RStudio_AMI/).

Оба из них приводят вас сюда: 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 является ссылкой на AMI/инструкции о том, как создать его с нуля, если хотите. Конечно, тогда вам нужно установить R, который по умолчанию соответствует R2.14, поэтому следуя этому замечательному сообщению Как установить R версии 3, чтобы запустить R.3.1.0 потому что rpud требует R >= 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 или поиска/установки правильный линкер может быть просто вне моих возможностей.

Что касается комментария:

[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

Я надеюсь, что кто-то использует rpud на ubuntu и может предоставить любые дальнейшие указания о том, как заставить работать rpud. Спасибо заранее за ваше время. Если вам нужна дополнительная информация, не стесняйтесь комментировать.

EDIT 4/8/2014

Следуя пошаговому руководству python, http://enja.org/category/tutorial/advcl/, я могу получить простую программу, запущенную на графическом процессоре, пример python/part1 работает отлично. Поэтому я знаю, что драйверы NVIDIA работают нормально, по крайней мере для python. Однако мне еще предстоит найти прохождение R, которое даже правильно загрузит пакеты.

Дальнейшие результаты исследования 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 из учебника по графическому процессору python

Редактировать 4/9/2014

Зная, что Python взаимодействует с OpenCL, заставило меня думать, не мог ли R сделать то же самое? Очевидно, кто-то другой подумал о том же и построил пакет "OpenCL"

Итак, я запустил install.packages('OpenCL') и IT WORKED. Затем запускаем некоторый пример кода из http://cran.r-project.org/web/packages/OpenCL/OpenCL.pdf ТАКЖЕ РАБОТАЕТ.

В этот момент у меня остается только один вопрос: кому-то еще удалось связать GPU с R, и если да, то как они это сделали?

Я отправлю поэтапный шаг в качестве ответа, но мне хотелось бы увидеть другие способы.

Ответ 1

Пошаговое:

Шаг 1: Посмотрите AMI-ID ami-87377cee (один из них Эрик Хаззард, построенный в http://vasir.net/blog/opencl/installing-cuda-opencl-pyopencl-on-aws-ec2) в AWS в Сообществе AMI и запустить машину cg1.4xlarge.

Шаг 2: из командной строки выполните: sudo apt-get update, затем sudo apt-get install r-base-core

** это установит R2.14.1. Если вы хотите использовать последнюю версию R, я бы воспользовался здесь: Как установить R-версию 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/, если вы хотите пройти этот маршрут.

Ответ 2

Мое решение может применяться в вашем случае. Я успешно установил, разрешив два сообщения об ошибках. Первое сообщение об ошибке, которое я разрешил, происходит из исходного файла, rpudist.cu (в папке src), поскольку сообщение об ошибке указывает, что оно находится в строке 159. Вы можете использовать текстовый редактор для чтения исходного файла и поиска этого кода, (dev = 1.).

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

Итак, я изменил его на (dev == 1.), сообщение об ошибке затем исчезло.

Второе сообщение об ошибке, действительно, как вы выяснили, около -Wl. Я думаю, что это может быть более критичным. Кажется, что он конфликтует с другим вариантом компоновщика -Xlinker, который используется в файле Makefile.in в папке src в папке rpud (если вы извлекаете tarball rpud_0.0.2.tar.gz).

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

Как объяснено в gcc doc, и я реплицирую здесь, оба варианта "Pass" как опция для компоновщика". Поэтому я думаю, что они передали параметры после них 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 (в папка верхнего уровня).

Изменение строки 10 в оригинале Makefile.in из

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

в

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

Затем измените строку 1786 в исходном configure с,

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) Запустите configure в rpud:

cd rpud
./configure
cd ..

5) Затем введите следующее:

R CMD INSTALL rpud

HTH