バッチサイズを2のべき乗に保つことの利点は何ですか?


14

機械学習でモデルをトレーニングしているときに、バッチサイズを2の累乗に保つことが有利な場合があるのはなぜですか?GPUメモリ/ RAMに最も適合するサイズを使用するのが最善だと思いました。

この回答は、一部のパッケージでは、バッチサイズとして2のべき乗の方が優れていると主張しています。誰かが詳細な説明/詳細な説明へのリンクを提供できますか?これは、すべての最適化アルゴリズム(勾配降下法、逆伝播法など)またはそれらの一部のみに当てはまりますか?

回答:


18

これは、GPUの物理プロセッサ(PP)への仮想プロセッサ(VP)のアライメントの問題です。多くの場合、PPの数は2の累乗であるため、2の累乗とは異なるVPの数を使用すると、パフォーマンスが低下します。
VPのPPへのマッピングは、PP の数のサイズのスライスの山として見ることができます。
16個のPPがあるとします。
それらに16 VPをマッピングできます:1 VPは1 PPにマッピングされます。
それらに32 VPをマッピングできます。16VPの2スライス、1 PPが2 VPを担当します。
など実行中、各PPは自分が担当する最初のVPのジョブを実行し、次に2番目のVPのジョブなどを
実行します。17VPを使用すると、各PPは最初のPPのジョブを実行し、 17番目のジョブを実行するAND他のものは何もしません(以下で指定)。
これは、GPUで使用されるSIMDパラダイム(70年代ではベクターと呼ばれていました)によるものです。これは多くの場合、データ並列処理と呼ばれます。すべてのPPは同時に同じことを行いますが、データは異なります。https://en.wikipedia.org/wiki/SIMDを参照してください
より正確には、17 VPの例では、最初のスライスのジョブが完了すると(最初のVPのジョブを実行するすべてのPPによって)、すべてのPPが同じジョブ(2番目のVP)を実行しますが、作業するデータ
学習とは関係ありません。これはプログラミングのみです。


バッチサイズはPPの数の倍数であると言う方が正確でしょうか?つまり、あなたの例では、16x3 = 48 VPを16 PPにマッピングできますか?
西部

はい。さて...マッピングVP-> PPを自分で行う場合、100%正しいことを確認してください。ライブラリを使用し、80 VPを要求する場合。よく分かりません。私はあなたが間違っていると言っているのではありません。比率が2の累乗の場合、非常に古典的で簡単な最適化を使用できます。メモリアクセスを考えてください。VPの2階の隣人の数が2のべき乗、たとえば5でない場合、libは隣人のメモリへの従来のO(log_2(n))アクセスを簡単に使用できません。
jcm69

@ jcm69 VPメモリアクセスのlog_2(n)アクセス時間のリンクを説明または提供できますか?
アラヤンシン

これは、コンピューターサイエンスでのオブジェクトの処理に関する一般的な考慮事項にすぎません。オブジェクトが2のべき乗のルールに従うことが確実な場合、バイナリ検索ツリー、バイナリシフトなどによって簡単かつ安全に管理できます。よくわからない場合は、追加のテストとより複雑なアルゴリズムを作成する必要があります。とにかく、それは最初の質問から少し遠い;)
jcm69
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.