(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024106288
(43)【公開日】2024-08-07
(54)【発明の名称】計算処理管理装置、計算処理管理システム、および計算処理管理方法
(51)【国際特許分類】
G06F 9/50 20060101AFI20240731BHJP
G06N 20/00 20190101ALI20240731BHJP
G06N 3/063 20230101ALI20240731BHJP
G06N 3/08 20230101ALI20240731BHJP
【FI】
G06F9/50 150A
G06N20/00
G06N3/063
G06N3/08
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2023010564
(22)【出願日】2023-01-26
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100104190
【弁理士】
【氏名又は名称】酒井 昭徳
(72)【発明者】
【氏名】山口 久勝
(57)【要約】
【課題】計算処理を効率よく並列処理すること。
【解決手段】情報処理装置100は、複数の演算部101を制御可能である。情報処理装置100は、複数の演算部101のうち、処理速度が一定以上である演算部101が分類された1以上のグループと、処理速度が一定未満である演算部101が分類された1以上のグループとを含む複数のグループを特定する。情報処理装置100は、特定した複数のグループのそれぞれのグループにおいて、所定のステップを繰り返し実施するよう、複数のグループを制御する。情報処理装置100は、所定の条件を満たした場合、それぞれのグループにおいて、所定のステップを繰り返し実施することを停止するよう、複数のグループを制御する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
単位処理を複数回実施する計算処理を並列処理する複数の演算部のうち、処理速度が一定以上である演算部が分類された1以上のグループと、処理速度が前記一定未満である演算部が分類された1以上のグループとを含む複数のグループを特定し、
特定した前記複数のグループのそれぞれのグループにおいて、当該グループに属するそれぞれの演算部が、前記単位処理を1回ずつ実施する第1動作と、当該グループに属するそれぞれの演算部が、他のグループが実施した前記単位処理の結果を集約して得られる最新の情報を参照して、当該グループが実施した前記単位処理の結果を集約して得られる情報を生成する、前記第1動作の後の第2動作とを含むステップを繰り返し実施するよう、前記複数のグループを制御する、
制御部を有することを特徴とする計算処理管理装置。
【請求項2】
前記制御部は、
特定した前記複数のグループのうちいずれかのグループにおいて、前記ステップを繰り返し実施した回数が閾値以上である場合、前記それぞれのグループにおいて、以降、前記ステップを繰り返し実施しないよう、前記複数のグループを制御する、ことを特徴とする請求項1に記載の計算処理管理装置。
【請求項3】
前記制御部は、
前記複数の演算部のそれぞれの演算部が、テスト学習処理を1回以上実施するよう、前記複数の演算部を制御することにより、前記複数の演算部のそれぞれの演算部の処理速度に関する指標値を取得し、
取得した前記指標値に基づいて、前記複数の演算部のうち、処理速度が一定以上である演算部が分類された1以上のグループと、処理速度が一定未満である演算部が分類された1以上のグループとを含む複数のグループを特定する、ことを特徴とする請求項1または2に記載の計算処理管理装置。
【請求項4】
前記制御部は、
前記それぞれのグループに属する演算部のうち、処理速度が最も遅い演算部に、他のグループが実施した前記単位処理の結果を集約して得られる最新の情報を参照して、当該グループが実施した前記単位処理の結果を集約して得られる情報を生成する、第1プロセスを配備し、
特定した前記複数のグループのいずれかのグループに属する演算部のうち、処理速度が最も遅い演算部に、当該いずれかのグループにおいて、前記ステップを繰り返し実施した回数が閾値以上であるか否かを判定する第2プロセスを配備し、
配備した前記第1プロセス、および、前記第2プロセスを用いて、前記それぞれのグループにおいて、前記ステップを繰り返し実施するよう、前記複数のグループを制御する、ことを特徴とする請求項2に記載の計算処理管理装置。
【請求項5】
前記複数のグループのそれぞれのグループは、前記第1動作を他のグループと同期せずに実施するグループであって、
前記複数のグループのそれぞれのグループに属するいずれかの演算部は、
当該グループにおいて、前記ステップのうち前記第2動作を開始した際に、他のグループが実施した前記単位処理の結果を集約して得られた最新の情報が存在すれば、当該最新の情報と、当該グループに属する他の演算部が実施した前記単位処理の結果とを取得し、取得した当該最新の情報を参照して、当該いずれかの演算部が実施した前記単位処理の結果と、取得した当該グループに属する他の演算部が実施した前記単位処理の結果とに基づいて、当該グループが実施した前記単位処理の結果を集約して得られる情報を生成する、ことを特徴とする請求項1または2に記載の計算処理管理装置。
【請求項6】
前記複数のグループのそれぞれのグループに属するいずれかの演算部は、
当該グループにおいて、前記ステップのうち前記第2動作を開始した際に、他のグループが実施した前記単位処理の結果を集約して得られた最新の情報が存在しなければ、当該グループに属する他の演算部が実施した前記単位処理の結果を取得し、当該いずれかの演算部が実施した前記単位処理の結果と、取得した当該グループに属する他の演算部が実施した前記単位処理の結果とに基づいて、当該グループが実施した前記単位処理の結果を集約して得られる情報を生成する、ことを特徴とする請求項5に記載の計算処理管理装置。
【請求項7】
単位処理を複数回実施する計算処理を並列処理する複数の演算部と、前記複数の演算部を制御する制御部とを含む計算処理管理システムであって、
前記制御部は、
複数の演算部のうち、処理速度が一定以上である演算部が分類された1以上のグループと、処理速度が前記一定未満である演算部が分類された1以上のグループとを含む複数のグループを特定し、
特定した前記複数のグループのそれぞれのグループにおいて、当該グループに属するそれぞれの演算部が、前記単位処理を1回ずつ実施する第1動作と、当該グループに属するそれぞれの演算部が、他のグループが実施した前記単位処理の結果を集約して得られる最新の情報を参照して、当該グループが実施した前記単位処理の結果を集約して得られる情報を生成する、前記第1動作の後の第2動作とを含むステップを繰り返し実施するよう、前記複数のグループを制御する、
ことを特徴とする計算処理管理システム。
【請求項8】
単位処理を複数回実施する計算処理を並列処理する複数の演算部のうち、処理速度が一定以上である演算部が分類された1以上のグループと、処理速度が前記一定未満である演算部が分類された1以上のグループとを含む複数のグループを特定し、
特定した前記複数のグループのそれぞれのグループにおいて、当該グループに属するそれぞれの演算部が、前記単位処理を1回ずつ実施する第1動作と、当該グループに属するそれぞれの演算部が、他のグループが実施した前記単位処理の結果を集約して得られる最新の情報を参照して、当該グループが実施した前記単位処理の結果を集約して得られる情報を生成する、前記第1動作の後の第2動作とを含むステップを繰り返し実施するよう、前記複数のグループを制御する、
処理をコンピュータが実行することを特徴とする計算処理管理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、計算処理管理装置、計算処理管理システム、および計算処理管理方法に関する。
【背景技術】
【0002】
従来、深層学習にかかる計算処理を、複数のGPU(Graphics Processing Unit)において並列処理することにより、深層学習の高速化を図ることがある。計算処理は、例えば、所定の処理を繰り返し実施することを含む。例えば、それぞれのGPUにおいて、所定の処理を1回ずつ実施した後、複数のGPUにおいて、それぞれの所定の処理を実施した結果を集約して共有する、というステップを繰り返し実施することにより、計算処理を並列処理することがある。
【0003】
先行技術としては、例えば、学習データに基づく順伝搬計算および逆伝搬計算を反復的に実施し、逆伝搬計算の計算結果を通信ネットワークに送出する複数の計算機から受信した計算結果を処理して送信元に返送するAllreduce処理装置がある。また、例えば、学習対象のニューラルネットワークの重みごとの分散データを、重みの番号の順にパケット化して送信し、集計データを順番に取得し、ニューラルネットワークの重みを更新する技術がある。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2020-77300号公報
【特許文献2】特開2019-219714号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、従来技術では、計算処理を効率よく並列処理することが難しい場合がある。例えば、複数のGPUのいずれかのGPUの処理速度が、他のGPUに比べて遅い場合が考えられる。この場合、あるステップにおいて、処理速度が比較的速いGPUは、所定の処理を1回完了した後、処理速度が比較的遅いGPUが所定の処理を1回完了するまで待機しなければならず、計算処理を並列処理する効率の低下を招いてしまう。
【0006】
1つの側面では、本発明は、計算処理を効率よく並列処理することを目的とする。
【課題を解決するための手段】
【0007】
1つの実施態様によれば、単位処理を複数回実施する計算処理を並列処理する複数の演算部のうち、処理速度が一定以上である演算部が分類された1以上のグループと、処理速度が前記一定未満である演算部が分類された1以上のグループとを含む複数のグループを特定し、特定した前記複数のグループのそれぞれのグループにおいて、当該グループに属するそれぞれの演算部が、前記単位処理を1回ずつ実施する第1動作と、当該グループに属するそれぞれの演算部が、他のグループが実施した前記単位処理の結果を集約して得られる最新の情報を参照して、当該グループが実施した前記単位処理の結果を集約して得られる情報を生成する、前記第1動作の後の第2動作とを含むステップを繰り返し実施するよう、前記複数のグループを制御する計算処理管理装置、計算処理管理システム、および計算処理管理方法が提案される。
【発明の効果】
【0008】
一態様によれば、計算処理を効率よく並列処理することが可能になる。
【図面の簡単な説明】
【0009】
【
図1】
図1は、実施の形態にかかる計算処理管理方法の一実施例を示す説明図である。
【
図2】
図2は、計算処理管理システム200の一例を示す説明図である。
【
図3】
図3は、情報処理装置100のハードウェア構成例を示すブロック図である。
【
図4】
図4は、情報処理装置100の機能的構成例を示すブロック図である。
【
図5】
図5は、情報処理装置100の動作の流れを示す説明図(その1)である。
【
図6】
図6は、情報処理装置100の動作の流れを示す説明図(その2)である。
【
図7】
図7は、情報処理装置100の動作例1を示す説明図(その1)である。
【
図8】
図8は、情報処理装置100の動作例1を示す説明図(その2)である。
【
図9】
図9は、情報処理装置100の動作例1を示す説明図(その3)である。
【
図10】
図10は、情報処理装置100の動作例1を示す説明図(その4)である。
【
図11】
図11は、動作例1における第1データ制御処理手順の一例を示すフローチャートである。
【
図12】
図12は、動作例1における第2データ制御処理手順の一例を示すフローチャートである。
【
図13】
図13は、動作例1における終了制御処理手順の一例を示すフローチャートである。
【
図14】
図14は、情報処理装置100の動作例2を示す説明図(その1)である。
【
図15】
図15は、情報処理装置100の動作例2を示す説明図(その2)である。
【
図16】
図16は、情報処理装置100の動作例2を示す説明図(その3)である。
【
図17】
図17は、情報処理装置100の動作例2を示す説明図(その4)である。
【
図18】
図18は、動作例2における第1データ制御処理手順の一例を示すフローチャートである。
【
図19】
図19は、動作例2における第2データ制御処理手順の一例を示すフローチャートである。
【
図20】
図20は、動作例2における終了制御処理手順の一例を示すフローチャートである。
【
図21】
図21は、情報処理装置100の動作例3を示す説明図(その1)である。
【
図22】
図22は、情報処理装置100の動作例3を示す説明図(その2)である。
【
図23】
図23は、情報処理装置100の動作例3を示す説明図(その3)である。
【
図24】
図24は、情報処理装置100の動作例3を示す説明図(その4)である。
【
図25】
図25は、動作例3における第1データ制御処理手順の一例を示すフローチャートである。
【
図26】
図26は、動作例3における第2データ制御処理手順の一例を示すフローチャートである。
【
図27】
図27は、動作例3における第3データ制御処理手順の一例を示すフローチャートである。
【
図28】
図28は、動作例3における終了制御処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【0010】
以下に、図面を参照して、本発明にかかる計算処理管理装置、計算処理管理システム、および計算処理管理方法の実施の形態を詳細に説明する。
【0011】
(実施の形態にかかる計算処理管理方法の一実施例)
図1は、実施の形態にかかる計算処理管理方法の一実施例を示す説明図である。情報処理装置100は、所定の計算処理を管理する計算処理管理装置となるコンピュータである。情報処理装置100は、例えば、サーバ、または、PC(Personal Computer)などである。
【0012】
所定の計算処理は、例えば、深層学習にかかる計算処理などである。所定の計算処理は、例えば、所定の処理を繰り返し実施することを含む。所定の処理は、例えば、モデルの学習処理である。学習処理は、例えば、モデルのパラメータの推定値または補正値を算出する算出処理である。モデルは、例えば、DNN(Deep Neural Network)である。
【0013】
ここで、所定の計算処理の高速化を図り、所定の計算処理にかかる処理時間の低減化を図ることが望まれる場合がある。
【0014】
これに対し、所定の計算処理を、複数のGPUにおいて並列処理することにより、所定の計算処理の高速化を図り、所定の計算処理にかかる処理時間の低減化を図ることが考えられる。ここで、理想的には、GPUがM個存在すれば、M個のGPUによる所定の計算処理にかかる処理時間は、1個のGPUによる所定の計算処理にかかる処理時間の1/Mになることが期待される。
【0015】
例えば、それぞれのGPUにおいて、所定の処理を1回ずつ実施した後、複数のGPUにおいて、それぞれの所定の処理を実施した結果を集約して共有する、というステップを繰り返し実施することにより、所定の計算処理を並列処理することが考えられる。ステップは、具体的には、それぞれのGPUにおいて、モデルのパラメータの推定値または補正値を算出する学習処理を1回ずつ実施した後、複数のGPUにおいて、それぞれの学習処理によって算出した推定値または補正値を集約して共有することである。
【0016】
しかしながら、従来では、所定の計算処理を効率よく並列処理することが難しい場合がある。例えば、複数のGPUは、それぞれ異なる処理速度である2以上のGPUを含む。従って、例えば、複数のGPUのいずれかのGPUの処理速度が、他のGPUに比べて遅い場合が考えられる。
【0017】
この場合、あるステップにおいて、処理速度が比較的速いGPUは、所定の処理を1回完了した後、処理速度が比較的遅いGPUが所定の処理を1回完了するまで待機しなければならない。このように、所定の計算処理にかかる処理時間は、処理速度が比較的遅いGPUに律速されることになり、所定の計算処理を並列処理する効率の低下を招いてしまうという問題がある。
【0018】
そこで、本実施の形態では、所定の計算処理を効率よく並列処理することができる計算処理管理方法について説明する。
【0019】
図1において、情報処理装置100は、複数の演算部101を制御可能である。演算部101は、例えば、GPUである。情報処理装置100は、例えば、複数の演算部101を含む。複数の演算部101は、所定の計算処理を並列処理するグループである。所定の計算処理は、単位処理を複数回実施することを含む。単位処理は、例えば、学習処理である。学習処理は、例えば、モデルのパラメータの補正値を算出する算出処理である。例えば、それぞれの演算部101が、単位処理を繰り返し実施することにより、所定の計算処理が並列処理されることになる。
【0020】
(1-1)情報処理装置100は、複数の演算部101のうち、処理速度が一定以上である演算部101が分類された1以上のグループと、処理速度が一定未満である演算部101が分類された1以上のグループとを含む複数のグループを特定する。
図1の例では、情報処理装置100は、処理速度が一定以上である演算部101-1および演算部101-2を含むグループ110と、処理速度が一定未満である演算部101-3を含むグループ120とを含む複数のグループを特定する。これにより、情報処理装置100は、演算部101を、処理速度に応じたグループ単位で取り扱うことができる。
【0021】
(1-2)情報処理装置100は、特定した複数のグループのそれぞれのグループにおいて、所定のステップを繰り返し実施するよう、複数のグループを制御する。ステップは、第1動作131と、第1動作131の後の第2動作132とを含む。第1動作131は、グループに属するそれぞれの演算部101が、単位処理を1回ずつ実施することである。第1動作131は、例えば、それぞれのグループにおいて独立して実施される。
【0022】
第2動作132は、グループに属するそれぞれの演算部101が、他のグループが実施した単位処理の結果を集約して得られる最新の情報があれば、当該情報を参照して、当該グループが実施した単位処理の結果を集約して得られる情報を生成することである。第2動作132は、グループに属するそれぞれの演算部101が、他のグループが実施した単位処理の結果を集約して得られる最新の情報がなければ、当該情報を参照せずに、当該グループが実施した単位処理の結果を集約して得られる情報を生成することである。
【0023】
(1-3)情報処理装置100は、所定の条件を満たした場合、それぞれのグループにおいて、所定のステップを繰り返し実施することを停止するよう、複数のグループを制御する。所定の条件は、例えば、いずれかのグループにおいて、所定のステップを所定の回数繰り返し実施したことである。所定の条件は、例えば、複数のグループ全体において、所定のステップを所定の回数繰り返し実施したことであってもよい。
【0024】
これにより、情報処理装置100は、処理速度が一定以上である演算部101が分類された1以上のグループにおいて、処理速度が一定未満である演算部101に律速されずに、ステップを繰り返し実施可能にすることができる。従って、情報処理装置100は、ステップを高速に繰り返し易くすることができ、所定の計算処理を完了し易くすることができる。情報処理装置100は、グループ間で、当該グループが実施した単位処理の結果を集約して得られる情報を参照し合うよう、複数のグループを制御することができ、所定の計算処理の精度低下を抑制することができる。このように、情報処理装置100は、所定の計算処理を効率よく並列処理することができる。
【0025】
ここでは、情報処理装置100が単独で動作する場合について説明したが、これに限らない。例えば、情報処理装置100が、他のコンピュータと協働する場合があってもよい。具体的には、情報処理装置100が、複数の演算部101を含まない場合があってもよい。この場合、情報処理装置100は、それぞれ異なる演算部101を含む複数の他のコンピュータと通信することにより、複数の演算部101を制御することがある。この場合の具体例については、例えば、
図2を用いて後述する。また、例えば、複数のコンピュータが、情報処理装置100としての機能を実現する場合があってもよい。具体的には、クラウド上に、情報処理装置100としての機能が実現される場合があってもよい。
【0026】
(計算処理管理システム200の一例)
次に、
図2を用いて、
図1に示した情報処理装置100を適用した、計算処理管理システム200の一例について説明する。
【0027】
図2は、計算処理管理システム200の一例を示す説明図である。
図2において、計算処理管理システム200は、情報処理装置100と、複数の演算処理装置201と、クライアント装置202とを含む。
【0028】
計算処理管理システム200において、情報処理装置100と演算処理装置201とは、有線または無線のネットワーク210を介して接続される。ネットワーク210は、例えば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどである。
【0029】
情報処理装置100は、演算処理装置201を制御し、所定の計算処理を並列処理するためのコンピュータである。所定の計算処理は、例えば、深層学習に関する計算処理である。所定の計算処理は、具体的には、モデルのパラメータの補正値を算出する学習処理を繰り返し実施することを含む。所定の計算処理は、具体的には、モデルのパラメータの補正値を集約していくことを含む。モデルは、例えば、DNNである。
【0030】
情報処理装置100は、例えば、複数の演算処理装置201のうち、処理速度が一定以上である演算処理装置201が分類された1以上のグループと、処理速度が一定未満である演算処理装置201が分類された1以上のグループとを含む複数のグループを特定する。
【0031】
情報処理装置100は、具体的には、複数の演算処理装置201のそれぞれの演算処理装置201が、テスト学習処理を実施するよう、複数の演算処理装置201を制御し、それぞれの演算処理装置201の計算速度に関する指標値を取得する。テスト学習処理は、例えば、所定の計算処理における学習処理に対応する。テスト学習処理は、具体的には、モデルのパラメータの補正値を算出することである。テスト学習処理は、所定の計算処理の一部であってもよい。
【0032】
情報処理装置100は、具体的には、取得した指標値に基づいて、複数の演算処理装置201のそれぞれの演算処理装置201の処理速度が一定以上であるか否かを判定する。情報処理装置100は、具体的には、処理速度が一定以上である演算処理装置201を、1以上のグループに分類し、処理速度が一定未満である演算処理装置201を、1以上のグループに分類することにより、複数のグループを特定する。
【0033】
また、情報処理装置100は、具体的には、予め利用者によって設定された複数のグループを取得することにより、複数のグループを特定してもよい。
【0034】
情報処理装置100は、例えば、所定の計算処理を実施することを要求するリクエストを受け付ける。情報処理装置100は、例えば、所定の計算処理を実施することを要求するリクエストを、クライアント装置202から受信することにより、リクエストを受け付ける。情報処理装置100は、具体的には、利用者の操作入力に基づき、所定の計算処理を実施することを要求するリクエストの入力を受け付けることにより、リクエストを受け付けてもよい。
【0035】
情報処理装置100は、リクエストに応じて、特定した複数のグループのそれぞれのグループにおいて、所定のステップを繰り返し実施するよう、複数のグループを制御する。所定のステップは、所定の計算処理を形成する。所定のステップは、第1動作と、第1動作の後に実施する第2動作とを含む。第1動作は、グループに属するそれぞれの演算処理装置201が、単位処理を1回ずつ実施することである。単位処理は、例えば、モデルのパラメータの補正値を算出する学習処理である。第1動作は、例えば、それぞれのグループにおいて独立して実施される。
【0036】
第2動作は、グループに属するそれぞれの演算処理装置201が、他のグループが実施した単位処理の結果を集約して得られる最新の情報がなければ、当該情報を参照せずに、当該グループが実施した単位処理の結果を集約して得られる情報を生成することである。第2動作は、例えば、グループにおいて算出された、モデルのパラメータのそれぞれの補正値を集約することにより、集約補正値を算出することである。
【0037】
第2動作は、グループに属するそれぞれの演算処理装置201が、他のグループが実施した単位処理の結果を集約して得られる最新の情報があれば、当該情報を参照して、当該グループが実施した単位処理の結果を集約して得られる情報を生成することである。第2動作は、例えば、当該グループにおいて算出された、モデルのパラメータのそれぞれの補正値と、他のグループにおいて生成された集約補正値とを集約することにより、新たな集約補正値を算出することである。
【0038】
情報処理装置100は、所定の条件を満たした場合、それぞれのグループにおいて、所定のステップを繰り返し実施することを停止するよう、複数のグループを制御する。所定の条件は、例えば、いずれかのグループにおいて、所定のステップを所定の回数繰り返し実施したことである。所定の条件は、例えば、複数のグループ全体において、所定のステップを所定の回数繰り返し実施したことであってもよい。
【0039】
情報処理装置100は、所定の条件を満たした場合、所定の計算処理の実施結果を出力する。所定の計算処理の実施結果は、例えば、モデルである。情報処理装置100は、例えば、所定の計算処理の実施結果を、クライアント装置202に送信する。情報処理装置100は、例えば、所定の計算処理の実施結果を、利用者が参照可能に出力してもよい。情報処理装置100は、例えば、サーバ、または、PC(Personal Computer)などである。
【0040】
演算処理装置201は、所定の計算処理を並列処理するためのコンピュータである。演算処理装置201は、例えば、
図1に示した演算部101に対応する。演算処理装置201は、例えば、情報処理装置100の制御に従って、テスト学習処理を実施する。演算処理装置201は、例えば、情報処理装置100の制御に従って、所定の計算処理を形成する学習処理などの部分処理を実施する。演算処理装置201は、例えば、サーバ、または、PCなどである。
【0041】
クライアント装置202は、所定の計算処理の実施結果を利用するクライアントが利用するコンピュータである。クライアント装置202は、所定の計算処理の実施結果を、情報処理装置100から受信する。クライアント装置202は、所定の計算処理の実施結果を、クライアントが参照可能に出力する。クライアント装置202は、例えば、PC、タブレット端末、または、スマートフォンなどである。
【0042】
ここでは、情報処理装置100が、演算処理装置201とは異なる装置である場合について説明したが、これに限らない。例えば、情報処理装置100が、演算処理装置201としての機能を有し、演算処理装置201としても動作する場合があってもよい。
【0043】
ここでは、情報処理装置100が、クライアント装置202とは異なる装置である場合について説明したが、これに限らない。例えば、情報処理装置100が、クライアント装置202としての機能を有し、クライアント装置202としても動作する場合があってもよい。
【0044】
(情報処理装置100のハードウェア構成例)
次に、
図3を用いて、情報処理装置100のハードウェア構成例について説明する。
【0045】
図3は、情報処理装置100のハードウェア構成例を示すブロック図である。
図3において、情報処理装置100は、CPU(Central Processing Unit)301と、メモリ302と、ネットワークI/F(Interface)303と、記録媒体I/F304と、記録媒体305とを有する。情報処理装置100は、さらに、スイッチ306と、FPGA(Field Programmable Gate Array)307と、複数のGPU(Graphics Processing Unit)308とを有する。また、各構成部は、バス300によってそれぞれ接続される。
【0046】
ここで、CPU301は、情報処理装置100の全体の制御を司る。メモリ302は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMやROMが各種プログラムを記憶し、RAMがCPU301のワークエリアとして使用される。メモリ302に記憶されるプログラムは、CPU301にロードされることにより、コーディングされている処理をCPU301に実行させる。
【0047】
ネットワークI/F303は、通信回線を通じてネットワーク210に接続され、ネットワーク210を介して他のコンピュータに接続される。そして、ネットワークI/F303は、ネットワーク210と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。ネットワークI/F303は、例えば、モデムやLANアダプタなどである。
【0048】
記録媒体I/F304は、CPU301の制御に従って記録媒体305に対するデータのリード/ライトを制御する。記録媒体I/F304は、例えば、ディスクドライブ、SSD(Solid State Drive)、USB(Universal Serial Bus)ポートなどである。記録媒体305は、記録媒体I/F304の制御で書き込まれたデータを記憶する不揮発メモリである。記録媒体305は、例えば、ディスク、半導体メモリ、USBメモリなどである。記録媒体305は、情報処理装置100から着脱可能であってもよい。
【0049】
スイッチ306は、例えば、CPU301と、FPGA307との通信経路、または、CPU301と、GPU308との通信経路を制御し、CPU301と、FPGA307とを通信可能、または、CPU301と、GPU308とを通信可能にする。スイッチ306は、例えば、FPGA307と、GPU308との通信経路を制御し、FPGA307と、GPU308とを通信可能にする。FPGA307は、例えば、論理回路の構成を変更可能な集積回路である。GPU308は、例えば、数値計算を実施するプロセッサである。GPU308は、例えば、並列処理に適する。GPU308は、例えば、レジスタを有する。
【0050】
情報処理装置100は、上述した構成部の他、例えば、キーボード、マウス、ディスプレイ、プリンタ、スキャナ、マイク、スピーカーなどを有してもよい。また、情報処理装置100は、記録媒体I/F304や記録媒体305を複数有していてもよい。また、情報処理装置100は、記録媒体I/F304や記録媒体305を有していなくてもよい。また、情報処理装置100は、スイッチ306、FPGA307、または、GPU308を有していなくてもよい。
【0051】
(演算処理装置201のハードウェア構成例)
演算処理装置201のハードウェア構成例は、具体的には、
図3に示した情報処理装置100のハードウェア構成例と同様であるため、説明を省略する。
【0052】
(クライアント装置202のハードウェア構成例)
クライアント装置202のハードウェア構成例は、具体的には、
図3に示した情報処理装置100のハードウェア構成例と同様であるため、説明を省略する。
【0053】
以下の説明では、主に、情報処理装置100が単独で動作する場合について説明する。
【0054】
(情報処理装置100の機能的構成例)
次に、
図4を用いて、情報処理装置100の機能的構成例について説明する。
【0055】
図4は、情報処理装置100の機能的構成例を示すブロック図である。情報処理装置100は、第1記憶部400と、第1取得部401と、特定部402と、配備部403と、第1出力部404とを含む。第1取得部401~第1出力部404は、制御部420の一例として機能する。情報処理装置100は、第2記憶部410と、第2取得部411と、実行部412と、集約部413と、判定部414と、第2出力部415とを含む。第2取得部411~第2出力部415は、演算部430の一例として機能する。
【0056】
第1記憶部400は、例えば、
図3に示したメモリ302や記録媒体305などの記憶領域によって実現される。以下では、第1記憶部400が、情報処理装置100に含まれる場合について説明するが、これに限らない。例えば、第1記憶部400が、情報処理装置100とは異なる装置に含まれ、第1記憶部400の記憶内容が情報処理装置100から参照可能である場合があってもよい。
【0057】
第1取得部401~第1出力部404は、具体的には、例えば、
図3に示したメモリ302や記録媒体305などの記憶領域に記憶されたプログラムをCPU301に実行させることにより、その機能を実現する。また、第1取得部401~第1出力部404は、具体的には、例えば、ネットワークI/F303、または、スイッチ306により、その機能を実現する。各機能部の処理結果は、例えば、
図3に示したメモリ302や記録媒体305などの記憶領域に記憶される。
【0058】
第1記憶部400は、各機能部の処理において参照され、または更新される各種情報を記憶する。第1記憶部400は、複数の演算部430のそれぞれの演算部430の処理速度に関する指標値を記憶する。指標値は、例えば、テスト学習処理にかかる処理時間の統計値である。統計値は、例えば、平均値、最大値、最小値、最頻値、または、中央値などである。
【0059】
テスト学習処理は、例えば、モデルのパラメータの補正値を算出する学習処理である。モデルは、例えば、DNNである。テスト学習処理は、具体的には、ランダムな入力データに基づいて、モデルのパラメータの補正値を算出する学習処理である。テスト学習処理は、例えば、所定の計算処理を形成する単位処理に対応する。テスト学習処理は、例えば、所定の計算処理の一部であってもよい。指標値は、例えば、特定部402によって取得される。指標値は、例えば、第1取得部401によって取得されてもよい。
【0060】
複数の演算部430は、単位処理を複数回実施する所定の計算処理を並列処理する全体グループである。所定の計算処理は、例えば、深層学習に関する計算処理である。所定の計算処理は、具体的には、深層学習に関し、モデルのパラメータを決定する計算処理である。モデルは、例えば、DNNである。単位処理は、例えば、モデルのパラメータの補正値を算出する学習処理である。単位処理は、具体的には、ランダムな入力データに基づいて、モデルのパラメータの補正値を算出する学習処理である。
【0061】
第1記憶部400は、複数の演算部430を分類した複数のグループを記憶する。複数のグループは、複数の演算部430のうち、処理速度が一定以上である演算部430が分類された1以上のグループと、処理速度が一定未満である演算部430が分類された1以上のグループとを含む。
【0062】
それぞれのグループは、第1動作と、第1動作の後の第2動作とを含む所定のステップを繰り返し実施する。所定の計算処理は、例えば、複数のグループが、所定のステップを繰り返し実施することによって実現される。第1動作は、グループに属するそれぞれの演算部430が、単位処理を1回ずつ実施することである。それぞれのグループは、第1動作を他のグループと同期せずに実施することが好ましい。第2動作は、グループに属するそれぞれの演算部430が、当該グループが実施した単位処理の結果を集約して得られる情報を取得することである。
【0063】
第2動作は、例えば、グループに属する各演算部430が、他のグループが実施した単位処理の結果を集約して得られる最新の情報が存在すれば、当該情報を参照して、当該グループが実施した単位処理の結果を集約して得られる情報を取得することである。第2動作は、例えば、グループに属する各演算部430が、他のグループが実施した単位処理の結果を集約して得られる最新の情報が存在しなければ、当該情報を参照せずに、当該グループが実施した単位処理の結果を集約して得られる情報を取得することである。
【0064】
第1取得部401は、各機能部の処理に用いられる各種情報を取得する。第1取得部401は、取得した各種情報を、第1記憶部400に記憶し、または、各機能部に出力する。また、第1取得部401は、第1記憶部400に記憶しておいた各種情報を、各機能部に出力してもよい。第1取得部401は、例えば、利用者の操作入力に基づき、各種情報を取得する。第1取得部401は、例えば、情報処理装置100とは異なる装置から、各種情報を受信してもよい。
【0065】
第1取得部401は、所定の計算処理の実行要求を取得する。第1取得部401は、例えば、利用者の操作入力に基づき、実行要求の入力を受け付けることにより、実行要求を取得する。第1取得部401は、実行要求を、他のコンピュータから受信することにより取得してもよい。
【0066】
第1取得部401は、複数のグループを特定可能に示す情報を取得してもよい。複数のグループを特定可能に示す情報は、例えば、複数のグループのそれぞれのグループに属する1以上の演算部430を示す情報である。複数のグループを特定可能に示す情報は、例えば、複数のグループを特定するために用いられる、複数の演算部430のそれぞれの演算部430の処理速度に関する指標値であってもよい。第1取得部401は、例えば、利用者の操作入力に基づき、複数のグループを特定可能に示す情報の入力を受け付けることにより、複数のグループを特定可能に示す情報を取得する。第1取得部401は、例えば、複数のグループを特定可能に示す情報を、他のコンピュータから受信することにより取得してもよい。
【0067】
第1取得部401は、いずれかの機能部の処理を開始する開始トリガーを受け付けてもよい。開始トリガーは、例えば、利用者による所定の操作入力があったことである。開始トリガーは、例えば、他のコンピュータから、所定の情報を受信したことであってもよい。開始トリガーは、例えば、いずれかの機能部が所定の情報を出力したことであってもよい。
【0068】
第1取得部401は、実行要求を取得したことを、特定部402と、配備部403との処理を開始する開始トリガーとして受け付ける。第1取得部401は、複数のグループを特定可能に示す情報を取得したことを、特定部402の処理を開始する開始トリガーとして受け付けてもよい。
【0069】
特定部402は、複数のグループを特定する。特定部402は、例えば、第1取得部401で複数のグループを特定可能に示す情報を取得した場合、当該情報に基づいて、複数のグループを特定する。特定部402は、具体的には、第1取得部401で複数のグループのそれぞれのグループに属する1以上の演算部430を示す情報を取得した場合、当該情報に基づいて、複数の演算部430を複数のグループに分類することにより、複数のグループを特定する。これにより、特定部402は、演算部430を、処理速度に応じたグループ単位で取り扱い可能にすることができる。
【0070】
特定部402は、具体的には、第1取得部401で複数の演算部430のそれぞれの演算部430の処理速度に関する指標値を取得した場合、当該指標値に基づいて、それぞれの演算部430の処理速度が、一定以上であるか否かを判定する。特定部402は、具体的には、判定した結果に基づいて、複数の演算部430を、処理速度が一定以上の演算部430が分類される1以上のグループと、処理速度が一定未満の演算部430が分類される1以上のグループとに分類する。特定部402は、複数の演算部430を、複数のグループに分類することにより、複数のグループを特定する。これにより、特定部402は、演算部430を、処理速度に応じたグループ単位で取り扱い可能にすることができる。
【0071】
特定部402は、例えば、第1取得部401で複数のグループを特定可能に示す情報を取得していない場合、複数の演算部430のそれぞれの演算部430の処理速度に関する指標値を取得する。特定部402は、具体的には、それぞれの演算部430が、テスト学習処理を1回以上実施するよう、複数の演算部430を制御することにより、複数の演算部430のそれぞれの演算部430の処理速度に関する指標値を取得する。これにより、特定部402は、複数の演算部430のそれぞれの演算部430の処理速度を特定可能にすることができ、それぞれの演算部430の処理速度に応じて、複数の演算部430を複数のグループに分類可能にすることができる。
【0072】
特定部402は、具体的には、取得した指標値に基づいて、複数のグループを特定する。特定部402は、より具体的には、指標値に基づいて、それぞれの演算部430の処理速度が、一定以上であるか否かを判定する。特定部402は、より具体的には、判定した結果に基づいて、複数の演算部430を、処理速度が一定以上の演算部430が分類される1以上のグループと、処理速度が一定未満の演算部430が分類される1以上のグループとに分類する。特定部402は、複数の演算部430を、複数のグループに分類することにより、複数のグループを特定する。これにより、特定部402は、演算部430を、処理速度に応じたグループ単位で取り扱い可能にすることができる。
【0073】
特定部402は、具体的には、複数の演算部430のうち、処理速度が一定以上である演算部430が分類された1つのグループと、処理速度が一定未満である演算部430が分類された1つのグループとを含む複数のグループを特定してもよい。これにより、特定部402は、演算部430を、処理速度に応じたグループ単位で取り扱い可能にすることができる。
【0074】
配備部403は、特定部402で特定した複数のグループのそれぞれのグループにおいて、所定のステップを繰り返し実施するよう、複数のグループを制御する。配備部403は、例えば、それぞれのグループに属する演算部430に、学習プロセスを配備する。学習プロセスは、単位処理を繰り返し実施する機能を有する。配備部403は、例えば、それぞれのグループに属する演算部430が、学習プロセスを有していれば、当該学習プロセスを起動することにより、当該学習プロセスを配備してもよい。配備部403は、具体的には、それぞれのグループに属する演算部430に、学習プロセスを起動する起動指示を送信する。
【0075】
配備部403は、例えば、それぞれのグループに属する演算部430のうち、処理速度が最も遅い演算部430に、集約プロセスを配備する。集約プロセスは、グループが実施した単位処理の結果を集約して得られる情報を生成する機能を有する。集約プロセスは、生成した情報を、グループ内で共有する機能を有する。学習プロセスは、単位処理を1回実施する都度、グループ内で情報を共有するまで待機してから、次の単位処理を実施する。
【0076】
あるグループに配備した集約プロセスは、他のグループが実施した単位処理の結果を集約して得られる最新の情報があれば、当該最新の情報を参照して、当該グループが実施した単位処理の結果を集約して得られる情報を生成する。あるグループに配備した集約プロセスは、他のグループが実施した単位処理の結果を集約して得られる最新の情報がなければ、当該最新の情報を参照せずに、当該グループが実施した単位処理の結果を集約して得られる情報を生成する。
【0077】
配備部403は、例えば、それぞれのグループに属する演算部430のうち、処理速度が最も遅い演算部430が、集約プロセスを有していれば、当該集約プロセスを起動することにより、当該集約プロセスを配備してもよい。配備部403は、具体的には、それぞれのグループに属する演算部430のうち、処理速度が最も遅い演算部430に、集約プロセスを起動する起動指示を送信する。
【0078】
配備部403は、特定した複数のグループのいずれかのグループに属する演算部430のうち、処理速度が最も遅い演算部430に、判定プロセスを配備する。判定プロセスは、所定のステップを繰り返し実施することを停止するトリガーとなる所定の条件を満たすか否かを判定する機能を有する。所定の条件は、例えば、いずれかのグループにおいて、所定のステップを繰り返し実施した回数が閾値以上であることである。所定の条件は、例えば、複数のグループ全体において、所定のステップを繰り返し実施した回数が閾値以上であることであってもよい。
【0079】
判定プロセスは、例えば、いずれかのグループにおいて、所定のステップを繰り返し実施した回数が閾値以上であるか否かを判定する。判定プロセスは、所定の条件を満たす場合、それぞれのグループにおいて、以降、所定のステップを繰り返し実施しないよう、複数のグループを制御する機能を有する。
【0080】
配備部403は、例えば、特定した複数のグループのいずれかのグループに属する演算部430のうち、処理速度が最も遅い演算部430が、判定プロセスを有していれば、当該判定プロセスを起動することにより、当該判定プロセスを配備してもよい。配備部403は、具体的には、特定した複数のグループのいずれかのグループに属する演算部430のうち、処理速度が最も遅い演算部430に、判定プロセスを起動する起動指示を送信する。これにより、配備部403は、所定の計算処理を実施する際にかかる処理負担および処理時間の増大化を抑制することができる。配備部403は、所定の計算処理の精度低下を抑制することができる。
【0081】
第1出力部404は、少なくともいずれかの機能部の処理結果を出力する。出力形式は、例えば、ディスプレイへの表示、プリンタへの印刷出力、ネットワークI/F303による外部装置への送信、または、メモリ302や記録媒体305などの記憶領域への記憶である。これにより、第1出力部404は、少なくともいずれかの機能部の処理結果を利用者に通知可能にし、情報処理装置100の利便性の向上を図ることができる。
【0082】
第1出力部404は、例えば、所定の計算処理の実施結果を出力する。第1出力部404は、具体的には、所定の計算処理の実施結果を、利用者が参照可能に出力する。第1出力部404は、具体的には、所定の計算処理の実施結果を、他のコンピュータに送信してもよい。他のコンピュータは、例えば、クライアント装置202などである。
【0083】
第2記憶部410は、例えば、
図3に示したFPGA307が有するレジスタ、または、
図3に示したGPU308が有するレジスタなどによって実現される。以下では、第2記憶部410が、情報処理装置100に含まれる場合について説明するが、これに限らない。例えば、第2記憶部410が、情報処理装置100とは異なる装置に含まれ、第2記憶部410の記憶内容が情報処理装置100から参照可能である場合があってもよい。
【0084】
第2取得部411~第2出力部415は、具体的には、例えば、
図3に示したFPGA307により、または、スイッチ306により、その機能を実現する。第2取得部411~第2出力部415は、具体的には、例えば、
図3に示したGPU308により、または、スイッチ306により、その機能を実現する。各機能部の処理結果は、例えば、
図3に示したFPGA307が有するレジスタ、または、
図3に示したGPU308が有するレジスタなどに記憶される。
【0085】
第2記憶部410は、各機能部の処理において参照され、または更新される各種情報を記憶する。第2記憶部410は、例えば、学習プロセスを記憶する。学習プロセスは、例えば、予め設定される。学習プロセスは、例えば、第2取得部411によって取得されてもよい。
【0086】
第2記憶部410は、例えば、集約プロセスを記憶する。集約プロセスは、例えば、予め設定される。集約プロセスは、例えば、第2取得部411によって取得されてもよい。
【0087】
第2記憶部410は、例えば、判定プロセスを記憶する。判定プロセスは、例えば、予め設定される。判定プロセスは、例えば、第2取得部411によって取得されてもよい。
【0088】
第2記憶部410は、例えば、グループが実施した単位処理の結果を集約して得られた最新の情報を記憶する。最新の情報は、例えば、集約部413によって生成される。
【0089】
第2取得部411は、各機能部の処理に用いられる各種情報を取得する。第2取得部411は、取得した各種情報を、第2記憶部410に記憶し、または、各機能部に出力する。また、第2取得部411は、第2記憶部410に記憶しておいた各種情報を、各機能部に出力してもよい。第2取得部411は、例えば、利用者の操作入力に基づき、各種情報を取得する。第2取得部411は、例えば、情報処理装置100とは異なる装置から、各種情報を受信してもよい。
【0090】
第2取得部411は、例えば、学習プロセスを取得する。第2取得部411は、例えば、学習プロセスを起動する起動指示を取得してもよい。第2取得部411は、例えば、集約プロセスを取得する。第2取得部411は、例えば、集約プロセスを起動する起動指示を取得してもよい。第2取得部411は、例えば、判定プロセスを取得する。第2取得部411は、例えば、判定プロセスを起動する起動指示を取得してもよい。
【0091】
第2取得部411は、いずれかの機能部の処理を開始する開始トリガーを受け付けてもよい。開始トリガーは、例えば、利用者による所定の操作入力があったことである。開始トリガーは、例えば、他のコンピュータから、所定の情報を受信したことであってもよい。開始トリガーは、例えば、いずれかの機能部が所定の情報を出力したことであってもよい。
【0092】
第2取得部411は、学習プロセスを取得したこと、または、学習プロセスを起動する起動指示を取得したことを、実行部412の処理を開始する開始トリガーとして受け付けてもよい。第2取得部411は、例えば、集約プロセスを取得したこと、または、集約プロセスを起動する起動指示を取得したことを、集約部413の処理を開始する開始トリガーとして受け付けてもよい。第2取得部411は、例えば、判定プロセスを取得したこと、または、判定プロセスを起動する起動指示を取得したことを、判定部414の処理を開始する開始トリガーとして受け付けてもよい。
【0093】
実行部412は、単位処理を繰り返し実施する。実行部412は、例えば、学習プロセスによって、単位処理を繰り返し実施する。実行部412は、具体的には、学習プロセスによって、単位処理を実施した後、集約部413で情報が生成されるまで待機してから、次の単位処理を実施するよう、単位処理を繰り返し実施する。これにより、実行部412は、所定のステップごとに、単位処理を実施することができる。
【0094】
集約部413は、自演算部430が属するグループが実施した単位処理の結果を集約して得られる情報を生成する。集約部413は、例えば、集約プロセスによって、自演算部430が属するグループが実施した単位処理の結果を集約して得られる情報を生成する。集約部413は、具体的には、自演算部430が属するグループにおける1以上の演算部430すべてが単位処理を1回実施する都度、当該グループが実施した単位処理の結果を集約して得られる情報を生成する。
【0095】
集約部413は、具体的には、他のグループが実施した単位処理の結果を集約して得られた最新の情報が存在すれば、当該最新の情報を参照して、自演算部430が属するグループが実施した単位処理の結果を集約して得られる情報を生成する。集約部413は、具体的には、他のグループが実施した単位処理の結果を集約して得られた最新の情報がまだ存在しなければ、当該最新の情報を参照せずに、自演算部430が属するグループが実施した単位処理の結果を集約して得られる情報を生成する。
【0096】
これにより、集約部413は、所定のステップごとに、自演算部430が属するグループが実施した単位処理の結果を集約して得られる情報を生成することができる。このため、実行部412と、集約部413とは、所定のステップを繰り返し実施することができる。
【0097】
判定部414は、所定のステップを繰り返し実施することを停止するトリガーとなる所定の条件を満たすか否かを判定する。判定部414は、例えば、いずれかのグループにおいて、所定のステップを繰り返し実施した回数が閾値以上であるか否かを判定する。いずれかのグループは、例えば、自演算部430が属するグループである。
【0098】
判定部414は、具体的には、判定プロセスによって、自演算部430が属するグループにおいて、所定のステップを繰り返し実施した回数を計数する。判定部414は、具体的には、判定プロセスによって、計数した回数が閾値以上であるか否かを判定する。判定部414は、具体的には、判定プロセスによって、計数した回数が閾値以上であれば、所定のステップを繰り返し実施することを停止すると判定する。
【0099】
判定部414は、所定の条件を満たすと判定した場合、所定のステップを繰り返し実施するよう、複数のグループを制御する。判定部414は、例えば、判定プロセスによって、所定のステップを繰り返し実施した回数が閾値以上であると判定した場合、所定のステップを繰り返し実施するよう、複数のグループを制御する。これにより、判定部414は、所定の計算処理を実施する際にかかる処理負担および処理時間の増大化を抑制することができる。
【0100】
第2出力部415は、少なくともいずれかの機能部の処理結果を出力する。出力形式は、例えば、ディスプレイへの表示、プリンタへの印刷出力、ネットワークI/F303による外部装置への送信、または、メモリ302や記録媒体305などの記憶領域への記憶である。これにより、第2出力部415は、少なくともいずれかの機能部の処理結果を利用者に通知可能にし、情報処理装置100の利便性の向上を図ることができる。
【0101】
第2出力部415は、例えば、集約部413で生成した、自演算部430が属するグループが実施した単位処理の結果を集約して得られる情報を、自演算部430が属するグループにおける他演算部430に送信する。これにより、第2出力部415は、自演算部430が属するグループにおいて、自演算部430が属するグループが実施した単位処理の結果を集約して得られる情報を共有することができる。このため、第2出力部415は、所定の計算処理の精度低下を抑制することができる。
【0102】
(情報処理装置100の動作の流れ)
次に、
図5および
図6を用いて、情報処理装置100の動作の流れについて説明する。
【0103】
図5および
図6は、情報処理装置100の動作の流れを示す説明図である。
図5および
図6において、情報処理装置100は、4つのGPU308を含むとする。4つのGPU308は、具体的には、GPU0と、GPU1と、GPU2と、GPU3とであるとする。GPU3の処理速度は、GPU0の処理速度、GPU1の処理速度、および、GPU2の処理速度に比べて遅いとする。
【0104】
ここで、4つのGPU308を同期することにより、深層学習に関する計算処理を並列処理する従来の手法が考えられる。従来の手法では、4つのGPU308が1回ずつ学習処理を実施した後に、4つのGPU308において集約処理を実施するというステップを繰り返すことになる。学習処理は、モデルのパラメータの補正値を算出することである。集約処理は、モデルのパラメータの補正値の統計値を算出し、4つのGPU308において共有することである。
【0105】
図5および
図6に示すタイミングチャート500は、従来の手法に関し、GPU0に関するチャート510と、GPU1に関するチャート511と、GPU2に関するチャート512と、GPU3に関するチャート513とを含む。
【0106】
チャート510は、従来の手法を実施した場合における、GPU0の処理内容の時間変化を示す。具体的には、
図5は、チャート510の前半を示す。
図6は、チャート510の後半を示す。
図5および
図6に示すチャート511は、従来の手法を実施した場合における、GPU1の処理内容の時間変化を示す。具体的には、
図5は、チャート511の前半を示す。
図6は、チャート511の後半を示す。
【0107】
図5および
図6に示すチャート512は、従来の手法を実施した場合における、GPU2の処理内容の時間変化を示す。具体的には、
図5は、チャート512の前半を示す。
図6は、チャート512の後半を示す。
図5および
図6に示すチャート513は、従来の手法を実施した場合における、GPU3の処理内容の時間変化を示す。具体的には、
図5は、チャート513の前半を示す。
図6は、チャート513の後半を示す。
【0108】
チャート510~513に示すように、従来の手法では、GPU0と、GPU1と、GPU2とは、学習処理を1回終了した後、GPU3が学習処理を1回終了するまで待機することになる。このため、従来の手法では、GPU0と、GPU1と、GPU2との計算リソースが効率的に活用されず、深層学習に関する計算処理にかかる処理時間は、GPU3に律速され、深層学習に関する計算処理の効率低下を招くことになる。
【0109】
これに対し、情報処理装置100は、4つのGPU308を処理速度に応じて分類したグループ単位で、当該グループに属する1以上のGPU308を同期することにより、深層学習に関する計算処理を並列処理する。
【0110】
情報処理装置100は、例えば、処理速度が比較的速いGPU0と、GPU1と、GPU2とを分類したグループ単位で、3つのGPU308が1回ずつ学習処理を実施した後に、3つのGPU308において集約処理を実施するというステップを繰り返す。情報処理装置100は、GPU0と、GPU1と、GPU2とを分類したグループにおける集約処理の際、GPU3を分類した他のグループにおける直前の集約処理の実施結果が存在すれば、当該実施結果を参照しながら、集約処理を実施することにする。
【0111】
また、情報処理装置100は、処理速度が比較的遅いGPU3を分類したグループ単位で、GPU3が1回学習処理を実施した後に、GPU3において集約処理を実施するというステップを繰り返す。情報処理装置100は、GPU3における集約処理の際、GPU0と、GPU1と、GPU2とを分類した他のグループにおける直前の集約処理の実施結果が存在すれば、当該実施結果を参照しながら、集約処理を実施することにする。
【0112】
情報処理装置100は、処理速度が比較的速いGPU0と、GPU1と、GPU2とを分類したグループ単位で、ステップを繰り返し実施した回数が、閾値以上になった場合、所定の計算処理を完了してもよい。情報処理装置100は、例えば、ステップを繰り返し実施した回数が、閾値以上になった場合、処理速度が比較的速いGPU0と、GPU1と、GPU2とを分類したグループにおいて、以降、ステップを繰り返し実施することを中止する。
【0113】
同様に、情報処理装置100は、例えば、ステップを繰り返し実施した回数が、閾値以上になった場合、処理速度が比較的遅いGPU3を分類したグループにおいて、以降、ステップを繰り返し実施することを中止する。情報処理装置100は、処理速度が比較的遅いGPU3を分類したグループにおいて、以降、ステップを繰り返し実施することを中止する際、ステップを既に実施中であれば、実施中のステップを強制終了してもよい。
【0114】
また、情報処理装置100は、処理速度が比較的遅いGPU3を分類したグループにおいて、以降、ステップを繰り返し実施することを中止する際、ステップを既に実施中であれば、実施中のステップを正常終了するまで待機してもよい。
【0115】
図5および
図6に示すタイミングチャート501は、情報処理装置100に関し、GPU0に関するチャート520と、GPU1に関するチャート521と、GPU2に関するチャート522と、GPU3に関するチャート523とを含む。
【0116】
チャート520は、情報処理装置100による、GPU0の処理内容の時間変化を示す。具体的には、
図5は、チャート520の前半を示す。
図6は、チャート520の後半を示す。
図5および
図6に示すチャート521は、情報処理装置100による、GPU1の処理内容の時間変化を示す。具体的には、
図5は、チャート521の前半を示す。
図6は、チャート521の後半を示す。
【0117】
図5および
図6に示すチャート522は、情報処理装置100による、GPU2の処理内容の時間変化を示す。具体的には、
図5は、チャート522の前半を示す。
図6は、チャート522の後半を示す。
図5および
図6に示すチャート523は、情報処理装置100による、GPU3の処理内容の時間変化を示す。具体的には、
図5は、チャート523の前半を示す。
図6は、チャート523の後半を示す。
【0118】
チャート520~523に示すように、情報処理装置100は、GPU0と、GPU1と、GPU2とが、学習処理を1回終了した後、GPU3が学習処理を1回終了するまで待機せずに済ませることができる。このため、情報処理装置100は、GPU0と、GPU1と、GPU2との計算リソースを効率的に活用し易くすることができる。
【0119】
情報処理装置100は、深層学習に関する計算処理の高速化を図ることができ、深層学習に関する計算処理にかかる処理負担および処理時間の低減化を図ることができる。情報処理装置100は、深層学習に関する計算処理にかかる処理時間が、GPU3に律速され難くすることができ、深層学習に関する計算処理の効率低下を抑制することができる。
【0120】
(情報処理装置100の動作例1)
次に、
図7~
図10を用いて、情報処理装置100の動作例1について説明する。
【0121】
図7~
図10は、情報処理装置100の動作例1を示す説明図である。
図7~
図10において、情報処理装置100は、4つのGPU308を含むとする。4つのGPU308は、具体的には、GPU0と、GPU1と、GPU2と、GPU3とであるとする。GPU3の処理速度は、GPU0の処理速度、GPU1の処理速度、および、GPU2の処理速度に比べて遅いとする。
【0122】
情報処理装置100は、4つのGPU308を用いて、深層学習に関する所定の計算処理を並列処理することが望まれるとする。所定の計算処理は、例えば、学習処理を繰り返し実施することにより、モデルのパラメータを決定することである。モデルは、例えば、DNNである。学習処理は、例えば、モデルのパラメータの補正値を算出することである。
【0123】
ここで、情報処理装置100は、CPU301によって、それぞれのGPU308が、N回のテスト学習処理を実施するよう、4つのGPU308を制御する。それぞれのGPU308は、情報処理装置100の制御に従って、N回のテスト学習処理を実施する。それぞれのGPU308は、N回のテスト学習処理を実施した後、テスト学習処理を実施する際にかかった所要時間の統計値を、学習処理時間として算出し、情報処理装置100に送信する。
【0124】
情報処理装置100は、それぞれのGPU308が算出した学習処理時間を、それぞれのGPU308から受信する。情報処理装置100は、具体的には、GPU0の処理時間tGPU0と、GPU1の処理時間tGPU1と、GPU2の処理時間tGPU2と、GPU3の処理時間tGPU3とを受信したとする。ここで、tGPU3>tGPU2>tGPU1>tGPU0である。これにより、情報処理装置100は、4つのGPU308を、複数のグループに分類する指針を得ることができる。
【0125】
情報処理装置100は、4つのGPU308を、複数のグループに分類するために用いられる閾値tTHを有する。閾値tTHは、例えば、予め利用者によって設定される。具体的には、tTH=1.2である。情報処理装置100は、最小の処理時間tGPU0に対するそれぞれのGPU308の処理時間の比率を、当該GPU308の処理速度を表す指標値として算出する。ここで、tGPU3/tGPU0>tTH>tGPU2/tGPU0,tGPU1/tGPU0,tGPU0/tGPU0であるとする。
【0126】
情報処理装置100は、いずれのGPU308の処理速度の指標値も、閾値tTH未満である場合、処理速度が比較的遅いGPU308が存在しても、所定の計算処理を効率よく並列処理可能であると判断する。このため、情報処理装置100は、4つのGPU308を単一のグループに分類し、単一のグループにおいて所定の計算処理を並列処理することにする。
【0127】
一方で、情報処理装置100は、少なくともいずれかのGPU308の処理速度の指標値が、閾値t
TH以上である場合、4つのGPU308を、複数のグループに分類する。ここでは、情報処理装置100は、GPU3の処理速度の指標値が、閾値t
TH以上であるため、4つのGPU308を、複数のグループに分類することになる。情報処理装置100は、具体的には、処理速度の指標値が閾値t
TH未満であるGPU0と、GPU1と、GPU2とを、グループaに分類し、処理速度の指標値が閾値t
TH以上であるGPU3を、グループbに分類する。次に、
図7の説明に移行する。
【0128】
図7の例では、情報処理装置100が、FPGA307を含むとする。情報処理装置100は、FPGA307を含む場合、処理速度の指標値が閾値t
TH未満であるGPU308を分類したグループaのうち、処理時間が最大であるGPU2を介して、グループaを制御する「データ制御1」のプロセスを用意する。
【0129】
また、情報処理装置100は、FPGA307を含む場合、処理速度の指標値が閾値tTH以上であるGPU308を分類したグループbのうち、処理時間が最大であるGPU3を介して、グループbを制御する「データ制御2」のプロセスを用意する。
【0130】
また、情報処理装置100は、FPGA307を含む場合、処理速度の指標値が閾値tTH未満であるGPU308を分類したグループaのうち、処理時間が最大であるGPU2を介して、所定の計算処理の終了条件を制御する「終了制御」のプロセスを用意する。
【0131】
情報処理装置100は、FPGA307を含む場合、「データ制御1」のプロセスと、「データ制御2」のプロセスと、「終了制御」のプロセスとを、FPGA307に配備する。
【0132】
これにより、情報処理装置100は、各種プロセスによって、グループ単位で学習処理を繰り返し実施するよう、4つのGPU308を制御することができ、所定の計算処理を並列処理することができる。情報処理装置100が、所定の計算処理を実施する具体例については、例えば、
図9および
図10を用いて後述する。次に、
図8の説明に移行する。
【0133】
図8の例では、情報処理装置100が、FPGA307を含まないとする。情報処理装置100は、FPGA307を含まない場合、処理速度の指標値が閾値t
TH未満であるGPU308を分類したグループaのうち、処理時間が最大であるGPU2を介して、グループaを制御する「データ制御1」のプロセスを用意する。
【0134】
情報処理装置100は、FPGA307を含まない場合、処理速度の指標値が閾値tTH以上であるGPU308を分類したグループbのうち、処理時間が最大であるGPU3を介して、グループbを制御する「データ制御2」のプロセスを用意する。
【0135】
情報処理装置100は、FPGA307を含まない場合、処理速度の指標値が閾値tTH未満であるGPU308を分類したグループaのうち、処理時間が最大であるGPU2を介して、所定の計算処理の終了条件を制御する「終了制御」のプロセスを用意する。
【0136】
情報処理装置100は、FPGA307を含まない場合、「データ制御1」のプロセスを、処理速度の指標値が閾値tTH未満であるGPU308を分類したグループaのうち、処理時間が最大であるGPU2に配備する。
【0137】
情報処理装置100は、FPGA307を含まない場合、「データ制御2」のプロセスを、処理速度の指標値が閾値tTH以上であるGPU308を分類したグループbのうち、処理時間が最大であるGPU3に配備する。
【0138】
情報処理装置100は、FPGA307を含まない場合、「終了制御」のプロセスを、処理速度の指標値が閾値tTH未満であるGPU308を分類したグループaのうち、処理時間が最大であるGPU2に配備する。
【0139】
これにより、情報処理装置100は、各種プロセスによって、グループ単位で学習処理を繰り返し実施するよう、4つのGPU308を制御することができ、所定の計算処理を並列処理することができる。情報処理装置100が、所定の計算処理を実施する具体例については、例えば、
図9および
図10を用いて後述する。
【0140】
次に、
図9および
図10の説明に移行し、情報処理装置100が、FPGA307を含まない場合を一例として、情報処理装置100が、各種プロセスによって、所定の計算処理を実施する具体例について説明する。
【0141】
図9および
図10において、情報処理装置100は、4つのGPU308を処理速度に応じて分類したグループ単位で、当該グループに属する1以上のGPU308を同期することにより、深層学習に関する所定の計算処理を並列処理する。
【0142】
情報処理装置100は、例えば、グループaに属するそれぞれのGPU308が1回ずつ学習処理を実施した後に、グループaに属するそれぞれのGPU308において集約処理を実施するというステップを繰り返し実施するよう、グループaを制御する。集約処理は、それぞれのGPU308が学習処理を実施して得た補正値Δwを統計処理することにより、集約補正値Δwaを算出し、グループaで共有することである。
【0143】
情報処理装置100は、例えば、グループbに属するそれぞれのGPU308が1回ずつ学習処理を実施した後に、グループbに属するそれぞれのGPU308において集約処理を実施するというステップを繰り返し実施するよう、グループbを制御する。集約処理は、それぞれのGPU308が学習処理を実施して得た補正値Δwを統計処理することにより、集約補正値Δwbを算出し、グループbで共有することである。
【0144】
情報処理装置100は、グループaにおける集約処理の際、グループbが算出した集約補正値Δwbが存在すれば、集約補正値Δwbを、グループaにおける集約処理に反映する。情報処理装置100は、例えば、グループaに属するそれぞれのGPU308が学習処理を実施して得た補正値Δwと、集約補正値Δwbとを統計処理することにより、集約補正値Δwaを算出し、グループaで共有することにする。
【0145】
情報処理装置100は、グループbにおける集約処理の際、グループaが算出した集約補正値Δwaが存在すれば、集約補正値Δwaを、グループbにおける集約処理に反映する。情報処理装置100は、例えば、グループbに属するそれぞれのGPU308が学習処理を実施して得た補正値Δwと、集約補正値Δwaとを統計処理することにより、集約補正値Δwbを算出し、グループbで共有することにする。
【0146】
図9および
図10に示すように、情報処理装置100は、具体的には、グループaにおける最新の集約補正値Δw
aを記憶するGPU0-2学習結果レジスタを有する。情報処理装置100は、具体的には、グループaにおける最新の集約補正値Δw
aを、グループbにおける集約処理に反映したか否かを管理するGPU0-2学習結果有効フラグを有する。
【0147】
情報処理装置100は、具体的には、グループbにおける最新の集約補正値Δwbを記憶するGPU3学習結果レジスタを有する。情報処理装置100は、具体的には、グループbにおける最新の集約補正値Δwbを、グループaにおける集約処理に反映したか否かを管理するGPU3学習結果有効フラグを有する。
【0148】
情報処理装置100は、グループaにおいて集約処理を実施した回数を表す学習回数を有する。情報処理装置100は、所定の計算処理を終了するか否かを管理する終了フラグを有する。
【0149】
「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δwaが算出された場合、算出された最新の集約補正値Δwaを、GPU0-2学習結果レジスタに格納する。「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δwaが算出されたことに応じて、GPU0-2学習結果有効フラグを1に更新する。「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δwaが、グループbにおける集約処理に反映されたことに応じて、GPU0-2学習結果有効フラグを0に更新する。
【0150】
これにより、「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δwaを管理することができる。「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δwaを、グループbにおける集約処理に反映するか否かを適切に判定可能にすることができる。
【0151】
「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δwbが算出された場合、算出された最新の集約補正値Δwbを、GPU0-2学習結果レジスタに格納する。「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δwbが算出されたことに応じて、GPU0-2学習結果有効フラグを1に更新する。「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δwbが、グループaにおける集約処理に反映されたことに応じて、GPU0-2学習結果有効フラグを0に更新する。
【0152】
これにより、「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δwbを管理することができる。「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δwbを、グループaにおける集約処理に反映するか否かを適切に判定可能にすることができる。
【0153】
「終了制御」のプロセスは、学習回数が指定回数P以上になった場合、終了フラグを1に更新し、所定の計算処理を終了するよう、グループaと、グループbとを制御する。
【0154】
図9および
図10に示すタイミングチャートは、GPU0に関するチャート900と、GPU1に関するチャート901と、GPU2に関するチャート902と、GPU3に関するチャート903とを含む。
【0155】
図9および
図10に示すチャート900は、GPU0の処理内容の時間変化を示す。Forward+Backwardは、学習処理である。Waitは、待機状態である。Allreduceは、集約処理である。具体的には、
図9は、チャート900の前半を示す。
図10は、チャート900の後半を示す。
【0156】
図9および
図10に示すチャート901は、GPU0の処理内容の時間変化を示す。具体的には、
図9は、チャート901の前半を示す。
図10は、チャート901の後半を示す。
図9および
図10に示すチャート902は、GPU0の処理内容の時間変化を示す。具体的には、
図9は、チャート902の前半を示す。
図10は、チャート902の後半を示す。
図9および
図10に示すチャート903は、GPU0の処理内容の時間変化を示す。具体的には、
図9は、チャート903の前半を示す。
図10は、チャート903の後半を示す。
【0157】
図9および
図10に示すタイミングチャートは、「データ制御1」のプロセスに関し、GPU0-2Allreduce期間のチャート911と、GPU0-2学習結果有効フラグのチャート912と、GPU0-2学習結果レジスタのチャート913とを含む。
【0158】
図9および
図10に示すチャート911は、グループaにおける集約処理の実施期間を示す。チャート911は、具体的には、グループaにおける集約処理の開始に応じて立ち上がり、グループaにおける集約処理の終了に応じて立ち下がる。
図9および
図10に示すチャート912は、GPU0-2学習結果有効フラグが0であるか1であるかを示す。
図9および
図10に示すチャート912は、GPU0-2学習結果レジスタの記憶内容の時間変化を示す。Δw
iaは、i回目に算出した集約補正値Δw
aを示す。
【0159】
図9および
図10に示すタイミングチャートは、「データ制御2」のプロセスに関し、GPU3Allreduce期間のチャート914と、GPU3学習結果有効フラグのチャート915と、GPU3学習結果レジスタのチャート916とを含む。
【0160】
図9および
図10に示すチャート914は、グループbにおける集約処理の実施期間を示す。チャート914は、具体的には、グループbにおける集約処理の開始に応じて立ち上がり、グループbにおける集約処理の終了に応じて立ち下がる。
図9および
図10に示すチャート915は、GPU3学習結果有効フラグが0であるか1であるかを示す。
図9および
図10に示すチャート916は、GPU3学習結果レジスタの記憶内容の時間変化を示す。Δw
ibは、i回目に算出した集約補正値Δw
bを示す。
【0161】
図9および
図10に示すタイミングチャートは、「終了制御」のプロセスに関し、学習回数のチャート917と、終了フラグのチャート918とを含む。
図9および
図10に示すチャート917は、学習回数の時間変化を示す。
図9および
図10に示すチャート918は、終了フラグが0であるか1であるかを示す。ここで、
図9の説明に移行する。
【0162】
グループaに属するそれぞれのGPU308は、1回目のステップを開始する。グループaにおいて、1回目のステップを開始すると、グループaに属するそれぞれのGPU308は、学習処理を1回実施し、補正値Δwを算出する。グループaにおいて、1回目のステップを開始する際、GPU2において、「データ制御1」のプロセスは、学習回数を1に更新する。
【0163】
(9-1)グループaにおいて、1回目のステップの集約処理を実施する際、GPU2において、「データ制御1」のプロセスは、グループaに属する他のGPU308から、当該GPU308が学習処理を実施して得られた補正値Δwを収集する。
【0164】
GPU2において、「データ制御1」のプロセスは、GPU2が学習処理を実施して得られた補正値Δwと、他のGPU308が学習処理を実施して得られた補正値Δwとに基づいて、最新の集約補正値Δw1aを算出する。GPU2において、「データ制御1」のプロセスは、最新の集約補正値Δw1aを、他のGPU308に共有する。
【0165】
図9の各種チャートに示すように、「データ制御1」のプロセスは、最新の集約補正値Δw
1aを算出したことに応じて、最新の集約補正値Δw
1aを、GPU0-2学習結果レジスタに格納する。「データ制御1」のプロセスは、最新の集約補正値Δw
1aを、GPU0-2学習結果レジスタに格納すると、GPU0-2学習結果有効フラグを1に更新する。
【0166】
グループbに属するそれぞれのGPU308は、1回目のステップを開始する。グループbにおいて、1回目のステップを開始すると、グループbに属するそれぞれのGPU308は、学習処理を1回実施し、補正値Δwを算出する。
【0167】
(9-2)グループbにおいて、1回目のステップの集約処理を実施する際、GPU3において、「データ制御2」のプロセスは、GPU0-2学習結果有効フラグが1であるか否かを判定する。GPU3において、「データ制御2」のプロセスは、GPU0-2学習結果有効フラグが1であれば、最新の集約補正値Δw1aを、GPU0-2学習結果レジスタから読み出す。
【0168】
GPU3において、「データ制御2」のプロセスは、GPU3が学習処理を実施して得られた補正値Δwと、読み出した最新の集約補正値Δw1aとに基づいて、最新の集約補正値Δw1bを算出する。
【0169】
これにより、GPU3において、「データ制御2」のプロセスは、グループaにおける最新の集約補正値Δw1aを、グループbにおける1回目のステップの集約処理に反映することができる。
【0170】
(9-3)
図9の各種チャートに示すように、「データ制御2」のプロセスは、最新の集約補正値Δw
1bを算出したことに応じて、最新の集約補正値Δw
1bを、GPU3学習結果レジスタに格納する。「データ制御2」のプロセスは、最新の集約補正値Δw
1bを、GPU3学習結果レジスタに格納すると、GPU3学習結果有効フラグを1に更新する。
【0171】
「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δw1aが、グループbにおける1回目のステップの集約処理に反映されたことに応じて、GPU0-2学習結果有効フラグを0に更新する。
【0172】
これにより、「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δw1aが、グループbにおける集約処理に繰り返し反映されてしまうことを防止することができる。このため、「データ制御1」のプロセスは、所定の計算処理の精度低下を抑制することができる。
【0173】
グループaに属するそれぞれのGPU308は、1回目のステップを終了すると、2回目のステップを開始する。グループaにおいて、2回目のステップを開始すると、グループaに属するそれぞれのGPU308は、学習処理を1回実施し、補正値Δwを算出する。グループaにおいて、2回目のステップを開始する際、GPU2において、「データ制御1」のプロセスは、学習回数を2に更新する。
【0174】
(9-4)グループaにおいて、2回目のステップの集約処理を実施する際、GPU2において、「データ制御1」のプロセスは、グループaに属する他のGPU308から、当該GPU308が学習処理を実施して得られた補正値Δwを収集する。
【0175】
GPU2において、「データ制御1」のプロセスは、GPU3学習結果有効フラグが1であるか否かを判定する。GPU2において、「データ制御1」のプロセスは、GPU3学習結果有効フラグが1であれば、最新の集約補正値Δw1bを、GPU3学習結果レジスタから読み出す。
【0176】
GPU2において、「データ制御1」のプロセスは、GPU2が学習処理を実施して得られた補正値Δwと、他のGPU308が学習処理を実施して得られた補正値Δwと、読み出した最新の集約補正値Δw1bとに基づいて、最新の集約補正値Δw2aを算出する。GPU2において、「データ制御1」のプロセスは、最新の集約補正値Δw2aを、他のGPU308に共有する。
【0177】
これにより、GPU2において、「データ制御1」のプロセスは、グループbにおける最新の集約補正値Δw1bを、グループaにおける2回目のステップの集約処理に反映することができる。
【0178】
(9-5)
図9の各種チャートに示すように、「データ制御1」のプロセスは、最新の集約補正値Δw
2aを算出したことに応じて、最新の集約補正値Δw
2aを、GPU0-2学習結果レジスタに格納する。「データ制御1」のプロセスは、最新の集約補正値Δw
2aを、GPU0-2学習結果レジスタに格納すると、GPU0-2学習結果有効フラグを1に更新する。
【0179】
「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δw1bが、グループaにおける2回目のステップの集約処理に反映されたことに応じて、GPU3学習結果有効フラグを0に更新する。
【0180】
これにより、「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δw
1bが、グループaにおける集約処理に繰り返し反映されてしまうことを防止することができる。このため、「データ制御2」のプロセスは、所定の計算処理の精度低下を抑制することができる。ここで、
図10の説明に移行する。
【0181】
グループbに属するそれぞれのGPU308は、P-X-1回目のステップを終了すると、P-X回目のステップを開始する。Xは、1以上の整数である。グループbにおいて、P-X回目のステップを開始すると、グループbに属するそれぞれのGPU308は、学習処理を1回実施し、補正値Δwを算出する。
【0182】
(10-1)グループbにおいて、P-X回目のステップの集約処理を実施する際、GPU3において、「データ制御2」のプロセスは、GPU0-2学習結果有効フラグが1であるか否かを判定する。GPU3において、「データ制御2」のプロセスは、GPU0-2学習結果有効フラグが1であれば、最新の集約補正値Δw(P-1)aを、GPU0-2学習結果レジスタから読み出す。
【0183】
GPU3において、「データ制御2」のプロセスは、GPU3が学習処理を実施して得られた補正値Δwと、読み出した最新の集約補正値Δw(P-1)aとに基づいて、最新の集約補正値Δw(P-X)bを算出する。
【0184】
これにより、GPU3において、「データ制御2」のプロセスは、グループaにおける最新の集約補正値Δw(P-1)aを、グループbにおけるP-X回目のステップの集約処理に反映することができる。
【0185】
(10-2)
図9の各種チャートに示すように、「データ制御2」のプロセスは、最新の集約補正値Δw
(P-X)bを算出したことに応じて、最新の集約補正値Δw
(P-X)bを、GPU3学習結果レジスタに格納する。「データ制御2」のプロセスは、最新の集約補正値Δw
(P-X)bを、GPU3学習結果レジスタに格納すると、GPU3学習結果有効フラグを1に更新する。
【0186】
「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δw(P-1)aが、グループbにおけるP-X回目のステップの集約処理に反映されたことに応じて、GPU0-2学習結果有効フラグを0に更新する。
【0187】
これにより、「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δw(P-1)aが、グループbにおける集約処理に繰り返し反映されてしまうことを防止することができる。このため、「データ制御1」のプロセスは、所定の計算処理の精度低下を抑制することができる。
【0188】
グループaに属するそれぞれのGPU308は、P-1回目のステップを終了すると、P回目のステップを開始する。グループaにおいて、P回目のステップを開始すると、グループaに属するそれぞれのGPU308は、学習処理を1回実施し、補正値Δwを算出する。グループaにおいて、P回目のステップを開始する際、GPU2において、「データ制御1」のプロセスは、学習回数をPに更新する。
【0189】
(10-3)グループaにおいて、P回目のステップの集約処理を実施する際、GPU2において、「データ制御1」のプロセスは、グループaに属する他のGPU308から、当該GPU308が学習処理を実施して得られた補正値Δwを収集する。
【0190】
GPU2において、「データ制御1」のプロセスは、GPU3学習結果有効フラグが1であるか否かを判定する。GPU2において、「データ制御1」のプロセスは、GPU3学習結果有効フラグが1であれば、最新の集約補正値Δw(P-X)bを、GPU3学習結果レジスタから読み出す。
【0191】
GPU2において、「データ制御1」のプロセスは、GPU2が学習処理を実施して得られた補正値Δwと、収集した補正値Δwと、読み出した最新の集約補正値Δw(P-X)bとに基づいて、最新の集約補正値ΔwPaを算出する。GPU2において、「データ制御1」のプロセスは、最新の集約補正値ΔwPaを、他のGPU308に共有する。
【0192】
これにより、GPU2において、「データ制御1」のプロセスは、グループbにおける最新の集約補正値Δw(P-X)bを、グループaにおけるP回目のステップの集約処理に反映することができる。
【0193】
(10-4)
図9の各種チャートに示すように、「データ制御1」のプロセスは、最新の集約補正値Δw
Paを算出したことに応じて、最新の集約補正値Δw
Paを、GPU0-2学習結果レジスタに格納する。「データ制御1」のプロセスは、最新の集約補正値Δw
Paを、GPU0-2学習結果レジスタに格納すると、GPU0-2学習結果有効フラグを1に更新する。
【0194】
「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δw(P-X)bが、グループaにおけるP回目のステップの集約処理に反映されたことに応じて、GPU3学習結果有効フラグを0に更新する。
【0195】
これにより、「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δw(P-X)bが、グループaにおける集約処理に繰り返し反映されてしまうことを防止することができる。このため、「データ制御2」のプロセスは、所定の計算処理の精度低下を抑制することができる。
【0196】
(10-5)GPU2において、「終了制御」のプロセスは、学習回数≧Pであることを検出すると、グループaにおけるステップの繰り返しを停止するよう、グループaを制御する。同様に、GPU2において、「終了制御」のプロセスは、学習回数≧Pであることを検出すると、グループbにおけるステップの繰り返しを停止するよう、グループbを制御する。GPU2において、「終了制御」のプロセスは、グループbにおいて、ステップが実施中であれば、ステップを強制終了するよう、グループbを制御してもよい。
【0197】
これにより、「終了制御」のプロセスは、所定の計算処理を適切に終了することができる。「終了制御」のプロセスは、少なくとも、グループaにおいて学習処理がP回実施されることを保証することができ、所定の計算処理の精度を確保することができる。
【0198】
例えば、GPU3の処理性能が、他のGPU308に比べて20%低い場合、情報処理装置100は、4つのGPU308を単一のグループとして扱う場合における5%分の学習結果に相当する情報を失うことになる。しかしながら、情報処理装置100は、少なくとも、グループaにおいて学習処理がP回実施されることを保証することができるため、失われる情報の量を抑制することができ、所定の計算処理の精度低下を抑制することができる。
【0199】
情報処理装置100は、所定の計算処理の精度低下を抑制しつつ、所定の計算処理が、処理速度が比較的遅いGPU3に律速されることを回避することができ、所定の計算処理にかかる処理負担および処理時間の増大化を抑制することができる。
【0200】
(動作例1における第1データ制御処理手順)
次に、
図11を用いて、動作例1において情報処理装置100が実行する、第1データ制御処理手順の一例について説明する。第1データ制御処理は、例えば、
図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
【0201】
図11は、動作例1における第1データ制御処理手順の一例を示すフローチャートである。
図11において、情報処理装置100は、i回目の学習処理を実行する(ステップS1101)。次に、情報処理装置100は、Allreduce演算処理を開始する(ステップS1102)。
【0202】
そして、情報処理装置100は、GPU3学習結果有効フラグ=1であるか否かを判定する(ステップS1103)。ここで、GPU3学習結果有効フラグ=1ではない場合(ステップS1103:No)、情報処理装置100は、ステップS1106の処理に移行する。一方で、GPU3学習結果有効フラグ=1である場合(ステップS1103:Yes)、情報処理装置100は、ステップS1104の処理に移行する。
【0203】
ステップS1104では、情報処理装置100は、GPU3学習結果レジスタの内容を読み出す(ステップS1104)。次に、情報処理装置100は、GPU3学習結果有効フラグ=0に設定する(ステップS1105)。そして、情報処理装置100は、ステップS1106の処理に移行する。
【0204】
ステップS1106では、情報処理装置100は、Allreduce演算結果を生成する(ステップS1106)。次に、情報処理装置100は、GPU0-2学習結果有効フラグ=1に設定する(ステップS1107)。そして、情報処理装置100は、GPU0-2学習結果レジスタに、Allreduce演算結果を書き込む(ステップS1108)。
【0205】
次に、情報処理装置100は、学習回数i=Pであるか否かを判定する(ステップS1109)。ここで、学習回数i=Pではない場合(ステップS1109:No)、情報処理装置100は、ステップS1110の処理に移行する。一方で、学習回数i=Pである場合(ステップS1109:Yes)、情報処理装置100は、ステップS1111の処理に移行する。
【0206】
ステップS1110では、情報処理装置100は、iをインクリメントする(ステップS1110)。そして、情報処理装置100は、ステップS1101の処理に戻る。
【0207】
ステップS1111では、情報処理装置100は、
図13に後述する終了制御処理を実行する(ステップS1111)。そして、情報処理装置100は、第1データ制御処理を終了する。
【0208】
(動作例1における第2データ制御処理手順)
次に、
図12を用いて、動作例1において情報処理装置100が実行する、第2データ制御処理手順の一例について説明する。第2データ制御処理は、例えば、
図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
【0209】
図12は、動作例1における第2データ制御処理手順の一例を示すフローチャートである。
図12において、情報処理装置100は、j回目の学習処理を実行する(ステップS1201)。次に、情報処理装置100は、Allreduce演算処理を開始する(ステップS1202)。
【0210】
そして、情報処理装置100は、GPU0-2学習結果有効フラグ=1であるか否かを判定する(ステップS1203)。ここで、GPU0-2学習結果有効フラグ=1ではない場合(ステップS1203:No)、情報処理装置100は、ステップS1206の処理に移行する。一方で、GPU0-2学習結果有効フラグ=1である場合(ステップS1203:Yes)、情報処理装置100は、ステップS1204の処理に移行する。
【0211】
ステップS1204では、情報処理装置100は、GPU0-2学習結果レジスタの内容を読み出す(ステップS1204)。次に、情報処理装置100は、GPU0-2学習結果有効フラグ=0に設定する(ステップS1205)。そして、情報処理装置100は、Allreduce演算結果を生成する(ステップS1206)。
【0212】
次に、情報処理装置100は、GPU3学習結果有効フラグ=1に設定する(ステップS1207)。そして、情報処理装置100は、GPU3学習結果レジスタに、Allreduce演算結果を書き込む(ステップS1208)。次に、情報処理装置100は、jをインクリメントする(ステップS1209)。そして、情報処理装置100は、ステップS1201の処理に戻る。
【0213】
(動作例1における終了制御処理手順)
次に、
図13を用いて、動作例1において情報処理装置100が実行する、終了制御処理手順の一例について説明する。終了制御処理は、例えば、
図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
【0214】
図13は、動作例1における終了制御処理手順の一例を示すフローチャートである。
図13において、情報処理装置100は、第1データ制御処理を終了する(ステップS1301)。次に、情報処理装置100は、第2データ制御処理を強制終了する(ステップS1302)。そして、情報処理装置100は、終了制御処理を終了する。
【0215】
(情報処理装置100の動作例2)
次に、
図14~
図17を用いて、情報処理装置100の動作例2について説明する。上述した動作例1は、処理速度の指標値が閾値t
TH未満であるGPU308を分類したグループが、1つのGPU308のみを含む場合に関する動作例である。これに対し、動作例2は、処理速度の指標値が閾値t
TH未満であるGPU308を分類したグループが、2以上のGPU308を含む場合に関する動作例である。
【0216】
図14~
図17は、情報処理装置100の動作例2を示す説明図である。
図14~
図17において、情報処理装置100は、4つのGPU308を含むとする。4つのGPU308は、具体的には、GPU0と、GPU1と、GPU2と、GPU3とであるとする。GPU2の処理速度と、GPU3の処理速度とは、GPU0の処理速度と、GPU1の処理速度とに比べて遅いとする。
【0217】
情報処理装置100は、4つのGPU308を用いて、深層学習に関する所定の計算処理を並列処理することが望まれるとする。所定の計算処理は、例えば、学習処理を繰り返し実施することにより、モデルのパラメータを決定することである。モデルは、例えば、DNNである。学習処理は、例えば、モデルのパラメータの補正値を算出することである。
【0218】
ここで、情報処理装置100は、CPU301によって、それぞれのGPU308が、N回のテスト学習処理を実施するよう、4つのGPU308を制御する。それぞれのGPU308は、情報処理装置100の制御に従って、N回のテスト学習処理を実施する。それぞれのGPU308は、N回のテスト学習処理を実施した後、テスト学習処理を実施する際にかかった所要時間の統計値を、学習処理時間として算出し、情報処理装置100に送信する。
【0219】
情報処理装置100は、それぞれのGPU308が算出した学習処理時間を、それぞれのGPU308から受信する。情報処理装置100は、具体的には、GPU0の処理時間tGPU0と、GPU1の処理時間tGPU1と、GPU2の処理時間tGPU2と、GPU3の処理時間tGPU3とを受信したとする。ここで、tGPU3>tGPU2>tGPU1>tGPU0である。これにより、情報処理装置100は、4つのGPU308を、複数のグループに分類する指針を得ることができる。
【0220】
情報処理装置100は、4つのGPU308を、複数のグループに分類するために用いられる閾値tTHを有する。閾値tTHは、例えば、予め利用者によって設定される。具体的には、tTH=1.2である。情報処理装置100は、最小の処理時間tGPU0に対するそれぞれのGPU308の処理時間の比率を、当該GPU308の処理速度を表す指標値として算出する。ここで、tGPU3/tGPU0,tGPU2/tGPU0>tTH>tGPU1/tGPU0,tGPU0/tGPU0であるとする。
【0221】
情報処理装置100は、いずれのGPU308の処理速度の指標値も、閾値tTH未満である場合、処理速度が比較的遅いGPU308が存在しても、所定の計算処理を効率よく並列処理可能であると判断する。このため、情報処理装置100は、4つのGPU308を単一のグループに分類し、単一のグループにおいて所定の計算処理を並列処理することにする。
【0222】
一方で、情報処理装置100は、少なくともいずれかのGPU308の処理速度の指標値が、閾値t
TH以上である場合、4つのGPU308を、複数のグループに分類する。ここでは、情報処理装置100は、GPU2の処理速度の指標値と、GPU3の処理速度の指標値とが、閾値t
TH以上であるため、4つのGPU308を、複数のグループに分類することになる。情報処理装置100は、具体的には、処理速度の指標値が閾値t
TH未満であるGPU0と、GPU1とを、グループaに分類し、処理速度の指標値が閾値t
TH以上であるGPU2と、GPU3とを、グループbに分類する。次に、
図14の説明に移行する。
【0223】
図14の例では、情報処理装置100が、FPGA307を含むとする。情報処理装置100は、FPGA307を含む場合、処理速度の指標値が閾値t
TH未満であるGPU308を分類したグループaのうち、処理時間が最大であるGPU1を介して、グループaを制御する「データ制御1」のプロセスを用意する。
【0224】
また、情報処理装置100は、FPGA307を含む場合、処理速度の指標値が閾値tTH以上であるGPU308を分類したグループbのうち、処理時間が最大であるGPU3を介して、グループbを制御する「データ制御2」のプロセスを用意する。
【0225】
また、情報処理装置100は、FPGA307を含む場合、処理速度の指標値が閾値tTH未満であるGPU308を分類したグループaのうち、処理時間が最大であるGPU1を介して、所定の計算処理の終了条件を制御する「終了制御」のプロセスを用意する。
【0226】
情報処理装置100は、FPGA307を含む場合、「データ制御1」のプロセスと、「データ制御2」のプロセスと、「終了制御」のプロセスとを、FPGA307に配備する。
【0227】
これにより、情報処理装置100は、各種プロセスによって、グループ単位で学習処理を繰り返し実施するよう、4つのGPU308を制御することができ、所定の計算処理を並列処理することができる。情報処理装置100が、所定の計算処理を実施する具体例については、例えば、
図16および
図17を用いて後述する。次に、
図15の説明に移行する。
【0228】
図15の例では、情報処理装置100が、FPGA307を含まないとする。情報処理装置100は、FPGA307を含まない場合、処理速度の指標値が閾値t
TH未満であるGPU308を分類したグループaのうち、処理時間が最大であるGPU1を介して、グループaを制御する「データ制御1」のプロセスを用意する。
【0229】
情報処理装置100は、FPGA307を含まない場合、処理速度の指標値が閾値tTH以上であるGPU308を分類したグループbのうち、処理時間が最大であるGPU3を介して、グループbを制御する「データ制御2」のプロセスを用意する。
【0230】
情報処理装置100は、FPGA307を含まない場合、処理速度の指標値が閾値tTH未満であるGPU308を分類したグループaのうち、処理時間が最大であるGPU1を介して、所定の計算処理の終了条件を制御する「終了制御」のプロセスを用意する。
【0231】
情報処理装置100は、FPGA307を含まない場合、「データ制御1」のプロセスを、処理速度の指標値が閾値tTH未満であるGPU308を分類したグループaのうち、処理時間が最大であるGPU1に配備する。
【0232】
情報処理装置100は、FPGA307を含まない場合、「データ制御2」のプロセスを、処理速度の指標値が閾値tTH以上であるGPU308を分類したグループbのうち、処理時間が最大であるGPU3に配備する。
【0233】
情報処理装置100は、FPGA307を含まない場合、「終了制御」のプロセスを、処理速度の指標値が閾値tTH未満であるGPU308を分類したグループaのうち、処理時間が最大であるGPU1に配備する。
【0234】
これにより、情報処理装置100は、各種プロセスによって、グループ単位で学習処理を繰り返し実施するよう、4つのGPU308を制御することができ、所定の計算処理を並列処理することができる。情報処理装置100が、所定の計算処理を実施する具体例については、例えば、
図16および
図17を用いて後述する。
【0235】
次に、
図16および
図17の説明に移行し、情報処理装置100が、FPGA307を含まない場合を一例として、情報処理装置100が、各種プロセスによって、所定の計算処理を実施する具体例について説明する。
【0236】
図16および
図17において、情報処理装置100は、4つのGPU308を処理速度に応じて分類したグループ単位で、当該グループに属する1以上のGPU308を同期することにより、深層学習に関する所定の計算処理を並列処理する。
【0237】
情報処理装置100は、例えば、グループaに属するそれぞれのGPU308が1回ずつ学習処理を実施した後に、グループaに属するそれぞれのGPU308において集約処理を実施するというステップを繰り返し実施するよう、グループaを制御する。集約処理は、それぞれのGPU308が学習処理を実施して得た補正値Δwを統計処理することにより、集約補正値Δwaを算出し、グループaで共有することである。
【0238】
情報処理装置100は、グループbにおける最新の集約補正値Δwbがあれば、最新の集約補正値Δwbを、集約処理に反映する。情報処理装置100は、例えば、最新の集約補正値Δwbと、グループaに属するそれぞれのGPU308が学習処理を実施して得た補正値Δwとを統計処理することにより、集約補正値Δwaを算出する。
【0239】
情報処理装置100は、例えば、グループbに属するそれぞれのGPU308が1回ずつ学習処理を実施した後に、グループbに属するそれぞれのGPU308において集約処理を実施するというステップを繰り返し実施するよう、グループbを制御する。集約処理は、それぞれのGPU308が学習処理を実施して得た補正値Δwを統計処理することにより、集約補正値Δwbを算出し、グループbで共有することである。
【0240】
情報処理装置100は、グループaにおける最新の集約補正値Δwaがあれば、最新の集約補正値Δwaを、集約処理に反映する。情報処理装置100は、例えば、最新の集約補正値Δwaと、グループbに属するそれぞれのGPU308が学習処理を実施して得た補正値Δwとを統計処理することにより、集約補正値Δwbを算出する。
【0241】
図16および
図17に示すように、情報処理装置100は、具体的には、グループaにおける最新の集約補正値Δw
aを記憶するGPU0-1学習結果レジスタを有する。情報処理装置100は、具体的には、グループaにおける最新の集約補正値Δw
aを、グループbにおける集約処理に反映したか否かを管理するGPU0-1学習結果有効フラグを有する。
【0242】
情報処理装置100は、具体的には、グループbにおける最新の集約補正値Δwbを記憶するGPU2-3学習結果レジスタを有する。情報処理装置100は、具体的には、グループbにおける最新の集約補正値Δwbを、グループaにおける集約処理に反映したか否かを管理するGPU2-3学習結果有効フラグを有する。
【0243】
情報処理装置100は、グループaにおいて集約処理を実施した回数を表す学習回数を有する。情報処理装置100は、所定の計算処理を終了するか否かを管理する終了フラグを有する。
【0244】
「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δwaが算出された場合、算出された最新の集約補正値Δwaを、GPU0-1学習結果レジスタに格納する。「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δwaが算出されたことに応じて、GPU0-1学習結果有効フラグを1に更新する。「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δwaが、グループbにおける集約処理に反映されたことに応じて、GPU0-1学習結果有効フラグを0に更新する。「データ制御1」のプロセスは、グループaにおいて、ステップを開始する都度、学習回数をインクリメントする。
【0245】
これにより、「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δwaを管理することができる。「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δwaを、グループbにおける集約処理に反映するか否かを適切に判定可能にすることができる。
【0246】
「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δwbが算出された場合、算出された最新の集約補正値Δwbを、GPU2-3学習結果レジスタに格納する。「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δwbが算出されたことに応じて、GPU2-3学習結果有効フラグを1に更新する。「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δwbが、グループaにおける集約処理に反映されたことに応じて、GPU2-3学習結果有効フラグを0に更新する。
【0247】
これにより、「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δwbを管理することができる。「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δwbを、グループaにおける集約処理に反映するか否かを適切に判定可能にすることができる。
【0248】
「終了制御」のプロセスは、学習回数が指定回数P以上になった場合、終了フラグを1に更新し、所定の計算処理を終了するよう、グループaと、グループbとを制御する。
【0249】
図16および
図17に示すタイミングチャートは、GPU0に関するチャート1600と、GPU1に関するチャート1601と、GPU2に関するチャート1602と、GPU3に関するチャート1603とを含む。
【0250】
図16および
図17に示すチャート1600は、GPU0の処理内容の時間変化を示す。Forward+Backwardは、学習処理である。Waitは、待機状態である。Allreduceは、集約処理である。具体的には、
図16は、チャート1600の前半を示す。
図17は、チャート1600の後半を示す。
【0251】
図16および
図17に示すチャート1601は、GPU1の処理内容の時間変化を示す。具体的には、
図16は、チャート1601の前半を示す。
図17は、チャート1601の後半を示す。
図16および
図17に示すチャート1602は、GPU2の処理内容の時間変化を示す。具体的には、
図16は、チャート1602の前半を示す。
図17は、チャート1602の後半を示す。
図16および
図17に示すチャート1603は、GPU3の処理内容の時間変化を示す。具体的には、
図16は、チャート1603の前半を示す。
図17は、チャート1603の後半を示す。
【0252】
図16および
図17に示すタイミングチャートは、「データ制御1」のプロセスに関し、GPU0-1Allreduce期間のチャート1611を含む。
図16および
図17に示すタイミングチャートは、「データ制御1」のプロセスに関し、GPU0-1学習結果有効フラグのチャート1612と、GPU0-1学習結果レジスタのチャート1613とを含む。
【0253】
図16および
図17に示すチャート1611は、グループaにおける集約処理の実施期間を示す。チャート1611は、具体的には、グループaにおける集約処理の開始に応じて立ち上がり、グループaにおける集約処理の終了に応じて立ち下がる。
図16および
図17に示すチャート1612は、GPU0-1学習結果有効フラグが0であるか1であるかを示す。
図16および
図17に示すチャート1612は、GPU0-1学習結果レジスタの記憶内容の時間変化を示す。Δw
iaは、i回目に算出した集約補正値Δw
aを示す。
【0254】
図16および
図17に示すタイミングチャートは、「データ制御2」のプロセスに関し、GPU3Allreduce期間のチャート1614と、GPU2-3学習結果有効フラグのチャート1615と、GPU2-3学習結果レジスタのチャート1616とを含む。
【0255】
図16および
図17に示すチャート1614は、グループbにおける集約処理の実施期間を示す。チャート1614は、具体的には、グループbにおける集約処理の開始に応じて立ち上がり、グループbにおける集約処理の終了に応じて立ち下がる。
図16および
図17に示すチャート1615は、GPU2-3学習結果有効フラグが0であるか1であるかを示す。
図16および
図17に示すチャート1616は、GPU2-3学習結果レジスタの記憶内容の時間変化を示す。Δw
ibは、i回目に算出した集約補正値Δw
bを示す。
【0256】
図16および
図17に示すタイミングチャートは、「終了制御」のプロセスに関し、学習回数のチャート1617と、終了フラグのチャート1618とを含む。
図16および
図17に示すチャート1617は、学習回数の時間変化を示す。
図16および
図17に示すチャート1618は、終了フラグが0であるか1であるかを示す。ここで、
図16の説明に移行する。
【0257】
グループaに属するそれぞれのGPU308は、1回目のステップを開始する。グループaにおいて、1回目のステップを開始すると、グループaに属するそれぞれのGPU308は、学習処理を1回実施し、補正値Δwを算出する。グループaにおいて、1回目のステップを開始する際、GPU1において、「データ制御1」のプロセスは、学習回数を1に更新する。
【0258】
(16-1)グループaにおいて、1回目のステップの集約処理を実施する際、GPU1において、「データ制御1」のプロセスは、グループaに属する他のGPU308から、当該GPU308が学習処理を実施して得られた補正値Δwを収集する。
【0259】
GPU1において、「データ制御1」のプロセスは、GPU1が学習処理を実施して得られた補正値Δwと、他のGPU308が学習処理を実施して得られた補正値Δwとに基づいて、最新の集約補正値Δw1aを算出する。GPU1において、「データ制御1」のプロセスは、最新の集約補正値Δw1aを、他のGPU308に共有する。
【0260】
図16の各種チャートに示すように、「データ制御1」のプロセスは、最新の集約補正値Δw
1aを算出したことに応じて、最新の集約補正値Δw
1aを、GPU0-1学習結果レジスタに格納する。「データ制御1」のプロセスは、最新の集約補正値Δw
1aを、GPU0-1学習結果レジスタに格納すると、GPU0-1学習結果有効フラグを1に更新する。
【0261】
グループbに属するそれぞれのGPU308は、1回目のステップを開始する。グループbにおいて、1回目のステップを開始すると、グループbに属するそれぞれのGPU308は、学習処理を1回実施し、補正値Δwを算出する。
【0262】
(16-2)グループbにおいて、1回目のステップの集約処理を実施する際、GPU3において、「データ制御2」のプロセスは、グループbに属する他のGPU308から、当該GPU308が学習処理を実施して得られた補正値Δwを収集する。
【0263】
GPU3において、「データ制御2」のプロセスは、GPU0-1学習結果有効フラグが1であるか否かを判定する。GPU3において、「データ制御2」のプロセスは、GPU0-1学習結果有効フラグが1であれば、最新の集約補正値Δw1aを、GPU0-1学習結果レジスタから読み出す。
【0264】
GPU3において、「データ制御2」のプロセスは、GPU3が学習処理を実施して得られた補正値Δwと、他のGPU308が学習処理を実施して得られた補正値Δwと、読み出した最新の集約補正値Δw1aとに基づいて、最新の集約補正値Δw1bを算出する。GPU3において、「データ制御2」のプロセスは、最新の集約補正値Δw1bを、他のGPU308に共有する。
【0265】
これにより、GPU3において、「データ制御2」のプロセスは、グループaにおける最新の集約補正値Δw1aを、グループbにおける1回目のステップの集約処理に反映することができる。
【0266】
(16-3)
図16の各種チャートに示すように、「データ制御2」のプロセスは、最新の集約補正値Δw
1bを算出したことに応じて、最新の集約補正値Δw
1bを、GPU2-3学習結果レジスタに格納する。「データ制御2」のプロセスは、最新の集約補正値Δw
1bを、GPU2-3学習結果レジスタに格納すると、GPU2-3学習結果有効フラグを1に更新する。
【0267】
「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δw1aが、グループbにおける1回目のステップの集約処理に反映されたことに応じて、GPU0-1学習結果有効フラグを0に更新する。
【0268】
これにより、「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δw1aが、グループbにおける集約処理に繰り返し反映されてしまうことを防止することができる。このため、「データ制御1」のプロセスは、所定の計算処理の精度低下を抑制することができる。
【0269】
グループaに属するそれぞれのGPU308は、1回目のステップを終了すると、2回目のステップを開始する。グループaにおいて、2回目のステップを開始すると、グループaに属するそれぞれのGPU308は、学習処理を1回実施し、補正値Δwを算出する。グループaにおいて、2回目のステップを開始する際、GPU1において、「データ制御1」のプロセスは、学習回数を2に更新する。
【0270】
(16-4)グループaにおいて、2回目のステップの集約処理を実施する際、GPU1において、「データ制御1」のプロセスは、グループaに属する他のGPU308から、当該GPU308が学習処理を実施して得られた補正値Δwを収集する。
【0271】
GPU1において、「データ制御1」のプロセスは、GPU2-3学習結果有効フラグが1であるか否かを判定する。GPU1において、「データ制御1」のプロセスは、GPU2-3学習結果有効フラグが1であれば、最新の集約補正値Δw1bを、GPU2-3学習結果レジスタから読み出す。
【0272】
GPU1において、「データ制御1」のプロセスは、GPU1が学習処理を実施して得られた補正値Δwと、他のGPU308が学習処理を実施して得られた補正値Δwと、読み出した最新の集約補正値Δw1bとに基づいて、最新の集約補正値Δw2aを算出する。GPU1において、「データ制御1」のプロセスは、最新の集約補正値Δw2aを、他のGPU308に共有する。
【0273】
これにより、GPU1において、「データ制御1」のプロセスは、グループbにおける最新の集約補正値Δw1bを、グループaにおける2回目のステップの集約処理に反映することができる。
【0274】
(16-5)
図16の各種チャートに示すように、「データ制御1」のプロセスは、最新の集約補正値Δw
2aを算出したことに応じて、最新の集約補正値Δw
2aを、GPU0-1学習結果レジスタに格納する。「データ制御1」のプロセスは、最新の集約補正値Δw
2aを、GPU0-1学習結果レジスタに格納すると、GPU0-1学習結果有効フラグを1に更新する。
【0275】
「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δw1bが、グループaにおける2回目のステップの集約処理に反映されたことに応じて、GPU2-3学習結果有効フラグを0に更新する。
【0276】
これにより、「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δw
1bが、グループaにおける集約処理に繰り返し反映されてしまうことを防止することができる。このため、「データ制御2」のプロセスは、所定の計算処理の精度低下を抑制することができる。ここで、
図17の説明に移行する。
【0277】
グループbに属するそれぞれのGPU308は、P-X-1回目のステップを終了すると、P-X回目のステップを開始する。グループbにおいて、P-X回目のステップを開始すると、グループbに属するそれぞれのGPU308は、学習処理を1回実施し、補正値Δwを算出する。
【0278】
(17-1)グループbにおいて、P-X回目のステップの集約処理を実施する際、GPU3において、「データ制御2」のプロセスは、グループbに属する他のGPU308から、当該GPU308が学習処理を実施して得られた補正値Δwを収集する。
【0279】
GPU3において、「データ制御2」のプロセスは、GPU0-1学習結果有効フラグが1であるか否かを判定する。GPU3において、「データ制御2」のプロセスは、GPU0-1学習結果有効フラグが1であれば、最新の集約補正値Δw(P-1)aを、GPU0-1学習結果レジスタから読み出す。
【0280】
GPU3において、「データ制御2」のプロセスは、GPU3が学習処理を実施して得られた補正値Δwと、収集した補正値Δwと、読み出した最新の集約補正値Δw(P-1)aとに基づいて、最新の集約補正値Δw(P-X)bを算出する。GPU3において、「データ制御2」のプロセスは、最新の集約補正値Δw(P-X)bを、他のGPU308に共有する。
【0281】
これにより、GPU3において、「データ制御2」のプロセスは、グループaにおける最新の集約補正値Δw(P-1)aを、グループbにおけるP-X回目のステップの集約処理に反映することができる。
【0282】
(17-2)
図16の各種チャートに示すように、「データ制御2」のプロセスは、最新の集約補正値Δw
(P-X)bを算出したことに応じて、最新の集約補正値Δw
(P-X)bを、GPU2-3学習結果レジスタに格納する。「データ制御2」のプロセスは、最新の集約補正値Δw
(P-X)bを、GPU2-3学習結果レジスタに格納すると、GPU2-3学習結果有効フラグを1に更新する。
【0283】
「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δw(P-1)aが、グループbにおけるP-X回目のステップの集約処理に反映されたことに応じて、GPU0-1学習結果有効フラグを0に更新する。
【0284】
これにより、「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δw(P-1)aが、グループbにおける集約処理に繰り返し反映されてしまうことを防止することができる。このため、「データ制御1」のプロセスは、所定の計算処理の精度低下を抑制することができる。
【0285】
グループaに属するそれぞれのGPU308は、P-1回目のステップを終了すると、P回目のステップを開始する。グループaにおいて、P回目のステップを開始すると、グループaに属するそれぞれのGPU308は、学習処理を1回実施し、補正値Δwを算出する。グループaにおいて、P回目のステップを開始する際、GPU2において、「データ制御1」のプロセスは、学習回数をPに更新する。
【0286】
(17-3)グループaにおいて、P回目のステップの集約処理を実施する際、GPU1において、「データ制御1」のプロセスは、グループaに属する他のGPU308から、当該GPU308が学習処理を実施して得られた補正値Δwを収集する。
【0287】
GPU1において、「データ制御1」のプロセスは、GPU2-3学習結果有効フラグが1であるか否かを判定する。GPU1において、「データ制御1」のプロセスは、GPU2-3学習結果有効フラグが1であれば、最新の集約補正値Δw(P-X)bを、GPU2-3学習結果レジスタから読み出す。
【0288】
GPU1において、「データ制御1」のプロセスは、GPU1が学習処理を実施して得られた補正値Δwと、収集した補正値Δwと、読み出した最新の集約補正値Δw(P-X)bとに基づいて、最新の集約補正値ΔwPaを算出する。GPU1において、「データ制御1」のプロセスは、最新の集約補正値ΔwPaを、他のGPU308に共有する。
【0289】
これにより、GPU1において、「データ制御1」のプロセスは、グループbにおける最新の集約補正値Δw(P-X)bを、グループaにおけるP回目のステップの集約処理に反映することができる。
【0290】
(17-4)
図16の各種チャートに示すように、「データ制御1」のプロセスは、最新の集約補正値Δw
Paを算出したことに応じて、最新の集約補正値Δw
Paを、GPU0-1学習結果レジスタに格納する。「データ制御1」のプロセスは、最新の集約補正値Δw
Paを、GPU0-1学習結果レジスタに格納すると、GPU0-1学習結果有効フラグを1に更新する。
【0291】
「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δw(P-X)bが、グループaにおけるP回目のステップの集約処理に反映されたことに応じて、GPU2-3学習結果有効フラグを0に更新する。
【0292】
これにより、「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δw(P-X)bが、グループaにおける集約処理に繰り返し反映されてしまうことを防止することができる。このため、「データ制御2」のプロセスは、所定の計算処理の精度低下を抑制することができる。
【0293】
(17-5)GPU1において、「終了制御」のプロセスは、学習回数≧Pであることを検出すると、グループaにおけるステップの繰り返しを停止するよう、グループaを制御する。同様に、GPU1において、「終了制御」のプロセスは、学習回数≧Pであることを検出すると、グループbにおけるステップの繰り返しを停止するよう、グループbを制御する。GPU1において、「終了制御」のプロセスは、グループbにおいて、ステップが実施中であれば、ステップを強制終了するよう、グループbを制御してもよい。
【0294】
これにより、「終了制御」のプロセスは、所定の計算処理を適切に終了することができる。「終了制御」のプロセスは、少なくとも、グループaにおいて学習処理がP回実施されることを保証することができ、所定の計算処理の精度を確保することができる。
【0295】
情報処理装置100は、少なくとも、グループaにおいて学習処理がP回実施されることを保証することができるため、失われる情報の量を抑制することができ、所定の計算処理の精度低下を抑制することができる。
【0296】
情報処理装置100は、所定の計算処理の精度低下を抑制しつつ、所定の計算処理が、処理速度が比較的遅いGPU3に律速されることを回避することができ、所定の計算処理にかかる処理負担および処理時間の増大化を抑制することができる。
【0297】
ここでは、テスト学習処理と、所定の計算処理とが異なる場合について説明したが、これに限らない。例えば、情報処理装置100が、所定の計算処理の一部を、テスト学習処理として利用する場合があってもよい。
【0298】
具体的には、情報処理装置100は、所定の計算処理の前半部分として、4つのGPU308を単一のグループとして、学習処理を1回以上実施した後、集約処理を実施することにより、それぞれのGPU308の処理速度の指標値を算出する。具体的には、情報処理装置100は、4つのGPU308を、処理速度の指標値に応じた2つのグループに分類する。具体的には、情報処理装置100は、所定の計算処理の後半部分として、動作例1と同様に、2つのグループのそれぞれのグループにおいて、ステップを繰り返すよう、2つのグループを制御する。
【0299】
(動作例2における第1データ制御処理手順)
次に、
図18を用いて、動作例2において情報処理装置100が実行する、第1データ制御処理手順の一例について説明する。第1データ制御処理は、例えば、
図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
【0300】
図18は、動作例2における第1データ制御処理手順の一例を示すフローチャートである。
図18において、情報処理装置100は、i回目の学習処理を実行する(ステップS1801)。次に、情報処理装置100は、Allreduce演算処理を開始する(ステップS1802)。
【0301】
そして、情報処理装置100は、GPU2-3学習結果有効フラグ=1であるか否かを判定する(ステップS1803)。ここで、GPU2-3学習結果有効フラグ=1ではない場合(ステップS1803:No)、情報処理装置100は、ステップS1806の処理に移行する。一方で、GPU2-3学習結果有効フラグ=1である場合(ステップS1803:Yes)、情報処理装置100は、ステップS1804の処理に移行する。
【0302】
ステップS1804では、情報処理装置100は、GPU2-3学習結果レジスタの内容を読み出す(ステップS1804)。次に、情報処理装置100は、GPU2-3学習結果有効フラグ=0に設定する(ステップS1805)。そして、情報処理装置100は、ステップS1806の処理に移行する。
【0303】
ステップS1806では、情報処理装置100は、Allreduce演算結果を生成する(ステップS1806)。次に、情報処理装置100は、GPU0-1学習結果有効フラグ=1に設定する(ステップS1807)。そして、情報処理装置100は、GPU0-1学習結果レジスタに、Allreduce演算結果を書き込む(ステップS1808)。
【0304】
次に、情報処理装置100は、学習回数i=Pであるか否かを判定する(ステップS1809)。ここで、学習回数i=Pではない場合(ステップS1809:No)、情報処理装置100は、ステップS1810の処理に移行する。一方で、学習回数i=Pである場合(ステップS1809:Yes)、情報処理装置100は、ステップS1811の処理に移行する。
【0305】
ステップS1810では、情報処理装置100は、iをインクリメントする(ステップS1810)。そして、情報処理装置100は、ステップS1801の処理に戻る。
【0306】
ステップS1811では、情報処理装置100は、
図20に後述する終了制御処理を実行する(ステップS1811)。そして、情報処理装置100は、第1データ制御処理を終了する。
【0307】
(動作例2における第2データ制御処理手順)
次に、
図19を用いて、動作例2において情報処理装置100が実行する、第2データ制御処理手順の一例について説明する。第2データ制御処理は、例えば、
図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
【0308】
図19は、動作例2における第2データ制御処理手順の一例を示すフローチャートである。
図19において、情報処理装置100は、j回目の学習処理を実行する(ステップS1901)。次に、情報処理装置100は、Allreduce演算処理を開始する(ステップS1902)。
【0309】
そして、情報処理装置100は、GPU0-1学習結果有効フラグ=1であるか否かを判定する(ステップS1903)。ここで、GPU0-1学習結果有効フラグ=1ではない場合(ステップS1903:No)、情報処理装置100は、ステップS1906の処理に移行する。一方で、GPU0-1学習結果有効フラグ=1である場合(ステップS1903:Yes)、情報処理装置100は、ステップS1904の処理に移行する。
【0310】
ステップS1904では、情報処理装置100は、GPU0-1学習結果レジスタの内容を読み出す(ステップS1904)。次に、情報処理装置100は、GPU0-1学習結果有効フラグ=0に設定する(ステップS1905)。そして、情報処理装置100は、ステップS1906の処理に移行する。
【0311】
ステップS1906では、情報処理装置100は、Allreduce演算結果を生成する(ステップS1906)。次に、情報処理装置100は、GPU2-3学習結果有効フラグ=1に設定する(ステップS1907)。そして、情報処理装置100は、GPU2-3学習結果レジスタに、Allreduce演算結果を書き込む(ステップS1908)。
【0312】
次に、情報処理装置100は、jをインクリメントする(ステップS1909)。そして、情報処理装置100は、ステップS1901の処理に戻る。
【0313】
(動作例2における終了制御処理手順)
次に、
図20を用いて、動作例2において情報処理装置100が実行する、終了制御処理手順の一例について説明する。終了制御処理は、例えば、
図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
【0314】
図20は、動作例2における終了制御処理手順の一例を示すフローチャートである。
図20において、情報処理装置100は、第1データ制御処理を終了する(ステップS2001)。次に、情報処理装置100は、第2データ制御処理を強制終了する(ステップS2002)。そして、情報処理装置100は、終了制御処理を終了する。
【0315】
(情報処理装置100の動作例3)
次に、
図21~
図24を用いて、情報処理装置100の動作例3について説明する。上述した動作例2は、情報処理装置100が、処理速度の指標値が閾値t
TH未満であるGPU308を、単一のグループに分類する場合に関する動作例である。これに対し、動作例3は、情報処理装置100が、処理速度の指標値が閾値t
TH未満であるGPU308を、2以上のグループに分類する場合に関する動作例である。
【0316】
図21~
図24は、情報処理装置100の動作例3を示す説明図である。
図21~
図24において、情報処理装置100は、4つのGPU308を含むとする。4つのGPU308は、具体的には、GPU0と、GPU1と、GPU2と、GPU3とであるとする。GPU2の処理速度と、GPU3の処理速度とは、GPU0の処理速度と、GPU1の処理速度とに比べて遅いとする。
【0317】
情報処理装置100は、4つのGPU308を用いて、深層学習に関する所定の計算処理を並列処理することが望まれるとする。所定の計算処理は、例えば、学習処理を繰り返し実施することにより、モデルのパラメータを決定することである。モデルは、例えば、DNNである。学習処理は、例えば、モデルのパラメータの補正値を算出することである。
【0318】
ここで、情報処理装置100は、CPU301によって、それぞれのGPU308が、N回のテスト学習処理を実施するよう、4つのGPU308を制御する。それぞれのGPU308は、情報処理装置100の制御に従って、N回のテスト学習処理を実施する。それぞれのGPU308は、N回のテスト学習処理を実施した後、テスト学習処理を実施する際にかかった所要時間の統計値を、学習処理時間として算出し、情報処理装置100に送信する。
【0319】
情報処理装置100は、それぞれのGPU308が算出した学習処理時間を、それぞれのGPU308から受信する。情報処理装置100は、具体的には、GPU0の処理時間tGPU0と、GPU1の処理時間tGPU1と、GPU2の処理時間tGPU2と、GPU3の処理時間tGPU3とを受信したとする。ここで、tGPU3>tGPU2>tGPU1>tGPU0である。これにより、情報処理装置100は、4つのGPU308を、複数のグループに分類する指針を得ることができる。
【0320】
情報処理装置100は、4つのGPU308を、複数のグループに分類するために用いられる閾値tTHを有する。閾値tTHは、例えば、予め利用者によって設定される。具体的には、tTH=1.2である。情報処理装置100は、最小の処理時間tGPU0に対するそれぞれのGPU308の処理時間の比率を、当該GPU308の処理速度を表す指標値として算出する。ここで、tGPU3/tGPU0,tGPU2/tGPU0>tTH>tGPU1/tGPU0,tGPU0/tGPU0であるとする。
【0321】
情報処理装置100は、いずれのGPU308の処理速度の指標値も、閾値tTH未満である場合、処理速度が比較的遅いGPU308が存在しても、所定の計算処理を効率よく並列処理可能であると判断する。このため、情報処理装置100は、4つのGPU308を単一のグループに分類し、単一のグループにおいて所定の計算処理を並列処理することにする。
【0322】
一方で、情報処理装置100は、少なくともいずれかのGPU308の処理速度の指標値が、閾値tTH以上である場合、4つのGPU308を、複数のグループに分類する。ここでは、情報処理装置100は、GPU2の処理速度の指標値と、GPU3の処理速度の指標値とが、閾値tTH以上であるため、4つのGPU308を、複数のグループに分類することになる。
【0323】
情報処理装置100は、具体的には、処理速度の指標値が閾値t
TH未満であるGPU0と、GPU1とを、グループaに分類する。情報処理装置100は、具体的には、処理速度の指標値が閾値t
TH以上であるGPU2を、グループbに分類し、処理速度の指標値が閾値t
TH以上であるGPU3を、グループcに分類する。次に、
図21の説明に移行する。
【0324】
図21の例では、情報処理装置100が、FPGA307を含むとする。情報処理装置100は、FPGA307を含む場合、処理速度の指標値が閾値t
TH未満であるGPU308を分類したグループaのうち、処理時間が最大であるGPU1を介して、グループaを制御する「データ制御1」のプロセスを用意する。
【0325】
また、情報処理装置100は、FPGA307を含む場合、処理速度の指標値が閾値tTH以上であるGPU308を分類したグループbのうち、処理時間が最大であるGPU2を介して、グループbを制御する「データ制御2」のプロセスを用意する。
【0326】
また、情報処理装置100は、FPGA307を含む場合、処理速度の指標値が閾値tTH以上であるGPU308を分類したグループcのうち、処理時間が最大であるGPU3を介して、グループcを制御する「データ制御3」のプロセスを用意する。
【0327】
また、情報処理装置100は、FPGA307を含む場合、処理速度の指標値が閾値tTH未満であるGPU308を分類したグループaのうち、処理時間が最大であるGPU1を介して、所定の計算処理の終了条件を制御する「終了制御」のプロセスを用意する。
【0328】
情報処理装置100は、FPGA307を含む場合、「データ制御1」のプロセスと、「データ制御2」のプロセスと、「データ制御3」のプロセスと、「終了制御」のプロセスとを、FPGA307に配備する。
【0329】
これにより、情報処理装置100は、各種プロセスによって、グループ単位で学習処理を繰り返し実施するよう、4つのGPU308を制御することができ、所定の計算処理を並列処理することができる。情報処理装置100が、所定の計算処理を実施する具体例については、例えば、
図23および
図24を用いて後述する。次に、
図22の説明に移行する。
【0330】
図22の例では、情報処理装置100が、FPGA307を含まないとする。情報処理装置100は、FPGA307を含まない場合、処理速度の指標値が閾値t
TH未満であるGPU308を分類したグループaのうち、処理時間が最大であるGPU1を介して、グループaを制御する「データ制御1」のプロセスを用意する。
【0331】
情報処理装置100は、FPGA307を含まない場合、処理速度の指標値が閾値tTH以上であるGPU308を分類したグループbのうち、処理時間が最大であるGPU2を介して、グループbを制御する「データ制御2」のプロセスを用意する。
【0332】
情報処理装置100は、FPGA307を含まない場合、処理速度の指標値が閾値tTH以上であるGPU308を分類したグループcのうち、処理時間が最大であるGPU3を介して、グループcを制御する「データ制御3」のプロセスを用意する。
【0333】
情報処理装置100は、FPGA307を含まない場合、処理速度の指標値が閾値tTH未満であるGPU308を分類したグループaのうち、処理時間が最大であるGPU1を介して、所定の計算処理の終了条件を制御する「終了制御」のプロセスを用意する。
【0334】
情報処理装置100は、FPGA307を含まない場合、「データ制御1」のプロセスを、処理速度の指標値が閾値tTH未満であるGPU308を分類したグループaのうち、処理時間が最大であるGPU1に配備する。
【0335】
情報処理装置100は、FPGA307を含まない場合、「データ制御2」のプロセスを、処理速度の指標値が閾値tTH以上であるGPU308を分類したグループbのうち、処理時間が最大であるGPU2に配備する。
【0336】
情報処理装置100は、FPGA307を含まない場合、「データ制御3」のプロセスを、処理速度の指標値が閾値tTH以上であるGPU308を分類したグループcのうち、処理時間が最大であるGPU3に配備する。
【0337】
情報処理装置100は、FPGA307を含まない場合、「終了制御」のプロセスを、処理速度の指標値が閾値tTH未満であるGPU308を分類したグループaのうち、処理時間が最大であるGPU1に配備する。
【0338】
これにより、情報処理装置100は、各種プロセスによって、グループ単位で学習処理を繰り返し実施するよう、4つのGPU308を制御することができ、所定の計算処理を並列処理することができる。情報処理装置100が、所定の計算処理を実施する具体例については、例えば、
図23および
図24を用いて後述する。
【0339】
次に、
図23および
図24の説明に移行し、情報処理装置100が、FPGA307を含まない場合を一例として、情報処理装置100が、各種プロセスによって、所定の計算処理を実施する具体例について説明する。
【0340】
図23および
図24において、情報処理装置100は、4つのGPU308を処理速度に応じて分類したグループ単位で、当該グループに属する1以上のGPU308を同期することにより、深層学習に関する所定の計算処理を並列処理する。
【0341】
情報処理装置100は、例えば、グループaに属するそれぞれのGPU308が1回ずつ学習処理を実施した後に、グループaに属するそれぞれのGPU308において集約処理を実施するというステップを繰り返し実施するよう、グループaを制御する。集約処理は、それぞれのGPU308が学習処理を実施して得た補正値Δwを統計処理することにより、集約補正値Δwaを算出し、グループaで共有することである。
【0342】
情報処理装置100は、グループcにおける最新の集約補正値Δwcがあれば、最新の集約補正値Δwcを、集約処理に反映する。情報処理装置100は、例えば、最新の集約補正値Δwcと、グループaに属するそれぞれのGPU308が学習処理を実施して得た補正値Δwとを統計処理することにより、集約補正値Δwaを算出する。
【0343】
情報処理装置100は、例えば、グループbに属するそれぞれのGPU308が1回ずつ学習処理を実施した後に、グループbに属するそれぞれのGPU308において集約処理を実施するというステップを繰り返し実施するよう、グループbを制御する。集約処理は、それぞれのGPU308が学習処理を実施して得た補正値Δwを統計処理することにより、集約補正値Δwbを算出し、グループbで共有することである。
【0344】
情報処理装置100は、グループaにおける最新の集約補正値Δwaがあれば、最新の集約補正値Δwaを、集約処理に反映する。情報処理装置100は、例えば、最新の集約補正値Δwaと、グループbに属するそれぞれのGPU308が学習処理を実施して得た補正値Δwとを統計処理することにより、集約補正値Δwbを算出する。
【0345】
情報処理装置100は、例えば、グループcに属するそれぞれのGPU308が1回ずつ学習処理を実施した後に、グループcに属するそれぞれのGPU308において集約処理を実施するというステップを繰り返し実施するよう、グループcを制御する。集約処理は、それぞれのGPU308が学習処理を実施して得た補正値Δwを統計処理することにより、集約補正値Δwcを算出し、グループbで共有することである。
【0346】
情報処理装置100は、グループbにおける最新の集約補正値Δwbがあれば、最新の集約補正値Δwbを、集約処理に反映する。情報処理装置100は、例えば、最新の集約補正値Δwbと、グループcに属するそれぞれのGPU308が学習処理を実施して得た補正値Δwとを統計処理することにより、集約補正値Δwcを算出する。
【0347】
図23および
図24に示すように、情報処理装置100は、具体的には、グループaにおける最新の集約補正値Δw
aを記憶するGPU0-1学習結果レジスタを有する。情報処理装置100は、具体的には、グループaにおける最新の集約補正値Δw
aを、グループbにおける集約処理に反映したか否かを管理するGPU0-1学習結果有効フラグを有する。
【0348】
情報処理装置100は、具体的には、グループbにおける最新の集約補正値Δwbを記憶するGPU2学習結果レジスタを有する。情報処理装置100は、具体的には、グループbにおける最新の集約補正値Δwbを、グループcにおける集約処理に反映したか否かを管理するGPU2学習結果有効フラグを有する。
【0349】
情報処理装置100は、具体的には、グループcにおける最新の集約補正値Δwcを記憶するGPU2学習結果レジスタを有する。情報処理装置100は、具体的には、グループcにおける最新の集約補正値Δwcを、グループaにおける集約処理に反映したか否かを管理するGPU2学習結果有効フラグを有する。
【0350】
情報処理装置100は、グループaにおいて集約処理を実施した回数を表す学習回数を有する。情報処理装置100は、所定の計算処理を終了するか否かを管理する終了フラグを有する。
【0351】
「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δwaが算出された場合、算出された最新の集約補正値Δwaを、GPU0-1学習結果レジスタに格納する。「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δwaが算出されたことに応じて、GPU0-1学習結果有効フラグを1に更新する。「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δwaが、グループbにおける集約処理に反映されたことに応じて、GPU0-1学習結果有効フラグを0に更新する。「データ制御1」のプロセスは、グループaにおいて、ステップを開始する都度、学習回数をインクリメントする。
【0352】
これにより、「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δwaを管理することができる。「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δwaを、グループbにおける集約処理に反映するか否かを適切に判定可能にすることができる。
【0353】
「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δwbが算出された場合、算出された最新の集約補正値Δwbを、GPU2学習結果レジスタに格納する。「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δwbが算出されたことに応じて、GPU2学習結果有効フラグを1に更新する。「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δwbが、グループcにおける集約処理に反映されたことに応じて、GPU2学習結果有効フラグを0に更新する。
【0354】
これにより、「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δwbを管理することができる。「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δwbを、グループcにおける集約処理に反映するか否かを適切に判定可能にすることができる。
【0355】
「データ制御3」のプロセスは、グループcにおける最新の集約補正値Δwcが算出された場合、算出された最新の集約補正値Δwcを、GPU3学習結果レジスタに格納する。「データ制御3」のプロセスは、グループcにおける最新の集約補正値Δwcが算出されたことに応じて、GPU3学習結果有効フラグを1に更新する。「データ制御3」のプロセスは、グループcにおける最新の集約補正値Δwcが、グループaにおける集約処理に反映されたことに応じて、GPU3学習結果有効フラグを0に更新する。
【0356】
これにより、「データ制御3」のプロセスは、グループcにおける最新の集約補正値Δwcを管理することができる。「データ制御3」のプロセスは、グループcにおける最新の集約補正値Δwcを、グループaにおける集約処理に反映するか否かを適切に判定可能にすることができる。
【0357】
「終了制御」のプロセスは、学習回数が指定回数P以上になった場合、終了フラグを1に更新し、所定の計算処理を終了するよう、グループaと、グループbと、グループcとを制御する。
【0358】
図23および
図24に示すタイミングチャートは、GPU0に関するチャート2300と、GPU1に関するチャート2301と、GPU2に関するチャート2302と、GPU3に関するチャート2303とを含む。
【0359】
図23および
図24に示すチャート2300は、GPU0の処理内容の時間変化を示す。Forward+Backwardは、学習処理である。Waitは、待機状態である。Allreduceは、集約処理である。具体的には、
図23は、チャート2300の前半を示す。
図24は、チャート2300の後半を示す。
【0360】
図23および
図24に示すチャート2301は、GPU1の処理内容の時間変化を示す。具体的には、
図23は、チャート2301の前半を示す。
図24は、チャート2301の後半を示す。
図23および
図24に示すチャート2302は、GPU2の処理内容の時間変化を示す。具体的には、
図23は、チャート2302の前半を示す。
図24は、チャート2302の後半を示す。
図23および
図24に示すチャート2303は、GPU3の処理内容の時間変化を示す。具体的には、
図23は、チャート2303の前半を示す。
図24は、チャート2303の後半を示す。
【0361】
図23および
図24に示すタイミングチャートは、「データ制御1」のプロセスに関し、GPU0-1Allreduce期間のチャート2311を含む。
図23および
図24に示すタイミングチャートは、「データ制御1」のプロセスに関し、GPU0-1学習結果有効フラグのチャート2312と、GPU0-1学習結果レジスタのチャート2313とを含む。
【0362】
図23および
図24に示すチャート2311は、グループaにおける集約処理の実施期間を示す。チャート2311は、具体的には、グループaにおける集約処理の開始に応じて立ち上がり、グループaにおける集約処理の終了に応じて立ち下がる。
図23および
図24に示すチャート2312は、GPU0-1学習結果有効フラグが0であるか1であるかを示す。
図23および
図24に示すチャート2312は、GPU0-1学習結果レジスタの記憶内容の時間変化を示す。Δw
iaは、i回目に算出した集約補正値Δw
aを示す。
【0363】
図23および
図24に示すタイミングチャートは、「データ制御2」のプロセスに関し、GPU2Allreduce期間のチャート2314と、GPU2学習結果有効フラグのチャート2315と、GPU2学習結果レジスタのチャート2316とを含む。
【0364】
図23および
図24に示すチャート2314は、グループbにおける集約処理の実施期間を示す。チャート2314は、具体的には、グループbにおける集約処理の開始に応じて立ち上がり、グループbにおける集約処理の終了に応じて立ち下がる。
図23および
図24に示すチャート2315は、GPU2学習結果有効フラグが0であるか1であるかを示す。
図23および
図24に示すチャート2316は、GPU2学習結果レジスタの記憶内容の時間変化を示す。Δw
ibは、i回目に算出した集約補正値Δw
bを示す。
【0365】
図23および
図24に示すタイミングチャートは、「データ制御3」のプロセスに関し、GPU3Allreduce期間のチャート2317と、GPU3学習結果有効フラグのチャート2318と、GPU3学習結果レジスタのチャート2319とを含む。
【0366】
図23および
図24に示すチャート2317は、グループcにおける集約処理の実施期間を示す。チャート2317は、具体的には、グループcにおける集約処理の開始に応じて立ち上がり、グループcにおける集約処理の終了に応じて立ち下がる。
図23および
図24に示すチャート2318は、GPU3学習結果有効フラグが0であるか1であるかを示す。
図23および
図24に示すチャート2319は、GPU3学習結果レジスタの記憶内容の時間変化を示す。Δw
icは、i回目に算出した集約補正値Δw
cを示す。
【0367】
図23および
図24に示すタイミングチャートは、「終了制御」のプロセスに関し、学習回数のチャート2320と、終了フラグのチャート2321とを含む。
図23および
図24に示すチャート2320は、学習回数の時間変化を示す。
図23および
図24に示すチャート2321は、終了フラグが0であるか1であるかを示す。ここで、
図23の説明に移行する。
【0368】
グループaに属するそれぞれのGPU308は、1回目のステップを開始する。グループaにおいて、1回目のステップを開始すると、グループaに属するそれぞれのGPU308は、学習処理を1回実施し、補正値Δwを算出する。グループaにおいて、1回目のステップを開始する際、GPU1において、「データ制御1」のプロセスは、学習回数を1に更新する。
【0369】
(23-1)グループaにおいて、1回目のステップの集約処理を実施する際、GPU1において、「データ制御1」のプロセスは、グループaに属する他のGPU308から、当該GPU308が学習処理を実施して得られた補正値Δwを収集する。
【0370】
GPU1において、「データ制御1」のプロセスは、GPU1が学習処理を実施して得られた補正値Δwと、他のGPU308が学習処理を実施して得られた補正値Δwとに基づいて、最新の集約補正値Δw1aを算出する。GPU1において、「データ制御1」のプロセスは、最新の集約補正値Δw1aを、他のGPU308に共有する。
【0371】
図23の各種チャートに示すように、「データ制御1」のプロセスは、最新の集約補正値Δw
1aを算出したことに応じて、最新の集約補正値Δw
1aを、GPU0-1学習結果レジスタに格納する。「データ制御1」のプロセスは、最新の集約補正値Δw
1aを、GPU0-1学習結果レジスタに格納すると、GPU0-1学習結果有効フラグを1に更新する。
【0372】
グループbに属するそれぞれのGPU308は、1回目のステップを開始する。グループbにおいて、1回目のステップを開始すると、グループbに属するそれぞれのGPU308は、学習処理を1回実施し、補正値Δwを算出する。
【0373】
(23-2)グループbにおいて、1回目のステップの集約処理を実施する際、GPU2において、「データ制御2」のプロセスは、GPU0-1学習結果有効フラグが1であるか否かを判定する。GPU2において、「データ制御2」のプロセスは、GPU0-1学習結果有効フラグが1であれば、最新の集約補正値Δw1aを、GPU0-1学習結果レジスタから読み出す。
【0374】
GPU2において、「データ制御2」のプロセスは、GPU2が学習処理を実施して得られた補正値Δwと、読み出した最新の集約補正値Δw1aとに基づいて、最新の集約補正値Δw1bを算出する。これにより、GPU2において、「データ制御2」のプロセスは、グループaにおける最新の集約補正値Δw1aを、グループbにおける1回目のステップの集約処理に反映することができる。
【0375】
(23-3)
図23の各種チャートに示すように、「データ制御2」のプロセスは、最新の集約補正値Δw
1bを算出したことに応じて、最新の集約補正値Δw
1bを、GPU2学習結果レジスタに格納する。「データ制御2」のプロセスは、最新の集約補正値Δw
1bを、GPU2学習結果レジスタに格納すると、GPU2学習結果有効フラグを1に更新する。
【0376】
「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δw1aが、グループbにおける1回目のステップの集約処理に反映されたことに応じて、GPU0-1学習結果有効フラグを0に更新する。
【0377】
これにより、「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δw1aが、グループbにおける集約処理に繰り返し反映されてしまうことを防止することができる。このため、「データ制御1」のプロセスは、所定の計算処理の精度低下を抑制することができる。
【0378】
グループcに属するそれぞれのGPU308は、1回目のステップを開始する。グループcにおいて、1回目のステップを開始すると、グループcに属するそれぞれのGPU308は、学習処理を1回実施し、補正値Δwを算出する。
【0379】
(23-4)グループcにおいて、1回目のステップの集約処理を実施する際、GPU3において、「データ制御3」のプロセスは、GPU2学習結果有効フラグが1であるか否かを判定する。GPU3において、「データ制御3」のプロセスは、GPU2学習結果有効フラグが1であれば、最新の集約補正値Δw1bを、GPU2学習結果レジスタから読み出す。
【0380】
GPU3において、「データ制御3」のプロセスは、GPU3が学習処理を実施して得られた補正値Δwと、読み出した最新の集約補正値Δw1bとに基づいて、最新の集約補正値Δw1cを算出する。これにより、GPU3において、「データ制御3」のプロセスは、グループbにおける最新の集約補正値Δw1bを、グループcにおける1回目のステップの集約処理に反映することができる。
【0381】
(23-5)
図23の各種チャートに示すように、「データ制御3」のプロセスは、最新の集約補正値Δw
1cを算出したことに応じて、最新の集約補正値Δw
1cを、GPU3学習結果レジスタに格納する。「データ制御3」のプロセスは、最新の集約補正値Δw
1cを、GPU3学習結果レジスタに格納すると、GPU3学習結果有効フラグを1に更新する。
【0382】
「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δw1bが、グループcにおける1回目のステップの集約処理に反映されたことに応じて、GPU2学習結果有効フラグを0に更新する。
【0383】
これにより、「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δw1bが、グループcにおける集約処理に繰り返し反映されてしまうことを防止することができる。このため、「データ制御2」のプロセスは、所定の計算処理の精度低下を抑制することができる。
【0384】
グループaに属するそれぞれのGPU308は、1回目のステップを終了すると、2回目のステップを開始する。グループaにおいて、2回目のステップを開始すると、グループaに属するそれぞれのGPU308は、学習処理を1回実施し、補正値Δwを算出する。グループaにおいて、2回目のステップを開始する際、GPU1において、「データ制御1」のプロセスは、学習回数を2に更新する。
【0385】
(23-6)グループaにおいて、2回目のステップの集約処理を実施する際、GPU1において、「データ制御1」のプロセスは、グループaに属する他のGPU308から、当該GPU308が学習処理を実施して得られた補正値Δwを収集する。
【0386】
GPU1において、「データ制御1」のプロセスは、GPU3学習結果有効フラグが1であるか否かを判定する。GPU1において、「データ制御1」のプロセスは、GPU3学習結果有効フラグが1であれば、最新の集約補正値Δw1cを、GPU3学習結果レジスタから読み出す。
【0387】
GPU1において、「データ制御1」のプロセスは、GPU1が学習処理を実施して得られた補正値Δwと、他のGPU308が学習処理を実施して得られた補正値Δwと、読み出した最新の集約補正値Δw1cとに基づいて、最新の集約補正値Δw2aを算出する。GPU1において、「データ制御1」のプロセスは、最新の集約補正値Δw2aを、他のGPU308に共有する。
【0388】
これにより、GPU1において、「データ制御1」のプロセスは、グループcにおける最新の集約補正値Δw1cを、グループaにおける2回目のステップの集約処理に反映することができる。
【0389】
(23-7)
図23の各種チャートに示すように、「データ制御1」のプロセスは、最新の集約補正値Δw
2aを算出したことに応じて、最新の集約補正値Δw
2aを、GPU0-1学習結果レジスタに格納する。「データ制御1」のプロセスは、最新の集約補正値Δw
2aを、GPU0-1学習結果レジスタに格納すると、GPU0-1学習結果有効フラグを1に更新する。
【0390】
「データ制御3」のプロセスは、グループcにおける最新の集約補正値Δw1cが、グループaにおける2回目のステップの集約処理に反映されたことに応じて、GPU3学習結果有効フラグを0に更新する。
【0391】
これにより、「データ制御3」のプロセスは、グループcにおける最新の集約補正値Δw
1cが、グループaにおける集約処理に繰り返し反映されてしまうことを防止することができる。このため、「データ制御3」のプロセスは、所定の計算処理の精度低下を抑制することができる。ここで、
図24の説明に移行する。
【0392】
グループbに属するそれぞれのGPU308は、P-X-1回目のステップを終了すると、P-X回目のステップを開始する。グループbにおいて、P-X回目のステップを開始すると、グループbに属するそれぞれのGPU308は、学習処理を1回実施し、補正値Δwを算出する。
【0393】
(24-1)グループbにおいて、P-X回目のステップの集約処理を実施する際、GPU2において、「データ制御2」のプロセスは、GPU0-1学習結果有効フラグが1であるか否かを判定する。GPU2において、「データ制御2」のプロセスは、GPU0-1学習結果有効フラグが1であれば、最新の集約補正値Δw(P-1)aを、GPU0-1学習結果レジスタから読み出す。
【0394】
GPU2において、「データ制御2」のプロセスは、GPU2が学習処理を実施して得られた補正値Δwと、読み出した最新の集約補正値Δw(P-1)aとに基づいて、最新の集約補正値Δw(P-X)bを算出する。
【0395】
これにより、GPU2において、「データ制御2」のプロセスは、グループaにおける最新の集約補正値Δw(P-1)aを、グループbにおけるP-X回目のステップの集約処理に反映することができる。
【0396】
(24-2)
図23の各種チャートに示すように、「データ制御2」のプロセスは、最新の集約補正値Δw
(P-X)bを算出したことに応じて、最新の集約補正値Δw
(P-X)bを、GPU2学習結果レジスタに格納する。「データ制御2」のプロセスは、最新の集約補正値Δw
(P-X)bを、GPU2学習結果レジスタに格納すると、GPU2学習結果有効フラグを1に更新する。
【0397】
「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δw(P-1)aが、グループbにおけるP-X回目のステップの集約処理に反映されたことに応じて、GPU0-1学習結果有効フラグを0に更新する。
【0398】
これにより、「データ制御1」のプロセスは、グループaにおける最新の集約補正値Δw(P-1)aが、グループbにおける集約処理に繰り返し反映されてしまうことを防止することができる。このため、「データ制御1」のプロセスは、所定の計算処理の精度低下を抑制することができる。
【0399】
グループcに属するそれぞれのGPU308は、P-Y-1回目のステップを終了すると、P-Y回目のステップを開始する。グループcにおいて、P-Y回目のステップを開始すると、グループcに属するそれぞれのGPU308は、学習処理を1回実施し、補正値Δwを算出する。
【0400】
(24-1)グループcにおいて、P-Y回目のステップの集約処理を実施する際、GPU3において、「データ制御3」のプロセスは、GPU2学習結果有効フラグが1であるか否かを判定する。GPU3において、「データ制御3」のプロセスは、GPU2学習結果有効フラグが1であれば、最新の集約補正値Δw(P-X)bを、GPU2学習結果レジスタから読み出す。
【0401】
GPU3において、「データ制御3」のプロセスは、GPU3が学習処理を実施して得られた補正値Δwと、読み出した最新の集約補正値Δw(P-X)bとに基づいて、最新の集約補正値Δw(P-Y)cを算出する。
【0402】
これにより、GPU3において、「データ制御3」のプロセスは、グループbにおける最新の集約補正値Δw(P-X)bを、グループcにおけるP-Y回目のステップの集約処理に反映することができる。
【0403】
(24-2)
図23の各種チャートに示すように、「データ制御3」のプロセスは、最新の集約補正値Δw
(P-Y)cを算出したことに応じて、最新の集約補正値Δw
(P-Y)cを、GPU3学習結果レジスタに格納する。「データ制御3」のプロセスは、最新の集約補正値Δw
(P-Y)cを、GPU3学習結果レジスタに格納すると、GPU3学習結果有効フラグを1に更新する。
【0404】
「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δw(P-X)bが、グループcにおけるP-Y回目のステップの集約処理に反映されたことに応じて、GPU2学習結果有効フラグを0に更新する。
【0405】
これにより、「データ制御2」のプロセスは、グループbにおける最新の集約補正値Δw(P-X)bが、グループcにおける集約処理に繰り返し反映されてしまうことを防止することができる。このため、「データ制御2」のプロセスは、所定の計算処理の精度低下を抑制することができる。
【0406】
グループaに属するそれぞれのGPU308は、P-1回目のステップを終了すると、P回目のステップを開始する。グループaにおいて、P回目のステップを開始すると、グループaに属するそれぞれのGPU308は、学習処理を1回実施し、補正値Δwを算出する。グループaにおいて、P回目のステップを開始する際、GPU2において、「データ制御1」のプロセスは、学習回数をPに更新する。
【0407】
(24-3)グループaにおいて、P回目のステップの集約処理を実施する際、GPU1において、「データ制御1」のプロセスは、グループaに属する他のGPU308から、当該GPU308が学習処理を実施して得られた補正値Δwを収集する。
【0408】
GPU1において、「データ制御1」のプロセスは、GPU3学習結果有効フラグが1であるか否かを判定する。GPU1において、「データ制御1」のプロセスは、GPU3学習結果有効フラグが1であれば、最新の集約補正値Δw(P-Y)cを、GPU3学習結果レジスタから読み出す。
【0409】
GPU1において、「データ制御1」のプロセスは、GPU1が学習処理を実施して得られた補正値Δwと、収集した補正値Δwと、読み出した最新の集約補正値Δw(P-Y)cとに基づいて、最新の集約補正値ΔwPaを算出する。GPU1において、「データ制御1」のプロセスは、最新の集約補正値ΔwPaを、他のGPU308に共有する。
【0410】
これにより、GPU1において、「データ制御1」のプロセスは、グループcにおける最新の集約補正値Δw(P-Y)cを、グループaにおけるP回目のステップの集約処理に反映することができる。
【0411】
(24-4)
図23の各種チャートに示すように、「データ制御1」のプロセスは、最新の集約補正値Δw
Paを算出したことに応じて、最新の集約補正値Δw
Paを、GPU0-1学習結果レジスタに格納する。「データ制御1」のプロセスは、最新の集約補正値Δw
Paを、GPU0-1学習結果レジスタに格納すると、GPU0-1学習結果有効フラグを1に更新する。
【0412】
「データ制御3」のプロセスは、グループcにおける最新の集約補正値Δw(P-Y)cが、グループaにおけるP回目のステップの集約処理に反映されたことに応じて、GPU3学習結果有効フラグを0に更新する。
【0413】
これにより、「データ制御3」のプロセスは、グループcにおける最新の集約補正値Δw(P-Y)cが、グループaにおける集約処理に繰り返し反映されてしまうことを防止することができる。このため、「データ制御3」のプロセスは、所定の計算処理の精度低下を抑制することができる。
【0414】
(24-5)GPU1において、「終了制御」のプロセスは、学習回数≧Pであることを検出すると、グループaにおけるステップの繰り返しを停止するよう、グループaを制御する。
【0415】
同様に、GPU1において、「終了制御」のプロセスは、学習回数≧Pであることを検出すると、グループbにおけるステップの繰り返しを停止するよう、グループbを制御する。GPU1において、「終了制御」のプロセスは、グループbにおいて、ステップが実施中であれば、ステップを強制終了するよう、グループbを制御してもよい。
【0416】
同様に、GPU1において、「終了制御」のプロセスは、学習回数≧Pであることを検出すると、グループcにおけるステップの繰り返しを停止するよう、グループcを制御する。GPU1において、「終了制御」のプロセスは、グループcにおいて、ステップが実施中であれば、ステップを強制終了するよう、グループcを制御してもよい。
【0417】
これにより、「終了制御」のプロセスは、所定の計算処理を適切に終了することができる。「終了制御」のプロセスは、少なくとも、グループaにおいて学習処理がP回実施されることを保証することができ、所定の計算処理の精度を確保することができる。
【0418】
情報処理装置100は、少なくとも、グループaにおいて学習処理がP回実施されることを保証することができるため、失われる情報の量を抑制することができ、所定の計算処理の精度低下を抑制することができる。
【0419】
情報処理装置100は、所定の計算処理の精度低下を抑制しつつ、所定の計算処理が、処理速度が比較的遅いGPU2に律速されることを回避することができ、所定の計算処理にかかる処理負担および処理時間の増大化を抑制することができる。
【0420】
(動作例3における第1データ制御処理手順)
次に、
図25を用いて、動作例3において情報処理装置100が実行する、第1データ制御処理手順の一例について説明する。第1データ制御処理は、例えば、
図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
【0421】
図25は、動作例3における第1データ制御処理手順の一例を示すフローチャートである。
図25において、情報処理装置100は、i回目の学習処理を実行する(ステップS2501)。次に、情報処理装置100は、Allreduce演算処理を開始する(ステップS2502)。
【0422】
そして、情報処理装置100は、GPU2学習結果有効フラグ=1であるか否かを判定する(ステップS2503)。ここで、GPU2学習結果有効フラグ=1ではない場合(ステップS2503:No)、情報処理装置100は、ステップS2506の処理に移行する。一方で、GPU2学習結果有効フラグ=1である場合(ステップS2503:Yes)、情報処理装置100は、ステップS2504の処理に移行する。
【0423】
ステップS2504では、情報処理装置100は、GPU2学習結果レジスタの内容を読み出す(ステップS2504)。次に、情報処理装置100は、GPU2学習結果有効フラグ=0に設定する(ステップS2505)。そして、情報処理装置100は、Allreduce演算結果を生成する(ステップS2506)。
【0424】
次に、情報処理装置100は、GPU0-1学習結果有効フラグ=1に設定する(ステップS2507)。そして、情報処理装置100は、GPU0-1学習結果レジスタに、Allreduce演算結果を書き込む(ステップS2508)。
【0425】
次に、情報処理装置100は、学習回数i=Pであるか否かを判定する(ステップS2509)。ここで、学習回数i=Pではない場合(ステップS2509:No)、情報処理装置100は、ステップS2510の処理に移行する。一方で、学習回数i=Pである場合(ステップS2509:Yes)、情報処理装置100は、ステップS2511の処理に移行する。
【0426】
ステップS2510では、情報処理装置100は、iをインクリメントする(ステップS2510)。そして、情報処理装置100は、ステップS2501の処理に戻る。
【0427】
ステップS2511では、情報処理装置100は、
図28に後述する終了制御処理を実行する(ステップS2511)。そして、情報処理装置100は、第1データ制御処理を終了する。
【0428】
(動作例3における第2データ制御処理手順)
次に、
図26を用いて、動作例3において情報処理装置100が実行する、第2データ制御処理手順の一例について説明する。第2データ制御処理は、例えば、
図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
【0429】
図26は、動作例3における第2データ制御処理手順の一例を示すフローチャートである。
図26において、情報処理装置100は、j回目の学習処理を実行する(ステップS2601)。次に、情報処理装置100は、Allreduce演算処理を開始する(ステップS2602)。
【0430】
そして、情報処理装置100は、GPU3学習結果有効フラグ=1であるか否かを判定する(ステップS2603)。ここで、GPU3学習結果有効フラグ=1ではない場合(ステップS2603:No)、情報処理装置100は、ステップS2606の処理に移行する。一方で、GPU3学習結果有効フラグ=1である場合(ステップS2603:Yes)、情報処理装置100は、ステップS2604の処理に移行する。
【0431】
ステップS2604では、情報処理装置100は、GPU3学習結果レジスタの内容を読み出す(ステップS2604)。次に、情報処理装置100は、GPU3学習結果有効フラグ=0に設定する(ステップS2605)。そして、情報処理装置100は、Allreduce演算結果を生成する(ステップS2606)。
【0432】
次に、情報処理装置100は、GPU2学習結果有効フラグ=1に設定する(ステップS2607)。そして、情報処理装置100は、GPU2学習結果レジスタに、Allreduce演算結果を書き込む(ステップS2608)。
【0433】
次に、情報処理装置100は、jをインクリメントする(ステップS2609)。そして、情報処理装置100は、ステップS2601の処理に戻る。
【0434】
(動作例3における第3データ制御処理手順)
次に、
図27を用いて、動作例3において情報処理装置100が実行する、第3データ制御処理手順の一例について説明する。第3データ制御処理は、例えば、
図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
【0435】
図27は、動作例3における第3データ制御処理手順の一例を示すフローチャートである。
図27において、情報処理装置100は、k回目の学習処理を実行する(ステップS2701)。次に、情報処理装置100は、Allreduce演算処理を開始する(ステップS2702)。
【0436】
そして、情報処理装置100は、GPU0-1学習結果有効フラグ=1であるか否かを判定する(ステップS2703)。ここで、GPU0-1学習結果有効フラグ=1ではない場合(ステップS2703:No)、情報処理装置100は、ステップS2706の処理に移行する。一方で、GPU0-1学習結果有効フラグ=1である場合(ステップS2703:Yes)、情報処理装置100は、ステップS2704の処理に移行する。
【0437】
ステップS2704では、情報処理装置100は、GPU0-1学習結果レジスタの内容を読み出す(ステップS2704)。次に、情報処理装置100は、GPU0-1学習結果有効フラグ=0に設定する(ステップS2705)。そして、情報処理装置100は、Allreduce演算結果を生成する(ステップS2706)。
【0438】
次に、情報処理装置100は、GPU3学習結果有効フラグ=1に設定する(ステップS2707)。そして、情報処理装置100は、GPU3学習結果レジスタに、Allreduce演算結果を書き込む(ステップS2708)。
【0439】
次に、情報処理装置100は、kをインクリメントする(ステップS2709)。そして、情報処理装置100は、ステップS2701の処理に戻る。
【0440】
(動作例3における終了制御処理手順)
次に、
図28を用いて、動作例3において情報処理装置100が実行する、終了制御処理手順の一例について説明する。終了制御処理は、例えば、
図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
【0441】
図28は、動作例3における終了制御処理手順の一例を示すフローチャートである。
図28において、情報処理装置100は、第1データ制御処理を終了する(ステップS2801)。次に、情報処理装置100は、第2データ制御処理を強制終了する(ステップS2802)。そして、情報処理装置100は、第3データ制御処理を強制終了する(ステップS2803)。その後、情報処理装置100は、終了制御処理を終了する。
【0442】
上述した動作例1、動作例2、および、動作例3では、情報処理装置100が、4つのGPU308を含む場合について説明したが、これに限らない。例えば、情報処理装置100が、3つ以下のGPU308を含む場合があってもよい。例えば、情報処理装置100が、5つ以上のGPU308を含む場合があってもよい。ここで、情報処理装置100が、N個のGPU308を含む場合について説明する。
【0443】
この場合、まず、情報処理装置100は、N個のGPU308のそれぞれのGPU308の処理速度の指標値を算出する。情報処理装置100は、N個のGPU308を、指標値が小さい順にソートする。情報処理装置100は、ソートしたN個のGPU308のうち、算出した指標値が、閾値tTH以上であるGPU308の数を特定する。
【0444】
情報処理装置100は、特定したGPU308の数が0であれば、N個のGPU308の処理速度のばらつきが比較的小さいと判断する。このため、情報処理装置100は、N個のGPU308を単一のグループとして、所定の計算処理を並列処理する。
【0445】
情報処理装置100は、特定したGPU308の数が、N×Nratio以下である場合、指標値が閾値tTH未満であるGPU308をグループaに分類し、指標値が閾値tTH以上であるGPU308をグループbに分類する。そして、情報処理装置100は、動作例1と同様に、所定の計算処理を並列処理する。
【0446】
情報処理装置100は、特定したGPU308の数が、N×Nratioを超える場合、N個のGPU308のうち、処理速度が比較的遅いGPU308が多すぎると判断する。このため、情報処理装置100は、精度低下を回避するために、N個のGPU308を単一のグループとして、所定の計算処理を並列処理する。
【0447】
(情報処理装置100の適用例)
次に、情報処理装置100の適用例について説明する。情報処理装置100は、例えば、DNNを学習する場合に適用することができる。情報処理装置100は、画像認識、音声認識、言語処理などに関するDNNを学習する場合に適用することができる。情報処理装置100は、画像認識、音声認識、言語処理などに関するDNNを、学習精度の低下を抑制しつつ、比較的高速に学習することができる。このため、情報処理装置100は、利用者が、画像認識、音声認識、言語処理などに関するDNNを利用し易くすることができる。情報処理装置100は、例えば、画像認識、音声認識、言語処理などに関するDNNを活用するサービスを実現し易くすることができる。
【0448】
以上説明したように、情報処理装置100によれば、複数の演算部のうち、処理速度が一定以上である演算部が分類された1以上のグループと、処理速度が一定未満である演算部が分類された1以上のグループとを含む複数のグループを特定することができる。情報処理装置100によれば、特定した複数のグループのそれぞれのグループにおいて、当該グループに属するそれぞれの演算部が、第1動作と、第2動作とを含むステップを繰り返し実施するよう、複数のグループを制御することができる。これにより、情報処理装置100は、計算処理にかかる処理負担および処理時間の低減化を図ることができる。
【0449】
情報処理装置100によれば、特定した複数のグループのうちいずれかのグループにおいて、ステップを繰り返し実施した回数が閾値以上であるか否かを判定することができる。情報処理装置100によれば、閾値以上である場合、それぞれのグループにおいて、以降、ステップを繰り返し実施しないよう、複数のグループを制御することができる。これにより、情報処理装置100は、計算処理にかかる処理負担および処理時間の低減化を図ることができる。
【0450】
情報処理装置100によれば、複数の演算部のそれぞれの演算部が、テスト学習処理を1回以上実施するよう、複数の演算部を制御することにより、複数の演算部のそれぞれの演算部の処理速度に関する指標値を取得することができる。情報処理装置100によれば、取得した指標値に基づいて、複数の演算部のうち、処理速度が一定以上である演算部が分類された1以上のグループと、処理速度が一定未満である演算部が分類された1以上のグループとを含む複数のグループを特定することができる。これにより、情報処理装置100は、複数の演算部を、処理速度に応じて複数のグループに適切に分類することができる。
【0451】
情報処理装置100によれば、他のグループが実施した単位処理の結果を集約して得られる最新の情報を参照して、いずれかのグループが実施した単位処理の結果を集約して得られる情報を生成する、第1プロセスを用意することができる。情報処理装置100によれば、それぞれのグループに属する演算部のうち、処理速度が最も遅い演算部に、第1プロセスを配備することができる。情報処理装置100によれば、いずれかのグループにおいて、ステップを繰り返し実施した回数が閾値以上であるか否かを判定する第2プロセスを用意することができる。情報処理装置100によれば、特定した複数のグループのいずれかのグループに属する演算部のうち、処理速度が最も遅い演算部に、第2プロセスを配備することができる。情報処理装置100によれば、配備した第1プロセス、および、第2プロセスを用いて、それぞれのグループにおいて、ステップを繰り返し実施するよう、複数のグループを制御することができる。これにより、情報処理装置100は、複数のグループを制御し易くすることができる。
【0452】
情報処理装置100によれば、いずれかのグループに属するいずれかの演算部により、他のグループが実施した単位処理の結果を集約して得られた最新の情報を取得することができる。情報処理装置100によれば、当該いずれかの演算部により、当該いずれかのグループに属する他の演算部が実施した単位処理の結果を取得することができる。情報処理装置100によれば、最新の情報と、当該いずれかの演算部が実施した単位処理の結果と、取得した結果とに基づいて、当該グループが実施した単位処理の結果を集約して得られる情報を生成することができる。これにより、情報処理装置100は、いずれかのグループが実施した単位処理の結果を集約して得られる情報を精度よく生成することができる。
【0453】
情報処理装置100によれば、いずれかのグループに属するいずれかの演算部により、当該いずれかのグループに属する他の演算部が実施した単位処理の結果を取得することができる。情報処理装置100によれば、当該いずれかの演算部が実施した単位処理の結果と、取得した結果とに基づいて、当該グループが実施した単位処理の結果を集約して得られる情報を生成することができる。これにより、情報処理装置100は、いずれかのグループが実施した単位処理の結果を集約して得られる情報を精度よく生成することができる。
【0454】
情報処理装置100によれば、複数の演算部のうち、処理速度が一定以上である演算部が分類された1つのグループと、処理速度が一定未満である演算部が分類された1つのグループとを含む複数のグループを特定することができる。これにより、情報処理装置100は、複数の演算部を2分して計算処理を並列処理することができる。
【0455】
情報処理装置100によれば、深層学習を実現する計算処理を並列処理することができる。これにより、情報処理装置100は、ランダムな入力データに基づいて実施可能である深層学習を実現する計算処理を並列処理することができる。情報処理装置100は、入力データのランダム性を保証することができ、深層学習を実現する計算処理を並列処理する際の精度低下を抑制しつつ、深層学習を実現する計算処理を並列処理する際にかかる処理負担および処理時間の低減化を図ることができる。
【0456】
なお、本実施の形態で説明した計算処理管理方法は、予め用意されたプログラムをPCやワークステーションなどのコンピュータで実行することにより実現することができる。本実施の形態で説明した計算処理管理プログラムは、コンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。記録媒体は、ハードディスク、フレキシブルディスク、CD(Compact Disc)-ROM、MO(Magneto Optical disc)、DVD(Digital Versatile Disc)などである。また、本実施の形態で説明した計算処理管理プログラムは、インターネットなどのネットワークを介して配布してもよい。
【0457】
上述した実施の形態に関し、さらに以下の付記を開示する。
【0458】
(付記1)単位処理を複数回実施する計算処理を並列処理する複数の演算部のうち、処理速度が一定以上である演算部が分類された1以上のグループと、処理速度が前記一定未満である演算部が分類された1以上のグループとを含む複数のグループを特定し、
特定した前記複数のグループのそれぞれのグループにおいて、当該グループに属するそれぞれの演算部が、前記単位処理を1回ずつ実施する第1動作と、当該グループに属するそれぞれの演算部が、他のグループが実施した前記単位処理の結果を集約して得られる最新の情報を参照して、当該グループが実施した前記単位処理の結果を集約して得られる情報を生成する、前記第1動作の後の第2動作とを含むステップを繰り返し実施するよう、前記複数のグループを制御する、
制御部を有することを特徴とする計算処理管理装置。
【0459】
(付記2)前記制御部は、
特定した前記複数のグループのうちいずれかのグループにおいて、前記ステップを繰り返し実施した回数が閾値以上である場合、前記それぞれのグループにおいて、以降、前記ステップを繰り返し実施しないよう、前記複数のグループを制御する、ことを特徴とする付記1に記載の計算処理管理装置。
【0460】
(付記3)前記制御部は、
前記複数の演算部のそれぞれの演算部が、テスト学習処理を1回以上実施するよう、前記複数の演算部を制御することにより、前記複数の演算部のそれぞれの演算部の処理速度に関する指標値を取得し、
取得した前記指標値に基づいて、前記複数の演算部のうち、処理速度が一定以上である演算部が分類された1以上のグループと、処理速度が一定未満である演算部が分類された1以上のグループとを含む複数のグループを特定する、ことを特徴とする付記1または2に記載の計算処理管理装置。
【0461】
(付記4)前記制御部は、
前記それぞれのグループに属する演算部のうち、処理速度が最も遅い演算部に、他のグループが実施した前記単位処理の結果を集約して得られる最新の情報を参照して、当該グループが実施した前記単位処理の結果を集約して得られる情報を生成する、第1プロセスを配備し、
特定した前記複数のグループのいずれかのグループに属する演算部のうち、処理速度が最も遅い演算部に、当該いずれかのグループにおいて、前記ステップを繰り返し実施した回数が閾値以上であるか否かを判定する第2プロセスを配備し、
配備した前記第1プロセス、および、前記第2プロセスを用いて、前記それぞれのグループにおいて、前記ステップを繰り返し実施するよう、前記複数のグループを制御する、ことを特徴とする付記2に記載の計算処理管理装置。
【0462】
(付記5)前記複数のグループのそれぞれのグループは、前記第1動作を他のグループと同期せずに実施するグループであって、
前記複数のグループのそれぞれのグループに属するいずれかの演算部は、
当該グループにおいて、前記ステップのうち前記第2動作を開始した際に、他のグループが実施した前記単位処理の結果を集約して得られた最新の情報が存在すれば、当該最新の情報と、当該グループに属する他の演算部が実施した前記単位処理の結果とを取得し、取得した当該最新の情報を参照して、当該いずれかの演算部が実施した前記単位処理の結果と、取得した当該グループに属する他の演算部が実施した前記単位処理の結果とに基づいて、当該グループが実施した前記単位処理の結果を集約して得られる情報を生成する、ことを特徴とする付記1または2に記載の計算処理管理装置。
【0463】
(付記6)前記複数のグループのそれぞれのグループに属するいずれかの演算部は、
当該グループにおいて、前記ステップのうち前記第2動作を開始した際に、他のグループが実施した前記単位処理の結果を集約して得られた最新の情報が存在しなければ、当該グループに属する他の演算部が実施した前記単位処理の結果を取得し、当該いずれかの演算部が実施した前記単位処理の結果と、取得した当該グループに属する他の演算部が実施した前記単位処理の結果とに基づいて、当該グループが実施した前記単位処理の結果を集約して得られる情報を生成する、ことを特徴とする付記5に記載の計算処理管理装置。
【0464】
(付記7)前記制御部は、
前記複数の演算部のうち、処理速度が一定以上である演算部が分類された1つのグループと、処理速度が前記一定未満である演算部が分類された1つのグループとを含む複数のグループを特定する、ことを特徴とする付記1または2に記載の計算処理管理装置。
【0465】
(付記8)前記計算処理は、深層学習を実現する計算処理である、ことを特徴とする付記1または2に記載の計算処理管理装置。
【0466】
(付記9)単位処理を複数回実施する計算処理を並列処理する複数の演算部と、前記複数の演算部を制御する制御部とを含む計算処理管理システムであって、
前記制御部は、
複数の演算部のうち、処理速度が一定以上である演算部が分類された1以上のグループと、処理速度が前記一定未満である演算部が分類された1以上のグループとを含む複数のグループを特定し、
特定した前記複数のグループのそれぞれのグループにおいて、当該グループに属するそれぞれの演算部が、前記単位処理を1回ずつ実施する第1動作と、当該グループに属するそれぞれの演算部が、他のグループが実施した前記単位処理の結果を集約して得られる最新の情報を参照して、当該グループが実施した前記単位処理の結果を集約して得られる情報を生成する、前記第1動作の後の第2動作とを含むステップを繰り返し実施するよう、前記複数のグループを制御する、
ことを特徴とする計算処理管理システム。
【0467】
(付記10)単位処理を複数回実施する計算処理を並列処理する複数の演算部のうち、処理速度が一定以上である演算部が分類された1以上のグループと、処理速度が前記一定未満である演算部が分類された1以上のグループとを含む複数のグループを特定し、
特定した前記複数のグループのそれぞれのグループにおいて、当該グループに属するそれぞれの演算部が、前記単位処理を1回ずつ実施する第1動作と、当該グループに属するそれぞれの演算部が、他のグループが実施した前記単位処理の結果を集約して得られる最新の情報を参照して、当該グループが実施した前記単位処理の結果を集約して得られる情報を生成する、前記第1動作の後の第2動作とを含むステップを繰り返し実施するよう、前記複数のグループを制御する、
処理をコンピュータが実行することを特徴とする計算処理管理方法。
【符号の説明】
【0468】
100 情報処理装置
101,430 演算部
110,120 グループ
131 第1動作
132 第2動作
200 計算処理管理システム
201 演算処理装置
202 クライアント装置
210 ネットワーク
300 バス
301 CPU
302 メモリ
303 ネットワークI/F
304 記録媒体I/F
305 記録媒体
306 スイッチ
307 FPGA
308 GPU
400 第1記憶部
401 第1取得部
402 特定部
403 配備部
404 第1出力部
410 第2記憶部
411 第2取得部
412 実行部
413 集約部
414 判定部
415 第2出力部
420 制御部
500,501 タイミングチャート
510~513,520~523,900~903,911~918,1600~1603,1611~1618,2300~2303,2311~2321 チャート