JP6776696B2 - 並列情報処理装置、情報処理方法、およびプログラム - Google Patents

並列情報処理装置、情報処理方法、およびプログラム Download PDF

Info

Publication number
JP6776696B2
JP6776696B2 JP2016146731A JP2016146731A JP6776696B2 JP 6776696 B2 JP6776696 B2 JP 6776696B2 JP 2016146731 A JP2016146731 A JP 2016146731A JP 2016146731 A JP2016146731 A JP 2016146731A JP 6776696 B2 JP6776696 B2 JP 6776696B2
Authority
JP
Japan
Prior art keywords
processing
coefficient
change
amount
node
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2016146731A
Other languages
English (en)
Other versions
JP2018018220A (ja
Inventor
雅文 山崎
雅文 山崎
司睦 田原
司睦 田原
明彦 笠置
明彦 笠置
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2016146731A priority Critical patent/JP6776696B2/ja
Priority to US15/633,861 priority patent/US20180032911A1/en
Publication of JP2018018220A publication Critical patent/JP2018018220A/ja
Application granted granted Critical
Publication of JP6776696B2 publication Critical patent/JP6776696B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Computing Systems (AREA)
  • Artificial Intelligence (AREA)
  • Mathematical Physics (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • Neurology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Medical Informatics (AREA)
  • Image Processing (AREA)
  • Complex Calculations (AREA)
  • Multi Processors (AREA)

Description

本発明は、並列情報処理装置、情報処理方法、およびプログラムに関する。
近年、深層学習(deep learning、DL)に関する研究が盛んである。例えば、画像や音声、文章等に対し、その内容の認識・理解といった研究領域が例示される。このような研究領域の具体的な応用(アプリケーション)としては、携帯電話における通信時の音声認識、ネットワーク上の検索、大量のログ情報からの異常検出、さらには自動運転などが例示される。このような応用のプロジェクトは、実際に動き始めており、今後もさらに広い分野への応用が進むと考えられる。
ところで、深層学習が導入されたシステムにおいては、学習処理は、膨大なデータを繰り返し学習させる手法が例示される。したがって、この学習処理には膨大な計算量が費やされる。例えば、画像識別等の分野では、学習用としてラベル付きの百万枚を超える静止画を、繰り返し学習する。このために、GPUのような積和演算のような学習処理で多用される演算を高速に演算可能な演算部品(以下、演算部品)を利用したシステム、あるいは、演算部品を含むノードを複数組み合わせたクラスタ環境が利用される。すなわち、学習処理には、GPUのような演算部品の利用は有効であり、さらに複数の演算部品で処理を分散し実行させることで処理の高速化が可能である。複数の演算部品で処理を分散し実行させる方法としては、ノード内並列と、ノード間並列が考えられる。
特開2010−020445号公報 特開2012−022558号公報 特開2005−182785号公報
上述のように、深層学習ついてはこれまで、ノード内に複数のGPU等の演算部品を実装し、並列に処理を行うことで、ノード内並列による高速化が行われてきた。一方、演算部品が実装されているノードを複数組み合わせたノード間並列による成果は少ない。
これまでノード間並列による成果が少ない理由としては、ノード数が増加するに従いノード間をまたいだ深層学習において、係数演算に使用する係数情報のノード間での集約処理、および集約された結果を深層学習に反映する処理に時間がかかることが想定できる。つまり、ノード数の増加による演算能力の向上が実行速度の増加に十分に寄与していないことが想定できる。
深層学習では、処理対象のデータに対する係数による演算処理と、演算処理の結果を係数に反映する処理が繰り返し実行される。そこで、1つの側面では、本実施の形態は、演算部品が実装されたノードを組み合わせて係数演算を並列に実行するときに、係数演算に使用する係数情報のノード間での処理の時間を短縮することを目的とする。
本発明の一側面は、並列情報処理装置によって例示される。すなわち、本並列情報処理装置は、演算部と処理部とを有するノードを複数備える。それぞれのノードの演算部は、
処理対象のデータに対する係数による演算処理を実行し、演算処理の結果を基に係数の変化量を算出し、算出した係数の変化量を処理部に転送するとともに、係数の変化量を並列情報処理装置内の他のノードとの間で授受する処理の実行を処理部に要求する。
それぞれのノードの処理部は、演算部から転送された係数の変化量を並列情報処理装置の他のノードに送信するとともに他のノードで算出された係数の変化量を受信する通信処理と、自ノードの演算部から転送された係数の変化量と他のノードで算出された係数の変化量とを積算する集約処理とを実行する。
そして、演算部および処理部の少なくとも一方が積算された係数の変化量を基に次回以降の演算処理で使用される係数を更新する。
本並列情報処理装置によれば、演算部品が実装されたノードを組み合わせて係数演算を並列に実行するときに、係数演算に使用する係数情報のノード間での処理の時間を短縮することができる。
ニューラルネットワークの処理を例示する図である。 フォーワード方向の処理とバックワード方向の処理を例示する図である。 並列情報処理装置の構成図を例示する図である。 比較例による処理を示す図である。 比較例による処理を例示するタイムチャートである。 実施形態1の処理を例示するタイムチャートである。 実施形態1の計算ノードの処理を例示するフローチャートである。 実施形態1の計算ノードにおけるデータフローを例示する図である。 実施形態2の計算ノードの処理を例示するフローチャートである。 実施形態2の計算ノードにおけるデータフローを例示する図である。 実施形態3の処理を例示するタイムチャートである。 実施形態3の計算ノードの処理を例示するフローチャートである。 分割重みの反映処理を起動する処理の詳細を例示するフローチャートである。 キュー情報を例示する図である。 実施形態4の処理を例示するタイムチャートである。 学習処理後のメモリ転送において、層1、2が層3よりも優先される処理例のタイムチャートである。 実施形態4の学習処理を例示するフローチャートである。 実施形態4の処理の起動を例示するフローチャートである。 実施形態5の処理のタイムチャートを実施形態4と対比して例示する図である。 実施形態5における学習処理結果を集約する集約処理を例示するフローチャートである。 実施形態6のタイムチャートを実施形態4と対比して例示する図である。 実施形態6における集約処理および反映処理を例示するフローチャートである。
以下、図面を参照して一実施形態に係る並列情報処理装置について説明する。
<深層学習の処理例>
図1に、ニューラルネットワークの処理を例示する。ニューラルネットワークは、画像
を認識し、識別するためのフォーワード方向の処理と、フォーワード方向の処理で使用するパラメータを決定するバックワード方向の処理(バックワードプロパゲーションともいう)を実行する。
図1のニューラルネットワークは、入力画像に対して、畳み込み演算を実行する畳み込み層(Convolution Layer)の処理と、サブサンプリング層(sub-sampling Layer)の処
理とを実行し、画像の特徴を抽出し、画像を識別する。すなわち、図1では、フォーワード方向の処理が例示されている。
フォーワード方向の処理は、入力画像に対して、畳み込み層の処理と、サブサンプリング層の処理を繰り返し実行する特徴抽出部の処理と、識別結果を出力する識別部の処理を含む。特徴抽出部は、入力画像に対して、畳み込み層の処理と、サブサンプリング層の処理を繰り返し実行することで、間引かれた画像を抽出する。畳み込み層の処理は、畳み込み演算ともいう。畳み込み演算は、例えば、N個×N個の画素を有する画像の情報(第N−1層)に対して、例えば、m×m個の重みwab(a,b=0,...,m−1)のフィルタによる畳み込み演算を実行することで、次の層(第N層)の画像の情報を作る。サブサンプリング層の処理は、画像間引き処理であり、プーリング演算ともいう。
畳み込み層およびサブサンプリング層での演算の入力画像および演算の出力画像はフィーチャマップとも呼ばれる。図1の例では、フィーチャマップは、例えば、画像のチャンネル数、あるいは、RGB等の色に対応して1つのニューロン層で複数作成されている。
図2に、フォーワード方向の認識処理および識別処理とともに、バックワード方向の処理を例示する。本実施の形態では、フォーワード方向の処理とバックワード方向の処理を合わせて学習処理と呼ぶ。図2のニューラルネットワークにおいても、フォーワード方向の認識処理は、入力画像に畳み込み演算を実行する畳み込み層、間引き処理を実行するサブサンプリング層(図2ではpoolingと記載)によって実行される。また、識別結果を出力する識別処理は、全結合層(図2では、Fully connectedと記載)によって実行される。フォーワード方向の畳み込み層とサブサンプリング層とを1つのニューロン層という。また、フォーワード方向の全結合層も1つのニューロン層ということができる。
フォーワード方向の処理の結果は、正解値と比較され、比較結果である差分値がエラーとして出力される。エラーは、バックワード方向に各ニューロン層によって処理される。バックワード方向の処理は、全結合層のエラーから、バックワード方向に順次、各ニューロン層でのエラーの評価関数(ERROR)および各ニューロン層での次の重みを計算する処理である。図2では、現在の重みとして、畳み込み層(1層)における1つの重みwと、全結合層(1層)における1つの重みwが例示されている。また、次の重みとして、畳み込み層(1層)における1つの重みwi+1と、全結合層(1層)における1つの重みwj+1が例示されている。
勾配降下法によるニューラルネットワークの学習処理においては、エラーの評価関数(ERROR)の勾配と、学習係数イータの積が重みwの変化量(例えば、現在の重みwtと次の重みwt+1の差分値)となる。すなわち、深層学習においては、フォーワード方向に各ニューロン層の処理が実行され、バックワード方向に、各ニューロン層でのエラーの評価関数(ERROR)が伝搬される。そして、各ニューロン層は、バックワード方向に伝搬するエラーの評価関数(ERROR)から、エラーの評価関数(ERROR)の勾配を求める。そして、各ニューロン層は、エラーの評価関数(ERROR)が小さくする方向でのエラーの評価関数(ERROR)の勾配と、学習係数イータの積から重みwtの変化量(勾配情報ともいう)を算出し、次回の重みwt+1を求める。ここで、現在の重みをwtで表し、次回の演算で使用される重みをw+1で表した。また、図1で説明したように、学習処理において、重みwは1以上の成分を有する係数列(ベクトル)である。
このようにして、バックワード方向に順次、各ニューロン層で、エラーの評価関数(ERROR)を小さくする方向に重みを変化させるための変化量が求められる。そして、バックワード方向に順次伝搬するエラーの評価関数(ERROR)と重みwの変化量が算出され、最終的に、入力層に最も近い層の重みwの変化量が算出される。重みwtの変化量は、各層において、次回の重みwt+1に反映され、次回の学習処理に使用される。なお、以下の説明においては、並列演算処理装置における学習処理の時間の短縮について説明するが、学習処理自体のアルゴリズムの詳細は省略する。
<構成>
図3に、並列情報処理装置1の構成図を例示する。並列情報処理装置1は、計算ノード10−1、10−2、10−3、10−4等を有する。計算ノード10−1、10−2、10−3、10−4等は、ノード間高速ネットワーク20で接続される。以下、計算ノード10−1等を総称する場合には、単に計算ノード10という。本実施の形態において計算ノード10の数に限定がある訳ではない。並列情報処理装置1は、本実施形態の情報処理方法を実行する。
計算ノード10は、Central Processing Unit(CPU11)とメモリ12とGraphics Processing Unit(GPU13)とメモリ14を有する。CPU11とGPU13とはバス15によって接続される。さらにバス15を介して、CPU11とGPU13とは、ノード間インターフェース(ノード間IF16)に接続される。計算ノード10はノードの一例である。
CPU11は、メモリ12に実行可能に展開されたコンピュータプログラムにしたがって、計算ノード10の処理、例えば、他の計算ノード10との通信処理、あるいは、GPU13を制御し、管理する処理を実行する。CPU11は、MPU(Microprocessor)、プロセッサとも呼ばれる。CPU11は、単一のプロセッサに限定される訳ではなく、マルチプロセッサ構成であってもよい。また、単一のソケットで接続される単一のCPU11がマルチコア構成を有していても良い。上記CPU11の少なくとも一部の処理は、CPU11以外のプロセッサ、例えば、GPU13で実行されてもよい。CPU11は、処理部の一例である。メモリ12は、CPU11で実行されるコンピュータプログラム、CPU11が処理するデータを格納する。
GPU13は、例えば、高速のVRAM、高速の演算器を複数搭載し、積和演算機能等を高速に実行する。GPU13は、メモリ14に実行可能に展開されたコンピュータプログラムにしたがって、計算ノード10の処理のうち、例えば、学習処理を実行する。GPU13は、演算部の一例である。メモリ14は、GPU13で実行されるコンピュータプログラム、GPU13が処理するデータを格納する。
上記CPU11およびGPU13の少なくとも一部の処理は、例えば、Digital
Signal Processor(DSP)、数値演算プロセッサ、ベクトルプロセッサ、画像処理プロセッサ等の専用プロセッサで行われても良い。また、上記各部の少なくとも一部の処理は、集積回路(IC)、その他のディジタル回路で実行されてもよい。また、上記各部の少なくとも一部にアナログ回路が含まれても良い。集積回路は、LSI,Application Specific Integrated Circuit(ASIC),プログラマブルロジックデバイス(PLD)を含む。PLDは、例えば、Field−Programmable Gate Array(FPGA)を含む。
すなわち、CPU11あるいはGPU13の処理の少なくとも一部は、プロセッサと集積回路との組み合わせであっても良い。組み合わせは、例えば、マイクロコントローラ(MCU),SoC(System−on−a−chip),システムLSI,チップセットなどと呼ばれる。
BUS15は、CPU11およびGPU13の例えば内部バスに接続され、CPU11およびGPU13を相互に接続する。また、BUS15は、CPU11およびGPU13をノード間IF16に接続する。BUS15は、例えば、PCI−Expressの規格に従うバスである。
ノード間IF16は、ノード間高速ネットワーク20を介して計算ノード10同士を接続するインターフェースである。ノード間高速ネットワーク20は、例えば、クロスバー、インターコネクト等とも呼ばれる。なお、ノード間高速ネットワーク20は、どのようなネットワーク構成であってもよい。例えば、ノード間高速ネットワーク20は、トーラス構造のメッシュであってもよいし、Local Area Network(LAN)のようなバス型のネットワークであってもよい。
<複数ノードによる学習処理>
学習処理では、まず、フォーワード方向の処理が、各ニューロン層に対して、それぞれのニューロン層が持つ重みパラメータ(w)を用いて、バッチ単位で実行され、次に、バッ
クワード方向の処理が各ニューロン層に対して順次実行される。ここで、バッチ単位とは、学習処理の対象をまとめた処理の単位である。例えば、ニューラルネットワークが画像の認識を行う場合に、バッチ単位として、数十枚から数千枚分の画像のデータが学習処理に用いられ、画像の認識と、正解判定が繰り返し実行される。
図3に例示した複数の計算ノード10がバッチ内の画像データを分担して処理することで、学習処理が並列に実行される。一度のバッチ単位での学習処理の結果としては、重みパラメータ(w)の変化量(Δw)が算出される。図1で述べたように、重みパラメータ(w)は、1以上の成分を有するベクトルである。以下、重みパラメータ(w)は、単に重み(w)ともいう。上述のように、重み(w)の変化量(Δw)は、エラーの評価関数(ERROR)を小さくする方向に算出される。各計算ノード10は、次のバッチ処理に向けて、自身のバッチ単位での重み(w)の変化量(Δw)の計算結果と、他の計算ノード10でのバッチ単位での重み(w)の変化量(Δw)の計算結果と相互に授受し、相互の計算結果を積算する。重み(w)の変化量(Δw)の計算ノード10相互の積算処理を集約処理ともいう。そして、各計算ノード10は、相互の計算結果を集約処理した変化量(Δw)を用いて、重み(w)の更新処理を行う。各層の重み(w)を集約処理された変化量(Δw)を用いて更新することを、集約処理された変化量(Δw)を重み(w)に反映する、ともいう。
3以上のノード数の計算ノード10が相互に計算結果を授受する場合、計算ノード10の1対1の通信が複数回実行される。例えば、計算ノード10−1、10−2、10−3、10−4が相互に情報をバタフライ方式(Recursive Doubling)で授受する場合、まず、1回目の授受で、計算ノード10−1と計算ノード10−2が情報を授受し、計算ノード10−3と計算ノード10−4が情報を授受する。次に、2回目の授受で、計算ノード10−1と計算ノード10−3が情報を授受し、計算ノード10−2と計算ノード10−4が情報を授受する。以上の2回の情報の授受によって、計算ノード10−1、10−2、10−3、10−4の間での情報の授受が完了する。
本実施の形態で、ノード間通信アルゴリズムはRecursive Doublingに限定される訳ではない。例えば、ノード間通信アルゴリズムとして、Reduce+B
roadcast(Bcast), Reduce_scatter+Allgather等の方式を用いてもよい。このようなノード間通信処理は、MPI AllReduce処理として、コンピュータプログラムが提供されている。なお、以下の実施の形態説明では、MPI AllReduce処理が実装された計算ノード10を用いて説明するが、計算ノード10間の通信処理がMPI AllReduce処理に限定される訳ではない。また、計算ノード10間の通信処理が実行されるネットワーク構成に限定がある訳ではなく、どのようなネットワーク構成が用いられてもよい。
<比較例>
比較例では、図2に例示したニューラルネットワークに含まれる各ニューロン層(例えば、ニューロン層1からN)が1つの計算ノード10内に構築される。つまり、比較例では、各ニューロン層の処理は、計算ノード10のコンピュータプログラムによって実行される。なお、以下の説明で用いる図中には、ニューロン層NをLayer Nのように記述する。
図4に、比較例による処理を示す。比較例では、それぞれの計算ノード10が図2に例示したフォーワード処理およびバックワード処理を実行する。また、比較例では、計算ノード10は、フォーワード方向の処理をすべてのニューロン層(ニューロン層1からN)において順次実行する(S301)。次に、計算ノード10は、バックワード方向の処理をすべてのニューロン層(ニューロン層Nから1)において順次実行する(S302)。
各計算ノード10は、各ニューロン層1〜Nにおける重み(w)の変化量(Δw)を相互に転送し、相互に転送した演算結果(各ニューロン層1〜Nにおける重みwの変化量Δw)を積算する。上述のように、それぞれの計算ノード10において計算された演算結果をそれぞれの計算ノード10で積算することを集約するともいう(S303)。そして、各計算ノードは、集約した各ニューロン層1〜Nにおける重み(w)の変化量(Δw)を各層の重み(w)に反映する(S304)。そして、計算ノード10は、学習処理の繰り返しを終了するか否かを判定する(S305)。ここで、計算ノード10は、未学習のバッチが存在する場合には、処理をS301に戻し、次のバッチでの学習処理を実行する(S305でNO)。一方、計算ノード10は、すべてのバッチで学習した場合には、処理を終了する(S305でYES)。
図5は、比較例による処理を例示するタイムチャートである。図5では、比較のため、単一ノードでの処理も例示されている。図5の左側に例示したように、単一ノードでの処理は、バッチ単位での学習処理、重み(w)の更新処理、バッチ単位での学習処理の繰り返しとなる。
一方、図5の右側に例示したように、複数ノードでは、バッチ単位での学習処理が、計算ノード10の数だけ並列で実行可能である。しかしながら、それぞれの計算ノード10は、バッチ単位での学習処理が終了すると、重み(w)の変化量(Δw)をノード間通信で授受し、集約した後に、それぞれの計算ノード10での重み(w)を更新することになる。したがって、比較例の処理では、計算ノード10の数が増加しても、ノード間通信・集約処理、更新処理の時間が増加し、計算ノード数の増加による学習処理の時間短縮効果が十分に発揮されない結果となる。
<実施形態1>
図6は、実施形態1の処理を例示するタイムチャートである。ところで、計算ノード10の構成要素のうち、GPU13は、グラフィックス処理で用いる積和演算を高速に実行する。したがって、GPU13は、学習処理で主体となる重み(w)による演算を高速に実行可能である。しかしながら、学習処理、ノード間通信・集約処理、反映処理を演算部
が主体となって処理すると、処理手順としては、図4のフローチャートと同様であり、重み(w)の変化量(Δw)をノード間通信で授受し、集約処理、反映処理を実行する時間が無視できない。
そこで、実施形態1の並列情報処理装置1は、演算部(GPU13)と処理部(CPU11)を備えた計算ノード10を複数備え、学習処理を演算部(GPU13)で行い、ノード間通信、集約処理、反映処理は処理部(CPU11)で行う。
(1)学習処理
学習処理は、主にGPU13で実行される。学習処理は、ニューロン層毎にフォーワード処理とバックワード処理(ニューロン層の処理の順番はフォーワード処理の逆)を順に行う。複数の計算ノード10がバッチ内の画像データを分担して処理することで、並列に学習処理が実行される。図6では、ニューロン層として、ニューロン層1(LAYER1)から4(LAYER4)が例示されている。ニューロン層1から4は、複数階層の一例である。各ニューロン層1から4におけるフォーワード処理およびバックワード処理は、層別処理の一例である。また、各ニューロン層1から4におけるフォーワード処理およびバックワード処理は、それぞれの階層の前の階層から入力されるデータに係数による演算を実行して次の階層に出力する処理の一例である。フォーワード処理がニューロン層1から4の順に実行され、バックワード処理がニューロン層4から1の順に実行されることは、所定順序の一例である。
(2)メモリ転送(GPU13からCPU11への転送)
演算部(GPU13)は、学習処理の各ニューロン層で計算された重み(w)の変化量(Δw)を学習処理が終わったニューロン層ごとに順次、処理部(CPU11)へメモリ
転送する。これによって、演算部(GPU13)は、ニューロン層ごとに、ノード間通信・集約処理、反映処理を処理部(CPU11)に開始させる。ニューロン層ごとにノード間通信・集約処理、反映処理を開始することで、次のバッチ単位での学習処理の開始を早め、高速化が実現される。
具体的には、各計算ノード10において各層のバックワード処理が終わる毎に、演算部(GPU13)に割り当てられた学習処理用のスレッドはメモリ転送を起動するためのキューを発行する。キューは要求と呼ぶこともできる。メモリ転送(GPU13からCPU
11への転送)用処理スレッドは、キューを受けると転送対象のデータをGPU13から
CPU11へ転送し、最後に集約処理のキューをCPU11に発行する。図6では、ニューロン層として、ニューロン層4(LAYER4)から層1(LAYER1)のバックワード処理で、重みの変化量としてそれぞれ、Δ WL4−1、Δ WL3、Δ WL2、Δ WL1が算出されている。
(3)集約処理および(4)ノード間通信
予め、指定数(1個から数十個)が用意されている集約処理用スレッドは、キューを受けると、まず、ノード間通信処理のためのキューを発行する。ノード間通信処理用スレッドは、ノード間通信処理のためのキューを受けるとノード間通信の Message P
assing Interface(MPI)リクエストを、ノンブロッキング通信を指定してMPI通信プログラムに投入する。リクエストに対応する通信が完了した時点で、MPI通信プログラムから集約処理用スレッドへ通信完了が通知され、集約処理用スレッドにしたがい集約処理が実行される。集約処理には多数回の演算が実行されるため、集約処理は複数のスレッドを並列で実行することで高速化を実現する。すなわち、計算ノード10に複数のCPU11が搭載される場合には、複数のスレッドを並列で実行することで、CPU11による並列処理が実行される。また、単一のCPU11がマルチコアを有する場合も同様である。
図6では、第1回目のノード間通信において、例えば、ニューロン層4(LAYER4)については、ノード間通信用スレッドは、ΔWL4−1を他ノードに送信し、ΔWL4−2を他ノードから受信する。そして、集約処理用のスレッド1は、ΔWL4−1とΔWL4−2を積算し、集約処理を実行する。集約処理によってΔWL4−1+ΔWL4−2が得られる。
次に、第1回目のノード間通信において、例えば、ニューロン層4(LAYER4)については、ノード間通信用スレッドは、ΔWL4−1+ΔWL4−2を他ノードに送信し、ΔWL4−3+ΔWL4−4を他ノードから受信する。そして、集約処理のスレッド1は、ΔWL4−1+ΔWL4−2とΔWL4−3+ΔWL4−4を積算し、集約処理を実行する。図6のスレッド1から3は、一例として、それぞれの階層での係数の変化量に対する集約処理を2以上並列に実行する。
(5)メモリ転送(CPU11からGPU13への転送)
他の全ノードと情報を授受するための回数分のノード間通信と集約処理が完了すると、CPU11は、メモリ転送(CPU11からGPU13への転送)処理のキューを発行する。メモリ転送処理用スレッドがキューを受けて、メモリ転送(CPU11からGPU13への転送)を実行する。
(6)反映処理
各層のメモリ転送(CPU11からGPU13への転送)が完了すると、主にGPU13側での反映処理が、メモリ転送が完了したニューロン層から順に実行される。
図7は、実施形態1の計算ノード10の処理を例示するフローチャートである。図で左側のフローチャートは、主としてGPU13が実行する学習処理と反映処理を例示する。また、右側のフローチャートは、主としてCPU11が実行するノード間通信・集約処理を例示する。図7の処理では、まず、GPU13がニューロン層(例えば、ニューロン層1からN)について、フォーワード処理を実行する(S11)。
フォーワード処理は、図1に例示したように、入力データと重み(w)とによる演算処理である。演算処理は、例えば、入力データの要素x(i,j)とm×m個の重みwab(a,b=0,...,m−1)のフィルタによる畳み込み演算、サブサンプリング層のプーリング演算、全結合層の演算等である。S11の処理は、処理対象のデータに対する係数による演算処理の一例である。
次に、GPU13は、バックワード方向にニューロン層Nから1のループ(LAYERループ(L)、開始=N、終了=1)の中で、S12、S13の処理を実行する。S12の処理では、GPU13は、バックワード方向に各ニューロン層(L)において上位の層(L+1)でのエラーの評価関数(ERROR)から当該ニューロン層(L)におけるエラーの評価関数(ERROR)を求める。そして、GPU13は、当該ニューロン層(L)のエラーの評価関数(ERROR)に基づいて当該ニューロン層(L)のエラーの評価関数(ERROR)を減少させる方向の重み(w)の変化量(Δw)を求める。S12の処理は、演算処理の結果を基に係数の変化量を算出することの一例である。S12の処理は、それぞれの階層での層別処理の結果を基にそれぞれの階層での係数の変化量を算出することの一例でもある。
また、S13の処理は、CPU11に対して重みの変化量(Δw)の集約処理の起動を要求する処理である。S13の処理により、GPU13は、S12で求めた当該ニューロン層(L)について計算された重み(w)の変化量(Δw)をCPU11にメモリ転送す
るとともに、集約処理を実行するCPU11のスレッドにキューを登録する(S13)。したがって、実施形態1では、各ニューロン層(L)でバックワード処理が終了するごとに、CPU11に対して、重み(w)の変化量(Δw)の集約処理の起動が要求される。S13の処理は、算出した係数の変化量を処理部に転送するとともに、係数の変化量を並列情報処理装置内の他のノードとの間で授受する処理の実行を処理部に要求することの一例である。S13の処理は、算出した係数の変化量を処理部に転送することの一例でもある。
以降、GPU13は、CPU11からの重み(w)の変化量(Δw)の集約処理の完了を全ニューロン層数分待つ(S14)。そして、CPU11で集約処理された各ニューロン層(L)の重み(w)の変化量(Δw)が、CPU11からGPU13にメモリ転送される。そして、全レイヤの集約処理が完了すると、GPU13は、集約処理された変化量(Δw)を各層の重み(w)に反映する(S15)。すなわち、GPU13は、次のバッチのフォーワード処理およびバックワード処理で使用される各層の重み(w)を更新する。S15の処理は、演算部が積算された係数の変化量を基に次回以降の演算処理で使用される係数を更新することの一例である。
そして、GPU13は、学習の終わりか否かを判定する(S16)。学習の終わりとは、例えば、計算ノード10について用意されたすべてのバッチが終了する場合である。計算ノード10について用意された未学習のバッチが残っている場合には、GPU113は、処理をS11に戻し、次のバッチを実行する。
S13の処理によって、集約処理の起動が要求されると、キューがCPU11のスレッドに登録され、キューが順次処理される。CPU11は、まず、メモリ転送を実行し、GPU13で計算されたニューロン層Lの重み(w)の変化量(Δw)を取得する(S21)。そして、ニューロン層Lの重み(w)の変化量(Δw)を他の計算ノード10との間で授受する。上述のように、本実施の形態では、ノード間のデータ交換の処理として、MPI仕様のALLReduceアルゴリズムが用いられる。ただし、本実施の形態のノード間のデータ交換の処理がALLReduceアルゴリズムに限定される訳ではない。図7において、CPU11は、MPI ALLReduceの階層ループにおいて、S22からS24の処理を繰り返し実行する。
例えば、ノード数が4であって(計算ノード10−1〜10−4)、Recursive Doublingの場合には、以下の処理が実行される。計算ノード10−1と10−2の組と計算ノード10−3と10−4の組のそれぞれ組でCPU11が、S22からS24の処理を実行する。すなわち、自ノードで計算されたニューロン層Lの重み(w)の変化量(Δw)を相手ノードに送信する(S22)。S22の処理は、演算部から転送された係数の変化量を並列情報処理装置の他のノードに送信することの一例である。
また、CPU11は相手ノードで計算されたニューロン層Lの重み(w)の変化量(Δw)を受信する(S23)。S23の処理は、他のノードで算出された係数の変化量を受信することの一例である。したがって、S22とS23の処理は通信処理の一例である。
そして、CPU11は自ノードで計算されたニューロン層Lの重み(w)の変化量(Δw)と相手ノードで計算されたニューロン層Lの重み(w)の変化量(Δw)を積算する(S24)。S24の処理は、演算部から転送された係数の変化量と他のノードで算出された係数の変化量とを積算する集約処理の一例である。
さらに、計算ノード10−1と10−3の組と計算ノード10−2と10−4の組のそれぞれの組でCPU11が、S22からS24の処理を実行する。この処理によって、計
算ノード10−1〜10−4の間でニューロン層Lの重み(w)の変化量(Δw)が集約される。ニューロン層Lの重み(w)の変化量(Δw)が集約されると、CPU11は、集約されたニューロン層Lの重み(w)の変化量(Δw)をメモリ転送し、GPU13に戻す(S26)。計算ノード10は、S21からS26の処理をキューの蓄積順にすべてのニューロン層Lについて繰り返し実行する。
図8に、実施形態1の計算ノード10におけるデータフローを例示する。計算ノード10においては、まず、GPU13による学習処理では、GPU13による演算結果がGPU13のメモリ14に格納される(矢印A1)。上述のように演算結果は、ニューロン層Lの重み(w)の変化量(Δw)である。
次に、ノード間通信処理が実行される。まず、GPU13とCPU11との間のメモリ転送が実行され、メモリ14に格納されたニューロン層Lの重み(w)の変化量(Δw)がCPU11のメモリ12へ転送される(矢印A2−1)。ここでは、メモリ12に格納された重み(w)の変化量をΔw1とする。そして、ノード間IFを介して、メモリ12に格納された重み(w)の変化量(Δw1)が他の計算ノード10に送信される(矢印A2−2)。一方、ノード間IFを介して、他の計算ノード10で計算されたニューロン層Lの重み(w)の変化量(Δw2)が当該計算ノード10で受信される(矢印A2−3)。
さらに集約処理が実行される(矢印A3)。集約処理では、CPU11は、メモリ12
のデータ(変化量Δw1とΔw2)を加算する。ここでは、加算結果は集約された重みの変化量としてΔw2に保持されるとする。ノード数が3以上の場合には、矢印A2−2からA3がノード間通信のアルゴリズムで実行される回数だけ繰り返される。
そして、CPU11は、メモリ転送でGPU13に集約されたニューロン層Lの重み(w)の変化量(Δw2)を転送する(矢印A5−1)。転送先のGPU13は、転送された重みの変化量を変化量(Δw)に保存する。そして、GPU13は、集約された層Lの重み(w)の変化量(Δw)を使用して、重み(w)を更新する(A5−2)。
以上述べたように、実施形態1の並列情報処理装置1は、複数の計算ノード10がそれぞれのバッチによって、入力データに対する重み(w)の演算を複数のニューロン層について実行するため、重み(w)の学習処理が並列に実行される。そして、並列に実行された学習処理によって得られた重み(w)の変化量(Δw)を複数の計算ノード10間で集約し、各ニューロン層についてのすべての計算ノード10のバッチの結果を反映した重み(w)を各計算ノード10が取得する。
このような処理において、各計算ノード10は、GPU13が各ニューロン層の学習処理を順次実行する。すなわち、GPU13は、フォーワード方向にニューロン層1からニューロン層Nに対して、重み(w)による演算を実行する。次に、GPU13は、バックワード方向にニューロン層Nからニューロン層1について、各ニューロン層Lの重み(w)の変化量(Δw)を計算する処理を実行する。そして、各ニューロン層Lの重み(w)の変化量(Δw)の計算が終了するごとに、GPU13は、計算した変化量(Δw)をCPU11にメモリ転送するとともに、集約処理のキューをCPU11のスレッドに発行し、集約処理を依頼する。
以上述べたように、積和演算等の重み(w)による演算を高速に実行可能なGPU13が学習処理を複数の計算ノード10において並列に実行し、CPU11が重みの変化量(Δw)のメモリ転送、ノード間通信、および集約処理を実行する。したがって、GPU13は、CPU11との連携により、もっぱら学習処理を実行すればよく、GPU13の演
算性能が発揮されやすい。
また、CPU11は、集約処理の依頼を受けると、キューの順に、ノード間通信を実行する。例えば、CPU11は、ALLReduceアルゴリムにより、自ノードで計算した重み(w)の変化量(Δw)を他の計算ノード10に送信するとともに、他の計算ノード10で得られた計算結果を受信する。そして、CPU11は、ニューロン層ごとに、順次重み(w)の変化量(Δw)を集約する。したがって、比較例で例示した図4のようにバックワード方向の処理がすべてのニューロン層について完了した後に重み(w)の変化量(Δw)の集約処理を実行する場合と比較して、各層の集約処理が早期に開始される。例えば、CPU11がマルチコア構成の場合には、図6のように、集約処理を複数のスレッドに分けて、異なるニューロン層の集約処理を割り当てることで、複数のニューロン層の集約処理が並列して実行される。
また、あるニューロン層Lの集約処理を実行中に、他のニューロン層L+1のノード間通信が並列して実行可能である。また、メモリ転送用のスレッドがニューロン層Lの集約処理結果をGPU13にメモリ転送中に、集約処理の複数のスレッドが複数のレイヤL+1、L+2、L+3に対して集約処理とノード間通信処理とを並列に実行できる。図5に例示した比較例では、バッチ単位で全ニューロン層について学習処理を実行し、全ニューロン層について集約処理を実行し、全ニューロン層について次の学習処理を実行する。このような比較例の処理に対して、実施形態1の計算ノード10は、少なくとも集約処理の処理時間が短縮される。また、次のバッチにおけるフォーワード方向の処理の開始を早めることができる。
<実施形態2>
図9および図10により実施形態2に係る並列情報処理装置1について説明する。実施形態2の並列情報処理装置1は、図6に例示した「(6)反映処理」をニューロン層単位でCPU11が実行する。そして、CPU11は、ニューロン層単位での反映処理の後に、(5)メモリ転送(CPU11からGPU13)を実行する。実施形態2の他の構成および作用は実施形態1と同様である。そこで、実施形態2の並列情報処理装置1の構成要素のうち、実施形態1と同一の構成要素については、同一の符号を付してその説明を省略する。
図9に、実施形態2の計算ノード10の処理を例示するフローチャートである。図9の処理は、変化量(Δw)を重み(w)に反映する処理がGPU13ではなく、CPU11によって実行される点で図7と相違する。例えば、図9では、ノード間通信・集約処理において、S25の処理が追加されている。
まず、GPU13は、学習処理によって計算された変化量(Δw)を重み(w)に反映する処理を起動する(S13A)。このとき、メモリ転送処理によってGPU13からCPU11に当該ニューロン層の重み(w)の変化量(Δw)が送信される点は図7と同様である。すると、GPU13は、キューの優先順に変化量(Δw)のメモリ転送(S21)、および集約処理を実行する(S22−S24)。そして、MPI ALLReduce階層ループが終了すると、CPU11は、集約処理されたあるニューロン層Lの重みの変化量(Δw)を重み(w)に反映する(S25)。S25の処理は、処理部が積算された係数の変化量を基に次回以降の演算処理で使用される係数を更新することの一例である。
そして、CPU11は、変化量(Δw)が反映された重み(w)をメモリ転送でGPU13に送信する(S26A)。すると、GPU13は、変化量(Δw)が反映された重み(w)をメモリ転送で受信し、メモリ14に保存する(S14A)。そして、GPU13
は、未学習のバッチが残っている場合には(S16でN)、次のバッチの学習を実行する。
図10に、実施形態2の計算ノード10におけるデータフローを例示する。図10の処理は、学習処理(矢印A1)、ノード間通信処理(A2−2、A2−3)、集約処理(矢印A3)までは、図8と同一である。ただし、ノード間通信処理前のメモリ転送(矢印A2−1)において、CPU11は、GPU13から重みの変化量(Δw)とともに重み(w)を受信し、w1としてメモリ12に格納する。
そして、CPU11は、重みの変化量(Δw)の集約処理の後、集約された重みの変化量(Δw)を重みwに反映し、重みw1としてメモリ12に格納する(矢印A5−3)。そして、CPU11は、重みの変化量(Δw)が反映された重み(w1)をメモリ転送でGPUに転送し、重み(w)としてメモリ14に保存する(矢印A5−4)。
以上述べたように、実施形態2では、CPU11が変化量(Δw)を重み(w)に反映する処理を実行する。この構成および手順により、GPU13は重みの変化量(Δw)の演算により専念することが可能となる。また反映処理のスレッドは、集約処理と同様にCPU11のコア数に応じて並列処理することで、学習処理の高速処理が可能となる。
<実施形態3>
図11から図13により実施形態3の並列情報処理装置1について説明する。上記実施形態1では、CPU11が学習結果のノード間通信・集約処理を実行する際に、各ニューロン層単位で処理を分割した。すなわち、CPU11は、1つのニューロン層について学習結果のノード間通信・集約処理を個別に実行し、それぞれのニューロン層の重みの変化量(Δw)が集約されるごとに、GPU13にメモリ転送した。また、実施形態2では、CPU11が重みの変化量(Δw)を重み(w)に反映し、GPU13にメモリ転送した。しかし、実施形態1、2の処理でも、1つのニューロン層が大きなパラメータ数の重みを持つ場合には転送処理に時間がかかり、マルチコアのCPU11が複数スレッドによって並列処理を実行する構成を有していても、並列化の効果が発揮されない場合がある。そこで、実施形態3では、GPU13およびCPU11は、ノード間通信スレッド、複数の集約処理スレッド、および反映処理スレッドの実行単位をニューロン層単位よりも細かく分割して処理する。このような手順により、計算ノード10は、各処理をパイプライン化し、高速化する。
例えば、あるニューロン層Lの重み(w)がw=(p1、p2、・・・・、pX)のようなパラメータ列であるとする。パラメータ列は、係数列の一例である。つまり、ニューロン層Lの重み(w)は、複数使用され、係数列を形成する。そして、学習処理の結果、重みの変化量はΔw=(Δp1、Δp2、・・・・、ΔpX)のような多数のパラメータ列として計算されるとする。このような場合に、GPU13はΔwを部分列に区切り、Δw1=(Δp1、Δp2、・・・、ΔpX1)、Δw2=(ΔpX1+1、・・・、ΔpX2)、Δw3=(ΔpX2+1、・・・、ΔpX3)、・・・、Δwx=(ΔpX3+
1、・・・、ΔpX)のように分割する。
図11は、実施形態3の処理を例示するタイムチャートである。なお、図11では、実施形態3の処理が適用される前のタイムチャート(「適用前」)が、実施形態3の処理が適用された場合のタイムチャートとともに例示されている。適用前の例(図11の上側)では、ニューロン層Nに対するバックワード処理の終了後、GPU13からCPU11へのメモリ転送が実行され、その後、スレッド1による集約処理が2回のノード間データ通信(例えば、 ALLReduceアルゴリズム)とともに実行されている。
一方、適用後の例(図11の下側)では、ニューロン層Nに対するバックワード処理の終了後、GPU13は、学習処理で計算した重みの変化量(Δw、パラメータ列)をΔw1、Δw2、Δw3、Δw4の部分列に分割し、CPU11にメモリ転送する。
CPU11はメモリ転送で分割された変化量Δw1、Δw2、Δw3、Δw4を取得し、集約処理用のスレッド1から3により順次集約処理を起動する。例えば、スレッド1が分割された変化量(Δw1)を受け取ると、まず、ノード間通信処理のスレッドを起動する。ノード間通信処理のスレッドは、分割された変化量(Δw1)を他の計算ノード10−2に送信するとともに、計算ノード10−2からニューロン層Nの分割された変化量Δw1を受信する。今、自ノードと他ノードとで変化量Δw1を区別するため、自ノードで計算されたものをΔw1−1とし、計算ノード10−2で計算されたものをΔw1−2とする。スレッド1は、自ノードで計算され、分割された変化量(Δw1−1)と、ノード間通信処理で得られた他ノードで計算された変化量(Δw1−2)とを積算し、計算ノード10−2との間で集約処理を実行する。このとき、スレッド1の集約処理と並行してスレッド2は、分割された変化量(Δw2)について、ノード間通信処理のスレッドを起動しており、スレッド2もスレッド1と同様に、ノード間通信処理と集約処理をパイプラインで実行する。スレッド3も、スレッド1、2と同様に、ノード間通信処理と集約処理をパイプラインで実行する。
スレッド1は、自ノードで計算された重みの変化量(Δw1−1)と他ノード計算された重みの変化量(Δw1−2)との間の集約処理が完了すると、再びノード間通信処理のスレッドを起動し、計算ノード10−3との間で、集約処理を実行する。また、スレッド2、3についても、1回目の集約処理が終了すると、スレッド1と同様に、再びノード間通信処理のスレッドを起動し、計算ノード10−3との間で、集約処理を実行する。
そして、例えば、スレッド1が分割された変化量(Δw1)について、他のすべての計算ノード10との間で集約処理を完了すると、メモリ転送スレッドを起動する。メモリ転送スレッドにより、CPU11は、集約された変化量(Δw1)をGPU13に転送する。スレッド2、スレッド3も同様である。
また、スレッド1は、分割された変化量(Δw1)についてメモリ転送スレッドのキューを発行すると、分割された次の変化量(Δw4)について、分割された変化量(Δw1)と同様の処理を実行する。このようにして、例えば、CPU11が複数、例えば、5つのコアを有している場合には、CPU11はスレッド1から3およびメモリ転送スレッド、およびノード間通信スレッドを並行して実行できる。したがって、例えば、ある分割された変化量(Δwk)についてのノード間通信の処理が、別の分割された変化量(Δwj)についての集約処理の時間に実行できる。また、仮に、あるニューロン層Lの重み(wL)のパラメータ数が他の層よりも多いものであっても、GPU13およびCPU11は重み(wL)に含まれるパラメータを複数部分に分割し、複数スレッドで並行して処理できる。
図12は、実施形態3の計算ノード10の処理を例示するフローチャートである。図12の処理は、反映処理の起動と反映処理待ちにおいて、図9の処理と相違する。すなわち、実施形態3においては、図11で説明したように、GPU13は、ニューロン層のループにおいて(ニューロン層1からN)、各ニューロン層Lの重みの変化量(ΔwL)を複数の部分に分割する(ΔwLk、kは分割された部分列に対応する数)。そして、GPU13は、メモリ転送を行い、各部分列ごとに集約処理、反映処理を起動する(S13B)。そして、ニューロン層のループの終了後、GPU13は、分割された重みの変化量(ΔwLk)の反映処理の完了待ちとなる(S14B)。そして、すべてのニューロン層のすべての分割された重みの変化量(ΔwLk)についての反映処理が終了すると、GPU1
3は、学習の繰り返しの終了か否かを判定し、未学習のバッチがある場合に、処理をS11に戻し、次のバッチの学習を実行する。
なお、図12の処理フローは、図9を変形したもので、CPU11が重みの変化量(ΔwLk)を基に重み(wLk)を更新する反映処理を実行する。しかし、図7に例示したように、CPU11が重みの変化量(ΔwLk)をメモリ転送でGPU13に転送し、GPU13が反映処理を実行してもよい。
図13は、実施形態3におけるGPU13によって分割重み(wLk)の反映処理を起動する処理(図12の13A)の詳細を例示するフローチャートである。この処理では、GPU13は、レイヤLの重み(wL)のk番目の分割重みの部分列(wLk)と重みの変化量(ΔwLk)のメモリ転送を起動する(S13B1)。S13B1の処理は、係数列を複数の部分列に分割して部分列ごとに変化量を処理部に転送することの一例である。
次に、GPU13は、分割された重みの部分列(wLk)の変化量(ΔwLk)の集約処理、および、重みの部分列(wLk)への反映処理をスレッドSn(n=1〜N)のキューに登録する(S13B2)。S13B2の処理は、部分列ごとに授受する処理の実行を処理部に要求することの一例である。
以上述べたように、本実施形態の並列情報処理装置1は、複数のスレッドによって、メモリ転送(GPU13からCPU11)、ノード間通信、集約および反映処理、メモリ転送(CPU11からGPU13)を実行できる。さらに、実施形態3では、GPU13はニューロン層Lの重みのパラメータ列(wL)を複数の部分列(wLk、k=1、2、3、・・・)に分ける。そして、GPU13はそれぞれの重みの変化量の部分列(ΔwLk、k=1、2、3、・・・)ごとに、メモリ転送、集約および反映を起動する。すると、CPU11は、重みの変化量の部分列(ΔwLk、k=1、2、3、・・・)ごとに、メモリ転送(GPU13からCPU11)、集約および反映、メモリ転送(CPU11からGPU13)を実行する。したがって、ニューロン層の重み(w)に含まれるパラメータ数が多い場合であっても、メモリ転送、ノード間通信、集約処理のパイプラインを形成し、例えば、ノード間通信処理に要する時間(またはその一部)を集約処理の時間で隠すことができる。なお、重みのパラメータ列(wL)は、係数列の一例である。
<実施形態4>
図14から図18により実施形態4を説明する。上記実施形態1から実施形態3では、例えば、学習処理の終了順にニューロン層ごとのデータがメモリ転送され、ノード間通信処理、集約処理、反映処理が実行された。実施形態4では、各スレッドは、ニューロン層のうち、最も階層が低い層、すなわち、図2の入力画像が入力される層(例えば、ニューロン層1))の優先順位を高くし、階層が上がるほど優先順位が低くなるようにキューの発行を制御する。このような処理によって、1つのバッチが終了前にすでに、階層が低いニューロン層の重み(w)に対して、変化量(Δw)が反映されている場合には、階層が低いニューロン層における次のバッチの開始を可能とする。
図14は、Reduce処理で用いられるキュー情報を例示する図である。キュー情報は、キュー情報を発行する処理(前処理、キュー情報発行スレッドともいう)から発行され、後続処理(キュー処理スレッドともいう)によって処理される。図14では、前処理として、処理A−1、処理A−2等が例示されている。また、後続処理として処理B−1、処理B−2が例示されている。
図14の例では、前処理(キュー発行スレッド)は、処理が終わる毎に後続処理のキューを登録する。後続処理(キュー処理スレッド)は、処理が要求されているキューが存在
しない場合は何もしない。一方、処理が要求されているキューが存在する場合、後続処理(キュー処理スレッド)は、要求された処理を実行し、処理が終了すると処理完了フラグ情報を更新する。処理完了フラグ情報は、例えば、完了した処理数(または未完了の処理数)のカウンタである。なお、ある前処理が、それ以前に実行される前処理(例えば、処理A−1、処理A−2)に依存する場合には、処理を行う前に、依存する前処理の完了を確認してから処理を開始する。
以上のようにして、後続処理(キュー処理スレッド)は、登録されたキューの順に処理を実行する。以下、実施形態4では、登録されるキューの順を所定の優先順序で優先する制御、具体的には、ニューロン層のうち、階層の低いニューロン層を優先して処理を実行する制御手順を例示する。
図15は、実施形態4の処理を例示するタイムチャートである。図15では、ニューロン層として、ニューロン層1から4が想定されている。ただし、実施形態4のニューロン層が4つのニューロン層に限定される訳ではない。バックワード方向の処理がニューロン層4から1までの順でそれぞれ終了すると、この終了順にメモリ転送処理が起動され、ノード間通信処理、集約処理が実行される。さらに、各ニューロン層の集約処理が完了後、メモリ転送(CPU11からGPU13)が実行される。
ところで、図15の例では、ニューロン層1の集約された重みの変化量がCPU11からGPU13にメモリ転送可能となったときに、まだ、ニューロン層2についても、集約された変化量のメモリ転送が起動されていない。例えば、ニューロン層2のメモリ転送処理(CPU11からGPU13)は、キューが登録された状態で未実行の状態となっている。実施形態4では、このような場合にニューロン層1の集約処理が終了すると、集約処理用のスレッドは、ニューロン層2よりもニューロン層1のメモリ転送を優先する。すなわち、CPU11の集約処理用のスレッドは、ニューロン層よりもニューロン層1が先に転送されるように、ニューロン層1の集約された変化量のメモリ転送のキューを登録する。そのようなキュー登録の結果、メモリ転送用スレッドはニューロン層2よりもニューロン層1の重みの変化量を先にメモリ転送する。
図16は、学習処理後のメモリ転送において、層1、2が層3よりも優先される処理例のタイムチャートである。このタイムチャートでは、バックワード方向の処理において、ニューロン層4のメモリ転送中に、ニューロン層3とニューロン層2の学習が完了している。このような場合、階層が入力データに近いニューロン層2がニューロン層3よりも優先されてメモリ転送が開始される。
さらに、ニューロン層2のメモリ転送中に、ニューロン層1の学習処理が完了する。すると、階層が入力データに近いニューロン層1がニューロン層3よりも優先されてメモリ転送が開始される。その後、ニューロン層3のメモリ転送が開始される。
入力データが入力されるニューロン層1を最も優先し、ニューロン層1に近い層の順に優先してメモリ転送を実行することで、その後のノード間通信、集約、反映処理は、ニューロン層1を最も優先し、ニューロン層1に近い層の順に優先する結果となる。したがって、現在のバッチの学習終了後、次のバッチでは、現在のバッチで学習結果がニューロン層1から順に優先して重みwに反映される。したがって、現在のバッチのすべてのニューロン層の処理が完了する前であっても、GPU13は次のバッチでニューロン層1から学習を開始でき、次のバッチ全体の開始時期が早まる。
図15、図16のように、階層が低いニューロン層に対する処理の優先順位を高くするため、処理順序の変更は、MPI ALLReduce階層ループの単位、もしくは実施
例3における重みのパラメータ細分化後の部分列単位で実行される。各処理スレッドは、次のスレッドへのキューの登録時、通常First In First Out(FIFO)方式でキューを登録する。一方、実施形態4では、各処理スレッドは、処理順序の変更条件(キューが優先順でない状態)が検知された場合には、優先順の位置にキューを登録する。
1つのノードの処理順序の変更により、処理順序が変更されたノードの処理順序が他ノードの処理順序とずれるとノード間転送がロックするため、計算ノード10同士が同期をとる。同期をとる手法としては、処理順序の変更を検知した計算ノード10がすべてのノードに処理順序の変更を配信し、各ノードは他ノードでの処理順序の変更に対して、同様に処理の順番を組み直す。
図17は、実施形態4の学習処理を例示するフローチャートである。この処理では、GPU13は、ニューロン層1からNについて、フォーワード方向の処理を実行する(S11C)。ただし、S11Cの処理は、前のバッチにおける全層についての学習処理が終了していなくても開始される点で実施形態1から3と相違する。そして、全層についてのフォーワード方向の処理が終了すると、GPU13は、バックワード方向にニューロン層Nから1のループ(LAYER ループ(L)開始=N、終了=1)の中で、S12、S13Cの処理を実行する。S12の処理は、実施形態1から3と同様である。
S13の処理では、GPU13は、ニューロン層のうち、入力側に近いニューロン層を優先して、CPU11にメモリ転送するとともに、集約処理を実行するCPU11のスレッドにキューを登録する(S13C)。S13Cの処理は、複数階層のうち、演算処理の実行の順序が早い階層の係数の変化量を優先して処理部に転送することの一例である。
したがって、実施形態では、GPU13は、各ニューロン層(L)でバックワード方向の処理が終了するごとに、優先順の制御を実行する。すなわち、GPU13は、バックワード方向の処理が終了したニューロン層(L)より上位のニューロン層(L+k)で、メモリ転送および集約処理が未実行のニューロン層がキューに残っていないか否かを判定する。そして、バックワード方向の処理が終了したニューロン層(L)より上位のニューロン層(L+k)がキューに残っている場合には、GPU13は、入力側に近い下位のニューロン層(L)を優先してキューを登録する。なお、このように、下位のニューロン層を優先するキューの登録は、CPU11がノード間通信およびメモリ転送(CPU11からGPU13)のキューを登録する場合も同様である。
そして、GPU13は、CPU11からの重み(w)の変化量(Δw)の集約処理の完了を待つ。ただし、実施形態4では、GPU13は、ニューロン層1層ずつ、集約処理の完了を待つ(S14C)。
その後、CPU11で集約処理された各ニューロン層(L)の重みの変化量(Δw)が、CPU11からGPU13にメモリ転送される。あるニューロン層(L)の集約処理が完了すると、GPU13は、当該ニューロン層において集約処理された変化量(Δw)を重み(w)に反映する(S15C)。すなわち、GPU13は、次のバッチのフォーワード処理およびバックワード処理で使用されるニューロン層(L)の重み(w)を更新する。
そして、GPU13は、全層の集約処理が完了したか否かを判定する(S16)。全層の集約処理が完了していない場合、GPU13は、次のバッチのニューロン層Lのフォーワード処理の開始が可能か否かを判定する(S17)。次のバッチのニューロン層Lのフォーワード処理の開始が可能でない場合、GPU13は、制御をS14Cに戻し、次のニ
ューロン層の集約処理の完了を待つ。
一方、次のバッチのニューロン層Lのフォーワード処理の開始が可能である場合、GPU13は、次のバッチのニューロン層Lのフォーワード処理を開始させる(S18)。S17の判定で、フォーワード処理の開始が可能との判定される場合は、複数階層のうち、実行の順序が先の階層で使用される係数に対して積算された変化量を基に次回以降の演算処理で使用される係数が更新された場合の一例である。S16からS18の処理を実行することは、実行の順序が後の階層で使用される係数に対する積算された変化量の反映を待たないで、次の演算処理における実行順が先の階層の層別処理を開始することの一例である。
次のバッチのニューロン層Lのフォーワード処理の開始が可能である場合とは、例えば、次のバッチのニューロン層1について、重みの変化量(Δw)が集約処理され、重み(w)への反映が完了している場合をいう。また、例えば、次のバッチのニューロン層1からL−1のフォーワード方向の処理が終了し、ニューロン層Lについて、重みの変化量(Δw)が集約処理され、重み(w)への反映が完了している場合をいう。このような場合には、GPU13は、現在処理中のバッチについて、全層の処理が終了していなくても、次のバッチのフォーワード方向の処理を開始させる。そして、GPU13は、処理をS14Cに戻す。
一方、全レイヤの集約処理が完了すると、GPU13は、学習の終わりか否かを判定する(S19)。計算ノード10について用意された未学習のバッチが残っている場合には、GPU13は、処理をS11Cに戻し、次のバッチを実行する。ただし、次のバッチにおけるニューロン層については、フォーワード処理は、S18による処理開始によって、すでに開始されているか、実行が完了しているものがあり得る。したがって、次のバッチでのS11Cの処理は、前のバッチについての全層についての学習処理が終了していなくても開始され、当該バッチでは、未実行のニューロン層から開始される。
なお、図17では、反映処理は、S15CでGPU13が実施したが、実施形態2のようにCPU11が反映処理を実行してもよい。また、図17の処理は、ニューロン層ごとに実行されたが、実施形態3のように、ニューロン層の重みwのパラメータ列を部分列に分割し、部分列ごとに実行されるようにしてもよい。
図18は、実施形態4の起動処理を例示するフローチャートである。この処理は、学習処理後のメモリ転送(GPU13からCPU11)、CPU11での集約処理、ノード間通信処理、反映処理、集約処理後のメモリ転送(CPU11からGPU13)を起動するときのキューの登録において適用可能である。なお、反映処理自体は、実施形態1のようにGPU13によって実行されてもよいし、実施形態2のようにCPU11によって集約処理とともに実行されてもよい。図18の処理の主体はGPU13またはCPU11である。また、この処理は、図14で説明した前処理(キュー発行スレッド)の処理である。そこで、以下の説明はキュー発行スレッドを主体として説明する。
キュー発行スレッドは、キュー発行対象のニューロン層と処理対象データを取得する(S41)。例えば、キュー発行スレッドは、キュー発行スレッドの処理が完了したときに、キュー発行対象のニューロン層と処理対象データを取得することになる。
次に、キュー発行スレッドは、現在登録済みのキューを読む(S42)。そして、キュー発行スレッドは、優先順位変更の要否を判定する(S43)。例えば、現在登録済みのキューのニューロン層がいずれも、キュー発行対象のニューロン層よりも、入力側に近い層(下位の層)があれば(S43でN)、キュー発行スレッドは、最後尾の位置にキュー
発行対象のニューロン層のキューを登録する(S44)。
一方、例えば、現在登録済みのキューに、キュー発行対象のニューロン層よりも、入力側から遠い層(上位の層)があれば(S43でY)、キュー発行スレッドは、当該上位の層より優先してキュー発行対象のニューロン層のキューを登録する(S45)。S43からS45の処理は、演算部が複数階層のうち、演算処理の実行の順序が早い階層の係数の変化量を優先して処理部に転送することの一例である。S43からS45の処理は、授受する処理の実行を要求することの一例でもある。S43からS45の処理は、処理部が、複数階層のうち演算処理の実行の順序が早い階層の係数を優先して演算部に次回以降の演算処理で使用される係数を更新させることの一例でもある。
そして、キュー発行スレッドは、処理順序の変更をMPI ALLReduceのアルゴリズムで他の計算ノード10に通知する(S46)。
以上述べたように、実施形態4によれば、入力側に近いニューロン層が優先して処理されるように、処理順序が変更される。1つのニューロン層Lの重みのパラメータ列(wL)が複数の部分列(wLk)に分割されて処理される実施形態3場合も同様である。このような処理順序の変更により、処理順序の変更が実施されたバッチの次のバッチにおいて、入力側に近い、階層の低いニューロン層が優先されて前のバッチの学習結果が重みに反映されることになる。すなわち、次のバッチでの入力データに近いニューロン層で使用される重みの更新を早めることができる。
そして、S16からS18のように、全層の集約処理が完了していない場合であっても、次のバッチにおいて下位のニューロン層のフォーワード処理の開始が可能である場合、GPU13は、次のバッチのニューロン層Lのフォーワード処理を開始させる。したがって、一部のニューロン層の重みに対して学習結果が反映されていなくても、次のバッチでの入力データに近いニューロン層での学習が早期に開始可能となる。
<実施形態5>
図19および図20を参照して、実施形態5を説明する。実施形態1から4では、1つのバッチにおいて、学習、集約、ノード間通信、反映処理が完了した後に、次のバッチが開始された。実施形態5においては、現在のバッチ(N番目のバッチ)の学習処理が完了すると、集約、ノード間通信、反映処理が実行される前に、次のバッチ(N+1番目のバッチ)の学習処理が起動される。そして、現在のバッチ(N番目のバッチ)の学習処理の結果は、次のさらに次のバッチ(N+2番目のバッチ)の前に重みに反映される。実施形態5におけるこのような手順以外の手順および構成要素は、実施形態1から4と同様である。そこで、実施形態5の構成要素のうち、実施形態1から4と同一の構成要素については、同一の符号を付してその説明を省略する。
図19に、実施形態5の処理のタイムチャートを実施形態4と対比して例示する。図19では、上側は実施形態4のタイムチャートであり、下側が実施形態5のタイムチャートである。実施形態5では、ニューロン層1から4までが想定されている。また、フォーワード方向のニューロン層1から4の学習処理はF1からF4のラベルで示されている。一方、バックワード方向のニューロン層4から1の学習処理はB4からB1のラベルで示されている。
図19のように、実施形態5では、N番目の学習処理(バッチ処理(N番目))が終了すると、N−1番目のバッチの学習処理の結果(集約済みの重みの変化量Δw)が重みwに反映される。そして、N+1番目のバッチに対する学習処理(バッチ処理(N+1番目))が開始する。図19のように、バッチ処理(N番目)に続いてバッチ処理(N+1番目)の学習処理が実行されることは、演算処理と積算された変化量を基に次回以降の演算
処理で使用される係数を更新する処理とが複数回繰り返して実行される場合の一例である。
なお、実施形態2で説明したように、N+1番目の学習処理が開始するまでに、N−1番目のバッチよる学習処理の結果が重みwに反映されるようにすればさらに時間は短縮できる。また、N+1番目の各ニューロン層の学習処理の開始までに、N−1番目のバッチによる各層(k)の学習処理の結果(集約済みのΔw(Lk))が各層の重みに反映されるようにすればさらに時間は短縮できる。なお、実施形態6とは異なり、実施形態5では、重み(w)を格納するバッファが1面だけ使用されるので、GPU13はバッチ処理(N番目)の学習処理後、直ちにバッチ処理(N+1番目)を開始できない。すなわち、GPU13は、バッチ処理(N+1番目)を開始する前に、学習処理の結果(集約済みのΔw(Lk))が各層の重みに反映する時間を要する。また、実施形態2のように、CPU11が学習処理の結果が各層の重みに反映する場合には、GPU13は、バッチ処理(N+1番目)を開始する前に、学習処理の結果が反映された重みをメモリ14に保持する時間を要する。
以上の処理の結果、実施形態5では、実施形態4と比較して、学習処理の結果の反映がバッチ1つ分遅れることになる。しかし、学習処理終了時に学習処理の結果を重みに反映しないため、実施形態4と比較して早期に次のバッチを開始できる。すなわち、実施形態4に対して、概ね少なくとも学習処理の結果を集約する時間が節約される。
なお、図19の処理は、例えば、図7において、S14、S15の処理を実行しないで、S16において、未処理のバッチの有無を判定し、次のバッチの学習処理を実行することで実行される。図19でGPU13がN+1番目の学習処理が終了すると、N+2番目のバッチに対する学習処理を開始することは、演算部が現在の演算処理による変化量を基に次回以降の演算処理で使用される係数が更新される前に次の演算処理を開始することの一例である。
図20は、実施形態5におけるCPU11の学習処理結果の集約処理のフローチャートを例示する。図20の集約処理は、例えば、N番目のバッチでの学習処理が終了後に、N+1番目の学習処理と並列に実行される。この処理では、まず、CPU11は、バッチが2番目より後のバッチか否かを判定する(S51)。バッチが1番目または2番目のバッチの場合、CPU11は、処理を終了する。
一方、バッチが2番目より後のバッチの場合、CPU11は、メモリ転送を実行し、N番目のバッチでの学習処理の結果を取得する(S52)。そして、メモリ転送したバッチの学習結果である(Δw)を集約する(S53)。そして、CPU11は、集約された(Δw)のGPU13へのメモリ転送を起動する(S54)。S54のメモリ転送を受け、N+2番目のバッチに対する学習処理の開始前に、GPU13は、集約された(Δw)を重み(w)に反映する。S52からS54の処理は、現在の演算処理による変化量を基に次々回の演算処理で使用される係数が更新されることの一例である。
なお、変化量(Δw)の集約と重み(w)への反映は、実施形態2のように、CPU11において行ってもよい。つまり、GPU13は、集約された変化量(Δw)が反映済みの重み(w)をメモリ転送で受け取るようにしてもよい。この場合には、反映処理は、単に、変化量(Δw)が反映済みの重み(w)をGPU13のメモリ14に保存する処理ということができる。
また、メモリ転送(GPU13からCPU11)、変化量(Δw)の集約処理、ノード間通信、重み(w)への反映処理、および、メモリ転送(CPU11からGPU13)は
、実施形態2のように、ニューロン層単位で行ってもよい。また、これらの処理は、実施形態3のように、ニューロン層単位よりも細かく分割したパラメータの部分列の単位で行ってもよい。
以上述べたように、実施形態5では、N番目バッチの学習処理が終了すると、N+1番目のバッチに対する学習処理と並行してN番目バッチの学習処理結果の集約処理が実行される。したがって、図19のように、実施形態1から4の場合と比較して、集約処理の時間が短縮される。
また、上記集約処理ともに、実施形態2と同様に、CPU11が反映処理を行った場合には、GPU13は、N+1番目のバッチの学習処理が開始するまでに、集約されたΔwを反映済みの重みをメモリ14に保存する処理を実行すればよい。この場合には、実施形態1から4の場合と比較して、集約処理および反映処理の時間が短縮される。
<実施形態6>
図21および図22を参照して実施形態6を説明する。実施形態5では、計算ノード10は、N番目の学習処理の結果をN+2番目のバッチの学習開始までに集約し、重み(w)に反映した。このような処理によって、計算ノード10は、N番目の学習処理の終了後、直ちにN+1番目の学習処理を開始できた。実施形態6では、計算ノード10には、重み(w)を格納するバッファが複数、例えば、2面設けられる。すなわち、計算ノード10は、学習結果である重みの変化量(Δw)が反映された重み(w)を格納するバッファを2面有することで、実施形態5と同様に、第N番目のバッチが終了した後、直ちに、第N+1番目のバッチの学習処理を開始できる。
図21に、実施形態6のタイムチャートを実施形態4と対比して例示する。図21のように、実施形態では、バッファwaに格納した重みを用いた学習処理とバッファwbに格納した重みを用いた学習処理が交互に実行される。例えば、奇数番目のバッチの学習終了後に、次の偶数番目のバッチの学習処理と並行して集約処理と反映処理が実行される。そして、奇数番目のバッチの学習処理の結果である重みの変化量(Δw)が反映された重み(w)がバッファwaに格納される。このとき、偶数番目のバッチの学習処理では、バッファwbに格納された重みが使用される。
一方、偶数番目のバッチの学習終了後に、次の奇数番目のバッチの学習処理と並行して集約処理と反映処理が実行される。そして、偶数番目のバッチの学習処理の結果である重みの変化量(Δw)が反映された重み(w)がバッファwbに格納される。このとき、奇数番目のバッチ学習処理では、バッファwaに格納された重みが使用される。
したがって、図21のように、バッファwaに格納した重みによる第N番目のバッチの学習処理終了後、直ちに、バッファwbに格納した重みによる第N+1番目のバッチの学習処理が開始される。したがって、実施形態4の場合と比較して、実施形態6では、学習処理終了後の学習処理の結果である重みの変化量(Δw)の集約処理と反映処理が次ぎのバッチの学習処理と並行して実施できる。実施形態6の場合も、実施形態5と同様、第N番目のバッチの学習処理の結果を反映した重みは第N+2番目のバッチの学習に使用される。図21のバッファwa、wbは、係数を格納するための2組以上の記憶部の一例である。
図22に、実施形態6における集約処理および反映処理のフローチャートを例示する。図22では、学習処理、集約反映処理、および格納処理の3つの処理が連携して実行される。GPU13が学習処理と格納処理を実行し、CPU11が集約反映処理を実行する。ここでは、N番目のバッチの学習処理が実行されるものとして説明する。
まず、GPU13は、N番目のバッチが奇数番目のバッチか否かを判定する(S60)。N番目のバッチが奇数番目のバッチの場合、GPU13は、バッファwaに格納した重みによる学習処理を実行する(S61)。一方、N番目のバッチが偶数番目のバッチの場合、GPU13は、バッファwbに格納した重みによる学習処理を実行する(S62)。S61、S62の処理は、第1の記憶部に格納した係数を用いて演算処理を実行することの一例である。そして、GPU13は、メモリ転送をCPU11に要求するとともに、集約反映処理のキューを登録する(S64)。そして、GPU13は当該バッチの学習処理を終了する。そして、GPU13はN+1番目のバッチの学習処理を実行する。
CPU11は、N番目のバッチの学習結果である重みの変化量(Δw)に対する集約処理と反映処理(以下、単に集約反映処理)のキューを受け付け、集約反映処理を実行する。CPU11による集約反映処理は、GPU13によるN+1番目のバッチの学習処理と並行して実行される。
まず、CPU11は、GPU13による学習結果である重みの変化量(Δw)をメモリ転送で取得する(S63)。そして、CPU11は、重みの変化量(Δw)を集約し、重み(w)に反映する(S65)。S65の処理は、実施形態2(図12)のS22からS26と同様である。そして、CPU11は、集約した重みの変化量(Δw)が反映された重み(w)をGPU13にメモリ転送するS66)。
GPU13は、メモリ転送を受けると、バッチが奇数番目のバッチか否かを判定する(S67)。バッチが奇数番目のバッチの場合、GPU13は、バッファwbに重みを格納する(S68)。一方、バッチが偶数番目のバッチの場合、GPU13は、バッファwaに重みを格納する(S69)。S68、S69の処理は、演算処理による変化量を基に更新した係数を第2の記憶部に格納することの一例である。なお、S67からS69の処理は、次のさらに次のバッチ(N+2番目のバッチ)の学習処理が開始されるまでに実行される。
以上述べたように、実施形態6においては、図21のように、バッファwaに格納した重みによる第N番目のバッチの学習処理終了後、直ちに、バッファwbに格納した重みによる第N+1番目のバッチの学習処理が開始できる。
<記録媒体>
コンピュータその他の機械、装置(以下、コンピュータ等)に上記いずれかの機能を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、Compact Disc(CD)−Read Only Memory(ROM)、CD−Recordable(R)、Digital Versatile Disk(DVD)、ブルーレイディスク、Digital Audio Tape(DAT)、8mmテープ、フラッシュメモリなどのメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスク、ROM(リードオンリーメモリ)等がある。さらに、Solid State Drive(SSD)は、コンピュータ等から取り外し可能な記録媒体としても
、コンピュータ等に固定された記録媒体としても利用可能である。
1 並列情報処理装置
10 計算ノード
11 CPU
12、14 メモリ
13 GPU
14 バス
15 ノード間インターフェース

Claims (10)

  1. 演算部と処理部とを有するノードを複数備えた並列情報処理装置において、
    それぞれのノードの演算部は、処理対象のデータに対する係数による演算処理の結果と前記処理対象のデータに対する前記演算処理の正解値との差分値を基に更新される前記係数の現在値によって前記処理対象のデータに対する前記演算処理を実行し、前記演算処理の結果と前記正解値との差分値を算出し、次回の演算処理において前記差分値を現在の差分値より小さくするための前記係数の変化量を算出し、算出した係数の変化量を前記処理部に転送するとともに、前記係数の変化量を前記並列情報処理装置内の他のノードとの間で授受する処理の実行を前記処理部に要求し、
    前記それぞれのノードの処理部は、前記演算部から転送された係数の変化量を前記並列情報処理装置の他のノードに送信するとともに前記他のノードで算出された係数の変化量を受信する通信処理と、前記演算部から転送された係数の変化量と前記他のノードで算出された係数の変化量とを積算する集約処理とを実行し、
    前記演算部および前記処理部の少なくとも一方が前記積算された係数の変化量を基に次回以降の演算処理で使用される係数を更新する並列情報処理装置。
  2. 前記演算処理は、所定順序で実行される複数階層の層別処理を有し、それぞれの階層の層別処理はそれぞれの階層の前の階層から入力されるデータに前記係数による演算を実行して次の階層に出力する処理であり、
    前記演算部は、それぞれの階層での前記層別処理の結果を基に前記それぞれの階層での前記係数の変化量を算出し、前記算出した係数の変化量を前記処理部に転送し、
    前記処理部は、前記それぞれの階層での前記係数の変化量に対する前記集約処理を2以上並列に実行する請求項1に記載の並列情報処理装置。
  3. 前記係数は、前記複数階層のそれぞれにおいて複数使用され、係数列を形成し、
    前記演算部は、前記複数階層のそれぞれの前記係数列を複数の部分列に分割して部分列ごとに前記変化量を前記処理部に転送するとともに、前記部分列ごとに前記授受する処理の実行を前記処理部に要求する請求項2に記載の並列情報処理装置。
  4. 前記演算部は、前記複数階層のうち、前記演算処理の実行の順序が早い階層の係数の変
    化量を優先して前記処理部に転送し、前記授受する処理の実行を要求する請求項2または3に記載の並列情報処理装置。
  5. 前記処理部は、前記複数階層のうち前記演算処理の実行の順序が早い階層の係数を優先して前記演算部に前記次回以降の演算処理で使用される係数を更新させる請求項2から4のいずれか1項に記載の並列情報処理装置。
  6. 前記演算部は、前記複数階層の層別処理を前記所定順に繰り返して実行し、前記複数階層のうち、実行の順序が先の階層で使用される係数に対して前記積算された変化量を基に前記次回以降の演算処理で使用される係数が更新された場合には、実行の順序が後の階層で使用される係数に対する前記積算された変化量の反映を待たないで、次の演算処理における前記実行順が先の階層の層別処理を開始する請求項2から5のいずれか1項に記載の並列情報処理装置。
  7. 前記演算処理と前記積算された変化量を基に前記次回以降の演算処理で使用される係数を更新する処理とが複数回繰り返して実行される場合に、前記演算部は、現在の演算処理による変化量を基に前記次回以降の演算処理で使用される係数が更新される前に次の演算処理を開始し、前記現在の演算処理による変化量を基に次々回の演算処理で使用される係数が更新される請求項2から6のいずれか1項に記載の並列情報処理装置。
  8. 前記係数を格納するための2組以上の記憶部を有し、
    前記演算部は第1の記憶部に格納した係数を用いて前記演算処理を実行し、前記演算処理による変化量を基に更新した係数を第2の記憶部に格納する請求項1から7のいずれか1項に記載の並列情報処理装置。
  9. 演算部と処理部とを有するノードを複数備えた並列情報処理装置における情報処理方法であって、
    それぞれのノードの演算部は、処理対象のデータに対する係数による演算処理の結果と前記処理対象のデータに対する前記演算処理の正解値との差分値を基に更新される前記係数の現在値によって前記処理対象のデータに対する前記演算処理を実行し、前記演算処理の結果と前記正解値との差分値を算出し、次回の演算処理において前記差分値を現在の差分値より小さくするための前記係数の変化量を算出し、算出した係数の変化量を前記処理部に転送するとともに、前記係数の変化量を前記並列情報処理装置内の他のノードとの間で授受する処理の実行を前記処理部に要求し、
    前記それぞれのノードの処理部は、前記演算部から転送された係数の変化量を前記並列情報処理装置の他のノードに送信するとともに前記他のノードで算出された係数の変化量を受信する通信処理と、前記演算部から転送された係数の変化量と前記他のノードで算出された係数の変化量とを積算する集約処理とを実行し、
    前記演算部および前記処理部の少なくとも一方が前記積算された係数の変化量を基に次回以降の演算処理で使用される係数を更新する情報処理方法。
  10. 演算部と処理部とを有するノードを複数備えた並列情報処理装置に実行させるためのプログラムであり、
    それぞれのノードの演算部に、処理対象のデータに対する係数による演算処理の結果と前記処理対象のデータに対する前記演算処理の正解値との差分値を基に更新される前記係数の現在値によって前記処理対象のデータに対する前記演算処理を実行し、前記演算処理の結果と前記正解値との差分値を算出し、次回の演算処理において前記差分値を現在の差分値より小さくするための前記係数の変化量を算出し、算出した係数の変化量を前記処理部に転送するとともに、前記係数の変化量を前記並列情報処理装置内の他のノードとの間で授受する処理の実行を前記処理部に要求することを実行させるプログラムと、
    前記それぞれのノードの処理部に、前記演算部から転送された係数の変化量を前記並列情報処理装置の他のノードに送信するとともに前記他のノードで算出された係数の変化量を受信する通信処理と、前記演算部から転送された係数の変化量と前記他のノードで算出された係数の変化量とを積算する集約処理とを実行させるプログラムとを含み、
    前記演算部および前記処理部の少なくとも一方に前記積算された係数の変化量を基に次回以降の演算処理で使用される係数を更新させるためのプログラム。
JP2016146731A 2016-07-26 2016-07-26 並列情報処理装置、情報処理方法、およびプログラム Expired - Fee Related JP6776696B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016146731A JP6776696B2 (ja) 2016-07-26 2016-07-26 並列情報処理装置、情報処理方法、およびプログラム
US15/633,861 US20180032911A1 (en) 2016-07-26 2017-06-27 Parallel information processing apparatus, information processing method and non-transitory recording medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016146731A JP6776696B2 (ja) 2016-07-26 2016-07-26 並列情報処理装置、情報処理方法、およびプログラム

Publications (2)

Publication Number Publication Date
JP2018018220A JP2018018220A (ja) 2018-02-01
JP6776696B2 true JP6776696B2 (ja) 2020-10-28

Family

ID=61009686

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016146731A Expired - Fee Related JP6776696B2 (ja) 2016-07-26 2016-07-26 並列情報処理装置、情報処理方法、およびプログラム

Country Status (2)

Country Link
US (1) US20180032911A1 (ja)
JP (1) JP6776696B2 (ja)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10387740B2 (en) * 2016-10-10 2019-08-20 Gyrfalcon Technology Inc. Object detection and recognition apparatus based on CNN based integrated circuits
US10261903B2 (en) * 2017-04-17 2019-04-16 Intel Corporation Extend GPU/CPU coherency to multi-GPU cores
CN109344840B (zh) * 2018-08-07 2022-04-01 深圳市商汤科技有限公司 图像处理方法和装置、电子设备、存储介质、程序产品
US11645534B2 (en) * 2018-09-11 2023-05-09 Intel Corporation Triggered operations to improve allreduce overlap
CN109359732B (zh) * 2018-09-30 2020-06-09 阿里巴巴集团控股有限公司 一种芯片及基于其的数据处理方法
US11526759B2 (en) * 2018-11-05 2022-12-13 International Business Machines Corporation Large model support in deep learning
JP2020077300A (ja) * 2018-11-09 2020-05-21 日本電信電話株式会社 分散深層学習システムおよびデータ転送方法
JP7227769B2 (ja) * 2019-01-10 2023-02-22 キヤノン株式会社 情報処理装置及びメモリ制御方法
JP6791540B2 (ja) * 2019-02-28 2020-11-25 Necプラットフォームズ株式会社 畳み込み演算処理装置および畳み込み演算処理方法
JP7370158B2 (ja) * 2019-04-03 2023-10-27 株式会社Preferred Networks 情報処理装置および情報処理方法
JP7208528B2 (ja) 2019-05-23 2023-01-19 富士通株式会社 情報処理装置、情報処理方法および情報処理プログラム
WO2020245864A1 (ja) * 2019-06-03 2020-12-10 日本電信電話株式会社 分散処理システムおよび分散処理方法
CN110889492B (zh) * 2019-11-25 2022-03-08 北京百度网讯科技有限公司 用于训练深度学习模型的方法和装置
CN111461290B (zh) * 2020-03-11 2023-09-22 北京百度网讯科技有限公司 模型参数更新方法及装置
GB2593756B (en) 2020-04-02 2022-03-30 Graphcore Ltd Control of data transfer between processing nodes

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07306845A (ja) * 1994-05-12 1995-11-21 Chubu Denki Kk 神経系学習装置用の並列処理装置
US20150324690A1 (en) * 2014-05-08 2015-11-12 Microsoft Corporation Deep Learning Training System

Also Published As

Publication number Publication date
JP2018018220A (ja) 2018-02-01
US20180032911A1 (en) 2018-02-01

Similar Documents

Publication Publication Date Title
JP6776696B2 (ja) 並列情報処理装置、情報処理方法、およびプログラム
US20230334294A1 (en) Multi-memory on-chip computational network
US11960934B2 (en) Systems and methods for improved neural network execution
CN110741342B (zh) 区块链交易提交排序
US20190180183A1 (en) On-chip computational network
EP2003548B1 (en) Resource management in multi-processor system
US20190179795A1 (en) Fast context switching for computational networks
US11294599B1 (en) Registers for restricted memory
US20210295168A1 (en) Gradient compression for distributed training
CN111465943B (zh) 一种集成电路和用于神经网络处理的方法
CN113469355B (zh) 分布式系统中的多模型训练管道
WO2017124649A1 (zh) 用于向量运算的数据读写调度器及保留站
US10614004B2 (en) Memory transaction prioritization
US20220229668A1 (en) Accelerator, method of operating the accelerator, and device including the accelerator
WO2022057310A1 (zh) 一种图神经网络训练的方法、装置及系统
TW202134861A (zh) 交錯記憶體請求以加速記憶體存取
US11790232B2 (en) Method and apparatus with neural network data input and output control
JP2019067084A (ja) 情報処理システム、情報処理装置、及び、転送先決定方法
CN114514536A (zh) 分布式系统中的神经网络训练
US11093276B2 (en) System and method for batch accessing
US20230127869A1 (en) Method and apparatus with process scheduling
WO2024001870A1 (zh) 一种人工智能模型的训练方法及相关设备
US20240069965A1 (en) Systems and methods for executing compute functions
US20240232630A1 (en) Neural network training in a distributed system
US20240005127A1 (en) Smart memory extension to processors

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170622

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190409

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200324

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200609

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200806

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200908

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200921

R150 Certificate of patent or registration of utility model

Ref document number: 6776696

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees