問題タブ [multi-gpu]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
391 参照

matrix - マルチ GPU を使用した並列行列乗算

システムの異なる pci スロットに 2 つの GPU (2x Nvidia Quadro 410) をインストールしました。これらの GPU の両方で Martix 乗算を解決するには、各 GPU が出力行列の一部を処理/計算してから返すように入力行列を分割するにはどうすればよいですか。たとえば。2 つの行列 A、B のそれぞれが 10x10 の次数の場合、出力行列 C= A x B を計算し、100 要素 (10 x 10) のうち 50 要素を最初の GPU で計算し、残りの半分、つまり 50 をb は 2 番目の GPU で計算されます。OpenCLで実装しようとしています。ただし、解決策を考え出すのに役立つアルゴリズムは大歓迎です。

0 投票する
2 に答える
68 参照

opencl - マルチ GPU の暗黙的な動作

OpenCL では、プログラマーが作業負荷を明示的に分割しなくても、複数の GPU で構成されるシステムが暗黙的にジョブを分割することは可能ですか?
たとえば、1 つの SM 192 コア GPU で構成される GPU があり、行列の乗算を実行すると、正常に動作します。ここで、別の同じ GPU を追加します。OpenCL は、プログラマーが各 GPU に作業負荷を分割するのではなく、両方の GPU を使用して行列の乗算を計算します。

0 投票する
2 に答える
2547 参照

optimization - TensorFlow でマルチ GPU トレーニングを行う利点は何ですか?

このTensorFlow チュートリアルでは、N 個の GPU を使用して N 個のミニバッチ (それぞれ M 個のトレーニング サンプルを含む) を各 GPU に配布し、勾配を同時に計算できます。

次に、N 個の GPU から収集された勾配を平均し、モデル パラメーターを更新します。

ただし、これは単一の GPU を使用して N*M トレーニング サンプルの勾配を計算し、パラメーターを更新するのと同じ効果があります。

したがって、唯一の利点は、同じ時間でより大きなサイズのミニバッチを使用できることです。

しかし、より大きなサイズのミニバッチは必ずしも優れているのでしょうか?

最適化をサドルポイントに対してより堅牢にするために、大規模なミニバッチを使用すべきではないと思いました。

大規模なミニバッチが実際に優れていない場合、なぜマルチ GPU 学習やマルチサーバー学習を気にするのでしょうか?

(上記のチュートリアルは同期トレーニングです。非同期トレーニングの場合は、各 GPU で計算された勾配を平均化せずにパラメーターが更新されるため、メリットが見られます)

0 投票する
2 に答える
776 参照

tensorflow - tensorflow でのマルチ GPU CIFAR10 の例: 総損失

tensorflow multi-gpu CIFAR 10 exampleでは、GPU ごとに損失を計算します (行 174-180 ) 。

数行下(246行目)の場合、次のように評価さlossれます

どの損失が正確に計算されますか?

関数を確認しましtower_lossたが、すべての GPU (タワー) での増分集計は見られません。

グラフ全体が (すべての GPU で) 実行されていることは理解していますが、返される損失の値は何ですか? loss最後の GPUのみ?loss実際の変数に集計が表示されません。

0 投票する
1 に答える
584 参照

cuda - 1 つの K80 内の 2 つの GPU 用の CUDA 対応 MPI

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 カードをプラグインする必要がありますか?

0 投票する
0 に答える
752 参照

deep-learning - nnGraph マルチ GPU トーチ

この質問は、nnGraph ネットワークを複数の GPU で実行することに関するものであり、次のネットワーク インスタンスに固有のものではありません。

nnGraph で構築されたネットワークをトレーニングしようとしています。後方図を添付します。マルチ GPU 設定で parallelModel (コードまたは図ノード 9 を参照) を実行しようとしています。並列モデルを nn.Sequential コンテナーにアタッチしてから DataParallelTable を作成すると、マルチ GPU 設定 (nnGraph なし) で動作します。ただし、それを nnGraph にアタッチすると、エラーが発生します。単一の GPU でトレーニングする (if ステートメントで true を false に設定する) 場合、バックワード パスは機能しますが、マルチ GPU 設定では、「gmodule.lua:418: ローカル 'gradInput' (a nil価値)"。バックワード パスのノード 9 は複数の GPU で実行する必要があると思いますが、そうはなっていません。nnGraph で DataParallelTable を作成してもうまくいきませんでした。ただし、少なくとも内部 Sequential ネットワークを DataParallelTable に配置するとうまくいくと思いました。複数の GPU で実行できるように、nnGraph に渡される初期データを分割する他の方法はありますか?

バックパス

「if」ステートメントのコードは、Facebook の ResNet 実装から取得されます

0 投票する
1 に答える
224 参照

matlab - Matlab デュアル GPU メモリ使用量

Titan Z という名前のデュアル GPU カードがあります。Matlab 2016a を使用して、さまざまな ' ' 値のスパースAx=b方程式セットを解こうとしています。bTitan Z には 2 つの GPU と各 GPU に 6 GB の RAM があります

これが問題です。

  1. Ax=b1 つの GPU で問題を解決する場合、たとえば ' A' マトリックス サイズが 2GB の場合、Matlab はこのマトリックスを各 GPU の vram にコピーします。GPU-Z は、各 GPU に 2 GB のデータがあり、1 つの GPU のみが動作していると報告しています
  2. Ax=b2 つの GPU で 2 つの問題を解決する場合、たとえばA行列サイズが 2GB の場合、Matlab はこの行列を各 GPU の vram に 2 回コピーします。GPU-Z は、各 GPU に 4GB のデータがあり、2 つの GPU が同時に動作していると報告しています。
  3. 「4GB」の問題を同時に解決しようとすると、VRAM が不十分なためにNvidia ドライバーがクラッシュします。しかし、1 つの GPU で解決できます。2 つの GPU で同時に使用することはできません。

問題は、Matlab がこれらの行列を必要としないときに 2 回コピーすることです。さらに興味深いことに、2 つの GPU がまったく同じ ' A' 行列を使用しているが、異なる ' b' ベクトルを使用している場合にこれを行います。

どうすればこの問題を解決できますか?

0 投票する
1 に答える
632 参照

machine-learning - マルチ GPU 手法を使用した tensorflow 分散トレーニング ハイブリッド

現在の分散トレーニングの実装をしばらくいじってみたところ、各 GPU が個別のワーカーとして認識されているように思います。シングル ボックス マルチ GPU 手法を採用して、最初にシングル ボックスで平均勾配を計算し、次に複数のノード間で同期する方がよいのではないでしょうか? このようにして、データ並列処理のボトルネックである I/O トラフィックが大幅に軽減されます。

現在の実装では、すべての GPU を単一のボックスにワーカーとして配置することで可能だと言われましたが、SyncReplicasOptimizer はオプティマイザーを入力として直接受け取るため、平均勾配を SyncReplicasOptimizer と結び付ける方法がわかりません。

誰からのアイデアはありますか?

0 投票する
2 に答える
279 参照

computer-vision - Reinpect 人間検出モデルの分散 Tensorflow トレーニング

私は Distributed Tensorflow、特に次の論文https://github.com/Russell91/TensorBoxに記載されている Distributed Tensorflow を使用した再検査モデルの実装に取り​​組んでいます。

Distributed tensorflow 設定の Between-graph-Asynchronous 実装を使用していますが、結果は非常に驚くべきものです。ベンチ マーキング中に、分散型トレーニングは、単一のマシン トレーニングよりもほぼ 2 倍以上のトレーニング時間がかかることがわかりました。何が起こっているのか、他に何を試すことができるのかについてのリードは本当にありがたいです. ありがとう

注: 投稿に訂正があります。グラフ内実装ではなく、グラフ間実装を使用しています。間違いをお詫びします