MATLAB
👉Вернуться к списку инструкций
MATLAB - это одновременно:
- Язык инженерных расчетов.
- Графические приложения (приложения с графическим интерфейсом).
- Средства разработки программного обеспечения.
- Более сотни прикладных программ (toolboxes) - расширений системы и ее адаптации под решение определенных классов математических и научно-технических задач.
Доступные версии на суперкомпьютерном комплексе:
module load matlab/r2024a # релиз R2024a от 04.2024 module load matlab/r2023a # релиз R2023a от 02.2023
Пользователи: Центр языка и мозга, Научно-учебная лаборатория методов анализа больших данных, Департамент прикладной математики МИЭМ, любые подразделения НИУ ВШЭ.
MATLAB на суперкомпьютере может быть использован в нескольких режимах:
- Пакетный (неинтерактивный) режим - выполнение записанных в файл команд с выдачей результата в выходной файл.
- Интерактивный режим - запуск MATLAB в консольном режиме на узле суперкомпьютера. Выполнение и вывод результатов на экран.
- Параллельный расчёт с использованием MATLAB Parallel Server - выполнение сложных вычислений с использованием мощности суперкомпьютера.
Запуск MATLAB на суперкомпьютере в пакетном режиме
Для выполнения расчётов в пакетном (неинтерактивном) режиме необходимо подготовить .m файл и скрипт-файл для постановки задачи в очередь Slurm.
Ниже приведён пример скрипт-файла matlab.sbatch. Чтобы выполнить пробный запуск на суперкомпьютере, создайте оба файла в одном каталоге и выполните команду sbatch matlab.sbatch
#!/bin/bash
#SBATCH --job-name=test-matlab # Название задачи
#SBATCH --error=test-matlab-%j.err # Файл для вывода ошибок
#SBATCH --output=test-matlab-%j.log # Файл для вывода результатов
#SBATCH --ntasks 1 # Количество MPI процессов
#SBATCH --cpus-per-task 1 # Количество CPU на одну задачу
#SBATCH --mail-user=ваша_почта # Укажите ваш email для отправки уведомлений
#SBATCH --mail-type=END,FAIL # События, требующие уведомления
module load matlab/r2024a # Загрузка модуля MATLAB
# Запуск MATLAB с файлом matlabexample.m
matlab -nodisplay -nosplash -r "run('matlabexample.m'); exit" > result.dat
Для постановки задачи в очередь выполните команду sbatch matlab.sbatch
Не забудьте скорректировать параметры в скрипте для своих расчетов!
Посмотреть состояние своих задач можно с помощью команды mj
При выполнении расчёта на узле суперкомпьютера MATLAB будет автоматически использовать все выделенные пользователю ядра процессора. Поэтому, при использовании функций, поддерживающих многопоточность, рекомендуется увеличивать количество запрашиваемых ядер в скрипте sbatch, путём редактирования строки #SBATCH -c 1
Запуск MATLAB на суперкомпьютере в интерактивном режиме
Для выполнения расчётов в интерактивном режиме необходимо выделить узел с указанием необходимого количества CPU/GPU и запустить консоль bash. Для этого, выделите ресурсы на суперкомпьютере с помощью следующей команды:
srun --ntasks 1 --cpus-per-task 1 --time 00:30:00 --pty $SHELL
Запрос на выделение ресурсов встанет в очередь. Как только подходящий узел освободится, в консоли появится уведомление srun: job has been allocated resources. Hostname в строке приглашения консоли изменится на имя узла суперкомпьютера.
После этого, загрузите модуль matlab:
module load matlab/r2020a
Запустите консоль MATLAB в интерактивном режиме:
matlab -nodisplay -nosplash
В этом режиме вы можете выполнять команды MATLAB, загружать и редактировать скрипт-файлы, но не можете отображать графики (их можно сохранять в файл, скачивать и просматривать на локальном компьютере). Несмотря на минималистичность, в данной консоли поддерживается завершение команд с помощью клавиши TAB и доступна встроенная справка по командам help название_команды.
Пример вычисления в интерактивном режиме:
A=rand(100);
B=rand(100);
AB=A*B;
sumAB=sum(AB(:));
sumAB
save out.mat AB sumAB
На экран будет выведена сумма матриц A и B, а в файл out.mat будут записаны переменные AB и sumAB.Параллельные расчёты с использованием Parallel Computing Toolbox
Тулбокс Parallel Computing Toolbox позволяет разрабатывать распределённые и параллельные MATLAB-приложения и выполнять их на нескольких экземплярах MATLAB (worker). PCT добавляет множество функций для распараллеливания циклов, расчётов на GPU и обработки больших данных. Подробную информацию обо всех возможностях PCT можно найти в документации (pdf-версия, html-версия ).
Параллельные циклы FOR (parfor)
Ниже представлен простой пример кода, иллюстрирующий использование Parallel Computing Tooltobx для вычисления числа Pi с помощью параллельного метода Монте-Карло. В примере используются параллельные циклы parfor (parallel for). По этой схеме подходящие циклы for в других задачах могут быть заменены на параллельные parfor без других изменений в коде.Содержимое файла pfor.m
%============================================================================
% Parallel Monte Carlo calculation of PI
%============================================================================
% Launch parallel pool with as many workers as requested
hPar = parpool( 'local' );
% Report number of workers
fprintf( '\nNumber of workers = %d\n' , hPar.NumWorkers )
% Main code
R = 1; darts = 1e7; count = 0; % Prepare settings
tic; % Start timer
parfor i = 1:darts
% Compute the X and Y coordinates of where the dart hit the...............
% square using Uniform distribution.......................................
x = R * rand(1);
y = R * rand(1);
if x^2 + y^2 <= R^2
% Increment the count of darts that fell inside of the.................
% circle...............................................................
count = count + 1
end
end
% Compute pi.................................................................
myPI = 4 * count / darts;
T = toc; % Stop timer
% Log result, shutdown pool and exit
fprintf('\nThe computed value of pi is %8.7f\n',myPI);
fprintf('\nThe parallel Monte-Carlo method is executed in %8.2f seconds\n\n', T);
delete(gcp);
exit;
Содержимое файла pfor.sbatch
#!/bin/bash #SBATCH -J pfor #SBATCH -o pfor-%j.out #SBATCH -e pfor-%j.err #SBATCH -N 1 # Кол-во запрашиваемых узлов #SBATCH -c 8 # Кол-во запрашиваемых ядер #SBATCH -t 0-00:30 # Ограничение времени выполнения module load matlab/r2024a matlab -nosplash -nodesktop -r "pfor"Постановка задачи в очередь суперкомпьютера осуществляется командой sbatch pfor.sbatch, в консоль будет выведено сообщение Submitted batch job %j (где %j - номер задачи в очереди). На вычислительном узле будет запущен пул из 8 процессов MATLAB (количество регулируется в pfor.sbatch строкой #SBATCH -c 8). Результат вычисления будет записан в файл pfor-%j.out
Содержимое файла pfor-00000.out
Number of workers = 8 The computed value of pi is 3.1408868 The parallel Monte-Carlo method is executed in 0.71 secondsЛюбые ошибки при выполнении расчёта будут записаны в файл pfor-%j.err
Одна программа множество данных (SPMD)
В тулките PCT также доступна модель параллельного программирования Single Program Multiple Data. При использовании SPMD задачи могут быть распределены и назначены параллельным процессам MATLAB в зависимости от их ранга. Ниже представлен пример, печатающий ранг каждого процесса MATLAB.Содержимое файла spmd_test.m
%====================================================================
% Illustration of SPMD Parallel Programming model with MATLAB
%====================================================================
parpool('local')
% Start of parallel region...........................................
spmd
nproc = numlabs; % get total number of workers
iproc = labindex; % get lab ID
if ( iproc == 1 )
fprintf ( 1, ' Running with %d labs\n', nproc );
end
for i = 1: nproc
if iproc == i
fprintf ( 1, ' Rank %d out of %d\n', iproc, nproc );
end
end
% End of parallel region.............................................
end
delete(gcp);
exit;
Содержимое файла spmd.sbatch
#!/bin/bash #SBATCH -J spmd_test #SBATCH -o spmd_test-%j.out #SBATCH -e spmd_test-%j.err #SBATCH -N 1 # Кол-во запрашиваемых узлов #SBATCH -c 8 # Кол-во запрашиваемых ядер #SBATCH -t 0-00:30 # Ограничение времени выполнения module load matlab/r2024a matlab -nosplash -nodesktop -r "spmd_test"Постановка задачи в очередь суперкомпьютера осуществляется командой sbatch spmd.sbatch, в консоль будет выведено сообщение Submitted batch job %j (где %j - номер задачи в очереди). На вычислительном узле будет запущен пул из 8 процессов MATLAB (количество регулируется в spmd.sbatch строкой #SBATCH -c 8). Результат вычисления будет записан в файл spmd_test-%j.out
Содержимое файла spmd_test-00000.out
Lab 1: Running with 8 labs Rank 1 out of 8 Lab 2: Rank 2 out of 8 ...Любые ошибки при выполнении расчёта будут записаны в файл pfor-%j.err
Параллельные расчёты с использованием Parallel Server из интерфейса MATLAB
Parallel Server позволяет запускать параллельные расчёты на нескольких узлах суперкомпьютера. В настоящий момент, лицензия НИУ ВШЭ позволяет запускать до 32 процессов MATLAB. Используя комбинацию Parallel Computing Toolbox и Parallel Server можно взаимодействовать с очередью задач суперкомпьютера со своего рабочего ПК, на котором установлен пакет MATLAB. Подключение к Parallel Server с ПК вне сети ВШЭ возможно только при использовании корпоративного VPN.
Для начала работы с Parallel Server необходимо создать новый профиль кластера, настроить его для работы с очередью задач суперкомпьютера и указать скрипт-файлы для работы с очередью задач Slurm.
Создание профиля кластера
1. Скачайте и распакуйте следующий архив с конфигурацией (ZIP, 32 Кб)2. Откройте MATLAB. На вкладке HOME нажмите на кнопку Parallel и выберите пункт "Create and Manage Clusters...".

3. В появившемся окне нажмите на кнопку Import и выберите файл Supercomputer_HSE.mlsettings из распакованного архива.

4. Выберите импортированный профиль Supercomputer HSE и нажмите на кнопку Edit. В разделе SCHEDULER PLUGIN в пункте PluginScriptsLocation укажите путь до папки nonshared из распакованного архива. В Additional Properties впишите в поле Username свой логин на суперкомпьютере. По завершению редактирования нажмите на кнопку Done. 5. Установите отредактированный профиль по умолчанию, нажав на кнопку Set as Default.

Выполнение расчётов на суперкомпьютере
Перейдите в окно Command Window и выполните команду c = parclusterРезультатом её выполнения будет новый объект parcluster, связанный с суперкомпьютером.
Для иллюстрации возможности удалённой постановки задач в очередь суперкомпьютера воспользуемся следующим примером. Сохраните его в файле parallel_example.m.
%====================================================================
% parallel_example.m
%====================================================================
function t = parallel_example(iter)
if nargin==0, iter = 16; end
disp('Start sim');
t0 = tic;
parfor idx = 1:iter
A(idx) = idx;
pause(2);
end
t = toc(t0);
disp('Sim completed');
Отправка задачи на суперкомпьютер производится командой batch. Выполните команду:
j = c.batch(@parallel_example, 1, {}, 'pool', 4, 'CurrentFolder', '.');
MATLAB запросит пароль от вашей учётной записи на суперкомпьютере и выполнит необходимые действия для постановки задачи в очередь Slurm.Отслеживать статус задачи можно с помощью метода State у объекта j - j.State, либо в окне Job Monitor, доступного в меню Parallel -> Monitor Jobs:

После того, как задача завершена необходимо получить с суперкомпьютера результаты вычислений. Для этого выполните команду j.fetchOutputs, либо щелкните правой кнопкой мыши по задаче в окне Job Monitor и выберите пункт Fetch Outputs.
Важно: fetchOutputs возвращает только результат выполнения функции. Данные, записанные на диск во время расчёта, необходимо вручную скопировать с суперкомпьютера при необходимости.
Дополнительные параметры при отправке задачи можно указывать в переменной additionalSubmitArgs:
j = c.batch(@parallel_example, 1, {100}, 'pool', 8);
additionalSubmitArgs =
'--ntasks=9 -c 1 --ntasks-per-core=1'
После получения результатов расчёта объект j можно удалить с помощью команды j.delete
Запуск задачи, которая взаимодействует с другими файлами
Команда batch при выполнении анализирует код и автоматически отправляет все необходимые файлы, которые недвусмысленно заданы. В случае, если ваша задача во время выполнения обращается к другим файлам, например, имя которых неявно вычисляется, то необходимо использовать дополнительные опции 'AttachedFiles' или 'AdditionalPaths'.Пример функции с доступом к файлам, заданным неявным образом:
function X = myFunction()
A = load("mydata.dat");
X = zeros(flip(size(A)));
parfor i = 1:3
B = load("mydata"+i+".dat");
X = X + A\B;
end
end
Здесь функция в цикле обращается к файлам mydata1.dat, mydata2.dat, mydata3,day, но эти имена расчитываются во время выполнения и не будут отправлены на суперкомпьютер в автоматическом режиме. В этом случае, в параметре AttachedFiles команды batch следует явно указать дополнительные файлы, которые будут приложены к задаче:job = batch(c,@myFunction,1,{},'Pool',3,'CurrentFolder',tempdir,'AttachedFiles',"mydata"+string(1:3)+".dat");
Для подробной информации по использованию команды batch см. официальный сайт MATLAB.
Расчёты с использованием GPU-ускорителей
Многие вычисления могут быть ускорены за счёт выполнения их на GPU-ускорителях. На официальном сайте доступен список всех функций, поддерживающих использование GPU, а также подробное описание различных подходов по ускорению вычислений с помощью GPU. Подключение GPU-ускорителей в MATLAB рекомендуется только для очень больших расчётов.
Для использования GPU необходимо при постановке задачи в очередь указывать дополнительный параметр -G 1 (где 1 - количество выделяемых GPU-ускорителей). Простейший пример gpu_matlab.m, создающий случайную матрицу и выполняющий быстрое преобразование Фурье:
% MATLAB script that defines a random matrix and does FFT on CPU and GPU
A1 = rand(3000,3000); % Define a matrix
% Use CPU
tic;
% Do 1000 FFT's
for i = 1:1000
B2 = fft(A1);
end
time1 = toc;
fprintf('%s\n',"Time to run FFT on the node:")
disp(time1);
% Use GPU
tic;
A2 = gpuArray(A1);
% Do 1000 FFT's
for i = 1:1000
% MALAB knows to use GPU FFT because A2 is defined by gpuArray
B2 = fft(A2);
end
time2 = toc;
fprintf('%s\n',"Time to run FFT on the GPU:")
disp(time2);
speedup = time1/time2
Содержимое файла gpu_matlab.sbatch:
#!/bin/bash #SBATCH -J gpu_matlab #SBATCH -o gpu_matlab-%j.out #SBATCH -e gpu_matlab-%j.err #SBATCH -N 1 # Кол-во запрашиваемых узлов #SBATCH -c 2 # Кол-во запрашиваемых ядер #SBATCH -G 1 # Кол-во запрашиваемых GPU #SBATCH -t 0-00:30 # Ограничение времени выполнения module load matlab/r2024a matlab -nosplash -nodesktop -r "gpu_matlab"Постановка задачи в очередь суперкомпьютера осуществляется командой sbatch gpu_matlab.sbatch, в консоль будет выведено сообщение Submitted batch job %j (где %j - номер задачи в очереди). На вычислительном узле будет выделен участок из 2 процессоров и 1 GPU. Результат вычисления будет записан в файл gpu_matlab-%j.out
Содержимое файла gpu_matlab-00000.out:
Time to run FFT on the node: 45.7517 Time to run FFT on the GPU: 6.2630 speedup = 7.3050Любые ошибки при выполнении расчёта будут записаны в файл gpu_matlab-%j.err
Для более подробной информации - см. руководство по использованию GPU в MATLAB.
Дополнительные ресурсы по выполнению параллельных расчетов в MATLAB
- Примеры расчётов с использованием Parallel Computing Toolbox
- Документация по Parallel Computing Toolbox
- Пошаговые руководства по параллельным вычислениям и расчётам на GPU
- Видео по Parallel Computing Toolbox и отдельное видео на русском языке
- Вебинары по параллельным вычисления в MATLAB
- Запись вебинара «Параллельные вычисления и Big Data в MATLAB» на русском языке
Полезные ссылки
- Инструкция по работе с системой HPC TaskMaster
Нашли опечатку?
Выделите её, нажмите Ctrl+Enter и отправьте нам уведомление. Спасибо за участие!
Сервис предназначен только для отправки сообщений об орфографических и пунктуационных ошибках.
.png)
.jpg)