MATLAB Answers

ガウス過程回帰を用い​た学習済みモデルを用​いて,並列計算を全て​のCPUで行う方法を​教えて下さい。

5 views (last 30 days)
Masakazu Ito
Masakazu Ito on 24 Jan 2018
Edited: michio on 30 Jan 2018
並列計算を行うコードを書いており,今までは160の論理プロセッサ全てで並列計算が行えましたが,プログラムの一部にガウス過程回帰を用いた学習済みモデルを含めると,40の論理プロセッサ(1つのソケット)だけの動作になってしまいます。きれいに,ノード0のソケットだけ全ての論理プロセッサが負荷100%で,その他の論理プロセッサは負荷が0%から数%となってしまいます。学習済みモデルを使わないようにすると,問題なく全ての論理プロセッサで並列計算をします。学習済みモデルを使って,全ての論理プロセッサで並列計算を行う方法を教えて下さい。

  2 Comments

mizuki
mizuki on 26 Jan 2018
問題を把握するために、現在の状況をもう少し教えてください。
ガウス過程回帰の学習済みモデルを含めると40の論理プロセッサだけでしか計算がされないということですが、学習済みモデルを含めない場合は何を並列に計算されているのでしょうか。
他の複数の機械学習モデルを並列に計算されている、一つの機械学習モデルを並列で計算している、機械学習モデルの計算ではなく、他の計算を並列化しているなど、どんな状況に該当しますでしょうか。
また、学習済みモデルは回帰学習器のモデルのエクスポートで出力されるモデル、あるいは FITRGP 関数の出力引数のことでしょうか。
michio
michio on 30 Jan 2018
回答欄にMasakazu Itoさんのコメントが追記 [on 26 Jan 2018 at 2:05]されておりましたので、こちらに転記します。オリジナルは削除しました。
_______________________
どうもありがとうございます。
計算は,パラメータを変えた並列計算を行っています。それぞれの並列にされている計算で,学習済みモデルを使う場合は全ての並列計算で12の同じ学習済みモデル(二乗指数GPRとMatern5/2のミックス)を使い,使わない場合は全ての並列にされている計算で単純な四則演算を用いた持続予測に近いモデルを用いています。
学習済みモデルは,回帰学習器アプリを用いて,コンパクトモデルとして出力したモデルを用いています。
何か分かりますでしょうか。どうぞ,よろしくお願いいたします。

Sign in to comment.

Answers (1)

mizuki
mizuki on 30 Jan 2018
詳細情報ありがとうございます。
二乗指数 GPR と Matern5/2 カーネルそれぞれいくつかのパラメタで作成した学習済みモデルを使って、parfor ループ内で predict 関数を使った予測を並列にされているという認識をしています。
例えば、回帰学習器アプリで出力したそれぞれのコンパクトモデルを save 関数を用いて
save('mdl1.mat', mdl)
のように mdl1.mat, mdl2.mat, ..., mdl12.mat まで保存していたとして、例えば以下のような流れで並列計算されていますでしょうか。(変数名など細かい点について確認しておらず実際に動作するかは不明で、流れだけを書いた擬似コードです)
num_model = 12;
parfor i=1:num_model % 並列ループ
gprmdl = ['mdl', int2str(i)];
load(gprmdl) % モデルのロード
  yfit = mdl.predictFcn(Xnew); % Xnew はテストデータ
end
もし理解に間違いがありましたら補足いただければと思います。

  1 Comment

michio
michio on 30 Jan 2018
回答欄にMasakazu Itoさんのコメントが追記 [on 29 Jan 2018]されておりましたので、こちらに転記します。オリジナルは削除しました。
_____________________
ご確認,ありがとうございます。
12のモデルは1つのmatファイルに保存し,毎回最初にロードして利用しています。 また,12のモデルは1つのループで同時に使っております。 頂いたコードを少し変えまして,下のような流れで利用しております。
load(gprmdl) % 12モデルのロード
num_parameter = 100;
parfor i=1:num_parameter % 並列ループ
  yfit = mdl01.predictFcn(Xnew01); % Xnew はテストデータ
  yfit = mdl02.predictFcn(Xnew02); % Xnew はテストデータ
% 繰り返し
  yfit = mdl12.predictFcn(Xnew12); % Xnew はテストデータ
end
すみませんが,よろしくお願いいたします。

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!