長時間のシミュレーションの管理

分子シミュレーションは、単一のUNIXコマンドラインプロセスの寿命を超えることがよくあります。シミュレーションを単一の実行のように停止および再開できることが望ましいです。:ref:`gmx mdrun が停止すると、シミュレーションを中断したかのように正確に再開できるチェックポイントファイルが作成されます。これを行うには、チェックポイントは位置と速度のフル精度版、および外部熱源へのカップリングを実装するアルゴリズムなど、再開に必要な状態情報を含んでいます。例えば、:ref:`gro ファイルを使用して再開を試すことができますが、:ref:`gro ファイルは精度が大幅に低いため、カップリングアルゴリズムの状態が保持されないため、通常のMDステップよりも連続性が低くなります。

このようなチェックポイントファイルは、gmx mdrun`によって実行中に定期的に書き込まれます。間隔は、`gmx mdrun`に渡される-cpt`オプションで指定します。`gmx mdrun`が新しいチェックポイントファイルを書き込むたびに、まず古いファイルを「_prev」という接尾辞で名前を変更します。これにより、新しいチェックポイントファイルが書き込まれる際に問題が発生した場合でも、最近の進行状況のみが失われるようになります。

gmx mdrun は、以下の方法で停止できます:

  • シミュレーションのステップ数:nsteps が終了する可能性があります。

  • ユーザーは終了信号(例:ターミナルでCtrl-C)を送信します。

  • ジョブスケジューラは、時間が経過したときに終了信号を送信します。

  • gmx mdrun が、-maxh で指定された長さが経過したことを検出した場合(このオプションは、ジョブスケジューラとの連携に役立ちますが、ジョブが一時停止される可能性がある場合は問題になることがあります)。

  • ある種の壊滅的な障害、たとえば電力の喪失、またはディスクの容量不足、またはネットワークの故障など。

シミュレーションの再起動時にチェックポイントファイルを再利用するには、次のようなコマンドラインを使用します。

gmx mdrun -cpi state

これにより、mdrun はデフォルトで「state.cpt」という名前のチェックポイントファイルを使用するように指示されます。 -cpo オプションを使用して、出力チェックポイントファイルに別の名前を指定することもできますが、その場合は後でそのファイルを使用する際に、その名前を -cpi オプションに渡す必要があります。 チェックポイントファイルの内容は、gmx チェック および gmx ダンプ を使用して確認できます。

出力ファイルへの追加

デフォルトでは、gmx mdrun は既存の出力ファイルに追記します。 以前の実行が正常に終了した場合、ログファイルの末尾にあるパフォーマンスデータは削除され、実行コンテキストに関する新しい情報が書き込まれ、シミュレーションは継続されます。 逆に、mdrun はすべての出力ファイルを、最後に書き込まれたチェックポイントファイルの時間まで切り捨て、そこから再開し、シミュレーションが正常に終了したかのように動作します。

-noappend オプションを使用することで、出力ファイルを追加しないようにすることも可能です。これにより、mdrun は各出力を個別のファイルに書き込み、ファイル名には ".partXXXX" という文字列が含まれるようにします。これにより、どのシミュレーションパートが含まれているかを識別できます。この番号は 0 から始まり、シミュレーションが再起動されるたびに増加しますが、各パートのシミュレーションステップ数は反映されません。:mdp:simulation-part オプションを使用して、この番号を手動で設定できます。これは、ファイルシステムの障害やユーザーエラーなどによってデータが失われた場合に、:ref:gmx grompp で役立ちます。

追加は、mdrun`が作成した後、出力ファイルが変更または削除された場合、機能しません。これは、チェックポイントファイルが、書き込む前に各ファイルのチェックサムを保持し、検証するためです。この場合、ファイルは復元するか、チェックポイントファイルが期待する名前で名前を変更するか、または `-noappend`` オプションを使用して続行する必要があります。元の実行で -deffnm を使用した場合で、追加を希望する場合は、続行も -deffnm を使用する必要があります。

ファイルのバックアップ

シミュレーションファイルのバックアップを定期的に行うようにしてください。クラスタ上のネットワークファイルシステムは、より保守的な方法で構成することも、より自由な方法で構成することもできますが、これにより`gmx mdrun`が、実際にはメモリ上に存在し、停電やディスクの容量不足や故障によって失われる可能性のあるチェックポイントファイルがディスクに書き込まれたと誤って判断する可能性があります。UNIXのツールである`rsync`を使用して、シミュレーション中に安全にコピーできる、リモートストレージへのシミュレーション出力の定期的なコピーを行うことができます。クラスタに送信されたジョブの各部分の最終チェックポイントファイルのコピーを保持することは、ファイルシステムが信頼できない場合に役立ちます。

.tpr ファイルの拡張

シミュレーション(:ref:`tpr`ファイルで記述されたもの)が完了し、さらに実行する必要がある場合は、:ref:`gmx convert-tpr`ツールを使用してシミュレーションを延長します。たとえば、次のように実行します。

gmx convert-tpr -s previous.tpr -extend timetoextendby -o next.tpr
gmx mdrun -s next.tpr -cpi state.cpt

また、時間を延長するには、-until および -nsteps オプションを使用できます。ただし、元の mdp ファイルが速度を生成したとしても、これは gmx grompp 内の一時的な操作であり、他のツールによって再度実行されることはありません。

再起動時にmdpオプションを変更する

もし、シミュレーションの設定を変更したい場合は、長さ以外の設定は、:ref:`mdp`ファイルまたはトポロジーで変更してください。

gmx grompp -f possibly-changed.mdp -p possibly-changed.top -c original.gro -t state.cpt -o new.tpr
gmx mdrun -s new.tpr -cpi state.cpt

gmx grompp に、チェックポイントファイル内のフル精度座標と速度を新しい tpr ファイルにコピーするように指示します。 tinitinit-stepnsteps および simulation-part の設定について検討する必要があります。 一般的に、gen-vel を使用して速度を再生成しないでください。 また、一般的に continuation を選択して、最初の積分ステップの前に制約が再適用されないようにしてください。

チェックポイントファイルなしで再起動

以前はチェックポイントファイルなしでシミュレーションを継続することが可能でした。しかし、この方法は信頼性が低かったり、非現実的な結果につながる可能性があるため、現在はチェックポイントからの再起動のみが許可されています。

継続は正確ですか?

もし、無限の精度を持つコンピュータをお持ちであった場合、または時間分割された運動方程式を手動で組み込んだ場合、正確な継続計算は同じ結果をもたらします。しかし、実用的なコンピュータは精度が限られており、MDはカオスであるため、わずかな違いが起これば軌跡は非常に急速に分岐します。このような軌跡はすべて同等に有効ですが、最終的には非常に異なります。チェックポイントファイルを使用して継続計算を行う場合(同じコードを同じコンパイラでコンパイルし、同じコンピュータアーキテクチャ上で同じ数のプロセッサを使用し、GPUを使用しない場合 - 詳細は次のセクションを参照)、二進数的に同じ結果が得られます。ただし、実際の負荷は、観察された実行時間に基づいてハードウェアに均等に分散されます。このような軌跡は、原理的には再現できません。特に、複数の部分で実行された軌跡は、単一の部分で実行された同等の軌跡とは異なり、どちらも優れているとは言えません。

再現性

以下の要素はシミュレーションの再現性に影響を与え、したがってその結果に影響します。

  • 精度(単精度/倍精度)で、倍精度が「より」高い再現性を実現します。

  • コア数については、力の計算順序が異なるためです。例えば、(a+b)+c は、浮動小数点演算では a+(b+c) と必ずしも同じ結果になりません。

  • プロセッサの種類。同じプロセッサファミリー内でも、わずかな違いが存在することがあります。

  • コンパイル時の最適化レベル。

  • 実行時の最適化: 例えば、高速フーリエ変換によく使われるFFTWライブラリは、起動時にどのバージョンのアルゴリズムが最も高速かを判断し、そのバージョンを使用します。ただし、速度の推定値は決定的なものではないため、実行ごとに結果が異なる場合があります。

  • 例として、速度を生成するためのシードとして、ランダムな数を使用する。 (Gromacsで、事前処理段階で使用)

  • コード内に初期化されていない変数 (ただし、そのような変数 seharusnya tidak ada)

  • 異なるバージョンの共有ライブラリ(例:FFT用)への動的リンク

  • 動的な負荷分散により、粒子が経過した実時間に基づいてプロセッサに再分配されるため、(a+b)+c != a+(b+c) のような問題が発生する可能性があります。

  • PMEのみを使用するランクの数(並列PMEシミュレーション用)

  • MPI の削減演算は、通常、演算の順序を保証しません。したがって、浮動小数点演算における結合則の欠如は、削減の結果が実際に選択された順序に依存することを示します。

  • GPUでは、例えば非結合相互作用の力を減らす場合、その計算順序は非決定的なため、どのような高速な実装でも、その結果は再現できません。

重要な点は、シミュレーションが完全に再現可能でなくても問題があるかどうかです。答えは「はい」と「いいえ」です。再現性は、科学全般における重要な要素であり、したがって重要です。中央極限定理(<https://en.wikipedia.org/wiki/Central_limit_theorem>)によれば、無限に長いシミュレーションの場合、すべての観測量はその平衡値に収束します。|Gromacs|を用いた分子シミュレーションは、この定理に従っており、したがって、例えば、システムのエネルギーは有限の値に収束し、水分子の拡散定数は有限の値に収束し、などとなります。つまり、シミュレーションから得たい重要な観測値はすべて再現可能になります。ただし、個々の軌跡は再現できません。

ただし、軌跡を再現可能にすることも、いくつかの状況で役立ちます。例えば、開発者がデバッグ作業を行う場合や、特定の軌跡内で稀なイベントが発生した場合に、そのイベントが発生した時点をマニュアルで保存しておき、異なる条件でシミュレーションを再開できるようにする場合などです。例えば、より頻繁に出力を保存することができます。

この再現可能な軌跡を得るためには、上記のリストを確認し、軌跡に影響を与える可能性のある要因を取り除くことが重要です。さらに、以下の方法を使用してください。

gmx mdrun -reprod

これにより、再現性のないすべての要因を取り除くことができます。つまり、同じ実行ファイル + 同じハードウェア + 同じ共有ライブラリ + 同じ実行入力ファイル + 同じコマンドラインパラメータを使用すると、再現性のある結果が得られます。