(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023081542
(43)【公開日】2023-06-13
(54)【発明の名称】スケジューリング装置、訓練装置、スケジューラ及び生成方法
(51)【国際特許分類】
G06F 9/50 20060101AFI20230606BHJP
【FI】
G06F9/50 150B
【審査請求】未請求
【請求項の数】16
【出願形態】OL
(21)【出願番号】P 2021195326
(22)【出願日】2021-12-01
(71)【出願人】
【識別番号】515130201
【氏名又は名称】株式会社Preferred Networks
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】村井 翔悟
(72)【発明者】
【氏名】浜地 慎一郎
(72)【発明者】
【氏名】渡部 源太郎
(72)【発明者】
【氏名】楠本 充
(72)【発明者】
【氏名】福成 理紀
(57)【要約】
【課題】マシンコードが実行される装置の構成に応じたスケジュールを生成する。
【解決手段】第1メモリと第2メモリとを有するチップにおいて実行される計算の計算順序を含む計算のスケジュールを生成するスケジューリング装置であって、1又は複数のメモリと、1又は複数のプロセッサと、を備え、前記1又は複数のプロセッサは、受信した情報に基づいて特定される状態から、前記スケジュールを生成することと、生成したスケジュールに基づいて、前記第2メモリからのデータの転送処理を含む処理の実行に要する時間を算出又は推定することと、を実行し、前記生成することは、前記第2メモリからの前記データの転送処理を、当該データを得る再計算処理に置き換えるよう、前記状態を遷移させることを含む。
【選択図】
図4
【特許請求の範囲】
【請求項1】
第1メモリと第2メモリとを有するチップにおいて実行される計算の計算順序を含む計算のスケジュールを生成するスケジューリング装置であって、
1又は複数のメモリと、
1又は複数のプロセッサと、を備え、
前記1又は複数のプロセッサは、
受信した情報に基づいて特定される状態から、前記スケジュールを生成することと、
生成したスケジュールに基づいて、前記第2メモリからのデータの転送処理を含む処理の実行に要する時間を算出又は推定することと、
を実行し、
前記生成することは、前記第2メモリからの前記データの転送処理を、当該データを得る再計算処理に置き換えるよう、前記状態を遷移させることを含む、
スケジューリング装置。
【請求項2】
前記第2メモリは、第1メモリよりもデータの転送処理にかかる時間が長く、前記データの再計算処理は、前記第1メモリに格納された情報を用いて行う、請求項1に記載のスケジューリング装置。
【請求項3】
前記処理の実行に要する時間の算出又は推定は、ステップ数の算出又は推定に基づいて行う、請求項1又は2に記載のスケジューリング装置。
【請求項4】
前記データが前記第2メモリに格納されている場合であっても、再計算処理に置き換えるよう、前記状態を遷移させる、請求項1乃至3のいずれか1項に記載のスケジューリング装置。
【請求項5】
前記第2メモリからの前記データの転送処理を、再計算処理に置き換えることは、前記算出又は推定されたステップ数に応じて前記状態を遷移させることで行う、請求項1乃至4のいずれか1項に記載のスケジューリング装置。
【請求項6】
前記1又は複数のプロセッサは、
生成したスケジュールに基づいて、前記第2メモリからの前記データの転送処理を含む全ての処理の実行に要する全ステップ数を算出又は推定することと、
前記算出又は推定した全ステップ数が所定の条件を満たすか否かを判定し、所定の条件を満たさないと判定した場合に、前記算出又は推定した全ステップ数に基づき前記状態を遷移させ、遷移後の状態からスケジュールを生成することと、
を前記所定の条件を満たすと判定されるまで繰り返す、請求項1乃至5のいずれか1項に記載のスケジューリング装置。
【請求項7】
前記所定の条件は、焼きなまし法の繰り返しを所定の回数以上実行した場合に満たすと判定される、請求項6に記載のスケジューリング装置。
【請求項8】
前記状態の遷移は、メタヒューリスティックな手法で行われる、請求項1乃至7のいずれか1項に記載のスケジューリング装置。
【請求項9】
前記メタヒューリスティックな手法は、焼きなまし法である、請求項8に記載のスケジューリング装置。
【請求項10】
前記所定の条件を満たすと判定された際の状態から生成したスケジュールを出力する、請求項7に記載のスケジューリング装置。
【請求項11】
前記生成したスケジュールと前記スケジュールのステップ数とを記憶し、記憶した中で最もステップ数が少ないスケジュールを選択して出力する、請求項8に記載のスケジューリング装置。
【請求項12】
受信した情報に含まれる計算グラフに基づいて状態を特定する、請求項1乃至11のいずれか1項に記載のスケジューリング装置。
【請求項13】
前記受信した情報は、機械学習にかかる計算に関する情報である、請求項1乃至12のいずれか1項に記載のスケジューリング装置。
【請求項14】
請求項1乃至13のいずれか1項に記載のスケジューリング装置により生成されたスケジュールに基づいて、機械学習を実行する、訓練装置。
【請求項15】
チップにおいて実行される計算の計算順序を含む計算のスケジュールを生成するスケジューリング装置の1又は複数のプロセッサに、
受信した情報に基づいて特定される状態から、前記スケジュールを生成することと、
生成したスケジュールに基づいて、前記チップのメモリからのデータの転送処理を含む処理の実行に要する時間を算出又は推定することと、
を実行させるためのスケジューラであって、
前記生成することは、前記メモリからの前記データの転送処理を、当該データを得る再計算処理に置き換えるよう、前記状態を遷移させることを含む、
スケジューラ。
【請求項16】
チップにおいて実行される計算の計算順序を含む計算のスケジュールを生成する生成方法であって、
1又は複数のプロセッサが、
受信した情報に基づいて特定される状態から、前記スケジュールを生成することと、
生成したスケジュールに基づいて、前記チップのメモリからのデータの転送処理を含む処理の実行に要する時間を算出又は推定することと、
を実行し、
前記生成することは、前記メモリからの前記データの転送処理を、当該データを得る再計算処理に置き換えるよう、前記状態を遷移させることを含む、
生成方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、スケジューリング装置、訓練装置、スケジューラ及び生成方法に関する。
【背景技術】
【0002】
ソースコードに基づいてマシンコードを生成するコンパイル装置においては、実行時間の削減の観点及びメモリ消費量の削減の観点から、適切な計算順序や再計算箇所等を決定して、スケジュールを生成する技術が提案されている。
【0003】
一方で、スケジュールは、マシンコードが実行される装置(例えば、アクセラレータチップ)の構成によっては、実行時間に大きな影響を及ぼすことが考えられる。
【0004】
例えば、特定の大容量メモリへのアクセスに時間がかかるアクセラレータチップの場合、当該大容量メモリにデータを退避することによって、実行時間が増大することがある。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
本開示は、マシンコードが実行される装置の構成に応じたスケジュールを生成する。
【課題を解決するための手段】
【0007】
本開示の一態様によるスケジューリング装置は、例えば、以下のような構成を有する。即ち、
第1メモリと第2メモリとを有するチップにおいて実行される計算の計算順序を含む計算のスケジュールを生成するスケジューリング装置であって、
1又は複数のメモリと、
1又は複数のプロセッサと、を備え、
前記1又は複数のプロセッサは、
受信した情報に基づいて特定される状態から、前記スケジュールを生成することと、
生成したスケジュールに基づいて、前記第2メモリからのデータの転送処理を含む処理の実行に要する時間を算出又は推定することと、
を実行し、
前記生成することは、前記第2メモリからの前記データの転送処理を、当該データを得る再計算処理に置き換えるよう、前記状態を遷移させることを含む。
【図面の簡単な説明】
【0008】
【
図1】データ処理システムのシステム構成及びサーバ装置のハードウェア構成の一例を示す図である。
【
図2】アクセラレータチップのハードウェア構成の一例を示す図である。
【
図3】木構造のトポロジにより接続され、分散配置された複数の第1メモリの具体例を示す図である。
【
図4】コンパイル装置の機能構成の一例を示す図である。
【
図5】計算順序決定処理の具体例の一つを示す図である。
【
図6】計算順序及び再計算箇所決定処理の具体例の一つを示す図である。
【
図7】転送処理のステップ数と再計算処理のステップ数の算出例を示す図である。
【
図8】再計算スケジューラ機能の機能構成の詳細を示す第1の図である。
【
図9】生成部によるスケジュール生成処理の具体例を示す第1の図である。
【
図10】最適化部による状態遷移処理の具体例を示す図である。
【
図11】スケジュール最適化処理の流れを示すフローチャートである。
【
図12】再計算スケジューラ機能の機能構成の詳細を示す第2の図である。
【
図13】生成部によるスケジュール生成処理の具体例を示す第2の図である。
【発明を実施するための形態】
【0009】
以下、各実施形態について添付の図面を参照しながら説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する装置については、同一の符号を付することにより重複した説明を省略する。
【0010】
[第1の実施形態]
<データ処理システムのシステム構成及びサーバ装置のハードウェア構成>
はじめに、本実施形態のデータ処理システム全体のシステム構成、及び、サーバ装置のハードウェア構成について説明する。
【0011】
図1に示すように、本実施形態のデータ処理システム100は、端末装置110とサーバ装置120とを有する。データ処理システム100において、端末装置110とサーバ装置120とは、通信ネットワーク130を介して接続される。
【0012】
端末装置110は、汎用のコンピュータであり、本実施形態においては、ユーザがソースコードを生成する際に用いる装置である。端末装置110にはソースコード記述用のアプリケーションがインストールされており、当該アプリケーションが起動されることで、ユーザによるソースコードの記述が開始される。なお、ユーザによるソースコードの記述が完了すると、端末装置110は、当該ソースコードを、通信ネットワーク130を介してサーバ装置120に送信する。
【0013】
サーバ装置120は、
図1に示すように、コンパイル装置140と、データ処理装置150とを有する。
【0014】
コンパイル装置140は、一例として、プロセッサ141、主記憶装置142(メモリ)、補助記憶装置143(メモリ)、ネットワークインタフェース144、デバイスインタフェース145を有する。コンパイル装置140は、これらの装置がバス160を介して接続されたコンピュータとして実現されてもよい。
【0015】
プロセッサ141は、電子回路(処理回路、Processing circuit、Processing circuitry、CPU、GPU、FPGA、又はASIC等)であってもよい。また、プロセッサ141は、専用の処理回路を含む半導体装置等であってもよい。なお、プロセッサ141は、電子論理素子を用いた電子回路に限定されるものではなく、光論理素子を用いた光回路により実現されてもよい。また、プロセッサ141は、量子コンピューティングに基づく演算機能を含むものであってもよい。
【0016】
プロセッサ141は、コンパイル装置140の内部構成の各装置等から入力された各種データや命令に基づいて各種演算を行い、演算結果や制御信号を各装置等に出力する。プロセッサ141は、OS(Operating System)や、アプリケーション等を実行することにより、コンパイル装置140が備える各装置を制御してもよい。
【0017】
また、プロセッサ141は、1チップ上に配置された1又は複数の電子回路を指してもよいし、2つ以上のチップあるいは2つ以上のデバイス上に配置された1又は複数の電子回路を指してもよい。複数の電子回路を用いる場合、各電子回路は有線又は無線により通信してもよい。
【0018】
主記憶装置142は、プロセッサ141が実行する命令及び各種データ等を記憶する記憶装置であり、主記憶装置142に記憶された各種データがプロセッサ141により読み出される。補助記憶装置143は、主記憶装置142以外の記憶装置である。なお、これらの記憶装置は、各種データを格納可能な任意の電子部品を意味するものとし、半導体のメモリでもよい。半導体のメモリは、揮発性メモリ、不揮発性メモリのいずれでもよい。コンパイル装置140において各種データを格納するための記憶装置は、主記憶装置142又は補助記憶装置143により実現されてもよく、プロセッサ141に内蔵される内蔵メモリにより実現されてもよい。
【0019】
ネットワークインタフェース144は、無線又は有線により、通信ネットワーク130に接続するためのインタフェースである。ネットワークインタフェース144には、既存の通信規格に適合したもの等、適切なインタフェースが用いられる。なお、通信ネットワーク130は、WAN(Wide Area Network)、LAN(Local Area Network)、PAN(Personal Area Network)等のいずれか、又は、それらの組み合わせであってもよい。WANの一例としてインタネット等があり、LANの一例としてIEEE802.11やイーサネット等があり、PANの一例としてBluetooth(登録商標が)やNFC(Near Field Communication)等がある。
【0020】
デバイスインタフェース145は、外部装置121と直接接続するUSB等のインタフェースである。
【0021】
外部装置121は、一例として、入力装置であってもよい。入力装置は、例えば、カメラ、マイクロフォン、モーションキャプチャ、各種センサ、キーボード、マウス、又はタッチパネル等のデバイスであり、取得した情報をコンピュータに与える。また、パーソナルコンピュータ、タブレット端末、又はスマートフォン等の入力部とメモリとプロセッサを備えるデバイスであってもよい。
【0022】
また、外部装置121は、一例として、出力装置であってもよい。出力装置は、例えば、LCD(Liquid Crystal Display)、CRT(Cathode Ray Tube)、PDP(Plasma Display Panel)、又は有機EL(Electro Luminescence)パネル等の表示装置であってもよいし、音声等を出力するスピーカ等であってもよい。また、パーソナルコンピュータ、タブレット端末、又はスマートフォン等の出力部とメモリとプロセッサを備えるデバイスであってもよい。
【0023】
また、外部装置121は、記憶装置(メモリ)であってもよい。例えば、外部装置121は、HDD等のストレージであってもよい。また、外部装置121は、コンパイル装置140の構成要素の一部の機能を有する装置でもよい。つまり、コンピュータは、外部装置121の処理結果の一部又は全部を受信してもよい。
【0024】
本実施形態のデータ処理装置150は、各装置として、複数のボード(ボード170_1~170_4)を有する。ボード170_1~170_4は、複数のアクセラレータチップ(例えば、チップ180_1~180_n)を搭載する。
【0025】
また、
図1に示すように、コンパイル装置140の各装置と、データ処理装置150の各装置とは、バス160を介して接続される。なお、
図1の例では、データ処理装置150が4枚のボード170_1~170_4を有する場合について示しているが、データ処理装置150が有するボードの枚数は任意である。
【0026】
チップ180_1~180_nは、例えば、深層学習の学習フェーズに特化した専用のチップである。なお、チップ180_1~180_nの詳細は後述する。
【0027】
<アクセラレータチップのハードウェア構成>
次に、本実施形態のボード170_1~170_4等に搭載されるアクセラレータチップ(例えば、チップ180_1~180_n)のハードウェア構成について説明する。
図2は、アクセラレータチップのハードウェア構成の一例を示す図である。
【0028】
本実施形態のチップ180_1(チップ180_1~180_nはいずれも同じハードウェア構成を有するため、ここでは、チップ180_1について説明する)は、例えば、条件分岐のないSIMDアーキテクチャにより動作する。SIMDとは、Single Instruction/Multiple Dataの略で、1つの命令を同時に複数のデータに適用し、並列に処理する方式を指す。ただし、チップ180_1は、SIMDアーキテクチャ以外のアーキテクチャにより動作してもよい。
【0029】
図2に示すように、チップ180_1は、第2メモリの一例であるDRAM(Dynamic Random Access Memory)を有する。第2メモリは、後述する第1メモリに比べて大容量ではあるがデータ転送にかかる時間が長い。なお、本明細書中では、データ転送にかかる時間をデータ転送コストと呼ぶことがある。また、チップ180_1は、例えば、2個の第3階層ブロックを有する。各第3階層ブロックは、それぞれ、2個の第2階層ブロックを有する。また、各第2階層ブロックは、複数の第1階層ブロックと、1個の第2階層ブロックメモリとを有する。
【0030】
また、各第1階層ブロックは、1個の演算器と、2個の演算ユニットとを有する。なお、2個の演算ユニットは、それぞれ、第1メモリの一例であるSRAM(Static Random Access Memory)を有し、演算器から直接、データの読み書きが行われる。
【0031】
演算ユニットがそれぞれ有する第1メモリは、第2メモリよりも高速にアクセスできる一方で、容量が限られている。このため、例えば、演算器によって直ちに使用されないデータであって、後の計算に必要となるデータは、上述した大容量の第2メモリに退避される。
【0032】
<木構造のトポロジ>
次に、分散配置された複数の第1メモリの一例について説明する。
図3は、木構造のトポロジにより接続され、分散配置された複数の第1メモリの具体例を示す図である。
【0033】
図3の例に示すように、2個の第3階層ブロックは、木構造のLevelAの階層に属し、互いに接続されている。また、各第3階層ブロックにそれぞれ含まれる2個の第2階層ブロックは、いずれも木構造のLevelBの階層に属し、それぞれ、木構造のLevelAの階層の対応する第3階層ブロックに接続される。
【0034】
更に、木構造のLevelBの階層に属する各第2階層ブロックにそれぞれ含まれる複数の第1階層ブロックは、いずれも木構造のLevelCの階層に属し、それぞれ、木構造のLevelBの階層の対応する第2階層ブロックに接続される。
【0035】
上述したように、LevelCの第1階層ブロックには、それぞれ、2個の演算ユニットが含まれ、それぞれが第1メモリを有している。そして、上記木構造のトポロジにより接続され、分散配置された当該複数の第1メモリに対しては、対応する演算器が、直ちに計算に使用するデータを書き込む。
【0036】
なお、本実施形態では、第1メモリにSRAMを用い、第2メモリにDRAMを用いたが、第2メモリが第1メモリよりもデータ転送コストが高いものであれば、他のメモリを用いてもよい。例えば、第1メモリは、演算器によるデータの読み書きにかかるステップが、第2メモリからのデータ転送よりも少ないメモリであれば、他の種類のメモリであってもよい。また、例えば、第1メモリと第2メモリとは、同じ種類のメモリであって、演算器との距離によってデータ転送にかかるステップが異なるメモリであってもよい。
【0037】
<コンパイル装置の機能構成>
次に、本実施形態のサーバ装置120が有するコンパイル装置140の機能構成について説明する。
図4は、コンパイル装置の機能構成の一例を示す図である。
【0038】
本実施形態のコンパイル装置140には、変換プログラムとコンパイラとがインストールされており、当該プログラムが実行されることで、コンパイル装置140は、
・変換部410、
・コンパイル部420、
として機能する。
【0039】
本実施形態の変換部410は、端末装置110より送信されたソースコードに基づいて、計算グラフ等を生成する。計算グラフとは、入力のテンソルから出力のテンソルを生成するまでの計算の流れをグラフに表したもの、あるいは、テンソルの値を更新する計算の流れをグラフに表したものを指す。例えば、ソースコードが、Python(登録商標)コードにより記述されている場合、変換部410は、当該ソースコードを実行し、ONNXの表現形式に変換することで、計算グラフを生成する。なお、ONNXは、Open Neural Network Exchangeの略称である。
【0040】
また、変換部410は、生成した計算グラフ等を、コンパイル部420に通知する。
【0041】
コンパイル部420は、変換部410により通知された計算グラフ等が入力されることでコンパイル処理を行い、マシンコード430を生成する。また、コンパイル部420は、生成したマシンコード430をデータ処理装置150に送信する。
【0042】
なお、コンパイル部420がコンパイル処理を行う際に実行する機能は多数あるが、本実施形態では、このうち、再計算スケジューラ機能(計算グラフに従って計算順序や再計算箇所を決定し、適切なスケジュールを生成する機能)について詳説する。つまり、以下では、コンパイル装置140は、スケジューリング装置を指すものとして説明する。
【0043】
コンパイル部420によるコンパイル処理において、再計算スケジューラ機能が実行されると、計算グラフに従って計算についての「スケジュール」が生成される。再計算スケジューラ機能が計算についての「スケジュール」を生成することには、計算順序を決定することや、再計算箇所を決定することが含まれる。
【0044】
また、再計算スケジューラ機能が計算についての「スケジュール」を生成することには、計算順序や再計算箇所を決定することに加えて、データの転送処理を設定することが含まれていてもよい。これにより、後述するステップ数シミュレータが転送処理の実行に要するステップ数を算出又は推定することが可能になる。なお、転送処理を設定することは、計算順序や再計算箇所を決定することとは別の機能により実行されてもよい。例えば、当該別の機能が、計算順序や再計算箇所を決定することを実行する機能から計算スケジュールを受信して、該計算スケジュールに沿った転送処理の設定を行い、転送処理が追加されたスケジュールをステップ数シミュレータに送信してもよい。
【0045】
なお、
図4に示すように、本実施形態においてコンパイル部420がコンパイル処理を行うことで生成されるマシンコード430は、複数の抽象化レベル(
図4の例では、3つの抽象化レベル)により構成される。以下、抽象化レベル3~抽象化レベル1という。再計算スケジューラ機能では、このうち、抽象化レベル3(畳み込み、バッチノーマライゼーションといった抽象度)での計算についての「スケジュール」を計算グラフに従って生成する。
【0046】
<再計算スケジューラ機能の処理の具体例>
次に、本実施形態のコンパイル部420の再計算スケジューラ機能が実行する計算順序決定処理の具体例について説明する。
図5は、計算順序決定処理の具体例の一つを示す図である。
【0047】
上述したように、コンパイル部420の再計算スケジューラ機能は、スケジュールを生成するにあたり、計算グラフに従って、計算順序を決定する。
図5において符号510は、値の依存関係を示す計算グラフを表しており、コンパイル部420の再計算スケジューラ機能では、当該計算グラフに従って、計算順序を決定する。
【0048】
なお、符号510に示す計算グラフは、
・値"A"を最初に計算すること、
・値"A"に基づいて、値"B"を計算し、値"B"に基づいて値"C"を計算すること、
・値"A"に基づいて、値"D"を計算し、値"D"に基づいて値"E"を計算すること、
・値"C"と値"E"とに基づいて、値"F"を計算すること、
を示している。
【0049】
ここで、上記計算グラフで示された値の依存関係に違反することなく計算順序を決定しようとすると、例えば、符号520に示すような計算順序になる。したがって、再計算スケジューラ機能では、例えば、符号520に示すような計算順序を決定することができる。
【0050】
一方、符号530は、比較例として、上記計算グラフで示された値の依存関係に違反した計算順序を示している。具体的には、値"E"の計算が、値"D"の計算の前に位置しており、値"E"の計算が、値"D"の計算に基づいて行うことができないため、上記計算グラフで示された値の依存関係に違反した計算順序となっている。再計算スケジューラ機能では、このような計算グラフに示された値の依存関係に違反した計算順序を回避してスケジュールを決定する。
【0051】
続いて、コンパイル部420の再計算スケジューラ機能がスケジュールを生成するにあたって実行する、計算順序及び再計算箇所決定処理の具体例について説明する。
【0052】
図6は、計算順序及び再計算箇所決定処理の具体例の一つを示す図である。上述したように、コンパイル部420の再計算スケジューラ機能は、計算順序に加えて、再計算箇所を決定する。
図6において、符号510は、値の依存関係を示す計算グラフであり、コンパイル部420の再計算スケジューラ機能は、当該計算グラフに従って、計算順序及び再計算箇所を決定する。
【0053】
図6において符号620は、再計算スケジューラ機能により、計算順序が決定されるとともに、値"A"について、値"D"の計算を行う前に、再計算を行うことが決定された様子を示している。
【0054】
ここで、符号510に示す計算グラフによれば、値"D"は、値"A"に基づいて計算される。このため、値"B"を計算する際に計算された値"A"をメモリに格納し、値"D"を計算する際に、当該メモリから読み出すようにしてもよい(
図5の符号520は、このような処理を前提とするものである)。
【0055】
一方で、符号620に示すように、値"D"を計算する際に、メモリから値"A"を読み出す代わりに、再度、値"A"を計算する(つまり再計算する)ようにすることもできる。
【0056】
このように、再計算スケジューラ機能が値"A"についてメモリから読み出す代わりに再計算を行うように決定したスケジュールが好ましいと判定されるのは、例えば、値"A"が上述の第2メモリに格納されていた場合、読み出す際のステップ数が大きくなり、実行時間が増大する場合があるからである。
【0057】
ここで、
図7を用いて、再計算を行わない場合のステップ数と、再計算を行う場合のステップ数とについて説明する。
図7は、転送処理のステップ数と再計算処理のステップ数の算出例を示す図である。
【0058】
このうち、
図7(a)の例は、再計算を行わない場合のステップ数を示す図である。具体的には、
図7(a)の例は、第2メモリから読み出された値"a"に基づいて、値"A"が計算された後、値"A"が値"B"の計算に用いられる一方で、値"A"が、一旦、第2メモリに退避された様子を示している。
【0059】
また、
図7(a)の例は、値"B"に基づいて、値"C"が計算され、値"C"が第1メモリに書き込まれた後、値"D"を計算するために、第2メモリから値"A"(値"a"に基づく計算結果)が読み出された様子を示している。更に、
図7(a)の例は、読み出された値"A"に基づいて、値"D"を計算し、値"D"に基づいて、値"E"を計算し、値"E"と第1メモリに書き込まれた値"C"とに基づいて、値"F"を計算した様子を示している。
【0060】
一方、
図7(b)の例は、再計算を行う場合のステップ数を示す図である。具体的には、
図7(b)の例は、第2メモリから読み出された値"a"に基づいて、値"A"が計算された後、値"A"が値"B"の計算に用いられた様子を示している。
【0061】
また、
図7(b)の例は、値"B"に基づいて、値"C"が計算され、第1メモリに書き込まれた後、値"D"を計算するために、第2メモリから値"a"が読み出され、値"A"を計算した様子を示している。更に、
図7(b)の例は、計算された値"A"に基づいて、値"D"を計算し、値"D"に基づいて、値"E"を計算し、値"E"と第1メモリに書き込まれた値"C"とに基づいて、値"F"を計算した様子を示している。
【0062】
ここで、
図7(a)と
図7(b)とを対比すると、
図7(a)の場合、値"D"を計算するにあたり、値"A"を第2メモリに退避するための転送処理の実行及び第2メモリから値"A"を読み出す際の転送処理の実行に、5万ステップを要している。一方、
図7(b)の場合、値"D"を計算するにあたり、値"A"を第2メモリに退避すること及び第2メモリから値"A"を読み出すことの代わりに、値"a"を読み出し、値"a"に基づいて値"A"を再計算している。
【0063】
このとき、第2メモリから値"a"を読み出す際の転送処理の実行には、1万ステップを要しており、値"a"から値"A"を計算する計算処理の実行には、1万ステップを要している。ただし、
図7(b)のように、値"A"を第2メモリに退避する必要がないのは、値"A"の読み出しが全て消えた場合に限られ、他の計算で値"A"を第2メモリから読み出して用いられる場合には、値"A"を第2メモリに退避するための転送処理の実行が必要となる。
【0064】
このように、
・
図7(a)の場合、値"A"の第2メモリへの転送処理の実行及び値"A"の第2メモリからの転送処理の実行に、5万ステップを要している。
・
図7(b)の場合、値"A"の第2メモリへの転送処理の実行が必要でない状況では、値"A"の再計算処理(値"a"の転送処理+値"A"の計算処理)の実行に、2万ステップを要している。
【0065】
つまり、第2メモリへのアクセスに要するステップ数が大きい場合、第2メモリに退避した値を第2メモリから読み出すことで計算に必要な値を取得するよりも、再計算することで取得した方が、ステップ数が少なく、実行時間を短縮できる場合がある。
【0066】
本実施形態におけるコンパイル部420の再計算スケジューラ機能では、チップ180_1等のような、第2メモリへのアクセスに時間がかかる構成を考慮し、
・第2メモリに退避する際及び第2メモリから読み出す際の転送処理の実行に要するステップ数を算出又は推定する。
・再計算処理の実行に要するステップ数を算出又は推定する。
【0067】
そして、本実施形態におけるコンパイル部420の再計算スケジューラ機能では、ステップ数の算出結果又は推定結果に基づいて、第2メモリからの転送処理を、再計算処理に置き換えてスケジュールを生成する。これにより、本実施形態におけるコンパイル部420の再計算スケジューラ機能によれば、マシンコードが実行されるチップ180_1等の構成に応じたスケジュールを生成し、実行時間を短縮することができる。
【0068】
<再計算スケジューラ機能の機能構成>
次に、コンパイル部420の再計算スケジューラ機能の機能構成の詳細について説明する。
図8は、再計算スケジューラ機能の機能構成の詳細を示す第1の図である。
図8に示すように、再計算スケジューラ機能800は、
・生成部810、
・ステップ数シミュレータ820、
・最適化部830、
を有する。
【0069】
本実施形態において、生成部810は、計算グラフに基づいて、初期スケジュールの元となる「状態」を特定し、次の遷移先候補となる"隣の状態"を選択すると、転送処理等を設定する。これにより、生成部810は、スケジュールを生成する。なお、「状態」とは、少なくとも計算順序を示す情報である。本実施形態においては、計算順序及び再計算箇所を示す情報であり、計算グラフに基づいて特定される。計算グラフは、生成部810が受信する情報の一例である。
【0070】
ステップ数シミュレータ820は、生成部810により生成されたスケジュールについて、ステップ数(全ステップ数)を算出又は推定する。また、ステップ数シミュレータ820は、算出又は推定したステップ数を最適化部830に通知する。
【0071】
最適化部830は、ステップ数シミュレータ820より通知されたステップ数を状態のスコアとして、例えば、「焼きなまし法」を用いて当該状態のスコアを最適化する。「焼きなまし法」とは、最適化問題に対するメタヒューリスティックスの1つで、"隣の状態"への遷移を繰り返して最適化する方法である。"隣の状態"への遷移は、原則として、状態のスコアが改善する方向に進められるが、焼きなまし法の場合、状態のスコアが悪化する方向に状態を遷移させることも許容する。
【0072】
"隣の状態"への遷移には、例えば、1つの計算の位置を変更すること、1つの計算が直接依存している値を、その計算の直前に再計算により計算すること、再計算を削除すること、等が含まれる。いずれの場合も、依存関係に違反しないような形で遷移を行うこと、あるいは、依存関係に違反した場合は棄却すること、が必要となる。
【0073】
なお、最適化部830による最適化手法は、「焼きなまし法」に限定されない。例えば、山登り法、メトロポリス法等、他のメタヒューリスティックな手法を用いて最適化してもよい。ただし、本実施形態では、よりステップ数の小さいスケジュールを得やすいと考えられる「焼きなまし法」を用いて最適化する。
【0074】
最適化部830により遷移された遷移後の状態は、生成部810により特定される。最適化部830では、状態のスコアが最適化されるまで、焼きなまし法による状態の遷移を繰り返し実行し、状態のスコアが最適化された時点で生成されたスケジュールを、最適化されたスケジュールとして出力する。なお、ここでいう最適化とは、"改善"を指し、必ずしも大域的な最適解が得られることに限定されない。
【0075】
なお、焼きなまし法を用いて状態を遷移させることには、第2メモリからの転送による値の取得を、再計算処理に置き換えやすいように、状態を遷移させることが含まれる。
【0076】
具体的には、第2メモリからの転送処理の実行に要するステップ数が、再計算処理の実行に要するステップ数よりも大きい場合に、第2メモリからの転送処理を再計算処理に置き換えるように状態を遷移させることが含まれる。
【0077】
なお、第2メモリからの転送処理を再計算処理に置き換えるように状態を遷移させることは、第2メモリからの転送処理の実行に要するステップ数が、再計算処理の実行に要するステップ数よりも大きい場合に、必ず実行されなくてもよい。また、上記焼きなまし法を利用する場合、必ずしもステップ数が減少するように状態を遷移させない場合や、最適な状態を探索する段階で、ステップ数が増加するように状態を遷移させる場合もありうる。
【0078】
<再計算スケジューラ機能による処理の具体例>
次に、再計算スケジューラ機能800による処理の具体例について説明する。
【0079】
(1)生成部によるスケジュール生成処理の具体例
はじめに、計算グラフに基づいて、初期スケジュールの元となる「状態」を特定することで、生成部810が、転送処理等を設定し、スケジュールを生成するスケジュール生成処理の具体例について説明する。
【0080】
図9は、生成部によるスケジュール生成処理の具体例を示す第1の図である。
図9の例は、生成部810が、
・計算グラフに基づいて、計算順序を状態910として特定し、
・特定した状態910に基づいて転送処理を設定し、スケジュール920を生成し、
・生成したスケジュール920をステップ数シミュレータに通知する、
様子を示している。
【0081】
具体的には、状態910として、
・はじめに、値"a"と値"b"とを和算して値"c"を出力する計算を行い、
・続いて、値"c"をRelu関数に入力して値"d"を出力する計算を行う、
ことが生成部810により特定された様子を示している。
【0082】
また、転送処理として、
・値"a"と値"b"とを和算して値"c"を出力する計算の前に、値"a"と値"b"とを第2メモリからダウンロードする転送処理を設定し、
・値"a"と値"b"とを和算して値"c"を出力する計算を行った後に、値"c"を第2メモリにアップロードする転送処理を設定し、
・値"c"をRelu関数に入力して値"d"を出力する計算を行った後に、値"d"を第2メモリにアップロードする転送処理を設定し、
スケジュール920を生成した様子を示している。
【0083】
(2)最適化部による状態遷移処理の具体例
次に、再計算スケジューラ機能800において、最適化部830が状態を遷移させる状態遷移処理の具体例について説明する。
図10は、最適化部による状態遷移処理の具体例を示す図である。
【0084】
このうち、
図10(a)の例は、
・はじめに、遷移前の状態1010(計算順序を示す情報)が生成部810により特定され、
・続いて、特定された次の遷移先候補について、ステップ数シミュレータ820により算出又は推定されたステップ数に基づいて、最適化部830が、特定された次の遷移先候補へと状態を遷移させるかどうかを決定し、
・状態を新たな状態1020(新たな計算順序を示す情報)に遷移させた、
様子を示している。
【0085】
図10(a)の例では、「状態」が遷移し、値"c"をRelu関数に入力して値"d"を出力する計算が、値"c"を出力する計算の後から、値"g"を出力する計算の前へと移動したことを示している。
【0086】
同様に、
図10(b)の例は、
・はじめに、遷移前の状態1030(計算順序を示す情報)が生成部810により特定され、
・続いて、特定された状態1030の隣の状態として、最適化部830が次の遷移先候補を複数生成すると、生成部810により次の遷移先候補が1つ選択され、
・ステップ数シミュレータ820により算出又は推定されたステップ数に基づいて、最適化部830が、選択された次の遷移先候補へと状態を遷移させることを決定し、
・状態を新たな状態1040(新たな計算順序及び再計算箇所を示す情報)に遷移させた、
様子を示している。
【0087】
図10(b)の例では、「状態」が遷移し、値"c"をConvolution関数に入力して値"e"を出力する計算の前に、値"a"と値"b"とを和算して値"c"を出力する再計算処理が追加されたことを示している。
【0088】
<スケジュール最適化処理の流れ>
次に、再計算スケジューラ機能800によるスケジュール最適化処理の流れについて説明する。
図11は、スケジュール最適化処理の流れを示すフローチャートである。
【0089】
ステップS1101において、再計算スケジューラ機能800は、外部から受信した情報である計算グラフに基づき、状態を特定する。
【0090】
ステップS1102において、再計算スケジューラ機能800は、特定した状態から、スケジュールを生成する。
【0091】
ステップS1103において、再計算スケジューラ機能800は、生成したスケジュールに基づいて、ステップ数を算出又は推定し、生成したスケジュールと、算出又は推定したステップ数とを対応付けて記憶する。
【0092】
ステップS1104において、再計算スケジューラ機能800は、所定の条件を満たすか否かを判定し、所定の条件を満たさないと判定した場合には(ステップS1104においてNOの場合には)、ステップS1205に進む。
【0093】
なお、所定の条件とは、例えば、
・算出又は推定したステップ数が所定のステップ数を下回る場合、あるいは、
・現在の最適化の効率と、学習にかかる推定時間とを比較して、これ以上最適化を続けると損だと判断した場合、あるいは、
・焼きなまし法の繰り返しを所定の回数以上実行した場合、
等を指す。
【0094】
ステップS1105において、再計算スケジューラ機能800は、ステップ数が最小となるスケジュールが生成されるよう、焼きなまし法を用いて状態を遷移させる。
【0095】
一方、ステップS1104において、所定の条件を満たすと判定した場合には(ステップS1104においてYESの場合には)、ステップS1206に進む。
【0096】
ステップS1106において、再計算スケジューラ機能800は、所定の条件を満たした状態で、記憶したスケジュールの中で、最もステップ数が少ないスケジュールを選択する。これにより、再計算スケジューラ機能800では、最適な計算順序及び再計算箇所を決定することができる。また、再計算スケジューラ機能800は、選択したスケジュールを、計算順序及び再計算箇所が最適化されたスケジュールとして出力する。
【0097】
<まとめ>
以上の説明から明らかなように、第1の実施形態に係るコンパイル装置140は、
・第1メモリと第2メモリとを有するチップ180_1等において実行される計算の計算順序を含む、計算のスケジュールを生成するスケジューリング装置として機能する。
・受信した情報に基づいて特定される状態から、当該スケジュールを生成する。
・生成したスケジュールに基づいて、第2メモリからのデータの転送処理を含む処理の実行に要する時間を算出又は推定する。
【0098】
なお、第1の実施形態に係るコンパイル装置140において、当該スケジュールを生成することは、第2メモリからのデータの転送処理を、当該データを得る再計算処理に置き換えるよう、状態を遷移させることを含む。
【0099】
このように、第1の実施形態に係るコンパイル装置140では、第2メモリへのアクセスに時間がかかる構成を考慮して、第2メモリからの転送処理を再計算処理に置き換えてスケジュールを生成する。
【0100】
これにより、第1の実施形態によれば、マシンコードが実行される装置の構成に応じたスケジュールを生成することができる。
【0101】
[第2の実施形態]
上記第1の実施形態では、再計算スケジューラ機能の機能構成の詳細として、
図8を例示して説明したが、再計算スケジューラ機能の機能構成は、
図8に限定されない。第2の実施形態では、
図8とは異なる再計算スケジューラ機能の機能構成を例示する。
【0102】
<再計算スケジューラ機能の機能構成>
図12は、再計算スケジューラ機能の機能構成の詳細を示す第2の図である。
図12に示すように、再計算スケジューラ機能1200は、
・生成部1210、
・ステップ数シミュレータ820、
・最適化部830、
を有する。
【0103】
本実施形態において、生成部1210は、計算グラフに基づいて、初期スケジュールの元となる「状態」を特定し、次の遷移先候補となる"隣の状態"を選択すると、再計算処理等を設定する。これにより、生成部1210は、スケジュールを生成する。
【0104】
なお、本実施形態において、計算グラフに基づいて特定される「状態」には、
・第1メモリ上に存在しない場合に再計算すべき値を示す情報、及び、
・計算順序の元となる列、
が含まれ、生成部1210では、計算順序の元となる順序を保ちつつ計算グラフが指定する依存関係に違反することのない計算順序を決定するとともに、第1メモリ上に存在しない場合に当該値を再計算することで取得するよう、再計算処理を設定する。
【0105】
<再計算スケジューラ機能による処理の具体例>
次に、再計算スケジューラ機能1200による処理の具体例について説明する。ここでは、生成部1210が、計算グラフに基づいて、初期スケジュールの元となる「状態」を特定し、再計算処理を設定し、スケジュールを生成するスケジュール生成処理の具体例について説明する。
【0106】
図13は、生成部によるスケジュール生成処理の具体例を示す第2の図である。
図13の例は、生成部1210が、
・符号510'に示す計算グラフに基づいて、計算順序及び第1メモリ上に存在しない場合に再計算すべき値を示す情報を状態1310として特定し、
・特定した状態1310に基づいて再計算処理を設定し、スケジュール1320を生成し、
・生成したスケジュール1320をステップ数シミュレータに通知する、
様子を示している。
【0107】
具体的には、
図13の例は、値の依存関係及び値"A"を、第1メモリ上に存在しない場合に再計算すべき値であることを示す計算グラフ(符号510')が通知され、符号510'に示す計算グラフに基づいて、
・値"A"を最初に計算すること、
・値"A"に基づいて、値"B"を計算し、値"B"に基づいて値"C"を計算すること、
・値"A"を再計算した後に、値"D"を計算し、値"D"に基づいて値"E"を計算すること、
・値"C"と値"E"に基づいて、値"F"を計算すること、
が状態1110として特定された様子を示している。
【0108】
また、
図13の例は、生成部1210が、
・値"B"の計算の後に、値"A"を第2メモリに退避させることなく削除する削除処理を設定し、
・値"D"の計算の前に、値"A"の再計算処理を設定する、
ことで、スケジュール1320を生成した様子を示している。
【0109】
<まとめ>
以上の説明から明らかなように、第2の実施形態に係るコンパイル装置140は、
・第1メモリと第2メモリとを有するチップ180_1等において実行される計算の計算順序を含む、計算のスケジュールを生成するスケジューリング装置として機能する。
・受信した情報に基づいて特定される状態から、当該スケジュールを生成する。
・生成したスケジュールに基づいて、第2メモリからのデータの転送処理を含む処理の実行に要する時間を算出又は推定する。
【0110】
なお、第2の実施形態に係るコンパイル装置140において、当該スケジュールを生成することは、第2メモリからのデータの転送処理を、当該データを得る再計算処理に置き換えるよう、状態を遷移させることを含む。
【0111】
このように、第2の実施形態に係るコンパイル装置140では、第2メモリへのアクセスに時間がかかる構成を考慮して、第2メモリからの転送処理を再計算処理に置き換えてスケジュールを生成する。
【0112】
これにより、第2の実施形態に係るコンパイル装置140によれば、上記第1の実施形態同様、マシンコードが実行される装置の構成に応じたスケジュールを生成することができる。
【0113】
[第3の実施形態]
上記第1及び第2の実施形態では、コンパイル装置140が、サーバ装置120内に配されるものとして説明したが、コンパイル装置140は、サーバ装置120とは別体に構成してもよい。また、上記第1の実施形態では、変換部410はコンパイル装置140において実現されるものとして説明したが、変換部410は、例えば、端末装置110において実現されてもよい。あるいは、変換部410は、端末装置110以外の他の外部装置(例えば、他のサーバ装置)において実現されてもよい。
【0114】
また、上記第1及び第2の実施形態において、計算グラフは、ソースコード230が実行され、ONNXの表現形式に変換されることで生成されるものとして説明したが、計算グラフの生成方法はこれに限定されず、他の方法により計算グラフを生成してもよい。
【0115】
また、上記第1及び第2の実施形態において説明した「状態」は一例にすぎず、上記第1及び第2の実施形態において説明した「状態」とは異なる「状態」を用いてもよい。
【0116】
また、上記第1及び第2の実施形態では、例えば、チップ180_1がLevelAの階層に、4個の第3階層ブロックを有し、LevelBの階層に、4個の第2階層ブロックを有するものとして説明した(
図2)。しかしながら、各階層のブロック(メモリ)の数及び階層の数(深さ)はこれに限定されず、任意である。
【0117】
また、上記第1及び第2の実施形態では、
・LevelAの階層:第3階層ブロック、
・LevelBの階層:第2階層ブロック、
・LevelCの階層:第1階層ブロック、
としたが、各階層の定義はこれに限定されず、例えば、
・LevelAの階層:チップ、
・LevelBの階層:第3階層ブロック、
・LevelCの階層:第2階層ブロック、
・LevelDの階層:第1階層ブロック、
としてもよいし、
・LevelAの階層:チップ及び第3階層ブロック、
・LevelBの階層:第2階層ブロック、
・LevelCの階層:第1階層ブロック、
としてもよい。
【0118】
なお、メモリが属する階層は、最下層に限定されず、他の階層に変わってもよい。また、最上位のメモリを束ねる構造(例えば、チップ)、チップを束ねる構造(例えば、ノード)、ノードを束ねる構造といった階層を定義して、上記第1及び第2の実施形態を適用してもよい。
【0119】
また、上記第1及び第2の実施形態において、サーバ装置120の用途について言及しなかったが、サーバ装置120は、例えば、機械学習モデルの訓練に用いられる訓練装置として機能してもよい。この場合、スケジューリングされる計算は機械学習モデルの訓練の際の計算を含む。機械学習モデルの訓練の際には過去の計算結果を用いる場合が多いため、本発明によれば効率的に機械学習モデルを訓練し、訓練済みの機械学習モデルを得ることができる。
【0120】
[その他の実施形態]
本明細書(請求項を含む)において、「a、b及びcの少なくとも1つ(一方)」又は「a、b又はcの少なくとも1つ(一方)」の表現(同様な表現を含む)が用いられる場合は、a、b、c、a-b、a-c、b-c、又はa-b-cのいずれかを含む。また、a-a、a-b-b、a-a-b-b-c-c等のように、いずれかの要素について複数のインスタンスを含んでもよい。さらに、a-b-c-dのようにdを有する等、列挙された要素(a、b及びc)以外の他の要素を加えることも含む。
【0121】
また、本明細書(請求項を含む)において、「データを入力として/データに基づいて/に従って/に応じて」等の表現(同様な表現を含む)が用いられる場合は、特に断りがない場合、各種データそのものを入力として用いる場合や、各種データに何らかの処理を行ったもの(例えば、ノイズ加算したもの、正規化したもの、各種データの中間表現等)を入力として用いる場合を含む。また「データに基づいて/に従って/に応じて」何らかの結果が得られる旨が記載されている場合、当該データのみに基づいて当該結果が得られる場合を含むとともに、当該データ以外の他のデータ、原因、条件、及び/又は状態等にも影響を受けて当該結果が得られる場合をも含み得る。また、「データを出力する」旨が記載されている場合、特に断りがない場合、各種データそのものを出力として用いる場合や、各種データに何らかの処理を行ったもの(例えば、ノイズ加算したもの、正規化したもの、各種データの中間表現等)を出力とする場合も含む。
【0122】
また、本明細書(請求項を含む)において、「接続される(connected)」及び「結合される(coupled)」との用語が用いられる場合は、直接的な接続/結合、間接的な接続/結合、電気的(electrically)な接続/結合、通信的(communicatively)な接続/結合、機能的(operatively)な接続/結合、物理的(physically)な接続/結合等のいずれをも含む非限定的な用語として意図される。当該用語は、当該用語が用いられた文脈に応じて適宜解釈されるべきであるが、意図的に或いは当然に排除されるのではない接続/結合形態は、当該用語に含まれるものして非限定的に解釈されるべきである。
【0123】
また、本明細書(請求項を含む)において、「AがBするよう構成される(A configured to B)」との表現が用いられる場合は、要素Aの物理的構造が、動作Bを実行可能な構成を有するとともに、要素Aの恒常的(permanent)又は一時的(temporary)な設定(setting/configuration)が、動作Bを実際に実行するように設定(configured/set)されていることを含んでよい。例えば、要素Aが汎用プロセッサである場合、当該プロセッサが動作Bを実行可能なハードウェア構成を有するとともに、恒常的(permanent)又は一時的(temporary)なプログラム(命令)の設定により、動作Bを実際に実行するように設定(configured)されていればよい。また、要素Aが専用プロセッサ又は専用演算回路等である場合、制御用命令及びデータが実際に付属しているか否かとは無関係に、当該プロセッサの回路的構造が動作Bを実際に実行するように構築(implemented)されていればよい。
【0124】
また、本明細書(請求項を含む)において、含有又は所有を意味する用語(例えば、「含む(comprising/including)」及び「有する(having)」等)が用いられる場合は、当該用語の目的語により示される対象物以外の物を含有又は所有する場合を含む、open-endedな用語として意図される。これらの含有又は所有を意味する用語の目的語が数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)である場合は、当該表現は特定の数に限定されないものとして解釈されるべきである。
【0125】
また、本明細書(請求項を含む)において、ある箇所において「1つ又は複数(one or more)」又は「少なくとも1つ(at least one)」等の表現が用いられ、他の箇所において数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)が用いられているとしても、後者の表現が「1つ」を意味することを意図しない。一般に、数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)は、必ずしも特定の数に限定されないものとして解釈されるべきである。
【0126】
また、本明細書において、ある実施例の有する特定の構成について特定の効果(advantage/result)が得られる旨が記載されている場合、別段の理由がない限り、当該構成を有する他の1つ又は複数の実施例についても当該効果が得られると理解されるべきである。但し当該効果の有無は、一般に種々の原因、条件、及び/又は状態等に依存し、当該構成により必ず当該効果が得られるものではないと理解されるべきである。当該効果は、種々の原因、条件、及び/又は状態等が満たされたときに実施例に記載の当該構成により得られるものに過ぎず、当該構成又は類似の構成を規定したクレームに係る発明において、当該効果が必ずしも得られるものではない。
【0127】
本明細書(請求項を含む)において、「最適化する(optimize)/最適化(optimization)」等の用語が用いられる場合は、グローバルな最適値を求めること、グローバルな最適値の近似値を求めること、ローカルな最適値を求めること、及びローカルな最適値の近似値を求めることを含み、当該用語が用いられた文脈に応じて適宜解釈されるべきである。また、これら最適値の近似値を確率的又はヒューリスティックに求めることを含む。
【0128】
また、本明細書(請求項を含む)において、複数のハードウェアが所定の処理を行う場合、各ハードウェアが協働して所定の処理を行ってもよいし、一部のハードウェアが所定の処理の全てを行ってもよい。また、一部のハードウェアが所定の処理の一部を行い、別のハードウェアが所定の処理の残りを行ってもよい。本明細書(請求項を含む)において、「1又は複数のハードウェアが第1の処理を行い、前記1又は複数のハードウェアが第2の処理を行う」等の表現が用いられている場合、第1の処理を行うハードウェアと第2の処理を行うハードウェアは同じものであってもよいし、異なるものであってもよい。つまり、第1の処理を行うハードウェア及び第2の処理を行うハードウェアが、前記1又は複数のハードウェアに含まれていればよい。なお、ハードウェアは、電子回路、又は、電子回路を含む装置等を含んでよい。
【0129】
また、本明細書(請求項を含む)において、複数の記憶装置(メモリ)がデータの記憶を行う場合、複数の記憶装置(メモリ)のうち個々の記憶装置(メモリ)は、データの一部のみを記憶してもよいし、データの全体を記憶してもよい。
【0130】
以上、本開示の実施形態について詳述したが、本開示は上記した個々の実施形態に限定されるものではない。特許請求の範囲に規定された内容及びその均等物から導き出される本発明の概念的な思想と趣旨を逸脱しない範囲において種々の追加、変更、置き換え及び部分的削除等が可能である。例えば、前述した全ての実施形態において、数値又は数式を説明に用いている場合は、一例として示したものであり、これらに限られるものではない。また、実施形態における各動作の順序は、一例として示したものであり、これらに限られるものではない。