大量のデータを処理する方法は?


14

プラズマダイナミクスのシミュレーションでは、多くの場合、大量の情報が生成されます。シミュレーション中に、少なくとも10個のプロパティについて、(8192x1024x1024x1500)と同じ大きさのグリッド(x、y、z、t)にさまざまな物理的プロパティを記録します。この情報は、シミュレーションの完了後に処理されます。それで私たち

  1. プロパティのムービーを作成し、
  2. フーリエ解析を実行し、
  3. 平均プロパティを計算します。

できるだけ多くの情報をこのように単純にダンプすることは、小規模なシステムを調査したときにうまく機能しました。これにより、結果とやり取りし、後でそれをどうするかを決定する柔軟性が得られました。また、単純にシミュレーションを実行するために計算リソース(CPU時間)を割り当てることもできました。

フーリエ解析をオンザフライで実行し、長さスケールの選択範囲のみをフィルタリングするプロセスを開始しました。数値的な理由から、実際に必要な長さよりも小さい長さスケールを解決する必要がある場合があります。そのような場合、このフィルターは非常に役立ちます。また、パラレルI / Oオプション、特にパラレルHDF5など、さまざまなパラレルIOライブラリも検討しています

データ処理の効率を最大化するための戦略は何ですか?

その場ですべての分析(映画やプロットなどの後処理を含まない)を実行することに利点はありますか?

私はこの問題が他の研究分野で起こることを想像できます。たとえば、長い間進化する必要がある分子動力学シミュレーションがあるかもしれませんが、興味深いことが起こっている短い瞬間に興味があります。またはCFDでは、初期の開発は遅いかもしれませんが、乱流が始まると、ダイナミクスを監視するためにより高い時間分解能が必要になる場合があります。

シミュレーションから洗練された結果収集の自由に利用可能な例はありますか?


これは広範な質問のように思えるかもしれません。このように感じたら、私がより具体的になる方法について提案してください。
ヤン

1
また、いくつかの実験グループがこの問題をどのように扱っているかも見てください。高エネルギー物理学(al CERN)および天体物理学では、さらに大規模なデータを格納する必要があります(または、ストレージに書き込むよりも高速でデータが入力されるため、格納する前にフィルタリングすることもできます)。
ブライアンディグス

回答:


10

ターゲットに合わせて出力を分割する必要があると思います。

  1. プロパティのムービーの場合、おそらく完全な空間解像度とすべての変数は必要ありません。表示するものを慎重に選択し、表示する映画の最終的な解像度について考えてください。おそらく80億ピクセルではないでしょう。
  2. フーリエ解析(またはPODなど)の場合、それらが一時的なものであれば、おそらくドメインで賢明に選択された数百のポイントをサンプリングできます。空間的なものであれば、おそらく1500個ではなく、いくつかのスナップショットのみが必要です。また、すべてのプロパティのスナップショットは必要ありません。
  3. 時間平均については、同じフィールドに追加し続けることができ、時間ディメンションを気にする必要はありませんか?ただし、時間の経過に伴うその進化を確認する場合は特に、空間平均は苦痛を伴います。しかし、データをダンプする前のオンライン処理が増えると、データのサイズが小さくなる可能性があります...

これは、大きな汎用出力の代わりに専用出力を使用するためのかなりの作業を意味しますが、これはコストとサイズを抑えるのに役立ちます。お役に立てれば !

追加したいことがもう1つあります。一般に、データの完全な解像度は再起動ファイル、つまりシミュレーションを再起動するファイルにのみ必要です。与えられたシミュレーションにはこれらの多くは必要ありません(100としましょう。2回の再起動の間に何かが発生すると、計算の最大1%を失うことになります)。映画。そして、たとえば解像度のちょうど64分の1でそれを行うことができます(各方向に4ポイントごとに1つ)。


なぜ空間平均は苦痛なのですか?オンザフライで実行し、結果を書き込みます。
デビッドケッチャソン

@DavidKetcheson空間平均は、多くの通信を必要とし、ドメインのトポロジの影響を受ける可能性があるため、痛みを伴いますか?参照フレームと整列した純粋な直交グリッドがあればそれほど悪くはありませんが、計算とMPI_REDUCEのスマートな組み合わせを行う必要があります。そのサイズのグリッドでは、ALL_REDUCEを1だけで実行できないためです。私が思うだろうプロセッサ...
FrenchKheldar

1
さて、あなたのコメントを理解しました。しかし、通常、通信はそれほど悪くはありません。各プロセスをローカルで平均してから、プロセスごとに1つのフロートを減らすことができるからです。私の経験では(65KコアBlueGene / Pで)、特にI / Oコストと比較すると、このコストはささいなものです。実際、すべてのタイムステップで65Kコア全体に対してALL_REDUCEを実行し、非常に高速です。
デビッドケッチャソン

@DavidKetcheson実際、私もあなたの主張を誤解していると思うし、データ削減のコストを過大評価していた。私が念頭に置いていたのは、計算グリッドと同じグリッド上にある場合もそうでない場合もある完全な2Dデータを保存/出力する必要がある、スパン/方位角平均のようなものです。しかし、あなたは正しい、MPI_ALL_REDUCEの実際のコスト自体は問題ではありません。
FrenchKheldar

8

この芸術の現在の巨匠は、大粒子物理学実験だと思います(私は古く、シカゴ大学で働いているため、CDFD0に最も精通しています)。1年にペタバイト(またはそれ以上)を破棄するハードウェアトリガーがあります。ただし、これは量子化/離散化の全体の主題、または「必要のないものだけを捨てる」ことです。一般的に賢明な答えができるかどうかはわかりません。「次の方法でPDEシミュレーションを離散化し、効率的にダウンサンプリングしたい」などのように問題を絞り込む方が良いでしょう。


3

Peter LePageは、適切な短距離解析ソリューションを見つけて適用することで、実行不可能なほど大きな格子グリッドを削減できる方法を提案したことで、格子QCDサークルでかなり有名です。

これは、適切に選択された一連のスプラインが台形法よりも少ないノットで正確に統合できることに気付くのとほぼ同じです(ただし、場合によっては、一度に4次元でそれを利用できます)。

その結果、ノードごとの計算量を増やすためにデータセットの生のサイズと引き換えになりますが、問題の高次元性のために最終的に先に出ます。

私はまともなヒントを与えるのに十分なほどよく知っているテーマではありませんが、過去のいくつかの分野で機能しました。


3

質問は少し広いので、そのような場合に可能なテクニックを示唆する、あいまいな答えを提供します。

1)オンザフライ処理。これはすでに作業中です。オンザフライ処理を行いながらデータ生成ステップから切り離す1つの方法は、常に最後のNステップを含む循環出力ファイルを生成し、別のプロセスで分析を実行することです。明らかに、競合状態を防ぐために2つを同期する必要があります。

2)保存されたデータをより慎重に選択する。残念ながら、これは非常に状況固有です。

3)データを保存する前に圧縮するか、HDF5などの統合圧縮オプションを備えたストレージライブラリを使用します。

4)完全な出力ではなく、定期的なチェックポイントを保存します。Nステップごとに完全なチェックポイント、つまりそこからシミュレーションを再開するのに十分なデータを保存する場合、必要に応じて、欠落したデータを高度に並行して再構築できます。モンテカルロ法の場合、チェックポイントには乱数ジェネレーターの状態を含める必要があることに注意してください。実際には、これはアプリケーション固有の高度な圧縮手法と考えることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.