MathWorks MATLAB

  • Программа MATLAB версии r2013b установлена в директорию /opt/shared/matlab/r2013b
  • Запуск графического пользовательского интерфейса производится с использованием технологии X Window, следующей командой:
    /opt/shared/matlab/r2013b/bin/matlab

    или

    module load matlab/r2013b
    matlab
  • Графический интерфейс должен запускаться только на узлах кластера, с помощью интерактиыного режима PBS ('qsub -I -X …'), но не на интерфейсном сервере.

Есть несколько вариантов запуска MATLAB-программ с использованием кластера:

  1. Запуск MATLAB-программ в пакетном режиме на отдельных узлах. Для этого в описании сценария запуска задачи необходимо вызвать MATLAB командой
    matlab -nodisplay -nodesktop -nojvm -nosplash -r "myfunc"

    при условии, что в текущей директории есть файл myfunc.m, в котором определена функция myfunc. В этом случае число одновременно запущенных расчетов ограничено числом имеющихся у нас лицензий. Можно запустить одновременно пять расчетов.

  2. Компиляция программ MATLAB в исполняемые файлы для запуска на любом числе компьютеров. Для этого используется компилятор Matlab Compiler. Для запуска этого компилятора требуется отдельная лицензия.
  3. Запуск в параллельном режиме с использованием распределенных массивов и тех функций ядра MATLAB, для которых существует параллельная реализация. Для этого необходимо создать массив, который будет передаваться в качестве аргумента функциям MATLAB как распределенный (distributed). Этот вариант потребует изменений в MATLAB-программе. Подробнее можно прочитать в документации к Parallel Computing Toolbox. В этом режиме можно использовать 16 и более параллельных процессов.
  4. Вызов функций matlab из C-программы. Подробнее об этом методе можно прочитать в документации к функции ''mex''.

Пожалуй, самый простой способ, это способ, не требующий компиляции, т.е. способ № 1. О нём подробнее рассказано в следующем разделе.

  • Простую программу на matlab можно запустить в пакетном режиме. В качестве примера возьмем такую программу:
    function myfunc
    A = rand(5);
    csvwrite('eig.txt',eig(A));
  • Эта программа генерирует случайную квадратную матрицу, вычисляет вектор её собственных значений и записывает этот вектор в файл eig.txt.
  1. Запишем эту программу в файл myfunc.m,
  2. в той же директории создадим файл для запуска расчета run_myfunc.sh следующего содержания:
    #!/bin/bash  
    #PBS -l walltime=00:10:00
    #PBS -l select=1:ncpus=1
    
    cd $PBS_O_WORKDIR
    
    module load matlab/r2013b
    matlab -nodisplay -nodesktop -nojvm -nosplash -r "myfunc" 
  3. через некоторое время после постановки расчета в очередь командой qsub run_myfunc.sh в этой же директории будет создан файл eig.txt, содержащий пять вещественных или комплексных чисел, вычисленных с одинарной точностью.


  • Каждый пользователь перед первым использованием MATLAB Compiler должен создать персональный файл с параметрами компиляции. Для этого на интерфейсном сервере нужно выполнить:
    module load matlab/r2013b
    mbuild -setup

    Команда выведет на экран:

        Options files control which compiler to use, the compiler and link command
        options, and the runtime libraries to link against.
    
        Using the 'mbuild -setup' command selects an options file that is
        placed in /mnt/storage/home/hpcuser/.matlab/R2013b and used by default for 'mbuild'. An options
        file in the current working directory or specified on the command line
        overrides the default options file in /mnt/storage/home/hpcuser/.matlab/R2013b.
    
        To override the default options file, use the 'mbuild -f' command
        (see 'mbuild -help' for more information).
    
    The options files available for mbuild are:
    
      1: /mnt/storage/opt/shared/matlab/r2013b/bin/mbuildopts.sh :
          Build and link with MATLAB Compiler generated library via the system ANSI C/C++ compiler
    
    
      0: Exit with no changes
    
    Enter the number of the compiler (0-1):

    Нужно ввести '1' и нажать кнопку Enter.

  • В результате файл со стандартными настройками компиляции будет скопирован в домашнюю директорию пользователя в файл '~/.matlab/R2013b/mbuildopts.sh'
  • По умолчанию для компиляции используется системный компилятор GCC, но при необходимости файл с опциями может быть скорректирован пользователем.


  • Для компиляции:
    • Запустите интерактивную задачу ('qsub -I -X …') для получения доступа к узлу кластера.
    • Запустите на узле MATLAB GUI, переключите вверху на закладку 'APPS' и нажмите на стрелочку справа от строки с иконками:
    • В выпадающем списке в разделе 'Application deployment' нажмите на иконку 'Application Compiler'. В результате откроется окно приложения MATLAB Compiler.
    • Нажмите на иконку '+' справа от поля 'Add main file', выберите файл MATLAB'а с кодом. Например, пусть это будет 'myfunc.m'
    • Нажмите на зелёную иконку 'Package' справа.
    • Когда компиляция завершится, откроется окно с тремя 3 директориями, содержащими 3 варианта скомпилированного приложения:
      • for_redistribution
      • for_redistribution_files_only
      • for_testing


  • Для запуска полученного исполняемого файла на компьютере без установленного MATLAB необходимо предварительно установить пакет MATLAB Compiler Runtime (MCR). Версия MCR должна совпадать с версией MATLAB, использованного при компиляции (в нашем случае, это 'R2013b').
  • Все дистрибутивы MCR можно свободно скачать с официальной страницы: https://www.mathworks.com/products/compiler/mcr.html
  • Дистрибутив MCR для Linux x64, соответствующий MATLAB R2013b, также можно взять на кластере - это файл '/opt/shared/matlab/r2013b/toolbox/compiler/deploy/glnxa64/MCRInstaller.zip'
  • На нашем комплексе MCR уже установлен в директорию '/opt/shared/matlab/r2013b.mcr'. При необходимости самостоятельно установить MCR выполните:
    unzip MCRInstaller.zip

    или, если дистрибутив скачан с сайта:

    unzip MCR_R2013b_glnxa64_installer.zip

    и затем

    ./install
  • Запуск скомпилированного приложения из директории 'for_testing' осуществляется с помощью скрипта 'run_myfunc.sh' (название скрипта зависит от названия модуля), которому в качестве параметра необходимо передать путь до установленного MCR:
    ./run_myfunc.sh /opt/shared/matlab/r2013b.mcr
  • Скрипт 'run_myfunc.sh' настраивает необходимые переменные окружения в соответсвии с путём до установленного MCR и затем запускает находящийся рядом исполняемый бинарный файл 'myfunc'.

Parallel Computing Toolbox User’s Guide, R2013b

Технология, позволяющая распараллеливать выполнение программ на несколько процессорных ядер, а также использовать NVidia GPU.

MATLAB Distributed Computing Server System Administrator’s Guide, R2013b

Предоставляет возможность запуска программ MATLAB (в том числе, распараллеливающихся на несколько вычислительных узлов) на кластере, через разные планировщики, включая PBS Pro. Является развитием 'Parallel Computing Toolbox'. Пользователь работает через стандартный графический интерфейс MATLAB (далее называемый 'клиент') и через него получает дополнительные вычислительные ресурсы на кластере. На нашем комплексе возможны два варианта использования, настраиваемые разными способами:

  1. Клиент работает на узле кластера, пользователь взаимодействует с ним с использованием технологии X Window. Этот способ является предпочтительным.
  2. Клиент работает на персональном компьютере пользователя, с которого имеется доступ к кластеру по протоколам SSH/SFTP.
  • С помощью интерактивной задачи PBS попасть на узел и запустить MATLAB через X Window:
    module load matlab/r2013b
    matlab
  • В закладке Home открыть Environment → Parallel → Manage Cluster Profiles.
  • В появившемся окне создать профиль: Add → Custom → PBS Pro
  • Нажать 'Edit', изменить такие параметры:
    • JobStorageLocation - директория для временных файлов. В принципе, можно оставить незаполненным, но лучше указать поддиректорию в своей домашней директории или в рабочей области.
    • NumWorkers = число, сколько ядер процессора будет запрашиваться.
    • HasSharedFileSystem = true
    • RshCommand = ssh
    • Также обратите внимание на SubmitArgumet и ResourceTemplate - с их помощью можно передавать команде 'qsub' дополнительные параметры, а также изменять правило генерации 'select' для qsub.
  • Переключиться на закладку 'Validation results'. Нажать кнопку 'Validate'. Все тесты должны завершиться со статусом 'passed'.
  • При желании через меню окна 'Cluster Profiles Manager' можно переименовать настроенный профиль и установить его как 'профиль по умолчанию'.
  • Если клиент работает на операционной системе семейства Windows, необходимо преобразовать закрытую часть персонального RSA ключа в формат, используемый в Unix-системах:
    • Запустить 'PUTTYGEN.EXE'
    • Кнопкой 'Load' загрузить свой ранее созданный .ppk-файл
    • Сохранить в нужном формате: Conversion → Export OpenSSH key
    • Получившийся файл должен содержать примерно такое:
      -----BEGIN RSA PRIVATE KEY-----
      MIICWgIBAAKBgQCA2/bpBoLogSg51qhIDIU+KaSPhfm3fhTVAIQdgjQwdmsKDQne
      M0S6QvKfj3+tX5NJdV0WBie2F0NSgRCvtPZj8Z6/edL/fanW7bUBQiDCkspWC/yV
      ......
      XsaozzouYGPk8OvtAkB8Uo2OK5fOxLTV1pglGNd9WbG/kuWOBYeIlBGCPAhy0jLo
      Xo91ZfMgwwzP1pP5hIhf86axqD5ATqgveMuit+tj
      -----END RSA PRIVATE KEY-----
  • Перейти в директорию на персональном компьютере, в которую установлен MATLAB
  • Скопировать содержимое поддиректории 'toolbox\distcomp\examples\integration\pbs\nonshared' в 'toolbox\local\'
  • Открыть файл 'toolbox\local\getSubmitString.m' и отредактировать, заменив
    submitString = sprintf('qsub -N %s -j oe -o %s %s %s %s', ...
        jobName, quotedLogFile, envString, additionalSubmitArgs, quotedCommand);

    на

    submitString = sprintf('qsub -N %s -j oe -V -o %s %s %s', ...
        jobName, quotedLogFile, additionalSubmitArgs, quotedCommand);
  • Запустить MATLAB, если уже работал - перезапустить.
  • В закладке Home открыть Environment → Parallel → Manage Cluster Profiles.
  • В появившемся окне создать профиль: Add → Custom → Generic
  • Нажать 'Edit', изменить такие параметры:
    • JobStorageLocation - директория для временных файлов на персональном компьютере
    • NumWorkers = число, сколько ядер будет запрашиваться.
    • ClusterMatlabRoot = /opt/shared/matlab/r2013b (директория с MATLAB на кластере)
    • OperatingSystem = Unix
    • HasSharedFileSystem = false
    • Поле IndependentSubmitFcn:
      {@independentSubmitFcn, 'clu.nusc.ru', '/mnt/storage/home/hpcuser/matlab'}

      Вместо '/mnt/storage/home/hpcuser/matlab' укажите путь до директории для временных файлов на кластере - или в своей домашней директории, или в своей рабочей области.

    • Поле CommunicatingSubmitFcn:
      {@communicatingSubmitFcn, 'clu.nusc.ru', '/mnt/storage/home/hpcuser/matlab'}

      Вместо '/mnt/storage/home/hpcuser/matlab' укажите путь до директории для временных файлов на кластере - или в своей домашней директории, или в своей рабочей области.

    • GetJobStateFcn = @getJobStateFcn
    • DeleteJobFcn = @deleteJobFcn
  • Переключиться на закладку 'Validation results'. Нажать кнопку 'Validate'. Вас попросят ввести свой логин на кластере, путь до созданного ранее файла с закрытой частью ключа и парольную фразу к этому файлу. Все тесты должны завершиться со статусом 'passed'.
  • При желании через меню окна 'Cluster Profiles Manager' можно переименовать настроенный профиль и установить его как 'профиль по умолчанию'.