具体的には、この記事ではまず、分散コンピューティングの基本概念と、分散コンピューティングがディープラーニングにどのように使用されるかを紹介します。次に、分散アプリケーションを処理する環境を構成するための標準要件 (ハードウェアとソフトウェア) を示します。 ***、実践的な経験を提供するために、この記事では、理論と実装の両方の観点から、ディープラーニング モデルをトレーニングするための分散アルゴリズム (同期確率的勾配降下法、同期 SGD) について説明します。
分散コンピューティングとは何ですか? 分散コンピューティングとは、ネットワーク上の複数の接続されたコンポーネントを活用するプログラムの作成方法を指します。通常、大規模なコンピューティングは、高密度の数値演算を並列処理できるようにコンピューターを配置することによって実現されます。分散コンピューティングの用語では、これらのコンピューターはノードと呼ばれることが多く、これらのノードの集合はクラスターと呼ばれます。これらのノードは通常イーサネット経由で接続されますが、他の高帯域幅ネットワークでも分散アーキテクチャを活用できます。 ディープラーニングは分散コンピューティングからどのような恩恵を受けるのでしょうか? ディープラーニングの主力であるニューラル ネットワークは、以前から文献に登場していますが、その潜在能力が最大限に発揮されるようになったのはごく最近のことです。ニューラル ネットワークが普及した主な理由の 1 つは、膨大な計算能力です。この記事では、この点について説明します。ディープラーニングでは、多数のパラメータを含む大量のデータに基づいてディープニューラルネットワークをトレーニングする必要があります。分散コンピューティングは、最新のハードウェアを最大限に活用するための最適なツールです。その中心となる考え方は次のとおりです。 適切に設計された分散アルゴリズムでは、次のことが可能になります。
MPI: 分散コンピューティングの標準 慣れておく必要があるもう一つの用語があります。それは、Message Passing Interface (MPI) です。 MPI は、ほぼすべての分散コンピューティングの主力製品です。 MPI は、ノードが相互に通信するための一連のルールを定義するオープン スタンダードです。MPI はプログラミング モデル/API でもあります。 MPI はソフトウェアでもツールでもなく、仕様です。 1991 年の夏、学界と産業界の組織と個人のグループが集まり、最終的に MPI フォーラムが設立されました。フォーラムは合意に達し、さまざまなハードウェア ベンダーが移植可能で柔軟性があり最適化された実装を実現するためのガイダンスを提供するライブラリの構文とセマンティクスの仕様を起草しました。いくつかのハードウェア ベンダーは、OpenMPI、MPICH、MVAPICH、Intel MPI など、独自の MPI 実装を持っています。 このチュートリアルでは、非常に効率的で Intel プラットフォームに最適化されている Intel MPI を使用します。オリジナルの Intel MPI は C ライブラリであり、非常に低レベルです。 構成 分散システムでは、適切な構成が非常に重要です。プログラミング モデルの概念を理解していたとしても、適切なハードウェアとネットワーク レイアウトがなければほとんど役に立ちません。行う必要がある主な手配は次のとおりです。
並列戦略の種類 ディープラーニング モデルを並列化する一般的な方法は 2 つあります。
1. モデルの並列性 モデルの並列処理とは、モデルが論理的に複数の部分に分割され (たとえば、一部のレイヤーが 1 つの部分に、他のレイヤーが別の部分に)、異なるハードウェア/デバイスに展開されることを意味します。 実行時間の点で、モデルのさまざまな部分をさまざまなデバイスに展開することには利点がありますが、これは通常、メモリの制約を回避するために行われます。特に多くのパラメータを持つモデルは、大きなメモリフットプリントを必要とし、単一のシステムに収めるのが難しいため、この並列戦略の恩恵を受けるでしょう。 2. データの並列処理 一方、データの並列処理とは、異なるハードウェア/デバイス上にある同じネットワークの複数のコピーを通じて、異なるデータ バッチを処理することを指します。モデルの並列処理とは異なり、各レプリカはネットワークの一部ではなく、ネットワーク全体である場合があります。 ご想像のとおり、この戦略はデータの増加に合わせて拡張できます。ただし、ネットワーク全体を単一のデバイスに展開する必要があるため、メモリフットプリントが大きいモデルには役立たない可能性があります。次の図を見ればこれが明らかになるはずです。 モデル並列処理とデータ並列処理 実際、大規模な組織では、データ並列処理が普及し、本番品質のディープラーニング トレーニング アルゴリズムを実行するために一般的に使用されるようになっています。したがって、このチュートリアルではデータの並列処理に焦点を当てます。 torch.distributed API PyTorch は、C で記述された基盤となる MPI ライブラリへのインターフェースとして、非常にエレガントで使いやすい API を提供します。 PyTorch はソースからコンパイルする必要があり、システムにインストールされている Intel MPI とリンクする必要があります。ここでは、torch.distributed の基本的な使い方と実行方法について見ていきます。
ポイントツーポイント通信 上記のコードを mpiexec で実行すると、標準 MPI 実装に基づいた分散プロセス スケジューラが生成されます。結果は次のとおりです。
コミュニケーション集団 前のセクションで見たのは、「ポイントツーポイント」通信の例で、特定の環境内の特定のランクにランクがデータを送信するというものでした。このタイプの通信は、通信をきめ細かく制御できるため便利ですが、集団と呼ばれる、よく使用される他の標準的な通信パターンもあります。以下では、同期 SGD アルゴリズムで注目する集団、つまり all-reduce 集団について説明します。 1. すべて削減 All-reduce は同期通信方式です。すべてのランクに対して削減操作が実行され、その結果はすべてのランクで表示されます。次の図は、この考え方 (減算演算としての合計) を紹介しています。 すべて削減集合
PyTorch における all-reduce 集合の基本的な使用法 3 環境の世界で開始した場合、結果は次のようになります。
ディープラーニングへの転換 読者は、ディープラーニング モデルのトレーニングによく使用される標準的な確率的勾配降下法 (SGD) アルゴリズムに精通していることを前提としています。私たちが今見ているのは、スケーリングのために all-reduce 集合を使用する SGD のバリエーションである同期 SGD です。標準的な SGD 計算から始めましょう。 ここで、D はサンプル セット (ミニバッチ)、θ はすべてのパラメーターのセット、λ は学習率、Loss(X, y) は D 内のすべてのサンプルの損失関数の平均です。 同期 SGD が依存する中心的なトリックは、更新ルールの合計を小さな (ミニ) バッチ サブセットに分割することです。 D は R 個のサブセット D₁、D₂、… に分割されます (各サブセットのサンプル数が同じであることが推奨されます)。そのため、標準の SGD 更新式の合計は次のように分割されて得られます。 ここで、勾配演算子は合計演算子に分散されるため、次のようになります。 私たちはこれから何を得るのでしょうか? 上記の式の個々の勾配項 (角括弧内) を見てみましょう。これらは個別に計算され、その後加算されて、損失や近似なしに元の勾配が得られます。これはデータの並列処理です。全体のプロセスは次のとおりです。
最後のポイントは、all-reduce アルゴリズムです。したがって、サイズ B のミニバッチ (dᵣ) を使用してすべてのランクの勾配を計算した後は、毎回 all-reduce を実行する必要があります。注目すべき点は、すべての R ランクの勾配を合計すると (サイズ B のミニバッチを使用して計算)、有効なバッチ サイズが得られることです。 実装の重要な部分は次のとおりです (定型コードは示していません)。
ここで問題となるのは、独立した更新が同期された状態を維持するにはどうすればよいかということです。 更新方程式の***更新を見てみましょう。 上記のポイント 2 と 4 により、それぞれの初期重みと勾配が同期していることが保証されます。明らかに、それらの線形結合も同期しています (λ は定数)。後続のすべての更新も同様のロジックに従うため、同期されます。 パフォーマンス比較 すべての分散アルゴリズムの最大のボトルネックは同期です。分散アルゴリズムは、同期時間が計算時間よりも大幅に短い場合にのみ有益です。標準 SGD と同期 SGD を簡単に比較して、後者の方が優れている場合を見てみましょう。 定義: データセット全体のサイズが N であると仮定します。ネットワークがサイズ B のミニバッチを処理するには、時間 Tcomp がかかります。分散の場合、all-reduce 同期には Tsync が使用されます。 非分散型 (標準) SGD の場合、エポックごとにかかる時間は次のとおりです。 同期 SGD の場合、エポックごとにかかる時間は次のとおりです。 したがって、分散環境が非分散環境よりも大きな利点を持つためには、次の条件を満たす必要があります。 上記の不等式に影響する 3 つの要素を調整することで、分散アルゴリズムからより多くのメリットを得ることができます。
この記事では、ディープラーニングの文脈における分散コンピューティングの中心的な考え方をわかりやすく紹介します。同期 SGD は人気がありますが、頻繁に使用される他の分散アルゴリズムもあります (非同期 SGD やそのバリエーションなど)。しかし、ディープラーニングの手法を並行して考えることができることの方が重要です。すべてのアルゴリズムがすぐに並列化できるわけではなく、一部のアルゴリズムでは元のアルゴリズムによって与えられた理論的な保証を破る近似値が必要になることに注意してください。これらの近似を効率的に処理できるかどうかは、アルゴリズムの設計者と実装者に依存します。 元の住所: https://medium.com/intel-student-ambassadors/distributed-training-of-deep-learning-models-with-pytorch-1123fa538848 [この記事は51CTOコラム「Machine Heart」、WeChatパブリックアカウント「Machine Heart(id:almosthuman2014)」によるオリジナル翻訳です] この著者の他の記事を読むにはここをクリックしてください |
<<: データ分析を使用して協調フィルタリングアルゴリズムの2つの一般的な問題を定量化する
>>: 中国でドローン配送用の商用「操縦免許」が発行されるまでにどれくらいの時間がかかるのでしょうか?
ビッグデータと AI は公平に比較できるでしょうか? ある程度は公平ですが、まずはその違いを明確...
[[207418]]多くの検索専門家は、「機械学習を通じて最適な重みを取得し」、それを検索クエリに使...
PCMag が調査を実施したところ、ユーザーの 68% が、さまざまなスマートホーム製品が知らないう...
10月28日、サンフランシスコのニュース予報では、29日の強風により再び停電が発生するだろうと報じら...
[[275946]]ビッグデータダイジェスト制作出典: フォーブス編纂者:張大毓人工知能は従来の産業...
データサイエンスはデータに関するものです。これは、あらゆるデータ サイエンスや機械学習プロジェクトの...
[[384967]]最近、アメリカの「MITテクノロジーレビュー」は、2021年の世界のトップ10の...
[[188839]]ビッグデータの概念が普及するにつれ、ビールとおむつの話は広く知られるようになり...