SENAC Vol. 54, No. （2 2021. 4）― 37 ―［解 説］

スーパーコンピュータ AOBA での MATLAB の並列処理―

MATLAB の並列処理を大規模にスケールアウト―齊藤 甲次朗 加藤 順之
MathWorks Japan

1.

はじめに

東北大学サイバーサイエンスセンター様が提供するスーパーコンピュータ AOBA では、サブシス
テム AOBA-B において MATLAB®のデスクトップ環境(MATLAB、Parallel Computing Toolbox™など)やクラスター環境(MATLAB Parallel Server™)が用意されています。MATLAB の並列処理を AOBA のリソースを活用して大規模にスケールアウトすることができます。

2.

AOBA-B での MATLAB の並列処理のワークフロー

AOBA-B で MATLAB の並列処理を実行するためのワークフローは以下のとおりです。
まず AOBA-B のログインサーバに SSH でログインし、フロントエンドサーバ(front1 またはfront2)に SSH ログインします。フロントエンドサーバで MATLAB を起動し、並列処理を実行します。並列処理の設定や処理内容に応じて、NEC Networking Queueing System V (NQSV)と連携を行うスクリプトが qsub などのコマンドを自動生成します。NQSV でジョブの割当がされると計算サーバで MATLAB Parallel Server のワーカーが起動し、MATLAB の並列処理を実行します。並列処理の結果は NQSV の出力ファイルとして保存され、フロントエンドサーバの MATLAB から変数の読み取りを行うと結果が MATLAB のワークスペースへと転送されます。
これを図示したものが図 1 です。

図 1

AOBA-B での MATLAB の並列処理ワークフロー

― 38 ―

3.

SENAC Vol. 54, No. （2 2021. 4）

MATLAB Parallel Server と NQSV の連携

3.1 連携の概要
ここでは MATLAB および MATLAB Parallel Server と NQSV との連携について説明します。MATLABと NQSV は連携スクリプトとクラスタープロファイルによって連携されています。それぞれの役割については表 1 のとおりです。
表 1

MATLAB と NQSV の連携

用語
クラスタープロファイル

役割
MATLAB の並列処理をどの環境で実行させるかの設定を定義します。
MATLAB の並列処理のコマンド実行時に、クラスタープロファイルの設定や要求するタスクに応じて、NQSV のコマンドを動的に生成します。

連携スクリプト

連携スクリプトの詳細は図 2 のとおりです。

図 2
3.2

NQSV との連携スクリプト

連携スクリプトの使い方

3.2.1 連携スクリプトのコピー
サイバーサイエンスセンター様にて、連携スクリプトのマスターを管理しています。
/mnt/stfs/ap/aoba-b_shared のディレクトリを任意の場所にコピーしてください。

3.2.2 設定ファイルの編集
フロントエンドサーバにログインし、テキストエディタを使って連携スクリプトの設定ファイル(mdcs.rc)を編集します。設定ファイルのそれぞれの項目は表 2 のとおりです。

スーパーコンピュータ AOBA での MATLAB の並列処理

表 2
項目

連携スクリプトの設定ファイル(mdcs.rc)
デフォルト値
備考local

AOBA-B ではフロントエンドサーバの MATLABのマシンから直接 NQS のコマンドを実行しますので、デフォルトの「local」にします。

128

使用する MATLAB Parallel Server の最大ワー
カー数

R2020b:/mnt/stfs/ap/M
ATLAB,R2020a:/mnt/stf
s/ap/MATLAB.R2020a

MATLAB Parallel Server がインストールされたディレクトリのパス。複数バージョンがある場合は、「<バージョン名>:インストールディレクトリ」をカンマでつなげます。

Type

NumWorkers

ClusterMatlabRoot― 39 ―

ClusterHost

無し

AOBA-B の場合、使用しません。

LocalJobStorageLocation

無し

MATLAB クライアントのジョブを格納するパスです。デフォルトの空のままにします。

RemoteJobStorageLocation/uhome/

MATLAB から投げられたジョブやデータのファイルを格納するクラスター側のパスです。ユーザーusera がクライアントホスト front1 からジョブを実行した場合、RemoteJobStorageLocation = /uhome/と設定
すると、/uhome/usera/MdcsDataLocation/aoba-b/fro
nt1/R2020b/localにジョブファイルなどが作成されます。

JobStorageLocationOnPC無し

AOBA-B の場合、使用しません。

3.2.3 連携スクリプトの設定
フロントエンドサーバで MATLAB を起動し、連携スクリプトを MATLAB のカレントフォルダまたはパスが通っているところに置きます。例えば、連携スクリプトを/uhome/user1/matlab のディレクトリに置いた場合、MATLAB から以下のコマンドでパスを追加できます。
>> addpath('/uhome/user1/matlab')

MATLAB から以下のコマンドを実行して連携スクリプトを設定します。
>> configCluster

これにより AOBA-B 用のクラスタープロファイルが作成されます。

― 40 ―

SENAC Vol. 54, No. （2 2021. 4）

3.2.4 クラスタープロファイルの確認
次に、設定されたクラスタープロファイルの確認を行います。MATLAB の「並列」メニューから「クラスタープロファイルの作成と管理」をクリックします。

図 3クラスタープロファイルの作成と管理をクリック

クラスタープロファイルの一覧に AOBA-B 用のクラスタープロファイル(例：aoba-b local
R2020b)が既定として設定されていることを確認します。もし既定になっていなかったら「プロファイルの管理」から「既定の値として設定」をクリックします。

図 4クラスタープロファイルを確認

3.2.5 クラスタープロファイルの変更
必要に応じてクラスタープロファイルの設定値を変更します。

図 5

必要に応じてクラスタープロファイルの設定を変更

スーパーコンピュータ AOBA での MATLAB の並列処理― 41 ―

クラスタープロファイルの項目と対応する NQSV のオプションについては表 3 及び表 4 のとおりです。

表 3クラスタープロファイルの項目と対応する NQSV のオプション

プロパティ名説明対応する NQSV のオプション

デフォルト値

JobStorageLocation

クライアントでジョブデータを保存するディレクトリ

―/uhome/ユーザー名/MdcsDataLocation/aoba-b/ホスト名/R2020b/local

NumWorkers

クラスターで使用可能なワーカーの数―

128

NumThreads

1 ワーカーあたりのスレッド数―1(推奨は 1 です)

ClusterMatlabRoot

MATLAB Parallel Server がインストールされているディレクト
リ―

R2020b の場合：
/mnt/stfs/ap/MATLAB
R2020a の場合：
/mnt/stfs/ap/MATLAB.R202
0a

LicenceNumber

MATLAB Parallel Server オンラ
インライセンスを使用する場合のライセンス番号―無し(オンラインライセンスを使用しないため)

RequiresOnlineLicens
ing

MATLAB Parallel Server のオンラインライセンスを使用するかどうか

―

False
(オンラインライセンスを使用しないため)OperatingSystem

クラスター計算ノードの OS

―

unix

HasSharedFilesystem

MATLAB クライアントのマシンとクラスターの計算ノードとでファイル共有サーバがあるかどうか―

true

PluginScriptsLocation

連携スクリプトを格納している
ディレクトリ―configCluster.m が あ る
IntegratonScripts のディ
レクトリ

AddtionalProperties

クラスターに渡す追加のプロパ
ティ

―

―

AddtionalSubmitArgs

追加で渡す qsub の引数――

DebugMessagesTurne
dOn

デバッグ用フラグ―

false

EmailAddress

ジョブ投入時、終了時にメール通知をする場合のメール受信先-M <メールアドレス> -m b -m e

無し

IdentityFile

SSH の鍵ファイルのパス。鍵ファ
イ ル を 使 用 す る 場 合 はUseIdentityFile を true にしてください。

―無し

― 42 ―

SENAC Vol. 54, No. （2 2021. 4）

表 4

クラスタープロファイルの項目と対応する NQSV のオプション (続き)プロパティ名説明対応する NQSV のオプション

デフォルト値

MaxElapseTime

最大経過時間-l elapstim_req

24:00:00

NodeCount

ノード数

-b1

ProcsPerNode

1 ノードあたりのプロセス数(-b のノード数算出に使用)

128

QueueName

キュー名

-qlx

RequestName

リクエスト名-N無し

RequestRerun

リクエストのリランの有無-r y / -r n

false

UseIdentityFile

SSH をパスワードではなく鍵ファイルでログインするオプション 。 true に し た 場 合 はIndentityFile にファイルパスを指定します。

―

false

AutoAttachFiles

MATLAB Parallel Server のクラスターに依存関係のあるファイルを自動的に送信するかの設定

―

true

AttachedFiles

MATLAB Parallel Server のクラスターに送信するファイルまたはディレクトリ

―無し

AdditionalPaths

ワーカーの検索パスに追加する
フォルダ

―

無し

NumWorkerRange

ジョブを実行するワーカー数の範囲―[1 inf]CaptureDiary

コマンドウィンドウへ出力を返す設定

―

false

EnvironmentVariables

MATLAB クライアントから MATLAB
Parallel Server のワーカーにコピーする環境変数―

無し

また、MATLAB Parallel Server を AOBA-B で実行する際の、その他の NQSV オプションは以下のとおりです。

表 5
NQSV のオプション-T intmpi

その他の NQSV のオプション
備考
複数ノードをまたぐ処理の場合、MPI の実行環境をIntel MPI に指定しています。

スーパーコンピュータ AOBA での MATLAB の並列処理― 43 ―

3.2.6 MATLAB の並列処理の設定の変更
次に、MATLAB の並列処理の設定変更を行います。MATLAB のメニュー画面から「基本設定」をクリックします。

図 6

MATLAB の「基本設定」をクリック

複数ノードで並列処理できるようにするため、「Parallel Computing Toolbox」のメニューで推奨される並列プールでのワーカー数を、デフォルトの 12 から、200 などの大きな値に変更します。

図 7

推奨される並列プールでのワーカー数を変更

― 44 ―

4.

SENAC Vol. 54, No. （2 2021. 4）

MATLAB での動作確認

4.1 クラスタープロファイルの検証
設定したクラスタープロファイルの検証を行います。AOBA-B のクラスタープロファイルを選択していることを確認し、検証項目 5 つ目の「並列プールテスト」だけチェックを外します。そして右下の「検証」ボタンをクリックして検証を実行します。

図 8クラスタープロファイルの検証を実行「プールジョブテスト」までの 4 つの検証をパスすれば問題ありません。

4.2 オフロードジョブのテスト
次に batch でのオフロード処理をテストします。parallelServerSample.m というファイルを作り、以下のコードを記載します。
parallelServerSample.mn = 200;
A = 500;
a = zeros(n);parfor i = 1:na(i) = max(abs(eig(rand(A))));
endスーパーコンピュータ AOBA での MATLAB の並列処理― 45 ―

MATLAB のコマンドウィンドウから、batch コマンドを使用してジョブを実行します。Pool オプ
ションに使用するワーカー数から 1 を引いた値を入れます。
>> job1 = batch('parallelServerSample', 'Pool', 3,'AutoAddClientPath',false);

ジョブ投入後、MATLAB の「並列」メニューから「ジョブの監視」をクリックします。

図 9 ジョブの監視をクリック
クラスターサーバに投入したジョブの一覧が表示されます。処理が進むに連れ「状態」欄が「queued」、「running」、「finished」と遷移します。

図 10

ジョブの一覧とステータス表示

ステータスが finished になったら、ジョブモニターで右クリック「変数の読み込み」をクリックすることでクラスターサーバに投げた処理結果を取得できます。または、以下のコマンドで処― 46 ―

SENAC Vol. 54, No. （2 2021. 4）

理結果を取得することもできます。
>> wait(job1);>> fetchOutputs(job1);

5.

参考情報

5.1 用語の説明
このドキュメントの用語の意味は以下のとおりです。
表 6

用語集

用語意味

ワーカー

MATLAB Parallel Server の並列処理を実行する MATLAB プロセスのこと。

インタラクティブジョブ

MATLAB の並列処理のうち、MATLAB クライアントとワーカーとの間に通信を張って処理を行う並列処理のこと。処理中は MATLAB クライアントを起動したままにする必要があります。

オフロードジョブ

MATLAB の並列処理のうち、MATLAB クライアントとワーカーとの間で通信を張らずに処理を行う並列処理のこと。ジョブ投入後はMATLAB クライアントを停止させてもワーカー内で処理が継続されます。

5.2 Web ページ
参考になる Web ページのリンクは以下のとおりです。
MATLAB および Simulink による並列計算
https://jp.mathworks.com/solutions/parallel-computing.html

Parallel Computing Toolbox について
https://jp.mathworks.com/products/parallel-computing.html



MATLAB Parallel Server について
https://jp.mathworks.com/products/matlab-parallel-server.html

Parallel Computing Toolbox 入門
https://jp.mathworks.com/help/parallel-computing/getting-started-with-parallel-com
puting-toolbox.html

スーパーコンピュータ AOBA での MATLAB の並列処理― 47 ―

MATLAB のバッチ処理のサンプル
https://jp.mathworks.com/help/parallel-computing/batch-processing.html

5.3 問い合わせ窓口
AOBA-B での MATLAB および MATLAB Parallel Server についての問い合わせ先は以下のとおりです。
MathWorks サポート窓口
https://jp.mathworks.com/support/contact_us.html



コミュニティ Q&A サイト
https://jp.mathworks.com/matlabcentral/answers/