(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024100469
(43)【公開日】2024-07-26
(54)【発明の名称】推論装置、推論処理方法、及び推論処理プログラム
(51)【国際特許分類】
G06N 3/082 20230101AFI20240719BHJP
【FI】
G06N3/082
【審査請求】未請求
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2023004487
(22)【出願日】2023-01-16
(71)【出願人】
【識別番号】398034168
【氏名又は名称】株式会社アクセル
(74)【代理人】
【識別番号】110000279
【氏名又は名称】弁理士法人ウィルフォート国際特許事務所
(72)【発明者】
【氏名】道上 将志
(57)【要約】
【課題】推論処理を効率よく実行することができるようにする。
【解決手段】複数の処理層を含む学習済みモデルに従う推論処理を複数回実行する推論装置100において、制御ルーチン10を実行するCPUを、学習済みモデルの入力を受け付け、学習済みモデルによる推論処理に入力する入力データを受け付け、以前に実行された学習済みモデルに従う推論処理と同じ入力データである不変入力データのみ、又は不変入力データ及び定数のみが入力される処理層である不変処理層を特定し、推論処理における不変処理層の出力データをメインメモリに記憶させ、次回以降の推論処理において、学習済みモデルに不変処理層が存在するか否かを判定し、不変処理層が存在する場合に、学習済みモデルの不変処理層を実行せずに、メインメモリに記憶された出力データを、後続の処理層に入力させて推論処理を実行するように構成する。
【選択図】
図2
【特許請求の範囲】
【請求項1】
複数の処理層を含む学習済みモデルに従う推論処理を複数回実行する推論装置であって、
前記学習済みモデルの入力を受け付ける受付部と、
前記学習済みモデルによる推論処理に入力する入力データを受け付けるデータ受付部と、
以前に実行された前記学習済みモデルに従う推論処理と同じ入力データである不変入力データのみ、又は前記不変入力データ及び定数のみが入力される処理層である不変処理層を特定する処理層特定部と、
前記推論処理における前記不変処理層の出力データを記憶部に記憶させる記憶制御部と、
次回以降の推論処理において、前記学習済みモデルに前記不変処理層が存在するか否かを判定する判定部と、
前記不変処理層が存在する場合に、前記学習済みモデルの前記不変処理層を実行せずに、前記記憶部に記憶された前記出力データを、後続の処理層に入力させて推論処理を実行する推論実行制御部と、
を有する推論装置。
【請求項2】
前記処理層特定部は、さらに、前記学習済みモデルにおける定数のみが入力される定数処理層を特定し、
前記記憶制御部は、さらに、前記推論処理における前記定数処理層の出力データを記憶部に記憶させ、
前記判定部は、さらに、次回以降の前記学習済みモデルに従う推論処理において、前記学習済みモデルに前記定数処理層が存在するか否かを判定し、
前記推論実行制御部は、さらに、前記定数処理層が存在する場合に、前記学習済みモデルの前記定数処理層を実行せずに、前記記憶部に記憶された前記出力データを、後続の処理層に入力させて推論処理を実行する
請求項1に記載の推論装置。
【請求項3】
前記記憶制御部は、前記不変処理層の出力データを前記記憶部に記憶させた後に、前記不変処理層にのみ入力される不変入力データ及び定数の少なくとも一部を前記記憶部から削除する
請求項1又は請求項2に記載の推論装置。
【請求項4】
前記記憶制御部は、前記不変処理層の出力データを前記記憶部に記憶させた後に、前記不変処理層に入力される定数又は前記定数の算出に必要な定数を、前記記憶部に残しておく
請求項3に記載の推論装置。
【請求項5】
前記記憶制御部は、前記定数処理層の出力データを前記記憶部に記憶させた後に、定数処理層にのみ入力される定数を前記記憶部から削除する
請求項2に記載の推論装置。
【請求項6】
前記データ受付部は、入力データが、直前の推論処理における入力データが変化したか否かを示す入力変化情報を受け付け、
前記処理層特定部は、前記データ受付部が受け付けた入力変化情報により入力データが不変入力データであるか否かを特定する
請求項1に記載の推論装置。
【請求項7】
複数の処理層を含む学習済みモデルに従う推論処理を複数回実行する推論装置であって、
前記学習済みモデルの入力を受け付ける受付部と、
前記学習済みモデルにおける定数のみが入力される定数処理層を特定する定数処理層特定部と、
前記推論処理における前記定数処理層の出力データを記憶部に記憶させる記憶制御部と、
次回以降の前記学習済みモデルに従う推論処理において、前記学習済みモデルに前記定数処理層が存在するか否かを判定する判定部と、
前記定数処理層が存在する場合に、前記学習済みモデルの前記定数処理層を実行せずに、前記記憶部に記憶された前記出力データを、後続の処理層に入力させて推論処理を実行する推論実行制御部と、
を有する推論装置。
【請求項8】
複数の処理層を含む学習済みモデルに従う推論処理を複数回実行する推論処理方法であって、
前記学習済みモデルの入力を受け付け、
以前に実行された前記学習済みモデルに従う推論処理と同じ入力データである不変入力データのみ、又は前記不変入力データ及び定数のみが入力される処理層である不変処理層を特定し、
前記推論処理における前記不変処理層の出力データを記憶部に記憶させ、
次回以降の推論処理において、前記学習済みモデルに前記不変処理層が存在するか否かを判定し、
前記不変処理層が存在する場合に、前記学習済みモデルの前記不変処理層を実行せずに、前記記憶部に記憶された前記出力データを、後続の処理層に入力させて推論処理を実行する
推論処理方法。
【請求項9】
複数の処理層を含む学習済みモデルに従う推論処理を複数回実行する処理をコンピュータに実行させる推論処理プログラムであって、
前記コンピュータを、
前記学習済みモデルの入力を受け付ける受付部と、
以前に実行された前記学習済みモデルに従う推論処理と同じ入力データである不変入力データのみ、又は前記不変入力データ及び定数のみが入力される処理層である不変処理層を特定する処理層特定部と、
前記推論処理における前記不変処理層の出力データを記憶部に記憶させる記憶制御部と、
次回以降の推論処理において、前記学習済みモデルに前記不変処理層が存在するか否かを判定する判定部と、
前記不変処理層が存在する場合に、前記学習済みモデルの前記不変処理層を実行せずに、前記記憶部に記憶された前記出力データを、後続の処理層に入力させて推論処理を実行する推論実行制御部と、して機能させる
推論処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、例えば、学習済みモデルを用いて推論処理を繰り返し実行する技術に関する。
【背景技術】
【0002】
近年、画像や文字などの認識や分類などを行う際に、機械学習の一種である、ニューラルネットワークが用いられている。ニューラルネットワークは、畳み込み層、プーリング層、活性化関数層など様々な層で構成されており、これらを組み合わせることによりモデル構造が定義されている。定義されたモデルはそのままでは認識を行うことができないため、まず学習用の入力データとラベルデータなどを用いて各層のパラメータを設定(学習)し、学習済みモデルを得る必要がある。学習済みモデルを得ることができれば、その後は認識したいデータを学習済みモデルに入力し、各層を演算する(推論する)ことで、認識結果を得ることができる。
【0003】
学習済みモデルを使用して推論を行う推論装置は、一般に、各層に対応する処理を実行する処理ルーチン又は回路ブロック(以下、総称してルーチンということもある)と、その結果を一時的にストアするワークエリアとを備える。例えば、畳み込み層A、プーリング層B、及び活性化関数層Cの3つの層で構成されるニューラルネットワークを用いて推論する場合には、推論装置においては、畳み込み層のルーチンに入力データを与え、この畳み込み層の演算結果Aoをワークエリアにストアし、プーリング層のルーチンに演算結果Aoを入力して演算結果Boをワークエリアにストアし、活性化関数層のルーチンに演算結果Boを入力して最終結果を得るといった処理が行われることとなる。
【0004】
ニューラルネットワークの構造は複雑化しており、複数種類の入力データを入力して推論するようなモデルを構成することも考えられる。このようなモデル構造により、例えば画像差分抽出を行うタスクを実現するためカメラ画像入力とマスク領域画像とを入力させたり、音声認識のため音声波形とパラメータ情報、言語テーブルなどを入力させたりすることが行われる。
【0005】
また、モデル構造に対する入力としては、ユーザが入力する画像などのデータの他にモデル構造に含まれる定数を入力することができる。このため、特定の層の入力や重みに対して事前処理を行う必要がある場合には、これら入力や重みに対する事前処理を実行する層を推論処理のモデル構造に含めることができ、推論に関わる処理を容易にすることができる。例えば、重みのデータサイズが大きい場合には、重みを小さいサイズのデータから演算可能な事前処理をモデル構造に含めるようにすることもある。
【0006】
ニューラルネットワークモデルの構造を表現するフォーマットの1つとしてONNXモデル形式がある。ONNXモデル形式は、複数の推論装置やプログラムで利用可能な汎用のモデル形式となっており、ファイル構造の他各層の仕様などが規定されている。なお、ONNXモデル形式で利用可能な層は現在150種以上となっている。
【0007】
例えば、マイコン向けプログラムにおける高速化技法に関する技術としては、入力に対して演算を行って出力するプログラムについて、過去の入力値と出力値とを保存しておき、入力値を過去に実行した入力値と同じか比較し、一致する場合に、記憶した出力値をプログラムの出力値として採用する技術が開示されている。
【先行技術文献】
【特許文献】
【0008】
【発明の概要】
【発明が解決しようとする課題】
【0009】
複数層で構成されたモデルを推論装置で実行する場合には、モデルを構成する各層に対応するルーチンが呼び出され、各ルーチンによる処理の結果をその都度メモリにストアされることとなる。したがって、ニューラルネットワークモデルを構成する各層のそれぞれについて、演算とストアが行われてしまうこととなり、処理時間がかかるという問題がある。また、入力するデータの一部を変えて同じモデルを用いて複数回推論処理を行う場合であっても、同様にモデルの各層を繰り返し実行する必要がある。
【0010】
例えば、特許文献1に記載されている技術によると、プログラムを単位として実行されるものであり、入力の少なくとも一部が変更されるモデルに対しては利用できない。また、プログラムの入力と結果とをメモリに格納するため、必要なメモリ量が増大となる問題もある。
【0011】
本発明は、上記事情に鑑みなされたものであり、その目的は、推論処理を効率よく実行することのできる技術を提供することにある。
【課題を解決するための手段】
【0012】
上記目的を達成するため、一観点に係る推論装置は、複数の処理層を含む学習済みモデルに従う推論処理を複数回実行する推論装置であって、前記学習済みモデルの入力を受け付ける受付部と、前記学習済みモデルによる推論処理に入力する入力データを受け付けるデータ受付部と、以前に実行された前記学習済みモデルに従う推論処理と同じ入力データである不変入力データのみ、又は前記不変入力データ及び定数のみが入力される処理層である不変処理層を特定する処理層特定部と、前記推論処理における前記不変処理層の出力データを記憶部に記憶させる記憶制御部と、次回以降の推論処理において、前記学習済みモデルに前記不変処理層が存在するか否かを判定する判定部と、前記不変処理層が存在する場合に、前記学習済みモデルの前記不変処理層を実行せずに、前記記憶部に記憶された前記出力データを、後続の処理層に入力させて推論処理を実行する推論実行制御部と、を有する。
【発明の効果】
【0013】
本発明によれば、推論処理を効率よく実行することができる。
【図面の簡単な説明】
【0014】
【
図1】
図1は、一実施形態に係る推論装置の構成図である。
【
図2】
図2は、一実施形態に係る推論装置の機能構成を説明する図である。
【
図3】
図3は、一実施形態に係る学習済みモデルの構成を説明する図である。
【
図4】
図4は、一実施形態に係る学習済みモデルデータのフォーマットを示す図である。
【
図5】
図5は、一実施形態に係る学習済みモデルデータの一例を示す図である。
【
図6】
図6は、一実施形態に係るルーチン割当情報の構成図である。
【
図7】
図7は、一実施形態に係る行列割当情報の構成図である。
【
図8】
図8は、一実施形態に係る行列追加情報の構成図である。
【
図9】
図9は、一実施形態に係る複数回推論制御処理のフローチャートである。
【
図10】
図10は、初期の学習済みモデルにおける実行手順リストの一例の構成図である。
【
図11】
図11は、一実施形態に係る定数推論処理のフローチャートである。
【
図12】
図12は、一実施形態に係る層プロセス処理のフローチャートである。
【
図13】
図13は、定数推論可否判定処理後の定数推論処理で作成された実行手順リストの一例を説明する図である。
【
図14】
図14は、入力定数化可否判定処理後の定数推論処理で作成された実行手順リストの一例を説明する図である。
【発明を実施するための形態】
【0015】
実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせのすべてが発明の解決手段に必須であるとは限らない。
【0016】
【0017】
推論装置100は、例えば、PC(Personal Computer)やサーバ等のコンピュータにより構成されている。推論装置100は、例えば、Central Processing Unit(CPU)101と、メインメモリ102と、Graphics Processing Unit(GPU)103と、リーダライタ104と、通信インターフェース(通信I/F)105と、補助記憶装置106と、入出力インターフェース(入出力I/F)107と、表示装置108と、入力装置109とを備える。CPU101、メインメモリ102、GPU103、リーダライタ104、通信I/F105、補助記憶装置106、入出力I/F107、及び表示装置108は、バス110を介して接続されている。
【0018】
CPU101は、プロセッサの一例であり、補助記憶装置106に格納された処理プログラムをメインメモリ102に読み出して実行する。
【0019】
メインメモリ102は、記憶部の一例であり、例えば、RAM、ROM等であり、CPU101に実行されるプログラム(推論処理プログラム等)や、各種情報を記憶する。補助記憶装置106は、例えば、Hard Disk Drive(HDD)、Solid State Drive(SSD)等の非一時的記憶デバイス(不揮発性記憶デバイス)であり、CPU101で実行されるプログラムや、各種情報を記憶する。
【0020】
GPU103は、例えば、画像処理等の特定の処理の実行に適しているプロセッサであり、例えば、並列的に行われる処理の実行に適している。本実施形態では、GPU103は、CPU101の指示に従って所定の処理を実行する。
【0021】
リーダライタ104は、記録媒体111を着脱可能であり、記録媒体111からのデータの読み出し、及び記録媒体111へのデータの書き込みを行う。記録媒体111としては、例えば、SDメモリーカード、FD(フロッピーディスク:登録商標)、CD、DVD、BD(登録商標)、フラッシュメモリ等の非一時的記録媒体(不揮発性記録媒体)がある。本実施形態においては、記録媒体111に、推論処理プログラムを格納しておき、リーダライタ104により、これを読み出して、利用するようにしてもよい。また、記録媒体111に、学習済みモデルデータや、学習済みモデルに入力する入力データを格納しておき、リーダライタ104により、これを読み出して使用するようにしてもよい。また、リーダライタ104により、学習済みモデルから出力される出力データを記録媒体111に格納するようにしてもよい。
【0022】
通信I/F105は、ネットワークに接続されており、ネットワークに接続された他の装置との間でのデータの送受信を行う。
【0023】
入出力I/F107は、例えば、マウス、キーボード等の入力装置109と接続されている。
【0024】
表示装置108は、例えば、液晶ディスプレイ等のディスプレイ装置であり、各種情報を表示出力する。
【0025】
次に、推論装置100の機能構成について説明する。
【0026】
図2は、一実施形態に係る推論装置の機能構成を説明する図である。
【0027】
推論装置100は、制御ルーチン10と、学習済みモデルの処理層(単に層ともいう)の処理を実行可能な複数の処理ルーチン(畳み込み層ルーチン31、プーリング層ルーチン32、ReLU(Rectified Linear Unit)活性化関数層ルーチン33、加算層ルーチン34、乗算層ルーチン35等)と、推論指示ルーチン50とを、例えば、メインメモリ102及び/又は補助記憶装置106に格納している。本実施形態では、推論装置100において、各処理ルーチンは、CPU101に実行される。なお、処理ルーチンの少なくとも一つを、専用の演算回路により実現してもよい。
【0028】
制御ルーチン10は、CPU101に実行されることにより、入力データ52をワークエリア20に読み出す。また、制御ルーチン10は、CPU101に実行されることにより、実行対象の学習済みモデルデータ51に従う推論処理を実行させる制御を行う。また、制御ルーチン10は、CPU101に実行されることにより、ワークエリア20のモデルによる処理結果を出力データ53として出力する。ここで、ワークエリア20は、例えば、メインメモリ102の一部の領域であってもよく、CPU101内にSRAMが設けられている場合には、SRAMの領域であってもよい。ここで、特許請求の範囲に記載の処理層特定部、定数処理層特定部、記憶制御部、及び判定部は、CPU101が制御ルーチン10を実行することにより構成され、推論実行制御部は、CPU101が制御ルーチン10を実行して他の処理ルーチンを制御することにより構成される。
【0029】
処理ルーチンは、CPU101に実行されることにより、処理に利用するデータをCPU101に読み込み(ロードし)、読み込んだデータを用いて処理を実行し、CPU101による処理結果をワークエリア20に格納(ストア)する。処理ルーチンは、入力される学習済みモデルの仕様において使用可能な処理層の処理を実行するルーチンである。
【0030】
畳み込み層ルーチン31は、CPU101に実行されることにより、複数のフィルタデータのそれぞれを用いて畳込処理を行う。プーリング層ルーチン32は、CPU101に実行されることにより、入力されたデータについてダウンサンプリングする処理を実行する。ReLU活性化関数層ルーチン33は、CPU101に実行されることにより、入力されたデータをReLU活性化関数(ランプ関数)により変換する。加算層ルーチン34は、CPU101に実行されることにより、入力されたデータに対して加算演算を行う。乗算層ルーチン35は、CPU101に実行されることにより、入力されたデータに対して乗算演算を行う。
【0031】
推論指示ルーチン50は、入力装置109又は外部の装置から、実行する推論処理に関わる各種指示を受け付け、制御ルーチン10に渡す。受け付ける指示としては、使用する学習済みモデル、使用する入力データを示す情報等がある。ここで、特許請求の範囲に記載の受付部及びデータ受付部は、CPU101が推論指示ルーチン50を実行することにより構成される。
【0032】
図3は、一実施形態に係る学習済みモデルの構成を説明する図である。
【0033】
学習済みモデル51Aは、入力データ52-1(tensor_i1)と、入力データ52-2(tensor_i2)と、定数61(weight_1)と、定数62(const_1)と、定数63(const_2)と、畳み込み層64(node_1)と、ReLU活性化関数層65(node_2)と、乗算層66(node_3)と、畳み込み層67(node_4)と、加算層68(node_5)と、プーリング層69(node_6)と、を有する。
【0034】
畳み込み層64は、入力データ52―1(tensor_i1)と、定数61(weight_1)を入力して、畳み込み処理を実行し、データ(tensor_1)を出力する。
【0035】
ReLU活性化関数層65は、畳み込み層64から出力されたデータ(tensor_1)を入力して、ReLU活性化関数による処理を実行し、データ(tensor_2)を出力する。
【0036】
乗算層66は、定数62(const_1)と定数63(const_2)とを入力して、乗算処理を実行し、データ(weight_2)を出力する。
【0037】
畳み込み層67は、入力データ52―2(tensor_i2)と、乗算層66から出力されたデータ(weight_2)とを入力して、畳み込み処理を実行し、データ(tensor_3)を出力する。
【0038】
加算層68は、ReLU活性化関数層65から出力されたデータ(tensor_2)と、畳み込み層67から出力されたデータ(tensor_3)とを入力して、加算処理を実行し、データ(tensor_4)を出力する。
【0039】
プーリング層69は、加算層68から出力されたデータ(tensor_4)を入力して、ダウンサンプリングする処理を実行し、出力データ53(tensor_o)を出力する。
【0040】
図4は、一実施形態に係る学習済みモデルデータのフォーマットを示す図である。
【0041】
学習済みモデルの構造を示すデータ(学習済みモデルデータ)は、モデル全体がGraphで表記される。Graphは、モデル全体に対する入力データを示すInputと、出力データを示すOutputと、各層(ノード)を示すNodeと、使用する行列を示すTensorと、定数データを示すDataと、の要素を含む。Output、Inputには、データを示す行列名が記載される。
【0042】
Nodeは、その層に対する入力データを示すInputと、その層の出力データを示すOutputと、重みを示すWeightと、層の種別を示すTypeと、層の名前を示すNameとの要素を含む。なお、層の種類によっては、他の要素を含んでもよい。
【0043】
Output、Input、Weightには、層における対応するデータを示す行列名(定数名も含む)が記述される。Typeには、層の種類が記述され、例えば、層が畳み込み層であればConvolution、ReLU活性化関数層であればReLU、乗算層であればMul、加算層であればAdd、プーリング層であれば、Pool、双曲線正接関数層であればTanh、正弦関数層であればSin、余弦関数層であればCos、行列積層であればMatrix Mul、行列転置層であれば、Transpose、選択層であればSelectが記述される。Nameには、学習済みモデルにおいて識別可能な名前(層名、ノード名)が記述される。
【0044】
Tensorは、学習済みモデルにおいて使用される行列(テンソル:ここでは、定数行列も含む)を示すNameと、Shapeとの要素を含む。Nameには、行列の行列名が格納される。Shapeには、行列の形状の配列が格納される。行列の形状の配列としては、例えば、次元とサイズとの情報であり、3×3の2次行列であれば、(2,3,3)となり、3×2×4の3次元行列であれば、(3,3,2,4)となる。
【0045】
Dataは、学習済みモデルにおいて使用される定数(定数の重みも含む)を示すNameと、その定数(定数行列)の値の配列を示すArrayとの要素を含む。Nameには、定数を示す行列名が格納される。
【0046】
図5は、一実施形態に係る学習済みモデルデータの一例を示す図である。
図5は、
図3に示す学習済みモデルについて、
図4に示すフォーマットにより記述した学習済みモデルデータ51Bを示している。
【0047】
例えば、学習済みモデルデータ51BにおけるReLU活性化関数層65についての記述部分51Baによると、ノード名がnode_2であり、種類がReLUであり、入力がtensor_1であり、出力がtensor_2であることが記述されている。
【0048】
この学習済みモデルデータ51Bによると、
図3に示す学習済みモデル51Aの構造を適切に表現することができる。
【0049】
次に、制御ルーチン10の処理に利用する情報について説明する。制御ルーチン10は、ルーチン割当情報130と、行列割当情報140と、行列追加情報150と、を使用する。ルーチン割当情報130と、行列割当情報140と、行列追加情報150とは、例えば、メインメモリ102に格納されて使用される。
【0050】
図6は、一実施形態に係るルーチン割当情報の構成図である。
【0051】
ルーチン割当情報130は、学習済みモデルの各層に対して設定される。ルーチン割当情報130は、ルーチン割当情報ID131と、モデル層情報132と、ルーチン名133と、入力割当情報配列134と、出力割当情報配列135と、定数推論可能フラグ136と、定数推論済みフラグ137と、推論済みフラグ138とのフィールドを含む。
【0052】
ルーチン割当情報ID131には、ルーチン割当情報130を識別するID(ルーチン割当情報ID)が格納される。モデル層情報132には、ルーチンに対応付けられた学習済みモデルにおける層を特定する情報(例えば、ノード名)が格納される。ルーチン名133には、層に対応付けられたルーチン名が格納される。入力割当情報配列134には、層に対応するルーチンに入力される情報(行列)に割り当てられた1以上のID(行列割当情報ID)が格納される。出力割当情報配列135には、層に対応するルーチンから出力される情報に割り当てられた1以上のID(行列割当情報ID)が格納される。定数推論可能フラグ136には、ルーチン割当情報130に対応する層が、定数推論可能であることを示すフラグが格納される。定数推論済みフラグ137には、ルーチン割当情報130に対応する層が、定数推論処理が済んだことを示すフラグが格納される。推論済みフラグ138には、モデルに従った推論処理において、ルーチン割当情報ID131に対応する層についての推論処理が行われたことを示すフラグが格納される。
【0053】
次に、行列割当情報ID140について説明する。
【0054】
図7は、一実施形態に係る行列割当情報の構成図である。
【0055】
行列割当情報140は、モデルにおいて使用される行列に対応して設けられる情報であり、行列割当情報ID141と、行列名142と、行列種別143と、解放済みフラグ144と、定数化済みフラグ145と、格納場所情報146と、行列サイズ147とのフィールドを含む。
【0056】
行列割当情報ID141には、行列割当情報140に対応する行列のID(行列割当情報ID)が格納される。行列名142には、対応する行列の行列名が格納される。行列種別143には、行列割当情報140に対応する行列の行列種別が格納される。行列種別としては、外部入力用行列を示すInput、モデルに含まれる定数行列を示すConstantと、外部出力用行列を示すOutput、各層が出力する中間行列を示すInterstage等がある。解放済みフラグ144には、対応する行列の領域をワークエリアから解放したことを示すフラグ(解放済みフラグ)が格納される。定数化済みフラグ145には、定数推論可否判定処理又は入力定数化可否判定処理において定数であると判定された行列であることを示すフラグ(定数化済みフラグ)が格納される。格納場所情報146には、対応する行列のワークエリア20上の格納場所を示す情報が格納される。行列サイズ147には、対応する行列のサイズが格納される。
【0057】
次に、行列追加情報150について説明する。
【0058】
図8は、一実施形態に係る行列追加情報の構成図である。
【0059】
行列追加情報150は、行列種別が外部入力行列である行列に対して追加する情報である。行列追加情報150は、行列割当情報ID151と、入力変化フラグ152とのフィールドを含む。行列割当情報ID151には、情報を追加する行列のID、すなわち、外部入力行列の行列割当IDが格納される。入力変化フラグ152には、エントリに対応する行列が新たに入力として与えられた、すなわち、前回から変化していることを示すフラグ(入力変化フラグ)が格納される。なお、入力変化フラグは、新たに入力として与えられた場合に設定され、その入力に対応する推論処理の後に解除される。
【0060】
次に、推論装置100による処理について説明する。
【0061】
図9は、一実施形態に係る複数回推論制御処理のフローチャートである。
【0062】
推論装置100の制御ルーチン10(厳密には、制御ルーチン10を実行するCPU101)は、学習済みモデルデータ51を読み込む(S11)。
【0063】
次いで、制御ルーチン10は、学習済みモデルデータ51に基づいて、モデル構造を解析するモデル構造解析処理を行う(S12)。ここで、モデル構造解析処理では、学習済みモデルデータ51に基づいて、
図3に示すような学習済みモデルにおける各層の接続関係や、各層に対する行列の入出力の関係を特定する。
【0064】
次いで、制御ルーチン10は、学習済みモデルデータに規定されている層に対して、対応するルーチンを割り当てるルーチン割当処理を実行する(S13)。
【0065】
ルーチン割当処理では、制御ルーチン10は、学習済みモデルデータの各行列(ここでは、入力データ、定数も行列に含む)に対して行列割当情報140を作成する。この際、制御ルーチン10は、行列割当情報ID141には、新たな行列割当情報IDを割り当て、行列名142には、モデルデータにおける行列(Tensor、Data)の行列名を格納する。さらに、制御ルーチン10は、行列種別143には、行列の種別を格納し、格納場所情報146には、行列を格納する格納場所の情報を格納し、行列サイズ147には、行列の形状を格納する。なお、解放済みフラグ144及び定数化済みフラグ145については、この時点では、未設定としておく。
【0066】
次いで、制御ルーチン10は、学習済みモデルデータ51の各層に対して、ルーチン割当情報130を生成する。この際、制御ルーチン10は、ルーチン割当情報ID131には、新たなルーチン割当IDを割り当て、モデル層情報132には、モデルにおける層を特定する情報を格納し、ルーチン名133には、対応する処理ルーチンの名前を設定する。さらに、制御ルーチン10は、入力割当情報配列134及び出力割当情報配列135には、モデルデータにおいて対応する層の入力及び出力行列に割り当てられた行列割当情報140の行列割当情報IDを格納する。なお、定数推論可能フラグ136、定数推論済みフラグ137、及び推論済みフラグ138については、この時点では、未設定としておく。
【0067】
次いで、制御ルーチン10は、ルーチン割当情報130を利用して、ルーチンの呼び出し、ルーチンで使用するデータのワークエリア20からCPU101への読み出し、CPU101からワークエリア20への格納などの手順を決定し、実行手順リスト80(
図10参照)を生成する。
【0068】
図10は、初期の学習済みモデルにおける実行手順リストの一例の構成図である。なお、
図10において、#で始まる行は、コメントであり、後述する
図13,14でも同様である。
【0069】
実行手順リスト80は、
図5に示す学習済みモデルデータ51Bをそのまま実行する場合における実行手順のリストである。実行手順リスト80にあるように、学習済みモデルに含まれる各層毎に、処理ルーチンで使用する入力データの読み込み(ロード)と、層の処理を実行する処理ルーチンの呼び出し(ロード)と、及び出力データの書き出し(ストア)が発生する。実行手順リスト80に従って処理を行うと、処理ルーチンを呼び出す回数は、6回であり、ワークエリア20に対するロード・ストアの回数は、18回となる。
【0070】
図9の説明に戻り、次いで、制御ルーチン10は、学習済みモデルデータにおいて、すべての入力が定数行列である層(定数処理層)を特定し、定数処理層に対して、定数のみでの推論処理(定数推論)が可能であることを示す定数推論可能フラグを設定する定数推論可否判定処理を実行する(S14)。
【0071】
次に、定数推論可否判定処理の一例について、
図3に示す学習済みモデルを例に説明する。
【0072】
制御ルーチン10は、まず、行列割当情報140を参照し、行列種別が定数(Constant)である行列を特定し、特定した行列の行列名を含む定数行列リストを作成する。例えば、
図3に示す学習済みモデルの場合には、定数行列リストには、weight_1、const_1、const_2が含まれる。
【0073】
次に、制御ルーチン10は、ルーチン割当情報130を参照し、すべてのルーチン割当情報130の定数推論可能フラグ136の定数推論可能フラグを解除する。次に、制御ルーチン10は、ルーチン割当情報130のうちの定数推論可能フラグが設定されていない層を選択する。そして、制御ルーチン10は、選択した層についてのすべての入力行列の行列名(入力割当情報配列134に含まれている行列割当情報IDに対応する行列名)が定数行列リストに含まれているか否かを判定する。
【0074】
選択した層についてのすべての入力行列の行列名が定数行列リストに含まれている場合には、選択した層は、定数のみで処理を実行する層であることを意味している。この場合、制御ルーチン10は、選択した層に対応するルーチン割当情報130の定数推論可能フラグ136に定数推論可能フラグを設定する。さらに、制御ルーチン10は、選択した層の出力行列も定数となるので、出力行列のすべてを定数行列リストに追加する。なお、定数行列リストに新たな行列を追加した場合は、既に処理した層についても定数推論可能である可能性があるので、再度、すべてのルーチン割当情報130を対象に、上記同様な処理を繰り返し行う。
【0075】
図3に示す学習済みモデルの場合には、制御ルーチン10は、ルーチン割当情報130を参照する。そして、制御ルーチン10は、node_1、node_2については、いずれかの入力行列が定数ではないためスキップする。また、制御ルーチン10は、node_3については、すべての入力が定数行列リストに含まれるため対応するルーチン割当情報130の定数推論可能フラグ136に定数推論可能フラグを設定する。さらに、制御ルーチン10は、node_3の出力行列であるweight_2を定数行列リストに追加する。
【0076】
定数行列リストに新たな行列が追加されたので、制御ルーチン10は、再度ルーチン割当情報130を参照する。そして、制御ルーチン10は、node_1、node_2、node_4、node_5、node_6はいずれかの入力行列が定数ではないためスキップし、すべてのルーチン割当情報130を確認したため、この処理を終了する。
【0077】
次に、制御ルーチン10は、定数行列リストに含まれる各行列に対応する行列割当情報140の定数化済みフラグ145の定数化済みフラグを設定して処理を終了する。
図3に示す学習済みモデルの場合には、制御ルーチン10は、weight_1、weight_2、const_1、const_2に対応する行列割当情報140の定数化済みフラグ145に定数化済みフラグを設定する。
【0078】
図9の説明に戻り、制御ルーチン10は、定数推論可能と判定された処理層における推論を実行する定数推論処理(
図11参照)を実行する(S15)。
【0079】
次に、ステップS15(後述するステップS19)の定数推論処理について説明する
【0080】
図11は、一実施形態に係る定数推論処理のフローチャートである。
【0081】
まず、制御ルーチン10は、ルーチン割当情報130のうち定数推論可能フラグ136に定数推論可能フラグが設定されている層(定数推論可能層)を抽出する。また、制御ルーチン10は、抽出した定数推論可能層についてのルーチン割当情報130を含む定数推論可能ルーチン割当情報リストを作成する。
【0082】
次いで、制御ルーチン10は、定数推論可能ルーチン割当情報リストにあるルーチン割当情報130の中の定数推論済みフラグ137に定数推論済みフラグが設定されていない層、すなわち、定数推論処理を実行していない層を抽出する。そして、制御ルーチン10は、抽出した層についてのルーチン割当情報130を含む定数推論ルーチン割当情報リストを作成する定数推論可能層抽出処理を行う(S31)。
【0083】
次いで、制御ルーチン10は、定数推論ルーチン割当情報リストの要素が存在するか否か、すなわち要素数が1以上であるか否かを判定する(S32)。
【0084】
この結果、定数推論ルーチン割当情報リストの要素数が1以上でない場合(S32:NO)には、制御ルーチン10は、処理をステップS35に進める。
【0085】
一方、定数推論ルーチン割当情報リストの要素数が1以上である場合(S32:YES)には、制御ルーチン10は、定数推論ルーチン割当情報リストの各ルーチン割当情報を参照する。そして、制御ルーチン10は、モデル層情報に対応する層について、ワークエリアとの間の転送手順とルーチン呼び出し手順とを割り付けることにより、定数推論実行手順リストを生成する(S33)。
【0086】
次いで、制御ルーチン10は、定数推論ルーチン割当情報リストのそれぞれの層を対象にループ3の処理(層プロセス処理(
図12参照):S34)を繰り返し実行する。本実施形態では、制御ルーチン10は、定数推論実行手順リストに従って処理を実行することにより実現することができる。
【0087】
次に、ステップS34(後述するステップS20)の層プロセス処理について説明する。
【0088】
図12は、一実施形態に係る層プロセス処理のフローチャートである。
【0089】
制御ルーチン10は、処理対象の層について、層に入力するデータ(層入力データ)をワークエリア20からCPU101に読み込む(S41)。次いで、制御ルーチン10は、処理対象の層の処理ルーチンを呼び出し、処理ルーチンに記述されている演算処理(推論の一部の処理)を実行する(S42)。そして、制御ルーチン10は、演算処理により得られるデータ(層出力データ)をワークエリア20に書き出して(S43)、層プロセス処理を終了する。
【0090】
図11の説明に戻り、定数推論ルーチン割当情報リストのすべてのルーチンを対象にループ3の処理を実行した後には、制御ルーチン10は、処理をステップS35に進める。
【0091】
ステップS35では、制御ルーチン10は、実行手順リストから実行した層の実行手順を取り除く実行手順書き換え処理を実行する。
【0092】
次いで、制御ルーチン10は、使用されない行列を解放する不使用行列開放処理を行う(S36)。不使用行列開放処理については、後述して説明する。
【0093】
ここで、
図3に示す学習済みモデルの場合における定数推論処理について説明する。制御ルーチン10は、定数推論可能層抽出処理(S31)において、node_3のルーチン割当情報130を定数推論可能ルーチン割当情報リスト及び定数推論ルーチン割当情報リストに含める。次いで、制御ルーチン10は、定数推論手順割当処理(S33)において、
図13に示す定数推論実行手順リスト(定数推論可否判定後)81aを生成する。具体的には、制御ルーチン10は、乗算層(node_3)の推論処理を実行する定数推論実行手順リストを生成する。
【0094】
次いで、制御ルーチン10は、ループ3の処理により、定数推論処理実行手順リスト81aに従ってnode_3の推論処理を実行する。この際、制御ルーチン10は、node_3のルーチン割当情報130の定数推論済みフラグ137の定数推論済みフラグを設定する。
【0095】
次いで、制御ルーチン10は、割当済手順書き換え処理(S35)において、
図7に示す初期の実行手順リスト80を、既に実行した定数推論処理実行手順リスト81aに含まれる手順を取り除くことにより、
図13に示す主推論処理実行手順リスト81bに書き換える。
なお、同一の学習済みモデルを用いた2回目以降の推論処理においては、
図13に示す主推論処理実行手順リスト81bを利用して推論処理を行うことにより、推論結果を得ることができる。このため、2回目以降の推論処理においては、
図13に示す主推論処理実行手順リスト81bに従って処理を行うと、処理ルーチンを呼び出す回数は、5回となり、ワークエリア20に対するロード・ストアの回数は、15回となる。したがって、
図10に示す実行手順リスト80を実行する場合に比して、処理ルーチンを呼び出す回数と、ワークエリア20に対するロード・ストアの回数とを低減できるので、実施形態の推論装置100は、処理効率を向上することができる。
【0096】
図9の説明に戻り、定数推論処理(S15)を実行した後には、制御ルーチン10は、必要な回数だけ(例えば、ユーザが同一の学習済みモデルによる推論処理を繰り返して実行する回数だけ)ループ1の処理(推論処理:S16~S21)を実行する。ここで、ループ1の1回の処理が、学習済みモデルに従う推論処理を1回行うことに相当する。
【0097】
ループ1の処理では、制御ルーチン10は、推論指示ルーチン50からユーザによる推論要求を受け付けることを待機する(S16)。ここで、推論要求(入力変化情報)には、入力データの指定、出力データの出力先の指定等を含む。
【0098】
なお、本実施形態では、ループ1における2回目以降の推論要求においては、入力データが、ループ1における直前の回の推論処理で利用した入力データと同じである場合には、その入力データについては、推論要求に含めないこととしている。したがって、推論要求において指定されていない入力データがある場合には、推論要求は、指定されていない入力データは直前の推論処理と同じであることを意味している。
【0099】
制御ルーチン10は、推論要求を受け付けると、推論要求に指定された入力データをワークエリア20に読み込み、入力データに対応する行列追加情報150の入力変化フラグ152に入力データが変化したことを示す入力変化フラグを設定する(S17)。
【0100】
次いで、制御ルーチン10は、ループ1における前回の推論処理から変化しなかった入力データ(不変入力データ)を定数行列として取り扱い、学習済みモデルデータにおいて、すべての入力が定数行列である層(定数処理層及び不変処理層)を特定する。そして、制御ルーチン10は、特定した定数処理層及び不変処理層に対して、定数のみでの推論処理(定数推論)が可能であることを示す定数推論可能フラグを設定する入力定数化可否判定処理を実行する(S18)。なお、不変処理層とは、不変入力データのみ、又は不変入力データ及び定数行列のみが入力される処理層のことをいう。
【0101】
入力定数化可否判定処理では、制御ルーチン10は、行列追加情報150の入力変化フラグ152に入力データが変化したことを示す入力変化フラグが設定されていない入力データ(変化していない入力データ)を、定数行列リストに追加し、以降は、定数推論可否判定処理と同様な処理を行う。なお、ループ1の1回目(推論処理の1回目)では、入力変化フラグが設定されていない入力データは存在しないので、定数推論可否判定処理と同様な処理となり、ループ1の2回目以降の処理移行において、処理が異なる可能性がある。
【0102】
ここで、
図3の学習済みモデルに対してループ1の処理の2回目において、推論要求に入力データとしてtensor_i1のみが指定されている場合、すなわち、tensor_i2が変化していない場合を例に説明する。
【0103】
この場合には、制御ルーチン10は、tensor_i2を定数行列と取り扱うために定数行列リストに追加する。次いで、制御ルーチン10は、定数推論可否判定処理と同じ処理を行うことにより、行列割当情報140の行列種別143の行列種別に基づいて、定数行列が定数行列リストに追加される。この結果、定数行列リストには、tensor_i2、weight_1、const_1、const_2が含まれることとなる。
【0104】
次いで、制御ルーチン10は、ルーチン割当情報130を参照して、node_1、node_2については、いずれかの入力行列が定数ではないためスキップする。
【0105】
制御ルーチン10は、node_3については、すべての入力が定数行列リストに含まれるため、対応するルーチン割当情報130の定数推論可能フラグ136に定数推論可能フラグを設定する。制御ルーチン10は、さらに、node_3の出力行列であるweight_2を定数行列として取り扱うため定数行列リストに追加する。
【0106】
そして、定数行列リストに新たな行列が追加されたので、制御ルーチン10は、再度ルーチン割当情報130を参照し、node_1、node_2はいずれかの入力行列が定数ではないためスキップする。制御ルーチン10は、node_4については、すべての入力が定数行列リストに含まれるため、対応するルーチン割当情報130の定数推論可能フラグ136に定数推論可能フラグを設定する。制御ルーチン10は、さらに、node_4の出力行列であるtensor_3を定数行列リストに追加する。
【0107】
そして、定数行列リストに新たな行列が追加されたので、制御ルーチン10は、再度ルーチン割当情報130を参照し、node_1、node_2、node_5、node_6はいずれかの入力行列が定数ではないためスキップする。
【0108】
制御ルーチン10は、すべてのルーチン割当情報130を処理したため、この処理を終了する。次に、制御ルーチン10は、weight_1、weight_2、const_1、const_2、tensor_i2、tensor_3に対して行列割当情報140の定数化済みフラグ145に定数化済みフラグを設定する。
【0109】
図9の説明に戻り、制御ルーチン10は、定数推論可能と判定された処理層における推論を実行する定数推論処理(
図11参照)を実行する(S19)。
【0110】
ステップS19の定数推論処理においては、ループ1の1回目の処理においては、ステップS15の定数推論処理と同じ処理結果となる。一方、ループ1の2回目以降の処理においては、処理結果が異なってくる可能性がある。
【0111】
ここで、
図3の学習済みモデルに対してループ1の処理の2回目において、推論要求に入力データとしてtensor_i1のみが指定されている場合、すなわち、tensor_i2が変化していない場合を例に説明する。なお、この場合においては、実行手順リストは、
図13に示す主推論処理実行手順リスト81bになっている。
【0112】
制御ルーチン10は、定数推論可能層抽出処理(S31)において、node_3、node_4のルーチン割当情報130を定数推論可能ルーチン割当情報リストに含める。ここで、node_3は、すでに推論処理が実施されており、ルーチン割当情報130の定数推論済みフラグ137の定数推論済みフラグが設定されているため、node_4のみが定数推論ルーチン割当情報リストに含まれることとなる。
【0113】
次いで、制御ルーチン10は、定数推論手順割当処理(S33)において、
図14に示す定数推論実行手順リスト(入力定数化可否判定後)82aを生成する。具体的には、制御ルーチン10は、定数推論ルーチン割当情報リストに含まれる乗算層(node_4)の推論処理を実行する定数推論実行手順リスト82aを生成する。
【0114】
次いで、制御ルーチン10は、ステップS34において、定数推論実行手順リスト82aに従ってnode_4の推論処理を実行し、node_4のルーチン割当情報130の定数推論済みフラグ137に定数推論済みフラグを設定する。
【0115】
次いで、制御ルーチン10は、割当済手順書き換え処理(S35)において、
図13に示す主推論処理実行手順リスト81bを、既に実行した
図14に示す定数推論処理実行手順リスト81aに含まれる手順を取り除く。制御ルーチン10は、主推論処理実行手順リスト81bを、
図14に示す主推論処理実行手順リスト82bに書き換える。
【0116】
なお、次回以降(ループ1の次の回)の推論処理においては、tensor_i2が変化していない場合には、
図14に示す主推論処理実行手順リスト81bを利用して推論処理を行うことにより、学習済みモデルに従う推論処理の推論結果を得ることができる。このため、次回以降の推論処理においては、
図14に示す主推論処理実行手順リスト82bに従って処理を行うと、処理ルーチンを呼び出す回数は、4回となり、ワークエリア20に対するロード・ストアの回数は、12回となる。したがって、
図13に示す主推論処理実行手順リスト81bを実行する場合に比して、処理ルーチンを呼び出す回数と、ワークエリア20に対するロード・ストアの回数とを低減できるので、実施形態の推論装置100は、さらに処理効率を向上することができる。
【0117】
図9の説明に戻り、制御ルーチン10は、学習済みモデルの中の推論処理を実行していない各層を対象にループ2の処理(層プロセス処理(
図12):S20)を繰り返し実行する。本実施形態では、制御ルーチン10は、
図14に示す主推論処理実行手順リスト82bに従って処理を実行することにより実現することができる。
【0118】
学習済みモデルの中の推論処理をしていないすべてのルーチンを対象にループ2の処理を実行した後には、制御ルーチン10は、処理をステップS21に進める。
【0119】
ステップS21では、制御ルーチン10は、ワークエリア20に格納された最終的な演算結果(推論結果)をモデル出力データとして、例えば、補助記憶装置106に書き出し、行列追加情報150の入力変化フラグ152の入力変化フラグを解除する。なお、補助記憶装置106に書き出されたモデル出力データは、例えば、ネットワークを介して他の装置に出力される。
【0120】
制御ルーチン10は、必要な回数だけループ1の処理(推論処理:S16~S21)を実行した後、ループ1の処理を抜けて、複数回推論制御処理を終了する。
【0121】
上記した複数回推論制御処理によると、定数のみが入力される層については、2回目以降の推論においては、実行しないでも学習済みモデルに従う推論を行うことができる。したがって、実施形態の推論装置100は、処理ルーチンを呼び出す回数と、ワークエリア20に対するロード・ストアの回数とを低減し、処理効率を向上することができる。
【0122】
また、直前の入力データから変化していないデータについても定数行列として扱うようにし、定数行列のみが入力される層については、3回目以降の推論においては、実行しないでも学習済みモデルに従う推論を行うことができる。したがって、実施形態の推論装置100は、処理ルーチンを呼び出す回数と、ワークエリア20に対するロード・ストアの回数とを更に低減し、さらに処理効率を向上することができる。
【0123】
次に、定数推論処理のステップS36の不使用行列開放処理について説明する。
<不使用行列開放処理>
不使用行列開放処理は、定数推論処理を行った層の結果(出力)を記憶しておけば参照される可能性のない行列の少なくとも一部をワークエリア20から解放することにより、使用するメモリ量を低減する処理である。ここで、参照される可能性のある行列としては、入力データ、定数行列、及び定数推論処理が行われていない層から参照される行列がある。
【0124】
ここで、入力データ及び定数行列を参照する可能性がある行列としているのは、一度、定数行列として扱われた入力データが次回以降の推論処理で変化する可能性がある。このような場合に、入力データや定数行列を削除してしまうと、必要なデータが存在しない層が発生してしまう。これにより、必要な層の処理を実行することができずに復元できないデータが発生してしまう虞があるからである。
【0125】
なお、一度定数行列として扱われたデータが変化しないことが保証されている場合には、定数推論処理が行われていない層から参照される行列以外の行列のすべてをワークエリア20から解放するようにしてもよい。また、定数行列のみが入力される層に入力される定数行列の少なくとも一部を削除してもよい。
【0126】
ここで、不使用行列開放処理について、
図3の学習済みモデルに対して、或る回(例えば、2回目)の推論要求がtensor_i1のみであった場合に、入力定数化可否判定処理が行われた後に実行される不使用行列開放処理について説明する。
【0127】
この場合には、入力定数化可否判定処理が実行されることにより、定数行列リストには、行列weight_1、weight_2、const_1、const_2、tensor_i2、tensor_3が含まれる。また、定数行列リストにおいて、行列weight_1、weight_2、const_1、const_2、tensor_i2、tensor_3に対応する行列割当情報140の定数化済みフラグ145に定数化済みフラグが設定される。さらに、定数行列リストにおいて、層node_3、node_4に対応するルーチン割当情報130の定数推論済みフラグ137に定数推論済みフラグが設定される。
【0128】
まず、制御ルーチン10は、定数行列リストに含まれているすべての行列について、行列種別を確認し、行列種別が中間行列である行列を列挙し、その中から1つ行列を選択する。そして、制御ルーチン10は、すべての層のルーチン割当情報130を参照し、選択した行列が入力されている層を列挙する。
【0129】
次に、制御ルーチン10は、列挙した層の中にルーチン割当情報130の定数推論済みフラグ137に定数推論済みフラグが設定されていない層が存在するか否かを判定する。
【0130】
この結果、列挙した層の中にルーチン割当情報130の定数推論済みフラグ137に定数推論済みフラグが設定されていない層が存在しない場合には、選択した行列が以降の推論処理で参照されず、開放しても問題がないことを意味している。この場合、制御ルーチン10は、選択された行列をワークエリアから解放する処理を実行し、対応する行列割当情報140の解放済みフラグ144に解放済みフラグを設定する。
そして、制御ルーチン10は、列挙された行列の中の他の行列を対象に同様な処理を行う。
【0131】
例えば、
図3の学習済みモデルの場合には、制御ルーチン10は、行列種別が中間行列である行列weight_2、tensor_3を抽出し、その中のweight_2を選択する。次いで、制御ルーチン10は、weight_2が利用されている層node_4を列挙する。node_4は、ルーチン割当情報130の定数推論済みフラグ137には定数推論済みフラグが設定されており、weight_2が利用されているすべての層が定数推論済みである。このため、制御ルーチン10は、weight_2をワークエリア20から開放し、weight_2に対応する行列割当情報140の解放済みフラグ144に解放済みフラグを設定する。
【0132】
次いで、制御ルーチン10は、tensor_3を選択し、tensor_3が利用されている層node_5を列挙する。node_5は、ルーチン割当情報130の定数推論済みフラグ137には定数推論済みフラグが設定されていないので、tensor_3については、解放しない。制御ルーチン10は、抽出したすべての行列を対象に処理を行ったので不使用行列開放処理を終了する。
【0133】
この不使用行列開放処理によると、使用するメモリ量を適切に低減することができる。
【0134】
なお、本発明は、上述の実施形態及び変形例に限定されるものではなく、本発明の趣旨を逸脱しない範囲で、適宜変形して実施することが可能である。
【0135】
例えば、上記実施形態では、推論要求に入力データが変化しているか否かを示す情報を持たせるようにすることにより、この情報を用いて入力データが変化しているか否かを特定していた。本発明はこれに限られず、例えば、過去の入力データを記憶しておき、入力データ同士を比較することにより、入力データが変化しているか否かを判定するようにしてもよい。また、入力データに対して一意の識別情報を与えるようにしておき、この識別情報により入力データが変化しているか否かを判定するようにしてもよい。
【0136】
また、上記実施形態では、実行手順リストを作成しておき、実行手順リストに従って推論処理を行うようにしていた。本発明はこれに限られず、学習済みモデルデータ51Bと、ルーチン割当情報130とを参照して、実行すべき層や、入力すべき行列を特定して、各層の処理を実行することにより推論処理を行うようにしてもよい。
【0137】
また、上記実施形態では、処理ルーチンをCPUが実行する例を示していたが、少なくとも1つの処理ルーチンをGPU等の他のプロセッサにより実行するようにしてもよい。
【符号の説明】
【0138】
10…制御ルーチン、20…ワークエリア、31…畳み込み層ルーチン、32…プーリング層ルーチン、33…ReLU活性化関数層ルーチン、34…加算層ルーチン、35…乗算層ルーチン、100…推論装置、101…CPU、102…メインメモリ、108…表示装置、111…記録媒体