1

MatlabとPCTがインストールされたLinuxクラスター(Torque Managerで128人のワーカー)があり、計算を並列化するための良い方法を探しています。

時系列の軌道データ(100k x 2)マトリックスがあります。行列の対角化、べき乗、乗算を含む最尤(ML)計算を実行します。これは、小さい行列に対して高速に実行されます。軌道データを小さなチャンクに分割し、多くのワーカーで計算を実行し(粗い並列化)、正常に動作するため、ここでは問題はありません(30秒以内に完了します)

ただし、計算は、MLへの影響を変更およびテストするために必要ないくつかのパラメーターにも依存します。(パラメータスイープに似たもの)。

ループを使用してこれを実行しようとすると、計算が徐々に非常に遅くなり、何らかの理由で理解できなくなります。

%%%%%%% Pseudo- Code Example:

% a [100000x2], timeseries data
load trajectoryData 

% p1,p2,p3,p4 are parameters 
% but i want to do this over a multiple values fp3 & fp4 ;
paramsMat = [p1Vect; p2Vect;p3Vect ;p4Vect];
matlabpool start 128

[ML] = objfun([p1 p2 p3 p4],trajectoryData) % runs fast ~ <30s 

%% NOTE: this runs progressively slow 
for i = 1:length(paramsMat)

     currentparams = paramsMat(i,:);
     [ML] = objfun(currentparams,trajectoryData)
end
matlabpool close

objFunc関数は次のとおりです。

% objFunc.m
[ML] = objFunc(Params, trajectoryData) 

% b = 2 always
[a b] = size(trajectoryData) ;

% split into fragments of 1000 points  (or any other way)
fragsMat = reshape(trajectoryData,1000, a*2/1000) ;

% simple parallelization. do the calculation on small chunks
parfor ix = 1: numFragments
   % do heavy calculations
   costVal(ix) = costValFrag; 
end

% just an example; 
ML = sum(costVal) ; 

%%%%%%

奇妙なことに、1回の計算で(クラスター全体を使用して)約30秒かかりますが、forループ内では、奇妙な理由で速度が減衰し、100回目の計算でも非常に遅くなります。ワーカーはCPUの10〜20%しか使用していません。

代替の並列化の提案を含む提案がある場合は、非常に役立ちます。

4

2 に答える 2

1

これを正しく読めば、各パラメーター セットは他のすべてのパラメーターから完全に独立しており、ワーカーよりも多くのパラメーター セットを使用できます。

簡単な解決策は、parfor の代わりにバッチ ジョブを使用することです。

job_manager = findresource( ... look up the args that fit your cluster ... )
job = createJob(job_manager);
for i = 1:num_param_sets
    t = createTask(job, @your_function, 0, {your params});
end
submit(job);

このようにして、内部関数の parfor から発生する通信オーバーヘッドを回避し、matlab を分離したままにします。ジョブパラメーターの 1 つとして、タスク間でワーカーを自動的に再起動するように指示することもできます (私はそう思います)。

于 2013-03-27T18:46:01.480 に答える
0

の値はnumFragments? これが常にワーカーの数よりも多いとは限らない場合、速度が低下することがわかります。

for外側のループを にしようとすることをお勧めしますparfor。一般に、最も外側のレベルで並列処理を適用することをお勧めします。

于 2012-09-17T12:03:18.393 に答える