(実験的機能)クラスタ計算の実行手順
このページでは、 pyfemtet.opt を用いた最適化プログラムを 複数台の PC を用いて並列計算する際の手順を示します。
注釈
ここでは、 プログラムを呼び出す手元マシンを「手元 PC」、計算を実行するマシンを「計算 PC」と呼びます。 計算 PC は複数あっても構いません。手元マシンが計算マシンであっても構いません。 計算 PC 1 台ごとに「計算 PC のセットアップ」および「Worker の起動」を行ってください。
Tip
pyfemtet の並列計算は dask.distributed に依存しています。 また本ドキュメントは dask version 2023.12.1 時点での挙動を説明しています。 詳細、および最新の CLI コマンド使用方法は dask documentation をご覧ください。
プログラムの作成
最適化の実行手順 などを参考に、最適化を行うプログラムを作成してください。
計算 PC のセットアップ
計算 PC に Femtet をインストールしてください。
計算 PC に手元 PC と同じバージョンの Python をインストールしてください。
計算 PC に手元 PC と同じバージョンの pyfemtet および依存ライブラリをインストールしてください。
依存ライブラリのバージョンを指定してインストールするには、下記手順が便利です。コマンドプロンプトから下記手順を実行してください。 # 以降はコメントなので、実行しないでください。
# local PC py -m pip freeze > requirements.txt
ここで生成された requirements.txt というファイルを計算 PC に転送し、 コマンドプロンプトで下記コマンドを実行します。
# calculation PC py -m pip install -r <path/to/requirements.txt>
makepy コマンドを実行し、Femtet のマクロ定数の設定を行ってください。
# calculation PC py -m win32com.client.makepy FemtetMacro
Scheduler(複数の PC のプロセスを管理するプロセス)の起動
手元 PC で下記コマンドを実行してください。
# local PC dask scheduler
ここで表示される tcp://~~~:~~~ という数字を記録してください。
注釈
ファイアウォール等の制約により通信できるポートが決まっている場合は、dask scheduler --port your_portコマンドを使用してください(your_port はポート番号に置き換えてください)。
Worker(計算を実行するプロセス)の起動
計算 PC で下記コマンドを実行してください。
# calculation PC dask worker tcp://~~~:~~~ --nthreads 1 --nworkers -1
scheduler, worker 双方で画面が更新され、
Starting established connectionという 文字が表示されれば通信が成功しています。注釈
通信できない状態で一定時間が経過すると、Worker 側でタイムアウトした旨のメッセージが表示されます。
プログラムの編集と実行
プログラムに Scheduler のアドレスを記載し、プログラム実行時に Scheduler に計算タスクが渡されるようにします。
FEMOpt コンストラクタの引数
scheduler_addressにtcp://~~~:~~~を指定してください。from pyfemtet.opt import FEMOpt ... # Define objectives, constraints and so on. if __name__ == '__main__': femopt = FEMOpt(scheduler_address='tcp://~~~:~~~') ... # Setup optimization problem. femopt.optimize() # Connect cluster and start optimization femopt.terminate_all() # terminate Shceduler and Workers started in procedure 3 and 4.
警告
エラー等でプログラムが異常終了した場合、再試行の前に Scheduler, Worker を一度終了し、 もう一度手順 3, 4 を実行することをお勧めします。