Выполнение пакетного задания Matlab в кластере HPC
Я пытаюсь заставить Matlab выполнять несколько сценариев как отдельные пакетные задания. Каждый скрипт загружает некоторые данные из таблиц Excel и реализует нейронную сеть. Нейронная сеть использует циклы parfor для настройки параметров.
Когда я запускаю пакетное задание на моей локальной машине, оно работает нормально. Мой код Matlab выглядит так
job1 = batch('Historical1Step',...
'Profile', 'local',...
'Matlabpool', 3,...
'CaptureDiary',true,...
'CurrentDirectory', '.');
try
job1Results = fetchOutputs(job1);
catch err
delete(job1);
rethrow(err);
end
delete(job1);
и вывод дневника я получаю
--- Start Diary ---
Analysing data for stock BAX
num_its =
2
100%[============================
100%[===================================================]
--- End Diary ---
Однако, когда я перехожу с "локальной" конфигурации на мою конфигурацию сервера, я получаю
--- Start Diary ---
--- End Diary ---
Error using parallel.Job/fetchOutputs (line 869)
An error occurred during execution of Task with ID 1.
Error in SOExample (line 14)
job1Results = fetchOutputs(job1);
Caused by:
Index exceeds matrix dimensions.
Я предполагаю, что проблема связана с видимостью моих функций / данных на рабочих, но я пробовал каждую комбинацию опций "FileDependencies" и "PathDependencies", которую я могу придумать в пакетной функции, но безрезультатно.
Любая помощь будет очень признательна, и заранее извиняюсь, если я сделал что-то монументально глупое, не осознавая этого!
РЕДАКТИРОВАТЬ-
Стек ошибок выглядит следующим образом:
Index exceeds matrix dimensions.
Error in Historical1Step (line 13)
Error in parallel.internal.cluster/executeScript (line 22)
eval(['iClearAndSetCallerWorkspace(workspaceIn);' scriptName]);
Error in parallel.internal.evaluator/evaluateWithNoErrors (line 14)
[out{1:nOut}] = feval(fcn, args{:});
Error in parallel.internal.evaluator/CJSStreamingEvaluator/evaluate (line 31)
[out, errOut] = parallel.internal.evaluator.evaluateWithNoErrors( fcn, nOut, args );
Error in dctEvaluateTask>iEvaluateTask/nEvaluateTask (line 281)
[output, errOutput, cellTextOutput{end+1}] = evaluator.evaluate(fcn, nOut, args);
Error in dctEvaluateTask>iEvaluateTask (line 141)
nEvaluateTask();
Error in dctEvaluateTask (line 57)
[resultsFcn, taskPostFcn, taskEvaluatedOK] = iEvaluateTask(job, task, runprop);
Error in distcomp_evaluate_filetask_core>iDoTask (line 149)
dctEvaluateTask(postFcns, finishFcn);
Error in distcomp_evaluate_filetask_core (line 48)
iDoTask(handlers, postFcns);
Error using parallel.Job/fetchOutputs (line 869)
An error occurred during execution of Task with ID 1.
Error in SOExample (line 14)
job1Results = fetchOutputs(job1);
Caused by:
Index exceeds matrix dimensions.
Файл Historical1Step - это скрипт, который я пытаюсь запустить. Первые строки (пока код не падает):
wrkDir = 'V:\Individual\SOFNN'; % this is where the files are on cluster headnode
wrkFldr = [wrkDir '\ExcelSheets\1-stepAhead\']; % location of excel sheets
%%
folder = dir(wrkFldr);
isub = [folder(:).isdir]; % data is stored in sub-directory based on stock symbol
stockNames = {folder(isub).name}'; % extract stock names from names of sub-dirs
stockNames(ismember(stockNames,{'.','..'})) = []; % remove names '.' and '..'
for i = 1:1 % this loop should read in data for stock i from correct sub-dir
close all;
clc;
sym = stockNames{i};
disp(['Analysing data for stock ' sym]);
fldrName = strcat(wrkFldr,'\', sym, '\');
end % added for completion
1 ответ
В вашем коде вы используете букву подключенного диска на рабочих. Обычно работники не могут видеть буквы подключенного диска из-за способа запуска процессов. Попробуйте вместо этого использовать путь UNC. Немного больше информации в документе здесь: http://www.mathworks.com/help/distcomp/troubleshooting-and-debugging.html