はじめに
Pythonの並列計算ライブラリであるjoblibを利用し、Matlantis上で並列計算をする方法を記します。
以下のプログラムでは、複数の入力パラメータに対して並列計算を実行しています。
注意点
Matlantis上で並列計算を行う場合、backend="threading"の使用を推奨します。
これは、バックグラウンドジョブを途中停止した際、デフォルトのlokyはでは見かけ上は計算が止まるものの、実際には計算が止まらずトークンを消費し続ける現象が発生するためです。
ソースコード
from joblib import delayed, Parallel
# settings
n_jobs = 10
verbose = 10
backend = "threading" # バックグラウンドジョブでの不具合防止のため"threading"を推奨します。
parameters_for_function = [300, 400, 500, 600]
def function(input_key):
# 実行したいコードをここに記述します。
# 例: 入力データの読み込み、シミュレーションパラメータの設定、シミュレーションの実行、データの保存など。
...
# 関数を遅延実行できるよう変換
delayed_function = delayed(function)
# 並列計算の設定
parallel_calculation = Parallel(n_jobs=n_jobs, verbose=verbose, backend=backend)
# 実行
results = parallel_calculation(delayed_function(params) for params in parameters_for_function)
プログラムの概要
n_jobs: 並列計算を行うプロセス数を設定します。サンプルプログラムでは10並列を指定しています。
verbose: 並列計算の進行状況を表示するレベルを設定します。(後述)
parameters_for_function: 並列計算したい関数に渡すパラメータのリストです。計算したいインプットファイルのリストや、シミュレーション温度のリストを記入してください。
関数functionは、実際に行いたい計算や処理を記述する部分です。
各位にて計算されたい内容をご記入ください。関数に戻り値がある場合、最終行のresultsに格納されます。
備考①:verboseの設定値について
joblibのParallelで使用するverboseパラメータは、並列計算の進行状況をどの程度詳細に表示するかを設定します。verboseの値が大きいほど、詳細な進捗情報が表示されます。
以下に、verboseの設定値とその出力内容について簡単に説明します。
より詳細に確認されたい場合は公式HPをご確認ください。
- verbose=0: 進捗情報を全く表示しません。出力欄を肥大化させたくない場合に使用します。
- verbose=10: タスクの開始、終了の情報が表示されます。定期的に進捗を確認される場合はこちらをご利用ください。
備考②:遅延実行について
遅延実行は、関数呼び出しをその場で実行するのではなく、実行する準備だけをしておく仕組みです。この手法を使うことで、複数の計算を並列で順番に実行することができます。
joblibのdelayed関数を使うと、関数呼び出しを遅延させることができます。
遅延された関数は、実際の並列計算が行われる時点まで実行が保留されます。