Table of Contents |
---|
クラスタ構成
MATLAB のホームタブで、並列メニューを選択します。[クラスタの作成と管理]を選択します。
クラスタプロファイルの追加 > MATLAB Job Scheduler をクリックします。
プロファイル名をダブルクリックして、MATLAB Job Scheduler プロファイルの名前を変更します。
今回はMJSProfile1プロファイルを選択し、ツールバーの[編集]をクリックして編集します。
[完了]をクリックします。二枚目の画像は、設定後のMATLAB Job Schedulerクラスタ・プロファイルを示します。
[規定に設定] を選択して、このプロファイルをデフォルトにします。
クラスタープロファイルの検証をクリックします。その後、ユーザー名とパスワードが聞かれます。
クラスタの検証が成功すると、以下のようになります。
演習
準備:Coding files>Block Process On Large Imageファイルのinput_img.ngをC:\Users\ユーザー名\Documents\MATLABに移す。
localとサーバーの切り替えは、クラスタープロファイルマネージャーでの既定の設定を切り替えることで可能。
並列処理ありとなしの切り替えは、コマンドにおける'UseParallel',trueを'UseParallel',falseに書き換える。
演習1:大きな画像に対するブロック処理
並列処理ありの場合
Code Block tic % Start stopwatch timer % Input image input_img = "input_img.jpg"; % Add image path % Initialize Edge detection function fun = @(block_struct) edge(block_struct.data,"canny"); % Covert source image from RGB to GRAY input_image= rgb2gray(imread(input_img)); % Perform Parallel Block Process result = blockproc(input_image,[25 25],fun, ... 'UseParallel',true); toc % Terminate stopwatch timer % Show ouput image imshow(result)
並列処理なしの場合
Code Block tic % Start stopwatch timer % Input image input_img = "input_img.jpg"; % Add image path % Initialize Edge detection function fun = @(block_struct) edge(block_struct.data,"canny"); % Covert source image from RGB to GRAY input_image= rgb2gray(imread(input_img)); % Perform Parallel Block Process result = blockproc(input_image,[25 25],fun, ... 'UseParallel',false); toc % Terminate stopwatch timer % Show ouput image imshow(result
計算時間の比較(単位:秒)
...
並列処理なし
...
並列処理あり
...
windows
(Local)
...
windows
(Local)
4 workers
...
CentOS
(a9 Server)
12 workers
...
11.97
...
2.73
...
2.79
演習2:グローバルミニマムの探索
...
並列処理ありの場合
Code Block |
---|
tic % Start stopwatch timer
% Consider a function with several local minima.
fun = @(x) x.^2 + 4*sin(5*x);
fplot(fun,[-10,10])
rng default % For reproducibility
opts = optimoptions(@fmincon,'Algorithm','sqp');
problem = createOptimProblem('fmincon','objective',...
fun,'x0',3,'lb',-5,'ub',5,'options',opts);
ms = MultiStart('UseParallel', true);
%To search for the global minimum, run MultiStart on 2000 instances of the problem using the fmincon 'sqp' algorithm.
[x,f] = run(ms,problem,2000)
toc % Terminate stopwatch timer |
...
並列処理なしの場合
Code Block |
---|
tic % Start stopwatch timer
% Consider a function with several local minima.
fun = @(x) x.^2 + 4*sin(5*x);
fplot(fun,[-10,10])
rng default % For reproducibility
opts = optimoptions(@fmincon,'Algorithm','sqp');
problem = createOptimProblem('fmincon','objective',...
fun,'x0',3,'lb',-5,'ub',5,'options',opts);
ms = MultiStart('UseParallel', false);
%To search for the global minimum, run MultiStart on 2000 instances of the problem using the fmincon 'sqp' algorithm.
[x,f] = run(ms,problem,2000)
toc % Terminate stopwatch timer |
...
並列処理なし
...
並列処理あり
...
windows
(Local)
...
windows
(Local)
8 workers
...
CentOS
(a9 Server)
12 workers
...
6.20
...
1.77
...
1.52
演習3:SVM分類器の最適化
...
並列処理ありの場合
Code Block |
---|
tic % Start stopwatch timer
load ionosphere % Load the ionosphere data set.
rng default
% Find hyperparameters that minimize five-fold cross-validation loss by using automatic hyperparameter optimization. For reproducibility, set the random seed and use the 'expected-improvement-plus' acquisition function.
Mdl = fitcsvm(X,Y,'OptimizeHyperparameters','auto', ...
'HyperparameterOptimizationOptions',struct('UseParallel',true))
toc % Terminate stopwatch timer |
...
並列処理なしの場合
Code Block |
---|
tic % Start stopwatch timer
load ionosphere % Load the ionosphere data set.
rng default
% Find hyperparameters that minimize five-fold cross-validation loss by using automatic hyperparameter optimization. For reproducibility, set the random seed and use the 'expected-improvement-plus' acquisition function.
Mdl = fitcsvm(X,Y,'OptimizeHyperparameters','auto', ...
'HyperparameterOptimizationOptions',struct('UseParallel',false))
toc % Terminate stopwatch timer |
...
並列処理なし
...
並列処理あり
...
windows
(Local)
...
windows
(Local)
8 workers
...
CentOS
(a9 Server)
12 workers
...
32.38
...
7.78
...
7.86
演習4:並列処理によるデータのクラスタリング
並列処理ありの場合
Code Block Mu = bsxfun(@times,ones(20,300),(1:20)'); % Gaussian mixture mean rn300 = randn(300,300); Sigma = rn300'*rn300; % Symmetric and positive-definite covariance Mdl = gmdistribution(Mu,Sigma); % Define the Gaussian mixture distribution rng(1); % For reproducibility X = random(Mdl,10000); % Specify the options for parallel computing. stream = RandStream('mlfg6331_64'); % Random number stream options = statset('UseParallel',1,'UseSubstreams',1,... 'Streams',stream); % Cluster the data using k-means clustering. Specify that there are k = 200 clusters in the data and increase the number of iterations. Typically, the objective function contains local minima. Specify 10 replicates to help find a lower, local minimum. tic; % Start stopwatch timer [idx,C,sumd,D] = kmeans(X,200,'Options',options,'MaxIter',10000,... 'Display','final','Replicates',10); toc % Terminate stopwatch timer
並列処理なしの場合
Code Block Mu = bsxfun(@times,ones(20,300),(1:20)'); % Gaussian mixture mean rn300 = randn(300,300); Sigma = rn300'*rn300; % Symmetric and positive-definite covariance Mdl = gmdistribution(Mu,Sigma); % Define the Gaussian mixture distribution rng(1); % For reproducibility X = random(Mdl,10000); % Specify the options for parallel computing. stream = RandStream('mlfg6331_64'); % Random number stream options = statset('UseParallel',false,'UseSubstreams',1,... 'Streams',stream); % Cluster the data using k-means clustering. Specify that there are k = 200 clusters in the data and increase the number of iterations. Typically, the objective function contains local minima. Specify 10 replicates to help find a lower, local minimum. tic; % Start stopwatch timer [idx,C,sumd,D] = kmeans(X,200,'Options',options,'MaxIter',10000,... 'Display','final','Replicates',10); toc % Terminate stopwatch timer
...
並列処理なし
...
並列処理あり
...
windows
(Local)
...
windows
(Local)
8 workers
...
CentOS
(a9 Server)
12 workers
...
8.45
...
9.90
...
11.00
演習5:複数の GPU での MATLAB 関数の実行
単一の GPU の使用
Code Block |
---|
N = 1000;
r = gpuArray.linspace(0,4,N);
x = rand(1,N,"gpuArray");
numIterations = 1000;
for n=1:numIterations
x = r.*x.*(1-x);
end
plot(r,x,'.'); |
経過時間を計測
Code Block |
---|
N = 1000;
r = gpuArray.linspace(0,4,N);
x = rand(1,N,"gpuArray");
numIterations = 1000;
for n=1:numIterations
x = r.*x.*(1-x);
end
plot(r,x,'.'); |
parfor による複数の GPU の使用
Code Block |
---|
numGPUs = gpuDeviceCount("available");
parpool(numGPUs);
numSimulations = 100;
X = zeros(numSimulations,N,"gpuArray");
parfor i = 1:numSimulations
X(i,:) = rand(1,N,"gpuArray");
for n=1:numIterations
X(i,:) = r.*X(i,:).*(1-X(i,:));
end
end
figure
plot(r,X,'.'); |
サポートされているGPUデバイスがないため、numGPUsは1に変更
経過時間を計測
Code Block |
---|
parpool(1);
numSimulations = 100;
numIterations = 1000;
N = 1000;
r = gpuArray.linspace(0,4,N);
X = zeros(numSimulations,N,"gpuArray");
tic;
parfor i = 1:numSimulations
X(i,:) = rand(1,N,"gpuArray");
for n=1:numIterations
X(i,:) = r.X(i,:).(1-X(i,:));
end
end
toc;
figure
plot(r,X,'.'); |
...
parfeval による複数 GPU の非同期の使用
Code Block |
---|
f(numSimulations) = parallel.FevalFuture;
type myParallelFcn
for i=1:numSimulations
f(i) = parfeval(@myParallelFcn,1,r);
end
figure
hold on
afterEach(f,@(x) plot(r,x,'.'),0); |
並列処理ありと並列処理なしの違い
...
並列処理あり
コマンドにおいて'UseParallel',true
処理中の際に左下のアイコンが緑色になる。
並列処理なし
...
コマンドにおいて'UseParallel',false
処理中の際に左下のアイコンが青色になる。
...
Table of Contents |
---|
はじめに
ラボラトリでは並列処理を行うクラスター環境 MATLAB Parallel Serverが利用できます。R2019a 以前は、MATLAB Parallel Server は MATLAB Distributed Computing Server という名称でした。現時点では最大24ワーカーとなっています。サーバは NVIDIA Testa T4 ×1 に接続されており、通常の並列処理だけでなく、GPUによるスケールアウトも可能です。
Info |
---|
MATLAB R2022aのみの提供です。クライアント側もR2022aをご利用ください。 |
準備1-MATLAB R2022aのダウンロード
MathWorksアカウントにサインインします。アカウントがない場合は作成してください。
MATLAB(Individual)の右の下矢印を押して「ダウンロード」へ
ダウンロードで「リリースを選択」の「さらに表示」からR2022aを選択します。
{Windows, Mac, Linux}用ダウンロードを押してMATLAB R2022aのダウンロードを開始します。
準備2-インストール時の設定
インストール時には以下の順でライセンスと保存先の設定をします。
MathWorksアカウント(電子メールアドレスとパスワードの入力)へのサインイン
ライセンス許諾の条件への同意
ライセンスの選択 MATLAB (Individual) を選択
ユーザーの確認
保存先フォルダーの選択(デフォルトのままで問題ありません)
Parallel Serverを使用するために、インストール時の製品の選択でMATLABの他にParallel Computing Toolboxを選択してください
ハンズオンセミナーに参加される場合は、Parallel Computing Toolbox に加え、Deep Learning Toolbox も選択してください。
「次へ」を押して「選択の確認」に進み、「インストールの開始」をクリックしてください。
準備3-Parallel Computing Toolbox基本設定
「基本設定」の「Parallel Computing Toolbox」の「推奨される並列プールでのワーカー数」について、デフォルトでは「12」となっていますが「4」に変更します。
...
準備4-クラスター構成
Info |
---|
クラスタープロファイルは学内でのみ使用可能です。学外の場合はVPN接続で使用してください。 |
1. クラスタープロファイルマネージャーの表示
MATLAB のホームタブで、並列メニューの[クラスターの作成と管理]を選択します。
...
2. クラスタープロファイルの追加
クラスタープロファイルの追加 > MATLAB Job Scheduler をクリックします。
...
追加したプロファイルはダブルクリックすることで、名前の変更が可能です。
デフォルトのままMJSProfile1でも使用可能です。
3. クラスタープロファイルの編集
プロファイルを選択し、ツールバーの[編集]をクリックして編集します。
...
このクラスターの説明 | (例)lab2022 |
---|---|
MATLABジョブスケジューラを実行しているマシンのホスト名 | a9.media.hosei.ac.jp |
MATLABジョブスケジューラにアクセスするためのユーザー名 | lab2022に登録しているユーザー名 (ラボラトリアカウントが分からない https://media-hosei.atlassian.net/wiki/x/BYDsv ) |
各ワーカーで使用する計算スレッドの数 | 1 デフォルト |
ライセンス番号 | <none> デフォルト |
[完了]をクリックします。二枚目の画像は、設定後のMATLAB Job Schedulerクラスタープロファイルを示します。
4. クラスタープロファイル「ワーカー」の編集
プロファイルを選択し、スクロールし「ワーカー」を表示しツールバーの[編集]をクリックして編集します
...
ジョブを実行するワーカーの数の範囲 | [1 4] |
[完了]をクリックします。
5. クラスタープロファイルを既定に設定
[既定に設定] を選択して、プロファイルをデフォルトにします。
...
6. クラスタープロファイルの検証
プロパティの隣の検証のタブに移動し、クラスタープロファイルの「検証(V)」をクリックします。
...
ラボラトリのパスワードを入力します。
...
クラスターの検証が成功すると、以下のように全ての段階のステータスが”パス”になります。
...
Info |
---|
クラスタープロファイルは学内でのみ使用可能です。学外の場合はVPN接続で使用してください。 |