IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

特許7211069情報処理装置、情報処理プログラムおよび情報処理方法
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-01-16
(45)【発行日】2023-01-24
(54)【発明の名称】情報処理装置、情報処理プログラムおよび情報処理方法
(51)【国際特許分類】
   G06N 3/10 20060101AFI20230117BHJP
【FI】
G06N3/10
【請求項の数】 7
(21)【出願番号】P 2018241137
(22)【出願日】2018-12-25
(65)【公開番号】P2020102108
(43)【公開日】2020-07-02
【審査請求日】2021-09-09
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】白幡 晃一
【審査官】金田 孝之
(56)【参考文献】
【文献】特開2018-194974(JP,A)
【文献】伊藤祐貴 ほか,「GPUメモリ管理の実行時最適化による大規模深層学習の高速化」,情報処理学会研究報告ハイパフォーマンスコンピューティング(HPC),日本,一般社団法人情報処理学会,2018年07月23日,第2018-HPC-165巻, 第30号,pp. 1-9,ISSN 2188-8841
【文献】得居誠也,「ニューラルネットワーク研究のフロンティア ニューラルネットワークの実装 -深層学習フレームワークの構成とChainerの設計思想-」,人工知能,日本,一般社団法人人工知能学会,2016年03月01日,第31巻, 第2号,pp. 216-222,ISSN 2188-2266
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/02-3/10
(57)【特許請求の範囲】
【請求項1】
メモリと、
ニューラルネットワークに含まれる複数層の各々について予め推定した計算時間と、前記複数の層の各々の計算に関するデータの前記メモリへの転送時間とに基づき、第1の層の計算に関するデータを前記メモリへ格納するタイミングについて、前記第1の層よりも先に計算を行う一または複数の第2の層における計算時間の総和である総時間内に前記メモリへの転送が完了するタイミングを決定し、前記ニューラルネットワークの各層の計算を順に行う際に、決定した前記タイミングに基づいて前記第1の層の計算に関するデータを前記メモリへ格納する制御部と、
を有することを特徴とする情報処理装置。
【請求項2】
前記制御部は、前記第1の層に対して直近に計算を行う層から順に前記一または複数の第2の層における計算時間の総時間と、前記第1の層の計算に関するデータの転送時間とを比較し、前記計算時間の総時間よりも前記転送時間が小さくなる層の計算開始時を、前記第1の層の計算に関するデータを前記メモリへ格納するタイミングと決定する、
ことを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記制御部は、前記比較において前記計算時間の総時間よりも前記転送時間が小さくなる層が見つからない場合、前記ニューラルネットワークの各層の計算に先立って前記第1の層の計算に関するデータを前記メモリに格納する、
ことを特徴とする請求項2に記載の情報処理装置。
【請求項4】
前記計算は、バックワード処理に関する計算であることを特徴とする請求項1~3のいずれか一項に記載の情報処理装置。
【請求項5】
前記データは、ニューロン誤差又はパラメータ誤差であることを特徴とする請求項1~4のいずれか一項に記載の情報処理装置。
【請求項6】
ニューラルネットワークに含まれる複数層の各々について予め推定した計算時間と、前記複数の層の各々の計算に関するデータのメモリへの転送時間とに基づき、第1の層の計算に関するデータを前記メモリへ格納するタイミングについて、前記第1の層よりも先に計算を行う一または複数の第2の層における計算時間の総和である総時間内に前記メモリへの転送が完了するタイミングを決定し、
前記ニューラルネットワークの各層の計算を順に行う際に、決定した前記タイミングに基づいて前記第1の層の計算に関するデータを前記メモリへ格納する、
処理をコンピュータが実行することを特徴とする情報処理方法。
【請求項7】
ニューラルネットワークに含まれる複数層の各々について予め推定した計算時間と、前記複数の層の各々の計算に関するデータのメモリへの転送時間とに基づき、第1の層の計算に関するデータを前記メモリへ格納するタイミングについて、前記第1の層よりも先に計算を行う一または複数の第2の層における計算時間の総和である総時間内に前記メモリへの転送が完了するタイミングを決定し、
前記ニューラルネットワークの各層の計算を順に行う際に、決定した前記タイミングに基づいて前記第1の層の計算に関するデータを前記メモリへ格納する、
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、情報処理装置、情報処理プログラムおよび情報処理方法に関する。
【背景技術】
【0002】
近年、多層構造のニューラルネットワークを用いた機械学習が注目されている。このような多層構造のニューラルネットワークを用いた機械学習は、ディープラーニング(深層学習)とも呼ばれる。ディープラーニングは、ニューラルネットワークの多階層化が進んでおり、多くの分野で有効性が確認されている。例えば、ディープラーニングは、画像・音声の認識において人間に匹敵するほど高い認識精度を発揮している。
【0003】
ディープラーニングでは、計算量が膨大であるためアクセラレータによる高速化が行われている。アクセラレータ上のメモリ容量には限りがあり、このメモリ容量は、数TB(テラバイト)のホストメモリに比べて、例えば、~16GB(ギガバイト)程度のものである。このため、ある計算タイミングで使用されていないメモリ領域は、アクセラレータからホスト側に退避させる。そして、ニューラルネットワークの各層の計算開始時に、別の層のニューロンデータをホスト-アクセラレータ間で転送して再度読み込むようにすることで、アクセラレータにおけるメモリ使用量を削減している。
【先行技術文献】
【特許文献】
【0004】
【文献】特開2017-138867号公報
【文献】特開2009-80693号公報
【非特許文献】
【0005】
【文献】Minsoo Rhu, et al. "vDNN: Virtualized deep neural networks for scalable, memory-efficient neural network design." The 49th Annual IEEE/ACM International Symposium on Microarchitecture (MICRO-49), 2016
【文献】Tianqi Chen, et al. "Training deep nets with sublinear memory cost." arXiv preprint arXiv:1604.06174 (2016)
【文献】Song Han, Huizi Mao, and William J. Dally. "Deep compression: Compressing deep neural networks with pruning, trained quantization and huffman coding." arXiv preprint arXiv:1510.00149 (2015)
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、上記の従来技術では、ホスト-アクセラレータ間のデータ転送に要する転送時間が計算時間より大きくなる層で待ち時間が生じる場合があるという問題がある。
【0007】
具体的には、ディープラーニングは、ニューラルネットワークの多階層化により、使用メモリ量が大きくなっており、学習時に使用メモリ量がさらに増加する。例えば、教師あり学習で一般的に使用される誤差逆伝播法では、学習用のデータをニューラルネットワークに順伝播させて認識を行い、認識結果と正解とを比較して誤差を求める。そして、誤差逆伝播法では、認識結果と正解との誤差を認識時と逆方向にニューラルネットワークに伝播させ、ニューラルネットワークの各階層のパラメータを変更する。このため、学習時には、使用メモリ量が増加してデータ転送に要する転送時間が長くなり、転送時間が計算時間より大きくなる層で待ち時間が生じることがある。
【0008】
1つの側面では、データ転送による待ち時間が生じることを抑止しつつ、アクセラレータのメモリ使用量を削減することを可能とする情報処理装置、情報処理プログラムおよび情報処理方法を提供することを目的とする。
【課題を解決するための手段】
【0009】
第1の案では、情報処理装置は、メモリと、制御部とを有する。制御部は、ニューラルネットワークに含まれる複数の層のうち、いずれか一層又は所定数の層の各々について予め推定した計算時間と、いずれか一層又は所定数の層の各々の計算に関するデータのメモリへの転送時間とに基づき、第1の層の計算に関するデータをメモリへ格納するタイミングについて、第1の層よりも先に計算を行う一の層の計算時間または複数の第2の層における計算時間の総和である総時間内にメモリへの転送が完了するタイミングを決定する。また、制御部は、ニューラルネットワークの各層の計算を順に行う際に、決定したタイミングに基づいて第1の層の計算に関するデータを前記メモリへ格納する。
【発明の効果】
【0010】
本発明の1実施態様によれば、データ転送による待ち時間が生じることを抑止しつつ、アクセラレータのメモリ使用量を削減することができる。
【図面の簡単な説明】
【0011】
図1図1は、ディープラーニングの処理の流れの一例を模式的に示した図である。
図2-1】図2-1は、畳み込み演算の一例を模式的に示した図である。
図2-2】図2-2は、活性化関数の一例(ReLU)を模式的に示した図である。
図2-3】図2-3は、間引きの一例を模式的に示した図である。
図2-4】図2-4は、全結合の一例を模式的に示した図である。
図3図3は、プリフェッチを行う中間層を含むニューラルネットワークの計算の流れの一例を示す図である。
図4図4は、実施形態にかかる情報処理装置の機能的な構成を概略的に示した図である。
図5図5は、実施形態にかかる情報処理装置の動作例を示すフローチャートである。
図6図6は、プリフェッチのタイミングの決定方法の一例を示すフローチャートである。
図7図7は、メモリ量の計算方法の一例を示すフローチャートである。
図8図8は、メモリ使用領域の一例を示す説明図である。
図9図9は、DNN学習実行の一例を示すフローチャートである。
図10-1】図10-1は、プリフェッチの一例を説明する説明図である。
図10-2】図10-2は、プリフェッチの一例を説明する説明図である。
図10-3】図10-3は、プリフェッチの一例を説明する説明図である。
図11-1】図11-1は、推定値を用いたシミュレーションの一例を説明する説明図である。
図11-2】図11-2は、推定値を用いたシミュレーションの一例を説明する説明図である。
図12図12は、情報処理プログラムを実行するコンピュータの構成の一例を示す図である。
【発明を実施するための形態】
【0012】
以下、図面を参照して、実施形態にかかる情報処理装置、情報処理プログラムおよび情報処理方法を説明する。実施形態において同一の機能を有する構成には同一の符号を付し、重複する説明は省略する。なお、以下の実施形態で説明する情報処理装置、情報処理プログラムおよび情報処理方法は、一例を示すに過ぎず、実施形態を限定するものではない。また、以下の各実施形態は、矛盾しない範囲内で適宜組みあわせてもよい。
【0013】
[ディープラーニングの説明]
ディープラーニングについて説明する。図1は、ディープラーニングの処理の流れの一例を模式的に示した図である。
【0014】
ディープラーニングでは、識別対象に関する教師あり学習を行うことにより、ニューラルネットワークに自動的に識別対象の特徴を学習する。ディープラーニングでは、特徴を学習したニューラルネットワークを用いて識別対象を識別する。例えば、ディープラーニングでは、識別対象が写った大量の画像を学習用の画像として教師あり学習を行うことにより、画像に写った識別対象の特徴をニューラルネットワークに自動的に学習する。ディープラーニングでは、このように特徴を学習したニューラルネットワークを用いることで画像に写った識別対象を識別できる。
【0015】
脳には、多数のニューロン(神経細胞)が存在する。各ニューロンは、他のニューロンから信号を受け取り、他のニューロンへ信号を受け渡す。脳は、この信号の流れによって、様々な情報処理を行う。ニューラルネットワークは、このような脳の機能の特性を計算機上で実現したモデルである。ニューラルネットワークは、脳のニューロンを模したユニットを階層的に結合している。ユニットは、ノードとも呼ばれる。各ユニットは、他のユニットからデータを受け取り、データにパラメータ(重み)を適用して他のユニットへ受け渡す。ニューラルネットワークは、ユニットのパラメータを学習によって変化させて受け渡すデータを変化させることで様々な識別対象を識別(認識)できる。以下では、ニューラルネットワークで伝送されるデータをニューロンデータと呼ぶ。
【0016】
図1には、ニューラルネットワークの一例として、画像の認識に用いられる畳み込みニューラルネットワーク(CNN:Convolutional Neural Network)の一例が示されている。以下では、ニューラルネットワークとして、畳み込みニューラルネットワークにより画像の認識を行う場合を例に説明する。
【0017】
ニューラルネットワークは、階層構造を持った階層ニューラルネットワークであり、入力層と出力層との間に複数の中間層を有し得る。複数の中間層は、例えば、畳み込み層、活性化関数層、プーリング層、全結合層、及びソフトマックス層を含む。各層の数及び位置は、図1に例示したものに限定されず、要求されるアーキテクチャに応じて随時変更され得る。すなわち、ニューラルネットワークの階層構造や各層の構成は、識別する対象などに応じて、設計者が予め定めることができる。
【0018】
ニューラルネットワークでは、画像の識別を行う場合、図1に示すように、左から右へ各中間層の処理を行うことで画像に写った識別対象の特徴を抽出し、最後に出力層で画像に写った識別対象の識別(カテゴライズ)を行う。この処理をフォワード(FWD)処理又は認識処理と呼ぶ。一方、ニューラルネットワークでは、画像の学習を行う場合、識別した結果と正解との誤差を求め、図1に示すように、右から左へニューラルネットワークに逆伝播させ、各中間層のパラメータ(重み)を変更する。この処理をバックワード(BWD)処理又は学習処理と呼ぶ。
【0019】
次に、各中間層の演算について説明する。畳み込み層では、入力したニューロンデータの畳み込み演算(畳み込み処理)を行い、入力ニューロンデータの特徴を抽出する。図2-1は、畳み込み演算の一例を模式的に示した図である。図2-1の例では、入力したN×Nピクセルの画像の畳み込み演算をする場合を示している。畳み込み層では、N×Nピクセルの画像の各画素の値をそれぞれニューロンデータとして、それぞれパラメータが設定されたm×mのサイズのフィルタと畳み込み(convolution)を計算することで、次層への出力用のニューロンデータを作成する。
【0020】
活性化関数層では、畳み込み層で抽出された特徴を強調する。すなわち、活性化関数層では、活性化関数σに出力用のニューロンデータを通過させることで、発火(activation)をモデル化する。発火とは、ニューロンから出力される信号の値がある値を超えるときに出力される信号が他のニューロンに伝達される現象をいう。
【0021】
例えば、畳み込み層(Conv1, Conv2)では、以下の式(1)に示すような畳み込み演算を行い、その演算結果に対して、活性化関数層(ReLU1, ReLU2)では、以下の式(2)に示すような活性化関数σの演算を行う。
【0022】
【数1】
【0023】
ここで、yL-1 (i+a)(j+b)は、入力となるニューロンデータであり、図2-1に示すN×Nピクセルの画像(層L-1)yL-1の(i+a,j+b)の画素のデータである。wabは、図2-1に示すm×mのフィルタwの重みを表す各パラメータである。x ijは、畳み込み演算された(i,j)の画素のデータである。y ijは、x ijに活性化関数σを適用し、所定のバイアスbを加えた結果としてユニットU (層L)の出力となり、さらに次の層L+1の入力ともなるニューロンデータである。
【0024】
活性化関数層(ReLU1, ReLU2)で用いる活性化関数σとしては、非線形な活性化関数を用いることができ、例えば、ReLU(Rectified Linear Unit:ランプ関数)を用いることができる。図2-2は、活性化関数σの一例(ReLU)を模式的に示した図である。図2-2の例では、入力xがゼロ未満の場合、出力yにはゼロが出力される。また、入力xがゼロを超えた場合、出力yには入力xの値が出力される。
【0025】
プーリング層では、入力したニューロンデータの間引きを行う。図2-3は、間引きの一例を模式的に示した図である。例えば、N×Nピクセルの画像がニューロンデータとして入力される。プーリング層では、N×Nピクセルのニューロンデータから、(N/k)×(N/k)のニューロンデータに間引く。例えば、k×kの領域ごとに、最大値を取り出すMax-Poolingにより、間引きを行う。間引きは、その他、何れの手法で行ってもよい。例えば、k×kの領域の平均値を取り出すAverage-Poolingで、間引きを行ってもよい。また、プーリング層では、間引きを行うk×kの領域を一部重複させてもよく、重複させずに隣接させて間引きを行ってもよい。
【0026】
例えば、プーリング層(Pool1, Pool2)では、以下の式(3)に示すようなMax-Poolingを行う。
【0027】
【数2】
【0028】
ここで、関数maxは、図2-3に示す(i,j)の画素からそれぞれk画素の範囲の領域内で最大値のニューロンデータを出力する関数である。y i,Jは、ユニットU の出力となるニューロンデータである。
【0029】
全結合層では、抽出された特徴を結合して特徴を示す変数を生成する。すなわち、全結合層では、識別を行う対象数に応じて、入力したニューロンデータを全結合した全結合の演算を行う。例えば、N×Nピクセルの画像がニューロンデータとして入力される。全結合層は、N×Nピクセルのニューロンデータ全てを、それぞれ重み(パラメータ)と掛け合わせることで、次層への出力用のニューロンデータを作成する。
【0030】
ソフトマックス層は、全結合層で生成された変数を確率に変換する。すなわち、ソフトマックス層は、正規化するような活性化関数σに出力用のニューロンデータを通過させる演算を行うことで、発火をモデル化する。
【0031】
図2-4は、全結合の一例を模式的に示した図である。図2-4の例は、識別を行う対象数をi個とした場合にj個のニューロンデータをそれぞれ全結合してi個のニューロンデータを得る場合の一例を示している。例えば、全結合層(Fully-conn1)では、以下の式(4)に示すような全結合の演算を行い、その演算結果に対して、ソフトマックス層(Softmax)では、以下の式(5)に示すような演算を行う。
【0032】
【数3】
【0033】
ここで、yL-1 は、ユニットUL-1の出力であり、ユニットUの入力となるニューロンデータである。wL-1 jiは、yL-1 とy に対応した重みを表すパラメータである。x は、重み付け演算されたデータである。y は、x に活性化関数σを適用し、所定のバイアスb を加えた結果のユニットU の出力となるニューロンデータである。
【0034】
ソフトマックス層(Softmax)で用いる活性化関数σとしては、非線形な活性化関数を用いることができ、例えば、Softmax関数を用いることができる。ニューラルネットワークによる演算結果のニューロンデータは、実数となる。ソフトマックス層は、結果の識別を行いやすいように演算結果のニューロンデータを正規化する。
【0035】
例えば、ソフトマックス層(Softmax)は、Softmax関数などの活性化関数を用いて演算結果のニューロンデータを0~1の範囲に正規化する。Softmax関数は、ロジスティック関数を一般化したものであり、任意の実数を持つn次元ベクトルxを、(0,1)区間の実数で和が1になるようなn次元ベクトルσ(x)に正規化する。例えば、出力層では、以下の式(6)に示すSoftmax関数の演算を行う。
【0036】
【数4】
【0037】
これにより、ニューラルネットワークによる演算結果のn個のニューロンデータxは、それぞれの認識対象iである確率σ(x)の確率分布に変換される。ソフトマックス層(Softmax)による演算結果のニューロンデータは、出力層に出力され、出力層で識別が行われる。
【0038】
例えば、画像に写った識別対象が10種類の何れであるかの識別を行う場合、演算結果として10個のニューロンデータが全結合層からソフトマックス層を経由して出力層に出力される。出力層は、確率分布が最も大きいニューロンデータに対応する画像の種類を識別結果とする。また、学習を行う場合、出力層は、認識結果と正解とを比較して誤差を求める。例えば、出力層は、交差エントロピー誤差関数を利用して目的の確率分布(正解)との誤差を求める。例えば、出力層は、以下の式(7)に示す誤差関数の演算を行う。
【0039】
【数5】
【0040】
ここで、tは、目的の分布であり、認識対象iが正解である場合、1とし、その他の場合0とする。yは、ニューラルネットワークによる演算された認識対象iの確率σ(xi)である。
【0041】
ディープラーニングでは、教師あり学習を行うことにより、ニューラルネットワークに自動的に特徴を学習させる。例えば、教師あり学習で一般的に使用される誤差逆伝播法では、学習用のデータをニューラルネットワークに順伝播させて認識を行い、認識結果と正解とを比較して誤差を求める。そして、誤差逆伝播法では、認識結果と正解との誤差を認識時と逆方向にニューラルネットワークに伝播させ、ニューラルネットワークの各階層のパラメータを変更して最適解に近づけていく。
【0042】
次に、誤差の計算の一例を説明する。例えば、誤差逆伝播法では、認識時におけるニューロンデータの誤差として、以下の式(8)に示す誤差関数の偏微分の演算を行う。
【0043】
【数6】
【0044】
誤差逆伝播法では、出力層(Output)におけるパラメータの誤差の勾配を以下の式(9)から計算する。なお、Softmax関数の演算を行うソフトマックス層(Softmax)では、式(8)の結果が式(9)の誤差の勾配となる。
【0045】
【数7】
【0046】
また、誤差逆伝播法では、出力層(Output)での誤差から入力への誤差の勾配を部分微分を用いて計算する。例えば、ReLUなどの活性化関数の演算を行う活性化関数層(ReLU1, ReLU2)では、以下の式(10-1)から入力の誤差の勾配を計算する。σ’(x)は、σ(x)をxで偏微分したものであり、以下の式(10-2)から求められる。xは、認識時で使用した値を用いる。σ’(x)を、式(10-1)に代入すると誤差の勾配(∂E/∂x )が求まる。
【0047】
【数8】
【0048】
また、誤差逆伝播法では、演算にパラメータ(重み)を有する層についてはパラメータの誤差の勾配を計算する。例えば、式(4)に示す全結合の演算では、以下の式(11-1)からパラメータの誤差の勾配を計算する。また、式(1)に示す畳み込み演算では、以下の式(11-2)からパラメータの誤差の勾配を計算する。なお、偏微分の連鎖律を用いて計算すると得られるy は、認識時に使用した値を用いる。
【0049】
【数9】
【0050】
また、誤差逆伝播法では、前の層(L-1層)への誤差の勾配を算出する。例えば、前の層が全結合の演算を行う層である場合は、以下の式(12-1)から前の層への誤差の勾配を算出する。また、前の層が畳み込み演算を行う層である場合は、以下の式(12-2)から前の層への誤差の勾配を算出する。なお、偏微分の連鎖律を用いて計算すると得られるw ijは、認識時に使用した値を用いる。また、前の層がMax-Poolingを行うプーリング層(Pool1, Pool2)である場合は、認識時にk×kの領域の最大値を取った場所に対して誤差の勾配(∂E/∂x )を加算する。なお、k×kの領域のその他の場所に対しては、何も行わない。
【0051】
【数10】
【0052】
誤差の計算では、ニューラルネットワークに逆伝播させ、ニューラルネットワークの最上位の層である入力層(Input)に到達するまで各中間層の誤差の勾配の計算を繰り返す。例えば、出力層(Output)での誤差から入力への誤差の勾配を式(10-1)を用いて計算する。例えば、式(10-1)に示す入力の誤差は、下層が出力層の場合、式(9)の誤差の勾配を代入して求める。また、式(10-1)に示す入力の誤差は、下層が出力層以外の場合、式(12-1)、(12-2)から算出される誤差の勾配を代入して求める。また、例えば、式(11-1)に示すパラメータの誤差の勾配は、式(10-1)から算出される誤差を代入して求める。また、例えば、式(12-1)に示す前の層への誤差は、式(10-1)から算出される誤差を代入して求める。そして、誤差の計算では、誤差に応じて全層のパラメータを更新する。
【0053】
ニューラルネットワークは、図1図2-1~図2-4に例示したような画像認識に用いられるほか、音声認識、言語認識などの様々な認識処理に適用され得る。この認識処理の高精度化を図るために、ニューラルネットワークの層数が増加されニューラルネットワークが巨大化されることがある。ニューラルネットワークが巨大化されると、ディープラーニングの計算量が膨大になりやすいが、GPU(Graphics Processing Unit)や専用チップなどのアクセラレータ(アクセラレータボード)で演算を行うことにより、処理を高速化できる。このとき、アクセラレータ(アクセラレータボード)をホスト(マザーボード)と通信可能に接続してホスト上のメモリ(ホストメモリ)を用いながらディープラーニングを行うと、処理の速度が通信路のデータ転送の速度により制約される。アクセラレータとホストとのデータ転送はアクセラレータ内のデータ転送に比べて低速であるため、アクセラレータ内のローカルメモリ上で処理する方が、処理を高速化できる。
【0054】
アクセラレータ内のローカルメモリは、高い性能を出すために消費電力やチップ面積に限りがある。すなわち、アクセラレータ内のローカルメモリの記憶容量は、ホストメモリの記憶容量に比べて限られている。例えば、ホストメモリの記憶容量が数百GBであるのに対して、アクセラレータ内のローカルメモリの記憶容量は、16GBであり、可能なニューラルネットワークサイズが制限される。
【0055】
それに対して、ニューラルネットワークにおける少なくとも一部の中間層について、ある計算タイミングで使用されていないメモリ領域をアクセラレータからホスト側に退避させる。そして、ニューラルネットワークの各層の計算開始時に、別の層のニューロンデータをホスト-アクセラレータ間で転送(プリフェッチ)して再度読み込むようにする。
【0056】
具体的には、ニューラルネットワークの各層について予め推定した計算時間と、各層の計算に関するデータの、アクセラレータのメモリへの転送時間とに基づき、所定の層(第1の層)の計算に関するデータをアクセラレータのメモリへ格納するタイミングを決定する。より具体的には、第1の層よりも先に計算を行う一または複数の第2の層における計算時間の総時間内にメモリへの転送が完了するタイミングを決定する。そして、ニューラルネットワークの各層の計算を順に行う際に、決定したタイミングに基づいて第1の層の計算に関するデータをアクセラレータのメモリへ格納する。このようにプリフェッチすることで、データ転送による待ち時間が生じることを抑止しつつ、アクセラレータのメモリ使用量を削減することができる。なお、ニューラルネットワークの各層について予め推定した計算時間と、各層の計算に関するデータのアクセラレータのメモリへの転送時間ではなく、複数の層のいずれか一層のみ又は所定数の層の各々について予め推定した計算時間と、当該複数の層のいずれか一層のみ又は所定数の層の各々に対する計算に関するデータのアクセラレータのメモリへの転送時間とに基づき、所定の層の計算に関するデータをアクセラレータのメモリへ格納するタイミングを決定しても良い。
【0057】
図3は、プリフェッチを行う中間層を含むニューラルネットワークの計算の流れの一例を示す図である。図3の例は、ニューラルネットワークとして、畳み込みニューラルネットワークの学習を行う際の各データと処理の順序を示している。ニューラルネットワークは、各層が順に並んだ階層構造とされている。ニューラルネットワークは、入力層(Input)、第1の畳み込み層(Conv1)、第1の活性化関数層(ReLU1)、第2の畳み込み層(Conv2)、第2の活性化関数層(ReLU2)、第2のプーリング層(Pool2)、第1の全結合層(FC1:Fully-Conn1)、第3の活性化関数層(ReLU3)の各層を順に含む。ニューラルネットワークは、第2の全結合層(FC2:Fully-Conn2)、ソフトマックス層(Softmax)、出力層(Output)の各層をさらに順に含む。また、図3では、インプレイス処理を行う中間層が活性化関数層(ReLU1, ReLU2, ReLU3)である場合が例示されている。
【0058】
図3において、「ニューロン(x)」は、各層のニューロンデータのデータサイズを示している。「パラメータ(W、b)」は、各層のパラメータのデータサイズを示している。「ニューロン誤差(ΔX)」は、各層のニューロンデータの誤差の勾配のデータサイズを示している。「パラメータ誤差(ΔW,Δb)」は、各層のパラメータの誤差の勾配のデータサイズを示している。なお、矢印は、ニューラルネットワークの学習を行う際の処理の流れを示している。矢印に付した数字は、処理の順序を示している。
【0059】
図3に示すように、ニューラルネットワークの学習を行う場合、フォワード(FWD)処理(認識処理)が行われ、その後、バックワード(BWD)処理(学習処理)が行われる。認識処理では、学習対象の画像を識別する処理が行われる。すなわち、認識処理では、学習対象の画像に対して数字の「1」~「9」の順に各層の処理が行われ、処理結果が出力される。
【0060】
次に、認識処理の処理結果からパラメータを更新する学習処理が行われる。例えば、学習処理では、数字の「10」に示すように識別結果と正解とを比較して誤差を求める。Labelは、学習対象の画像の正解を示す。そして、学習処理では、認識結果と正解との誤差を、数字の「11」~「21」の順に各層の誤差の勾配を算出する処理が行われる。そして、学習処理では、数字の「22」に示すように各階層のパラメータを変更する処理が行われる。なお、パラメータの変更は、各階層ごとに誤差の勾配が算出されたタイミングで行ってもよい。
【0061】
ここで、FWD時に使用済みのメモリ領域をアクセラレータからホストのメモリに退避する。そして、BWDにおいて各層の計算時までに退避したデータをホストからアクセラレータにプリフェッチしてアクセラレータのメモリ使用量を削減する。具体的には、各層について予め推定したメモリへの転送時間と、計算時間とに基づいて、第1の層よりも先に計算を行う一または複数の第2の層における計算時間の総時間内に第1の層のプリフェッチが完了するタイミングを決定する。そして、決定したタイミングで第1の層のプリフェッチを行い、プリフェッチにおける転送時間が計算時間により隠蔽されるようにする。図3の例では、BWDのFC1層の計算時に、計算時間により転送時間が隠蔽されるように2層手前(ReLu2,Pool2)までプリフェッチしている。これにより、データ転送により待ち時間が生じることを抑止できる。
【0062】
[情報処理装置の構成]
次に、上記のディープラーニングに関する処理を実行する情報処理装置について説明する。図4は、実施形態にかかる情報処理装置の機能的な構成を概略的に示した図である。
【0063】
図4に示す情報処理装置10は、ディープラーニングを用いて各種の対象の認識を行う認識装置である。例えば、情報処理装置10は、サーバコンピュータなどのコンピュータである。情報処理装置10は、1台のコンピュータとして実装してもよく、また、複数台のコンピュータによるコンピュータシステムとして実装してもよい。すなわち、以下に説明するディープラーニングは、複数台のコンピュータによる情報処理システムで処理を分散して実行してもよい。なお、本実施形態では、情報処理装置10を1台のコンピュータとした場合を例として説明する。また、本実施形態では、情報処理装置10が、画像の認識を行う場合を例に説明する。
【0064】
図4に示すように、情報処理装置10は、記憶部20と、マザーボード21と、アクセラレータボード22とを有する。なお、情報処理装置10は、上記の機器以外の他の機器を有してもよい。例えば、情報処理装置10は、各種の操作を受け付ける入力部や各種の情報を表示する表示部などを有してもよい。
【0065】
記憶部20は、ハードディスク、SSD(Solid State Drive)などの記憶装置である。マザーボード21は、情報処理装置10の主機能を担う部品が装着された基板である。アクセラレータボード22は、情報処理装置10の処理能力を高めるために、追加して利用するハードウェアが搭載された基板である。アクセラレータボード22は、複数設けてもよい。なお、本実施形態では、アクセラレータボード22を1つ設けた場合を例として説明する。
【0066】
記憶部20とマザーボード21とアクセラレータボード22は、データを転送可能なバス23で接続されている。例えば、記憶部20とマザーボード21は、SATA(Serial ATA)、SAS(Serial Attached SCSI)などのバス23Aで接続されている。また、マザーボード21とアクセラレータボード22は、PCI(Peripheral Component Interconnect)Expressなどのバス23Bで接続されている。
【0067】
ディープラーニングは、演算を大量に行う。このため、情報処理装置10では、GPU(Graphics Processing Unit)や専用チップなどのアクセラレータを用いたアクセラレータボード22で演算を行うことにより、処理の高速化を行っている。
【0068】
記憶部20は、OS(Operating System)や、後述する各種の処理を実行する各種プログラムを記憶する。さらに、記憶部20は、各種情報を記憶する。例えば、記憶部20は、入力データ40と、定義情報41と、パラメータ情報42と、スナップショット情報43とを記憶する。なお、記憶部20は、その他の各種の情報を記憶してもよい。
【0069】
入力データ40は、ニューラルネットワークへの入力対象とされたデータである。例えば、教師あり学習を行う場合、入力データ40は、学習用のデータである。例えば、画像に写った識別対象の特徴をニューラルネットワークに学習させる場合、入力データ40は、様々な識別対象が写った大量の画像と、識別対象が何であるかの正解を示すラベルを対応付けたデータである。また、ニューラルネットワークによる識別を行う場合、入力データ40は、識別対象とされたデータである。例えば、画像に写った識別対象を識別する場合、入力データ40は、識別対象とされた画像のデータである。
【0070】
定義情報41は、ニューラルネットワークに関する情報を記憶したデータである。例えば、定義情報41には、ニューラルネットワークの階層構造や各階層のユニットの構成、ユニットの接続関係などのニューラルネットワークの構成を示す情報が記憶される。画像の認識を行う場合、定義情報41には、例えば、設計者等によって定められた畳み込みニューラルネットワークの構成を示す情報が記憶される。また、定義情報41には、ニューラルネットワークの各層について予め計測した計算時間と、各層の計算に関するデータの、アクセラレータボード22のメモリ60への転送時間とを示す情報が記憶される。また、定義情報41には、上記の計算時間および転送時間の予測に関する計算モデルの情報が記憶されてもよい。
【0071】
パラメータ情報42は、ニューラルネットワークの各層の演算で用いられる重み値などのパラメータの値を記憶したデータである。パラメータ情報42に記憶されたパラメータの値は、初期状態では、所定の初期値とされ、学習に応じて更新される。
【0072】
スナップショット情報43は、入力データ40を所定の件数ごとに分けて、学習のバッチ処理を繰り返す場合、途中の処理状態に関する情報を記憶したデータである。
【0073】
マザーボード21は、メモリ30と、演算部31とを有する。
【0074】
メモリ30は、例えば、RAM(Random Access Memory)などの半導体メモリである。メモリ30は、演算部31で実行される処理の情報や処理で使用される各種の情報を記憶する。
【0075】
演算部31は、情報処理装置10全体を制御するデバイスである。演算部31としては、CPU(Central Processing Unit)、MPU(Micro Processing Unit)等の電子回路を採用できる。演算部31は、各種のプログラムが動作することにより各種の処理部として機能する。例えば、演算部31は、全体制御部50と、メモリ量計算部51とを有する。
【0076】
全体制御部50は、ディープラーニングに関する処理全体を制御する。全体制御部50は、ディープラーニングの処理開始の指示を受け付けると、記憶部20からディープラーニングに関する各種のプログラムや各種情報を読み出す。例えば、全体制御部50は、ディープラーニングの処理を制御する各種のプログラムを読み出す。また、全体制御部50は、定義情報41、パラメータ情報42を読み出す。全体制御部50は、定義情報41、パラメータ情報42に基づいてニューラルネットワークの構成を特定し、ニューラルネットワークの認識処理、学習処理の処理順序を決定する。なお、全体制御部50は、学習処理を開始するタイミングで学習処理の処理順序を決定してもよい。
【0077】
全体制御部50は、記憶部20から入力データ40を所定の件数ごとに分けて読み出す。そして、全体制御部50は、読み出した入力データ40や認識処理、学習処理に関する情報をアクセラレータボード22に転送してメモリ60に格納する。そして、全体制御部50は、アクセラレータボード22を制御して、アクセラレータボード22にニューラルネットワークの認識処理、学習処理を実行させる。
【0078】
例えば、全体制御部50は、ニューラルネットワークの各層について予め推定したメモリへの転送時間と、計算時間とを定義情報41より取得する。次いで、全体制御部50は、取得した転送時間と、計算時間とに基づいて、第1の層よりも先に計算を行う一または複数の第2の層における計算時間の総時間内に第1の層のプリフェッチが完了するタイミングを決定する。そして、全体制御部50は、決定したタイミングで第1の層のデータをアクセラレータボード22のメモリ60に格納(プリフェッチ)し、プリフェッチにおける転送時間が計算時間により隠蔽されるようにする。
【0079】
メモリ量計算部51は、ディープラーニングでデータの記憶に使用される使用メモリ量を算出する。例えば、メモリ量計算部51は、定義情報41に基づいて、ニューラルネットワークの各層で、ニューロンデータ、パラメータ、ニューロンデータの誤差およびパラメータの誤差の記憶に使用される使用メモリ量を算出する。
【0080】
アクセラレータボード22は、メモリ60と、演算部61とを有する。
【0081】
メモリ60は、例えば、RAMなどの半導体メモリである。メモリ60は、演算部61で実行される処理の情報や処理で使用される各種の情報を記憶する。
【0082】
演算部61は、アクセラレータボード22を制御するデバイスである。演算部61としては、GPU(Graphics Processing Unit)、ASIC(Application Specific Integrated Circuit)、FPGA(Field-Programmable Gate Array)等の電子回路を採用できる。演算部61は、全体制御部50からの制御に応じて、各種のプログラムが動作することにより各種の処理部として機能する。例えば、演算部61は、認識制御部70と、学習制御部71とを有する。
【0083】
認識制御部70は、ニューラルネットワークの認識処理を制御する。例えば、認識制御部70は、マザーボード21から格納されたデータをニューロンデータとして、処理順序に従い認識処理を実行する。認識制御部70は、ニューロンデータに対して、ニューラルネットワークの各層の演算を行い、当該ニューラルネットワークの各層のニューロンデータとパラメータをそれぞれメモリ60に保持する。
【0084】
学習制御部71は、ニューラルネットワークの学習処理を制御する。例えば、学習制御部71は、マザーボード21から格納されたデータをもとに、認識処理による識別結果と正解との誤差を求め、処理順序に従い、誤差をニューラルネットワークに伝播させる学習処理を実行する。学習制御部71は、誤差からニューラルネットワークの各層の誤差の勾配を算出してパラメータを学習する。
【0085】
[処理の流れ]
次に、情報処理装置10が実行する情報処理方法における処理の流れについて説明する。図5は、実施形態にかかる情報処理装置10の動作例を示すフローチャートである。この情報処理方法は、所定のタイミング、例えば、管理者から処理開始が指示されたタイミングで実行される。
【0086】
図5に示すように、処理が開始されると、全体制御部50は、アクセラレータボード22のデバイス情報(メモリ60の容量、空き領域など)を取得する(S1)。次いで、全体制御部50は、定義情報41、パラメータ情報42を読み出して、ハイパーパラメータ(学習率、モーメンタム、バッチサイズ、最大反復回数など)と、DNN(ディープラ・ニューラル・ネットワーク)の構成を読み込む(S2)。例えば、全体制御部50は、学習実行の繰り返し回数max_iterを取得する。また、全体制御部50は、定義情報41、パラメータ情報42に基づいて、ニューラルネットワークの構成を特定し、DNNの層数nを取得する。また、メモリ量計算部51は、定義情報41に基づいて、認識および学習の際にニューラルネットワークの各層で、ニューロンデータおよびパラメータの誤差の記憶に使用される使用メモリ量のデータサイズを算出する。
【0087】
次いで、全体制御部50は、定義情報41を参照し、ニューラルネットワークの各層の計算時間と、転送時間を推定する(S3)。この計算時間と、転送時間について、全体制御部50は、予め計測しておいたデータを定義情報41より読み出して推定してもよい。また、全体制御部50は、公知の計算モデルを用いて計算時間および転送時間の推定を行ってもよい。具体的には、定義情報41より計算モデルに関する情報を読み出し、読み出した計算モデルを用いて各層の計算時間と、転送時間を推定する。
【0088】
例えば、計算モデルによる所定の層(i)における計算時間(C)と、転送時間(m)との推定は、次の式(13)、(14)のとおりとなる。
【0089】
【数11】
【0090】
【数12】
【0091】
ここで、αH2D、αconvは、メモリ・演算器のスループットを表す値である。βH2D、βconvは、メモリ・演算器のレイテンシを表す値である。このαH2D、βH2D、αconv、βconvの値は、実行環境で事前に測定された値が定義情報41に記憶される。また、Cにおける上の添字は、層の種類(畳み込み層(conv)、プーリング層(pool)、全結合層(fc)、ソフトマックス層(softmax)…)を示す。
【0092】
次いで、全体制御部50は、推定した各層(i)における計算時間(C)と、転送時間(m)とに基づき、ニューラルネットワークの各層(i)におけるプリフェッチのタイミングを決定する(S4)。
【0093】
なお、本実施形態において、各層のプリフェッチは、ニューロン(x)のデータ(図3参照)を対象とする。このように、ニューロン(x)をプリフェッチの対象とするのは、ニューロン(x)の方がパラメータ(W、b)に比べてデータサイズが大きいことが多いためである。なお、パラメータ(W、b)についても、ニューロン(x)と同様にプリフェッチを行ってもよい。ただし、パラメータ(W、b)をプリフェッチする場合は、BWDの後にWとΔW、bとΔbを用いてパラメータ更新をすることとなる。このため、各層のBWDの直後にその層のパラメータ更新をするか、全層のBWDが終了した後にパラメータの更新のために再度W、ΔW、b、Δbをメモリ60に読み込むこととなる。
【0094】
なお、全体制御部50は、最終層のBWDのニューロン(x)は、メモリ60への退避対象外(学習開始前に確保済み)とする。1層目のBWDの計算時間はプリフェッチに影響を与えないものとする。
【0095】
ここで、各層(i)におけるプリフェッチのタイミング決定について詳細に説明する。図6は、プリフェッチのタイミングの決定方法の一例を示すフローチャートである。
【0096】
図6に示すように、アクセラレータボード22のメモリ60については、Mdeviceをデバイスのメモリ容量とする。また、Moffは、メモリ退避可能なメモリ量とする。Mloadは、メモリ退避対象外のニューロン(x)のメモリ量であり、Σ(メモリ退避対象外のx)とする。よって、ニューロン(x)に使用可能なメモリ量(M)は、Moff+Mloadである。また、Mparamは、ニューロン(x)以外のパラメータのメモリ量である。ニューロン(x)以外のパラメータ等は、メモリ60に予め格納されていることから、Mparam=Σ(W+b+ΔW+Δb)とする。
【0097】
処理が開始されると、全体制御部50は、処理に関する変数の初期化を行う(S11)。具体的には、全体制御部50は、転送時間(m)の層番号(i)、計算時間(c)の層番号(k)を初期化する。例えば、転送時間(m)の層番号(i)については、BWDにおいて各層(「Conv1」、「Conv2」、「Pool2」、「FC1」、「ReLU3」、「FC2」、「Softmax」、「Output」(図3参照))を左から順にプリフェッチの対象として、i=1とする。また、計算時間(c)の層番号(k)については、プリフェッチの対象とする層より先に計算を行う層(図3の例ではBWDにおいて右側の層)が対象となるので、i=1に対してk=2とする。
【0098】
また、全体制御部50は、ニューロン(x)に使用可能なメモリ量(M)、メモリ退避対象外のニューロン(x)のメモリ量(Mload)、j層目の開始時にプリフェッチするニューロン(x)の記憶(pre(j))を初期化する。例えば、Mは、Mdevice-Σ(W+b+ΔW+Δb)とする。また、MloadはMload=xとする。pre(j)は、pre(j)=0(∀j)とする。
【0099】
次いで、全体制御部50は、退避可能なメモリ領域(Moff)を計算する(S12)。具体的には、全体制御部50は、Moff←M-Mload-max{x+Δx+Δxj+1}+Σl≧j{xl’=pre(l)|l’<j}を計算する。
【0100】
次いで、全体制御部50は、x>Moffであるか否かを判定し、i層目のニューロン(x)のデータ量が退避可能なメモリ量を上回っているか否かを判定する(S13)。
【0101】
i層目のデータ量が退避可能なメモリ量を上回っている場合(S13:YES)、全体制御部50は、x≦Moffを満たすまでMloadに含まれるニューロン(x)をメモリ退避対象に変更する(S14)。具体的には、メモリ退避対象外のニューロン(x)をメモリ退避・プリフェッチ対象(メモリ退避可能)として変更する。このS14の処理を行うことで、i層目のニューロン(x)に対するBWDがメモリ不足となることがないようにする。
【0102】
次いで、全体制御部50は、i層目のニューロン(x)の転送時間(m)と、i層よりも先に計算を行うk層目の計算時間(c)とを比較し、m≦cであるか否かを判定する(S15)。
【0103】
≦cであり、転送時間のほうが計算時間よりも小さい場合(S15:YES)、計算時間で転送時間が隠蔽される。よって、全体制御部50は、k層目のBWD開始時にニューロン(x)をプリフェッチするものと記憶する(S16)。
【0104】
次いで、全体制御部50は、k層目のBWDで隠蔽可能なプリフェッチの転送時間を計算時間(c)より差し引き(c←c-m)、iをインクリメント(i←i+1)する(S17)。
【0105】
次いで、全体制御部50は、i=kであるか否かを判定する(S18)。メモリ転送の層番号(i)が計算の層番号(k)まで達した場合(S18:YES)、これ以上k層目のBWDで隠蔽するものはないので、全体制御部50は、計算の層番号(k)を1つ進め(S19)、S23へ処理を進める。メモリ転送の層番号(i)が計算の層番号(k)まで達していない場合(S18:NO)、全体制御部50は、計算の層番号(k)を進めることなくS23へ処理を進める。
【0106】
S15において、転送時間のほうが計算時間よりも大きい場合(S15:NO)、計算時間で転送時間が隠蔽されないため、より手前の層(k+1かそれよりも手前)からプリフェッチを開始することとなる。このとき、k層目のBWDの計算時間も隠蔽時間に含まれることになるので、全体制御部50は、隠蔽すべき転送時間(m)からk層目の計算時間(c)を差し引き(m←m-c)、計算の層番号(k)をインクリメント(k←k+1)する(S20)。
【0107】
次いで、全体制御部50は、k=nであるか否かを判定する(S21)。一番手前の層(k=n)から転送時間が隠蔽されない場合(S21:YES)、計算時間による隠蔽が無理である。この場合、全体制御部50は、ニューロン(x)をBWD開始前にメモリ領域を確保して、メモリ退避対象外としてメモリ60に記憶する(S22)。このとき、全体制御部50は、Mload←Mload+x、k←i+2、i←i+1とする。
【0108】
なお、k=nでない場合(S21:NO)、全体制御部50は、S22の処理をスキップしてS23へ処理を進める。
【0109】
S23において、全体制御部50は、i=nであるか否かを判定する。i=nであり、転送時間の層番号(i)が一番手前の層(n)まで到達した場合(S23:YES)、全体制御部50は、処理を終了する。到達していない場合(S23:NO)、全体制御部50は、S12に戻り処理を継続する。
【0110】
図5に戻り、S4に次いで、メモリ量計算部51は、学習に必要なメモリ量を計算する(S5)。図7は、メモリ量の計算方法の一例を示すフローチャートである。
【0111】
図7に示すように、処理が開始されると、メモリ量計算部51は、層番号(i)をi←1とし、i層目にBWD時にプリフェッチするメモリ量を計算する(S31)。具体的には、メモリ量計算部51は、pre(i)←i層目のBWD時にプリフェッチするxの総和として計算する。
【0112】
次いで、メモリ量計算部51は、i層目のBWDのメモリ使用量(m_bwd)を計算する(S32)。具体的には、メモリ量計算部51は、m_bwdi=x+Δx+Δxi+1+Σj≧i{xj’=pre(j)|j’<i}として計算する。
【0113】
次いで、メモリ量計算部51は、iをインクリメント(i←i+1)し、i<nであるか否かを判定する(S33)。i<nである場合(S33:YES)、メモリ量計算部51は、S32へ処理を戻す。
【0114】
i<nでない場合(S33:NO)、メモリ量計算部51は、学習実行に必要なメモリ量を計算し(S34)、処理を終了する。具体的には、メモリ量計算部51は、m=max{m_bwd}+Σ(メモリ退避対象外のx)+Σ(W+b+ΔW+Δb)として計算する。
【0115】
上記のメモリ量の計算では、退避対象とするメモリ領域のうち、(BWD時に)最大のメモリ使用量となる層でのメモリ領域の総和が求められる。図8は、メモリ使用領域の一例を示す説明図である。図8では、BWD3層目計算時におけるメモリ使用領域を例示している。図8の例において、BWD3層目計算時におけるメモリ使用領域の総和は、x+x+x+Δx+Δxとなる。
【0116】
図5に戻り、全体制御部50は、学習に必要なメモリ量をメモリ60より確保する(S6)。ここで、全体制御部50は、S5において計算したメモリ使用量をメモリ60より一括で確保する。そして、全体制御部50は、確保したメモリ60のメモリ領域から、パラメータおよび退避対象外(学習開始前に確保)とするメモリ領域へのポインタを静的に割り当てる。なお、退避対象とするメモリ領域については、予め確保されたメモリ領域から、そのメモリ領域の使用時(プリフェッチ時)にポインタを割り当て、使用後にポインタを開放(メモリ退避)するものとする。
【0117】
次いで、全体制御部50は、確保されたメモリ領域を用いてメモリ退避およびプリフェッチを行い、アクセラレータボード22によるDNN学習を実行する(S7)。
【0118】
図9は、DNN学習実行の一例を示すフローチャートである。図9に示すように、処理が開始されると、全体制御部50は、学習実行の回数をカウントするためのパラメータ(iter)を1に初期化する。
【0119】
次いで、全体制御部50は、記憶部20から入力データ40を所定の件数ごとに分けて読み出す。そして、全体制御部50は、読み出したデータや認識処理、学習処理に関する情報をアクセラレータボード22にオフロードし、ニューラルネットワークの学習を開始し(S41)、認識処理(S42~S46)と学習処理(S47~S54)とを行う。
【0120】
認識処理が開始されると、認識制御部70は、層数をカウントするためのパラメータiを1に初期化し、マザーボード21からオフロードされたデータから未処理の1件分のデータを読み出す。そして、認識制御部70は、読み出したデータをニューロンデータとし、ニューロンデータに対して、ニューラルネットワークの順にi層目のFWDを実行する(S42)。
【0121】
次いで、認識制御部70は、i層目のニューロン(x)がメモリ退避対象であるか否かを判定する(S43)。S22において、メモリ退避対象外と記憶されていなければメモリ退避対象である。メモリ退避対象である場合(S43:YES)、認識制御部70は、メモリ60におけるニューロン(x)のメモリ領域を開放し(S44)、S45へ処理を進める。メモリ退避対象外である場合(S43:NO)、認識制御部70は、ニューロン(x)のメモリ領域を開放することなく、S45へ処理を進める。
【0122】
S45において、認識制御部70は、i<nであるか否かを判定する(S45)。i<nである場合(S45:YES)、認識制御部70は、iをインクリメントしてS42へ処理を戻し、次の層に関するFWDを継続する。
【0123】
i<nでない場合(S45:NO)、認識制御部70は、Forwardの最終層の結果(誤差の値)を出力し(S46)、認識処理を終了する。
【0124】
学習処理が開始されると、学習制御部71は、BWDにおける計算対象のi層について、前層でのメモリプリフェッチが完了するまで処理の開始を待つ(S47)。ここで、全体制御部50は、i層目のBWD時に指定されたニューロン(x)をメモリ60にプリフェッチする(S48)。
【0125】
学習制御部71は、i層目のBWDを(メモリプリフェッチと非同期的に)実行する(S49)。次いで、学習制御部71は、メモリ60におけるΔxi+1のメモリ領域を開放し(S50)、ニューロン(x)がメモリ退避対象であるか否かを判定する(S51)。
【0126】
S22において、メモリ退避対象外と記憶されていなければメモリ退避対象である。メモリ退避対象である場合(S51:YES)、学習制御部71は、メモリ60におけるニューロン(x)のメモリ領域を開放し(S52)、S53へ処理を進める。メモリ退避対象外である場合(S51:NO)、学習制御部71は、ニューロン(x)のメモリ領域を開放することなく、S53へ処理を進める。
【0127】
S53において、学習制御部71は、iをデクリメントし、i>0であるか否かを判定する(S53)。i>0である場合(S53:YES)、学習制御部71は、S47へ処理を戻し、次の層に関するBWDを継続する。
【0128】
i>0でない場合(S53:NO)、学習制御部71は、ニューラルネットワークの全層について、各層ごとに、パラメータの誤差の勾配に基づいて、パラメータを更新する(S54)。
【0129】
次いで、全体制御部50は、パラメータiterが学習実行の繰り返し回数max_iter未満であるか否かを判定する(S55)。繰り返し回数未満である場合(S55:YES)、全体制御部50は、パラメータiterに1を加算してS41へ処理を戻す。繰り返し回数未満でない場合(S55:NO)、全体制御部50は、処理を終了する。
【0130】
図5に戻り、S7に次いで、全体制御部50は、S7の処理結果をスナップショット情報43およびパラメータ情報42に書き込み(S8)、処理を終了する。
【0131】
図10-1~図10-3は、プリフェッチの一例を説明する説明図である。なお、図10-1~図10-3における網掛けの四角は、どの層のBWD開始時にどの層のニューロン(x)がプリフェッチされるかの対応関係を表している。また、黒塗りの四角は、メモリ退避対象外(事前にロードし、メモリ60上に保持する)のデータを示す。
【0132】
図10-1に示すように、ケースC1では、どの層においても、転送時間(1)が計算時間(2)で隠蔽される。したがって、ケースC1では、各層の1層手前でプリフェッチが行われる。
【0133】
図10-2に示すように、ケースC2では、転送時間(2)より計算時間(1)が短いので、各層の1層手前でのプリフェッチでは転送時間が計算時間で隠蔽されない。この場合、情報処理装置10は、総計算時間が転送時間(m)と釣り合う層までkの値を増やす。そして、cの開始時にx、cの開始時にx、cの開始時にxのプリフェッチを開始する。なお、プリフェッチしきれない層(x,x,x)はメモリ退避対象外とする。
【0134】
図10-3に示すように、ケースC3は、途中に転送時間が隠蔽されない層がある場合の一例である。このようなケースC3において、情報処理装置10は、kの値を増やしても転送時間が隠蔽されない層(x,x)はメモリ退避対象外とし、次層以降でプリフェッチを行うものとする。
【0135】
図11-1、図11-2は、推定値を用いたシミュレーションの一例を説明する説明図である。図11-1に示すように、各層の転送時間(m)および計算時間(c)はテーブルT1のとおりである。この結果、ケースC4のとおり、最終層以外の全ての層でニューロン(x)は、計算時間により転送時間が隠蔽されつつ、プリフェッチされる。したがって、データ転送による待ち時間が生じることを抑止しつつ、アクセラレータボード22のメモリ使用量の削減を実現することができる。
【0136】
具体的には、図11-2のグラフG1に示すように、メモリ最大使用時(Conv1のBWD実行時)に25.5%のメモリ使用量を削減(平均53.2%のメモリ使用量を削減)している。なお、今回のシミュレーションでは、8層のDNNを用いているが、通常15層~150層程度のDNNが用いられる。したがって、15層~150層程度のDNNでは、さらに削減率が増加することが期待される。
【0137】
以上のように、情報処理装置10の全体制御部50は、ニューラルネットワークの各層について予め推定した計算時間と、各層の計算に関するデータのメモリ60への転送時間とに基づいて、第1の層の計算に関するデータをメモリ60へ格納するタイミングを決定する。具体的には、全体制御部50は、第1の層よりも先に計算を行う一または複数の第2の層における計算時間の総時間内にメモリ60への転送が完了するタイミングを決定する。そして、全体制御部50は、決定したタイミングに基づいて第1の層の計算に関するデータをメモリ60へ格納する。
【0138】
これにより、情報処理装置10では、一または複数の第2の層における計算時間内で、第1の層の計算に関するデータがメモリ60に格納される。すなわち、第1の層の計算に関するデータの転送時間が、第1の層よりも先に計算を行う一または複数の第2の層における計算時間により隠蔽される。したがって、情報処理装置10は、データ転送による待ち時間が生じることを抑止しつつ、ホスト側にデータを退避させてアクセラレータボード22におけるメモリ60の使用量を削減することができる。
【0139】
また、全体制御部50は、第1の層に対して直近に計算を行う層から順に、一または複数の第2の層における計算時間の総時間と、第1の層の計算に関するデータの転送時間とを比較する。次いで、全体制御部50は、計算時間の総時間よりも転送時間が小さくなる層の計算開始時を、第1の層の計算に関するデータをメモリ60へ格納するタイミングと決定する。
【0140】
これにより、情報処理装置10は、計算時間によりデータの転送時間を隠蔽することが可能な直近の層の計算開始時より第1の層の計算に関するデータをメモリ60へ格納するので、メモリ60を効率的に使用することができる。
【0141】
また、全体制御部50は、一または複数の第2の層における計算時間の総時間と、第1の層の計算に関するデータの転送時間との比較において、計算時間の総時間よりも転送時間が小さくなる層が見つからない場合、ニューラルネットワークの各層の計算に先立って第1の層の計算に関するデータをメモリ60に格納する。
【0142】
これにより、情報処理装置10は、データ転送による待ち時間が生じることをより確実に抑止できる。例えば、第1の層よりも先に計算を行う層の数が少ない場合は、計算時間よりもデータの転送時間が大きくなることがある。このような場合、情報処理装置10は、ニューラルネットワークの各層の計算に先立って第1の層の計算に関するデータをメモリ60に格納するので、計算時にデータ転送による待ち時間が生じることを抑止できる。
【0143】
なお、上記の実施形態では、ニューラルネットワークにより画像に写った識別対象を識別する場合を例示した。しかしながら、これらに限定されるものではない。例えば、識別対象は、音声など、ニューラルネットワークが識別対象とするものであれば何れであってもよい。
【0144】
また、上記の実施形態では、ニューラルネットワークとして、畳み込みニューラルネットワーク(CNN:Convolutional Neural Network)を用いた場合を例示した。しかしながら、これらに限定されるものではない。例えば、ニューラルネットワークは、RNN(Recurrent Neural Network)などの時系列を学習・認識可能なニューラルネットワークであってもよい。RNNは、CNNの拡張であり、CNNと同じく誤差逆伝播法を行うため、本実施形態と同様の処理を適用できる。
【0145】
また、上記の実施形態では、1台の情報処理装置10で認識処理および学習処理を実行する場合を例示した。しかしながら、これらに限定されるものではない。例えば、複数台の情報処理装置10により認識処理および学習処理を実行する情報処理システムとして構成してもよい。例えば、入力ニューロンデータをミニバッチ法で処理する場合、次のように処理してもよい。すなわち、情報処理システムは、入力ニューロンデータをM件ごとに分けて、別な情報処理装置10で認識処理および学習処理を実行し、それぞれで算出されたパラメータの誤差を収集してパラメータを更新するようにしてもよい。
【0146】
また、上記の実施形態では、マザーボード21の演算部31にメモリ量計算部51を設けた場合を例示した。しかしながら、これらに限定されるものではない。例えば、アクセラレータボード22の演算部61にメモリ量計算部51を設けてもよい。そして、アクセラレータボード22の演算部61のメモリ量計算部51が、ニューラルネットワークの各層で、ニューロンデータおよびパラメータの記憶に使用される使用メモリ量を算出してもよい。
【0147】
また、上記の実施形態では、認識処理の開始の前に、認識処理と学習処理で使用する使用メモリ量を計算する場合を例示した。しかしながら、これらに限定されるものではない。例えば、認識処理の開始の前に、認識処理で使用する使用メモリ量を計算し、認識処理の終了後、学習処理の開始の前に、学習処理で使用する使用メモリ量を計算してもよい。
【0148】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的状態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。例えば、全体制御部50、メモリ量計算部51、認識制御部70および学習制御部71の各処理部が適宜統合されてもよい。また、各処理部の処理が適宜複数の処理部の処理に分離されてもよい。さらに、各処理部にて行なわれる各処理機能は、その全部又は任意の一部が、CPU及び該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【0149】
[情報処理プログラム]
また、上記の実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することもできる。そこで、以下では、情報処理プログラムを実行するコンピュータシステムの一例を説明する。図12は、情報処理プログラムを実行するコンピュータの構成の一例を示す図である。
【0150】
図12に示すように、コンピュータ400は、CPU(Central Processing Unit)410、HDD(Hard Disk Drive)420、RAM(Random Access Memory)440を有する。これら400~440の各部は、バス500を介して接続される。
【0151】
HDD420には上記の全体制御部50、メモリ量計算部51、認識制御部70および学習制御部71と同様の機能を発揮する情報処理プログラム420Aが予め記憶される。なお、情報処理プログラム420Aについては、適宜分離してもよい。
【0152】
また、HDD420は、各種情報を記憶する。例えば、HDD420は、記憶部20と同様に、OSや各種プログラム、各種情報を記憶する。
【0153】
そして、CPU410が、情報処理プログラム420AをHDD420から読み出して実行することで、上記の実施形態の各処理部を実行するプロセスを動作させる。すなわち、このプロセスは、全体制御部50、メモリ量計算部51、認識制御部70および学習制御部71と同様の動作を実行する。
【0154】
なお、上記した情報処理プログラム420Aについては、例えば、コンピュータ400に挿入されるフレキシブルディスク(FD)、CD-ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」に記憶させてもよい。そして、コンピュータ400がこれらから情報処理プログラム420Aを読み出して実行するようにしてもよい。
【0155】
さらには、公衆回線、インターネット、LAN、WANなどを介してコンピュータ400に接続される「他のコンピュータ(又はサーバ)」などに情報処理プログラム420Aを記憶させておく。そして、コンピュータ400がこれらから情報処理プログラム420Aを読み出して実行するようにしてもよい。
【0156】
以上の実施形態に関し、さらに以下の付記を開示する。
【0157】
(付記1)メモリと、
ニューラルネットワークに含まれる複数の層のうち、いずれか一層又は所定数の層の各々について予め推定した計算時間と、前記いずれか一層又は前記所定数の層の各々の計算に関するデータの前記メモリへの転送時間とに基づき、第1の層の計算に関するデータを前記メモリへ格納するタイミングについて、前記第1の層よりも先に計算を行う一の層の計算時間または複数の第2の層における計算時間の総和である総時間内に前記メモリへの転送が完了するタイミングを決定し、前記ニューラルネットワークの各層の計算を順に行う際に、決定した前記タイミングに基づいて前記第1の層の計算に関するデータを前記メモリへ格納する制御部と、
を有することを特徴とする情報処理装置。
【0158】
(付記2)前記制御部は、前記第1の層に対して直近に計算を行う層から順に前記一または複数の第2の層における計算時間の総時間と、前記第1の層の計算に関するデータの転送時間とを比較し、前記計算時間の総時間よりも前記転送時間が小さくなる層の計算開始時を、前記第1の層の計算に関するデータを前記メモリへ格納するタイミングと決定する、
ことを特徴とする付記1に記載の情報処理装置。
【0159】
(付記3)前記制御部は、前記比較において前記計算時間の総時間よりも前記転送時間が小さくなる層が見つからない場合、前記ニューラルネットワークの各層の計算に先立って前記第1の層の計算に関するデータを前記メモリに格納する、
ことを特徴とする付記2に記載の情報処理装置。
【0160】
(付記4)前記計算は、バックワード処理に関する計算であることを特徴とする付記1~3のいずれか一に記載の情報処理装置。
【0161】
(付記5)前記データは、ニューロン誤差又はパラメータ誤差であることを特徴とする付記1~4のいずれか一に記載の情報処理装置。
【0162】
(付記6)ニューラルネットワークに含まれる複数の層のうち、いずれか一層又は所定数の層の各々について予め推定した計算時間と、前記いずれか一層又は前記所定数の層の各々の計算に関するデータのメモリへの転送時間とに基づき、第1の層の計算に関するデータを前記メモリへ格納するタイミングについて、前記第1の層よりも先に計算を行う一の層の計算時間または複数の第2の層における計算時間の総和である総時間内に前記メモリへの転送が完了するタイミングを決定し、
前記ニューラルネットワークの各層の計算を順に行う際に、決定した前記タイミングに基づいて前記第1の層の計算に関するデータを前記メモリへ格納する、
処理をコンピュータが実行することを特徴とする情報処理方法。
【0163】
(付記7)前記決定する処理は、前記第1の層に対して直近に計算を行う層から順に前記一または複数の第2の層における計算時間の総時間と、前記第1の層の計算に関するデータの転送時間とを比較し、前記計算時間の総時間よりも前記転送時間が小さくなる層の計算開始時を、前記第1の層の計算に関するデータを前記メモリへ格納するタイミングと決定する、
ことを特徴とする付記6に記載の情報処理方法。
【0164】
(付記8)前記格納する処理は、前記比較において前記計算時間の総時間よりも前記転送時間が小さくなる層が見つからない場合、前記ニューラルネットワークの各層の計算に先立って前記第1の層の計算に関するデータを前記メモリに格納する、
ことを特徴とする付記7に記載の情報処理方法。
【0165】
(付記9)前記計算は、バックワード処理に関する計算であることを特徴とする付記6~8のいずれか一に記載の情報処理方法。
【0166】
(付記10)前記データは、ニューロン誤差又はパラメータ誤差であることを特徴とする付記6~9のいずれか一に記載の情報処理方法。
【0167】
(付記11)ニューラルネットワークに含まれる複数の層のうち、いずれか一層又は所定数の層の各々について予め推定した計算時間と、前記いずれか一層又は前記所定数の層の各々の計算に関するデータのメモリへの転送時間とに基づき、第1の層の計算に関するデータを前記メモリへ格納するタイミングについて、前記第1の層よりも先に計算を行う一の層の計算時間または複数の第2の層における計算時間の総和である総時間内に前記メモリへの転送が完了するタイミングを決定し、
前記ニューラルネットワークの各層の計算を順に行う際に、決定した前記タイミングに基づいて前記第1の層の計算に関するデータを前記メモリへ格納する、
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
【0168】
(付記12)前記決定する処理は、前記第1の層に対して直近に計算を行う層から順に前記一または複数の第2の層における計算時間の総時間と、前記第1の層の計算に関するデータの転送時間とを比較し、前記計算時間の総時間よりも前記転送時間が小さくなる層の計算開始時を、前記第1の層の計算に関するデータを前記メモリへ格納するタイミングと決定する、
ことを特徴とする付記11に記載の情報処理プログラム。
【0169】
(付記13)前記格納する処理は、前記比較において前記計算時間の総時間よりも前記転送時間が小さくなる層が見つからない場合、前記ニューラルネットワークの各層の計算に先立って前記第1の層の計算に関するデータを前記メモリに格納する、
ことを特徴とする付記12に記載の情報処理プログラム。
【0170】
(付記14)前記計算は、バックワード処理に関する計算であることを特徴とする付記11~13のいずれか一に記載の情報処理プログラム。
【0171】
(付記15)前記データは、ニューロン誤差又はパラメータ誤差であることを特徴とする付記11~14のいずれか一に記載の情報処理プログラム。
【符号の説明】
【0172】
10…情報処理装置
20…記憶部
21…マザーボード
22…アクセラレータボード
23、23A、23B…バス
30…メモリ
31…演算部
40…入力データ
41…定義情報
42…パラメータ情報
43…スナップショット情報
50…全体制御部
51…メモリ量計算部
60…メモリ
61…演算部
70…認識制御部
71…学習制御部
400…コンピュータ
410…CPU
420…HDD
420A…情報処理プログラム
440…RAM
500…バス
C1~C4…ケース
G1…グラフ
T1…テーブル
図1
図2-1】
図2-2】
図2-3】
図2-4】
図3
図4
図5
図6
図7
図8
図9
図10-1】
図10-2】
図10-3】
図11-1】
図11-2】
図12