Folding@Home с помощью Nvidia GPU на debian linux

06.02.2010 15:55:32

Как я писал в прошлый раз, решил попробовать считать белки с помощью видеокарты сервера. Всё равно ему видюха бес толку.
А видюха там Nvidia GeForce 9400, поддерживает технологию CUDA.

Сейчас на сервере запущен расчёт на CPU: две штуки, расчёт на GPU: одна штука.
Кроме этого сервер скачивает и раздаёт торренты через rtorrent на максимальной скорости соединения и можно смотреть 2 фильма по NFS. Всё без тормозов.

Под ”катом” инструкция, как настроить обсчёт заданий на GPU. Поехали.

К сожалению клиента для расчёта на видеокарте под linux нет, есть только для windows. Поэтому придётся задействовать wine.

Делал по статье NVIDIA GPU2 Linux/WINE Headless Install Guide() с поправкой на то, что у меня debian x32.

Начну с пятого пункта статьи, т.к. установленный debian уже есть.
Необходимо поставить wine.
Можно как в статье

sudo apt-get install wine

Мне не понравилось, что с wine автоматически ставится куча мусора вроде поддержки печати, сканера и т.п.
Поэтому ставим wine-bin и libwine-gl:

sudo apt-get install wine-bin libwine-gl

Далее качаем драйвера для видеокарты и cuda с сайта nvidia.
Можно взять последние стабильные и думаю, что скоро это будет наиболее правильный путь. Но пока у меня с ними не заработало. Пришлось качать CUDA Toolkit 3.0 Beta.

На всякий случай вот прямые ссылки на скачивание:
Видеодрайвер Linux 32 195.17
CUDA Toolkit for Ubuntu 9.04 32-bit

Для компиляции драйверов необходимо поставить пакеты kernel-headers и build-essential.

sudo apt-get install build-essential linux-headers-`uname -r`

Затем ставим собственно драйвера:
sudo sh cudadriver_3.0-beta1_linux_32_195.17-beta.run
sudo sh cudatoolkit_3.0-beta1_linux_32_ubuntu9.04.run

Надеюсь этот этап пройдёт без запинки. У меня здесь вечно проблемы. То версия gcc не та, то в kernel-headers файлика не хватает. То симлинки где-нибудь прописать придётся.

Создаём ссылки на библиотеки cuda:
sudo sh -c “echo ’/usr/local/cuda/lib’ > /etc/ld.so.conf.d/cuda.conf”
sudo ldconfig

Инициализируем wine:

wine notepad

Создастся каталог ~/.wine

Скачиваем обёртку для работы libcuda в wine:

wget http://www.gpu2.twomurs.com/wrapper2ndgen/2.1/cudart.dll.so -O ~/.wine/drive_c/windows/system32/cudart.dll
ln -s ~/.wine/drive_c/windows/system32/cudart.dll ~/.wine/drive_c/windows/system32/nvcuda.dll

Проверяем, что все нужные зависимости у нас есть:

ldd ~/.wine/drive_c/windows/system32/cudart.dll

Вывод будет похож на такой:
linux-gate.so.1 => (0xb78c3000)
libcudart.so.2 => /usr/local/cuda/lib/libcudart.so.2 (0xb7866000)
libwine.so.1 => /usr/lib/libwine.so.1 (0xb772a000)
libm.so.6 => /lib/libm.so.6 (0xb7703000)
libc.so.6 => /lib/libc.so.6 (0xb75bc000)
libdl.so.2 => /lib/libdl.so.2 (0xb75b8000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb75a0000)
librt.so.1 => /lib/librt.so.1 (0xb7597000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb74a6000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7488000)
/lib/ld-linux.so.2 (0xb78c4000)

Если рядом с какой-нибудь библиотекой будет стоять “not found”, значить либо какой-то из шагов пропущен, либо поможет следующий экспорт:

export LD_LIBRARY_PATH=/usr/local/cuda/lib:$LD_LIBRARY_PATH

Не помню где я это взял, но мне помог именно он.

Теперь надо создать скрипт для инициализации CUDA без запуска X-сервера:
nano -w cudaini

Вот сам скрипт:
#!/bin/bash

PATH=$PATH:/usr/local/cuda/bin

modprobe nvidia

if [ ”$?” -eq 0 ]; then

# Count the number of NVIDIA controllers found.
N3D=`/usr/bin/lspci | grep -i NVIDIA | grep “3D controller” | wc -l`
NVGA=`/usr/bin/lspci | grep -i NVIDIA | grep “VGA compatible controller” | wc -l`

N=`expr $N3D + $NVGA – 1`
for i in `seq 0 $N`; do
mknod -m 666 /dev/nvidia$i c 195 $i;
done

mknod -m 666 /dev/nvidiactl c 195 255

else
exit 1
fi

Даём скрипту права на исполнение:
chmod u+x cudainit

И запускаем:
sudo ./cudainit

Проверяем, что всё хорошо:
ls /dev/nv*

Должно вывестись следующее(для одной видеокарты):
/dev/nvidia0 /dev/nvidiactl

Можно вставить запуск cudainit в /etc/rc.local для автостарта при перезагрузке.

Пора, наконец, скачать клиент для windows:
wget Folding@home-Win32-GPU_XP-623.zip">http://www.stanford.edu/group/pandegroup/folding/release/Folding@home-Win32-GPU_XP-623.zip

И распаковать его
sudo apt-get install unzip
mkdir ~/fahgpu2
unzip Folding@home-Win32-GPU_XP-623.zip -d fahgpu2

И вот он момент истины! Запускаем!
cd ~/fahgpu2
nice wine Folding@home-Win32-GPU.exe -verbosity 9 -forcegpu nvidia_g80

Должен побежать текст по экрану.
Вывод программы останавливается и если не видно ошибок в последних строках типа
Folding@home Core Shutdown: UNSTABLE_MACHINE
то скорее всего всё хорошо.
Можно подождать минут 10–20 появится вывод
Completed 1%
Completed 2%

На GeForce 9400 один процент делается минут за 7–8 в среднем.

Итог мучений

На Atom N330 на одном ядре на 1% выполнения задания затрачивается около часа времени, на GeForce 9400 чуть менее восьми минут.
При использовании расчёта на видеокарте нагрузка на процессор не превышает 15% (htop показывает 4 процессора = 2 ядра * HyperThreading, нагрузка только на один).