(57)【要約】【課題】ニューラルネットワークの学習効率を向上させ、なおかつノードの処理負荷を軽減する。【解決手段】各分散処理ノード２［１］〜２［Ｎ］は、学習対象のニューラルネットワークの重み毎の分散データを重みの番号の順にパケット化して集計処理ノード１に送信し、ノード１から送信された集計データを順番に取得して、ニューラルネットワークの重みを更新する。ノード１は、送信された分散データを取得し、全分散処理ノードの分散データを重み毎に集計した集計データを重みの番号の順にパケット化して各ノード２［１］〜２［Ｎ］に送信する。各ノード２［１］〜２［Ｎ］は、送信済みの分散データと取得済みの集計データのデータ量の差である未受信データ量を監視し、未受信データ量が閾値Ｍａ以上となった場合に、分散データの送信を未受信データ量が閾値Ｍｂ（Ｍｂ＜Ｍａ）以下となるまで停止する。【選択図】  図１
2019219714.tif 000002
【特許請求の範囲】
【請求項１】
集計処理ノードとＮ個（Ｎは２以上の整数）の分散処理ノードとを備え、
各分散処理ノードは、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データＤ［ｍ，ｎ］（ｎ＝１，・・・，Ｎ）を重みｗ［ｍ］の番号ｍの順番にパケット化して前記集計処理ノードに送信し、前記集計処理ノードから送信されたパケットを受信して集計データＲ［ｍ］を番号ｍの順番に取得して、この集計データＲ［ｍ］に基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新し、
前記集計処理ノードは、各分散処理ノードから送信されたパケットを受信して分散データＤ［ｍ，ｎ］を番号ｍの順番に取得し、全分散処理ノードの分散データＤ［ｍ，ｎ］を重みｗ［ｍ］毎に集計した前記集計データＲ［ｍ］を生成して、この集計データＲ［ｍ］を番号ｍの順番にパケット化して各分散処理ノードに送信し、
各分散処理ノードは、前記集計処理ノードに前記分散データＤ［ｍ，ｎ］を送信開始してからＭ個の前記集計データＲ［ｍ］を取得し終えるまでの期間において、送信済みの分散データＤ［ｍ，ｎ］のデータ量と取得済みの集計データＲ［ｍ］のデータ量との差である未受信データ量を監視し、この未受信データ量が閾値Ｍａ以上となった場合に、前記分散データＤ［ｍ，ｎ］の送信を前記未受信データ量が閾値Ｍｂ（Ｍｂ＜Ｍａ）以下となるまで停止することを特徴とする分散処理システム。
【請求項２】
請求項１記載の分散処理システムにおいて、
各分散処理ノードは、
前記分散データＤ［ｍ，ｎ］を番号ｍの順番にパケット化して前記集計処理ノードに送信する送信部と、
前記集計処理ノードから送信されたパケットを受信して前記集計データＲ［ｍ］を番号ｍの順番に取得する受信部と、
前記集計データＲ［ｍ］に基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する重み更新処理部と、
前記集計処理ノードに前記分散データＤ［ｍ，ｎ］を送信開始してからＭ個の前記集計データＲ［ｍ］を取得し終えるまでの期間において、送信済みの分散データＤ［ｍ，ｎ］の個数Ｍｔ（ＭｔはＭ以下の正の整数）をカウントする送信カウント部と、
前記集計処理ノードに前記分散データＤ［ｍ，ｎ］を送信開始してからＭ個の前記集計データＲ［ｍ］を取得し終えるまでの期間において、取得済みの集計データＲ［ｍ］の個数Ｍｒ（ＭｒはＭ以下の正の整数）をカウントする受信カウント部と、
前記個数ＭｔとＭｒとの差である前記未受信データ量が前記閾値Ｍａ（ＭａはＭより小さい正の整数）以上となった場合に、前記送信部による前記分散データＤ［ｍ，ｎ］の送信を、前記未受信データ量が前記閾値Ｍｂ（ＭｂはＭａより小さい正の整数）以下となるまで停止させる送信制御部とを備えることを特徴とする分散処理システム。
【請求項３】
請求項１または２記載の分散処理システムにおいて、
前記集計処理ノードは、
各分散処理ノードから送信されたパケットを受信して前記分散データＤ［ｍ，ｎ］を番号ｍの順番に取得する受信部と、
全分散処理ノードの分散データＤ［ｍ，ｎ］を重みｗ［ｍ］毎に集計した前記集計データＲ［ｍ］を生成する集計処理部と、
前記集計データＲ［ｍ］を番号ｍの順番にパケット化して各分散処理ノードに送信する送信部とを備えることを特徴とする分散処理システム。
【請求項４】
請求項１乃至３のいずれか１項に記載の分散処理システムにおいて、
各分散処理ノードは、
前記ニューラルネットワークの学習用のサンプルデータが入力されたときに、前記ニューラルネットワークの重みｗ［ｍ］の各々について、前記ニューラルネットワークの損失関数の勾配をサンプルデータ毎に計算する勾配計算処理部と、
サンプルデータ毎の前記勾配を集計した数値である前記分散データＤ［ｍ，ｎ］を重みｗ［ｍ］毎に生成して保持するノード内集計処理部とを、さらに備えることを特徴とする分散処理システム。
【請求項５】
請求項１乃至４のいずれか１項に記載の分散処理システムにおいて、
前記集計処理ノードと各分散処理ノードとは、
各分散処理ノードがパケット化した分散データＤ［ｍ，ｎ］を前記集計処理ノードに送信して、前記集計処理ノードが受信したパケットから前記分散データＤ［ｍ，ｎ］を取得する集約通信処理と、前記集計処理ノードが前記集計データＲ［ｍ］を生成する全ノード集計処理と、前記集計処理ノードがパケット化した前記集計データＲ［ｍ］を各分散処理ノードに送信して、各分散処理ノードが受信したパケットから前記集計データＲ［ｍ］を取得する分配通信処理と、各分散処理ノードが前記重みｗ［ｍ］を更新する重み更新処理とを、それぞれ異なる番号ｍについて並行して行うことを特徴とする分散処理システム。
【請求項６】
Ｎ個（Ｎは２以上の整数）の分散処理ノードの各々が、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データＤ［ｍ，ｎ］（ｎ＝１，・・・，Ｎ）を重みｗ［ｍ］の番号ｍの順番にパケット化して集計処理ノードに送信する第１のステップと、
前記集計処理ノードが、各分散処理ノードから送信されたパケットを受信して前記分散データＤ［ｍ，ｎ］を番号ｍの順番に取得する第２のステップと、
前記集計処理ノードが、全分散処理ノードの分散データＤ［ｍ，ｎ］を重みｗ［ｍ］毎に集計した集計データＲ［ｍ］を生成する第３のステップと、
前記集計処理ノードが、前記集計データＲ［ｍ］を番号ｍの順番にパケット化して各分散処理ノードに送信する第４のステップと、
前記分散処理ノードの各々が、前記集計処理ノードから送信されたパケットを受信して前記集計データＲ［ｍ］を番号ｍの順番に取得する第５のステップと、
前記分散処理ノードの各々が、前記集計データＲ［ｍ］に基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する第６のステップと、
前記分散処理ノードの各々が、前記集計処理ノードに前記分散データＤ［ｍ，ｎ］を送信開始してからＭ個の前記集計データＲ［ｍ］を取得し終えるまでの期間において、送信済みの分散データＤ［ｍ，ｎ］のデータ量と取得済みの集計データＲ［ｍ］のデータ量との差である未受信データ量を監視し、この未受信データ量が閾値Ｍａ以上となった場合に、前記第１のステップによる前記分散データＤ［ｍ，ｎ］の送信を、前記未受信データ量が閾値Ｍｂ（Ｍｂ＜Ｍａ）以下となるまで停止する第７のステップとを含むことを特徴とする分散処理方法。
【請求項７】
請求項６記載の分散処理方法において、
前記第１のステップの前に、前記分散処理ノードの各々が、前記ニューラルネットワークの学習用のサンプルデータが入力されたときに、前記ニューラルネットワークの重みｗ［ｍ］の各々について、前記ニューラルネットワークの損失関数の勾配をサンプルデータ毎に計算する第８のステップと、
前記分散処理ノードの各々が、サンプルデータ毎の前記勾配を集計した数値である前記分散データＤ［ｍ，ｎ］を重みｗ［ｍ］毎に生成して保持する第９のステップとを、さらに含むことを特徴とする分散処理方法。
【請求項８】
請求項６または７記載の分散処理方法において、
前記分散処理ノードの前記第１のステップおよび前記集計処理ノードの前記第２のステップと、前記集計処理ノードの前記第３のステップと、前記集計処理ノードの前記第４のステップおよび前記分散処理ノードの前記第５のステップと、前記分散処理ノードの前記第６のステップとを、それぞれ異なる番号ｍについて並行して行うことを特徴とする分散処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、集計処理ノードと複数の分散処理ノードとを連携させてニューラルネットワークの学習を行う分散処理システムおよび分散処理方法に関するものである。
【背景技術】
【０００２】
深層学習では、多層のニューロンモデルからなる学習対象について、各ニューロンモデルの重み（前段のニューロンモデルが出力した値に乗じる係数）を、入力したサンプルデータに基づいて更新することにより、推論精度を改善する。
【０００３】
通常、推論精度を改善する手法には、ミニバッチ法が用いられている。ミニバッチ法では、サンプルデータ毎に前記重みに対する勾配を計算する勾配計算処理と、複数の異なるサンプルデータについて前記勾配を集計する（サンプルデータ毎に得られた勾配を重み別に合算する）集計処理と、各重みを前記集計された勾配に基づいて更新する重み更新処理と、を繰り返す。
【０００４】
これらの処理、特に勾配計算処理は、多数回の演算を必要とするが、推論精度を向上させるために、重みの個数や入力するサンプルデータの個数が増加すると、深層学習に要する時間が増大するという、課題がある。
【０００５】
勾配計算処理を高速化するため、分散処理の手法が用いられている。具体的には、複数の分散処理ノードを設け、各ノードは、各々異なるサンプルデータについて勾配計算処理を行う。これにより、ノード数に比例して単位時間に処理できるサンプルデータ数を増加させることが可能となるため、勾配計算処理を高速化できる（非特許文献１参照）。
【０００６】
深層学習の分散処理において、集計処理を行うためには、分散処理ノード毎に得られたデータ（分散データ）を集計処理ノードに集約するための、各分散処理ノードから集計処理ノードへの通信（集約通信）と、集計処理ノードでの全ノード集計処理と、集計処理ノードが集計したデータ（集計データ）を各分散処理ノードに転送するための、集計処理ノードから分散処理ノードへの通信（分配通信）と、が必要となる。
【０００７】
図１５に、従来技術による、深層学習の分散処理のシーケンスを示す。分散処理ノード１００［ｎ］（ｎ＝１，・・・，Ｎ）は、Iの期間においてサンプルデータ入力と勾配計算処理とノード内集計処理とを行い、分散データを集計処理ノード１０１に送信する。IIの期間では、このような各ノードからの送信が行われるが、各ノードが同時に分散データを送信するとは限らない。
【０００８】
IIIの期間では、集計処理ノード１０１が各ノードから得られた勾配を重み別に合算する全ノード集計処理を行い、IVの期間において集計データを各分散処理ノード１００［ｎ］に送信する。Vの期間では、各分散処理ノード１００［ｎ］が重み更新処理を行う。
こうして、分散処理が行われることにより、深層学習には、集約通信（II）と全ノード集計処理（III）と分配通信（IV）の各処理時間が加わる。
【０００９】
このような処理時間は、深層学習を単一ノードで実施するシステムでは不要であり、深層学習の分散処理を行う上で、処理速度を低下させる要因となっている。
近年、深層学習がより複雑な問題に適用されるようになってきており、重みの総数が増加する傾向にある。このため、分散データや集計データのデータ量が増大し、集約通信時間と分配通信時間が増大している。また、集約通信時間と分配通信時間の増大によって集計処理ノードと分散処理ノードでのデータ処理負荷も増大している。
【００１０】
このように、深層学習の分散システムは、集約通信時間と分配通信時間の増大および集計処理ノードと分散処理ノードでのデータ処理負荷の増大によって、各分散処理ノード数を増加させることにより、深層学習の高速化の効果が低下するという問題があった。図１６は、従来の分散処理システムにおける分散処理ノード数と深層学習の処理性能との関係を示しており、２００は分散処理ノード数と処理性能の理想的な関係（性能∝ノード数）を示し、２０１は分散処理ノード数と処理性能の実際の関係を示している。
【先行技術文献】
【非特許文献】
【００１１】
【非特許文献１】秋葉 拓哉，“分散深層学習パッケージ ChainerMN 公開”，プリファードインフラストラクチャー（Preferred Infrastructure），２０１７年，インターネット＜https://research.preferred.jp/2017/05/chainermn-beta-release/＞
【発明の概要】
【発明が解決しようとする課題】
【００１２】
本発明は、上記のような事情を考慮してなされたものであり、その目的は、集計処理ノードと複数の分散処理ノードとを備える分散処理システムおいて、ニューラルネットワークの学習効率を向上させ、なおかつノードの処理負荷を軽減し、効率的かつ安定に動作することができる分散処理システムおよび分散処理方法を提供することにある。
【課題を解決するための手段】
【００１３】
本発明の分散処理システムは、集計処理ノードとＮ個（Ｎは２以上の整数）の分散処理ノードとを備え、各分散処理ノードは、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データＤ［ｍ，ｎ］（ｎ＝１，・・・，Ｎ）を重みｗ［ｍ］の番号ｍの順番にパケット化して前記集計処理ノードに送信し、前記集計処理ノードから送信されたパケットを受信して集計データＲ［ｍ］を番号ｍの順番に取得して、この集計データＲ［ｍ］に基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新し、前記集計処理ノードは、各分散処理ノードから送信されたパケットを受信して分散データＤ［ｍ，ｎ］を番号ｍの順番に取得し、全分散処理ノードの分散データＤ［ｍ，ｎ］を重みｗ［ｍ］毎に集計した前記集計データＲ［ｍ］を生成して、この集計データＲ［ｍ］を番号ｍの順番にパケット化して各分散処理ノードに送信し、各分散処理ノードは、前記集計処理ノードに前記分散データＤ［ｍ，ｎ］を送信開始してからＭ個の前記集計データＲ［ｍ］を取得し終えるまでの期間において、送信済みの分散データＤ［ｍ，ｎ］のデータ量と取得済みの集計データＲ［ｍ］のデータ量との差である未受信データ量を監視し、この未受信データ量が閾値Ｍａ以上となった場合に、前記分散データＤ［ｍ，ｎ］の送信を前記未受信データ量が閾値Ｍｂ（Ｍｂ＜Ｍａ）以下となるまで停止することを特徴とするものである。
【００１４】
また、本発明の分散処理システムの１構成例において、各分散処理ノードは、前記分散データＤ［ｍ，ｎ］を番号ｍの順番にパケット化して前記集計処理ノードに送信する送信部と、前記集計処理ノードから送信されたパケットを受信して前記集計データＲ［ｍ］を番号ｍの順番に取得する受信部と、前記集計データＲ［ｍ］に基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する重み更新処理部と、前記集計処理ノードに前記分散データＤ［ｍ，ｎ］を送信開始してからＭ個の前記集計データＲ［ｍ］を取得し終えるまでの期間において、送信済みの分散データＤ［ｍ，ｎ］の個数Ｍｔ（ＭｔはＭ以下の正の整数）をカウントする送信カウント部と、前記集計処理ノードに前記分散データＤ［ｍ，ｎ］を送信開始してからＭ個の前記集計データＲ［ｍ］を取得し終えるまでの期間において、取得済みの集計データＲ［ｍ］の個数Ｍｒ（ＭｒはＭ以下の正の整数）をカウントする受信カウント部と、前記個数ＭｔとＭｒとの差である前記未受信データ量が前記閾値Ｍａ（ＭａはＭより小さい正の整数）以上となった場合に、前記送信部による前記分散データＤ［ｍ，ｎ］の送信を、前記未受信データ量が前記閾値Ｍｂ（ＭｂはＭａより小さい正の整数）以下となるまで停止させる送信制御部とを備えることを特徴とするものである。
また、本発明の分散処理システムの１構成例において、前記集計処理ノードは、各分散処理ノードから送信されたパケットを受信して前記分散データＤ［ｍ，ｎ］を番号ｍの順番に取得する受信部と、全分散処理ノードの分散データＤ［ｍ，ｎ］を重みｗ［ｍ］毎に集計した前記集計データＲ［ｍ］を生成する集計処理部と、前記集計データＲ［ｍ］を番号ｍの順番にパケット化して各分散処理ノードに送信する送信部とを備えることを特徴とするものである。
【００１５】
また、本発明の分散処理システムの１構成例において、各分散処理ノードは、前記ニューラルネットワークの学習用のサンプルデータが入力されたときに、前記ニューラルネットワークの重みｗ［ｍ］の各々について、前記ニューラルネットワークの損失関数の勾配をサンプルデータ毎に計算する勾配計算処理部と、サンプルデータ毎の前記勾配を集計した数値である前記分散データＤ［ｍ，ｎ］を重みｗ［ｍ］毎に生成して保持するノード内集計処理部とを、さらに備えることを特徴とするものである。
また、本発明の分散処理システムの１構成例において、前記集計処理ノードと各分散処理ノードとは、各分散処理ノードがパケット化した分散データＤ［ｍ，ｎ］を前記集計処理ノードに送信して、前記集計処理ノードが受信したパケットから前記分散データＤ［ｍ，ｎ］を取得する集約通信処理と、前記集計処理ノードが前記集計データＲ［ｍ］を生成する全ノード集計処理と、前記集計処理ノードがパケット化した前記集計データＲ［ｍ］を各分散処理ノードに送信して、各分散処理ノードが受信したパケットから前記集計データＲ［ｍ］を取得する分配通信処理と、各分散処理ノードが前記重みｗ［ｍ］を更新する重み更新処理とを、それぞれ異なる番号ｍについて並行して行うことを特徴とするものである。
【００１６】
また、本発明の分散処理方法は、Ｎ個（Ｎは２以上の整数）の分散処理ノードの各々が、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データＤ［ｍ，ｎ］（ｎ＝１，・・・，Ｎ）を重みｗ［ｍ］の番号ｍの順番にパケット化して集計処理ノードに送信する第１のステップと、前記集計処理ノードが、各分散処理ノードから送信されたパケットを受信して前記分散データＤ［ｍ，ｎ］を番号ｍの順番に取得する第２のステップと、前記集計処理ノードが、全分散処理ノードの分散データＤ［ｍ，ｎ］を重みｗ［ｍ］毎に集計した集計データＲ［ｍ］を生成する第３のステップと、前記集計処理ノードが、前記集計データＲ［ｍ］を番号ｍの順番にパケット化して各分散処理ノードに送信する第４のステップと、前記分散処理ノードの各々が、前記集計処理ノードから送信されたパケットを受信して前記集計データＲ［ｍ］を番号ｍの順番に取得する第５のステップと、前記分散処理ノードの各々が、前記集計データＲ［ｍ］に基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する第６のステップと、前記分散処理ノードの各々が、前記集計処理ノードに前記分散データＤ［ｍ，ｎ］を送信開始してからＭ個の前記集計データＲ［ｍ］を取得し終えるまでの期間において、送信済みの分散データＤ［ｍ，ｎ］のデータ量と取得済みの集計データＲ［ｍ］のデータ量との差である未受信データ量を監視し、この未受信データ量が閾値Ｍａ以上となった場合に、前記第１のステップによる前記分散データＤ［ｍ，ｎ］の送信を、前記未受信データ量が閾値Ｍｂ（Ｍｂ＜Ｍａ）以下となるまで停止する第７のステップとを含むことを特徴とするものである。
【００１７】
また、本発明の分散処理方法の１構成例は、前記第１のステップの前に、前記分散処理ノードの各々が、前記ニューラルネットワークの学習用のサンプルデータが入力されたときに、前記ニューラルネットワークの重みｗ［ｍ］の各々について、前記ニューラルネットワークの損失関数の勾配をサンプルデータ毎に計算する第８のステップと、前記分散処理ノードの各々が、サンプルデータ毎の前記勾配を集計した数値である前記分散データＤ［ｍ，ｎ］を重みｗ［ｍ］毎に生成して保持する第９のステップとを、さらに含むことを特徴とするものである。
また、本発明の分散処理方法の１構成例は、前記分散処理ノードの前記第１のステップおよび前記集計処理ノードの前記第２のステップと、前記集計処理ノードの前記第３のステップと、前記集計処理ノードの前記第４のステップおよび前記分散処理ノードの前記第５のステップと、前記分散処理ノードの前記第６のステップとを、それぞれ異なる番号ｍについて並行して行うことを特徴とするものである。
【発明の効果】
【００１８】
本発明によれば、各分散処理ノードが、ニューラルネットワークの重み毎の分散データを順番にパケット化して集計処理ノードに送信し、集計処理ノードから送信されたパケットに格納された集計データを順番に取得してニューラルネットワークの重みを更新し、集計処理ノードが、各分散処理ノードから送信されたパケットに格納された分散データを順番に取得し、全分散処理ノードの分散データを集計した集計データをパケット化して各分散処理ノードに送信することにより、各分散処理ノードから集計処理ノードに分散データを送信する処理と、集計処理ノードから各分散処理ノードに集計データを送信する処理とを同時に行うことができ、効果的な分散処理を行うことができるので、ニューラルネットワークの学習効率を向上させることができる。さらに、本発明では、各分散処理ノードが、送信済みの分散データのデータ量と取得済みの集計データのデータ量との差である未受信データ量を監視し、この未受信データ量が閾値Ｍａ以上となった場合に、分散データの送信を未受信データ量が閾値Ｍｂ以下となるまで停止することにより、集計処理ノードへの過渡的な分散データ集中を抑制することで集計処理ノードに対する過渡的な処理負荷を分散でき、効果的でさらに安定な分散処理を行うことができるので、ニューラルネットワークの学習効率および安定度を向上させることができる。
【図面の簡単な説明】
【００１９】
【図１】図１は、本発明の第１の実施例に係る深層学習用分散処理システムの構成例を示すブロック図である。
【図２】図２は、本発明の第１の実施例に係る深層学習用分散処理システムの分散処理ノードの構成例を示すブロック図である。
【図３】図３は、本発明の第１の実施例に係る分散処理ノードのサンプルデータ入力処理と勾配計算処理とノード内集計処理を説明するフローチャートである。
【図４】図４は、本発明の第１の実施例に係る分散処理ノードの集約通信処理を説明するフローチャートである。
【図５】図５は、本発明の第１の実施例に係る集計処理ノードの集約通信処理を説明するフローチャートである。
【図６】図６は、本発明の第１の実施例に係る集計処理ノードの全ノード集計処理を説明するフローチャートである。
【図７】図７は、本発明の第１の実施例に係る集計処理ノードの分配通信処理を説明するフローチャートである。
【図８】図８は、本発明の第１の実施例に係る分散処理ノードの分配通信処理を説明するフローチャートである。
【図９】図９は、本発明の第１の実施例に係る分散処理ノードの未受信データ量の推移を示す図である。
【図１０】図１０は、本発明の第１の実施例に係る分散処理ノードの送信制御部の動作を説明するフローチャートである。
【図１１】図１１は、本発明の第１の実施例に係る分散処理ノードの重み更新処理を説明するフローチャートである。
【図１２】図１２は、本発明の第１の実施例に係る集計処理ノードと分散処理ノードの処理のシーケンスを示す図である。
【図１３】図１３は、本発明の第１の実施例における分散処理ノードの送信制御の効果を説明する図である。
【図１４】図１４は、本発明の第２の実施例に係る集計処理ノードの構成例を示すブロック図である。
【図１５】図１５は、従来の深層学習の分散処理のシーケンスを示す図である。
【図１６】図１６は、従来の分散処理システムにおける分散処理ノード数と深層学習の処理性能との関係を示す図である。
【発明を実施するための形態】
【００２０】
［第１の実施例］
以下、本発明の実施例について図面を参照して説明する。図１は本発明の第１の実施例に係る深層学習用分散処理システムの構成例を示すブロック図である。図１の分散処理システムは、１個の集計処理ノード１と、ニューラルネットワークのサンプルデータ（学習データ）の集合毎に設けられたＮ個（Ｎは２以上の整数）の分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）とを備える。各分散処理ノード２［ｎ］は、双方向の通信が可能なネットワーク３により、集計処理ノード１と接続されている。
【００２１】
なお、本発明において、「ノード」とは、ネットワーク上に分散配置されているサーバ等の機器を意味する。また、ネットワーク３は、集計処理ノード１を頂点に、分散処理ノード２［ｎ］がツリー状に接続された１対多の接続構成として描かれているが、特にツリー構造に限定されるものではなく、集計処理ノード１と分散処理ノード２［ｎ］とが直接、間接を問わず双方向の通信が可能であれば、どのような構成のネットワークであってもよいことは言うまでもない。
【００２２】
図２は分散処理ノード２［ｎ］の構成例を示すブロック図である。各分散処理ノード２［ｎ］は、それぞれ図示しないデータ収集ノードから学習用のサンプルデータを受け取るサンプル入力部２０と、サンプルデータが入力されたときに、ニューラルネットワークの重みの各々について、ニューラルネットワークの損失関数の勾配をサンプルデータ毎に計算する勾配計算処理部２１と、サンプルデータ毎の勾配を集計した数値である分散データを重み毎に生成して保持するノード内集計処理部２２と、分散データをパケット化して集計処理ノード１に送信する送信部２３と、集計処理ノード１から送信されたパケットを受信して集計データを取得する受信部２４と、集計データに基づいてニューラルネットワークの重みを更新する重み更新処理部２５と、ソフトウェア的に構築された数学モデルであるニューラルネットワーク２６と、送信部２３に内包され、送信部２３の送信済みの分散データのデータ量（個数）をカウントする送信カウント部２７と、受信部２４に内包され、受信部２４の取得済みの集計データのデータ量（個数）をカウントする受信カウント部２８と、送信済みの分散データのデータ量と取得済みの集計データのデータ量との差である未受信データ量を監視し、この未受信データ量が閾値Ｍａ以上となった場合に、分散データの送信を未受信データ量が閾値Ｍｂ（Ｍｂ＜Ｍａ）以下となるまで停止する送信制御部２９とを備えている。
【００２３】
図３は分散処理ノード２［ｎ］のサンプルデータ入力処理と勾配計算処理とノード内集計処理を説明するフローチャートである。各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）のサンプル入力部２０は、図示しないデータ収集ノードから異なるＳ個（Ｓは２以上の整数）のサンプルデータｘ［ｎ，ｓ］（ｓ＝１，・・・，Ｓ）をミニバッチ毎に入力する（図３ステップＳ１００）。
【００２４】
なお、本発明は、データ収集ノードによるサンプルデータの収集方法、および収集したサンプルデータをＮ個の集合に振り分けて各分散処理ノード２［ｎ］へ分配する方法に限定されるものではなく、これらの方法の如何を問わず適用が可能である。
【００２５】
各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）の勾配計算処理部２１は、サンプルデータｘ［ｎ，ｓ］が入力されたとき、学習対象のニューラルネットワーク２６のＭ個（Ｍは２以上の整数）の重みｗ［ｍ］（ｍ＝１，・・・，Ｍ）の各々について、ニューラルネットワーク２６の損失関数の勾配Ｇ［ｍ，ｎ，ｓ］をサンプルデータｘ［ｎ，ｓ］毎に計算する（図３ステップＳ１０１）。
【００２６】
ニューラルネットワーク２６を各分散処理ノード２［ｎ］にソフトウェアで構築する方法、ニューラルネットワーク２６の重みｗ［ｍ］、ニューラルネットワーク２６の性能の悪さを示す指標である損失関数、および損失関数の勾配Ｇ［ｍ，ｎ，ｓ］については周知の技術であるので、詳細な説明は省略する。
【００２７】
続いて、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）のノード内集計処理部２２は、サンプルデータ毎の勾配Ｇ［ｍ，ｎ，ｓ］を集計した数値である分散データＤ［ｍ，ｎ］を、重みｗ［ｍ］毎に生成して保持する（図３ステップＳ１０２）。分散データＤ［ｍ，ｎ］の計算式は以下のとおりである。
【００２８】
【数１】
2019219714.tif 000003
【００２９】
なお、勾配計算処理部２１による勾配計算処理とノード内集計処理部２２によるノード内集計処理とは、サンプルデータ単位でパイプライン化する（あるサンプルデータに対して勾配計算処理を行うと同時にその一つ前のサンプルデータから得た勾配を集計するノード内集計処理とを同時に実行する）ことができる。
【００３０】
図４は分散処理ノード２［ｎ］の集約通信処理を説明するフローチャートである。各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）の送信部２３は、重みｗ［ｍ］毎の分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］の番号ｍの順番にパケット化して集計処理ノード１に送信する集約通信を行う。また、集約通信パケット送信では、集約通信パケット送信完までの間、分散データＤ［ｍ，ｎ］の振り分けが完了後、送信開始されてからの送信済みの分散データＤ［ｍ，ｎ］の数Ｍｔをカウントする。
【００３１】
このとき、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）の送信部２３は、保持するＭ個の分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を、Ｌｇ（Ｌｇは１以上Ｍ未満の整数）個ずつＰｇ個（Ｐｇは２以上の整数）の集約通信パケットに振り分けて（図４ステップＳ１０３）、全ての集約通信パケットを送信し終えるまで（図４ステップＳ１０６においてＹＥＳ）、Ｐｇ個の集約通信パケットを順番に集計処理ノード１に送信する（図４ステップＳ１０４）。すなわち、ｐ番目（ｐ＝１，・・・，Ｐｇ）に送信する集約通信パケットＳＰ［ｐ，ｎ］には、Ｌｇ個の分散データＤ［ｉ，ｎ］（ｉ＝Ｌｇ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌｇ）が格納される。
【００３２】
なお、ＭがＬｇで割り切れない条件では、Ｐｇ個目の集約通信パケットＳＰ［Ｐｇ，ｎ］には、（Ｍ−Ｌｇ×（Ｐｇ−１））個の分散データＤ［ｉ，ｎ］（ｉ＝Ｌｇ×（Ｐｇ−１）＋ｑ、ｑ＝１，・・・，Ｍ−Ｌｇ×（Ｐｇ−１））が格納される。
Ｐｇ番目の集約通信パケットＳＰ［Ｐｇ，ｎ］については、（Ｍ−Ｌｇ×（Ｐｇ−１））個の分散データＤ［ｉ，ｎ］の後に、｛Ｌｇ−（Ｍ−Ｌｇ×（Ｐｇ−１））｝個のダミーの数値を追加し、全ての集約通信パケットが等しくＬｇ個のデータを格納するようにしてもよい。
【００３３】
また、上記のとおり、送信部２３内の送信カウント部２７は、１番目の集約通信パケットＳＰ［１，ｎ］の送信開始からＰｇ個の全ての集約通信パケットＳＰ［ｐ，ｎ］の送信完了までの間（ステップＳ１０６においてＹＥＳ）、送信済みの分散データＤ［ｍ，ｎ］の数Ｍｔをカウントする（図４ステップＳ１０５）。
ｐ番目の集約通信パケットＳＰ［ｐ，ｎ］を送信した時点では、送信開始からｐ×Ｌｇ個の分散データＤ［ｍ，ｎ］を送信していることになるため、Ｍｔの値はｐ×Ｌｇである。なお、送信カウント部２７は、Ｐｇ個全ての集約通信パケットＳＰ［ｐ，ｎ］を送信した時点では、ｐ×Ｌｇの値に関わらずＭｔ＝Ｍとする。
【００３４】
図５は集計処理ノード１の集約通信処理を説明するフローチャートである。集約通信において、集計処理ノード１は、各分散処理ノード２［ｎ］が送信した各集約通信パケットＳＰ［ｐ，ｎ］（ｐ＝１，・・・，Ｐｇ）を受信する（図５ステップＳ２００）。
【００３５】
集計処理ノード１は、受信した集約通信パケットＳＰ［ｐ，ｎ］から、分散処理ノード２［ｎ］が保持していたＬｇ個の分散データＤ［ｉ，ｎ］（ｉ＝Ｌｇ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌｇ）を取得する（図５ステップＳ２０１）。
【００３６】
このように、集計処理ノード１は、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）が保持していた分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］の番号ｍの順番に取得することができる。
【００３７】
図６は集計処理ノード１の全ノード集計処理を説明するフローチャートである。集計処理ノード１は、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）から重みｗ［ｍ］の分散データＤ［ｍ，ｎ］を取得し終えた後に（図６ステップＳ２０２においてＹＥＳ）、取得した全分散処理ノード２［ｎ］の分散データＤ［ｍ，ｎ］を重みｗ［ｍ］毎に集計する全ノード集計処理を行い、集計データＲ［ｍ］を生成する（図６ステップＳ２０３）。集計データＲ［ｍ］の計算式は、以下のとおりである。
【００３８】
【数２】
2019219714.tif 000004
【００３９】
このように、集計処理は、番号ｍの順番に取得した分散データＤ［ｍ，ｎ］に基づいて、集計データＲ［ｍ］を計算する処理である。このため、集計処理ノード１は、番号ｍの順番に集計データＲ［ｍ］を生成することができる。
【００４０】
図７は集計処理ノード１の分配通信処理を説明するフローチャートである。集計処理ノード１は、重みｗ［ｍ］毎の集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］の番号ｍの順番にパケット化して各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）に送信する分配通信を行う。
【００４１】
このとき、集計処理ノード１は、Ｍ個の集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を、Ｌｓ個（Ｌｓは１以上Ｍ未満の整数）ずつＰｓ個（Ｐｓは２以上の整数）の分配通信パケットに振り分けて（図７ステップＳ２０４）、全ての分配通信パケットを送信し終えるまで（図７ステップＳ２０６においてＹＥＳ）、Ｐｓ個の分配通信パケットを順番に各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）に送信する（図７ステップＳ２０５）。すなわち、分散処理ノード２［ｎ］に向けてｐ番目（ｐ＝１，・・・，Ｐｓ）に送信する分配通信パケットＤＰ［ｐ，ｎ］には、Ｌｓ個の集計データＲ［ｊ］（ｊ＝Ｌｓ×（ｐ−１）＋ｋ、ｋ＝１，・・・，Ｌｓ）が格納される。
【００４２】
なお、ＭがＬｓで割り切れない条件では、Ｐｓ個目の分配通信パケットＤＰ［Ｐｓ，ｎ］には、（Ｍ−Ｌｓ×（Ｐｓ−１））個の集計データＲ［ｊ］（ｊ＝Ｌｓ×（Ｐｓ−１）＋ｏ、ｏ＝１，・・・，Ｍ−Ｌｓ×（Ｐｓ−１））が格納される。
Ｐｓ番目の分配通信パケットＤＰ［Ｐｓ，ｎ］については、（Ｍ−Ｌｓ×（Ｐｓ−１））個の集計データＲ［ｊ］の後に、｛Ｌｓ−（Ｍ−Ｌｓ×（Ｐｓ−１））｝個のダミーの数値を追加し、全ての分配通信パケットが等しくＬｓ個のデータを格納するようにしてもよい。
【００４３】
図８は分散処理ノード２［ｎ］の分配通信処理を説明するフローチャートである。分配通信において、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）の受信部２４は、集計処理ノード１が送信した各分配通信パケットＤＰ［ｐ，ｎ］（ｐ＝１，・・・，Ｐｓ）を順番に受信する（図８ステップＳ１０７）。
【００４４】
そして、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）の受信部２４は、受信した分配通信パケットＤＰ［ｐ，ｎ］から、集計処理ノード１が生成したＬｓ個の集計データＲ［ｊ］（ｊ＝Ｌｓ×（ｐ−１）＋ｋ、ｋ＝１，・・・，Ｌｓ）を取得する（図８ステップＳ１０８）。また、受信部２４の受信カウント部２８は、１番目の分配通信パケットＤＰ［１，ｎ］の受信開始からＭ個の全ての集計データの取得完了までの間（図８ステップＳ１１０においてＹＥＳ）、取得済みの集計データＲ［ｍ］の数Ｍｒをカウントする（図８ステップＳ１０９）。
【００４５】
このように、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）は、集計処理ノード１が生成した集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］の番号ｍの順番に取得することができる。
【００４６】
ｐ番目の分配通信パケットＤＰ［ｐ，ｎ］から集計データＲ［ｍ］を取得した時点では、取得開始からｐ×Ｌｓ個の集計データＲ［ｊ］を受信していることになるため、Ｍｒの値はｐ×Ｌｓである。なお、受信カウント部２８は、Ｐｓ個全ての分配通信パケットＤＰ［ｐ，ｎ］を受信した時点では、ｐ×Ｌｓの値に関わらずＭｒ＝Ｍとする。
【００４７】
なお、集計処理ノード１がｐ番目に送信する分配通信パケットＤＰ［ｐ，ｎ］には、全ての分散処理ノード２［ｎ］に関して同じ集計データＲ［ｊ］（ｊ＝Ｌｓ×（ｐ−１）＋ｋ、ｋ＝１，・・・，Ｌｓ）が格納されている。したがって、分配通信パケットＤＰ［ｐ，ｎ］の宛先を指定する必要がない場合（例えば図１のように分散処理ノード別に経路が異なる場合や、全分散処理ノード宛にマルチキャストできるネットワークを介する場合）は、全ての分散処理ノード２［ｎ］に同じ分配通信パケットＤＰ［ｐ］を送信してもよい。
【００４８】
以上説明した集計処理ノード１と各分散処理ノード２［ｎ］との間の一連の処理において、各分散処理ノード２［ｎ］の送信制御部２９の役割について説明する。図９は分散処理ノード２［ｎ］の未受信データ量の推移を示す図、図１０は送信制御部２９の動作を説明するフローチャートである。図９の縦軸は未受信データ量Ｍｄ、横軸はモニタ時間ｔである。なお、未受信データ量Ｍｄは、送信カウント部２７と受信カウント部２８のカウント値の差（Ｍｔ−Ｍｒ）、あるいは（Ｍｔ−Ｍｒ）と等価な量である。
【００４９】
この図９の例では、モニタ時間ｔａの経過後、例えば複数の分散処理ノード２［ｎ］から集計処理ノード１への過渡的なデータ集中によって集計処理ノード１で処理遅延が発生したとする。この処理遅延を契機に集計処理ノード１から各分散処理ノード２［ｎ］への分配通信パケットＤＰ［ｐ，ｎ］の送信速度が遅くなり、分散処理ノード２［ｎ］の未受信データ量、すなわち、送信カウント部２７と受信カウント部２８のカウント値の差Ｍｄ＝Ｍｔ−Ｍｒが増大する。
【００５０】
このような処理遅延が引き続き発生する状況において、未受信データ量Ｍｄが予め定められた送信停止閾値Ｍａ（ＭａはＭより小さい正の整数）以上になると（図１０ステップＳ１１１においてＹＥＳ）、分散処理ノード２［ｎ］の送信制御部２９は、自ノードの送信部２３に対して送信停止指示を発行する（図１０ステップＳ１１２）。この送信停止指示の発行により、分散処理ノード２［ｎ］からの集約通信パケットＳＰ［ｐ，ｎ］の送信（図４のステップＳ１０４）が停止する。例えば図９の例では、モニタ時間ｔｂにおいて未受信データ量Ｍｄが送信停止閾値Ｍａ以上となり、集約通信パケットＳＰ［ｐ，ｎ］の送信が停止する。
【００５１】
集計処理ノード１からは送信が遅れていた分配通信パケットＤＰ［ｐ，ｎ］が送られてくるので、集約通信パケットＳＰ［ｐ，ｎ］の送信停止を契機に、未受信データ量Ｍｄは減少していく。未受信データ量Ｍｄが予め定められた送信再開閾値Ｍｂ（ＭｂはＭａより小さい正の整数）以下になると（図１０ステップＳ１１３においてＹＥＳ）、送信制御部２９は、自ノードの送信部２３に対して送信再開指示を発行する（図１０ステップＳ１１４）。この送信再開指示の発行により、分散処理ノード２［ｎ］からの集約通信パケットＳＰ［ｐ，ｎ］の送信（図４のステップＳ１０４）が再開される。例えば図９の例では、モニタ時間ｔｃにおいて未受信データ量Ｍｄが送信再開閾値Ｍｂ以下となり、集約通信パケットＳＰ［ｐ，ｎ］の送信が再開される。
【００５２】
なお、処理遅延が発生するケースとして集計処理ノード１への過渡的なデータ集中を述べたが、より詳細に多くの例を挙げれば、分散処理ノード２［ｎ］内、あるいは、分散処理ノード２［ｎ］と集計処理ノード１間、あるいは、集計処理ノード１内のそれぞれにおいて、単一あるいは複合的な要因、すなわち、PCI Expressなどのインタフェースでの転送処理、入出力間の転送レート速度差、クロック速度差などを吸収するパケットバッファへのパケット蓄積による遅延、あるいは、メモリからデータを取得する際のメモリ帯域律速による処理遅延など、さまざまな要因で処理遅延が生じる。本実施例の構成では、このような処理遅延となるあらゆる範囲に適応できる。
【００５３】
また、本実施例の構成が採用されていない場合、集計処理ノード１のパケットバッファに集約通信パケットを蓄積できなくなる程の処理遅延が生じ、バッファあふれによるフレーム欠損が生じて、欠損したフレームが原因で処理が停止したり、誤った結果が得られたりする可能性がある。しかし、本実施例の構成であれば、未受信データ量Ｍｄの大きさに応じて分散処理ノード２［ｎ］において送信制御を行うので、集計処理ノード１のパケットバッファでのパケット欠損が発生する前に分散処理ノード２［ｎ］の送信を停止することができる。その結果、パケット欠損をなくすことができ、集計処理ノード１の処理停止や誤った結果が出るといった不安定な動作による再計算などによる処理遅延を回避することが可能となり、効率的かつ安定な処理動作が可能となる。
【００５４】
図１１は分散処理ノード２［ｎ］の重み更新処理を説明するフローチャートである。各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）の重み更新処理部２５は、集計処理ノード１から重みｗ［ｍ］の集計データＲ［ｍ］を取得し終えた後に（図１１ステップＳ１１５においてＹＥＳ）、取得した集計データＲ［ｍ］に基づいて、それぞれ自ノード内のニューラルネットワーク２６の重みｗ［ｍ］を更新する重み更新処理を行う（図１１ステップＳ１１６）。
【００５５】
重み更新処理においては、集計データＲ［ｍ］が示す、損失関数の勾配に基づいて損失関数が最小になるように重みｗ［ｍ］を番号ｍ毎に更新すればよい。重みｗ［ｍ］の更新は周知の技術であるので、詳細な説明は省略する。
【００５６】
このように、重み更新処理は、重みｗ［ｍ］の番号ｍの順番に取得した集計データＲ［ｍ］に基づいて、重みｗ［ｍ］を更新する処理である。このため、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）は、重みｗ［ｍ］に対する重み更新処理を、番号ｍの順番に行うことができる。
【００５７】
重み更新処理の終了により、１回のミニバッチ学習が終了し、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）と集計処理ノード１とは、更新された重みに基づき、次のミニバッチ学習の処理を継続して行う。すなわち、各分散処理ノード２［ｎ］は、次のミニバッチ学習用のサンプルデータを図示しないデータ収集ノードから受け取り、上記で説明したミニバッチ学習の処理を繰り返すことにより、ニューラルネットワーク２６の推論精度を向上させる。
【００５８】
なお、ミニバッチ学習の繰り返しの終了は、（Ａ）ミニバッチ学習の回数が予め指定された値に到達した場合、（Ｂ）ニューラルネットワーク２６の推論精度（例えば正答が既知の問題をニューラルネットワーク２６に推論処理させたときの正答率）が予め指定された閾値を超過した場合、（Ｃ）ニューラルネットワーク２６の推論精度の向上が停止した場合（予め指定されたミニバッチ学習の回数を繰り返したときに推論精度の上昇が予め指定された閾値を下回った場合）、（Ｄ）あるいは、（Ａ）〜（Ｃ）のうち少なくとも２つの場合の組み合わせが発生した場合、とする。このようなミニバッチ学習の繰り返しの終了は、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）が個別に判断してもよいし、集計処理ノード１が総合的に判断してもよい。
【００５９】
ここから図１２を用いて、まず集約通信処理、全ノード集計処理、分配通信処理、および重み更新処理で構成されるシーケンスとその効果を説明し、その後、図１３を用いて、本実施例の分散処理ノード２［ｎ］の送信制御（送信停止、送信再開）による新たな効果を説明する。
【００６０】
図１２に、集計処理ノード１と分散処理ノード２［ｎ］の処理のシーケンスを示す。上記のように、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）は、Ｍ個の分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を重みｗ［ｍ］の番号ｍの順番にパケット化して集計処理ノード１に送信し、集計処理ノード１は、Ｍ個の分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を番号ｍの順番に取得する、という集約通信処理を行う。
【００６１】
さらに、集計処理ノード１は、重みｗ［ｍ］の番号ｍの順番に取得したＭ個の分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）に基づき、集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ））を番号ｍの順番に生成する全ノード集計処理を行う。
【００６２】
さらに、集計処理ノード１は、重みｗ［ｍ］の番号ｍの順番に生成したＭ個の集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を番号ｍの順番にパケット化して各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）に送信し、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）は、Ｍ個の集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を番号ｍの順番に取得する、という分配通信処理を行う。
【００６３】
さらに、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）は、番号ｍの順番に取得したＭ個の集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）に基づき、Ｍ個の重みｗ［ｍ］を番号ｍの順番に更新する重み更新処理を行う。
【００６４】
本実施例では、集約通信処理と全ノード集計処理と分配通信処理と重み更新処理とを、並行してほぼ同時に（パイプラインで）行うことが可能であり、各通信や各処理が終了するまで、次の処理を開始できなかった従来技術によるシーケンス（図１５）と比較したとき、処理時間の大幅な短縮が可能となる。
【００６５】
すなわち、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）の送信部２３と集計処理ノード１とがＭ個の重みｗ［ｍ］の内のある重みｗ［ｍ］の分散データＤ［ｍ，ｎ］について図４、図５で説明した集約通信処理を行っているときに、集約通信処理中の重みｗ［ｍ］よりも番号ｍの小さい重みｗ［ｍ］の取得済みの分散データＤ［ｍ，ｎ］について集計処理ノード１が図６で説明した全ノード集計処理を行い、全ノード集計処理中の重みｗ［ｍ］よりも番号ｍの小さい重みｗ［ｍ］の集計処理済みの集計データＲ［ｍ］について集計処理ノード１と各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）の受信部２４とが図７、図８で説明した分配通信処理を行い、分配通信処理中の重みｗ［ｍ］よりも番号ｍの小さい重みｗ［ｍ］の取得済みの集計データＲ［ｍ］に基づき各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）の重み更新処理部２５が図１１で説明した重み更新処理を行う。
【００６６】
したがって、例えば、集約通信処理と全ノード集計処理と分配通信処理と重み更新処理のそれぞれで時間Ｔを要する場合、従来技術では、これらの全ての処理を終えるのに４Ｔの時間を要したが、本実施例ではＴ＋αの時間で済む。ここで、前記αは、任意の分散処理ノード２［ｎ］が任意の分散データＤ［ｍ，ｎ］を集計処理ノード１に送信した時点から重みｗ［ｍ］の更新が完了するまでの遅延時間である。本実施例では、重みｗ［ｍ］の番号ｍの単位で処理をパイプライン化しているため、時間αはＴと比較すると十分に小さい時間である。したがって、本実施例では、従来技術と比較して、集約通信処理と全ノード集計処理と分配通信処理と重み更新処理とに要する時間を、約１／４に短縮することが可能である。
【００６７】
次に、本実施例の分散処理ノード２［ｎ］の送信制御（送信停止、送信再開）による効果を説明する。図１２の動作説明では、集計処理ノード１の処理遅延による影響、すなわち、分散処理ノード２［ｎ］において未受信データが発生する際のシーケンス動作への影響を考慮していない。
【００６８】
図１３は、集計処理ノード１において処理遅延が生じ、分散処理ノード２［ｎ］が送信制御を行った場合の分散処理ノード２［ｎ］と集計処理ノード１間での通信を示している。この図１３の例では、Ｍ＝２０、Ｌｇ＝Ｌｓ＝１、Ｍａ＝８、Ｍｂ＝６としている。すなわち、分散処理ノード２［ｎ］から集計処理ノード１への矢印１３０の１本１本が示す各集約通信パケットにデータ量が１の分散データが含まれ、集計処理ノード１から分散処理ノード２［ｎ］への矢印１３１の１本１本が示す各分配通信パケットにデータ量が１の集計データが含まれていることになる。
【００６９】
図１３の例では、分散処理ノード２［ｎ］から集約通信パケットが連続して送信され、２番目の集約通信パケットが集計処理ノード１で受信されるタイミングで、集計処理ノード１から分散処理ノード２［ｎ］へ１番目の分配通信パケットが送信され、さらに続けて２番目の分配通信パケットが送信されている。しかし、３番目の集約通信パケットが集計処理ノード１で受信されてからは、集計処理ノード１の負荷が高くなったため、３番目の分配通信パケットの送信が遅れている。一方で、集計処理ノード１での処理が遅延しているのとは対照的に、分散処理ノード２［ｎ］からは、１０番目までの集約通信パケットが連続して送信されている。
【００７０】
ここで、分散処理ノード２［ｎ］の送信カウント部２７と受信カウント部２８のカウント値Ｍｔ，Ｍｒに着目すると、分散処理ノード２［ｎ］から７番目の集約通信パケットを送信した直後の時点では、集計処理ノード１からの分配通信パケットが到着していないため、未受信データ量Ｍｄ＝Ｍｔ−Ｍｒは、集約通信パケットの送信毎に初期値のＭｄ＝１（１×Ｌｇ）からＭｄ＝７（７×Ｌｇ）まで増大する。分散処理ノード２［ｎ］から８番目の集約通信パケットが送信された際に、集計処理ノード１から送信された分配通信パケットが到着するが、この状況では、未受信データ量はＭｄ＝Ｍｔ−Ｍｒ＝８−１で、７のままである。
【００７１】
上記で説明したとおり、集計処理ノード１からは２番目の分配通信パケットまでは連続的に送信されるが、３番目の分配通信パケットの送信は図１３の矢印１３２で示す処理遅延で遅れていた。この場合、分散処理ノード２［ｎ］から９番目の集約通信パケットが送信された時点では、未受信データ量Ｍｄは７のままであるが、図１３のｔ１のタイミングで分散処理ノード２［ｎ］から１０番目の集約通信パケットが送信されると、集計処理ノード１から３番目の分配通信パケットが到着していないために、未受信データ量Ｍｄは１つカウントアップし、Ｍｄ＝８となる。
【００７２】
未受信データ量Ｍｄが送信停止閾値Ｍａ＝８に到達したため、分散処理ノード２［ｎ］の送信制御部２９から送信部２３に対して送信停止指示が発行され、分散処理ノード２［ｎ］の集約通信パケット送信が停止する。
【００７３】
分散処理ノード２［ｎ］からの集約通信パケットの送信が停止してから暫くすると、遅れて集計処理ノード１から送信された３番目の分配通信パケットが分散処理ノード２［ｎ］に到達する。これにより、未受信データ量Ｍｄ＝７となる。集計処理ノード１から４番目の分配通信パケットが送信されるタイミングでは、分散処理ノード２［ｎ］の送信停止によって集約通信パケットが集計処理ノード１に届かず、集計処理ノード１での処理が軽くなっている。このため、集計処理ノード１から分配通信パケットが連続送信される。図１３のｔ２のタイミングで４番目の分配通信パケットを分散処理ノード２［ｎ］が受信すると、未受信データ量Ｍｄが１つカウントダウンされ、Ｍｄ＝６となる。
【００７４】
未受信データ量Ｍｄが送信再開閾値Ｍｂ＝６に到達したため、分散処理ノード２［ｎ］の送信制御部２９から送信部２３に対して送信再開指示が発行され、集約通信パケットの送信が再開される。１０番目の集約通信パケットを送信した時点で送信停止していたため、１１番目の集約通信パケットから送信が再開される。送信再開後、集計処理ノード１からの分配通信パケットが到着するので、未受信データ量はＭｄ＝Ｍｔ−Ｍｒ＝７−１で、６のままである。このような状態が１９番目の集約通信パケットが送信されるまで続き、Ｍｄ＝６のままとなる。
【００７５】
一方、集計処理ノード１に到着する集約通信パケットに着目すると、送信再開後、１１番目から１９番目の集約通信パケットまで連続的に集計処理ノード１へ到着する。特に１１番目から１３番目の集約通信パケットの受信と同時に、集計処理ノード１から分配通信パケットが送信されている。この状況で再び集計処理ノード１の負荷が重くなり、分配通信パケット送信の遅延が発生する。すなわち、１３番目の分配通信パケットが集計処理ノード１から送信された後、次の１４番目の分配通信パケットの送信が図１３の矢印１３３で示す処理遅延で遅れる。
【００７６】
この処理遅延によって、分散処理ノード２［ｎ］から２０番目の集約通信パケットが送信されたタイミングで、集約処理ノード１からの分配通信パケットが遅延により届かなくなる。図１３のケースでは、Ｍ＝２０であり、ｔ３のタイミングで分散処理ノード２［ｎ］から２０番目の集約通信パケットを送信して、送信が全て完了したため、未受信データ量Ｍｄに関わらず、分散処理ノード２［ｎ］からの送信は停止する。
【００７７】
さらに、集計処理ノード１からの１４番目の分配通信パケットの送信後、図１３の矢印１３４で示す処理遅延が発生した場合、１５番目の分配通信パケットが集計処理ノード１から遅れて送信される。既に分散処理ノード２［ｎ］から集計処理ノード１への集約通信パケット送信が完了しているので、集計処理ノード１の負荷は軽くなっており、集約処理ノード１は、処理遅延の解消後に１５番目から２０番目まで連続的に分配通信パケットを送信する。２０番目の分配通信パケットを分散処理ノード２［ｎ］が受信した時点で、未受信データ量Ｍｄ＝０となる。
【００７８】
なお、集計処理ノード１からＰｓ＝２０個の分配通信パケットを受信して、Ｍ＝２０個の集計データＲ［ｍ］を取得し終えた時点で（図８ステップＳ１１０においてＹＥＳ）、分散処理ノード２［ｎ］の送信カウント部２７と受信カウント部２８とは、それぞれカウント値Ｍｔ，Ｍｒを０に初期化する。これにより、未受信データ量Ｍｄも０となり、送信カウント部２７と受信カウント部２８とは、次のミニバッチでのデータの集約送信開始の待機状態となる。
【００７９】
以上説明したように、本実施例では、分散処理ノード２［ｎ］において、送信データ量と受信データ量の差、すなわち、分散処理ノード２［ｎ］で未受信データ量Ｍｄを監視し、送信を制御することによって、集計処理ノード１への過渡的な負荷を低減し、安定した処理が可能となる。
【００８０】
なお、集計処理ノード１の負荷が重くなることについて、さらに詳細に説明すると、例えば、集計処理ノード１の処理にソフトウェアが介在する際には、大量の処理によってＣＰＵ（Central Processing Unit）が逼迫することによって、処理遅延が発生する。また、ハードウェア的に集約通信パケットを処理する場合、ハードウェア処理の前に一時的に受信バッファ、いわゆるＦＩＦＯ（First In,First Out）のようなメモリにパケットを保存する際、ＦＩＦＯの深さ（メモリサイズ）が有限のために、バッファ溢れが起きて処理すべきパケットが消失してしまい、集計処理ノード１の負荷が重くなる。
【００８１】
このような集計処理ノード１の負荷が重くなる問題を解決するために、未受信データ量Ｍｄが増えたときに、分散処理ノード２［ｎ］からの送信を停止し、集計処理ノード１のＣＰＵの負荷増大やＦＩＦＯのバッファ溢れによるパケット消失を防止することによって安定な処理を実現することが可能となる。
【００８２】
なお、上記の説明では、集約通信パケットを受信する集計処理ノード１の受信バッファでのバッファ溢れの問題について説明しているが、本実施例は、受信バッファに限らず、ハードウェア的なパケット処理でボトルネックとなる全ての部分、例えばＰＣＩｅ（PCI Express）などの内部バスや、その他のパケット処理回路に搭載されるＦＩＦＯ、メモリ、ＤＭＡ（Direct Memory Access）転送等の様々な部分についてボトルネックを解消する分散処理方法を提供するものである。
【００８３】
［第２の実施例］
次に、本発明の第２の実施例について説明する。本実施例は、第１の実施例の深層学習用分散処理システムの構成要素である集計処理ノード１の構成例を説明するものである。図１４は集計処理ノード１の構成例を示すブロック図である。
【００８４】
集計処理ノード１は、受信部１０［ｎ］（ｎ＝１，・・・，Ｎ）と、受信ＦＩＦＯ（First In, First Out）バッファ１１［ｎ］と、集計処理部１２と、送信部１３［ｎ］とを備えている。
【００８５】
第１の実施例で説明したように、集計処理ノード１は、集約通信処理において、分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）の各々から、Ｍ個の分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を、Ｌｇ個ずつに振り分けられたＰｇ個の集約通信パケットＳＰ［ｐ，ｎ］（ｐ＝１，・・・，Ｐｇ）として受信する。集約通信パケットＳＰ［ｐ，ｎ］（ｐ＝１，・・・，Ｐｇ）には、Ｌｇ個の分散データＤ［ｉ，ｎ］（ｉ＝Ｌｇ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌｇ）が格納されている。
【００８６】
また、集計処理ノード１は、分配通信処理において、分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）の各々に向けて、Ｍ個の集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を、Ｌｓ個ずつに振り分けてＰｓ個の集約通信パケットＤＰ［ｐ，ｎ］（ｐ＝１，・・・，Ｐｓ）として送信する。
【００８７】
図１４に示したように、集計処理ノード１は、各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）から集約通信パケットＳＰ［ｐ，ｎ］を受信するための受信部１０［ｎ］を、分散処理ノード２［ｎ］別に備える。
【００８８】
各受信部１０［ｎ］は、図５で説明した集約通信処理を行うものである。具体的には、各受信部１０［ｎ］は、対応する分散処理ノード２［ｎ］が送信した集約通信パケットＳＰ［ｐ，ｎ］を受信し、この集約通信パケットＳＰ［ｐ，ｎ］に重みｗ［ｍ］の番号ｍの順に格納されたＬｇ個の分散データＤ［ｉ，ｎ］（ｉ＝Ｌｇ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌｇ）を番号ｉ（ｉは重みｗ［ｍ］の番号ｍの一部）の順に取得して、後段の受信ＦＩＦＯバッファ１１［ｎ］に渡す。
【００８９】
また、図１４に示すように、集計処理ノード１は、受信部１０［ｎ］別（分散処理ノード２［ｎ］別）に、受信ＦＩＦＯバッファ１１［ｎ］を備える。さらに、集計処理ノード１は、各受信ＦＩＦＯバッファ１１［ｎ］（ｎ＝１，・・・，Ｎ）に蓄積されている、番号ｍ（ｍ＝１，・・・，Ｍ）の分散データＤ［ｍ，ｎ］を各受信ＦＩＦＯバッファ１１［ｎ］から読み出して集計する集計処理部１２を備える。受信ＦＩＦＯバッファ１１［ｎ］と集計処理部１２とは、図６で説明した全ノード集計処理を行うものである。
【００９０】
具体的には、受信ＦＩＦＯバッファ１１［ｎ］は、対応する受信部１０［ｎ］から渡されたＬｇ個の分散データＤ［ｉ，ｎ］（ｉ＝Ｌｇ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌｇ）を、番号ｉ（ｉは番号ｍの一部）の順に蓄積する。この蓄積は各受信ＦＩＦＯバッファ１１［ｎ］が空の状態から開始される。集約通信パケットＳＰ［ｐ，ｎ］の受信と分散データＤ［ｉ，ｎ］の蓄積とがＰｇ回行われることで、Ｍ個の分散データＤ［ｍ，ｎ］が各受信ＦＩＦＯバッファ１１［ｎ］に蓄積される。
【００９１】
したがって、各受信ＦＩＦＯバッファ１１［ｎ］に蓄積された分散データを同じ個数ずつ読み出した場合、各受信ＦＩＦＯバッファ１１［ｎ］から読み出された分散データＤ［ｍ，ｎ］はｍ＝１，・・・，Ｍの順に並んでいる。
【００９２】
各受信ＦＩＦＯバッファ１１［ｎ］（ｎ＝１，・・・，Ｎ）は、集計処理部１２に対して、それぞれ分散データの蓄積の有無を示す蓄積有無信号Ｕ［ｎ］を出力する。
【００９３】
集計処理部１２は、全ての蓄積有無信号Ｕ［ｎ］（ｎ＝１，・・・，Ｎ）が分散データの蓄積有を示す場合に、各受信ＦＩＦＯバッファ１１［ｎ］から分散データを１個ずつ読み出す。なお、各受信ＦＩＦＯバッファ１１［ｎ］は番号ｍの順番で分散データを蓄積しており、集計処理部１２は各受信ＦＩＦＯバッファ１１［ｎ］から同数の分散データを読み出す。このため、各受信ＦＩＦＯバッファ１１［ｎ］から読み出された分散データの番号ｍは、各受信ＦＩＦＯバッファ１１［ｎ］間で同じ値となる。したがって、蓄積有無信号Ｕ［ｎ］は分散データの番号ｍを特定する必要はなく、次に読み出すべき分散データが各受信ＦＩＦＯバッファ１１［ｎ］に蓄積されているか否かを知らせるだけでよい。
【００９４】
ただし、後述するように、集計処理部１２において、読み出し済みの分散データＤ［ｍ，ｎ］に基づいて生成した集計データＲ［ｍ］を分配通信パケットに格納し、各送信部１３［ｎ］（ｎ＝１，・・・，Ｎ）から送出するが、集計処理部１２は、分配通信パケットを送出する状態にない場合（例えば別の分配通信パケットを送出中である場合）は、次の分散データＤ［ｍ，ｎ］の読み出しを、分配通信パケットを送出可能となるまで保留する。
【００９５】
このため、各送信部１３［ｎ］（ｎ＝１，・・・，Ｎ）は、分配通信パケットが送出可能になったときに、分配通信パケットが送出可能であることを示す送出許可信号Ｖ［ｎ］を集計処理部１２に対して出力する。
【００９６】
集計処理部１２は、各受信ＦＩＦＯバッファ１１［ｎ］（ｎ＝１，・・・，Ｎ）からの蓄積有無信号Ｕ［ｎ］と、各送信部１３［ｎ］（ｎ＝１，・・・，Ｎ）からの送出許可信号Ｖ［ｎ］（ｎ＝１，・・・，Ｎ）とを受けて、各受信ＦＩＦＯバッファ１１［ｎ］から分散データの読み出しを行うか否かを判定する。
【００９７】
具体的には、集計処理部１２は、蓄積有無信号Ｕ［ｎ］が、次に読み出すべき分散データＤ［ｍ，ｎ］の蓄積有りを示し、送出許可信号Ｖ［ｎ］が、読み出し済みの分散データＤ［ｍ，ｎ］から生成された集計データＲ［ｍ］を含む分配通信パケットの送出可能を示しているとき、分散データＤ［ｍ，ｎ］を各受信ＦＩＦＯバッファ１１［ｎ］から読み出す。
【００９８】
さらに、集計処理部１２は、各受信ＦＩＦＯバッファ１１［ｎ］から番号ｍの順に読み出した分散データＤ［ｍ，ｎ］（ｎ＝１，・・・，Ｎ）に基づいて、集計データＲ［ｍ］を番号ｍの順に生成し、集計データＲ［ｍ］を番号ｍの順に後段の送信部１３［ｎ］に渡す。ここでは、各送信部１３［ｎ］に同一の集計データが渡される。集計データＲ［ｍ］の計算式は、式（２）に示したとおりである。
【００９９】
各分散処理ノード２［ｎ］（ｎ＝１，・・・，Ｎ）に分配通信パケットを送信するための送信部１３［ｎ］は、分散処理ノード２［ｎ］別に設けられている。送信部１３［ｎ］は、図７で説明した分配通信処理を行うものである。
【０１００】
各送信部１３［ｎ］は、集計処理部１２から番号ｍの順番に渡された集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を、Ｌｓ個ずつＰｓ個の分配通信パケットに振り分けて送信する。すなわち、分散処理ノード２［ｎ］に向けてｐ番目（ｐ＝１，・・・，Ｐｓ）に送信する分配通信パケットＤＰ［ｐ，ｎ］には、Ｌｓ個の集計データＲ［ｊ］（ｊ＝Ｌｓ×（ｐ−１）＋ｋ、ｋ＝１，・・・，Ｌｓ）が格納される。上記のとおり、各送信部１３［ｎ］は、分配通信パケットＤＰ［ｐ，ｎ］が送出可能になったときに、集計処理部１２に対して送出許可信号Ｖ［ｎ］を出力する。
【０１０１】
第１の実施例で説明したように、各送信部１３［ｎ］は、ＭがＬｓで割り切れない条件では、Ｐｓ個目の分配通信パケットＤＰ［Ｐｓ，ｎ］に、（Ｍ−Ｌｓ×（Ｐｓ−１））個の集計データＲ［ｊ］（ｊ＝Ｌｓ×（Ｐｓ−１）＋ｏ、ｏ＝１，・・・，Ｍ−Ｌｓ×（Ｐｓ−１））を格納する。また、各送信部１３［ｎ］は、Ｐｓ番目の分配通信パケットＤＰ［Ｐｓ，ｎ］について、（Ｍ−Ｌｓ×（Ｐｓ−１））個の集計データＲ［ｊ］の後に、｛Ｌｓ−（Ｍ−Ｌｓ×（Ｐｓ−１））｝個のダミーの数値を追加し、全ての分配通信パケットが等しくＬｓ個のデータを格納するようにしてもよい。
【０１０２】
以上のように、各受信部１０［ｎ］（ｎ＝１，・・・，Ｎ）は、分散処理ノード２［ｎ］から受信した集約通信パケットから、重みｗ［ｍ］の番号ｍ（ｍ＝１，・・・，Ｍ）の順に分散データＤ［ｍ，ｎ］を取り出して、番号ｍの順に、分散処理ノード別の受信ＦＩＦＯバッファ１１［ｎ］に格納する。
【０１０３】
集計処理部１２は、分散データＤ［ｍ，ｎ］を番号ｍの順に各受信ＦＩＦＯバッファ１１［ｎ］から読み出して、読み出した分散データＤ［ｍ，ｎ］に基づいて集計データＲ［ｍ］を生成する。さらに、各送信部１３［ｎ］は、生成された集計データＲ［ｍ］を番号ｍの順に分配通信パケットに格納して、各分散処理ノード２［ｎ］に送出する。
【０１０４】
図１５で説明した従来技術では、集計処理ノード１０１が全ての分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を分散処理ノード１００［ｎ］から受け、その後、分散データＤ［ｍ，ｎ］を集計して全ての集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を生成し、その後、集計データＲ［ｍ］を分散処理ノード１００［ｎ］に返していた。
【０１０５】
これに対して、本実施例では、集計処理ノード１における集約通信処理と全ノード集計処理と分配通信処理とを互いに異なる番号ｍについてパイプライン化することができるので、各分散処理ノード２［ｎ］から分散データＤ［ｍ，ｎ］を受けてから、全ノードについて分散データＤ［ｍ，ｎ］を集計した集計データＲ［ｍ］を、各分散処理ノード２［ｎ］に返すまでの時間を、従来技術と比較して大幅に短縮することができる。
【０１０６】
例えば、番号ｍに関わる各処理に要する時間をｔとすると、各分散処理ノード２［ｎ］から分散データＤ［ｍ，ｎ］を受けてから、全分散処理ノード２［ｎ］について分散データＤ［ｍ，ｎ］を集計した集計データＲ［ｍ］を、各分散処理ノード２［ｎ］に返すまでの時間は、本発明では４ｔ（パイプライン段数＝４）となる。
【０１０７】
一方、従来技術では、各処理にＭ倍の時間を要するので、各分散処理ノード１００［ｎ］から分散データＤ［ｍ，ｎ］を受けてから、集計データＲ［ｍ］を各分散処理ノード１００［ｎ］に返すまでの時間が４ｔ×Ｍとなる。このように、本実施例では、１／Ｍ（Ｍは重みｗ［ｍ］の個数であり１００，０００，０００程度の値になり得る）に時間を短縮することができる。
【０１０８】
分散処理システムの他の構成要素については、第１の実施例で説明したものと同じであるため、本実施例では説明を省略する。
【０１０９】
また、第１の実施例で述べたように、各分散処理ノード２［ｎ］は、未受信データ量Ｍｄを監視して、未受信データ量Ｍｄが送信停止閾値Ｍａ以上の場合に集計処理ノード１へ送信する集約通信パケットの送信を停止し、この送信停止後に未受信データ量Ｍｄが送信再開閾値Ｍｂ以下の場合に送信を再開する。
【０１１０】
このような送信制御においては、集計処理ノード１の受信ＦＩＦＯバッファ１１［ｎ］に蓄積するフレーム数がバッファサイズを超過しないように閾値Ｍａ，Ｍｂを決めることができるため、いわゆるフレーム欠損を防止することができ、安定な動作を実現することができる。また、必要以上に受信ＦＩＦＯバッファ１１［ｎ］のサイズを大きくする必要がなくなるため、メモリの効率化による回路規模の適正化にも資することができる。
【０１１１】
第１、第２の実施例で説明した集計処理ノード１と分散処理ノード２［ｎ］の各々は、ＣＰＵ（Central Processing Unit）、記憶装置及びインタフェースを備えたコンピュータと、これらのハードウェア資源を制御するプログラムによって実現することができる。集計処理ノード１と分散処理ノード２［ｎ］の各々のＣＰＵは、各々の記憶装置に格納されたプログラムに従って第１、第２の実施例で説明した処理を実行する。
【産業上の利用可能性】
【０１１２】
本発明は、ニューラルネットワークの機械学習を行う技術に適用することができる。
【符号の説明】
【０１１３】
１…集計処理ノード１、２…分散処理ノード、３…ネットワーク、１０…受信部、１１…受信ＦＩＦＯバッファ、１２…集計処理部、１３…送信部、２０…サンプル入力部、２１…勾配計算処理部、２２…ノード内集計処理部、２３…送信部、２４…受信部、２５…重み更新処理部、２６…ニューラルネットワーク、２７…送信カウント部、２８…受信カウント部、２９…送信制御部。
【図１】
2019219714.tif 000005
【図２】
2019219714.tif 000006
【図３】
2019219714.tif 000007
【図４】
2019219714.tif 000008
【図５】
2019219714.tif 000009
【図６】
2019219714.tif 000010
【図７】
2019219714.tif 000011
【図８】
2019219714.tif 000012
【図９】
2019219714.tif 000013
【図１０】
2019219714.tif 000014
【図１１】
2019219714.tif 000015
【図１２】
2019219714.tif 000016
【図１３】
2019219714.tif 000017
【図１４】
2019219714.tif 000018
【図１５】
2019219714.tif 000019
【図１６】
2019219714.tif 000020