(57)【要約】【課題】畳み込みニューラルネットワーク（ＣＮＮ）においてトレーニング手順を実行するための方法及び装置を提供する。【解決手段】方法は、複数のノードの間でＣＮＮのニューロンを分割し、入力データのミニバッチをノードの各々に割り当て、ミニバッチをノードの数に対応して且つ等しい複数のセクションに分割し、各ノードにおいて、当該ノードと同じ番号を有するミニバッチのセクションを保持し、ミニバッチの他のセクションを対応するノードに送信し、各ノードにおけるミニバッチのセクションを単一の行列に配列し、行列を当該ノードにおけるニューロンで乗算して、ミニバッチ当たり出力データの１つのセクションを有する出力データを提供し、各ノードにおいて、他のノードに対応する出力データのセクションを、対応するノードに返送し、各ノードがそのミニバッチ全体についての出力データを有するように、各ノードにおける出力データを結合する。【選択図】図２ｂ
2020068016.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータにより実現される方法であって、
プロセッサ及びメモリを有する複数のＸ個のノードを含むコンピューティングネットワークにおいて、ノード１〜ノードＸの間で畳み込みニューラルネットワーク（ＣＮＮ）のニューロンを分割することと、
入力データのミニバッチを前記複数のノードの各々に割り当てることと、
前記ミニバッチを、前記複数のノードの数に対応して且つ等しい複数のＸ個のセクションに分割することと、
各ノードにおいて、当該ノードと同じ番号を有する、前記ミニバッチのセクションを保持し、前記ミニバッチの他のセクションを、対応するノードに送信することと、
各ノードにおける前記ミニバッチの前記セクションを単一の行列に配列し、配列された前記行列を、当該ノードにおける前記ニューロンで乗算して、ミニバッチ当たり出力データの１つのセクションを有する出力データを提供することと、
各ノードにおいて、他のノードに対応する、前記出力データのセクションを、対応するノードに返送し、各ノードがそのミニバッチ全体についての出力データを有するように、各ノードにおける前記出力データを結合することと、
を含む、方法。
【請求項２】
前記方法は、前記ＣＮＮをトレーニングするために、前記ＣＮＮの全結合層における順伝播段階において使用される、請求項１に記載の方法。
【請求項３】
各ノードは、メモリ及び処理能力を含み、好ましくは、ＧＰＵを含むアクセラレータである、請求項１又は２に記載の方法。
【請求項４】
バイアス項を、結合された前記出力データに加算すること
をさらに含む、請求項１乃至３のうちのいずれか一項に記載の方法。
【請求項５】
全結合層における順伝播テスト段階において、
テスト反復を実行するメインノードにおいて、ルートソルバスレッドから新たなスレッドを作成することであって、各新たなスレッドは、異なるノードに割り当てられ、前記新たなスレッドは、他のノードにおいて保持されているニューロンパラメータのメモリアドレスにアクセスする、作成すること
をさらに含む、請求項１乃至４のうちのいずれか一項に記載の方法。
【請求項６】
前記メインノードが、前記順伝播テスト段階についての入力データを前記新たなスレッドにブロードキャストし、前記新たなスレッドが、前記新たなスレッドの全てが結合される前に、層の出力を計算すること
をさらに含む、請求項５に記載の方法。
【請求項７】
畳み込み層における逆伝播段階において、
各ノードは、そのミニバッチについての入力データ勾配を受信し、前記入力データ勾配を、該ミニバッチのセクションが処理された各ノードに送信し、
各ノードは、当該ノードにおける前記入力データ勾配を、順伝播段階からの配列されたミニバッチで乗算して、該ミニバッチの全てから、各ノードにおけるパラメータ勾配を生成する、請求項１乃至６のうちのいずれか一項に記載の方法。
【請求項８】
前記入力データ勾配は、各ノードにおいて、前記ミニバッチ全体についての前記出力データのために使用された空間に記憶される、請求項７に記載の方法。
【請求項９】
逆伝播を用いてデータ勾配を計算することであって、
各ノードは、前記ミニバッチ全体についての前記出力データを、前記パラメータ勾配で乗算して、出力データ勾配を提供し、
他のノードに対応する前記出力データ勾配は、各ノードがそのミニバッチ全体についての前記データ勾配を保持するように、対応するノードに返送される、
計算すること
をさらに含む、請求項７又は８に記載の方法。
【請求項１０】
パラメータが更新される前に、バイアスだけが、全結合層において同期される、請求項１乃至９のうちのいずれか一項に記載の方法。
【請求項１１】
前記ＣＮＮは、深層ニューラルネットワーク（ＤＮＮ）である、請求項１乃至１０のうちのいずれか一項に記載の方法。
【請求項１２】
畳み込みニューラルネットワーク（ＣＮＮ）のトレーニング手順を実行するための装置であって、
１つ以上の処理ノードと、
命令を記憶しているメモリであって、前記命令が前記１つ以上の処理ノードにより実行されたときに、前記命令は、前記１つ以上の処理ノードに、
複数のノード１〜ノードＸの間で前記ＣＮＮのニューロンを分割することと、
入力データのミニバッチを前記複数のノードの各々に割り当てることと、
前記ミニバッチを、前記複数のノードの数に対応して且つ等しい複数のＸ個のセクションに分割することと、
各ノードにおいて、当該ノードと同じ番号を有する、前記ミニバッチのセクションを保持し、前記ミニバッチの他のセクションを、対応するノードに送信することと、
各ノードにおける前記ミニバッチの前記セクションを単一の行列に配列し、配列された前記行列を、当該ノードにおける前記ニューロンで乗算して、ミニバッチ当たり出力データの１つのセクションを有する出力データを提供することと、
各ノードにおいて、他のノードに対応する、前記出力データのセクションを、対応するノードに返送し、各ノードがそのメモリにおいてそのミニバッチ全体についての出力データを有するように、各ノードにおける前記出力データを結合することと、
を含む動作を制御させる、メモリと、
を有する、装置。
【請求項１３】
コンピュータプログラムであって、前記コンピュータプログラムが１つ以上のプロセッサにより実行されたときに、前記コンピュータプログラムは、前記１つ以上のプロセッサに、
複数のノード１〜ノードＸの間で畳み込みニューラルネットワーク（ＣＮＮ）のニューロンを分割することと、
入力データのミニバッチを前記複数のノードの各々に割り当てることと、
前記ミニバッチを、前記複数のノードの数に対応して且つ等しい複数のＸ個のセクションに分割することと、
各ノードにおいて、当該ノードと同じ番号を有する、前記ミニバッチのセクションを保持し、前記ミニバッチの他のセクションを、対応するノードに送信することと、
各ノードにおける前記ミニバッチの前記セクションを単一の行列に配列し、配列された前記行列を、当該ノードにおける前記ニューロンで乗算して、ミニバッチ当たり出力データの１つのセクションを有する出力データを提供することと、
各ノードにおいて、他のノードに対応する、前記出力データのセクションを、対応するノードに返送し、各ノードがそのミニバッチ全体についての出力データを有するように、各ノードにおける前記出力データを結合することと、
を含む動作を実行させる、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、トレーニングにおいて深層ニューラルネットワークのメモリ要求を分散させる方法及び装置に関する。
【背景技術】
【０００２】
人工ニューラルネットワーク（ＡＮＮ）における計算ユニットは、人の脳におけるニューロンをまね、ＡＮＮにおけるニューロンは、層によりグループ化される。典型的には、例えば、畳み込み、プーリング、正規化線形ユニット、全結合層等といった、ニューロンの入力層、ニューロンの出力層、及びニューロンの隠れ層が存在する。深層ニューラルネットワーク（ＤＮＮ）は、入力層と出力層との間の計算ユニットとして作用する、ニューロンの複数の隠れ層を伴うＡＮＮである。各計算ユニットは、重み付けされた異なるデータ入力を結合して、活性化関数又は伝達関数と呼ばれることもある関数を計算する。この関数は、重み付けされた入力の線形結合、又は、シグモイド関数等のより精巧なものであり得る。
【０００３】
畳み込み層が、特徴抽出のために使用される。これは、入力データをフィルタ値で乗算する、入力データの配列にわたってスライドする（又は畳み込む）１つ以上の重み付けされたフィルタ又はニューロンのセットとみなされ得る。次いで、これらの乗算が、フィルタの各位置において合計されるので、出力は、入力よりも、次元が小さくなる可能性が高い。第１の畳み込み層の出力は、次の畳み込み層の入力になる。全結合層又はＦＣ層が、特徴分類のために使用される。これは、前の層からの出力データを得て、どの特徴が特定のクラスに属するかを決定する（出力データにラベル付けする）。
【０００４】
ＡＮＮをトレーニングするとき、ネットワークの出力が、損失関数を使用して所望の出力と比較され、誤差値が、出力層における各ニューロンについて計算される。次いで、ネットワークにおける各ニューロンが誤差値を有するまで、これらの誤差値が逆伝播される。これらの誤差値は、ネットワークにおける重みに関して損失関数の勾配を計算するために使用され、勾配は、損失関数を最小化するために、重みを更新するのに使用される。
【０００５】
ＤＮＮは、機械学習における他の高度な方法で記録されたものを上回る精度性能を伴って、音声及び画像認識において顕著な進歩を実現する可能性を提供する。しかしながら、ＤＮＮのトレーニングプロセスは、非常に計算集約的なタスクであり、これは、一般に、メモリ（ＲＡＭ）及びトレーニング（実行）時間を含め、大きな計算リソースを必要とする。長いトレーニング時間に対処するために、いくつかの努力は、例えば、グラフィックス処理ユニット（ＧＰＵ）、Intel（登録商標）  Xeon  Phi、ＦＰＧＡ、ＡＳＩＣ等を含む、特殊化されているハードウェアアクセラレータ及び主流のハードウェアアクセラレータの両方の計算能力を利用しながら（ＧＰＵ、アクセラレータ、及びノードという用語は、本文書において交換可能に使用される）、深層学習アルゴリズムを高速化するための改善にフォーカスしてきている。しかしながら、これらのアクセラレータは、通常、制限された量のデバイス内メモリを含むので、メモリ制限を有する。このような制限は、トレーニングされるべきＤＮＮが、アクセラレータ内の利用可能なメモリよりも多くのメモリを必要とする場合に、問題をもたらす。換言すれば、ＤＮＮをトレーニングするために必要とされる重み（パラメータ−ｗとも呼ばれる）及びデータ（アクティベーションとも呼ばれる）は、アクセラレータのメモリに収まらず、トレーニングプロセスを担うプロセスは、直ちに実行できない。
【０００６】
大メモリ要求に対処するために、２つ以上のアクセラレータを使用することにフォーカスしているいくつかの分散方式が提案されている。この目的のために、ＤＮＮのメモリ要求又は計算要求の分散を扱ういくつかの方式が報告されている。例えば、ＤＮＮを表すための全てのメモリ要求が、１つのアクセラレータのメモリに記憶され得る場合、トレーニングデータの複数のバッチへの分散が、一般に用いられる。各ＧＰＵは、ミニバッチとして知られている、バッチのサブセットを受信することができる。有利なことに、このデータ分散アプローチでは、ネットワークのモデルの全体（重み、関数、及び勾配を伴うニューロン）が、全てのアクセラレータにおいて、複製されて記憶される。全てのアクセラレータは、それらのローカル入力（トレーニング）データと重みのローカルコピーとに基づいて、勾配を計算する。次いで、それらは、全てのアクセラレータにわたって重みを更新するために、同期方式又は非同期方式で、重み勾配値を交換する。このアプローチでは、入力データのみが、デバイスにわたってミニバッチに均等に分散される。データ分散は、比較的小さなＤＮＮモデル、すなわち、１つのアクセラレータのメモリに記憶され得るモデルについてはうまく機能するが、このアプローチは、効率的にトレーニングされ得るＤＮＮのサイズに重大な制限を課し得ると容易に結論付けられ得る。アクセラレータに関するメモリ利用可能性に関連する別の制限は、ＤＮＮのトレーニングが、入力（トレーニング）データの比較的小さなバッチサイズに制限され得ることである。
【０００７】
データ分散により課されるメモリ制限に対処するために、ＤＮＮモデルの異なる部分が、異なるアクセラレータにおいて記憶され、したがって、異なるアクセラレータにおいてトレーニングされるように、分散は、ＤＮＮのモデル次元にわたって適用され得る。これは、モデルのある部分が、ＤＮＮモデルの別の部分に属するデータへのアクセスを必要とするときはいつでも、これらの２つの部分がデータを交換しなければならないことを意味する。モデル分散のための既存のアプローチは、ＤＮＮのメモリ要求の一部を分散させるためのメカニズムを提供することはできるが、それらは、重み及び対応する勾配の分散を可能にするプロセスを自動化するものではなく、ネットワークの現在分散されている部分の間でニューロンの状態が交換されなければならないニューロンを自動的に識別するものでもない。代わりに、ユーザは、ニューロン及び対応する重みが、分散されている層の間でどのようにリンクされているかを知る必要がある。その後、ユーザは、重み及び勾配の各サブセットを、分散のどの部分に、したがって、交換されなければならない対応するニューロンに、どのように割り当てるかを決定する必要がある。
【０００８】
従来技術において、分散されるパラメータを伴うモデル並列化トレーニングプロセスは、提供されていない（Caffe  -  Y.  Jia,  E.  Shelhamer,  J.  Donahue,  S.  Karayev,  J.  Long,  R.  Girshick,  S.  Guadarrama  and  T.  Darrell,  “Caffe:  Convolutional  Architecture  for  Fast  Feature  Embedding,”  arXiv  preprint  arXiv:  1408.5093,  2014参照）、これは、手動で定義されなければならない（Tensorflow  -  M.  Abadi,  A.  Agarwal  and  P.  Barham,  “Large-Scale  Machine  Learning  on  Heterogeneous  Distributed  Systems,”  2015Chainer参照）、あるいは、実際の分散は、特定の層を分割することによってではなく、異なるアクセラレータにおいて異なる層を配置することによって、実現される（MxNet  -  T.  Chen,  M.  Li,  Y.  Li,  M.  Lin,  N.  Wang,  M.  Wang,  T.  Xiao,  B.  Xu,  C.  Zhang  and  Z.  Zhang,  “MXNet:  A  Flexible  and  Efficient  Machine  Learning  Library  for  Heterogeneous  Distributed  Systems,”  in  Neural  Information  Processing  Systems,  Workshop  on  Machine  Learning  Systems,  2015参照）。結果として、従来技術のフレームワークにおけるモデル並列化の実用的な実装は、制限される又は存在しない。
【０００９】
Alex  Krizhevskyは、A.  Krizhevsky,  “One  weird  trick  for  parallelizing  convolutional  neutral  neworks,”  CoRR,  no.  abs/1404.5997,  2014において、データ並列化及びモデル並列化の組み合わせのための異なる方式を提案している。要約すると、Krizhevskyは、畳み込み層がデータ並列化を用い、各ワーカ（計算リソース）が異なるトレーニングデータバッチで同じ畳み込み層をトレーニングすること、及び、全結合層が、モデル並列化を用い、全てのワーカが、同じバッチでトレーニングし、ネットワークが許容する限り頻繁に通信すること、を提案している。
【００１０】
Krizhevskyによるニューラルネットワークプロセスの一部の例が、図１に示されている。この方式は、データ及びモデル並列化を用いる。行列形式のｂ０、ｂ１、及びｂ２という３つのバッチが、ボトムデータ（入力データ）として、ＧＰＵ＃０、ＧＰＵ＃１、及びＧＰＵ＃２にそれぞれ入力される。これらのバッチは、均一の高さであり、前の層におけるニューロンの数に相当する長さＫである。各ＧＰＵは、受信したバッチを３つのセクションＫ／３（又はミニバッチ、ＧＰＵごとに１つ）に分割し、それ自身のセクションを保持し、他の２つのセクションを他の２つのＧＰＵに分散させる。その結果、各バッチの左セクションは、ＧＰＵ＃０により処理され、中央セクションは、ＧＰＵ＃１により処理され、最終セクションは、ＧＰＵ＃２により処理される。
【００１１】
例えば、ＧＰＵ＃０は、ｂ０の左セクションボトムデータを保持し、ＧＰＵ＃１から、ｂ１の左セクションボトムデータを受信し、ＧＰＵ＃２から、ｂ２の左セクションボトムデータを受信する。これに対応して、ＧＰＵ＃０は、受信したバッチｂ０のボトムデータの中央セクション及び右セクションをＧＰＵ＃１及びＧＰＵ＃２にそれぞれ転送する。
【００１２】
次いで、ＧＰＵ＃０は、同じ前の高さ×長さＮという出力フォーマットを与える、Ｋ／３のサブセットと当該ＧＰＵに割り当てられたＮ個のニューロンとの乗算により、３つのバッチ全ての左セクションを順に処理する。次いで、ＧＰＵ＃０は、ｂ１及びｂ２の左セクションについての出力データ（トップデータ）をＧＰＵ＃１及びＧＰＵ＃２にそれぞれ返送し、ｂ０の左セクションについての出力データ（トップデータ）を保持する。ＧＰＵ＃０は、ＧＰＵ＃１及びＧＰＵ＃２から、ｂ０の中央セクション及び右セクションについてのトップデータをそれぞれ受信して、モデル並列化を用いて、全結合層において処理するために、ｂ０についての全てのトップデータを結合する。
【００１３】
同じ通信構成が、ＧＰＵ＃１及びＧＰＵ＃２に同様に適用され、ＧＰＵ＃１は、ボトムデータの中央セクションを処理し、ｂ１についての全てのトップデータを結合し、ＧＰＵ＃２は、ボトムデータの最終セクションを処理し、ｂ２についての全てのトップデータを結合する。
【００１４】
したがって、このプロセスは、異なるＧＰＵからそれぞれ、異なるミニバッチを一度に得て、小さな行列−行列乗算を行うことにより、出力を計算する。異なるニューロンは、データの異なる部分に作用する。
【００１５】
図１は、ニューラルネットワークのトレーニングプロセスを通じた、通信における重要なボトルネックを強調している。Krizhevskyのアプローチの性能は、いくつかのファクタにより制限される：
（１）基礎となるハードウェアすなわちアクセラレータ（ＧＰＵがこの領域で主に使用されている）を効率的に利用しない全結合層における複数の小さな行列乗算；
（２）通信は、全結合層における計算をオーバーラップすることを目的としているが、このトレードオフは、ネットワークが過度に多くの数のパラメータを有し、したがって通信されるアクティベーションの数が非常に多い場合に消滅し、行列−行列乗算が最適以下である（一方向においてはるかに大きい長方行列）；
（３）パラメータの分散は、それらを表す行列の次元の異なる大きさを考慮せず、これは、さらなる非効率性をもたらす。Zou  -  Y.  Zou,  X.  Jin,  Y.  L,  Z.  G.  E.  Wang  and  B.  Xiao,  “Mariana:  Tencent  deep  learning  platform  and  its  applications,”  Proceedings  of  the  VLDB  Endowment,  vol.  7,  No.  13,  pp.  1772-1777,  2014等の、同様の方式を実装している他の研究は、データのみ並列化と比較して、データ並列化及びモデル並列化を組み合わせた場合に性能がより低いことを示している。
【発明の概要】
【００１６】
本発明の第１の態様の一実施形態に従うと、コンピュータにより実現される方法であって、
プロセッサ及びメモリを有する複数のＸ個のノードを含むコンピューティングネットワークにおいて、ノード１〜ノードＸの間で畳み込みニューラルネットワーク（ＣＮＮ）のニューロンを分割することと、
入力データのミニバッチを複数のノードの各々に割り当てることと、
ミニバッチを、ノードの数に対応して且つ等しい複数のＸ個のセクションに分割することと、
各ノードにおいて、当該ノードと同じ番号を有する、ミニバッチのセクションを保持し、ミニバッチの他のセクションを、対応するノードに送信することと、
各ノードにおけるミニバッチのセクションを単一の行列に配列し、配列された行列を、当該ノードにおけるニューロンで乗算して、ミニバッチ当たり出力データの１つのセクションを有する出力データを提供することと、
各ノードにおいて、他のノードに対応する、出力データのセクションを、対応するノードに返送し、各ノードがそのミニバッチ全体についての出力データを有するように、各ノードにおける出力データを結合することと、
を含む、方法が提供される。
【００１７】
本発明の実施形態は、複数のミニバッチを、基礎となるＧＰＵ又はアクセラレータに統合し、必要な乗算の量を減少させ、基礎となるＧＰＵ又はアクセラレータの観点からこのような乗算をより効率的にすることにより、深層ニューラルネットワーク（ＤＮＮ）においてデータ並列化及びモデル並列化をより効率的に組み合わせるための方法を提供する。実施形態はまた、通常データのみ並列化ソリューションの主なボトルネックである、ＤＮＮのパラメータを同期するのに必要とされる通信の量を著しく減少させる。ＤＮＮの分散されている層がどのように処理されるかのロジックを変更することにより、実施形態は、通信パターンを単純化しつつ、層性能を向上させる。
【００１８】
実施形態のデータ−モデルアプローチは、プロセッサチップのためのライブラリの現在の開発に有益であり得る。多くのチップは、データのみ並列化ソリューションしか提供せず、モデル並列化がもたらす利点を得ることができない。さらに、実施形態は、オンプレミスハードウェアに限定されず、クラウドソリューションに拡張可能であり、実施形態の影響は、複数のＡＩ／ＭＬ（人工知能／機械学習）サービス及び製品の性能を向上させ得る。
【００１９】
この方法は、ＣＮＮをトレーニングするために、ＣＮＮの畳み込み層又は全結合層における順伝播段階において使用されてよい。
【００２０】
各ノードは、メモリ及び処理能力を含んでよく、好ましくは、ＧＰＵ等のアクセラレータである。
【００２１】
この方法は、必要に応じて拡張され得る。例えば、この方法は、バイアス項を、結合された出力データに加算することを含んでよい。
【００２２】
この方法は、全結合層における順伝播テスト段階において、テスト反復を実行するメインノードにおいて、ルートソルバスレッドから新たなスレッドを作成することであって、各新たなスレッドは、異なるノードに割り当てられ、新たなスレッドは、他のノードにおいて保持されているニューロンパラメータのメモリアドレスにアクセスする、作成することをさらに含んでよい。
【００２３】
メインノードは、テスト段階についての入力データを新たなスレッドにブロードキャストしてよく、次いで、スレッドは、スレッドの全てが結合される前に、層の出力を計算してよい。
【００２４】
畳み込み層における逆伝播段階において、各ノードは、そのミニバッチについての入力データ勾配を受信し、入力データ勾配を、該ミニバッチのセクションが処理された各ノードに送信してよく、各ノードは、当該ノードにおける入力データ勾配を、順伝播段階からの配列されたミニバッチで乗算して、該ミニバッチの全てから、各ノードにおけるパラメータ勾配を生成してよい。
【００２５】
入力データ勾配は、各ノードにおいて、ミニバッチ全体についての出力データのために使用された空間に記憶されてよい。
【００２６】
この方法は、逆伝播を用いてデータ勾配を計算することであって、各ノードは、ミニバッチ全体についての出力データを、パラメータ勾配で乗算して、出力データ勾配を提供し、他のノードに対応する出力データ勾配は、各ノードがそのミニバッチ全体についてのデータ勾配を保持するように、対応するノードに返送される、計算することをさらに含んでよい。
【００２７】
パラメータが更新される前に、バイアスだけが、全結合層において同期されてよく、さらなる同期は用いられない又必要とされない。
【００２８】
ＣＮＮは、深層ニューラルネットワーク（ＤＮＮ）であってよい。
【００２９】
本発明の装置の態様の一実施形態に従うと、畳み込みニューラルネットワーク（ＣＮＮ）のトレーニング手順を実行するための装置であって、
１つ以上の処理ノードと、
命令を記憶しているメモリであって、命令が１つ以上の処理ノードにより実行されたときに、命令は、１つ以上の処理ノードに、
複数のノード１〜ノードＸの間でＣＮＮのニューロンを分割することと、
入力データのミニバッチを複数のノードの各々に割り当てることと、
ミニバッチを、ノードの数に対応して且つ等しい複数のＸ個のセクションに分割することと、
各ノードにおいて、当該ノードと同じ番号を有する、ミニバッチのセクションを保持し、ミニバッチの他のセクションを、対応するノードに送信することと、
各ノードにおけるミニバッチのセクションを単一の行列に配列し、配列された行列を、当該ノードにおけるニューロンで乗算して、ミニバッチ当たり出力データの１つのセクションを有する出力データを提供することと、
各ノードにおいて、他のノードに対応する、出力データのセクションを、対応するノードに返送し、各ノードがそのメモリにおいてそのミニバッチ全体についての出力データを有するように、各ノードにおける出力データを結合することと、
を含む動作を制御させる、メモリと、
を有する、装置が提供される。
【００３０】
本発明のソフトウェアの態様の一実施形態に従うと、コンピュータプログラムであって、コンピュータプログラムが１つ以上のプロセッサにより実行されたときに、コンピュータプログラムは、１つ以上のプロセッサに、
複数のノード１〜ノードＸの間で畳み込みニューラルネットワーク（ＣＮＮ）のニューロンを分割することと、
入力データのミニバッチを複数のノードの各々に割り当てることと、
ミニバッチを、ノードの数に対応して且つ等しい複数のＸ個のセクションに分割することと、
各ノードにおいて、当該ノードと同じ番号を有する、ミニバッチのセクションを保持し、ミニバッチの他のセクションを、対応するノードに送信することと、
各ノードにおけるミニバッチのセクションを単一の行列に配列し、配列された行列を、当該ノードにおけるニューロンで乗算して、ミニバッチ当たり出力データの１つのセクションを有する出力データを提供することと、
各ノードにおいて、他のノードに対応する、出力データのセクションを、対応するノードに返送し、各ノードがそのミニバッチ全体についての出力データを有するように、各ノードにおける出力データを結合することと、
を含む動作を実行させる、コンピュータプログラムが提供される。
【００３１】
本発明の好ましい実施形態に従った装置又はコンピュータプログラムは、方法の態様の任意の組み合わせを含んでよい。さらなる実施形態に従った方法又はコンピュータプログラムは、これらが処理能力及びメモリ能力を必要とするという点で、コンピュータにより実現されると記載され得る。
【００３２】
好ましい実施形態に従った装置は、特定の機能を実行するよう構成されている、特定の機能を実行するよう適合されている、又は単純に特定の機能を実行すると記載される。この構成又は適合は、ハードウェア、ミドルウェア、又は任意の他の適切なシステムを使用することによりなされてよい。好ましい実施形態において、構成又は適合は、ソフトウェアによる。
【００３３】
したがって、一態様に従うと、プログラムであって、少なくとも１つのコンピュータにロードされたときに、上記の装置の定義のうちのいずれか又はそれらの任意の組み合わせに従った装置になるようにコンピュータを構成するプログラムが提供される。
【００３４】
さらなる態様に従うと、プログラムであって、少なくとも１つのコンピュータにロードされたときに、上記の方法の定義のいずれか又はそれらの任意の組み合わせに従った方法ステップを実行するように少なくとも１つのコンピュータを構成するプログラムが提供される。
【００３５】
概して、コンピュータは、定義された機能を提供するよう構成又は適合されているとして列挙された要素を有してよい。例えば、このコンピュータは、メモリ、処理、及びネットワークインタフェースを含んでよい。
【００３６】
本発明は、デジタル電子回路、又は、コンピュータハードウェア、ファームウェア、ソフトウェア、若しくはこれらの組み合わせで実現され得る。本発明は、コンピュータプログラム又はコンピュータプログラム製品、すなわち、１つ以上のハードウェアモジュールによる実行のための又はその動作を制御するための、例えばマシン読み取り可能な記憶デバイス等の非一時的な情報キャリアにおいて又は伝搬信号において具現化されたコンピュータプログラムとして実現され得る。
【００３７】
コンピュータプログラムは、スタンドアロンプログラム、コンピュータプログラム部分、又は２つ以上のコンピュータプログラムの形態であってよく、コンパイル型又はインタプリタ型言語を含む任意の形態のプログラミング言語で記述されてよく、これは、スタンドアロンプログラムとして、又は、データ処理環境における使用に適したモジュール、コンポーネント、サブルーチン、若しくは他のユニットとして等、任意の形態でデプロイされてよい。コンピュータプログラムは、１つのサイトにおける１つのモジュール又は複数のモジュール上で実行されるように、又は、複数のサイトにわたって分散され、通信ネットワークにより相互接続されるように、デプロイされてよい。
【００３８】
本発明の方法ステップは、入力データに作用し、出力を生成することにより、本発明の機能を実行するために、コンピュータプログラムを実行する１つ以上のプログラム可能なプロセッサにより実行されてよい。本発明の装置は、例えば、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）又はＡＳＩＣ（特定用途向け集積回路）を含む、プログラムされたハードウェアとして又は特殊目的ロジック回路として実現されてよい。
【００３９】
コンピュータプログラムの実行に適したプロセッサは、例えば、汎用マイクロプロセッサ及び専用マイクロプロセッサの両方と、任意の種類のデジタルコンピュータの任意の１つ以上のプロセッサと、を含む。概して、プロセッサは、読み取り専用メモリ若しくはランダムアクセスメモリ又はその両方から命令及びデータを受信する。コンピュータの必須の要素は、命令及びデータを記憶するための１つ以上のメモリデバイスに接続された、命令を実行するためのプロセッサである。
【００４０】
本発明は、特定の実施形態に関して説明されている。他の実施形態は、請求項の範囲内である。例えば、本発明のステップは、異なる順序で実行されることがあり、依然として望ましい結果を達成する。
【００４１】
本発明の要素は、「プロセッサ」及び「メモリ」という用語を使用して説明されている。当業者であれば、このような機能用語及びそれらの均等の構成が、空間的には分離しているが、定義された機能を提供するために組み合わされている、システムの諸部分を指し得ることを理解するであろう。同様に、システムの同じ物理的部分が、定義された機能のうちの２つ以上を提供することもある。
【００４２】
例えば、別々に定義された手段は、必要に応じて、同じメモリ及び／又はプロセッサを使用して実現されることもある。
【図面の簡単な説明】
【００４３】
本発明の好ましい特徴が、添付の図面を参照して、単に例として説明される。
【図１】従来技術のアプローチに従った、ＤＮＮの順伝播における３つのＧＰＵにわたるデータ及びモデル並列化の概略図（すでに説明されている）。
【図２ａ】一実施形態に従った、ＤＮＮの順伝播における３つのＧＰＵにわたるデータ及びモデル並列化の概略図。
【図２ｂ】Ｘ個のノードにわたる、図２に示されている方法のフローチャート。
【図３】従来技術の方法のフローチャート及びデータ−モデル方法のフローチャート。
【図４】データ並列化及びモデル並列化を組み合わせることの利点を示す概略図。
【図５】ＤＮＮにおける全結合層の順伝播の従来の実行フローのフローチャート及びデータ−モデルアプローチにおける実行フローのフローチャート。
【図６】データのみ並列化ソリューションにおける全結合（ＦＣ）層での従来の順伝播及び逆伝播の例の図。
【図７】データ−モデルアプローチのトレーニング段階における順伝播を示す概略図。
【図８】データ−モデルアプローチのパラメータ（重み）勾配を計算するための逆伝播の概略図。
【図９】データ−モデルアプローチのデータ勾配を計算するための逆伝播の概略図。
【図１０】データ並列化実装とデータ−モデルアプローチとにおける同期要求の概略図。
【図１１】データ−モデルアプローチのテスト段階における順伝播の概略図。
【図１２】データ−モデルアプローチのコンテキストにおいてＮＣＣＬ制限を克服するためのアルゴリズムの概略図。
【図１３】本発明の実施形態を実現するための適切なハードウェアの図。
【発明を実施するための形態】
【００４４】
本発明の実施形態は、ＤＮＮをトレーニングするためにデータ並列化及びモデル並列化を組み合わせる新しい効率的な方法を提供し、これは、ＤＮＮの総メモリフットプリントを減少させ、特に、全結合層におけるパラメータ／重みの数が著しく多い場合に、そのトレーニング性能を向上させる。
【００４５】
実施形態において採用されている本アプローチは、各ＧＰＵが、任意の所与のポイントにおいて全てのミニバッチに対応する出力を同時に計算するように、層の内部プロセスを変更することにより、図１に示されているような、Krizhevskyのデータ−モデル並列化アプローチに含まれる複数の行列−行列乗算をずらすのを回避する。
【００４６】
順伝播段階に対応する簡略化されたデータフローが、図２ａに示されている。図２ａは、ＤＮＮの同じ重みを伴う、図１と同じＧＰＵ及びＧＰＵ間のミニバッチ分散（データ並列化）を示している。通信のタイミングもほぼ同様である。しかしながら、ミニバッチ（データ）が重みで乗算されるやり方が、より効率的である。異なるＧＰＵからそれぞれ、異なるミニバッチを一度に得て（ＧＰＵ＃０からｂ０、ＧＰＵ＃１からｂ１、ＧＰＵ＃２からｂ２を得て）、より小さくそれほど効率的でない行列−行列乗算を行うことにより出力を計算する代わりに、本発明の実施形態のアプローチは、まず、モデルの異なる複製を処理している（データ並列化）全てのＧＰＵからミニバッチを収集し（バッチ統合）、次いで、１つの行列−行列乗算のみを計算すること、からなる。これは、ＧＰＵリソースがどのように利用されるかの観点から、より効率的である。すなわち、ＧＰＵのより良い占有と、特に、以前のアプローチよりも正方行列に近い行列の間の乗算と、である。この方策によれば、全てのミニバッチについての出力を同時に計算することが可能であり、これは、より短い総実行時間をもたらす。なぜならば、異なるモデル複製（ＧＰＵごとに１つ−ここでは３）の数ではなく、ＧＰＵにおいて１つの効率的な計算しか存在しないからである。
【００４７】
図２ｂは、Ｘ個のノード／ＧＰＵにわたる方法を説明するフローチャートである。ステップＳ１０は、入力データのミニバッチ（前の層からの処理後（この場合、Ｋ個の入力は、前の層におけるニューロンごとに１つであり得る）であるか、初期入力データ（この場合、Ｋは、初期入力データの全サイズである）であるか、にかかわらず、基本的に一塊の入力データ）を、ノードの各々に割り当てる。ステップＳ２０は、各ノードにおけるミニバッチを、ノードの数に対応して且つ等しい複数のＸ個のセクションに分割する。したがって、４０個のノード１〜４０が存在する場合、４０個のセクション１〜４０が存在し、セクション３はノード３に対応する等である。
【００４８】
ステップＳ３０は、各ノードにおいて実行される。各ノードは、当該ノードと同じ番号を有する、ミニバッチのセクションを保持し、ミニバッチの他の全てのセクションを、それらの対応するノードに送信する。
【００４９】
ステップＳ４０も、各ノードにおいて実行される。ステップＳ４０は、各ノードにおけるミニバッチセクションを単一の行列に配列し、配列された単一の行列を、当該ノードにおけるニューロン（１つ以上のフィルタ関数）で乗算して、ミニバッチ当たり出力データの１つのセクションを有する出力データを提供する。
【００５０】
最後に、各ノードにおけるステップＳ５０は、他のノードに対応する出力データセクションを、対応するノードに返送し、各ノードがそのミニバッチ全体についての出力データを有するように、各ノードにおける出力データを結合する。
【００５１】
１つのＧＰＵでの単一層実行の観点から、図３は、上述したKrizhevskyのアプローチと本発明の実施形態のデータ−モデルアプローチ（以下、データ−モデルアプローチ）との差異を、簡略化された形で示している。
【００５２】
図３（Ａ）は、Krizhevskyのアプローチを示している。Ｓ１００において、ＧＰＵは、そのローカル入力を層パラメータで乗算する。Ｓ１１０（Ｓ１００の前若しくは後、又は、並列であってよい）において、ＧＰＵは、ＧＰＵｘとして示されている別のＧＰＵからの入力を受信する。Ｓ１２０において、ＧＰＵは、この受信した入力を層パラメータで乗算し、Ｓ１３０において、ＧＰＵは、出力をＧＰＵｘに返送する。ステップＳ１１０〜Ｓ１３０は、全てのＧＰＵがそれらの入力を送信するまで繰り返される。
【００５３】
図３（Ｂ）は、本発明の実施形態のアプローチを示している。Ｓ１４０において、ＧＰＵは、他の全てのＧＰＵからの部分的入力を受信する。Ｓ１５０において、ＧＰＵは、結合された入力を層パラメータで乗算し、Ｓ１６０において、ＧＰＵは、図２で説明されたように、出力を他の全てのＧＰＵに送信する。
【００５４】
最先端のＤＮＮフレームワークのほとんどにより実装されている従来のデータのみ並列化アプローチに、このモデル並列化技術を付加することは、図４に概略的に示されているように、２つの主な改善点をもたらす。図４（Ａ）は、左側において、従来技術の行列乗算を示しており、右側において、データ−モデルアプローチの行列乗算を示している。この図は、４つのＧＰＵについてであり、前の層におけるニューロンの数Ｋは、現在の層におけるニューロンの数Ｎよりもはるかに多い。これは、最初の全結合（ＦＣ）層について特に当てはまる。データ並列化ソリューション（１ａ）において、完全なＫが、この層における完全なモデルＮで乗算される。本発明の実施形態のデータ及びモデル並列化アプローチ（１ｂ）において、前の結果が、４つに分割され、その各Ｋ／４が、モデルＮで乗算される。図４（Ｂ）に示されているＦＣ層におけるパラメータの同期の表現では、データ並列化ソリューションの場合、重みの通信は、全ての層の間の同期を必要とする（２ａ）。対照的に、実施形態は、ＦＣ層を同期しない。
【００５５】
実施形態のモデル並列化アプローチは、プロセスにおいてメモリを節約しつつ、データ並列化のみ（１ａ）よりも正方行列に近い行列（１ｂ）を伴う、ＧＰＵのより良い占有を可能にする。さらに、モデルの異なる複製の間のパラメータの同期（２ａ）は、回避される。なぜならば、モデルは、全結合層においてすでに分散されているからである（２ｂ）。
【００５６】
図５は、ＤＮＮにおける全結合層の典型的な実行フロー（図５（Ａ））と実施形態のデータ−モデルアプローチ（図５（Ｂ））との間の差異を示している。
【００５７】
図５（Ａ）において、プロセスは、Ｓ２００において、プライベートパラメータアドレスから、パラメータのＧＰＵアドレスを取得する。Ｓ２１０において、入力が、パラメータで乗算される。Ｓ２２０において、バイアスが、出力に加算される（バイアスは、任意のノードからの０出力が、次の層においてゼロでない出力をもたらし得ることを確実にするために、ＤＮＮにおいて使用される）。
【００５８】
図５（Ｂ）において、全結合層の実行は、段階に応じて異なるパスに分岐する。トレーニング段階において、最初にＳ２３０において、その特定の層に対応するＧＰＵにおけるパラメータのプライベートアドレスが読み出される。次いで、Ｓ２４０において、異なるＧＰＵからの全ての入力が、収集され（バッチ統合）、その後、層のパラメータとの実際の乗算が行われるが、これは、Ｓ２５０において、１回のみ行われる（さらなる詳細は図７において）。最後に、Ｓ２６０及びＳ２７０において、各層からの出力が、ＧＰＵの残りに送信されて、各ＧＰＵにおいて層の最終出力が計算される。これは、データのみ並列化の場合の出力と同等である。
【００５９】
検証又はテスト段階は、異なるやり方で実行される。ステップＳ２８０において、新たなスレッドが作成され、次いで、Ｓ２９０において、新たなスレッドがＧＰＵに割り当てられる。Ｓ３００において、ＧＰＵメモリアドレスが、グローバルメモリアドレスから取得される。Ｓ３１０において、メインＧＰＵからのブロードキャスト入力があり、Ｓ３２０において、この入力が、パラメータで乗算される。Ｓ３３０において、他のＧＰＵからの出力が減少される。Ｓ３４０において、バイアスが、出力に加算され、次いで、Ｓ３５０において、全てのスレッドが結合される。
【００６０】
このプロセスの背後にある推論は、次の通りである。Caffe等の、データのみ並列化を実装している最先端のフレームワークは、各ＧＰＵがモデルの完全な複製を保持するので、単一のＧＰＵのみを使用してテスト段階の反復を実行する。本発明の実施形態のデータ−モデルアプローチにおいて、モデルは、特定の層でのみ複製され、全結合層は、異なるＧＰＵの間で分割される。結果として、複製された層でテスト反復を実行する、特定のＧＰＵに割り当てられる１つのスレッド（一般的にルートソルバ）のみが存在する。このスレッドが、モデルの分割された部分に達すると、これは、他のＧＰＵからの層パラメータにアクセスする必要がある。なぜならば、これらは、全て同じモデルの分割であるからである。
【００６１】
データ−モデルアプローチは、全結合層において必要なときに新たなスレッドを動的に作成して破壊することにより、この問題に対処する。テスト反復を実行することを担うスレッド（一般的にルートソルバと呼ばれる）が全結合層に達すると、スレッドは、異なるＧＰＵ／ミニバッチごとに１つの追加のスレッドを作成する（Ｓ２８０）。これらの新たなスレッドの各々は、特定のＧＰＵに割り当てられる（Ｓ２９０）。各ＧＰＵは、（トレーニング段階において）異なる分割に対応するパラメータのセットを保持する。例えば、図２に示されているように、ＧＰＵ＃０は、モデルの３分の１を保持する。しかしながら、メモリアドレスは、通常、スレッド及びＧＰＵに対してプライベートであるため、新たなスレッドは、そのようなパラメータにアクセスすることができない。この問題を解決するために、層のセットアップ中に、これらのアドレスは、グローバルにされ、ソルバにより初期化されてＤＮＮの層のセットアップ中に満たされる共有データ構造に格納される必要がある。その後、これらのメモリアドレスは、新たなスレッドにより、テスト段階中にアクセスされる。
【００６２】
次のステップは、メインスレッド／ＧＰＵ（ルートソルバ）からスレッドの残りに入力をブロードキャストすることからなり、その結果、スレッドの残りは、層の出力を計算することができる。最後に、各ＧＰＵが、層のパラメータのセットの異なる分割を保持しているので、行列−行列乗算の結果が、メインスレッドにおいて減少され、ここで、バイアスが加算される。したがって、層の出力は、データのみ並列化ソリューションから得られるものと同等である。最後のステップは、新たなスレッドの破壊を伴う。
【００６３】
図６は、順伝播における全結合層（ＦＣ層Ｌ）の出力と、逆伝播におけるパラメータ及びデータ勾配と、を計算するための、データのみ並列化ソリューションに含まれる演算を示している。順伝播において、層Ｌ−１からのＭ×Ｋのボトムデータが、Ｋ×Ｎの重み（すなわち完全なモデル）で乗算されて、Ｍ×Ｎのトップデータが生成される（ここで、Ｍはミニバッチサイズである）。Ｌ−１におけるＫ個のニューロン結果の各々が、乗算されて、ＬにおけるＮ個のニューロンの各々に与えられるように、最後から２番目の層Ｌ−１の結果が、ＦＣ層Ｌにおいてクロスフィードされる。
【００６４】
逆伝播において、順伝播におけるボトムデータ行列の転置されたバージョンである重み勾配行列が、データ勾配で乗算されて、重み勾配が与えられるのに対し、データ勾配が、転置された重み勾配行列で乗算される。これらの演算が、本発明の実施形態のデータ−モデルアプローチにより実行されるやり方は、図７に示されているように、異なる。図７は、順伝播中の２−ＧＰＵ設定について、前述の図５で言及された数学的演算をより詳細に記載している。図７は、図２と同じフォーマットに従うが、２つのＧＰＵを伴い、したがって、各データバッチが、２つのミニバッチに分割され、ｂ０が、ＧＰＵ＃０に割り当てられ、ｂ１が、ＧＰＵ＃１に割り当てられる。
【００６５】
両ＧＰＵは、他方のＧＰＵ（各ＧＰＵは実際には異なるミニバッチを処理している）による処理のために、それらの入力のセクションを他方のＧＰＵに送信する。次いで、これらの入力が、図７に記載されているロジックに従って、各ＧＰＵにおいて、配列されて、各ＧＰＵにおいて割り当てられたパラメータのサブセットで乗算される。したがって、ＧＰＵ＃０は、ミニバッチｂ０及びｂ１の１番目のセクションを処理し、ＧＰＵ＃１は、これらのミニバッチの２番目のセクションを処理する。これらの乗算の出力は、各ＧＰＵにおける層の最終出力の中間結果である。したがって、各ＧＰＵは、他方のＧＰＵにより処理されるべきミニバッチに対応する結果の行列の部分を、他方のＧＰＵに返送する。次いで、各ＧＰＵは、その再結合されたミニバッチに対応する行列を結合し、最後に、バイアス項を加算して、当該ＧＰＵにおける層の最終出力を生成する。
【００６６】
図８は、同じ２−ＧＰＵ設定において、データ−モデルアプローチにおけるＤＮＮの逆伝播中に含まれる数学的演算を記載している。各ＧＰＵは、入力として、前の層からの、各ミニバッチに対する対応するデータ勾配を受信する。次いで、これらの入力データ勾配が、他方のＧＰＵに送信され、他方のＧＰＵは、収集された入力を記憶するために、順伝播中に出力のために使用された空間を再使用する。次いで、これらの入力が、順伝播からの収集されたデータ入力（当該のＧＰＵにより乗算されたｂ０及びｂ１のセクション）で乗算されて、パラメータ勾配が生成される。層のパラメータが、異なるＧＰＵの間ですでに分散されているので、対応する勾配は、交換及び同期される必要はなく、大量の通信が回避される。ｂ０及びｂ１からの勾配はすでに結合されている。
【００６７】
図９は、提案されているデータ−モデルアプローチのデータ勾配を計算するための逆伝播を示している。したがって、図９は、データ−モデルアプローチについての、逆伝播中の同じ設定における、図８と同様のプロセスを記載しているが、この目的は、パイプラインにおける次の層のために層の出力データ勾配を計算することである。前述のものと同様に、各ＧＰＵは、ネットワークパラメータの各サブセットを、前のステップ（図８）においてすでに収集されている入力データ勾配で乗算する。各ＧＰＵにおけるこの演算の結果は、層についての出力データ勾配のサブ部分である。図に記載されている例において、第１のＧＰＵ＃０は、出力データ勾配を表す全ての行列の左部分を保持し、第２のＧＰＵ＃１は、右部分を保持する。より多くのＧＰＵを伴う設定においては、各ＧＰＵは、左から右へと、最終行列の異なるセクションを保持するであろう。したがって、各ＧＰＵは、そのミニバッチに対応しないサブ部分を送信し、そのミニバッチに対応する部分を受信する。最後に、各ＧＰＵにおいて、これらのサブ部分が結合される。
【００６８】
データ−モデルアプローチは、順伝播及び逆伝播のそれぞれにおいて、バイアス及びバイアス勾配を計算するために従来のプロセスフローを変更するのを回避している。このアプローチは、層のパラメータを分割し、したがって、層の入力次元を分割することにより、これを可能にする。
【００６９】
バイアスの計算は、層の出力次元（層の出力当たり１つのバイアスパラメータ）にのみ依存するので、追加の通信を導入する必要がない。データ並列化実装において、パラメータの更新の前のパラメータの同期は、各ＧＰＵにおいて全ての勾配の間で生じる。データ−モデルアプローチにおいて、この同期は、全結合層において回避される。なぜならば、これらはすでに分割されており、したがって、これらは、異なるデータを用いてトレーニングされた同じモデルの複製ではないからである。
【００７０】
図１０は、各反復後のＤＮＮパラメータの同期に対するデータのみアプローチとデータ−モデルアプローチとの間の差異と、同期プロセスが実際にどのように変更されるかと、を記載している。
【００７１】
図の上半分は、データ並列化（データのみ）アプローチを示しており、ここでは、各層において勾配の同期が存在する。図の下半分は、同じプロセスについてのデータ−モデルアプローチを示している。
【００７２】
従来のフレームワークは、主に２つの方法に従ってパラメータを同期する：
（１）各異なる層へのポインタを保持し、各層を反復的に同期する；又は、
（２）全てのＤＮＮパラメータを、メモリ内の連続したデータ構造に格納し、それらを一括して同期する。
【００７３】
１番目の方法において、データ−モデルアプローチは、反復プロセスにおける各分散されている層について、バイアスではなくパラメータを省くだけでよい。これに対して、２番目の方法において、データ−モデルアプローチは、（トレーニングプロセスの前に）連続したデータ構造がメモリ内でセットアップされると、連続したデータ構造を人為的に分割して、セクションの数を最小限にしながら、分散されている層のパラメータを省いて、連続したデータ構造を処理する。この分割は、実際にはデータ構造そのものにおいてはなされず、各サブセクションの長さとともに各サブセクションへの始まりへのポインタを有する補助的データ構造を保持することにより、なされる。
【００７４】
これまでの図及び説明は、ＤＮＮのトレーニング段階にフォーカスしていた。しかしながら、テスト段階は、異なるやり方で処理される必要がある。一般的に、データのみアプローチにおいて、テスト段階は、１つのＧＰＵにおいてのみ行われるように要求される。なぜならば、これは、ＤＮＮの複製全体を保持するからである。データ−モデルアプローチにおいて、ネットワークのパラメータは、特定の層において分散され、したがって、図１１に示されているように、テスト段階も、これらの分散されている層において分散される必要がある。図１１は、提案されているデータ−モデルアプローチのテスト段階における順伝播を示している。ここで、前述したような２−ＧＰＵ設定において、入力データの右セクションが、ＧＰＵ＃１においてパラメータを用いて処理するために、ＧＰＵ＃１に送信され、その後、結果が、ＧＰＵ＃０に送信される。入力データの左セクションが、ＧＰＵ＃０により処理され、これらの２つのセクションが、トップデータとして再結合され、バイアスが加算されて最終トップデータが形成される。
【００７５】
実装
実施形態の典型的な実装は、ＧＰＵ用の最先端の集合通信の利用（ＮＣＣＬ：NVIDIA（登録商標）  Collective  Communications  Library）を改善するであろう。これは、書き込み時において、上述したロジックに従って、サブ部分を収集してサブ部分を並べ替えるための指示を含まない。
【００７６】
結果として、データ−モデルアプローチは、逆伝播中の層の出力データ勾配を、期待される値と整合させつつ、この問題を解決するためのアルゴリズムを提供する。このようなアルゴリズムが、図１２に示されている。図１２は、データ−モデルアプローチのコンテキストにおいてＮＣＣＬ制限を克服するための新たなアルゴリズムを示している。データ（データ勾配についての逆方向の結果の形）が、前と同様に２つのＧＰＵの間で分割される。ｂ０の前の半分Ｋ／２は、ＧＰＵ＃０でのものであり、ｂ０の後の半分Ｋ／２は、ＧＰＵ＃１でのものである。ＮＣＣＬは、ＧＰＵからデータパッチを収集し、順にそれらを配列するので、ｂ０の前のセクションＫ／２が、ｂ１の前のセクションＫ／２とともに処理され、後のセクションについても同様である。その後、ＧＰＵが、その対応するミニバッチについての出力データ勾配を生成する必要があるとき、ＧＰＵは、対応する行を適切な順序で出力データ勾配にコピーすることにより、出力を再構築する。
【００７７】
さらに、ＮＣＣＬは、集合通信ライブラリであるため、より効率的な実装を行うために必要であるポイントツーポイント通信を許可しない。したがって、追加のメモリが、他のミニバッチに対応する他のＧＰＵからの入力の全体を受信するために必要とされる。結果として、受信されたデータの全てが、行列−行列乗算において実際に使用されるわけではない。これは、行列−行列乗算を実際に実施する基礎となる線形代数ライブラリを使用するとき、先行次元及びオフセットをうまく利用する必要があることを意味する。この場合、ライブラリは、場合に応じて、実際の乗算が部分行列と行列との間で行われるように呼び出されるべきであり、逆も同様である。
【００７８】
これらの制限が克服されると、データ−モデルアプローチは、前のセクションにおいて説明されたプロセスに従って、分散されている層のロジック全体を変更することにより、Caffe等のＤＮＮフレームワークを修正することにより、実装され得る。
【００７９】
データ−モデルアプローチは、トレーニングプロセスのターゲット用途の最終的な計算ニーズに応じて、異なる分野に適用可能である。データ−モデルアプローチは、診断に影響を及ぼす可能性がある微細な細部を見逃さないようにするために、画像が高解像度を有することを通常要求する医療用途等、非常に多くの数のパラメータを伴うネットワークを処理する場合に、特に有益である。このような高解像度画像は、特に、結合密度が特に高い、最後の畳み込み層と最初の全結合層との結合において、ＤＮＮのパラメータの数を著しく増大させる。これらの条件におけるデータ−モデルアプローチの実装は、関与するＧＰＵ又は他のアクセラレータのメモリ消費を減少させつつ、トレーニングプロセスの加速化をもたらす。
【００８０】
ハードウェア実装
図１３は、本発明を具現化し、ＣＮＮをトレーニングする方法を実施するために使用され得る、アクセラレータ／ノード／ＧＰＵ等のコンピューティングデバイスのブロック図である。コンピューティングデバイスは、プロセッサ９９３及びメモリ９９４を含む。任意的に、コンピューティングデバイスは、例えば、本発明の実施形態の他のコンピューティングデバイスといった他のコンピューティングデバイスと通信するためのネットワークインタフェース９９７も含む。
【００８１】
例えば、一実施形態は、それぞれがＧＰＵであるそのようなコンピューティングデバイスのネットワークから構成され得る。任意的に、コンピューティングデバイスは、キーボード及びマウス等の１つ以上の入力機構９９６、及び、１つ以上のモニタ等のディスプレイユニット９９５も含む。これらのコンポーネントは、バス９９２を介して互いに接続可能である。
【００８２】
メモリ９９４は、コンピュータ実行可能な命令を運ぶ又はデータ構造を記憶するよう構成されている単一の媒体又は複数の媒体（例えば、中央型又は分散型のデータベース並びに／又は関連するキャッシュ及びサーバ）を指し得るコンピュータ読み取り可能な媒体を含み得る。コンピュータ実行可能な命令は、例えば、汎用コンピュータ、専用コンピュータ、又は専用処理デバイス（例えば、１つ以上のプロセッサ）によりアクセス可能であり、これらに１つ以上の機能又は動作を実行させる命令及びデータを含み得る。したがって、「コンピュータ読み取り可能な記憶媒体」という用語は、マシンにより実行される命令のセットであって、マシンに本開示の方法のうちの任意の１つ以上を実行させる命令のセットを記憶する、符号化する、又は運ぶことができる任意の媒体を含み得る。したがって、「コンピュータ読み取り可能な記憶媒体」という用語は、ソリッドステートメモリ、光媒体、及び磁気媒体を含むが、これらに限定されるものではないと解釈され得る。例えば、限定ではないが、このようなコンピュータ読み取り可能な媒体は、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、電気的に消去可能なプログラム可能な読み取り専用メモリ（ＥＥＰＲＯＭ）、コンパクトディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）又は他の光ディスクストレージ、磁気ディスクストレージ又は他の磁気記憶デバイス、フラッシュメモリデバイス（例えば、ソリッドステートメモリデバイス）を含む、非一時的なコンピュータ読み取り可能な記憶媒体を含み得る。
【００８３】
プロセッサ９９３は、コンピューティングデバイスを制御し、例えば、ＣＮＮをトレーニングするために、本明細書及び特許請求の範囲に記載されている様々な異なる機能を実施するための、メモリに記憶されているコードを実行するといった処理動作を実行するよう構成されている。メモリ９９４は、プロセッサ９９３により読み込まれ書き込まれるデータを記憶する。本明細書において言及されるように、プロセッサは、マイクロプロセッサ、中央処理ユニット等の１つ以上の汎用処理デバイスを含み得る。プロセッサは、複合命令セットコンピューティング（ＣＩＳＣ）マイクロプロセッサ、縮小命令セットコンピューティング（ＲＩＳＣ）マイクロプロセッサ、超長命令語（ＶＬＩＷ）マイクロプロセッサ、又は、他の命令セットを実装しているプロセッサ若しくは命令セットの組み合わせを実装しているプロセッサを含み得る。プロセッサはまた、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタル信号プロセッサ（ＤＳＰ）、ネットワークプロセッサ等といった１つ以上の専用処理デバイスを含み得る。１つ以上の実施形態において、プロセッサは、本明細書において説明された動作及びステップを実行するための命令を実行するよう構成されている。
【００８４】
任意的なディスプレイユニット９９７は、コンピューティングデバイスにより記憶されたデータの表現を表示することができ、ユーザとコンピューティングデバイスに記憶されているプログラム及びデータとの間のインタラクションを可能にするカーソル及びダイアログボックス並びにスクリーンを表示することもできる。任意的な入力機構９９６は、ユーザが、データ及び命令をコンピューティングデバイスに入力することを可能にし得る。
【００８５】
ネットワークインタフェース（ネットワークＩ／Ｆ）９９７は、インターネット等のネットワークに接続され得、ネットワークを介して他のそのようなコンピューティングデバイスに接続可能である。ネットワークＩ／Ｆ９９７は、ネットワークを介して他の装置から／に入力／出力されるデータを制御することができる。マイクロフォン、スピーカ、プリンタ、電源ユニット、ファン、ケース、スキャナ、トラッカボール等といった他の周辺デバイスも、コンピューティングデバイスに含まれ得る。
【００８６】
本発明を具現化する方法は、図１３に示されているようなコンピューティングデバイスのネットワーク上で実行されてもよく、各デバイスは、モデルの一部をニューロンの形態で保持し、入力データをミニバッチで受信する。このようなコンピューティングデバイスは、図１３に示されている全てのコンポーネントを有する必要はなく、これらのコンポーネントのサブセットから構成されてもよい。本発明を具現化する方法は、ネットワークを介して１つ以上のデータ記憶サーバと通信する単一のコンピューティングデバイスにより実行されてもよい。
【００８７】
利点
データ−モデルアプローチは、より効率的なやり方でＤＮＮのためのデータ並列化及びモデル並列化の組み合わせを実現し、ＤＮＮのメモリ要求を減少させつつ、ＤＮＮのトレーニングを加速する。これらの利点は、最終ユーザが既存のフレームワークを使用するやり方を変更する必要がないので、完全に自動的且つトランスペアレントに最終ユーザにもたらされる。本質的に、最終ユーザは、同じ（非分散）ネットワークを定義するだけである。データ−モデルアプローチは、ユーザ介入なく、分散されている層のプロセスにおけるパラメータの分散及び修正ロジックを注意深く扱いながら、同じ期待される結果をもたらす。
【００８８】
実際、このようなメモリの減少は、高解像度画像等のより大きな入力又はさらに大きなバッチサイズをトレーニングする可能性をもたらす。トレーニング性能に関して、このアプローチは、データのみ並列化アプローチにおけるより小さな入力サイズよりも少ないトレーニング時間を必要とする一方で、単位時間当たりにより多くの画像又はさらに大きな入力サイズを処理する可能性も開く。
【００８９】
実施形態は、以下を提供することができる：
・ＤＮＮのためのデータ並列化及びモデル並列化の効率的な組み合わせを実現する方法であって、基礎となるＧＰＵ及び／又はアクセラレータにおけるより小さく非効率的なカーネルを、各ＧＰＵ／アクセラレータ及び分散されている層における１つの単一カーネルで置き換える方法。
・データ−モデル並列化設定において複数のミニバッチの統合を自動的に実行する方法であって、ミニバッチが、分散されている層の前に通信され、出力が、最後に適切に再構築される、方法。
・ユーザ介入を必要とすることなく、また、ネットワークの残りの分散されていない部分の実行に影響を及ぼすことなく（データのみ並列化）、ＤＮＮの全結合層の分散計算を自動的に実行する方法。
・分散されている層（全結合層）において分散方式でニューラルネットワークのトレーニング（順伝播及び逆伝播）及び検証の異なる段階を実行する方法。
・ネットワークの段階、すなわち、トレーニング段階又はテスト段階に応じて、全結合層の実行フローをシームレス且つトランスペアレントに分割する方法。トレーニング段階において、方法は、既存のスレッド及びＧＰＵを使用して、各ミニバッチについて層の分散計算を一度に実行する。テスト段階において、方法は、追加のスレッドを作成し、トレーニングスレッドにより、他のＧＰＵにおいて割り当てられたメモリを再使用する。両方の場合における最終結果は、非分散方式での層の実行と同等である。
【００９０】
以上の実施形態に関し、さらに以下の付記を開示する。
【００９１】
（付記１）
コンピュータにより実現される方法であって、
プロセッサ及びメモリを有する複数のＸ個のノードを含むコンピューティングネットワークにおいて、ノード１〜ノードＸの間で畳み込みニューラルネットワーク（ＣＮＮ）のニューロンを分割することと、
入力データのミニバッチを前記複数のノードの各々に割り当てることと、
前記ミニバッチを、前記複数のノードの数に対応して且つ等しい複数のＸ個のセクションに分割することと、
各ノードにおいて、当該ノードと同じ番号を有する、前記ミニバッチのセクションを保持し、前記ミニバッチの他のセクションを、対応するノードに送信することと、
各ノードにおける前記ミニバッチの前記セクションを単一の行列に配列し、配列された前記行列を、当該ノードにおける前記ニューロンで乗算して、ミニバッチ当たり出力データの１つのセクションを有する出力データを提供することと、
各ノードにおいて、他のノードに対応する、前記出力データのセクションを、対応するノードに返送し、各ノードがそのミニバッチ全体についての出力データを有するように、各ノードにおける前記出力データを結合することと、
を含む、方法。
【００９２】
（付記２）
前記方法は、前記ＣＮＮをトレーニングするために、前記ＣＮＮの全結合層における順伝播段階において使用される、付記１に記載の方法。
【００９３】
（付記３）
各ノードは、メモリ及び処理能力を含み、好ましくは、ＧＰＵを含むアクセラレータである、付記１又は２に記載の方法。
【００９４】
（付記４）
バイアス項を、結合された前記出力データに加算すること
をさらに含む、付記１乃至３のうちのいずれか一項に記載の方法。
【００９５】
（付記５）
全結合層における順伝播テスト段階において、
テスト反復を実行するメインノードにおいて、ルートソルバスレッドから新たなスレッドを作成することであって、各新たなスレッドは、異なるノードに割り当てられ、前記新たなスレッドは、他のノードにおいて保持されているニューロンパラメータのメモリアドレスにアクセスする、作成すること
をさらに含む、付記１乃至４のうちのいずれか一項に記載の方法。
【００９６】
（付記６）
前記メインノードが、前記順伝播テスト段階についての入力データを前記新たなスレッドにブロードキャストし、前記新たなスレッドが、前記新たなスレッドの全てが結合される前に、層の出力を計算すること
をさらに含む、付記５に記載の方法。
【００９７】
（付記７）
畳み込み層における逆伝播段階において、
各ノードは、そのミニバッチについての入力データ勾配を受信し、前記入力データ勾配を、該ミニバッチのセクションが処理された各ノードに送信し、
各ノードは、当該ノードにおける前記入力データ勾配を、順伝播段階からの配列されたミニバッチで乗算して、該ミニバッチの全てから、各ノードにおけるパラメータ勾配を生成する、付記１乃至６のうちのいずれか一項に記載の方法。
【００９８】
（付記８）
前記入力データ勾配は、各ノードにおいて、前記ミニバッチ全体についての前記出力データのために使用された空間に記憶される、付記７に記載の方法。
【００９９】
（付記９）
逆伝播を用いてデータ勾配を計算することであって、
各ノードは、前記ミニバッチ全体についての前記出力データを、前記パラメータ勾配で乗算して、出力データ勾配を提供し、
他のノードに対応する前記出力データ勾配は、各ノードがそのミニバッチ全体についての前記データ勾配を保持するように、対応するノードに返送される、
計算すること
をさらに含む、付記７又は８に記載の方法。
【０１００】
（付記１０）
パラメータが更新される前に、バイアスだけが、全結合層において同期される、付記１乃至９のうちのいずれか一項に記載の方法。
【０１０１】
（付記１１）
前記ＣＮＮは、深層ニューラルネットワーク（ＤＮＮ）である、付記１乃至１０のうちのいずれか一項に記載の方法。
【０１０２】
（付記１２）
畳み込みニューラルネットワーク（ＣＮＮ）のトレーニング手順を実行するための装置であって、
１つ以上の処理ノードと、
命令を記憶しているメモリであって、前記命令が前記１つ以上の処理ノードにより実行されたときに、前記命令は、前記１つ以上の処理ノードに、
複数のノード１〜ノードＸの間で前記ＣＮＮのニューロンを分割することと、
入力データのミニバッチを前記複数のノードの各々に割り当てることと、
前記ミニバッチを、前記複数のノードの数に対応して且つ等しい複数のＸ個のセクションに分割することと、
各ノードにおいて、当該ノードと同じ番号を有する、前記ミニバッチのセクションを保持し、前記ミニバッチの他のセクションを、対応するノードに送信することと、
各ノードにおける前記ミニバッチの前記セクションを単一の行列に配列し、配列された前記行列を、当該ノードにおける前記ニューロンで乗算して、ミニバッチ当たり出力データの１つのセクションを有する出力データを提供することと、
各ノードにおいて、他のノードに対応する、前記出力データのセクションを、対応するノードに返送し、各ノードがそのメモリにおいてそのミニバッチ全体についての出力データを有するように、各ノードにおける前記出力データを結合することと、
を含む動作を制御させる、メモリと、
を有する、装置。
【０１０３】
（付記１３）
コンピュータプログラムであって、前記コンピュータプログラムが１つ以上のプロセッサにより実行されたときに、前記コンピュータプログラムは、前記１つ以上のプロセッサに、
複数のノード１〜ノードＸの間で畳み込みニューラルネットワーク（ＣＮＮ）のニューロンを分割することと、
入力データのミニバッチを前記複数のノードの各々に割り当てることと、
前記ミニバッチを、前記複数のノードの数に対応して且つ等しい複数のＸ個のセクションに分割することと、
各ノードにおいて、当該ノードと同じ番号を有する、前記ミニバッチのセクションを保持し、前記ミニバッチの他のセクションを、対応するノードに送信することと、
各ノードにおける前記ミニバッチの前記セクションを単一の行列に配列し、配列された前記行列を、当該ノードにおける前記ニューロンで乗算して、ミニバッチ当たり出力データの１つのセクションを有する出力データを提供することと、
各ノードにおいて、他のノードに対応する、前記出力データのセクションを、対応するノードに返送し、各ノードがそのミニバッチ全体についての出力データを有するように、各ノードにおける前記出力データを結合することと、
を含む動作を実行させる、コンピュータプログラム。
【符号の説明】
【０１０４】
９９３  プロセッサ
９９４  メモリ
９９５  ディスプレイユニット
９９６  入力機構
９９７  ネットワークインタフェース（ネットワークＩ／Ｆ）
【図１】
2020068016.tif 000003
【図２ａ】
2020068016.tif 000004
【図２ｂ】
2020068016.tif 000005
【図３】
2020068016.tif 000006
【図４】
2020068016.tif 000007
【図５】
2020068016.tif 000008
【図６】
2020068016.tif 000009
【図７】
2020068016.tif 000010
【図８】
2020068016.tif 000011
【図９】
2020068016.tif 000012
【図１０】
2020068016.tif 000013
【図１１】
2020068016.tif 000014
【図１２】
2020068016.tif 000015
【図１３】
2020068016.tif 000016