以下、図面を用いて実施形態が説明される。
図1は、一実施形態における情報処理装置の一例を示す。図1に示す情報処理装置100は、例えば、サーバであり、ホストCPU200、ホストメモリ300、I/O(Input/Output)コントローラ220およびディープラーニング(DL)用のプロセッサ500を有する。ホストCPU200は、バスを介してホストメモリ300に接続され、I/Oコントローラ220を介してプロセッサ500に接続される。例えば、ホストCPU200、ホストメモリ300、I/Oコントローラ220およびプロセッサ500は、システム基板に搭載される。例えば、ホストメモリ300は、システム基板に搭載されるメモリモジュールである。
ホストCPU200は、ホストメモリ300に格納された各種プログラムを実行することで、情報処理装置100の全体の動作を制御するとともに、プロセッサ500の動作を制御し、学習データを用いてニューラルネットワークの学習を実行する。各種プログラムにはオペレーティングシステムも含まれる。
なお、情報処理装置100は、システム基板に接続される図示しない入力装置(キーボードやマウス)、出力装置(モニタやプリンタ)および外部記憶装置(HDD(Hard Disk Drive)やSDD(Solid State Drive))を有してもよい。また、情報処理装置100Aは、イントラネットやインターネット等のネットワークに接続されてもよく、ネットワークを介して複数の情報処理装置100Aが相互に接続されてもよい。
ホストメモリ300には、ユーザ定義ファイル310と、ニューラルネットワーク(NN)に演算を実行させるためのホストプログラム400とが格納される。ユーザ定義ファイル310は、ニューラルネットワークを定義した構成情報を含むファイル311と、学習データのファイル312とを含む。ファイル311、312は、ユーザにより準備される。以下では、ファイル311に含まれるニューラルネットワークの構成情報をニューラルネットワーク311とも称し、ファイル312に含まれる学習データを学習データ312とも称する。特に断らない限り、学習データ312は、ニューラルネットワークに含まれる複数の層のうち、学習対象の層の学習に使用される学習データを示す。
ホストプログラム400は、ホストCPU200に実行されることで、選択部401、算出部402、判定部403、転送部404および処理命令実行部405として機能する。ホストプログラム400に含まれる処理命令のファイル406は、プロセッサ500が実行する複数の処理命令を含んでおり、ニューラルネットワーク311の学習の実行時にプロセッサ500に転送され、プロセッサ500により実行される。例えば、処理命令は、ニューラルネットワークに含まれる畳み込み層の演算を実行する畳み込み演算用の処理命令、プーリング層の演算を実行するプーリング演算用の処理命令、加算命令および行列積演算命令等を含む。
プロセッサ500は、複数の演算器520とメモリ530とを各々含む複数の演算コア510を有する。メモリ530は、メモリ530とともに演算コア510に搭載される演算器520のみに使用される。演算コア510は、演算部の一例である。演算コア510は、ホストCPU200からの指示に基づいて、処理命令を並列に実行する。なお、各メモリ530は、各演算コア510に専用に使用されるメモリとして、各演算コア510の外部に設けられてもよい。複数の演算器520は、積和演算器、加算器または行列積演算器等である。
ホストCPU200が、ホストプログラム400を実行してニューラルネットワークの学習を実行する場合、選択部401、算出部402、判定部403、転送部404および処理命令実行部405は、次のように機能する。以下では、ニューラルネットワークの層毎の学習について説明するが、各層の学習を順次実行することで、ニューラルネットワークの学習を実行することができる。また、ニューラルネットワークの入力側の層から学習を順次実行することで、順伝播処理を実行することができ、ニューラルネットワークの出力側の層から学習を順次実行することで、逆伝播処理を実行することができる。
選択部401は、ニューラルネットワークにおいて、学習対象の層の学習に使用する学習データのサイズをユーザ定義ファイル310から取得する。選択部401は、取得した学習データのサイズと、情報処理装置100に入力されたバッチサイズとに基づいて、ファイル406内の複数の処理命令の中からプロセッサ500に実行させる処理命令を選択する。図5で説明するように、バッチサイズが異なる複数の処理命令が、演算の種類(畳み込み演算やプーリング演算等)毎に用意され、ファイル406に予め格納される。例えば、情報処理装置100に入力されるバッチサイズは、ユーザにより指定される任意のバッチサイズである。
算出部402は、選択部401が取得した学習対象の層の学習データのサイズと、選択部401が選択した処理命令で指定されるバッチサイズとに基づいて、学習対象の層の学習に使用するメモリ530のメモリサイズを算出する。ここで、処理命令で指定されるバッチサイズは、処理命令毎に処理する固定のバッチサイズであり、情報処理装置100に入力されたユーザ指定のバッチサイズが、処理命令で指定されるバッチサイズと一致するとは限らない。
学習対象の層の学習を開始する前に、演算コア510のメモリ530には、層への入力データおよび層からの出力データを格納するメモリ領域(第1のメモリ領域)が割り当てられる。また、入力データ用のメモリ領域には、学習に使用する入力データ(学習デーが)が格納される。なお、2層目以降の層では、1つ前の層の演算により出力された出力データが学習対象の層の入力データとしてメモリ領域(第1のメモリ領域)に保持される。
判定部403は、学習データを保持するメモリ530の第1のメモリ領域のメモリサイズが、算出部402が算出したメモリサイズと一致するか否かを判定する。すなわち、判定部403は、学習データのサイズとユーザ指定のバッチサイズとにから求まるメモリサイズと、学習データのサイズと処理命令に依存するバッチサイズとから求まるメモリサイズとの一致/不一致を判定する。
メモリサイズが一致する場合、第1のメモリ領域に保持された学習データ(入力データ)を使用して学習を実行できるが、メモリサイズが一致しない場合、演算実行時にエラーが発生するため、学習を実行できない。なお、判定部403は、ニューラルネットワークの各層に対して入力または出力されるテンソルデータ毎にメモリサイズの一致/不一致を判定する。
転送部404は、判定部403がメモリサイズの不一致を判定した場合、不一致を判定したテンソルデータに対応して算出部402が算出したメモリサイズのメモリ領域(第2のメモリ領域)をメモリ530に新たに確保する。転送部404は、新たに確保した第2のメモリ領域に、学習対象の層で学習する学習データ(入力データ)を転送する。新たに確保した第2のメモリ領域に学習データが転送された場合、第1のメモリ領域に保持された学習データは、使用禁止または無効にされ、あるいは破棄される。
そして、処理命令実行部405は、有効なメモリ領域(第1のメモリ領域または第2のメモリ領域)に保持された学習データを使用して、選択部401が選択した処理命令をプロセッサ500に実行させることで、ニューラルネットワークの学習を実行する。
この実施形態では、情報処理装置100に入力されたバッチサイズが、学習を実行する処理命令で指定されるバッチサイズと異なる場合にも、処理命令の実行に使用するメモリサイズに合わせてメモリ領域を確保することができる。この結果、任意のバッチサイズが情報処理装置100に入力された場合にも、エラーを発生させることなく学習を実行することができる。
図2は、図1の情報処理装置100がニューラルネットワークの学習を実行する場合の動作の一例を示す。図2に示す動作は、ホストCPU200がホストプログラム400を実行することにより実現される。すなわち、図2は、情報処理プログラムおよび情報処理方法の一例を示す。
例えば、図2に示す動作は、ニューラルネットワークの学習を実行する指示を情報処理装置100が受けたことに基づいて開始される。なお、図2に示す動作は、順伝播処理および逆伝播処理において、ニューラルネットワークに含まれる複数の層の各々に対応して実行される。
まず、ステップS1において、選択部401は、学習データのサイズと、情報処理装置100に入力されたバッチサイズとに基づいて、複数の処理命令の中からプロセッサ500に実行させる処理命令を選択する。
次に、ステップS2において、算出部402は、学習データのサイズと、選択部401が選択した処理命令で指定されるバッチサイズとに基づいて、学習に使用するメモリ530のメモリサイズを算出する。
次に、ステップS3において、判定部403は、学習データを保持するメモリ530の第1のメモリ領域のメモリサイズが、算出部402が算出したメモリサイズと一致するか否かを判定する。メモリサイズが一致する場合、処理はステップS5に移行され、メモリサイズが一致しない場合、処理はステップS4に移行される。
ステップS4において、転送部404は、算出部402が算出したメモリサイズのメモリ領域(第2のメモリ領域)をメモリ530に新たに確保し、確保した第2のメモリ領域に、学習データを転送し、処理をステップS5に移行する。
ステップS5において、処理命令実行部405は、有効なメモリ領域(第1のメモリ領域または第2のメモリ領域)に保持された学習データを使用して、選択部401が選択した処理命令をプロセッサ500に実行させる。そして、プロセッサ500が処理命令で指示される演算を実行することで、ニューラルネットワークにおける学習対象の層の学習が実行される。
以上、図1および図2に示す実施形態では、情報処理装置100に入力されたバッチサイズが、学習を実行する処理命令で指定されるバッチサイズと異なる場合にも、処理命令の実行に使用するメモリサイズに合わせてメモリ領域を確保することができる。この結果、任意のバッチサイズが指定された場合にも、エラーを発生させることなく学習を実行することができる。
図3は、別の実施形態における情報処理装置の一例を示す。図1と同様の要素については、同じ符号を付し、詳細な説明は省略する。図3に示す情報処理装置100Aは、例えば、サーバであり、図1の情報処理装置100と同様の構成を有する。
ホストメモリ300には、ユーザ定義ファイル310と、ニューラルネットワーク(NN)に演算を実行させるためのホストプログラム400Aが格納される。ユーザ定義ファイル310は、図1と同様に、ニューラルネットワークを定義した構成情報を含むファイル311と、学習データのファイル312とを含む。
ホストプログラム400Aは、ホストCPU200に実行されることで、演算種決定部411、データサイズ変更部412、変換/転送指示部414、情報管理部421および処理命令実行部432として機能する。演算種決定部411、データサイズ変更部412、変換/転送指示部414、情報管理部421および処理命令実行部432の機能については、図8に示す動作フローで説明する。
例えば、ホストプログラム400Aに含まれる処理命令のファイル423は、プロセッサ500が実行する複数の処理命令を含んでおり、ニューラルネットワーク311の学習の実行時にプロセッサ500に転送され、プロセッサ500により実行される。各処理命令は、プロセッサ500の演算器520が実行する演算命令列を含む。処理命令の種類については、図5で説明する。
図4は、ディープニューラルネットワークの概要を示す。図4に示すディープニューラルネットワークは、複数組の畳み込み層/プーリング層と、全結合層とを隠れ層に含むが、他の層を含んでもよい。
情報処理装置100Aは、例えば、ミニバッチに含まれる複数の学習データ(入力データ)の各々を入力層に入力し、畳み込み層、プーリング層等の演算を順次実行することで、演算により得られる情報を入力側から出力側に順次伝える順伝播処理を実行する。なお、例えば、畳み込み層は、前の層からのデータ(出力データ)と、学習データとして予め準備された重みデータとが畳み込み演算され、演算により得られた出力データが次の層の入力データとして出力される。
ミニバッチによる順伝播処理の実行後、出力データと正解データとの差分(例えば、誤差の二乗和)を小さくするための逆伝播処理が実行される。そして、逆伝播処理の実行に基づいて重み等のパラメータが更新される。複数のミニバッチにおいて、順伝播処理、逆伝播処理およびパラメータの更新処理を実行することで、徐々に正解率が上がっていき、ディープニューラルネットワークが最適化される。順伝播処理および逆伝播処理における各層の演算は、演算コア510が処理命令を実行することで行われる。
図5は、図3の演算コア510が実行可能な処理命令の仕様情報の一例を示す。この実施形態では、演算の種類毎に1つまたは複数の処理命令が予め準備され、処理命令としてホストメモリ300のファイル423に保持される。なお、図5では、入力データは2つあり(入力1と入力2)、出力データは1つあるとする(出力1)が、入力データと出力データの数は、図5に示す例に限定されない。また、プロセッサ500が実行可能な処理の種類と処理命令の数は、図5に限定されない。
順伝播処理では、各層において、入力層側から入力データが与えられ、出力層側から演算結果が出力される。逆伝播処理では、出力層側(順伝播処理での出力側)から入力が与えられ、入力層側(順伝播処理での入力側)から演算結果が出力される。
例えば、畳み込み演算では、4種類の処理命令Conv1、Conv2、Conv3、Conv4が使用可能である。処理命令Conv1-Conv4は、対応バッチ数と、入力1、入力2、出力1の配置パターン(分散型またはコピー型)とにより使い分けられる。
要素毎の加算では、1種類の処理命令Add1が使用可能である。処理命令Add1は、任意のバッチ数で使用可能であり、入力1、入力2、出力1のデータ配置は、全て分散型である。
行列積では、2種類の処理命令Gemm1、Gemm2が使用可能である。処理命令Gemm1、Gemm2は、任意のバッチ数で使用可能であり、入力1/入力2の一方が分散型、入力1/入力2の他方がコピー型であり、出力1は分散型である。
図6は、図3の情報処理装置において、ニューラルネットワークの各層の学習に使用される入出力データのデータ構造と、処理命令に関係するデータ構造との一例を示す説明図である。図6は、入力テンソルデータが2つで、出力テンソルデータが1つの層の入出力データのデータ構造を示す。
入出力データのデータ構造は、ニューラルネットワークの各層に対して入力または出力されるテンソルデータ毎に定められる。各テンソルデータは、各層に対して入力または出力される入出力データ以外に、各次元の要素数と、メモリサイズと、配置パターンとの情報を有する。例えば、画像認識用のニューラルネットワークの学習において、入力画像データの次元は、バッチサイズN、色C、横の画素数W、縦の画素数Hの4つであり、次元毎に要素数が設定される。一例として、各次元の要素数が、バッチサイズN=32、色C=3(カラー画像)、画素数W=10、画素数H=10であり、データが単精度(4バイト)の浮動小数点数であるとする。
この場合、テンソルデータサイズは、38400バイトとなり、テンソルデータを格納するメモリ530のメモリ領域のメモリサイズは38400バイト以上に設定される。各テンソルデータサイズは、各次元の要素数の積と1データ当たりのバイト数とを乗じることで算出される。配置パターンは、各テンソルデータを複数のメモリ530に分散して格納する分散型と、各テンソルデータを複数のメモリ530にそれぞれ格納するコピー型とのいずれかである。配置パターンの例は、図7で説明する。
入力テンソルデータの数および出力テンソルデータの数は、演算の種類によって決まる。処理命令に関するデータ構造は、処理命令で使用するメモリサイズと、処理命令で使用する配置パターンとを有する。処理命令で使用するメモリサイズは、処理命令で指定されるバッチサイズと、学習対象の層の学習に使用するデータのサイズとに基づいて設定される。なお、処理命令による処理では、1つ以上のテンソルデータが入力されると、1つ以上のテンソルデータが出力される。
図7は、図6の配置パターンの一例を示す。説明を分かりやすくするため、図7に示す例では、テンソルデータがデータD1、D2、D3、D4を含むものとする。配置パターンが分散型の場合、データD1-D4は、各演算コア510のメモリ530に分散して配置される。一方、配置パターンがコピー型の場合、データD1-D4が各演算コア510のメモリ530にそれぞれ配置される。コピー型は、重複型の一例である。
図8は、図3の情報処理装置100Aがニューラルネットワークの学習を実行する場合の動作の一例を示す。図6に示す動作は、図3のホストCPU200がホストプログラム400Aを実行することにより実現される。すなわち、図6は、情報処理プログラムおよび情報処理方法の一例を示す。
例えば、図8に示す動作は、ニューラルネットワークの学習を実行する指示を情報処理装置100Aが受けたことに基づいて開始される。なお、図8に示す動作は、順伝播処理および逆伝播処理において、ニューラルネットワークに含まれる複数の層の各々に対応して実行される。
まず、ステップS10において、図3の演算種決定部411は、ユーザ定義ファイル310中のニューラルネットワークにおける学習対象の層の構成情報等の仕様に基づいて、演算種を決定する。例えば、学習対象の層が畳み込み層の場合、"畳み込み"が演算種に決定される。演算種は、学習対象の層の学習に使用する演算方式の一例である。
次に、ステップS12において、変換/転送指示部414は、ユーザにより指定されたバッチサイズと、ニューラルネットワークにおける学習対象の層の仕様と、学習データとに基づいて、各メモリ530において、演算に使用するメモリ領域を確保する。ここで、学習対象の層の仕様と学習データとして、入出力データの配置パターン(分散型/コピー型)と、演算に使用するデータサイズとが使用され、メモリ領域(第1のメモリ領域)が確保される。そして、変換/転送指示部414は、配置パターンにしたがって、各メモリ530に確保したメモリ領域に、演算に使用する学習データ(ユーザにより指定されたバッチサイズ分のデータ)を転送する。
なお、ニューラルネットワークの学習(順伝播処理または逆伝播処理のいずれか)において、2層目以降の処理では、前の層の演算により得られた出力データが入力データとして使用される。また、前の層の演算により得られた出力データの配置パターンが、演算対象の層の入力データの配置パターンとして使用される。このため、2層目以降の各層の学習では、ステップS12によるメモリ領域の確保とデータ転送は実行されなくてもよい。
次に、ステップS14において、情報管理部421は、ステップS10で決定した演算種と、ユーザにより指定されたバッチサイズと、演算に使用する学習データのサイズとに基づいて、演算対象の層で実行するための処理命令を選択する。ここで、2層目以降の各層の処理では、前の層の演算により得られた出力データのサイズを含めたメモリサイズに基づいて、処理命令が選択される。
次に、ステップS16において、情報管理部421は、例えば、図5に示した情報に基づいて、ステップS14で選択した処理命令に対応するデータの配置パターンを求める。また、情報管理部421は、ステップS14で選択した処理命令で指定される処理命令固有のバッチサイズおよび配置パターンと、学習データのサイズとに基づいて、選択した処理命令で使用するメモリサイズとを算出する。
次に、ステップS20において、データサイズ変更部412は、ステップS16で算出したメモリサイズ(選択した処理命令で指定されるバッチサイズに依存する)と、ステップS12で確保したメモリ領域のメモリサイズとの一致/不一致を判定する。なお、2層目以降の処理では、前の層の演算により得られた出力データのサイズを含めたメモリサイズが、ステップS16で算出したメモリサイズと比較される。メモリサイズが一致する場合、処理はステップS24に移行し、メモリサイズが不一致の場合、処理はステップS22に移行する。
ステップS22において、データサイズ変更部412は、ステップS12で確保したメモリ領域(第1のメモリ領域)に代えて、ステップS16で算出したメモリサイズに対応するメモリ領域(第2のメモリ領域)を各メモリ530に新たに確保する。すなわち、データサイズ変更部412は、ステップS12で確保した入出力データのメモリサイズを、処理命令の仕様であるメモリサイズに変更する。データサイズ変更部412は、新たに確保したメモリ領域に、演算に使用する学習データ(ユーザにより指定されたバッチサイズ分のデータ)を転送し、処理をステップS24に移行する。
なお、新たに確保したメモリ領域のサイズが、演算に使用する学習データのサイズより大きい場合、データサイズ変更部412は、空きのメモリ領域に処理命令による演算の実行に影響を与えないダミーデータを格納してもよい。なお、ステップS12で確保したメモリ領域に保持されているデータは、使用禁止または無効にされ、あるいは破棄される。
ステップS24において、変換/転送指示部414は、ステップS12で使用したデータの配置パターンと、ステップS16で求めたデータの配置パターンとの一致/不一致を判定する。ここで、配置パターンの一致/不一致は、データの種類毎(図5の入力1、入力2、出力1)に判定される。すなわち、ステップS24、S26は、データの種類毎に判定される。配置パターンが一致する場合、処理はステップS28に移行し、配置パターンが不一致の場合、処理はステップS26に移行する。なお、2層目以降の処理では、前の層の演算により得られた出力データの配置パターンを含めた配置パターンが、ステップS16で求めたデータの配置パターンと比較される。
ステップS26において、変換/転送指示部414は、ステップS12で確保したメモリ領域(第1のメモリ領域)に代えて、ステップS16で算出したメモリサイズに対応するメモリ領域(第3のメモリ領域)を各メモリ530に新たに確保する。すなわち、変換/転送指示部414は、ステップS12で確保したメモリ領域に対応する配置パターンを処理命令の仕様である配置パターンに変更する。変換/転送指示部414は、新たに確保したメモリ領域に、演算に使用する学習データ(ユーザにより指定されたバッチサイズ分のデータ)を、ステップS16で求めたデータの配置パターンにしたがって転送し、処理をステップS28に移行する。
なお、ステップS22、S26の処理は、同時に実行されてもよい。すなわち、メモリサイズが不一致で、配置パターンも不一致の場合、メモリ領域の確保とデータの転送とは、一度に実行される。
ステップS28において、処理命令実行部432は、ステップS14で選択された処理命令を各演算コア510に転送し、各演算コア510に処理命令を実行させ、図6に示す処理を終了する。これにより、ニューラルネットワークの1つの層の学習処理が実行される。
図9は、図3の情報処理装置において、ニューラルネットワークの学習対象の層における学習時の動作の一例を示す。例えば、図9は、画像を認識するニューラルネットワークの学習時の動作の一例を示し、各次元の要素数が、バッチサイズN=32、色C=3、画素数W=10、画素数H=10、データが単精度浮動小数点数(4バイト)であるとする。学習対象の層に入力される入力データ(入力テンソルデータ)のサイズは38400バイトであるとする。また、学習対象の層と、学習対象の層の1つ前の層とにおいて、データの配置パターンは、分散型であるとする。以下では、学習対象の層を対象層とも称し、学習対象の層の1つ前の層を前層とも称する。
図9(a)では、前の層の出力データ(出力テンソルデータ)は、38400バイト(9600×4)であるため、プロセッサ500は、演算結果である出力データを、9600バイトずつ4つのメモリ530に分散して格納する。
対象層において、図8のステップS16で算出されたメモリサイズは38400バイトであり、配置パターンは分散型である。このため、図8のステップS20、S24の判定において、メモリサイズ、配置パターンとも一致し、メモリサイズおよび配置パターンの変更は行われない。
そして、プロセッサ500は、メモリ530に格納された前層の演算結果を入力データとして、対象層の学習を実行する。このように、対象層の学習に使用するデータを保持するメモリ領域のメモリサイズと、対象層の学習に使用する処理命令で指定されるバッチサイズに基づき算出されたメモリサイズとが一致する場合、メモリ領域をそのまま使用して処理命令を実行することができる。前層の演算後、対象層の演算を実行するまでにメモリ領域を確保するなどの前処理がないため、学習効率を低下させずに、対象層の学習において処理命令の演算を実行することができる。
図9(b)では、前の層の出力データ(出力テンソルデータ)用のメモリ領域のメモリサイズは、メモリ530毎に8400バイトであり、プロセッサ500は、演算結果である出力データを、8400バイトずつ4つのメモリ530に分散して格納する。一方、対象層において、図8のステップS16で算出されたメモリサイズは38400バイト(9600×4)であり、配置パターンは分散型である。対象層の演算を実行する処理命令で使用するメモリ530毎のメモリサイズは9600バイトとなり、図8のステップS20、S24の判定において、配置パターンは一致するが、メモリサイズは不一致となる。
したがって、図8のステップS22において、データサイズ変更部412は、前層の出力データを保持している第1のメモリ領域に代えて、処理命令の仕様であるメモリサイズに対応する第2のメモリ領域を各メモリ530に新たに確保する。そして、データサイズ変更部412は、新たに確保した第2のメモリ領域に、前層の出力データを転送する。
これにより、対象層での学習において、入力データが格納されているメモリ領域のメモリサイズと、処理命令に対応するメモリサイズとを一致させることができ、プロセッサ500による対象層の学習を正常に実行することができる。
なお、データの配置パターンがコピー型であり、前層の演算結果である出力データを格納する各メモリ530のメモリ領域のメモリサイズが38400バイトより少ない場合にも、図9(b)と同様の処理が行われる。すなわち、データサイズ変更部412は、前層の出力データを保持しているメモリ領域に代えて、処理命令の仕様であるメモリサイズ(38400バイト)に対応するメモリ領域を各メモリ530に新たに確保する。そして、データサイズ変更部412は、新たに確保したメモリ領域に、前層の出力データ(コピー型)を転送する。
これにより、対象層での学習において、入力データが格納されているメモリ領域のメモリサイズと、処理命令の仕様であるメモリサイズとが一致させることができ、プロセッサ500による対象層の学習を正常に実行することができる。
なお、入力データを保持しているメモリ領域のメモリサイズと、対象層の演算の実行する処理命令の仕様であるメモリサイズとが一致しない場合で、新たなメモリ領域を確保しない場合、対象層の演算の実行時にエラーが発生する。このため、ニューラルネットワークの学習の実行が困難になる。
図10は、図3の情報処理装置において、ニューラルネットワークの学習対象の層における学習時の動作の別の例を示す。図9と同様の動作については、詳細な説明は省略する。図10は、図9と同様に、画像を認識するニューラルネットワークの学習時の動作の一例を示し、各次元の要素数が、バッチサイズN=32、色C=3、画素数W=10、画素数H=10、データが単精度浮動小数点数であるとする。
対象層のデータの配置パターンは、コピー型であり、対象層に入力される入力データ(テンソルデータ)のサイズは38400バイト(9600×4)であるとする。また、図10(a)では、前層のデータの配置パターンは、コピー型であり、図10(b)では、前層のデータの配置パターンは分散型であるとする。
図10(a)では、前層の出力データ(テンソルデータ)は、38400バイト(9600×4)であるため、プロセッサ500は、演算結果である38400バイトの出力データを4つのメモリ530のそれぞれに格納する。対象層において、図8のステップS16で算出されたメモリサイズは38400バイトであり、配置パターンはコピー型である。このため、図8のステップS20、S24の判定において、メモリサイズ、配置パターンとも一致し、メモリサイズおよび配置パターンの変更は行われない。
そして、プロセッサ500は、メモリ530に格納された前層の演算結果を入力データとして、対象層の学習を実行する。このように、対象層の学習に使用するデータを配置パターンと、対象層の学習に使用する処理命令で指定される配置パターンとが一致し、メモリサイズが一致する場合、メモリ領域をそのまま使用して処理命令を実行することができる。図9(a)と同様に、前層の演算後、対象層の演算を実行するまでにメモリ領域を確保するなどの前処理がないため、学習効率を低下させずに、対象層の学習において処理命令の演算を実行することができる。
図10(b)では、前の層の出力データ(テンソルデータ)用のメモリ領域は分散型として確保されており、メモリサイズは、メモリ530毎に9600バイトである。プロセッサ500は、前の層の出力データ(9600バイト)を、各メモリ530に分散して格納する。このため、図8のステップS20、S24の判定において、メモリサイズおよび配置パターンとも一致しない。
このため、図8のステップS22、S26において、処理命令の仕様であるメモリサイズと配置パターン(コピー型)に対応するメモリ領域(第3のメモリ領域)が各メモリ530に新たに確保される。そして、新たに確保した第3のメモリ領域に、前層の出力データがコピー型で転送される。
これにより、対象層での学習で、入力データが格納されているメモリ領域のメモリサイズ/配置パターンと、処理命令に対応するメモリサイズ/配置パターンとをそれぞれ一致させることができ、プロセッサ500による対象層の学習を正常に実行することができる。なお、前層の出力データがコピー型であり、処理命令の仕様が分散型の場合にも、分散型に対応するメモリサイズの第3のメモリ領域を新たに確保し、データを分散型として転送することで、図10(b)と同様の処理を実施することができる。
なお、例えば、前層の出力データの配置パターンが分散型であり、対象層の入力データの配置パターンがコピー型である場合、各演算コア510での演算に使用するデータが不足するため、対象層の演算の実行時にエラーが発生する。このため、ニューラルネットワークの学習の実行が困難になる。
以上、図3から図10に示す実施形態においても、図1および図2に示す実施形態と同様の効果を得ることができる。例えば、学習データを保持するメモリ領域のメモリサイズと、処理命令で指定されるバッチサイズに基づき算出されるメモリサイズとが不一致の場合、処理命令に対応するメモリサイズの新たなメモリ領域を確保して学習データを転送する。これにより、入力データが格納されているメモリ領域のメモリサイズと、処理命令に対応するメモリサイズとを一致させることができ、任意のバッチサイズが指定された場合にも、エラーを発生させることなく学習を実行することができる。
さらに、図3から図10に示す実施形態では、学習データと処理命令との配置パターンが不一致の場合に、新たなメモリ領域を確保して学習データを処理命令で指定される配置パターンに合わせて新たなメモリ領域に転送する。これにより、入力データが格納されているメモリ領域のメモリサイズ/配置パターンと、処理命令の仕様であるメモリサイズ/配置パターンとをそれぞれ一致させることができ、プロセッサ500による対象層の学習を正常に実行することができる。
対象層の学習に使用するデータを保持するメモリ領域のメモリサイズと、対象層の学習に使用する処理命令で指定されるバッチサイズに基づいて算出されたメモリサイズとが一致する場合、メモリ領域をそのまま使用して処理命令を実行することができる。また、対象層の学習に使用するデータを配置パターンと、対象層の学習に使用する処理命令で指定される配置パターンとが一致し、メモリサイズが一致する場合、メモリ領域をそのまま使用して処理命令を実行することができる。これらの場合、前層の演算後、対象層の演算を実行するまでにメモリ領域を確保するなどの前処理がないため、学習効率を低下させずに、対象層の学習において処理命令の演算を実行することができる。
この結果、任意のバッチサイズが指定された場合にも、エラーを発生させることなく学習を実行することができる。
図11は、別の実施形態における情報処理装置の一例を示す。図1および図3と同様の要素については、詳細な説明は省略する。図11に示す情報処理装置100Bは、例えば、サーバであり、図1と同様に、ホストCPU200、ホストメモリ300、I/Oコントローラ220およびプロセッサ500を有する。ホストCPU200は、ホストメモリ300に格納された各種プログラムを実行することで、情報処理装置100Bの全体の動作を制御するとともに、プロセッサ500の動作を制御し、学習データを用いてニューラルネットワークの学習を実行する。なお、図11のホストメモリ300には、図3のホストプログラム400Aの代わりにホストプログラム400Bが格納される。
ニューラルネットワークに演算を実行させるためのホストプログラム400Bは、ディープラーニング(DL)用のフレームワーク410、ディープニューラルネットワーク(DNN)のライブラリ420およびランタイムライブラリ430を有する。
DLフレームワーク410は、演算種決定部411、データサイズ変更部412、問い合わせ部413、変換/転送指示部414および実行指示部415を有する。演算種決定部411、データサイズ変更部412および変換/転送指示部414の機能は、図3に示した演算種決定部411、データサイズ変更部412および変換/転送指示部414の機能とそれぞれ同様である。問い合わせ部413および実行指示部415の機能は、図12で説明する。
DNNライブラリ420は、情報管理部421、演算処理予測部422および処理命令が格納されたファイル423を有する。情報管理部421の機能は、図3に示した情報管理部421の機能と同様である。演算処理予測部422の機能は、図12および図13で説明する。
ランタイムライブラリ430は、変換/転送実行部431および処理命令実行部432を有する。ランタイムライブラリ430は、プロセッサ500に演算を実行させるためのインタフェースであり、プロセッサ500の仕様に合わせて設計され、例えば、複数の演算コア510に演算を並列に実行させる制御を実行する。変換/転送実行部431および処理命令実行部432の機能は、図12で説明する。
図12は、図11のホストCPU200がホストプログラム400Bを実行することで実現される機能の一例を示す。以下では、複数の層を有するディープニューラルネットワークにおいて、学習対象の層である対象層の学習を実行する場合の動作について説明する。なお、上述した実施形態で説明した機能および動作と同様の機能および動作については、詳細な説明は省略する。
DLフレームワーク410は、対象層の学習を実行する指示を受けた場合、演算種決定部411に演算種を決定させる。この後、変換/転送指示部414は、ユーザにより指定されたバッチサイズと、入出力データのサイズおよび配置パターン等に基づいて、演算に使用するメモリ領域を各メモリ530に確保する指示をランタイムライブラリ430に発行する。入出力データのサイズおよび配置パターン等は、ユーザ定義ファイル310に格納されたニューラルネットワークの仕様と学習データとに基づいて求められる。
また、変換/転送指示部414は、各メモリ530に確保したメモリ領域に、演算に使用する学習データを転送する指示をランタイムライブラリ430に発行する。なお、上述した実施形態と同様に、対象層の前の層である前層の出力データが対象層の入力データとしてメモリ530に保持されている場合、変換/転送指示部414は、メモリ領域の確保と学習データの転送指示を発行せず、データの転送指示を発行しない。
ランタイムライブラリ430の変換/転送実行部431は、変換/転送指示部414からのメモリ領域の確保の指示に基づいて、メモリ530のメモリ領域を確保し、完了通知をDLフレームワーク410に発行する。また、変換/転送実行部431は、変換/転送指示部414からのデータ転送指示に基づいて、確保したメモリ領域に学習データを転送し、完了通知をDLフレームワーク410に発行する。
問い合わせ部413は、DNNライブラリ420の情報管理部421に、演算種とユーザにより指定されたバッチサイズとを通知し、対象層の学習に使用する処理命令を問い合わせる。また、問い合わせ部413は、情報管理部421に各次元の要素数を通知し、対象層の学習に使用する処理命令で使用するメモリサイズを問い合わせる。さらに、問い合わせ部413は、ランタイムライブラリ430に確保させたメモリ領域のメモリサイズと配置パターンとを演算処理予測部422に通知し、演算をより高速に実行できる演算方法を問い合わせる。
情報管理部421は、図5に示した各処理命令の仕様情報を保持しており、対象層の学習に適した処理命令を検索して問い合わせ部413に応答する。この際、情報管理部421は、検索で見つけた処理命令の対応バッチ数とテンソルデータ毎のデータの配置パターンを問い合わせ部413に通知する。また、情報管理部421は、問い合わせ部413から通知されたバッチサイズと各次元の要素数とに基づいて、検索で見つけた処理命令による対象層の学習(演算)の実行に使用するメモリサイズを算出する。そして、情報管理部421は、算出したメモリサイズを問い合わせ部413に通知する。
演算処理予測部422は、問い合わせ部413からの問い合わせに基づいて、演算をより高速に実行できる演算方法を問い合わせ部413に通知する。演算処理予測部422は、メモリサイズと配置パターンとを変更せずに処理命令を実行する場合と、メモリサイズおよび配置パターンの一方または両方を変更して処理命令を実行する場合のいずれが、演算効率が高いかを問い合わせ部413に通知する。演算処理予測部422の機能については、図13で説明する。
問い合わせ部413は、情報管理部421から通知された処理命令を保持する。また、問い合わせ部413は、メモリサイズまたは配置パターンを変更したほうが、演算効率が高いことを演算処理予測部422から通知された場合、メモリサイズまたは配置パターンの変更を実行する。すなわち、処理命令に対応するメモリサイズとメモリ領域のメモリサイズとの一致/不一致を判定し、処理命令で指定される配置パターンとメモリ領域に保持されたデータの配置パターンとの一致/不一致とを判定し、判定結果に応じた処理を実行する。
一方、問い合わせ部413は、メモリサイズまたは配置パターンを変更しないほうが、演算効率が高いことを演算処理予測部422から通知された場合、メモリサイズの一致/不一致の判定および配置パターンの一致/不一致の判定を実行しない。この場合、DLフレームワーク410は、現在のメモリ領域に保持されたデータを使用して、演算コア510に処理命令の演算を実行させる。
問い合わせ部413は、情報管理部421から通知されたメモリサイズが、各メモリ530に確保されているメモリ領域のメモリサイズと一致するか否かを、配置パターンを考慮して判定する。問い合わせ部413は、メモリサイズが不一致の場合、メモリサイズの変更をデータサイズ変更部412に指示する。
また、問い合わせ部413は、情報管理部421から通知された配置パターンが、メモリ領域への学習データの転送時に使用した配置パターンと一致するか否かを判定する。問い合わせ部413は、配置パターンが不一致の場合、情報管理部421から通知された配置パターンでメモリ領域を新たに確保する指示をデータサイズ変更部412に発行する。さらに、問い合わせ部413は、メモリサイズが不一致の場合、または、配置パターンが不一致の場合、新たに確保したメモリ領域に対象層の学習で使用する学習データを転送する指示を変換/転送指示部414に発行する。
データサイズ変更部412は、問い合わせ部413からの指示に基づいて、情報管理部421から通知されたメモリサイズのメモリ領域を各メモリ530に確保する指示をランタイムライブラリ430に発行する。ランタイムライブラリ430は、データサイズ変更部412からの指示に基づいて、各メモリ530に新たなメモリ領域を確保し、完了通知をデータサイズ変更部412に発行する。
変換/転送指示部414は、問い合わせ部413からの指示に基づいて、対象層の学習で使用する学習データを新たに確保したメモリ領域に転送する指示をランタイムライブラリ430の変換/転送実行部431に発行する。変換/転送実行部431は、変換/転送指示部414からの指示に基づいて、ユーザ定義ファイル310から新たに確保したメモリ領域に学習データを転送し、完了通知を変換/転送指示部414に発行する。
対象層の学習に使用する学習データが配置パターンにしたがってメモリ530に保持されている場合、DLフレームワーク410の実行指示部415は、処理命令を指定して、処理命令の実行をDNNライブラリ420に指示する。DNNライブラリ420は、実行指示部415からの指示に基づいて、ランタイムライブラリ430の処理命令実行部432に処理命令の実行を指示する。そして、処理命令実行部432は、対象層の学習用の演算を実行させる演算コア510のメモリ530に処理命令を転送し、演算コア510に処理命令を実行させる。これにより、対象層の学習が実行される。
図13は、メモリ530に確保したメモリ領域のメモリサイズおよび配置パターンと、学習対象の層の学習で使用する処理命令に対応するメモリサイズおよび配置パターンとの関係を示す。図11および図12の演算処理予測部422は、図13に示す関係に基づいて、メモリサイズおよび配置パターンを変更せずに処理命令を実行可能か判断し、演算効率がより高い演算方法を決定する。
対象層の学習で使用する処理命令は、DLフレームワーク410からの問い合わせに基づいて、DNNライブラリ420の情報管理部421が選択した処理命令である。メモリ530に確保したメモリ領域は、ユーザ定義ファイル310に格納されたニューラルネットワークの仕様と学習データとに基づいて、配置パターンを考慮して算出されたメモリサイズを有する。なお、対象層が2層目以降の場合、メモリ領域のメモリサイズと配置パターンとは、前層の学習により得られた出力データを保持するメモリ領域のメモリサイズと配置パターンでもよい。
メモリサイズおよび配置パターンの両方が、既に確保されているメモリ領域と、処理命令に対応するメモリサイズおよび配置パターンとで一致する場合、メモリサイズおよび配置パターンを変更することなく演算が可能である(演算可能なパターン1、2)。
メモリ領域のメモリサイズが処理命令に対応するメモリサイズより大きい場合、処理命令を複数回実行することで、確保したメモリ領域のメモリサイズを変更することなく演算の実行が可能である(演算可能なパターン4、5、6)。但し、処理命令を複数回実行するため、演算時間は、処理命令の実行回数に依存して増加する。この際、メモリ領域のうち、学習に使用する有効なデータを保持していない領域のデータは、意味のないデータであるため、演算結果である出力データは次の学習に使用されない。
なお、メモリ領域のメモリサイズが処理命令に対応するメモリサイズより大きい場合、メモリ領域のメモリサイズを処理命令に対応するメモリサイズに合わせて再確保し、再確保したメモリ領域にデータを転送した後、演算が実行されてもよい。但し、この場合、メモリ領域を再確保する時間と、再確保したメモリ領域にデータを転送する時間が、処理命令の実行時間とは別に掛かる。
メモリ領域の配置パターンがコピー型で、処理命令で指定される配置パターンが分散型の場合、分散型での処理命令の演算を複数回実行することで、配置パターンを変更することなく演算の実行が可能である(演算可能なパターン3、6)。例えば、図7に示したように、4つの演算コア510で4つのデータD1-D4を演算する場合、コピー型で配置したデータを分散型の処理命令で実行する場合、演算時間は4倍掛かる。
既に確保されているメモリ領域と、処理命令で指定される配置パターンとが互いに異なる場合、処理命令で指定される配置パターンに合わせたメモリサイズのメモリ領域を再確保し、再確保したメモリ領域にデータを転送した後、演算が実行されてもよい。但し、この場合、メモリ領域を再確保する時間と、再確保したメモリ領域にデータを転送する時間が、処理命令の実行時間とは別に掛かる。
なお、既に確保されているメモリ領域のメモリサイズが処理命令に対応するメモリサイズより小さい場合、処理命令の実行によりエラーが発生するため、処理命令に対応するメモリサイズに合わせたメモリ領域が再確保される。また、既に確保されたメモリ領域が保持する学習データの配置パターンが分散型で、処理命令で指定される配置パターンがコピー型の場合、演算が正しく実行されないため、処理命令で指定される配置パターンに合わせたメモリサイズのメモリ領域が再確保される。
以上より、演算効率を向上するため、演算可能なパターン3-6については、処理命令を複数回実行する場合の演算時間と、メモリ領域を再確保してデータを転送した後、処理命令を実行する場合の演算時間とのどちらが早いかが判定される。例えば、判定には式(1)に示す条件が使用される。
(メモリサイズを変更しない場合の演算時間)<(メモリサイズの変更とデータの転送とに掛かる時間)+(演算時間) ‥(1)
例えば、演算処理予測部422は、式(1)に示す条件を満足する場合、メモリサイズおよび配置パターンを変更せずに演算を実行するほうが、メモリサイズおよび配置パターンを変更して演算を実行するよりも演算効率が高いと判断する。また、演算処理予測部422は、式(1)に示す条件を満足しない場合、メモリサイズおよび配置パターンを変更して演算を実行するほうが、メモリサイズおよび配置パターンを変更せずに演算を実行するよりも演算効率が高いと判断する。
図14は、図11の情報処理装置100Bがニューラルネットワークの学習を実行する場合の動作の一例を示す。図14に示す動作は、ホストCPU200がホストプログラム400Bを実行することにより実現される。すなわち、図14は、情報処理プログラムおよび情報処理方法の一例を示す。図8と同様の動作および図12で説明した動作については、詳細な説明は省略する。
図14では、図8のステップS16とステップS20の間にステップS17およびステップS18が挿入される。ステップS10、S12、S14、S16、S20、S22、S24、S26、S28の動作は、図8と同様である。
ステップS17において、演算処理予測部422は、ステップS16で選択された処理命令に対応するメモリサイズおよび配置パターンと、ステップS12で確保されたメモリサイズおよび配置パターンとを比較する。そして、演算処理予測部422は、メモリサイズおよび配置パターンが図13に示した演算可能なパターンであるか否かを判定する。メモリサイズおよび配置パターンを変更せずに演算可能な場合、処理はステップS18に移行される。メモリサイズおよび配置パターンを変更せずに演算可能でない場合、演算処理予測部422は、メモリ領域を再確保して再確保したメモリ領域に学習データを転送するほうが、演算効率が高い旨を問い合わせ部413に通知する。そして、処理はステップS20に移行される。
ステップS18において、演算処理予測部422は、メモリ領域のメモリサイズと配置パターンを変更する場合と変更しない場合との演算効率を、例えば、式(1)の条件を用いて比較する。演算処理予測部422は、式(1)の条件を満足する場合、メモリサイズ(配置パターン)を変更しないほうが、演算効率が高いと判断し、処理をステップS28に移行する。演算処理予測部422は、式(1)の条件を満足しない場合、メモリサイズ(配置パターン)を変更するほうが、演算効率が高いと判断し、処理をステップS20に移行する。
このように、メモリサイズまたは配置パターンが一致しない場合にも、メモリサイズを変更せずに演算を実行でき、かつ、メモリサイズを変更するよりも演算効率が高い場合、メモリサイズを変更せずに演算を実行することで、学習時間を短縮することができる。また、式(1)を用いて、演算効率が高い演算方法を容易に判定することができる。
以上、図11から図14に示す実施形態においても、図1から図10に示す実施形態と同様の効果を得ることができる。例えば、学習データを保持するメモリ領域のメモリサイズと、処理命令に対応して算出されるメモリサイズとが不一致の場合、処理命令に合わせて新たなメモリ領域を確保することで、プロセッサ500による対象層の学習を正常に実行することができる。また、学習データと処理命令との配置パターンが不一致の場合、処理命令の配置パターンに合わせて新たなメモリ領域を確保することで、プロセッサ500による対象層の学習を正常に実行することができる。これにより、任意のバッチサイズが指定された場合にも、エラーを発生させることなく学習を実行することができる。
さらに、図11から図14に示す実施形態では、予め確保されたメモリ領域のメモリサイズと、処理命令に対応するメモリサイズとが異なる場合、メモリサイズを変更せずに演算可能を判定する。そして、メモリサイズを変更せずに演算可能な場合、演算効率が高い演算方法を判定し、判定結果に基づいて演算を実行する。また、予め確保されたメモリ領域が保持する学習データの配置パターンと、処理命令で指定される配置パターンとが異なる場合、メモリサイズおよび配置パターンを変更せずに演算可能を判定する。そして、メモリサイズおよび配置パターンを変更せずに演算可能な場合、演算効率が高い演算方法を判定し、判定結果に基づいて演算を実行する。これにより、演算効率が高い演算方法で学習を実行することができ、ニューラルネットワークの学習時間を短縮することができる。
図15は、別の実施形態における情報処理装置において、処理命令を実行する一例を示す。図15に示す情報処理装置100Cの構成は、図11に示す情報処理装置100Bの構成と同様である。
図15では、ユーザ定義ファイル310に格納されるニューラルネットワークの規模と学習データ量とが、図11に示す情報処理装置100Bにより学習するニューラルネットワークの規模と学習データ量よりもいずれも小さい。このため、1つの演算コア510によりニューラルネットワークの学習が実行可能である。この場合、複数の演算コア510による並列演算を実行しないことで、複数の演算コア510を動作させる場合に比べて、プロセッサ500の消費電力を削減することができる。
情報処理装置100Cによるニューラルネットワークの学習は、図14と同様に実行される。但し、1つの演算コア510により学習を実行する場合、学習に使用する全てのデータは1つのメモリ530に格納されるため、配置パターンを考慮しなくてよい。このため、情報処理装置100Cでは図14のステップS24、S26の処理は省略され、図14のステップS17では、メモリ領域のメモリサイズが処理命令に対応するメモリサイズ以上の場合、演算可能と判定される。
なお、図1に示す情報処理装置100または図3に示す情報処理装置100Aにおいて、情報処理装置100Cと同様に、1つの演算コア510によりニューラルネットワークの学習を実行してもよい。この場合、情報処理装置100、100Aは、1つの演算コア510を演算対象として、図2に示す動作または図8に示す動作を実行する。但し、1つの演算コア510により学習を実行する場合、配置パターンを考慮しなくてよいため、図8のステップS24、S26の処理は省略される。
以上、この実施形態においても、図1から図14に示す実施形態と同様の効果を得ることができる。
図16は、さらなる別の実施形態における情報処理装置において、処理命令を実行する一例を示す。図15に示す情報処理装置100Dの構成は、図11に示す情報処理装置100Bの構成と同様である。
図16では、複数のユーザ定義ファイル310(1、2、3)に構成情報が格納される複数のニューラルネットワークの学習が並列して実行される。すなわち、各ユーザ定義ファイル310に格納されるニューラルネットワークの規模と学習データ量とは、図11に示す情報処理装置100Bにより学習するニューラルネットワークの規模と学習データ量よりもいずれも小さい。
ユーザ定義ファイル1のニューラルネットワークの学習は、2つの演算コア510により、図14と同様に実行される。ユーザ定義ファイル2、3のニューラルネットワークの各々の学習は、1つの演算コア510により、図15に示した実施形態と同様に実行される。例えば、DLフレームワーク410、DNNライブラリ420およびランタイムライブラリ430を含む400B(図11)は、ユーザ毎に設けられる。
なお、図1に示す情報処理装置100または図3に示す情報処理装置100Aにおいて、情報処理装置100Dと同様に、複数のユーザのニューラルネットワークの学習を並列に実行してもよい。この場合、情報処理装置100、100Aは、ユーザ毎に図2に示す動作または図8に示す動作を実行する。但し、1つの演算コア510により学習を実行する場合、配置パターンを考慮しなくてよいため、図8のステップS24、S26の処理は省略される。
以上、この実施形態において、図1から図14に示す実施形態と同様の効果を得ることができる。
以上の図1から図16に示す実施形態に関し、さらに以下の付記を開示する。
(付記1)
演算器と該演算器で使用するデータを保持するメモリとを含む1以上の演算部を有するプロセッサが実行する複数の層を含むニューラルネットワークの学習を制御する情報処理プログラムであって、
学習対象の層の学習に使用する学習データのサイズと入力されたバッチサイズとに基づいて、処理するバッチサイズが異なる複数の処理命令の中から前記プロセッサに実行させる処理命令を選択し、
前記学習データのサイズと選択した処理命令で指定されるバッチサイズとに基づいて、学習対象の層の学習に使用するメモリサイズを算出し、
前記学習データを保持する前記メモリの第1のメモリ領域のメモリサイズが、算出したメモリサイズと一致しない場合、前記算出したメモリサイズを有する第2のメモリ領域を前記メモリに確保して前記学習データを転送し、前記第2のメモリ領域に転送した前記学習データを使用して、前記選択した処理命令を前記プロセッサに実行させる、処理を情報処理装置に実行させる情報処理プログラム。
(付記2)
前記学習データを前記メモリに配置する配置パターンとして、前記学習データを複数の前記演算部の前記メモリに分散して配置する分散型と、前記学習データを複数の前記演算部の前記メモリに重複して配置する重複型とを有し、
前記第1のメモリ領域に保持された前記学習データの配置パターンが、前記選択した処理命令で使用する配置パターンと一致しない場合、第3のメモリ領域を前記メモリに確保し、前記選択した処理命令で使用する配置パターンで前記第3のメモリ領域に前記学習データを転送し、前記第3のメモリ領域に転送した前記学習データを使用して前記選択した処理命令を前記プロセッサに実行させる処理を情報処理装置に実行させる、付記1に記載の情報処理プログラム。
(付記3)
前記第1のメモリ領域のメモリサイズが、前記算出したメモリサイズと一致する場合、前記第1のメモリ領域に保持された前記学習データを使用して前記選択した処理命令を前記プロセッサに実行させる処理を情報処理装置に実行させる付記1または付記2に記載の情報処理プログラム。
(付記4)
前記第1のメモリ領域に保持された前記学習データの配置パターンが、前記選択した処理命令で使用する配置パターンと一致し、かつ、前記第1のメモリ領域のメモリサイズが、前記算出したメモリサイズと一致する場合、前記第1のメモリ領域に保持された前記学習データを使用して前記選択した処理命令を前記プロセッサに実行させる処理を情報処理装置に実行させる付記1または付記2に記載の情報処理プログラム。
(付記5)
前記第1のメモリ領域のメモリサイズが、前記算出したメモリサイズより大きい場合、前記第1のメモリ領域に保持された前記学習データを使用して前記選択した処理命令を実行する場合と、前記第2のメモリ領域を確保し前記学習データを転送して前記選択した処理命令を実行する場合との演算効率を算出し、
演算効率が高い方で、前記選択した処理命令を前記プロセッサに実行させる処理を情報処理装置に実行させる、付記1ないし付記4のいずれか1項に記載の情報処理プログラム。
(付記6)
前記第1のメモリ領域に前記重複型で前記学習データが保持され、前記選択した処理命令のデータの配置パターンが前記分散型である場合、前記第1のメモリ領域に保持された前記学習データを使用して前記選択した処理命令を実行する場合と、前記第3のメモリ領域を確保して前記分散型で前記学習データを転送して前記選択した処理命令を実行する場合との演算効率を算出し、
演算効率の高い方で、前記選択した処理命令を前記プロセッサに実行させる処理を情報処理装置に実行させる、付記2に記載の情報処理プログラム。
(付記7)
前記演算効率は、前記第1のメモリ領域に保持された前記学習データを使用して前記選択した処理命令を実行する場合の演算時間、または、新たにメモリ領域を確保して前記学習データを転送する時間と、新たに確保したメモリ領域に保持された前記学習データを使用して前記選択した処理命令を実行する場合の演算時間との和で示される、付記5または付記6に記載の情報処理プログラム。
(付記8)
メモリサイズの一致/不一致を、学習対象の層に入力される入力テンソルデータと学習対象の層から出力される出力テンソルデータ毎に判定する、付記1ないし付記7のいずれか1項に記載の情報処理プログラム。
(付記9)
配置パターンの一致/不一致を、学習対象の層に入力される入力テンソルデータと学習対象の層から出力される出力テンソルデータ毎に判定する、付記2ないし付記8のいずれか1項に記載の情報処理プログラム。
(付記10)
前記ニューラルネットワークの構成情報に基づいて、学習対象の層の学習に使用する演算方式を選択し、
前記プロセッサに実行させる処理命令を、決定した演算方式に対応する前記複数の処理命令の中から選択する、付記1ないし付記9のいずれか1項に記載の情報処理プログラム。
(付記11)
演算器と該演算器で使用するデータを保持するメモリとを含む1以上の演算部を有するプロセッサが実行する複数の層を含むニューラルネットワークの学習を制御する情報処理方法であって、
学習対象の層の学習に使用する学習データのサイズと入力されたバッチサイズとに基づいて、処理するバッチサイズが異なる複数の処理命令の中から前記プロセッサに実行させる処理命令を選択し、
前記学習データのサイズと選択した処理命令で指定されるバッチサイズとに基づいて、学習対象の層の学習に使用するメモリサイズを算出し、
前記学習データを保持する前記メモリの第1のメモリ領域のメモリサイズが、算出したメモリサイズと一致しない場合、前記算出したメモリサイズを有する第2のメモリ領域を前記メモリに確保して前記学習データを転送し、前記第2のメモリ領域に転送した前記学習データを使用して、前記選択した処理命令を前記プロセッサに実行させる、処理を情報処理装置に実行させる情報処理方法。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。