MPIプログラムエラーのための機械学習ソリューション
新しい方法は、機械学習を使ってMPIプログラムのエラーを効果的に検出するよ。
― 1 分で読む
目次
並列で動くMPIプログラムのミスを見つけるのは難しいよね。プログラムをチェックするためのツールはいっぱいあるけど、デバッグするのはやっぱり大変。そこで、私たちは機械学習とグラフを使った新しい方法を提案するよ。特別なコード形式であるLLVM中間表現(IR)をチェックして、そのコードが正しいか既知のエラーがあるかを見てくれるモデルを2つ作ったんだ。
MBIとMPI-CorrBenchという2つのテストセットを使ってモデルをテストしたよ。同じテストでトレーニングとチェックをしたら、92%の確率でエラーを正確に見つけられたんだ。他のテストセットでも80%以上の精度が出たし、いろんなMPIエラーの関係を見たり、トレーニングしたことないエラーの予測もできるか調べたりもしたんだ。
高性能コンピューティングの重要性
高性能コンピューティング(HPC)は、医療、材料研究、安全保障、環境研究など色んな分野で重要なんだ。最近のスパコンは複雑なタスクを処理できるけど、ハードウェアの違いや新しいアルゴリズムのせいで挑戦が多いんだ。この複雑さがあるから、HPCアプリケーションの問題を見つけて直す方法が必要なんだよ。デバッグや検証のためのツールはいろいろあるけど、並列プログラムがすべての状況で正しく動くかを保証するのは難しいんだ。
MPIプログラミングモデル
MPIは高性能な並列プログラムを書くための人気の方法だ。MPIプログラムでは、各プロセスがそれぞれ自分のコードの部分を実行して、メッセージを送ることで他のプロセスとコミュニケーションを取るんだ。データの交換方法がいろいろあって、それがMPIプログラムにさまざまなエラーを引き起こす原因になることもあるよ。
この仕事では、こうしたエラーを見つけるためのAIベースの新しいアプローチを提案するよ。私たちの方法は、プログラムの構造を学んで、エラーを効果的に特定するために機械学習を使うんだ。
この仕事の貢献
この仕事は以下の点で貢献しているよ:
- MPIプログラムのエラー検出のための機械学習手法を開発した。これらの手法は既存の検証ツールと競争できるし、新しいケースで効果的に働くためにはエラーがラベル付けされたデータセットだけが必要なんだ。
- MBIとMPI-CorrBenchという2つのベンチマークセットを使って、私たちの手法がどれだけエラーを見つけられるかを評価した。
- さまざまなテストを通じて、私たちのモデルがどれだけ一般化できるか、特定のエラーなしで訓練してみることで確認した。
関連研究
MPI検証手法
MPIプログラムを検証するためのアプローチには、静的解析、シンボリック実行、動的検証などがある。でもそれぞれに限界があるんだ。特定のタイプのエラーだけをチェックするツールもあれば、特定のMPI実装に焦点を当てているものもある。たとえば、静的解析ツールの中には、プログラムを実行せずにエラーを探すけど、誤警報を出すこともある。動的検証手法は実行中にエラーをチェックするけど、いくつかの問題を見逃すことがあるんだ。
私たちの方法は、プログラミング言語やMPIのバージョンに関係なく、ソースコードからエラーパターンを学ぶという点で差別化されているよ。
バグ検出のための機械学習
最近の機械学習(ML)の進展は、バグを検出したりコードをリファクタリングするための新しい技術を生んだんだ。これらのMLモデルは、人間が複雑なルールを書かなくても、問題を見つけるのに効果的なんだ。私たちのアプローチは、深層学習モデルを使ってソースコードにおけるパターンを利用することにあたるよ。LLVM IRみたいなコンパイラから得られる中間表現を利用して、私たちのモデルにもっと多くの洞察を提供しているんだ。
今のところ、機械学習の応用はMPIエラー検出に重点を置いていないから、私たちの仕事はそのギャップを埋めることを目指してるよ。
データセットの構築
MBIとMPI-CorrBenchという2つのベンチマークスイートを使ってデータセットを作ったよ。MBIには約2,000のCで書かれたMPIプログラムが含まれていて、9種類のエラータイプを強調しているんだ。それぞれのエラーコードには、エラーの説明、実行方法、使われているMPIの機能が書かれたヘッダーが付いてる。一方、MPI-CorrBenchには約400の小さなCプログラムがあり、異なる分類がされている。これらのベンチマークは、私たちのモデルをテストし評価するために重要なんだ。
機械学習手法
MPIアプリケーションが正しいかどうかを特定するために、私たちのモデルはラベル付きサンプルのあるデータセットが必要なんだ。LLVM IRをモデルに使うことにした理由は、深層学習タスクに良い表現を提供するからなんだ。私たちのモデルには主に2つの戦略を使ったよ:
IR2vec埋め込み
最初の戦略は、LLVM IRコードをIR2vecという方法を使ってベクトル埋め込みに変換することなんだ。この変換は、似たプログラムを連続空間の近くに配置することで、モデルに助けを与えるんだ。そして、これらのベクトルを機械学習分類器の入力特徴として使って、コードが正しいかエラーがあるかを判定するよ。
グラフニューラルネットワーク(GNN)埋め込み
2つ目の戦略は、プログラムをグラフとして表現し、グラフニューラルネットワーク(GNN)を使ってエラーを検出することなんだ。LLVM IRからデータフローと制御フローのグラフを構築する表現を使ったよ。GNNはグラフの中の複雑な関係を処理することができるから、プログラムの異なる部分間のつながりを効果的にモデル化できるよ。
実験結果
私たちは、モデルのパフォーマンスを測るためにいくつかの評価を実施したよ。3つのシナリオでトレーニングとバリデーションテストを行った:Intra、Mix、Cross。
Intraモデリング
Intraシナリオでは、MBIまたはMPI-CorrBenchを使ってモデルをトレーニングしてバリデートした。良い結果が出て、私たちのモデルがコードが正しいかどうかを効果的に検出できることがわかったよ。パラメータを調整したりモデルのさまざまな側面を探ったりして、全体的な精度を向上させたんだ。
Mixモデリング
MBIとMPI-CorrBenchのデータセットを組み合わせてモデルをテストしたよ。このテストで、モデルがいろんな指標でパフォーマンスを維持できることが確認できたし、Intraシナリオと似たような良い結果を出せたよ。
Crossモデリング
Crossシナリオでは、1つのベンチマークでモデルをトレーニングして、別のベンチマークでバリデーションを行った。これにより、モデルが見たことのないデータに対処できるか、一般化できるかを確認したんだ。GNNモデルは同じレベルの一般化を示すのに苦労したけど、IR2vecは良いパフォーマンスを維持して、両方のデータセットで強い精度を保ったよ。
既存研究との比較
MPIプログラムを検証する既存のツールと比較したら、私たちのモデルは競争力のあるパフォーマンスを示したよ。私たちの手法は、精度や信頼性の面で既存のベストツールに対して、上回ったり対等だったりした。この仕事は、私たちの機械学習アプローチが伝統的な専門ツールと効果的に競争できることを示してるし、手動の努力も少なくて済むんだ。
今後の方向性
この研究を進める中で、いくつかの道を考えているんだ。もっと大きなデータセットにモデルを適用したり、GitHubのリポジトリなどリアルなシナリオからデータを集める方法を探ったりしてるんだ。目標は、エラーがあるかどうかだけじゃなく、コードのどこにエラーがあるのかを予測できるモデルを訓練することなんだ。
さらに、コーディングプロセス中に開発者に迅速なフィードバックを提供できるように、私たちのモデルを自動ツールチェインに統合することも考えてる。この分野では、機械学習がMPIアプリケーションのバグを見つけて修正するのに大きな役割を果たす可能性があると思ってるよ。
結論
まとめると、この研究は機械学習技術を使ってMPIプログラムのエラーを検出する新しいアプローチを提案しているよ。コードを分析し、正しさをチェックするために埋め込みや深層学習の方法を利用したモデルを開発したんだ。私たちのモデルは、既存のツールと比較しても印象的な結果を示していて、並列プログラミングエラーの検証における機械学習の可能性を強調してるんだ。これからもこのモデルを強化して実用的な応用に活かす方法を探求するのが楽しみなんだ。
タイトル: MPI Errors Detection using GNN Embedding and Vector Embedding over LLVM IR
概要: Identifying errors in parallel MPI programs is a challenging task. Despite the growing number of verification tools, debugging parallel programs remains a significant challenge. This paper is the first to utilize embedding and deep learning graph neural networks (GNNs) to tackle the issue of identifying bugs in MPI programs. Specifically, we have designed and developed two models that can determine, from a code's LLVM Intermediate Representation (IR), whether the code is correct or contains a known MPI error. We tested our models using two dedicated MPI benchmark suites for verification: MBI and MPI-CorrBench. By training and validating our models on the same benchmark suite, we achieved a prediction accuracy of 92% in detecting error types. Additionally, we trained and evaluated our models on distinct benchmark suites (e.g., transitioning from MBI to MPI-CorrBench) and achieved a promising accuracy of over 80%. Finally, we investigated the interaction between different MPI errors and quantified our models' generalization capabilities over new unseen errors. This involved removing error types during training and assessing whether our models could still predict them. The detection accuracy of removed errors varies significantly between 20% to 80%, indicating connected error patterns.
著者: Jad El Karchi, Hanze Chen, Ali TehraniJamsaz, Ali Jannesari, Mihail Popov, Emmanuelle Saillard
最終更新: 2024-03-04 00:00:00
言語: English
ソースURL: https://arxiv.org/abs/2403.02518
ソースPDF: https://arxiv.org/pdf/2403.02518
ライセンス: https://creativecommons.org/licenses/by/4.0/
変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。
オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。
参照リンク
- https://docs.google.com/drawings/d/1VVw8djmD9oyovuzpyjWxR7iUBWwpLNwl4UC3vseXGlQ/edit?usp=sharing
- https://docs.google.com/drawings/d/1FGuytOogAmgl9WEP3H-W7zV5P40z1OYYgyhmmVlpp9M/edit?usp=sharing
- https://docs.google.com/drawings/d/1_E7x5cdK-sdxdZ_ai_Vj_qlOUB64TTUEgzb42ahhwxU/edit?usp=sharing
- https://researchit.las.iastate.edu
- https://www.plafrim.fr
- https://www.grid5000.fr
- https://gitlab.inria.fr/reproducibility/paper-mpi-errors-detection-using-gnn-embedding-and-vector-embedding-over-llvm-ir-reproducibility
- https://github.com/hypre-space/hypre