Q. LSFによる並列プログラム実行において、ジョブを投入するノードの指定は可能ですか。
複数台の8core計算機からなるクラスタ環境において、8coreを利用する並列計算をジョブスケジューラ経由で投入したところ、2台の計算機から各4coreづつ使って並列計算が行われていることがあるようです。しかし本当は、複数のnodeにまたがらず、1台のnodeの内だけで計算機を実行したいのです。どのようにジョブ投入すればよいのでしょうか?
A. LSFでは計算リソースを詳細に指定することができます。
この現象が発生するメカニズムは、2nodeの8core機で構成されたシステムにおいて、各nodeで既に4個づつのプロセスが実行されているとすると、次に8並列ジョブをLSF経由で投入した場合、LSFは2nodeに4プロセスづつ割り振ります。しかしこの割り振りでは、OpenMPプログラムやネットワークを介した並列計算を行う場合には不都合なこともあります。そこで確実に1nodeだけで実行させるには、LSFにてジョブ投入する際にリソース指定によるジョブ実行の制御を行います。
LSFによりリソース指定を行いジョブを実行させる方法。
8並列ジョブを必ず1台の8coreサーバーにて実行させる場合のジョブ投入例
% bsub -o %J.out -n 8 -R "span[hosts=1]" 'impijob ./a.out < input.file >& output.file'
また、LSFでは各nodeごとの実行プロセス数を少なくして並列計算ジョブを実行させることも可能です。これはノード内での並列処理で並列度を上げると並列性能が飽和するような場合に効果的な投入方法です。
32並列ジョブを4nodeではなく、8nodeにて1nodeあたり4プロセスづつ実行させる場合のジョブ投入例
% bsub -o %J.out -n 8 -R "span[ptile=4]" 'impijob ./a.out < input.file >& output.file'
※ なお、ノード内で動作する各CPUコアに対して割り当てられるジョブの最適な割当はOSが自動的に最適化しています。基本的には各CPUに負荷が均等に分散されるような割当となっています。
Q.LSFにて実行中のジョブの標準出力を見たい場合にはどうすればよいか。
A.bpeekコマンドをもちいることで表示させることができます。
下記コマンドを実行してください。
% bpeek <Job ID>
上記コマンド実行後に、標準出力を表示させることができます。
大量に表示される場合には下記のように“|(パイプ)”を使うことでスクロール表示できます。
% bpeek <Job ID> | less