0

LAMMPS ( https://github.com/lammps/lammps )と呼ばれる MPI+CUDA ベンチマークのパフォーマンスを最適化しようとしています。現在、2 つの MPI プロセスと 2 つの GPU で実行しています。私のシステムには 2 つのソケットがあり、各ソケットは 2 つの K80 に接続します。各 K80 には内部に 2 つの GPU が含まれているため、各ソケットは実際には 4 つの GPU に接続します。しかし、私は 1 つのソケットで 2 つのコアと、そのソケットに接続された 2 つの GPU (1 K80) のみを使用しています。MPI コンパイラは MVAPICH2 2.2rc1 で、CUDA コンパイラのバージョンは 7.5 です。

それが背景でした。アプリケーションのプロファイリングを行ったところ、通信がパフォーマンスのボトルネックであることがわかりました。そして、GPUDirect 技術が適用されていないことが原因だと思います。そこで、MVAPICH2-GDR 2.2rc1 に切り替え、その他の必要なライブラリとツールをすべてインストールしました。しかし、MVAPICH2-GDR には、システムで使用できない Infiniband インターフェイス カードが必要なため、「チャネルの初期化に失敗しました。システムでアクティブな HCA が見つかりません」というランタイム エラーが発生します。私の理解では、K80 にはこれら 2 つの GPU 用の内部 PCIe スイッチがあるため、1 つのノードで 1 つの K80 内の GPU のみを使用する場合、Infiniband カードは必要ありません。これらは私の疑問です。質問を明確にするために、次のようにリストします。

  1. 私のシステムでは、1 つのソケットが 2 つの K80 に接続されています。1 つの K80 の 2 つの GPU が別の K80 の GPU と通信する必要がある場合、GPUDirect を使用するには IB カードが必要ですよね?

  2. 1 台の K80 内で 2 つの GPU を使用するだけでよい場合、これら 2 つの GPU 間の通信には IB カードは必要ありませんよね? ただし、MVAPICH2-GDR には少なくとも 1 つの IB カードが必要です。この問題を解決するための回避策はありますか? または、システムに IB カードをプラグインする必要がありますか?

4

1 に答える 1

5

私のシステムでは、1 つのソケットが 2 つの K80 に接続されています。1 つの K80 の 2 つの GPU が別の K80 の GPU と通信する必要がある場合、GPUDirect を使用するには IB カードが必要ですよね?

IB カードが必要になるのは、システムからシステムへの MPI 通信 (GPU またはその他) がある場合のみです。同じシステム内の GPU は、相互に通信するために IB カードが存在する必要はありません。この (単一システム) 設定で GPUDirect を使用する方法の詳細については、以下をご覧ください。

1 台の K80 内で 2 つの GPU を使用するだけでよい場合、これら 2 つの GPU 間の通信には IB カードは必要ありませんよね? ただし、MVAPICH2-GDR には少なくとも 1 つの IB カードが必要です。この問題を解決するための回避策はありますか? または、システムに IB カードをプラグインする必要がありますか?

MVAPICH2-GDRのGDRは、GPUDirect-RDMA を指します。GPUDirect は、GPU が相互に直接通信できるようにする一連のテクノロジの総称です。

同じシステム内の GPU の場合、GPUDirect テクノロジはPeer-to-Peerと呼ばれます。K80 上の 2 つの GPU は、ピア ツー ピアを使用して常に相互に通信できる必要があります。simpleP2Pなどの名前に P2P が含まれる CUDA サンプル コードを使用して、これを自分で検証できます。このサンプル コードは、システムが同じシステム内の 2 つの GPU 間で P2P をサポートできるかどうかも示します。

IB (Infiniband) ネットワークで接続された別のシステムの GPU には、GPUDirect-RDMA と呼ばれる追加の GPUDirect テクノロジがあります。これにより、別々のシステムにある 2 つの GPU がIB リンクを介して相互に通信できるようになります。

MVAPICH2-GDR は IB に関連する GPUDirect RDMA を組み込んでいるため、おそらくデフォルトで IB カードを探します。

ただし、K80 などの単一システム内の GPU 間でも、GPUDirect 対応の MPI (MVAPICH2 のいくつかのフレーバーを含む) を使用することで、通信の利点を得ることができるはずです。この種の使用法は、必ずしも RDMA ではなく GPUDirect P2P を使用するため、単に「CUDA 対応 MPI」と呼ばれます。

それを設定する方法の詳細なチュートリアルとウォークスルーは、SO の回答で提供できる範囲を超えていますが、この種の使用方法の詳細については、このトピックを完全にカバーする 2 つのブログ記事を参照してください。ここで、第二部はこちらです。GPUDirect-RDMA の詳細については、こちらを参照してください。

于 2016-07-21T14:03:48.107 に答える