(57)【要約】【課題】深層学習に適用した場合に効果的な分散処理を行う。【解決手段】分散処理ノード１［１］は、分散データを中間集計データとして分散処理ノード１［２］に送信する。分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）は、受信した中間集計データと分散データから更新後の中間集計データを生成して分散処理ノード１［ｋ+］（ｋ+＝ｋ＋１、ｋ＝Ｎの場合はｋ+＝１）に送信する。分散処理ノード１［１］は、受信した中間集計データを集計データとして分散処理ノード１［Ｎ］に送信する。分散処理ノード１［ｋ］は、受信した集計データを分散処理ノード１［ｋ−１］に送信する。分散処理ノード１［１］は、各分散処理ノード１が分散データを集計するために要した集約通信時間、または集約通信時間と各分散処理ノード１が集計データを分配するために要した時間との合計の集約分配通信時間が所定の時間を超過した場合に警報を発する。【選択図】  図１
2020067688.tif 000002
【特許請求の範囲】
【請求項１】
リング状に配置され、隣接するノードと通信路を介して互いに接続されたＮ個（Ｎは２以上の整数）の分散処理ノードを備え、
ｎ番目（ｎ＝１，・・・，Ｎ）の分散処理ノードは、ｎ+番目（ｎ+＝ｎ＋１、ただしｎ＝Ｎの場合はｎ+＝１）の分散処理ノードと双方向の通信が同時に可能な第１の通信ポートと、ｎ-番目（ｎ-＝ｎ−１、ただしｎ＝１の場合はｎ-＝Ｎ）の分散処理ノードと双方向の通信が可能な同時に第２の通信ポートとを備え、
各分散処理ノードは、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データを生成し、
Ｎ個の分散処理ノードのうち、予め指定された１番目の分散処理ノードは、自ノードで生成された分散データを第１の集計データとして、この第１の集計データを重みｗ［ｍ］の番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートから２番目の分散処理ノードに向けて送信し、
Ｎ個の分散処理ノードのうち、前記１番目を除くｋ番目（ｋ＝２，・・・，Ｎ）の分散処理ノードは、（ｋ−１）番目の分散処理ノードから自ノードの前記第２の通信ポートを介して受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて更新後の第１の集計データを生成し、この第１の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートからｋ+番目（ｋ+＝ｋ＋１、ただしｋ＝Ｎの場合はｋ+＝１）の分散処理ノードに向けて送信し、
前記１番目の分散処理ノードは、Ｎ番目の分散処理ノードから自ノードの前記第２の通信ポートを介して受信した第１の集計データを第２の集計データとして、この第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから前記Ｎ番目の分散処理ノードに向けて送信し、
前記ｋ番目の分散処理ノードは、ｋ+番目の分散処理ノードから自ノードの前記第１の通信ポートを介して受信した第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから（ｋ−１）番目の分散処理ノードに向けて送信し、
前記１番目の分散処理ノードは、２番目の分散処理ノードから自ノードの前記第１の通信ポートを介して第２の集計データを受信し、
各分散処理ノードは、受信した前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新し、
前記１番目の分散処理ノードは、各分散処理ノードが前記分散データを集計するために要した集約通信時間、あるいは前記集約通信時間と各分散処理ノードが前記第２の集計データを分配するために要した時間との合計の集約分配通信時間が、所定の最大集計遅延時間を超過した場合に、集計遅延異常を示す警報を発することを特徴とする分散処理システム。
【請求項２】
請求項１記載の分散処理システムにおいて、
各分散処理ノードは、
前記分散データを生成するノード内集計処理部と、
自ノードが前記１番目の分散処理ノードとして機能する場合に、前記第１の集計データを重みｗ［ｍ］の番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートから２番目の分散処理ノードに向けて送信し、自ノードが前記ｋ番目の分散処理ノードとして機能する場合に、前記更新後の第１の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートからｋ+番目の分散処理ノードに向けて送信する第１の送信部と、
自ノードの前記第２の通信ポートから受信するパケットから前記第１の集計データを取得する第１の受信部と、
自ノードが前記１番目の分散処理ノードとして機能する場合に、前記第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから前記Ｎ番目の分散処理ノードに向けて送信し、自ノードが前記ｋ番目の分散処理ノードとして機能する場合に、受信した前記第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから（ｋ−１）番目の分散処理ノードに向けて送信する第２の送信部と、
自ノードの前記第１の通信ポートから受信するパケットから前記第２の集計データを取得する第２の受信部と、
自ノードが前記ｋ番目の分散処理ノードとして機能する場合に、前記更新後の第１の集計データを生成する集計データ生成部と、
受信した前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する重み更新処理部と、
自ノードが前記１番目の分散処理ノードとして機能する場合に、前記第１の集計データを前記２番目の分散処理ノードに向けて送信した時点から、前記Ｎ番目の分散処理ノードから前記第１の集計データを受信した時点までの時間を前記集約通信時間として計測し、前記第１の集計データを前記２番目の分散処理ノードに向けて送信した時点から、前記２番目の分散処理ノードから前記第２の集計データを受信した時点までの時間を前記集約分配通信時間として計測するタイマと、
自ノードが前記１番目の分散処理ノードとして機能する場合に、前記集約通信時間あるいは前記集約分配通信時間が前記最大集計遅延時間を超過した場合に、集計遅延異常を示す警報を発する警報発生部とを備えることを特徴とする分散処理システム。
【請求項３】
請求項１または２記載の分散処理システムにおいて、
前記１番目の分散処理ノードは、自ノードの前記第１の通信ポートから前記第１の集計データが送信される前に、前記分散データを集計する準備が完了したか否かを示す集計開始確認フラグを含む管理パケットを定期的に生成して、この管理パケットを自ノードの前記第１の通信ポートおよび前記第２の通信ポートのうち少なくとも一方から前記２番目の分散処理ノードおよび前記Ｎ番目の分散処理ノードのうち少なくとも一方に向けて送信し、
前記ｋ番目の分散処理ノードは、前記（ｋ−１）番目の分散処理ノードから自ノードの前記第２の通信ポートを介して前記管理パケットを受信するか、あるいは前記ｋ+番目の分散処理ノードから自ノードの前記第１の通信ポートを介して前記管理パケットを受信し、自ノードにおいて前記分散データを集計する準備が未了の場合、受信した管理パケットに含まれる集計開始確認フラグを、分散データを集計する準備が完了していないことを示す値に更新した上で、更新後の管理パケットを前記第１、第２の通信ポートのうち管理パケットを受信したポートと異なる通信ポートから前記ｋ+番目の分散処理ノードあるいは前記（ｋ−１）番目の分散処理ノードに向けて送信し、自ノードにおいて前記分散データを集計する準備が完了している場合、受信した管理パケットを前記第１、第２の通信ポートのうち管理パケットを受信したポートと異なる通信ポートから前記ｋ+番目の分散処理ノードあるいは前記（ｋ−１）番目の分散処理ノードに向けて送信し、
前記１番目の分散処理ノードは、前記Ｎ番目の分散処理ノードから自ノードの前記第２の通信ポートを介して前記管理パケットを受信するか、あるいは前記２番目の分散処理ノードから自ノードの前記第１の通信ポートを介して前記管理パケットを受信し、受信した管理パケットに含まれる集計開始確認フラグが、前記分散データを集計する準備が完了したことを示す値である場合に、前記第１の集計データの送信を開始することを特徴とする分散処理システム。
【請求項４】
リング状に配置され、隣接するノードと通信路を介して互いに接続されたＮ個（Ｎは２以上の整数）の分散処理ノードを備え、ｎ番目（ｎ＝１，・・・，Ｎ）の分散処理ノードが、ｎ+番目（ｎ+＝ｎ＋１、ただしｎ＝Ｎの場合はｎ+＝１）の分散処理ノードと双方向の通信が同時に可能な第１の通信ポートと、ｎ-番目（ｎ-＝ｎ−１、ただしｎ＝１の場合はｎ-＝Ｎ）の分散処理ノードと双方向の通信が可能な同時に第２の通信ポートとを備えたシステムにおける分散処理方法であって、
各分散処理ノードが、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データを生成する第１のステップと、
Ｎ個の分散処理ノードのうち、予め指定された１番目の分散処理ノードが、自ノードで生成された分散データを第１の集計データとして、この第１の集計データを重みｗ［ｍ］の番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートから２番目の分散処理ノードに向けて送信する第２のステップと、
Ｎ個の分散処理ノードのうち、前記１番目を除くｋ番目（ｋ＝２，・・・，Ｎ）の分散処理ノードが、（ｋ−１）番目の分散処理ノードから自ノードの前記第２の通信ポートを介して受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて更新後の第１の集計データを生成し、この第１の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートからｋ+番目（ｋ+＝ｋ＋１、ただしｋ＝Ｎの場合はｋ+＝１）の分散処理ノードに向けて送信する第３のステップと、
前記１番目の分散処理ノードが、Ｎ番目の分散処理ノードから自ノードの前記第２の通信ポートを介して受信した第１の集計データを第２の集計データとして、この第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから前記Ｎ番目の分散処理ノードに向けて送信する第４のステップと、
前記ｋ番目の分散処理ノードが、ｋ+番目の分散処理ノードから自ノードの前記第１の通信ポートを介して受信した第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから（ｋ−１）番目の分散処理ノードに向けて送信する第５のステップと、
前記１番目の分散処理ノードが、２番目の分散処理ノードから自ノードの前記第１の通信ポートを介して第２の集計データを受信する第６のステップと、
各分散処理ノードが、受信した前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する第７のステップと、
前記１番目の分散処理ノードが、各分散処理ノードが前記分散データを集計するために要した集約通信時間、および前記集約通信時間と各分散処理ノードが前記第２の集計データを分配するために要した時間との合計の集約分配通信時間を計測する第８のステップと、
前記集約通信時間あるいは前記集約分配通信時間が所定の最大集計遅延時間を超過した場合に、集計遅延異常を示す警報を発する第９のステップとを含むことを特徴とする分散処理方法。
【請求項５】
請求項４記載の分散処理方法において、
前記第３のステップは、前記ｋ番目の分散処理ノードが、自ノードの前記第２の通信ポートから受信するパケットから前記第１の集計データを取得するステップと、前記更新後の第１の集計データを生成するステップと、前記更新後の第１の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートからｋ+番目の分散処理ノードに向けて送信するステップとを含み、
前記第４のステップは、前記１番目の分散処理ノードが、自ノードの前記第２の通信ポートから受信するパケットから前記第１の集計データを取得するステップと、取得した第１の集計データを第２の集計データとして、この第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから前記Ｎ番目の分散処理ノードに向けて送信するステップとを含み、
前記第５のステップは、前記ｋ番目の分散処理ノードが、自ノードの前記第１の通信ポートから受信するパケットから前記第２の集計データを取得するステップと、受信した前記第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから（ｋ−１）番目の分散処理ノードに向けて送信するステップとを含み、
前記第６のステップは、前記１番目の分散処理ノードが、自ノードの前記第１の通信ポートから受信するパケットから前記第２の集計データを取得するステップを含み、
前記第８のステップは、前記１番目の分散処理ノードが、前記第１の集計データを前記２番目の分散処理ノードに向けて送信した時点から、前記Ｎ番目の分散処理ノードから前記第１の集計データを受信した時点までの時間を前記集約通信時間として計測し、前記第１の集計データを前記２番目の分散処理ノードに向けて送信した時点から、前記２番目の分散処理ノードから前記第２の集計データを受信した時点までの時間を前記集約分配通信時間として計測するステップを含むことを特徴とする分散処理方法。
【請求項６】
請求項４または５記載の分散処理方法において、
前記１番目の分散処理ノードが、自ノードの前記第１の通信ポートから前記第１の集計データを送信する前に、前記分散データを集計する準備が完了したか否かを示す集計開始確認フラグを含む管理パケットを定期的に生成して、この管理パケットを自ノードの前記第１の通信ポートおよび前記第２の通信ポートのうち少なくとも一方から前記２番目の分散処理ノードおよび前記Ｎ番目の分散処理ノードのうち少なくとも一方に向けて送信する第１０のステップと、
前記ｋ番目の分散処理ノードが、前記（ｋ−１）番目の分散処理ノードから自ノードの前記第２の通信ポートを介して前記管理パケットを受信するか、あるいは前記ｋ+番目の分散処理ノードから自ノードの前記第１の通信ポートを介して前記管理パケットを受信し、自ノードにおいて前記分散データを集計する準備が未了の場合、受信した管理パケットに含まれる集計開始確認フラグを、分散データを集計する準備が完了していないことを示す値に更新した上で、更新後の管理パケットを前記第１、第２の通信ポートのうち管理パケットを受信したポートと異なる通信ポートから前記ｋ+番目の分散処理ノードあるいは前記（ｋ−１）番目の分散処理ノードに向けて送信し、自ノードにおいて前記分散データを集計する準備が完了している場合、受信した管理パケットを前記第１、第２の通信ポートのうち管理パケットを受信したポートと異なる通信ポートから前記ｋ+番目の分散処理ノードあるいは前記（ｋ−１）番目の分散処理ノードに向けて送信する第１１のステップと、
前記１番目の分散処理ノードが、前記Ｎ番目の分散処理ノードから自ノードの前記第２の通信ポートを介して前記管理パケットを受信するか、あるいは前記２番目の分散処理ノードから自ノードの前記第１の通信ポートを介して前記管理パケットを受信し、受信した管理パケットに含まれる集計開始確認フラグが、前記分散データを集計する準備が完了したことを示す値である場合に、前記第２のステップによる前記第１の集計データの送信を開始する第１２のステップとをさらに含むことを特徴とする分散処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の分散処理ノードを備える分散処理システムに係り、特に、各分散処理ノードから数値データを集計して集計データを生成し、各分散処理ノードに集計データを分配する分散処理システムおよび分散処理方法に関するものである。
【背景技術】
【０００２】
深層学習では、多層のニューロンモデルからなる学習対象について、各ニューロンモデルの重み（前段のニューロンモデルが出力した値に乗じる係数）を、入力したサンプルデータに基づいて更新することにより、推論精度を改善する。
【０００３】
通常、推論精度を改善する手法には、ミニバッチ法が用いられている。ミニバッチ法では、サンプルデータ毎に前記重みに対する勾配を計算する勾配計算処理と、複数の異なるサンプルデータについて前記勾配を集計する（サンプルデータ毎に得られた勾配を重み別に合算する）集計処理と、各重みを前記集計された勾配に基づいて更新する重み更新処理と、を繰り返す。
【０００４】
これらの処理、特に勾配計算処理は、多数回の演算を必要とするが、推論精度を向上させるために、重みの個数や入力するサンプルデータの個数が増加すると、深層学習に要する時間が増大するという、課題がある。
【０００５】
勾配計算処理を高速化するため、分散処理の手法が用いられている。具体的には、複数の分散処理ノードを設け、各ノードは、各々異なるサンプルデータについて勾配計算処理を行う。これにより、ノード数に比例して単位時間に処理できるサンプルデータ数を増加させることが可能となるため、勾配計算処理を高速化できる（非特許文献１参照）。
【０００６】
深層学習の分散処理において、集計処理を行うためには、各分散処理ノードがサンプルデータ毎に重みに対する勾配を計算する勾配計算処理およびサンプルデータ毎に得られた勾配を重み別に合算するノード内集計処理と、各重みを前記集計された勾配に基づいて更新する重み更新処理との間に、分散処理ノード毎に得られたデータ（分散データ）を、集計処理を行うノードに転送するための通信（集約通信）と、集約通信により取得したデータに基づいて集計する処理（ノード間集計処理）と、各分散処理ノードから取得した集計したデータ（集計データ）を各分散処理ノードに分配するための通信（分配通信）と、が必要となる。
【０００７】
上記の集約通信や分配通信に要する時間は、深層学習を単一ノードで実施するシステムでは不要であり、深層学習の分散処理を行う上で、処理速度を低下させる要因となっている。
近年、深層学習がより複雑な問題に適用されるようになってきており、重みの総数が増加する傾向にある。このため、分散データや集計データのデータ量が増大し、集約通信時間と分配通信時間が増大している。
【０００８】
このように、深層学習の分散処理システムでは、集約通信時間と分配通信時間の増大によって、分散処理ノード数を増加させることにより、深層学習の高速化の効果が低下するという問題があった。
【０００９】
図１８は、従来の分散処理システムにおける分散処理ノード数と深層学習の処理性能との関係を示しており、２００は分散処理ノード数と処理性能の理想的な関係（性能∝ノード数）を示し、２０１は分散処理ノード数と処理性能の実際の関係を示している。分散処理ノード数に比例してノード間集計処理の入力である分散データの総量は増大するが、実際の処理性能が分散処理ノード数に比例して向上しない理由は、集計処理ノードの通信速度が、このノードの通信ポートの物理速度以下に制限されるため、集約通信に要する時間が増大するためである。
【先行技術文献】
【非特許文献】
【００１０】
【非特許文献１】秋葉 拓哉，“分散深層学習パッケージ ChainerMN 公開”，プリファードインフラストラクチャー（Preferred Infrastructure），２０１７年，インターネット＜https://research.preferred.jp/2017/05/chainermn-beta-release/＞
【発明の概要】
【発明が解決しようとする課題】
【００１１】
本発明は、上記のような事情を考慮してなされたものであり、その目的は、複数の分散処理ノードを備える分散処理システムおいて、深層学習に適用した場合に効果的な分散処理を行うことができる分散処理システムおよび分散処理方法を提供することにある。
【課題を解決するための手段】
【００１２】
本発明の分散処理システムは、リング状に配置され、隣接するノードと通信路を介して互いに接続されたＮ個（Ｎは２以上の整数）の分散処理ノードを備え、ｎ番目（ｎ＝１，・・・，Ｎ）の分散処理ノードは、ｎ+番目（ｎ+＝ｎ＋１、ただしｎ＝Ｎの場合はｎ+＝１）の分散処理ノードと双方向の通信が同時に可能な第１の通信ポートと、ｎ-番目（ｎ-＝ｎ−１、ただしｎ＝１の場合はｎ-＝Ｎ）の分散処理ノードと双方向の通信が可能な同時に第２の通信ポートとを備え、各分散処理ノードは、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データを生成し、Ｎ個の分散処理ノードのうち、予め指定された１番目の分散処理ノードは、自ノードで生成された分散データを第１の集計データとして、この第１の集計データを重みｗ［ｍ］の番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートから２番目の分散処理ノードに向けて送信し、Ｎ個の分散処理ノードのうち、前記１番目を除くｋ番目（ｋ＝２，・・・，Ｎ）の分散処理ノードは、（ｋ−１）番目の分散処理ノードから自ノードの前記第２の通信ポートを介して受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて更新後の第１の集計データを生成し、この第１の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートからｋ+番目（ｋ+＝ｋ＋１、ただしｋ＝Ｎの場合はｋ+＝１）の分散処理ノードに向けて送信し、前記１番目の分散処理ノードは、Ｎ番目の分散処理ノードから自ノードの前記第２の通信ポートを介して受信した第１の集計データを第２の集計データとして、この第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから前記Ｎ番目の分散処理ノードに向けて送信し、前記ｋ番目の分散処理ノードは、ｋ+番目の分散処理ノードから自ノードの前記第１の通信ポートを介して受信した第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから（ｋ−１）番目の分散処理ノードに向けて送信し、前記１番目の分散処理ノードは、２番目の分散処理ノードから自ノードの前記第１の通信ポートを介して第２の集計データを受信し、各分散処理ノードは、受信した前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新し、前記１番目の分散処理ノードは、各分散処理ノードが前記分散データを集計するために要した集約通信時間、あるいは前記集約通信時間と各分散処理ノードが前記第２の集計データを分配するために要した時間との合計の集約分配通信時間が、所定の最大集計遅延時間を超過した場合に、集計遅延異常を示す警報を発することを特徴とするものである。
【００１３】
また、本発明の分散処理システムの１構成例において、各分散処理ノードは、前記分散データを生成するノード内集計処理部と、自ノードが前記１番目の分散処理ノードとして機能する場合に、前記第１の集計データを重みｗ［ｍ］の番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートから２番目の分散処理ノードに向けて送信し、自ノードが前記ｋ番目の分散処理ノードとして機能する場合に、前記更新後の第１の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートからｋ+番目の分散処理ノードに向けて送信する第１の送信部と、自ノードの前記第２の通信ポートから受信するパケットから前記第１の集計データを取得する第１の受信部と、自ノードが前記１番目の分散処理ノードとして機能する場合に、前記第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから前記Ｎ番目の分散処理ノードに向けて送信し、自ノードが前記ｋ番目の分散処理ノードとして機能する場合に、受信した前記第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから（ｋ−１）番目の分散処理ノードに向けて送信する第２の送信部と、自ノードの前記第１の通信ポートから受信するパケットから前記第２の集計データを取得する第２の受信部と、自ノードが前記ｋ番目の分散処理ノードとして機能する場合に、前記更新後の第１の集計データを生成する集計データ生成部と、受信した前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する重み更新処理部と、自ノードが前記１番目の分散処理ノードとして機能する場合に、前記第１の集計データを前記２番目の分散処理ノードに向けて送信した時点から、前記Ｎ番目の分散処理ノードから前記第１の集計データを受信した時点までの時間を前記集約通信時間として計測し、前記第１の集計データを前記２番目の分散処理ノードに向けて送信した時点から、前記２番目の分散処理ノードから前記第２の集計データを受信した時点までの時間を前記集約分配通信時間として計測するタイマと、自ノードが前記１番目の分散処理ノードとして機能する場合に、前記集約通信時間あるいは前記集約分配通信時間が前記最大集計遅延時間を超過した場合に、集計遅延異常を示す警報を発する警報発生部とを備えることを特徴とするものである。
【００１４】
また、本発明の分散処理システム１構成例において、前記１番目の分散処理ノードは、自ノードの前記第１の通信ポートから前記第１の集計データが送信される前に、前記分散データを集計する準備が完了したか否かを示す集計開始確認フラグを含む管理パケットを定期的に生成して、この管理パケットを自ノードの前記第１の通信ポートおよび前記第２の通信ポートのうち少なくとも一方から前記２番目の分散処理ノードおよび前記Ｎ番目の分散処理ノードのうち少なくとも一方に向けて送信し、前記ｋ番目の分散処理ノードは、前記（ｋ−１）番目の分散処理ノードから自ノードの前記第２の通信ポートを介して前記管理パケットを受信するか、あるいは前記ｋ+番目の分散処理ノードから自ノードの前記第１の通信ポートを介して前記管理パケットを受信し、自ノードにおいて前記分散データを集計する準備が未了の場合、受信した管理パケットに含まれる集計開始確認フラグを、分散データを集計する準備が完了していないことを示す値に更新した上で、更新後の管理パケットを前記第１、第２の通信ポートのうち管理パケットを受信したポートと異なる通信ポートから前記ｋ+番目の分散処理ノードあるいは前記（ｋ−１）番目の分散処理ノードに向けて送信し、自ノードにおいて前記分散データを集計する準備が完了している場合、受信した管理パケットを前記第１、第２の通信ポートのうち管理パケットを受信したポートと異なる通信ポートから前記ｋ+番目の分散処理ノードあるいは前記（ｋ−１）番目の分散処理ノードに向けて送信し、前記１番目の分散処理ノードは、前記Ｎ番目の分散処理ノードから自ノードの前記第２の通信ポートを介して前記管理パケットを受信するか、あるいは前記２番目の分散処理ノードから自ノードの前記第１の通信ポートを介して前記管理パケットを受信し、受信した管理パケットに含まれる集計開始確認フラグが、前記分散データを集計する準備が完了したことを示す値である場合に、前記第１の集計データの送信を開始することを特徴とするものである。
【００１５】
また、本発明は、リング状に配置され、隣接するノードと通信路を介して互いに接続されたＮ個（Ｎは２以上の整数）の分散処理ノードを備え、ｎ番目（ｎ＝１，・・・，Ｎ）の分散処理ノードが、ｎ+番目（ｎ+＝ｎ＋１、ただしｎ＝Ｎの場合はｎ+＝１）の分散処理ノードと双方向の通信が同時に可能な第１の通信ポートと、ｎ-番目（ｎ-＝ｎ−１、ただしｎ＝１の場合はｎ-＝Ｎ）の分散処理ノードと双方向の通信が可能な同時に第２の通信ポートとを備えたシステムにおける分散処理方法であって、各分散処理ノードが、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］毎（ｍ＝１，・・・，Ｍ）の分散データを生成する第１のステップと、Ｎ個の分散処理ノードのうち、予め指定された１番目の分散処理ノードが、自ノードで生成された分散データを第１の集計データとして、この第１の集計データを重みｗ［ｍ］の番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートから２番目の分散処理ノードに向けて送信する第２のステップと、Ｎ個の分散処理ノードのうち、前記１番目を除くｋ番目（ｋ＝２，・・・，Ｎ）の分散処理ノードが、（ｋ−１）番目の分散処理ノードから自ノードの前記第２の通信ポートを介して受信した第１の集計データと自ノードで生成された分散データとの和を、対応する重みｗ［ｍ］毎に求めて更新後の第１の集計データを生成し、この第１の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートからｋ+番目（ｋ+＝ｋ＋１、ただしｋ＝Ｎの場合はｋ+＝１）の分散処理ノードに向けて送信する第３のステップと、前記１番目の分散処理ノードが、Ｎ番目の分散処理ノードから自ノードの前記第２の通信ポートを介して受信した第１の集計データを第２の集計データとして、この第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから前記Ｎ番目の分散処理ノードに向けて送信する第４のステップと、前記ｋ番目の分散処理ノードが、ｋ+番目の分散処理ノードから自ノードの前記第１の通信ポートを介して受信した第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから（ｋ−１）番目の分散処理ノードに向けて送信する第５のステップと、前記１番目の分散処理ノードが、２番目の分散処理ノードから自ノードの前記第１の通信ポートを介して第２の集計データを受信する第６のステップと、各分散処理ノードが、受信した前記第２の集計データに基づいて前記ニューラルネットワークの重みｗ［ｍ］を更新する第７のステップと、前記１番目の分散処理ノードが、各分散処理ノードが前記分散データを集計するために要した集約通信時間、および前記集約通信時間と各分散処理ノードが前記第２の集計データを分配するために要した時間との合計の集約分配通信時間を計測する第８のステップと、前記集約通信時間あるいは前記集約分配通信時間が所定の最大集計遅延時間を超過した場合に、集計遅延異常を示す警報を発する第９のステップとを含むことを特徴とするものである。
【００１６】
また、本発明の分散処理方法の１構成例において、前記第３のステップは、前記ｋ番目の分散処理ノードが、自ノードの前記第２の通信ポートから受信するパケットから前記第１の集計データを取得するステップと、前記更新後の第１の集計データを生成するステップと、前記更新後の第１の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第１の通信ポートからｋ+番目の分散処理ノードに向けて送信するステップとを含み、前記第４のステップは、前記１番目の分散処理ノードが、自ノードの前記第２の通信ポートから受信するパケットから前記第１の集計データを取得するステップと、取得した第１の集計データを第２の集計データとして、この第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから前記Ｎ番目の分散処理ノードに向けて送信するステップとを含み、前記第５のステップは、前記ｋ番目の分散処理ノードが、自ノードの前記第１の通信ポートから受信するパケットから前記第２の集計データを取得するステップと、受信した前記第２の集計データを前記番号ｍの順番にパケット化して、自ノードの前記第２の通信ポートから（ｋ−１）番目の分散処理ノードに向けて送信するステップとを含み、前記第６のステップは、前記１番目の分散処理ノードが、自ノードの前記第１の通信ポートから受信するパケットから前記第２の集計データを取得するステップを含み、前記第８のステップは、前記１番目の分散処理ノードが、前記第１の集計データを前記２番目の分散処理ノードに向けて送信した時点から、前記Ｎ番目の分散処理ノードから前記第１の集計データを受信した時点までの時間を前記集約通信時間として計測し、前記第１の集計データを前記２番目の分散処理ノードに向けて送信した時点から、前記２番目の分散処理ノードから前記第２の集計データを受信した時点までの時間を前記集約分配通信時間として計測するステップを含むことを特徴とするものである。
【００１７】
また、本発明の分散処理方法の１構成例は、前記１番目の分散処理ノードが、自ノードの前記第１の通信ポートから前記第１の集計データを送信する前に、前記分散データを集計する準備が完了したか否かを示す集計開始確認フラグを含む管理パケットを定期的に生成して、この管理パケットを自ノードの前記第１の通信ポートおよび前記第２の通信ポートのうち少なくとも一方から前記２番目の分散処理ノードおよび前記Ｎ番目の分散処理ノードのうち少なくとも一方に向けて送信する第１０のステップと、前記ｋ番目の分散処理ノードが、前記（ｋ−１）番目の分散処理ノードから自ノードの前記第２の通信ポートを介して前記管理パケットを受信するか、あるいは前記ｋ+番目の分散処理ノードから自ノードの前記第１の通信ポートを介して前記管理パケットを受信し、自ノードにおいて前記分散データを集計する準備が未了の場合、受信した管理パケットに含まれる集計開始確認フラグを、分散データを集計する準備が完了していないことを示す値に更新した上で、更新後の管理パケットを前記第１、第２の通信ポートのうち管理パケットを受信したポートと異なる通信ポートから前記ｋ+番目の分散処理ノードあるいは前記（ｋ−１）番目の分散処理ノードに向けて送信し、自ノードにおいて前記分散データを集計する準備が完了している場合、受信した管理パケットを前記第１、第２の通信ポートのうち管理パケットを受信したポートと異なる通信ポートから前記ｋ+番目の分散処理ノードあるいは前記（ｋ−１）番目の分散処理ノードに向けて送信する第１１のステップと、前記１番目の分散処理ノードが、前記Ｎ番目の分散処理ノードから自ノードの前記第２の通信ポートを介して前記管理パケットを受信するか、あるいは前記２番目の分散処理ノードから自ノードの前記第１の通信ポートを介して前記管理パケットを受信し、受信した管理パケットに含まれる集計開始確認フラグが、前記分散データを集計する準備が完了したことを示す値である場合に、前記第２のステップによる前記第１の集計データの送信を開始する第１２のステップとをさらに含むことを特徴とするものである。
【発明の効果】
【００１８】
本発明によれば、ｎ番目（ｎ＝１，・・・，Ｎ）の分散処理ノードからｎ+番目（ｎ+＝ｎ＋１、ただしｎ＝Ｎの場合はｎ+＝１）の分散処理ノードへの集約通信（第１の集計データをｎ+番目の分散処理ノードに送信する処理）、ｋ番目（ｋ＝２，・・・，Ｎ）の分散処理ノードが行うノード間集計処理（受信した第１の集計データと自ノードで生成した分散データとに基づいて更新後の第１の集計データを計算する処理）、ｎ番目の分散処理ノードからｎ-番目（ｎ-＝ｎ−１、ただしｎ＝１の場合はｎ-＝Ｎ）の分散処理ノードへの分配通信（第２の集計データをｎ-番目の各分散処理ノードに分配する処理）とを、並行してほぼ同時に行うことが可能であり、効果的な分散処理を行うことができ、ニューラルネットワークの学習効率を向上させることができる。本発明では、各分散処理ノードに第１の通信ポートと第２の通信ポートとを設け、集約通信と分配通信の方向を逆にすることにより、集約通信が完了するまで分配通信の開始を待つ必要がない。また、本発明では、集計処理ノードを設けることなく深層学習の分散処理を行うことができ、集計処理ノードの通信速度によって分散処理の速度が制限されることがなくなる。さらに、本発明では、集約通信時間あるいは集約分配通信時間が最大集計遅延時間を超過した場合に集計遅延異常を示す警報を発することで、集約通信や分配通信の途中で通信が途切れる異常を即座に検知できる、保守性に優れた分散処理システムを実現することができる。
【００１９】
また、本発明では、分散処理ノード間で管理パケットの送受信を行うことにより、最大集計遅延時間の値を小さくすることができ、集約通信や分配通信の途中で通信が途切れる分散処理システムの異常をより短時間で検出することができる。
【図面の簡単な説明】
【００２０】
【図１】図１は、本発明の第１の実施例に係る深層学習用分散処理システムの構成例を示すブロック図である。
【図２】図２は、本発明の第１の実施例に係る分散処理ノードのサンプルデータ入力処理と勾配計算処理とノード内集計処理を説明するフローチャートである。
【図３】図３は、本発明の第１の実施例に係る分散処理ノードの集約通信処理とノード間集計処理と分配通信処理とを説明するフローチャートである。
【図４】図４は、本発明の第１の実施例に係る分散処理ノードの集約通信処理とノード間集計処理と分配通信処理とを説明するフローチャートである。
【図５】図５は、本発明の第１の実施例に係る分散処理ノードの重み更新処理を説明するフローチャートである。
【図６】図６は、本発明の第２の実施例に係る分散処理ノードの構成例を示すブロック図である。
【図７】図７は、本発明の第２の実施例に係る分散処理ノードの構成例を示すブロック図である。
【図８】図８は、本発明の第２の実施例に係る分散処理ノードの処理の概要を示す図である。
【図９】図９は、本発明の第２の実施例に係る分散処理ノード間の中間集計データおよび集計データの通信のシーケンスを示す図である。
【図１０】図１０は、本発明の第２の実施例に係る分散処理ノード間の中間集計データおよび集計データの通信のシーケンスを示す図である。
【図１１】図１１は、本発明の第２の実施例に係る分散処理ノード間の中間集計データおよび集計データの通信のシーケンスを示す図である。
【図１２】図１２は、本発明の第３の実施例に係る分散処理ノードの構成例を示すブロック図である。
【図１３】図１３は、本発明の第３の実施例に係る分散処理ノードの構成例を示すブロック図である。
【図１４】図１４は、集約通信処理の前に本発明の第３の実施例に係る分散処理ノードが行う処理を説明するフローチャートである。
【図１５】図１５は、集約通信処理の前に本発明の第３の実施例に係る分散処理ノードが行う処理を説明するフローチャートである。
【図１６】図１６は、本発明の第３の実施例において集約通信処理の前に行われる分散処理ノード間の通信のシーケンスを示す図である。
【図１７】図１７は、本発明の第１〜第３の実施例に係る分散処理ノードを実現するコンピュータの構成例を示すブロック図である。
【図１８】図１８は、従来の分散処理システムにおける分散処理ノード数と深層学習の処理性能との関係を示す図である。
【発明を実施するための形態】
【００２１】
［第１の実施例］
以下、本発明の実施例について図面を参照して説明する。図１は本発明の第１の実施例に係る深層学習用分散処理システムの構成例を示すブロック図である。図１の分散処理システムは、Ｎ個（Ｎは２以上の整数）の分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）と、番号ｎの分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）が次の番号ｎ+（ｎ+＝ｎ＋１、ただしｎ＝Ｎの場合はｎ+＝１）の分散処理ノード１［ｎ+］と互いに双方向に通信するための通信路２［ｎ］（ｎ＝１，・・・，Ｎ）とを備えている。なお、任意の通信路２［ｎ］（ｎ＝１，・・・，Ｎ）には、伝送路の他に、通信を中継する中継処理ノードが任意に介在することも可能である。
【００２２】
各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）は、双方向の通信が同時に可能な通信ポート１０と通信ポート１１とを備える。通信ポート１０は、分散処理ノード１［ｎ］が分散処理ノード１［ｎ+］（ｎ+＝ｎ＋１、ただしｎ＝Ｎの場合はｎ+＝１）と双方向の通信を行うための通信ポートであり、通信路２［ｎ］と接続される。また、通信ポート１１は、分散処理ノード１［ｎ］が分散処理ノード［ｎ-］（ｎ-＝ｎ−１、ただしｎ＝１の場合はｎ-＝Ｎ）と双方向の通信を行うための通信ポートであり、通信路２［ｎ-］と接続される。
【００２３】
図２は分散処理ノード１［ｎ］のサンプルデータ入力処理と勾配計算処理とノード内集計処理とを説明するフローチャートである。各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）は、図示しないデータ収集ノードから異なるＳ個（Ｓは２以上の整数）のサンプルデータｘ［ｎ，ｓ］（ｓ＝１，・・・，Ｓ）をミニバッチ毎に入力する（図２ステップＳ１００）。
【００２４】
なお、本発明は、データ収集ノードによるサンプルデータの収集方法、および収集したサンプルデータをＮ個の集合に振り分けて各分散処理ノード１［ｎ］へ分配する方法に限定されるものではなく、これらの方法の如何を問わず適用が可能である。
【００２５】
各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）は、サンプルデータｘ［ｎ，ｓ］が入力されたとき、学習対象のニューラルネットワークのＭ個（Ｍは２以上の整数）の重みｗ［ｍ］（ｍ＝１，・・・，Ｍ）の各々について、ニューラルネットワークの損失関数の勾配Ｇ［ｍ，ｎ，ｓ］をサンプルデータｘ［ｎ，ｓ］毎に計算する（図２ステップＳ１０１）。
【００２６】
ニューラルネットワークを各分散処理ノード１［ｎ］にソフトウェアで構築する方法、ニューラルネットワークの重みｗ［ｍ］、ニューラルネットワークの性能の悪さを示す指標である損失関数、および損失関数の勾配Ｇ［ｍ，ｎ，ｓ］については周知の技術であるので、詳細な説明は省略する。
【００２７】
続いて、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）は、サンプルデータ毎の勾配Ｇ［ｍ，ｎ，ｓ］を集計した数値である分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］毎に生成して保持する（図２ステップＳ１０２）。分散データＤ［ｍ，ｎ］の計算式は以下のとおりである。
【００２８】
【数１】
2020067688.tif 000003
【００２９】
なお、ステップＳ１０１の勾配計算処理とステップＳ１０２のノード内集計処理とは、サンプルデータ単位でパイプライン化する（あるサンプルデータに対して勾配計算処理を行うと同時にその一つ前のサンプルデータから得た勾配を集計するノード内集計処理とを同時に実行する）ことができる。
【００３０】
さらに、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）は、分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を生成した後、分散処理ノード間の集約通信を行い、集計データを生成するためのノード間集計処理を行う。
図３、図４は分散処理ノード１［ｎ］の集約通信処理とノード間集計処理と分配通信処理とを説明するフローチャートである。
【００３１】
まず、複数の分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）のうち、予め定められた１番目の分散処理ノード１［１］は、自ノードで生成されたＭ個の分散データＤ［ｍ，１］（ｍ＝１，・・・，Ｍ）を、中間集計データＲｔ［ｍ，１］として、自ノードの通信ポート１０および通信路２［１］を介して次の番号の分散処理ノード１［２］に送信する（図３ステップＳ１０３，Ｓ１０４）。すなわち、このときの中間集計データＲｔ［ｍ，１］は、分散データＤ［ｍ，１］と同じである。
Ｒｔ［ｍ，１］＝Ｄ［ｍ，１］                                    ・・・（２）
【００３２】
そして、１番目の分散処理ノード１［１］は、後述する集計遅延タイマにより、各分散処理ノード１［ｎ］が分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を集計するために要した時間である集約通信時間と、この集約通信時間に加えて各分散処理ノード１［ｎ］が集計データを分配するために要した時間である集約分配通信時間の計測を開始する（図３ステップＳ１０５）。
【００３３】
次に、複数の分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）のうち、１番目とＮ番目とを除く、予め定められた中間の分散処理ノード１［ｉ］（ｉ＝２，・・・，Ｎ−１）は、分散処理ノード１［ｉ−１］から中間集計データＲｔ［ｍ，ｉ−１］（ｍ＝１，・・・，Ｍ）を自ノードの通信ポート１１および通信路２［ｉ−１］を介して受信する（図３ステップＳ１０６，Ｓ１０７）。
【００３４】
中間の分散処理ノード１［ｉ］（ｉ＝２，・・・，Ｎ−１）は、受信した中間集計データＲｔ［ｍ，ｉ−１］（ｍ＝１，・・・，Ｍ）と自ノードで生成された分散データＤ［ｍ，ｉ］との和を、対応する重みｗ［ｍ］毎に求めることにより、中間集計データＲｔ［ｍ，ｉ］を生成する（図３ステップＳ１０８）。すなわち、中間集計データＲｔ［ｍ，ｉ］は、Ｍ個の数値から構成される。中間集計データＲｔ［ｍ，ｉ］の計算式は以下のとおりである。
Ｒｔ［ｍ，ｉ］＝Ｒｔ［ｍ，ｉ−１］＋Ｄ［ｍ，ｉ］                ・・・（３）
【００３５】
そして、中間の分散処理ノード１［ｉ］（ｉ＝２，・・・，Ｎ−１）は、自ノードで生成された中間集計データＲｔ［ｍ，ｉ］（ｍ＝１，・・・，Ｍ）を自ノードの通信ポート１０および通信路２［ｉ］を介して次の番号の分散処理ノード１［ｉ＋１］に送信する（図３ステップＳ１０９）。
【００３６】
複数の分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）のうち、予め定められたＮ番目の分散処理ノード１［Ｎ］は、分散処理ノード１［Ｎ−１］から中間集計データＲｔ［ｍ，Ｎ−１］を自ノードの通信ポート１１および通信路２［Ｎ−１］を介して受信する（図３ステップＳ１１０，Ｓ１１１）。
【００３７】
Ｎ番目の分散処理ノード１［Ｎ］は、受信した中間集計データＲｔ［ｍ，Ｎ−１］（ｍ＝１，・・・，Ｍ）と自ノードで生成された分散データＤ［ｍ，Ｎ］との和を、対応する重みｗ［ｍ］毎に求めることにより、中間集計データＲｔ［ｍ，Ｎ］を生成する（図３ステップＳ１１２）。すなわち、中間集計データＲｔ［ｍ，Ｎ］は、Ｍ個の数値から構成される。中間集計データＲｔ［ｍ，Ｎ］の計算式は以下のとおりである。
Ｒｔ［ｍ，Ｎ］＝Ｒｔ［ｍ，Ｎ−１］＋Ｄ［ｍ，Ｎ］                ・・・（４）
【００３８】
そして、Ｎ番目の分散処理ノード１［Ｎ］は、自ノードで生成された中間集計データＲｔ［ｍ，Ｎ］（ｍ＝１，・・・，Ｍ）を自ノードの通信ポート１０および通信路２［Ｎ］を介して１番目の分散処理ノード１［１］に送信する（図３ステップＳ１１３）。
【００３９】
このように、式（２）、式（３）、式（４）により計算された、Ｍ個の数値から構成される中間集計データＲｔ［ｍ，Ｎ］（ｍ＝１，・・・，Ｍ）は、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）で生成されたＭ個の数値から構成される分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）に基づいて計算される。中間集計データＲｔ［ｍ，Ｎ］の値は以下の式により表すことができる。
【００４０】
【数２】
2020067688.tif 000004
【００４１】
次に、中間集計データＲｔ［ｍ，Ｎ］（ｍ＝１，・・・，Ｍ）を集計データとして、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）に分配する分配通信を行う。
１番目の分散処理ノード１［１］は、分散処理ノード１［Ｎ］から中間集計データＲｔ［ｍ，Ｎ］を自ノードの通信ポート１１および通信路２［Ｎ］を介して受信する（図４ステップＳ１１４，Ｓ１１５）。
【００４２】
１番目の分散処理ノード１［１］は、ステップＳ１０５で時間計測を開始した時点（中間集計データＲｔ［ｍ，１］を送信した時点）から中間集計データＲｔ［ｍ，Ｎ］を受信した時点までの時間を集約通信時間として、集約通信時間の計測を終了する（図４ステップＳ１１６）。
【００４３】
１番目の分散処理ノード１［１］は、計測した集約通信時間が所定の最大集計遅延時間を超えている場合（図４ステップＳ１１７においてＹＥＳ）、システム管理者に対して集計遅延異常を示す警報を発する（図４ステップＳ１１８）。
【００４４】
次に、１番目の分散処理ノード１［１］は、受信した中間集計データＲｔ［ｍ，Ｎ］（ｍ＝１，・・・，Ｍ）を、集計データＲ［ｍ］として、自ノードの通信ポート１１および通信路２［Ｎ］を介してＮ番目の分散処理ノード１［Ｎ］に送信する（図４ステップＳ１１９）。すなわち、分散処理ノード１［１］は、分散処理ノード１［Ｎ］からの中間集計データＲｔ［ｍ，Ｎ］を集計データＲ［ｍ］として分散処理ノード［Ｎ］に戻すことになる。集計データＲ［ｍ］は、中間集計データＲｔ［ｍ，Ｎ］と同じである。
【００４５】
【数３】
2020067688.tif 000005
【００４６】
続いて、複数の分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）のうち、１番目を除く分散処理ノード１［ｋ］（ｋ＝Ｎ，・・・，２）は、次の番号の分散処理ノード１［ｋ+］（ｋ+＝ｋ＋１、ただしｋ＝Ｎの場合はｋ+＝１）から集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を自ノードの通信ポート１０および通信路２［ｋ］を介して受信する（図４ステップＳ１２１，Ｓ１２２）。
【００４７】
分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）のうち、１番目を除く分散処理ノード１［ｋ］（ｋ＝Ｎ，・・・，２）は、受信した集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を自ノードの通信ポート１１および通信路２［ｋ−１］を介して前の番号の分散処理ノード１［ｋ−１］に送信する（図４ステップＳ１２３）。
【００４８】
１番目の分散処理ノード１［１］は、分散処理ノード１［２］から集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を自ノードの通信ポート１０および通信路２［１］を介して受信する（図４ステップＳ１２４，Ｓ１２５）。
【００４９】
ここで、１番目の分散処理ノード１［１］が、Ｍ個の数値から構成される集計データＲ［ｍ］を正常に受信するためには、他の分散処理ノード１［ｋ］（ｋ＝Ｎ，・・・，２）が集計データＲ［ｍ］を正常に受信することが必要である。分散処理ノード間の各通信路２［ｎ］（ｎ＝１，・・・，Ｎ）は、正常ではない集計データＲ［ｍ］を正常に戻す機能を有していない。
【００５０】
したがって、分散処理ノード１［１］が集計データＲ［ｍ］を正常に受信した場合、全ての分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）が正常に集計データＲ［ｍ］を受信できたことが保証される。分散処理ノード１［１］が正常に集計データＲ［ｍ］を受信できなかった場合は（ステップＳ１２５においてＮＯ）、ステップＳ１０３に戻って集約通信からやり直すようにすればよい。
【００５１】
なお、分散処理ノード１［１］が集計データＲ［ｍ］を正常に受信できたかどうかは、例えばステップＳ１１９で送信した集計データＲ［ｍ］とステップＳ１２４，Ｓ１２５で受信した集計データＲ［ｍ］とを比較することにより、判定することができる。すなわち、送信した集計データＲ［ｍ］と受信した集計データＲ［ｍ］とが一致すれば、集計データＲ［ｍ］を正常に受信できたと判定できる。
【００５２】
以上の分配通信により、全ての分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）は、同一の集計データＲ［ｍ］を取得することができる。
また、１番目の分散処理ノード１［１］は、集計データＲ［ｍ］を正常に受信できた場合、ステップＳ１０５で時間計測を開始した時点（中間集計データＲｔ［ｍ，１］を送信した時点）から集計データＲ［ｍ］を受信した時点までの時間を集約分配通信時間として、集約分配通信時間の計測を終了する（図４ステップＳ１２６）。
【００５３】
１番目の分散処理ノード１［１］は、計測した集約分配通信時間が所定の最大集計遅延時間を超えている場合（図４ステップＳ１２７においてＹＥＳ）、システム管理者に対して集計遅延異常を示す警報を発する（図４ステップＳ１２８）。
【００５４】
集約通信時間や集約分配通信時間は、集約通信の途中で中間集計データの通信が途切れた場合や、分配通信の途中で集計データの通信が途切れた場合に増大する。集約通信時間が最大集計遅延時間を超過した場合、あるいは集約分配通信時間が最大集計遅延時間を超過した場合に、分散処理ノード［１］が集計遅延異常を示す警報を発することで、分散処理システムの異常がシステム管理者に通知される。これにより、システム管理者に対して、集計遅延異常の解消に向けた対処の実施を促すことができる。
【００５５】
集約通信は、分散処理ノード１［１］→分散処理ノード１［２］→・・・→分散処理ノード１［Ｎ］→分散処理ノード１［１］という経路で行われる。分配通信は、分散処理ノード１［１］→分散処理ノード１［Ｎ］→・・・→分散処理ノード１［２］→分散処理ノード１［１］という経路で行われる。
【００５６】
つまり、集約通信と分配通信とは、互いに通信の方向が逆になる。集約通信と分配通信とは、双方向の通信を同時に行うことが可能な通信ポート１０，１１と通信路２［ｎ］とを介して行わるため、集約通信が完了するまで分配通信の開始を待つ必要がない。
【００５７】
すなわち、分散処理ノード１［１］が中間集計データＲｔ［ｍ，１］（ｍ＝１，・・・，Ｍ）の送信を完了する前に、分散処理ノード１［１］が中間集計データＲｔ［ｍ，Ｎ］を受信開始した場合は、この中間集計データＲｔ［ｍ，Ｎ］を集計データＲ［ｍ］とした分配通信を開始できる。
【００５８】
図５は分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）の重み更新処理を説明するフローチャートである。各分散処理ノード１［ｎ］は、集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を受信すると（図５ステップＳ１２９においてＹＥＳ）、受信した集計データＲ［ｍ］に基づいて、自ノード内のニューラルネットワークの重みｗ［ｍ］を更新する重み更新処理を行う（図５ステップＳ１３０）。重み更新処理においては、集計データＲ［ｍ］が示す、損失関数の勾配に基づいて損失関数が最小になるように重みｗ［ｍ］を番号ｍ毎に更新すればよい。重みｗ［ｍ］の更新は周知の技術であるので、詳細な説明は省略する。
【００５９】
このように、重み更新処理は、重みｗ［ｍ］の番号ｍの順番に取得した集計データＲ［ｍ］に基づいて、重みｗ［ｍ］を更新する処理である。このため、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）は、重みｗ［ｍ］に対する重み更新処理を、番号ｍの順番に行うことができる。
【００６０】
重み更新処理の終了により、１回のミニバッチ学習が終了し、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）は、更新された重みｗ［ｍ］に基づき、次のミニバッチ学習の処理を継続して行う。すなわち、各分散処理ノード１［ｎ］は、次のミニバッチ学習用のサンプルデータを図示しないデータ収集ノードから受け取り、上記で説明したミニバッチ学習の処理を繰り返すことにより、自ノードのニューラルネットワークの推論精度を向上させる。
【００６１】
本実施例で示したように、集約通信が完了するまで分配通信の開始を待つ必要がなく、集約通信中であっても、集計を終えたデータの一部から分配通信を開始することが可能であるため、集約通信を完了してから分配通信を開始するという従来技術と比較して、集約通信の開始から分配通信の完了までの時間を短縮することが可能であるため、より高速な深層学習の分散システムを提供することが可能である。
【００６２】
また、本実施例では、分散処理ノード１［１］が集計データＲ［ｍ］の取得を完了した時点で他の分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）が集計データＲ［ｍ］の取得を完了したことが保証されるため、信頼性の高い深層学習の分散処理システムを提供することが可能である。
【００６３】
さらに、本実施例では、集約通信時間が最大集計遅延時間を超過した場合、あるいは集約分配通信時間が最大集計遅延時間を超過した場合に、分散処理ノード［１］が集計遅延異常を示す警報を発することで、集約通信や分配通信の途中で通信が途切れる異常を即座に検知できる、保守性に優れた深層学習用分散処理システムを提供することが可能である。
【００６４】
［第２の実施例］
次に、本発明の第２の実施例について説明する。本実施例は、第１の実施例をより具体的に説明するものである。図６は本実施例に係る分散処理ノード１［１］の構成例を示すブロック図、図７は本実施例に係る分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）の構成例を示すブロック図である。
【００６５】
分散処理ノード１［１］は、通信ポート１０（第１の通信ポート）と、通信ポート１１（第２の通信ポート）と、中間集計データＲｔ［ｍ，１］（ｍ＝１，・・・，Ｍ）をパケット化して自ノードの通信ポート１０に出力する送信部１２（第１の送信部）と、自ノードの通信ポート１０から受信するパケットから集計データＲ［ｍ］を取得する受信部１３（第２の受信部）と、集計データＲ［ｍ］をパケット化して自ノードの通信ポート１１に出力する送信部１４（第２の送信部）と、自ノードの通信ポート１１から受信するパケットから中間集計データＲｔ［ｍ，Ｎ］（ｍ＝１，・・・，Ｍ）を取得する受信部１５（第１の受信部）と、図示しないデータ収集ノードから学習用のサンプルデータを受け取るサンプル入力部１６と、サンプルデータが入力されたときに、ニューラルネットワークの重みｗ［ｍ］の各々について、ニューラルネットワークの損失関数の勾配Ｇ［ｍ，１，ｓ］をサンプルデータ毎に計算する勾配計算処理部１７と、サンプルデータ毎の勾配Ｇ［ｍ，ｎ，ｓ］を集計した数値である分散データＤ［ｍ，１］を重みｗ［ｍ］毎に生成して保持するノード内集計処理部１８と、集計データＲ［ｍ］に基づいてニューラルネットワークの重みを更新する重み更新処理部２０と、ソフトウェア的に構築された数学モデルであるニューラルネットワーク２１と、集約通信時間と集約分配通信時間とを計測する集計遅延タイマ２２と、集約通信時間あるいは集約分配通信時間が最大集計遅延時間を超過した場合に、集計遅延異常を示す警報を発する警報発生部２３とを備えている。
【００６６】
分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）は、通信ポート１０（第１の通信ポート）と、通信ポート１１（第２の通信ポート）と、中間集計データＲｔ［ｍ，ｋ］（ｍ＝１，・・・，Ｍ）をパケット化して自ノードの通信ポート１０に出力する送信部１２（第１の送信部）と、自ノードの通信ポート１０から受信するパケットから集計データＲ［ｍ］を取得する受信部１３（第２の受信部）と、集計データＲ［ｍ］をパケット化して自ノードの通信ポート１１に出力する送信部１４（第２の送信部）と、自ノードの通信ポート１１から受信するパケットから中間集計データＲｔ［ｍ，ｋ−１］（ｍ＝１，・・・，Ｍ）を取得する受信部１５（第１の受信部）と、サンプル入力部１６と、サンプルデータが入力されたときに、ニューラルネットワークの重みｗ［ｍ］の各々について、ニューラルネットワークの損失関数の勾配Ｇ［ｍ，ｋ，ｓ］をサンプルデータ毎に計算する勾配計算処理部１７と、サンプルデータ毎の勾配Ｇ［ｍ，ｋ，ｓ］を集計した数値である分散データＤ［ｍ，ｋ］を重みｗ［ｍ］毎に生成して保持するノード内集計処理部１８と、受信した中間集計データＲｔ［ｍ，ｋ−１］（ｍ＝１，・・・，Ｍ）と自ノードで生成された分散データＤ［ｍ，ｋ］との和を、対応する重みｗ［ｍ］毎に求めて更新後の中間集計データＲｔ［ｍ，ｋ］を生成する集計データ生成部１９と、重み更新処理部２０と、ニューラルネットワーク２１とを備えている。
【００６７】
なお、分散処理ノード１［１］と分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）とは、後述のように同一のハードウェアで実現することが可能である。具体的には、外部からの初期設定により、各分散処理ノードの機能を、親ノード（分散処理ノード１［１］）あるいは子ノード（分散処理ノード１［ｋ］）の何れかに指定することが可能である。これにより、本発明では、全ての分散処理ノードを低コストに実現可能である。
【００６８】
図２のステップＳ１００で説明したとおり、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）のサンプル入力部１６は、データ収集ノードからサンプルデータｘ［ｎ，ｓ］（ｓ＝１，・・・，Ｓ）をミニバッチ毎に入力する。
【００６９】
図２のステップＳ１０１で説明したとおり、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）の勾配計算処理部１７は、サンプルデータｘ［ｎ，ｓ］が入力されたとき、ニューラルネットワーク２１のＭ個の重みｗ［ｍ］（ｍ＝１，・・・，Ｍ）の各々について、ニューラルネットワーク２１の損失関数の勾配Ｇ［ｍ，ｎ，ｓ］をサンプルデータｘ［ｎ，ｓ］毎に計算する。
【００７０】
図２ステップＳ１０２で説明したとおり、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）のノード内集計処理部１８は、サンプルデータ毎の勾配Ｇ［ｍ，ｎ，ｓ］を集計した数値である分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］毎に生成して保持する。
【００７１】
次に、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）の送信部１２は、外部からの初期設定により、親ノード（分散処理ノード１［１］）用の送信部として動作するか、子ノード（分散処理ノード１［ｋ］、ｋ＝２，・・・，Ｎ）用の送信部として動作するかを、設定できるようになっている。
【００７２】
親ノードとして設定された分散処理ノード１［１］の送信部１２は、自ノードのノード内集計処理部１８によって生成されたＭ個の分散データＤ［ｍ，１］（ｍ＝１，・・・，Ｍ）を中間集計データＲｔ［ｍ，１］として、この中間集計データＲｔ［ｍ，１］を、重みｗ［ｍ］の番号ｍの順番にパケット化し、生成した集約通信パケットＳＰ［ｐ，１］（ｐ＝１，・・・，Ｐ、Ｐは２以上の整数）を自ノードの通信ポート１０に出力する。この集約通信パケットＳＰ［ｐ，１］は、通信ポート１０から通信路２［１］を介して次の番号の分散処理ノード１［２］に送信される（図３ステップＳ１０３，Ｓ１０４）。
分散処理ノード１［１］の集計遅延タイマ２２は、集約通信時間の計測を開始する（図３ステップＳ１０５）。
【００７３】
一方、子ノードとして設定された各分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）の受信部１５は、分散処理ノード１［ｋ−１］から集約通信パケットＳＰ［ｐ，ｋ−１］（ｐ＝１，・・・，Ｐ）を自ノードの通信ポート１１および通信路２［ｋ−１］を介して受信し、受信した集約通信パケットＳＰ［ｐ，ｋ−１］から中間集計データＲｔ［ｍ，ｋ−１］（ｍ＝１，・・・，Ｍ）を取得する（図３ステップＳ１０６，Ｓ１０７，Ｓ１１０，Ｓ１１１）。
【００７４】
子ノードとして設定された各分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）の集計データ生成部１９は、自ノードの受信部１５によって取得された中間集計データＲｔ［ｍ，ｋ−１］（ｍ＝１，・・・，Ｍ）と自ノードのノード内集計処理部１８によって生成された分散データＤ［ｍ，ｋ］との和を、対応する重みｗ［ｍ］毎（番号ｍ毎）に求めることにより、中間集計データＲｔ［ｍ，ｋ］を番号ｍの順番に生成する（図３ステップＳ１０８，Ｓ１１２）。
【００７５】
そして、各分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）の送信部１２は、自ノードの集計データ生成部１９によって生成されたＭ個の中間集計データＲｔ［ｍ，ｋ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］の番号ｍの順番にパケット化し、生成した集約通信パケットＳＰ［ｐ，ｋ］（ｐ＝１，・・・，Ｐ）を自ノードの通信ポート１０に出力する。この集約通信パケットＳＰ［ｐ，ｋ］は、通信ポート１０から通信路２［ｋ］を介して次の番号の分散処理ノード１［ｋ+］（ｋ+＝ｋ＋１、ただしｋ＝Ｎの場合はｋ+＝１）に送信される（図３ステップＳ１０９，Ｓ１１３）。
【００７６】
次に、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）の送信部１４は、送信部１２と同様に外部からの初期設定により、親ノード（分散処理ノード１［１］）用の送信部として動作するか、子ノード（分散処理ノード１［ｋ］、ｋ＝２，・・・，Ｎ）用の送信部として動作するかを、設定できるようになっている。
【００７７】
親ノードとして設定された分散処理ノード１［１］の受信部１５は、分散処理ノード１［Ｎ］から集約通信パケットＳＰ［ｐ，Ｎ］を自ノードの通信ポート１１および通信路２［Ｎ］を介して受信し、受信した集約通信パケットＳＰ［ｐ，Ｎ］（ｐ＝１，・・・，Ｐ）から中間集計データＲｔ［ｍ，Ｎ］（ｍ＝１，・・・，Ｍ）を取得する（図４ステップＳ１１４，Ｓ１１５）。
【００７８】
親ノードとして設定された分散処理ノード１［１］の集計遅延タイマ２２は、集約通信時間の計測を終了する（図４ステップＳ１１６）。
分散処理ノード１［１］の警報発生部２３は、集計遅延タイマ２２によって計測された集約通信時間が所定の最大集計遅延時間を超えている場合（図４ステップＳ１１７においてＹＥＳ）、システム管理者に対して警報を発する（図４ステップＳ１１８）。警報の出力方法としては、例えば警報発生を知らせる信号をシステム管理者の端末装置に送信する等の方法がある。
【００７９】
親ノードとして設定された分散処理ノード１［１］の送信部１４は、自ノードの受信部１５によって取得された中間集計データＲｔ［ｍ，Ｎ］（ｍ＝１，・・・，Ｍ）を集計データＲ［ｍ］として、この集計データＲ［ｍ］を、重みｗ［ｍ］の番号ｍの順番にパケット化し、生成した分配通信パケットＤＰ［ｐ，１］（ｐ＝１，・・・，Ｐ）を自ノードの通信ポート１１に出力する。この分配通信パケットＤＰ［ｐ，１］は、通信ポート１１から通信路２［Ｎ］を介してＮ番目の分散処理ノード１［Ｎ］に送信される（図４ステップＳ１１９）。
【００８０】
一方、子ノードとして設定された各分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）の受信部１３は、分散処理ノード１［ｋ+］（ｋ+＝ｋ＋１、ただしｋ＝Ｎの場合はｋ+＝１）から分配通信パケットＤＰ［ｐ，ｋ+］（ｐ＝１，・・・，Ｐ）を自ノードの通信ポート１０および通信路２［ｋ］を介して受信し、受信した分配通信パケットＤＰ［ｐ，ｋ+］から集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を取得する（図４ステップＳ１２１，Ｓ１２２）。
【００８１】
子ノードとして設定された各分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）の送信部１４は、受信部１３によって取得された集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］の番号ｍの順番にパケット化し、生成した分配通信パケットＤＰ［ｐ，ｋ］（ｐ＝１，・・・，Ｐ）を自ノードの通信ポート１１に出力する。この分配通信パケットＤＰ［ｐ，ｋ］は、通信ポート１１から通信路２［ｋ−１］を介して分散処理ノード１［ｋ−１］に送信される（図４ステップＳ１２３）。
【００８２】
親ノードとして設定された分散処理ノード１［１］の受信部１３は、分散処理ノード１［２］から分配通信パケットＤＰ［ｐ，２］（ｐ＝１，・・・，Ｐ）を自ノードの通信ポート１０および通信路２［１］を介して受信し、受信した分配通信パケットＤＰ［ｐ，２］から集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を取得する（図４ステップＳ１２４，Ｓ１２５）。
【００８３】
親ノードとして設定された分散処理ノード１［１］の集計遅延タイマ２２は、集約分配通信時間の計測を終了する（図４ステップＳ１２６）。
分散処理ノード１［１］の警報発生部２３は、集計遅延タイマ２２によって計測された集約分配通信時間が所定の最大集計遅延時間を超えている場合（図４ステップＳ１２７においてＹＥＳ）、システム管理者に対して警報を発する（図４ステップＳ１２８）。
【００８４】
なお、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）の送信部１２は、Ｍ個の中間集計データＲｔ［ｍ，ｎ］を、重みｗ［ｍ］の番号ｍの順番にＬ（Ｌは１以上Ｍ未満の整数）個ずつＰ個（Ｐは２以上の整数）の集約通信パケットに振り分けて、全ての集約通信パケットを送信し終えるまで、Ｐ個の集約通信パケットを順番に次の番号の分散処理ノード１［ｎ+］（ｎ+＝ｎ＋１、ただしｎ＝Ｎの場合はｎ+＝１）に送信する。すなわち、ｐ番目（ｐ＝１，・・・，Ｐ）に送信する集約通信パケットＳＰ［ｐ，ｎ］には、Ｌ個の中間集計データＲｔ［ｒ，ｎ］（ｒ＝Ｌ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌ）が格納される。
【００８５】
ＭがＬで割り切れない条件では、Ｐ番目の集約通信パケットＳＰ［Ｐ，ｎ］には、（Ｍ−Ｌ×（Ｐ−１））個の中間集計データＲｔ［ｒ，ｎ］（ｒ＝Ｌ×（Ｐ−１）＋ｑ、ｑ＝１，・・・，Ｍ−Ｌ×（Ｐ−１））が格納される。
【００８６】
Ｐ番目の集約通信パケットＳＰ［Ｐ，ｎ］については、（Ｍ−Ｌ×（Ｐ−１））個の中間集計データＲｔ［ｒ，ｎ］の後に、｛Ｌ−（Ｍ−Ｌ×（Ｐ−１））｝個のダミーの数値を追加し、全ての集約通信パケットが等しくＬ個のデータを格納するようにしてもよい。
【００８７】
また、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）の送信部１４は、Ｍ個の集計データＲ［ｍ］（ｍ＝１，・・・，Ｍ）を、重みｗ［ｍ］の番号ｍの順番にＬ個ずつＰ個の分配通信パケットに振り分けて、全ての分配通信パケットを送信し終えるまで、Ｐ個の分配通信パケットを順番に分散処理ノード１［ｎ-］（ｎ-＝ｎ−１、ただしｎ＝１の場合はｎ-＝Ｎ）に送信する。すなわち、ｐ番目（ｐ＝１，・・・，Ｐ）に送信する分配通信パケットＤＰ［ｐ，ｎ］には、Ｌ個の集計データＲ［ｒ］（ｒ＝Ｌ×（ｐ−１）＋ｌ、ｌ＝１，・・・，Ｌ）が格納される。
【００８８】
ＭがＬで割り切れない条件では、Ｐ番目の分配通信パケットＤＰ［ｐ，ｎ］には、（Ｍ−Ｌ×（Ｐ−１））個の集計データＲ［ｒ］（ｒ＝Ｌ×（Ｐ−１）＋ｑ、ｑ＝１，・・・，Ｍ−Ｌ×（Ｐ−１））が格納される。
【００８９】
Ｐ番目の分配通信パケットＤＰ［Ｐ，ｎ］については、（Ｍ−Ｌ×（Ｐ−１））個の集計データＲ［ｒ］の後に、｛Ｌ−（Ｍ−Ｌ×（Ｐ−１））｝個のダミーの数値を追加し、全ての分配通信パケットが等しくＬ個のデータを格納するようにしてもよい。
【００９０】
各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）の重み更新処理部２０は、自ノードの受信部１３によって取得された集計データＲ［ｍ］に基づいて、自ノード内のニューラルネットワーク２１の重みｗ［ｍ］を更新する重み更新処理を行う（図５ステップＳ１３０）。
【００９１】
図８に、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）の処理の概要を示す。図９〜図１１に、各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）間の中間集計データおよび集計データの通信（集約通信と分配通信）のシーケンスを示す。
【００９２】
なお、図１０は、図９の８０の部分の処理を示している。また、８１は分散処理ノード１［１］におけるノード間集計処理を示している。同様に、図１０の９０，９１，９２は分散処理ノード１［α−１］，１［α］、１［α＋１］（α＝３，・・・，Ｎ−１）におけるノード間集計処理を示している。図１１は、図９の８２の部分の処理、すなわち分散処理ノード１［β＋１］，１［β］、１［β−１］（β＝Ｎ−１，・・・，３）の分配通信処理を示している。
【００９３】
以上のように、分散処理ノード１［１］を起点・終点とした分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）から分散処理ノード［ｎ+］（ｎ+＝ｎ＋１、ただしｎ＝Ｎの場合はｎ+＝１）への集約通信（中間集計データＲｔ［ｍ，ｎ］を分散処理ノード［ｎ+］に送信する処理）、分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）が行うノード間集計処理（受信した中間集計データＲｔ［ｍ，ｋ−１］と自ノードで生成した分散データＤ［ｍ，ｋ］とに基づいて中間集計データＲｔ［ｍ，ｋ］を計算する処理）、分散処理ノード１［１］を起点・終点とした分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）から分散処理ノード［ｎ-］（ｎ-＝ｎ−１、ただしｎ＝１の場合はｎ-＝Ｎ）への分配通信（集計データＲ［ｍ］を各分散処理ノード［ｎ-］に分配する処理）、の全ては、前記の重みｗ［ｍ］の番号ｍの順番に行われており、番号ｍを単位としたパイプライン化が可能である。
【００９４】
本実施例では、図９〜図１１に示すように、集約通信処理とノード間集計処理と分配通信処理とを、並行してほぼ同時に（番号ｍを単位としたパイプライン処理で）行うことが可能であり、各通信や各処理が終了するまで、次の処理を開始できなかった従来技術と比較したとき、処理時間の大幅な短縮が可能となる。
【００９５】
［第３の実施例］
第１、第２の実施例では、集約通信時間が最大集計遅延時間を超過した場合、あるいは分配通信時間が最大集計遅延時間を超過した場合に集計遅延異常を示す警報を発するが、本実施例は、前記の最大集計遅延時間の値を小さくすることにより、集約通信や分配通信の途中で通信が途切れる分散処理システムの異常をより短時間で検出可能とする例である。
【００９６】
まず、本実施例において、前記の最大集計遅延時間の値を小さくすることが可能な理由について以下に説明する。
第１、第２の実施例において、最大集計遅延時間の値は、全分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）が分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を集計する準備が完了した状態から、分散処理ノード１［１］が集約通信を開始した時点から分散処理ノード１［１］が分配通信を完了する時点までの時間に、各分散処理ノード１［ｎ］が分散データＤ［ｍ，ｎ］を集計する準備が完了する時刻のばらつき分を加える必要がある。
【００９７】
すなわち、前回の分配通信の完了後、重み更新処理部２０による重み更新処理と勾配計算処理部１７による勾配計算処理とノード内集計処理部１８によるノード内集計処理とを含む、集約通信を開始するための準備（分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を集計する準備）が行われるが、この準備に要する集約通信準備時間は、各分散処理ノード１［ｎ］の個体差（基本性能や冷却能力など）による演算速度のばらつきが原因となって、Ｔ１〜Ｔ２の間でばらつきが生じる。
【００９８】
分散処理ノード１［１］の集約通信準備時間が仮にＴ１の値となり、分散処理ノード１［１］とほぼ同じ時刻に分配通信が完了する分散処理ノード［２］の集約通信準備時間がＴ２の値となった場合、前回の分配通信完了からＴ１後に、分散処理ノード１［１］が分散データＤ［ｍ，１］（ｍ＝１，・・・，Ｍ）の生成を完了して集約通信を開始したとしても、分散処理ノード１［１］から中間集計データＲｔ［ｍ，１］を受信する分散処理ノード１［２］は、（Ｔ２−Ｔ１）時間が経過するまで分散データＤ［ｍ，２］の生成が完了しないので、分散処理ノード１［２］から分散処理ノード１［３］への集約通信（中間集計データＲｔ［ｍ，２］の送信）を開始できない。
【００９９】
したがって、分散処理システムは正常であっても、集約通信準備時間のばらつき分である、（Ｔ２−Ｔ１）時間の遅れが生じる可能性がある。そこで、第１、第２の実施例では、この遅れを異常と判定しないための措置として、最大集計遅延時間の値に、全分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）が分散データＤ［ｍ，ｎ］（ｍ＝１，・・・，Ｍ）を集計する準備が完了した状態から、分散処理ノード１［１］が集約通信を開始した時点から分散処理ノード１［１］が分配通信を完了する時点までの時間に、各分散処理ノード１［ｎ］が分散データＤ［ｍ，ｎ］を集計する準備が完了する時刻のばらつき分（Ｔ２−Ｔ１）を加える必要がある。
【０１００】
一方、本実施例では、第１、第２の実施例において説明した集約通信以後の処理を実施する前に、以下の処理を行う。
図１２は本実施例に係る分散処理ノード１［１］の構成例を示すブロック図、図１３は本実施例に係る分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）の構成例を示すブロック図である。
【０１０１】
分散処理ノード１［１］は、通信ポート１０，１１と、送信部１２ａと、受信部１３ａと、送信部１４ａと、受信部１５ａと、サンプル入力部１６と、勾配計算処理部１７と、ノード内集計処理部１８と、重み更新処理部２０と、ニューラルネットワーク２１と、集計遅延タイマ２２と、警報発生部２３と、自ノードの通信ポート１０から中間集計データＲｔ［ｍ，１］が送信される前に、分散データを集計する準備が完了したか否かを示す集計開始確認フラグを含む管理パケットを定期的に生成する管理パケット生成部２４とを備えている。
【０１０２】
分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）は、通信ポート１０，１１と、送信部１２ａと、受信部１３ａと、送信部１４ａと、受信部１５ａと、サンプル入力部１６と、勾配計算処理部１７と、ノード内集計処理部１８と、集計データ生成部１９と、重み更新処理部２０と、ニューラルネットワーク２１と、自ノードにおいて分散データを集計する準備が未了の場合に、受信した管理パケットに含まれる集計開始確認フラグの値を、分散データを集計する準備が完了していないことを示す値に更新するフラグ更新部２５とを備えている。
【０１０３】
図１４は集約通信処理の前に本実施例の分散処理ノード１［１］が行う処理を説明するフローチャート、図１５は集約通信処理の前に本実施例の分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）が行う処理を説明するフローチャート、図１６は集約通信処理の前に行われる分散処理ノード間の通信のシーケンスを示す図である。なお、図１６の例では、Ｎ＝５としている。
【０１０４】
分散処理ノード１［１］の管理パケット生成部２４は、自ノードの通信ポート１０から中間集計データＲｔ［ｍ，１］が送信される前に、分散データを集計する準備が完了したか否かを示す集計開始確認フラグを含む管理パケットＭＰを定期的に生成する（図１４ステップＳ２００）。
【０１０５】
この管理パケットＭＰの生成周期（図１６のΔＴ）は、分散処理システムの各通信路２［ｎ］を通過する、本実施例に関与しない通信帯域が管理パケットＭＰの通信によって低下する影響を考慮した上で、各分散処理ノード１［ｎ］が分散データを集計する準備が完了する時刻のばらつき分である（Ｔ２−Ｔ１）時間よりも十分に短い値とする。管理パケットＭＰの生成周期ΔＴが（Ｔ２−Ｔ１）時間に近い値の場合は、全分散処理ノード１［ｎ］が分散データを集計する準備が完了した時点から、分散処理ノード１［１］が集約通信を開始するまでの遅延が、最悪ケースでは管理パケットＭＰの生成周期ΔＴの１回分だけ大きくなるので、深層学習の処理性能を劣化させる。
【０１０６】
また、管理パケット生成部２４は、自ノードにおいて分散データＤ［ｍ，１］（ｍ＝１，・・・，Ｍ）を集計する準備が未了の場合（自ノードのノード内集計処理部１８による分散データＤ［ｍ，１］の生成が完了していない場合）、集計開始確認フラグの値を例えば“０”とし、分散データＤ［ｍ，１］を集計する準備が完了している場合（自ノードのノード内集計処理部１８による分散データＤ［ｍ，１］の生成が完了している場合）、集計開始確認フラグの値を例えば“１”とする。
【０１０７】
分散処理ノード１［１］の送信部１２ａは、自ノードの管理パケット生成部２４によって生成された管理パケットＭＰを自ノードの通信ポート１０に出力する。この管理パケットＭＰは、通信ポート１０から通信路２［１］を介して次の番号の分散処理ノード１［２］に送信される（図１４ステップＳ２０１）。
【０１０８】
図１６のＭＰ（０）は管理パケットＭＰに含まれる集計開始確認フラグの値が“０”であることを示し、ＭＰ（１）は集計開始確認フラグの値が“１”であることを示している。図１６の例では、分散処理ノード１［１］が最初に管理パケットＭＰを送信する時点では、分散データＤ［ｍ，１］（ｍ＝１，・・・，Ｍ）を集計する準備が未了のため、集計開始確認フラグの値が“０”の管理パケットＭＰが分散処理ノード１［１］から送信される。一方、図１６に示す時刻ｔ１において、分散処理ノード１［１］の分散データＤ［ｍ，１］を集計する準備が完了したため、このｔ１以降の時刻においては、集計開始確認フラグの値が“１”の管理パケットＭＰが分散処理ノード１［１］から定期的に送信される。
【０１０９】
なお、本実施例のように管理パケットＭＰの生成を行うのではなく、分散処理ノード１［１］が分散データＤ［ｍ，１］（ｍ＝１，・・・，Ｍ）を集計する準備が完了した時点から（Ｔ２−Ｔ１）時間を待って集約通信を開始すると、全分散処理ノード１［ｎ］が分散データＤ［ｍ，ｎ］を集計する準備が完了した状態になっているので、深層学習の処理性能を劣化させるが、最大集計遅延時間から前記ばらつき分を削減できる。
【０１１０】
分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）の受信部１５ａは、分散処理ノード１［ｋ−１］から管理パケットＭＰを自ノードの通信ポート１１および通信路２［ｋ−１］を介して受信する（図１５ステップＳ３００）。
【０１１１】
分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）のフラグ更新部２５は、自ノードにおいて分散データＤ［ｍ，ｋ］（ｍ＝１，・・・，Ｍ）を集計する準備が未了の場合、すなわち自ノードのノード内集計処理部１８による分散データＤ［ｍ，ｋ］の生成が完了していない場合（図１５ステップＳ３０１においてＹＥＳ）、受信部１５ａによって受信された管理パケットＭＰに含まれる集計開始確認フラグの値を、分散データＤ［ｍ，ｋ］を集計する準備が完了していないことを示す値（“０”）に更新し、更新後の管理パケットＭＰを自ノードの送信部１２ａに渡す（図１５ステップＳ３０２）。
【０１１２】
また、分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）のフラグ更新部２５は、自ノードにおいて分散データＤ［ｍ，ｋ］（ｍ＝１，・・・，Ｍ）を集計する準備が完了している場合（ステップＳ３０１においてＮＯ）、受信部１５ａによって受信された管理パケットＭＰの集計開始確認フラグの値を更新せずに、管理パケットＭＰをそのまま自ノードの送信部１２ａに渡す。
【０１１３】
そして、各分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）の送信部１２ａは、自ノードのフラグ更新部２５から受け取った管理パケットＭＰを自ノードの通信ポート１０に出力する。この管理パケットＭＰは、通信ポート１０から通信路２［ｋ］を介して次の番号の分散処理ノード１［ｋ+］（ｋ+＝ｋ＋１、ただしｋ＝Ｎの場合はｋ+＝１）に送信される（図１５ステップＳ３０３）。
【０１１４】
図１６の例では、分散処理ノード１［２］が１番目と２番目の管理パケットＭＰを分散処理ノード１［１］から受信した時点では、分散データＤ［ｍ，２］（ｍ＝１，・・・，Ｍ）を集計する準備が未了のため、集計開始確認フラグの値が“０”に更新された上で、管理パケットＭＰが分散処理ノード１［２］から分散処理ノード１［３］へ送信される。一方、図１６に示す時刻ｔ２において、分散処理ノード１［２］の分散データＤ［ｍ，２］を集計する準備が完了したため、このｔ２以降の時刻においては、集計開始確認フラグの値が“１”のまま更新されずに、管理パケットＭＰが分散処理ノード１［２］から分散処理ノード１［３］へ送信される。
【０１１５】
他の分散処理ノード１［３］，１［４］，１［５］においても同様の動作が行われる。図１６のｔ３，ｔ４，ｔ５は、それぞれ分散処理ノード１［３］，１［４］，１［５］において分散データを集計する準備が完了した時刻を示している。
【０１１６】
分散処理ノード１［１］の受信部１５ａは、分散処理ノード１［Ｎ］から管理パケットＭＰを自ノードの通信ポート１１および通信路２［Ｎ］を介して受信する（図１４ステップＳ２０２）。
【０１１７】
分散処理ノード１［１］の送信部１２ａは、自ノードの受信部１５ａによって受信された管理パケットＭＰに含まれる集計開始確認フラグが、分散データを集計する準備が完了したことを示す値（“１”）である場合（図１４ステップＳ２０３においてＹＥＳ）、集約通信を開始する（図１４ステップＳ２０４）。具体的には、第１、第２の実施例と同様に、送信部１２ａは、分散データＤ［ｍ，１］を中間集計データＲｔ［ｍ，１］として、この中間集計データＲｔ［ｍ，１］をパケット化し、生成した集約通信パケットＳＰ［ｐ，１］（ｐ＝１，・・・，Ｐ）を自ノードの通信ポート１０に出力する。この集約通信パケットＳＰ［ｐ，１］は、通信ポート１０から通信路２［１］を介して次の番号の分散処理ノード１［２］に送信される（図３ステップＳ１０４）。
【０１１８】
また、分散処理ノード１［１］は、自ノードの受信部１５ａによって受信された管理パケットＭＰに含まれる集計開始確認フラグが、分散データを集計する準備が完了していないことを示す値（“０”）である場合、ステップＳ２００に戻る。こうして、受信部１５ａによって受信された管理パケットＭＰに含まれる集計開始確認フラグが、分散データを集計する準備が完了したことを示す値（“１”）になるまで、ステップＳ２００〜Ｓ２０３の処理が繰り返し実施される。
【０１１９】
集約通信開始後の処理は、第１、第２の実施例で説明したとおりである。本実施例の各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）は、ミニバッチ学習毎に図１４〜図１６、図３〜図４、図９〜図１１で説明した処理を実施すればよい。
【０１２０】
本実施例では、少なくとも１個の分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）において、分散データを集計する準備が未了の状況であれば、当該分散処理ノードによって管理パケットＭＰの集計開始確認フラグが、分散データを集計する準備が完了していないことを示す値に更新される。この分散処理ノードの後ろに、分散データを集計する準備が完了した分散処理ノードがあったとしても、管理パケットＭＰの集計開始確認フラグが更新されることなく中継されるので、分散処理ノード１［１］は、分散データを集計する準備が未了の分散処理ノードがあることを知ることができる。
【０１２１】
なお、本実施例では、集約通信と同様に、分散処理ノード１［１］→分散処理ノード［２］→・・・→分散処理ノード［Ｎ］→分散処理ノード１［１］という経路で管理パケットＭＰの中継が行われる。
【０１２２】
これに対して、分配通信と同様に、分散処理ノード１［１］→分散処理ノード［Ｎ］→・・・→分散処理ノード［２］→分散処理ノード１［１］という経路で管理パケットＭＰの中継を行ってもよい。この場合には、分散処理ノード１［１］の送信部１２ａの代わりに、送信部１４ａが、管理パケットＭＰの分散処理ノード１［Ｎ］への送信を行う（図１４ステップＳ２０１）。また、分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）の受信部１５ａの代わりに、受信部１３ａが、分散処理ノード１［ｋ+］（ｋ+＝ｋ＋１、ただしｋ＝Ｎの場合はｋ+＝１）から管理パケットＭＰを受信する（図１５ステップＳ３００）。
【０１２３】
また、分散処理ノード１［ｋ］の送信部１２ａの代わりに、送信部１４ａが、自ノードのフラグ更新部２５から受け取った管理パケットＭＰを分散処理ノード１［Ｋ−１］に送信する（図１５ステップＳ３０３）。また、分散処理ノード１［１］の受信部１５ａの代わりに、受信部１３ａが、分散処理ノード１［２］から管理パケットＭＰを受信する（図１４ステップＳ２０２）。分散処理ノード１［１］の送信部１２ａは、自ノードの受信部１３ａによって受信された管理パケットＭＰに含まれる集計開始確認フラグが、分散データを集計する準備が完了したことを示す値（“１”）である場合（図１４ステップＳ２０３においてＹＥＳ）、集約通信を開始すればよい（図１４ステップＳ２０４）。
【０１２４】
また、分散処理ノード１［１］→分散処理ノード［２］→・・・→分散処理ノード［Ｎ］→分散処理ノード１［１］という経路で管理パケットＭＰの中継を行うと同時に、分散処理ノード１［１］→分散処理ノード［Ｎ］→・・・→分散処理ノード［２］→分散処理ノード１［１］という経路で管理パケットＭＰの中継を行ってもよい。この場合、分散処理ノード１［１］の送信部１２ａは、自ノードの受信部１５ａによって受信された管理パケットＭＰに含まれる集計開始確認フラグが、分散データを集計する準備が完了したことを示す値で、かつ自ノードの受信部１５ａによって受信された管理パケットＭＰに含まれる集計開始確認フラグが、分散データを集計する準備が完了したことを示す値である場合に、集約通信を開始すればよい。
【０１２５】
また、分散処理ノード１［１］による管理パケットＭＰの生成・送信の開始は、分散処理ノード１［１］が分散データを集計する準備が完了した時点で開始する方法の他に、図１６に示したように、分散処理ノード１［１］が分散データを集計する準備が未了の時点で開始することも可能であり、例えば、分配通信の完了後から次回の集約通信の開始に備えて管理パケットＭＰの生成・送信を行うことも可能である。このように、集約通信や分配通信を行っていない期間中も、分散処理ノード１［１］が管理パケットＭＰを定期的に流して戻ってくることを確認することで、各ノードや通信路の正常性確認に利用できる。
【０１２６】
このように、本実施例では、分散処理ノード１［１］が集約通信を開始する時点で、他の各分散処理ノード１［ｋ］（ｋ＝２，・・・，Ｎ）も集約通信を開始可能な状態にあることが保証されるため、最大集計遅延時間の値に、各分散処理ノード１［ｎ］が分散データＤ［ｍ，ｎ］を集計する準備が完了する時刻のばらつき分（Ｔ２−Ｔ１）を加える必要がなく、その分最大集計遅延時間を削減することができる。
【０１２７】
第１〜第３の実施例で説明した各分散処理ノード１［ｎ］（ｎ＝１，・・・，Ｎ）は、ＣＰＵ（Central Processing Unit）、記憶装置及びインタフェースを備えたコンピュータと、これらのハードウェア資源を制御するプログラムによって実現することができる。
【０１２８】
このコンピュータの構成例を図１７に示す。コンピュータは、ＣＰＵ１００と、記憶装置１０１と、インターフェース装置（以下、Ｉ／Ｆと略する）１０２とを備えている。Ｉ／Ｆ１０２には、例えば通信ポート１００，１１を含む通信回路が接続される。ＣＰＵ１００は、記憶装置１０１に格納されたプログラムに従って第１〜第３の実施例で説明した処理を実行し、本発明の分散処理システムおよび分散処理方法を実現する。
【産業上の利用可能性】
【０１２９】
本発明は、ニューラルネットワークの機械学習を行う技術に適用することができる。
【符号の説明】
【０１３０】
１…分散処理ノード、２…通信路、１０，１１…通信ポート、１２，１２ａ，１４，１４ａ…送信部、１３，１３ａ，１５，１５ａ…受信部、１６…サンプル入力部、１７…勾配計算処理部、１８…ノード内集計処理部、１９…集計データ生成部、２０…重み更新処理部、２１…ニューラルネットワーク、２２…集計遅延タイマ、２３…警報発生部、２４…管理パケット生成部、２５…フラグ更新部。
【図１】
2020067688.tif 000006
【図２】
2020067688.tif 000007
【図３】
2020067688.tif 000008
【図４】
2020067688.tif 000009
【図５】
2020067688.tif 000010
【図６】
2020067688.tif 000011
【図７】
2020067688.tif 000012
【図８】
2020067688.tif 000013
【図９】
2020067688.tif 000014
【図１０】
2020067688.tif 000015
【図１１】
2020067688.tif 000016
【図１２】
2020067688.tif 000017
【図１３】
2020067688.tif 000018
【図１４】
2020067688.tif 000019
【図１５】
2020067688.tif 000020
【図１６】
2020067688.tif 000021
【図１７】
2020067688.tif 000022
【図１８】
2020067688.tif 000023