Удаленный доступ

В настоящее время на кластере "ГрафИТ!" / "GraphIT!" используется ОС RedHat Enterprise Linux, версия 5, апдейт 5, версия ядра 2.6.18, сборка для архитектуры x86_64. Удаленный терминальный доступ осуществляется при помощи протокола SSH версии 2. На Unix/Mac OS X/Linux-машинах этот протокол поддерживается стандартной командой ssh. Для Windows можно использовать или Cygwin и стандартную команду SSH, или другие утилиты, например PuTTY, SSH Secure Shell Client и Teraterm.
Передача файлов производится по протоколу SFTP, реализация которого включена в состав клиента SSH как для Unix/Linux/Mac OS X, так и для Windows. Для удаленного доступа можно использовать утилиты sftp (Unix/Linux/Mac OS X/Cygwin) или WinSCP (Windows). Для Unix/Linux/Mac OS X также можно использовать файловую систему sshfs (работает через FUSE/MacFUSE), которая позволяет монтировать содержимое удалённого компьютера в локальный каталог.

Параметры для доступа к кластеру "ГрафИТ!" / "GraphIT!" извне:

Адрес graphit.parallel.ru, порт 22 (он установлен по умолчанию). Логин, который требуется использовать, выдаётся после регистрации на кластере. Заметим, что доступ на кластер осуществляется только по ключу, открытую часть которого вы высылаете при регистрации. Доступ на кластер по паролям не осуществляется.

Установленное программное обеспечение

 

  • ОС RedHat Enterprise Linux, версия 5, апдейт 5, сборка для архитектуры x86_64
  • Библиотека обмена сообщениями OpenMPI 1.4.2
  • Система управления заданиями Cleo
  • CUDA Toolkit и CUDA SDK версии 4.1 для Linux, включая компилятор nvcc (поддерживает технологии CUDA и OpenCL)
  • Набор утилит GNU (включая make) и компилятор gcc
  • Текстовые редакторы vim и emacs
  • Кросс-платформенная среда исполнения mono, версия 2.0.1 (совместима с .NET)
  • Компилятор ncc языка Nemerle и система расширений NUDA (=Nemerle Unified Device Architecture) для программирования ГПУ

В качестве командной оболочки (шелла) используется bash.

Запуск программ на исполнение на кластере

По умолчанию программа запускается из расчёта 1 процесс на 1 ГПУ. Для запуска программы необходимо выполнить следующую команду:

mpirun -np <число-ГПУ> <имя-программы> <аргументы>

либо

cleo-submit -np <число-ГПУ> <имя-программы> <аргументы>

В настоящее время отсутствует возможность прикреплять конкретные процессы к конкретным ГПУ, поэтому в начале работы процессу нужно будет указать правильный номер ГПУ. Гарантируется, что на каждый узел назначается по 3 процесса с номерами (MPI_commRank) вида 3*i, 3*i+1 и 3*i+2, где i - целое число. Таким образом номер ГПУ (numGpu) можно получить как остаток от деления ранга на 3. ГПУ на узлах сконфигурированы на использование в монопольном режиме, так что попытка использовать ГПУ, который уже используется в другом процессе, закончится ошибкой. Способ установки правильного номера ГПУ зависит от используемой технологии программирования:

  • В CUDA-программах: cudaSetDevice(numGpu)
  • В OpenCL-программах: выбрать устройство с номером numGpu из тех, что возвращаются функцией clGetDeviceIDs()
  • В NUDA-программах: Nuda.Device.currentIndex = numGpu;

Также возможен режим, в котором на узел (12 ядер, 3 ГПУ) запускается 1 MPI-процесс, в распоряжение которого отдаются все ресурсы узла, и явно устанавливать номер ГПУ нет необходимости. Для этого надо выполнить следующую команду:

mpirun -as single -np <число-узлов> <имя-программы> <аргументы>

В частном случае, когда приложению для работы достаточно одного узла:

mpirun -as single -np 1 <имя-программы> <аргументы>

Поскольку исполняемые файлы под Windows и Linux имеют различный формат, запуск программ, скомпилированных для Windows (например, в Visual Studio), здесь невозможен.

Компиляция и запуск программ, созданных с помощью технологии NUDA

Программы, использующие технологию NUDA, пишутся на языке Nemerle. Для компиляции такой программы надо выполнить следующую команду (myprog.n - файл с программой):

ncc -r extran-nemerle.dll -r extran-strategy.dll -t:exe -o myprog.exe myprog.n

Если программа использует ещё и библиотеку MPI.NET для обмена сообщениями, требуется добавить ссылку на эту библиотеку:

ncc -r extran-nemerle.dll -r extran-strategy.dll -r MPI.dll -t:exe -o myprog.exe myprog.n

Для запуска такого приложения требуется выполнить следующую команду:

mpirun -np <число-ГПУ> mono myprog.exe <аргументы>

Т.е. в качестве исполняемого файла указывается mono, которая, в свою очередь, запускает вашу программу. Естественно, возможен запуск и в режиме "1 MPI-процесс на узел", см. выше раздел "Запуск программ на исполнение на кластере". Пример NUDA-программы (исходники + make-файл) лежит на кластере в каталоге /export/usr/share/mono/nuda-mpi.
Дополнительные материалы по языку Nemerle и технологии NUDA:

Компиляция и запуск программ, созданных с использованием технологии CUDA

Компиляция программ, использующих только технологию CUDA и написанных без MPI, осуществляется при помощи компилятора nvcc. Этот компилятор поддерживает языки C, C++ и CUDA C. Для компиляции программы требуется выполнить команду:

nvcc -o myprog myprog.cu

Компиляция программ, использующих CUDA+MPI, используется при помощи утилиты mpicc (для C-программ) и mpicxx (для С++-программ). В качестве компилятора по умолчанию настроен nvcc, который поддерживает файлы на языках C, C++ и CUDA C.
Для компиляции программы требуется выполнить следующую команду:

mpicc -o myprog myprog.c myprog.cu 

Запуск программ осуществляется через mpirun, см. раздел "запуск программ на исполнение на кластере".
Более подробную информацию по nvcc можно посмотреть, набрав nvcc --help или на сайте http://developer.nvidia.com/.

В данный момент на кластере установлен GPU Computing SDK 4.1. Он доступен в /export/opt/gpusdk41

Компиляция и запуск программ, созданных при помощи технологии OpenCL

OpenCL-программы компилируются точно так же, как и любые другие. Текст собственно OpenCL-ядра передаётся во время исполнения как строка, конкретный механизм передачи определяется программистом. Поскольку в качестве компилятора по умолчанию mpicc/mpicxx указан nvcc, требуется явно указать gcc/g++:

OMPI_CC=gcc mpicc -lOpenCL -o myprog myprog.c
OMPI_CXX=g++ mpicxx -lOpenCL -o myprog myprog.cpp

Запуск программ осуществляется через mpirun, см. раздел "запуск программ на исполнение на кластере".