(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-02-02
(45)【発行日】2024-02-13
(54)【発明の名称】機械学習モデルを改良して局所性を改善させること
(51)【国際特許分類】
G06N 3/063 20230101AFI20240205BHJP
G06N 20/00 20190101ALI20240205BHJP
【FI】
G06N3/063
G06N20/00
【外国語出願】
(21)【出願番号】P 2022082336
(22)【出願日】2022-05-19
(62)【分割の表示】P 2020566754の分割
【原出願日】2019-07-29
【審査請求日】2022-07-06
(32)【優先日】2018-10-10
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ヨーン,ドゥ・ヒュン
(72)【発明者】
【氏名】パティル,ニシャント
(72)【発明者】
【氏名】ジョピー,ノーマン・ポール
【審査官】渡辺 一帆
(56)【参考文献】
【文献】米国特許第10019668(US,B1)
【文献】米国特許出願公開第2017/0161604(US,A1)
【文献】米国特許出願公開第2006/0212654(US,A1)
【文献】米国特許出願公開第2018/0204117(US,A1)
【文献】米国特許出願公開第2017/0124454(US,A1)
【文献】国際公開第2017/163442(WO,A1)
【文献】欧州特許出願公開第03376441(EP,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/02- 3/10
G06N 20/00-20/20
(57)【特許請求の範囲】
【請求項1】
機械学習モデルの局所性を改善するための方法であって、前記方法はデータ処理装置によって実行され、前記方法は、
機械学習モデルのデータを受け付けるステップを含み、前記データは、前記機械学習モデルの複数の演算を表し、前記方法は、さらに、
前記機械学習モデルが展開される1つ以上の機械学習プロセッサのメモリ階層の特性を指定するデータを受け付けるステップを含み、前記メモリ階層は、前記機械学習モデルを利用して機械学習の計算を行うときに前記1つ以上の機械学習プロセッサによって使われる機械学習データを格納するための複数のメモリを含み、前記特性は、各メモリのデータ記憶容量と、各メモリのメモリバンド幅とを含み、前記複数のメモリのうち少なくとも1つは、少なくとも1つのその他のメモリとは異なるメモリバンド幅を有し、前記方法は、さらに、
前記機械学習モデルのデータおよび前記メモリ階層の特性に基づいて、更新済み機械学習モデルを作成するステップを含み、前記作成するステップは、
前記機械学習モデルに基づいて、前記機械学習モデルの所与の演算の出力データは前記複数のメモリのうちバンド幅が最も高いメモリに格納されるべきであると判断するステップと、
前記所与の演算の出力データは、前記バンド幅が最も高いメモリのデータ記憶容量よりも大きいデータサイズを有すると判断するステップと、
前記所与の演算の出力データは、前記バンド幅が最も高いメモリの前記データ記憶容量よりも大きいデータサイズを有すると判断したことに応答して、出力データの各部分が、前記バンド幅が最も高いメモリのデータ記憶容量以下であるデータサイズを有するように、前記出力データを複数の出力データ部分に分割するための1つ以上の演算を前記更新済み機械学習モデルに追加するステップと、
前記更新済みの機械学習モデルを利用して機械学習の計算を行うステップとを含む、方法。
【請求項2】
前記出力データは、テンソルを含み、
前記出力データを前記複数の出力データ部分に分割するための前記1つ以上の演算は、前記テンソルを複数のサブテンソルに分割するための分割演算を含む、請求項1に記載の方法。
【請求項3】
前記更新済み機械学習モデルを作成するステップは、サブテンソルごとにそれぞれの演算シーケンスを前記機械学習モデルに追加するステップを含み、各それぞれの演算シーケンスは、前記機械学習モデルにおいて前記テンソルに対して行われる特定の演算シーケンスに対応する、請求項2に記載の方法。
【請求項4】
前記更新済み機械学習モデルを作成するステップは、前記それぞれの演算シーケンスのうち1つ以上の演算シーケンスのうちの、前記それぞれの演算シーケンスから次のそれぞれの演算シーケンスのうちの最初の演算まで制御を移す最後の演算における各制御依存関係を、前記機械学習モデルに追加するステップを含む、請求項3に記載の方法。
【請求項5】
前記更新済み機械学習モデルを作成するステップは、前記機械学習モデルを改良して、所与の演算シーケンスについての前記サブテンソルを、前記所与の演算シーケンスが行われている間に前記バンド幅が最も高いメモリ上に格納するステップを含む、請求項4に記載の方法。
【請求項6】
前記更新済み機械学習モデルを作成するステップは、前記複数のサブテンソルを1つの出力テンソルにマージするように構成された結合演算を、前記更新済み機械学習モデルに追加するステップを含む、請求項2に記載の方法。
【請求項7】
前記更新済み機械学習モデルを作成するステップは、前記機械学習モデルの前記複数の演算のうち1つ以上の演算の各々について、前記1つ以上の機械学習プロセッサの前記メモリ階層の特性に基づいて、前記1つ以上の機械学習プロセッサの前記複数のメモリのうちどのメモリに前記演算の出力を格納するかを
判断し、判断の結果に応じて前記機械学習モデルを更新するステップを含む、請求項1に記載の方法。
【請求項8】
機械学習計算システムであって、
データ処理装置と、
前記データ処理装置とデータ通信するメモリ記憶装置とを備え、前記メモリ記憶装置は、前記データ処理装置によって実行可能な命令を格納し、前記命令は、実行されると、前記データ処理装置に複数の動作を実行させ、前記複数の動作は、
機械学習モデルのデータを受け付けることを含み、前記データは、前記機械学習モデルの演算を表し、前記複数の動作は、さらに、
前記機械学習モデルが展開される1つ以上の機械学習プロセッサのメモリ階層の特性を指定するデータを受け付けることを含み、前記メモリ階層は、前記機械学習モデルを利用して機械学習の計算を行うときに前記1つ以上の機械学習プロセッサによって使われる機械学習データを格納するための複数のメモリを含み、前記特性は、各メモリのデータ記憶容量と、各メモリのメモリバンド幅とを含み、前記複数のメモリのうち少なくとも1つは、少なくとも1つのその他のメモリとは異なるメモリバンド幅を有し、前記複数の動作は、さらに、
前記機械学習モデルのデータおよび前記メモリ階層の特性に基づいて、更新済み機械学習モデルを作成することを含み、前記作成することは、
前記機械学習モデルに基づいて、前記機械学習モデルの所与の演算の出力データは、前記複数のメモリのうちバンド幅が最も高いメモリに格納されるべきであると判断することと、
前記所与の演算の出力データは、前記バンド幅が最も高いメモリのデータ記憶容量よりも大きいデータサイズを有すると判断することと、
前記所与の演算の出力データは、前記バンド幅が最も高いメモリの前記データ記憶容量よりも大きいデータサイズを有すると判断したことに応答して、出力データの各部分が前記バンド幅が最も高いメモリの前記データ記憶容量以下のデータサイズを有するように、前記出力データを複数の出力データ部分に分割するための1つ以上の演算を、前記更新済み機械学習モデルに追加することと、
前記更新済みの機械学習モデルを利用して機械学習の計算を行うこととを含む、機械学習計算システム。
【請求項9】
前記出力データは、テンソルを含み、
前記出力データを前記複数の出力データ部分に分割するための前記1つ以上の演算は、前記テンソルを複数のサブテンソルに分割するための分割演算を含む、請求項8に記載のシステム。
【請求項10】
前記更新済み機械学習モデルを作成することは、サブテンソルごとに各演算シーケンスを前記機械学習モデルに追加することを含み、各演算シーケンスは、前記機械学習モデルにおいて前記テンソルに対して行われる特定の演算シーケンスに対応する、請求項9に記載のシステム。
【請求項11】
前記更新済み機械学習モデルを作成することは、前記それぞれの前記演算シーケンスのうち1つ以上の演算シーケンスのうちの、前記演算シーケンスから次の演算シーケンスの最初の演算まで制御を移す最後の演算における各制御依存関係を、前記機械学習モデルに追加することを含む、請求項10に記載のシステム。
【請求項12】
前記更新済み機械学習モデルを作成することは、前記機械学習モデルを改良して、所与の演算シーケンスのための前記サブテンソルを、前記所与の演算シーケンスが行われている間に前記バンド幅が最も高いメモリ上に格納することを含む、請求項11に記載のシステム。
【請求項13】
前記更新済み機械学習モデルを作成することは、前記複数のサブテンソルを1つの出力テンソルにマージするように構成された結合演算を前記更新済み機械学習モデルに追加することを含む、請求項9に記載のシステム。
【請求項14】
前記更新済み機械学習モデルを作成することは、前記機械学習モデルの演算のうち1つ以上の演算の各々について、前記1つ以上の機械学習プロセッサの前記メモリ階層の特性に基づいて前記1つ以上の機械学習プロセッサの前記複数のメモリのうちどのメモリに前記演算の出力を格納するかを
判断し、判断の結果に応じて前記機械学習モデルを更新することを含む、請求項8に記載のシステム。
【請求項15】
請求項1~7のいずれかに記載の方法を1つ以上のデータ処理装置に実行させるためのコンピュータプログラム。
【発明の詳細な説明】
【背景技術】
【0001】
背景
本明細書は、一般に、メモリの特性に基づいて機械学習モデルを改良して局所性を改善させることに関する。
【0002】
ニューラルネットワークは、モデルの1つ以上の層を用いて、受け付けた入力に対して出力(たとえば、分類)を生成する機械学習モデルである。外層に加えて、1つ以上の隠れ層を含むニューラルネットワークもある。各隠れ層の出力は、ネットワークの次の層、つまり、ネットワークの次の隠れ層または出力層への入力として使われる。ネットワークの各層は、各パラメータのセットの現在値に従って、受け付けた入力から出力を生成する。
【0003】
ニューラルネットワークは、ノードおよびエッジを有するグラフとして表すことができる。ノードは、ゼロ個以上の入力およびゼロ個以上の出力を有し得る作業を表すことができる。エッジは、作業間のデータ依存関係および/または制御依存関係を表すことができる。機械学習プロセッサは、異なるデータ(通常、1度に1つの入力サンプルのバッチ)を用いてこのグラフを繰り返し実行することができる。各作業に対して、機械学習プロセッサは、メモリから入力データを取得し、出力データをメモリに格納する。
【発明の概要】
【0004】
概要
本明細書は、機械学習モデルの局所性を改善させること、および改善したモデルを利用して機械学習の計算を行うことに関する技術について説明する。
【0005】
一般に、本明細書で説明する主題の1つの革新的な態様は、機械学習モデルのデータを受け付けるステップを含む方法に含めることができる。このデータは、機械学習モデルの作業および当該作業間のデータ依存関係を表し得る。機械学習モデルが展開される機械学習プロセッサのメモリ階層の特性を指定するデータが受け付けられる。メモリ階層は、機械学習モデルを利用して機械学習の計算を行うときに機械学習プロセッサによって使われる機械学習データを格納するための複数のメモリを複数のメモリレベルに含み得る。特性は、各メモリのデータ記憶容量と、各メモリのメモリバンド幅とを含み得る。複数のメモリのうち少なくとも1つは、少なくとも1つのその他のメモリとは異なるメモリバンド幅を有し得る。機械学習モデルのデータおよびメモリ階層の特性に基づいて更新済み機械学習モデルが作成され得る。更新済みの機械学習モデルは、機械学習モデルの作業および制御依存関係を改良してメモリ階層の特性を考慮することによって作成され得る。更新済みの機械学習モデルを利用して機械学習の計算が実行され得る。
【0006】
これらのおよびその他の実施態様は、各々、任意で下記の特徴のうち1つ以上を含み得る。いくつかの態様では、機械学習モデルのデータは、機械学習モデルの作業と、当該作業間の制御依存関係と、作業間のデータ依存関係とを表すグラフを含み得る。
【0007】
いくつかの態様では、更新済みの機械学習モデルを作成するステップは、作業のうち少なくとも一部の作業について、作業の出力を格納するためのメモリを、出力が別の作業への入力としていつ使われるかに基づいて複数のメモリの中から選択するステップを含み得る。
【0008】
いくつかの態様では、更新済みの機械学習モデルを作成するステップは、第1作業の出
力データが第2作業によって入力としていつ使われるかに基づいて、第1作業の出力データが複数のメモリのうち第1メモリに格納されると判断するステップを含み得る。第1メモリは、複数のメモリのうち第2メモリよりも低いメモリバンド幅を有し得る。この判断に応答して、更新済みの機械学習モデルは、機械学習プロセッサに、第1作業によって出力データが生成された後に第1作業の出力データを第1メモリに格納させる第1制御データと、機械学習プロセッサに、出力データが第2作業への入力として使われる前に出力データを第1メモリから第2メモリに転送させる第2制御データとを含み得る。
【0009】
いくつかの態様では、第2制御データは、機械学習プロセッサに、第3作業が実行されることに応答して出力データを第1メモリから第2メモリに転送させる。第3作業は、第1作業および第2作業とは異なり得る。第1作業の出力データが第2作業によって入力としていつ使われるかに基づいて、第1作業の出力データが複数のメモリのうち第1メモリに格納されると判断するステップは、(i)第1作業と第2作業との間に実行される作業の数または(ii)第1作業が実行される時点から第2作業が実行される時点までの予想期間のうち、少なくとも1つに基づいて、第1作業の出力データが第1メモリに格納されると判断するステップを含み得る。
【0010】
いくつかの態様では、更新済みの機械学習モデルを作成するステップは、機械学習モデルの特定の作業シーケンスのための入力データが複数のメモリのうち特定のメモリよりも多くのデータ記憶容量を必要とすると判断するステップを含み得る。これに応答して、更新済みの機械学習モデルは、特定の作業シーケンスと同じ作業シーケンスを含む複数の作業シーケンスと、機械学習プロセッサに入力データを複数のデータ部分に分割させる第1制御データと、機械学習プロセッサに各データ部分を複数の作業シーケンスの各作業シーケンスに割り当てさせる第2制御データと、機械学習プロセッサに複数の作業シーケンスを連続して実行させる第3制御データとを含み得る。
【0011】
本明細書で説明する主題は、次の利点のうち1つ以上を実現するよう、特定の実施の形態で実現され得る。機械学習モデルは、データアクセスの局所性(たとえば、データ配置および/またはデータ移動における局所性)を改善させるために当該モデルが実装される機械学習プロセッサのメモリ階層の特性に基づいて改良され得、その結果、メモリバンド幅の改善(たとえば、データアクセスの高速化)およびメモリ利用の改善が得られる。このメモリバンド幅およびメモリ利用における改善により、機械学習プロセッサは、元の機械学習モデルを利用するよりも高速かつ効率的に機械学習の計算を行うことが可能になる。
【0012】
機械学習モデルの作業、データ依存関係、および/または制御依存関係を、その他のデータよりも早く利用される作業からの出力データが当該その他のデータよりも高速なメモリ(たとえば、バンド幅が高いメモリ)に格納されるよう、更新することができる。また、別の作業への入力として使われるためにアクセスされる前により高速なメモリに当該その他のデータがプリフェッチされるよう、作業、データ依存関係、および制御依存関係を更新することができる。これにより、データがアクセスされる速度が改善され、たとえば、再利用されているデータの代わりに使用されていないデータを格納してより高速なメモリ空間を無駄にしないようにすることによって、当該より高速なメモリの利用が改善される。
【0013】
メモリ階層の特性を指定するデータに基づいて機械学習モデルを更新することによって、様々な機械学習プロセッサまたは実行フレームワークのための機械学習モデルの実行が改善されるよう、機械学習モデルの局所性を様々なメモリ階層に適応させることができる。頻繁に使われるデータ(たとえば、重み)をオンチップまたはその他の高速アクセスメモリに格納することにより、機械学習の計算のためにこのようなデータをより高速にロー
ドすることが可能になる。
【0014】
この態様およびその他の態様のその他の実施態様は、コンピュータ記憶装置上に符号化された対応するシステム、方法、およびコンピュータプログラムを含む。システム、方法、およびコンピュータプログラムは、方法を実行するように構成される。1つ以上のコンピュータから構成されるシステムにインストールされたソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せによって、当該システムをそのように構成することができる。ソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せは、動作中、システムに動作を実行させるように構成される。データ処理装置によって実行されると当該装置に動作を実行させる命令を1つ以上のコンピュータプログラムが有することによって、当該1つ以上のコンピュータプログラムをそのように構成することができる。
【0015】
本明細書において説明する主題の1つ以上の実施態様の詳細を、添付の図面および下記の説明において説明する。主題のその他の潜在的な特徴、態様、および利点は、説明、図面、および添付の特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【0016】
【
図1】機械学習システムが機械学習モデルの局所性を改善し、改善した機械学習モデルを利用して機械学習の計算を行う例示的な環境のブロック図である。
【
図2】機械学習プロセッサの例示的な実行フレームワークのブロック図である。
【
図3】機械学習プロセッサの別の例示的な実行フレームワークのブロック図である。
【
図4】機械学習プロセッサの別の例示的な実行フレームワークのブロック図である。
【
図5】機械学習プロセッサの別の例示的な実行フレームワークのブロック図である。
【
図6】機械学習プロセッサの別の例示的な実行フレームワークのブロック図である。
【
図7】機械学習モデルの入力グラフ、および局所性が改善した更新済みのグラフを示す図である。
【
図8】機械学習モデルの別の入力グラフ、および局所性が改善した別の更新済みのグラフを示す図である。
【
図9】局所性が改善した更新済みの機械学習モデルを作成し、更新済みの機械学習モデルを利用して機械学習の計算を行うための例示的な処理を説明するフロー図である。
【発明を実施するための形態】
【0017】
様々な図面における同じ参照番号および名称は、同じ要素を示す。
詳細な説明
一般に、本明細書において説明する主題は、更新済み機械学習モデルを作成して機械学習モデルが展開される機械学習プロセッサのメモリ階層の特性を考慮することに関する。機械学習モデルは、機械学習モデルの作業、データ依存関係、および/または制御依存関係を改良し、メモリ階層の特性に基づいて機械学習モデルのデータアクセスの局所性を改善させることによって更新され得る。たとえば、機械学習モデルを改良して、データ配置(たとえば、共通して利用されるデータをより高速なメモリに格納すること)および/またはデータ移動(たとえば、しばらくの間利用されることのないデータをより低速のメモリに格納し、利用される前により高速なメモリにプリフェッチすること)における局所性を改善させることができる。
【0018】
ニューラルネットワークなど、機械学習モデルは、行列の演算および畳み込みなど、主要なカーネル動作を使った高い計算能力が求められ得る。これに加えて、ニューラルネッ
トワークは、より深層かつより複雑に進化している。この増え続ける要求に応えるために、全結合層計算ユニット(たとえば、プロセッサコア)を有する新しいアクセラレータ(たとえば、機械学習プロセッサ)が導入されている。低いメモリバンド幅は、たとえば、アイドル状態の計算ユニットにメモリからのデータを待たせることによって計算ユニットの性能を限定し得る。本明細書において説明するニューラルネットワーク実行における局所性を改善させるためのハードウェアおよびソフトウェア技術は、メモリアクセス速度を向上させることができるので、計算ユニットが機械学習の計算を行う速度を上げることができる。
【0019】
図1は、機械学習システム120が機械学習モデルの局所性を改善し、機械学習モデルを用いて機械学習の計算する例示的な環境100のブロック図である。機械学習システム120は、ユーザデバイス110から機械学習モデル112(たとえば、ニューラルネットワークまたはその他の適切な機械学習モデル)のデータを受け付け、機械学習出力114(たとえば、機械学習モデルによって出力されるデータ)をユーザデバイス110に提供する1つ以上のフロントエンドサーバ130を備える。フロントエンドサーバ130は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、インターネット、モバイルネットワーク、または、それらの組合せなど、ネットワーク150上でユーザデバイス110と通信を行うことができる。
【0020】
機械学習モデル112のデータは、機械学習モデルの作業と、これらの作業間のデータ依存関係とを表すデータを含み得る。たとえば、機械学習モデルのデータは、作業を表すノードと、これらの作業間の制御依存関係(および/またはデータ依存関係)を表すエッジとを含むグラフを含み得る。データ依存関係を表すエッジは、作業が別の作業からのデータに依存していることを示す(たとえば、作業は、別の作業からの出力データを用いて機械学習の計算を実行する)。制御依存関係を表すエッジは、作業が別の作業の実行に依存していることを示す(たとえば、作業は、別の作業が実行されるまで実行されない)。これらの作業は、たとえば機械学習モデルによって推論を計算するために機械学習モデルによってフォワードパスを実行するために必要な作業であり得る。これらの作業は、たとえば、ニューラルネットワークの層によって実行される行列の演算作業および/または畳み込み演算を含み得る。別の例として、これらの作業は、機械学習モデルを訓練するための訓練プロセスのイテレーション(繰り返し)を実行するために必要な作業であり得る。これらの作業は、機械学習モデルによってフォワードパスを実行するために必要な作業と、機械学習モデルによってバックワードパスを実行するために必要な作業、つまり、機械学習モデルの重みまたはパラメータの勾配を判断するために必要な逆伝播作業とを含み得る。
【0021】
機械学習システム120は、機械学習モデルの局所性を改善させ、モデルを訓練し、当該モデルを実行して(たとえば、入力データを分類するために)機械学習出力を判断することができる。機械学習システム120は、機械学習モデル改善モジュール131(説明が煩雑になるのを防ぐため、改善モジュール132とも称す)を備える。機械学習モデル改善モジュール131は、機械学習モデル112のデータを受け付け、改善した局所性(たとえば、改善したデータ再利用、データ配置における局所性、および/またはデータ移動における局所性)を用いて更新済み機械学習モデル132を作成する。改善モジュール131は、機械学習モデルが展開される機械学習プロセッサのメモリ階層の特性に基づいて当該機械学習モデルを更新し得る。すなわち、モデル改善モジュール131は、更新済みの機械学習モデル132が実行されることになる機械学習プロセッサのメモリ階層の局所性が改善された更新済み機械学習モデル132を作成する。本明細書において説明する技術を用いて、改善モジュール131は、ニューラルネットワーク、ならびに作業の集合および当該作業間の依存関係として表され得るその他の適切な機械学習モデルを更新することができる。
【0022】
たとえば、機械学習システム120は、N個の機械学習プロセッサ140-1~140-Nを備える。各機械学習プロセッサ140は、関連するメモリのメモリ階層を有し得る。これらのメモリは、機械学習プロセッサ140の機械学習データを格納するためのメモリである。各メモリ階層は、複数のメモリを複数のメモリレベルに含み得る。これらのメモリは、機械学習プロセッサ140が機械学習モデルを利用して機械学習の計算を行うときに利用する機械学習データを格納するように構成され得る。たとえば、機械学習データは、作業への入力(たとえば、入力テンソル)、作業からの出力(たとえば、出力テンソル)、これらの作業によって使われる重み、および/または、機械学習プロセッサ140が機械学習モデルを利用して機械学習の計算を行うときに利用するその他の適切なデータを含み得る。
【0023】
メモリ階層の各レベルは、共通(または同様の)特性を有する1つ以上のメモリを含み得る。このメモリの特性は、メモリのデータ記憶容量と、メモリのメモリバンド幅とを含み得る。メモリバンド幅とは、プロセッサによってデータをメモリから読み出したり格納したりすることができる速度である。メモリバンド幅は、バイト/秒の単位(または、単位時間当たりのその他の適切なデータサイズ)で表され得る。各メモリの特性は、プロセッサ(たとえば、プロセッサコア)とメモリとの間のメモリチャネルの特性(直接であるか間接的であるか、共通であるか専用であるか、速度など)を含み得る。
【0024】
メモリの特性は、レベルごとに異なり得る。たとえば、あるレベルのメモリは、その他のレベルよりも高速であり得る(たとえば、メモリバンド幅が高い)。しかしながら、その他のレベルは、最速メモリを有するあるレベルよりも多くのデータ記憶容量を有し得る。
【0025】
機械学習プロセッサ140ごとのメモリ階層の特性を指定するデータがメモリ階層データ記憶部135に格納される。メモリ階層の特性は、メモリ階層の各メモリの特性を含み得る。局所性が改善した更新済みの機械学習モデルを作成するとき、改善モジュール131は、機械学習モデルが展開される機械学習プロセッサ140のメモリ階層の特性を指定するメモリ階層データ136を取得し得る。たとえば、機械学習モデルが機械学習プロセッサ140-1によって実行される場合、改善モジュール131は、機械学習プロセッサ140-1のメモリ階層の特性をメモリ階層データ記憶部135から取得し得る。
【0026】
次に、改善モジュール131は、入力機械学習モデル112とメモリ階層データ136によって指定されたメモリ階層の特性とに基づいて、更新済みの機械学習モデル132を作成し得る。更新済みの機械学習モデル132は、入力機械学習モデル112と同じ機能(または同様の機能)を有し得る。すなわち、更新済みの機械学習モデル132は、入力機械学習モデルと同じまたは同様の(たとえば、しきい値許容誤差内の)精度および/または品質で同じタスクを実行する。たとえば、更新済みの機械学習モデル132は、入力機械学習モデル112と同じ種類の出力を生成し、両モデルが同じ入力データを提供された場合に入力機械学習モデル112が出力するであろうデータと同じ(または、しきい値許容誤差内で同様の)データを出力できる。しかしながら、更新済みの機械学習モデル132は、入力機械学習モデル112とは作業の順序が異なったり、作業間のデータ依存関係が異なったり、および/または作業間の制御依存関係が異なったりする場合がある。
【0027】
機械学習モデルを実行するために必要な情報は、機械学習モデルから判断され得る。たとえば、上述したように、機械学習モデルを表すグラフは、作業を表すノードと、当該作業間のデータ依存関係および/または制御依存関係を表すエッジとを含み得る。グラフから、改善モジュール131は、各作業にどのようなデータが必要になるか、いつ作業が実行されるかを判断できる。この情報、各作業の入力ごとおよび出力ごとのデータのサイズ
(たとえば、作業に対する入力テンソルのサイズに基づく)、ならびにメモリ階層の特性を用いて、改善モジュール131は、作業ごとに入力データおよび出力データをいつどこに格納するかを判断することができる。
【0028】
たとえば、L1メモリと主メモリとを含むメモリ階層を考える。L1メモリは、主メモリよりも高速であるが、L1メモリのデータ記憶容量は20メガバイト(MB)であり、主メモリのデータ記憶容量は10ギガバイト(GB)である。作業Aおよび作業Bの両方が20MBのデータを同時またはほぼ同時に出力するが、作業Aによって出力されるデータが別の作業による入力としてすぐに使われる一方で、作業Bによって出力されるデータはいくつかのその他の作業が実行されるまで使われない場合、作業Aによって出力されたデータは、L1メモリに格納され得、作業Bによって出力されたデータは、主メモリに格納され得る。次に、作業Bによって出力されたデータは、別の作業への入力として使われる前に主メモリからL1メモリにプリフェッチされ得る。この例では、更新済み機械学習モデルは、別の作業(たとえば、作業C)が完了したときに作業Bによって出力されたデータをプリフェッチさせる新しい作業(もしくはアノテーションまたはその他の命令もしくはコード)を含み得る。よって、更新済みの機械学習モデルは、作業Cが実行された後にプリフェッチ作業をトリガする作業Cとプリフェッチ作業との間の制御依存関係を含み得る。
【0029】
改善モジュール131は、メモリ階層の様々なメモリのデータ容量が任意の時点で過度に利用されないように各更新済み機械学習モデル132を作成することができる。たとえば、入力機械学習モデル112のデータ(たとえば、モデルを表すグラフ)に基づいて、改善モジュール131は、各作業が入力データ(およびそのデータサイズ)を必要とするのがいつになるかを判断し、各メモリが容量以下になるようにメモリ間のデータを(たとえば、制御依存関係およびデータ依存関係、新しい作業、作業の順序、ならびに/またはアノテーションを用いて)スケジュール設定することができる。より高速なメモリが任意の時点で容量を超えると思われる場合、改善モジュール131は、より低速のメモリにそのときのデータのうちのいくつかを格納するようにスケジュール設定することができる。
【0030】
改善モジュール131は、モデルの作業、モデルの制御依存関係、および/またはモデルのデータ依存関係を改良してメモリ階層の局所性を改善させることによって、入力機械学習モデル112についての更新済みの機械学習モデル132を作成することができる。作業を改良することは、メモリへのデータの格納をスケジュール設定する作業を追加することを含み得る。たとえば、改善モジュール131は、作業によって出力されたデータが、少なくともしきい値数の介在する作業には使われない、または少なくとも出力データが生成された後のしきい値時間使われない、と判断し得る。これに応答して、改善モジュール131は、より低速のメモリに出力データを転送させる第1作業と、別の作業によって入力として使われる前にこのデータをより高速なメモリに戻させる第2作業とを更新済みの機械学習モデル132に含め得る。また、改善モジュール131は、特定の作業が実行された後に機械学習プロセッサ140に第2作業を実行させる制御依存関係を、更新済みの機械学習モデル132に含め得る。改善モジュール131は、データのプリフェッチを生じさせる特定の作業を、当該特定の作業とこれからデータを使う作業との間にある作業数、および、当該作業が必要とする前に転送完了するようにより低速のメモリからより高速なメモリにデータを転送するために必要な予想時間に基づいて、選択し得る。
【0031】
出力データがその他の作業によっていつ必要とされるかに加えて、記憶容量および当該その他の作業によって必要とされるデータ記憶量に基づいて、改善モジュール131は、出力データをより低速のメモリに格納すると判断し得る。たとえば、より高速なメモリがこのデータのすべてを格納できる十分なデータ容量を有する場合、改善モジュール131は、出力データをより高速なメモリに保持し得る。このように、特定の作業のためのデー
タをどこに格納するかについての判断は、そのときの総合データ記憶要件に基づき得る。
【0032】
また、作業を改良することは、テンソルを複数のサブテンソルに分割するための作業を追加することと、1つ以上の作業の複数のイテレーションを含めることとを含み得る。たとえば、作業(または、作業シーケンス)に入力されるテンソルのサイズが大きすぎて、より高速なメモリに収まらない場合、改善モジュール131は、テンソルを複数のサブテンソルに分割して、各サブテンソルをより高速なメモリに収める作業を追加し得る。また、改善モジュール131は、分割作業の後、1つ以上の作業の複数のイテレーション(各サブテンソルにつき、1つのイテレーション)を含めることもできる。また、改善モジュール131は、各イテレーションの最後の作業から次のイテレーションの最初の作業に、最後のイテレーションまで制御を移す制御依存関係を含み得る。また、改善モジュール131は、各イテレーションによって出力されたサブテンソルを、元の入力テンソル上の元の1つ以上の作業の出力を表す出力テンソルにマージする結合(concat)作業を含めることもできる。作業シーケンスの複数のイテレーションを用いたこの分割およびマージの例については、
図8に示されており、以下に説明する。
【0033】
いくつかの実施態様では、改善モジュール131は、アノテーション、命令、および/または、作業によって出力されたデータを機械学習モデルに適切なメモリに格納させるその他の制御データを追加することによって、更新済み機械学習モデル132を作成する。たとえば、更新済み機械学習モデル131は、1つの作業(たとえば、作業A)から別の作業(たとえば、作業B)へのエッジごとに、作業Bによって使われることになる作業Aの出力をどのメモリに格納するかを指定するアノテーションを含み得る。また、アノテーションは、より低速のメモリからより高速なメモリにデータをプリフェッチするために利用され得る。たとえば、アノテーションは、別の作業のためのデータのプリフェッチをトリガするための特定の作業において含まれ得る。
【0034】
各アノテーションは、作業またはエッジに対応付けられ(たとえば、割り当てられ)得る。機械学習プロセッサ140は、作業またはエッジごとのアノテーションを、作業の実行時または制御もしくはデータをエッジに基づいて転送するときに読み出すように構成され得る。次に、機械学習プロセッサ140は、アノテーションに基づいて適切な作業を行い得る(たとえば、適切なメモリにデータを格納する、データ転送を開始する、制御を別の作業に移すなど)。
【0035】
改善モジュール131は、ルールセット、1つ以上の機械学習モデル、機械学習モデルのシミュレーション(複数可)、および/またはその他の適切な技術を用いた入力機械学習モデル131に基づいて、更新済み機械学習モデル132を作成し得る。ルールセットは、入力機械学習モデル112におけるデータ再利用パターンに基づいて改善モジュール131がどのようにモデル112を改良するかを指定するルールを含み得る。たとえば、あるルールは、より高速なメモリの容量が2つの作業の出力を格納できない場合に、別の作業によって最初に使われるデータをより高速なメモリに格納し、のちに使われるデータをより低速のメモリに格納するように改善モジュール131が入力機械学習モデル131を改良すると指定し得る。また、このルールは、のちに使われるデータが別の作業によって入力として使われる前により高速なメモリに格納されるよう、適切なタイミングで当該データをプリフェッチさせる制御データ(たとえば、作業またはアノテーション)を改善モジュール131が含むと指定し得る。
【0036】
また、ルールセットは、より高速なメモリに格納するための優先度をデータ間で指定し得る。たとえば、その他のデータよりも先に使われると思われるデータは、のちに使われるデータよりも高い優先度を有し得る。同様に、コア間で共有されるメモリに対して、当該コア間で共有されると思われるデータは、その他のデータよりも高い優先度を有し得る
。
【0037】
また、より高速なメモリの容量がいつ超過するか、および/またはある作業によって出力データが出力される時刻と別の作業によって当該データが使われる時刻との間の期間もしくは作業数を判断するためにモデルが実行される機械学習プロセッサ140のメモリ階層を用いて、改善モジュール131は機械学習モデルの実行のシミュレーションを行うことができる。改善モジュール131は、このデータを用いて、より低速のメモリにデータをいつ格納するか、より低速のメモリにどのデータを格納するべきか(たとえば、先に使われるデータではなく、のちに使われるデータ)、および/または、データをいつプリフェッチするかを判断することができる。次に、改善モジュール131は、このデータを(たとえば、ルールセットと組合せて)用いて入力機械学習モデル112を改良し、更新済みの機械学習モデル132を作成し得る。
【0038】
改善モジュール131は、メモリ管理技術(たとえば、ソフトウェアまたはグラフ変換管理技術)を用いて、どのデータをどのメモリに格納するかを判断し、これに応じて機械学習モデルを更新し、機械学習データの格納をスケジュール設定し得る。たとえば、改善モジュール131は、Beladyのアルゴリズムなど、ページ置き換え技術を利用して、より高速なメモリに任意の時点でどのデータを格納するべきか、および、より高速なメモリからより低速のメモリにどのデータを移動してその他のデータのために空きを作るべきかを判断し得る。このような技術、およびモデルのデータ再利用パターンを表す機械学習モデルのデータ(たとえば、機械学習モデルのグラフ)を利用して、改善モジュール131は、モデルの実行中にどのメモリに任意の時点でどのデータを格納するべきかを判断し得る。たとえば、Beladyのアルゴリズムでは、最も長い間使われることになるデータは、それよりも早く使われるその他のデータがより高速なメモリに格納されるよう、より高速なメモリからより低速のメモリに移動され得る。各作業によって出力されたデータが次にいつ使われるかを改善モジュール131が判断できると、改善モジュール131は、メモリ管理技術を利用して、各作業によって出力されたデータをどこに格納するかを判断し、機械学習モデルによって出力されるデータが適切なメモリに格納されるように機械学習モデルを更新することができる。
【0039】
通常のハードウェア管理されるキャッシュでは、Beladyのアルゴリズムの利用は可能ではない。しかしながら、ニューラルネットワークと、グラフで表すことのできるその他の機械学習モデルとの今後のデータアクセスパターンは知られているので、どのデータをより高速なメモリから移動するかをBeladyのアルゴリズムを用いて選択することができる。
【0040】
また、改善モジュール131は、入力機械学習モデル112およびメモリ階層の特性に基づいて、更新済み機械学習モデル132を作成するように機械学習モデルを訓練することができる。たとえば、改善モジュール131は、強化学習技術を利用して、機械学習モデルを高速化する方法を学習することができる。ある特定の例では、改善モジュール131は、機械学習モデルを利用して入力機械学習モデル112を実行し、入力機械学習モデル112の性能を測定することができる。次に、機械学習モデルは、グラフ変換を入力機械学習モデル112のグラフに適用して更新済み機械学習モデルを作成することができる。次に、機械学習モデルは、更新モデルの性能を測定して、性能が最も良い更新モデルを特定することができる。
【0041】
また、改善モジュール131は、更新済み機械学習モデル132または機械学習モデル132を実行するために機械学習プロセッサ140によって用いられるその他のコードに、頻繁に使われる(たとえば、少なくともしきい値数の作業によって使われる)データをより高速なメモリ(たとえば、オンチップメモリ)に機械学習プロセッサ140に保持さ
せるデータを含み得る。たとえば、改善モジュール131は、機械学習プロセッサ140に機械学習の計算において使われる重みをオンチップメモリに保持させるデータを、更新済みの機械学習モデル132に含め得る。これにより、このようなデータを計算ユニット(たとえば、コア)により速くロードすることが可能になる。
【0042】
同じチップ上の複数のコアが同じデータを使う場合、改善モジュール131は、機械学習プロセッサ140にデータをオンチップメモリに保持させるデータを、更新済みの機械学習モデル(またはその他のコード)に含め得る。これにより、コアの各々によるこのようなデータのロードを高速化させることが可能になる。また、これにより、チップ内の複数のコア間で機械学習モデルを分割できるようになる。たとえば、コアは、オンチップメモリを通して互いに通信を行うことができる。
【0043】
メモリ階層の各メモリは、アドレス指定可能な名前空間または名前付けされた記憶装置としてソフトウェア(たとえば、機械学習モデルを実行するためのソフトウェア)に公開され得る。作業によって出力されたデータを格納するメモリがどれであるかを機械学習プロセッサ140に教えるために、更新済みの機械学習モデル132は、少なくとも作業のうちのいくつかについて、適切な名前空間または記憶装置を指定することができる。このデータを使って、ソフトウェアはデータを適切なメモリに格納することができる。
【0044】
図2~
図6は、機械学習モデルを利用して機械学習の計算を行うために機械学習プロセッサによって利用され得るメモリのメモリ階層例を含むいくつかの例示的な実行フレームワークを示す図である。上述したように、機械学習モデルを利用して機械学習の計算を行うときに機械学習プロセッサによって使われる機械学習データを格納するために利用されるメモリ階層の特性を指定するデータに基づいて、(たとえば、データ配置および/またはデータ移動における局所性を改善させるために)機械学習モデルを更新することができる。
図2~
図6に示すメモリ階層は、例であって、本明細書に記載の機械学習モデルを改良するための技術は、その他のメモリ階層にも適用可能である。
【0045】
例示的な実行フレームワークにおいて使われ得る例示的な機械学習プロセッサは、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)および/またはTPU(Tensor Processing Unit)を含む。たとえば、実行フレームワークは、1つ以上のNVIDIA KEPLER K40 GPUアクセラレータ、1つ以上のNVIDIA PASCAL P100 GPU、および/もしくは1つ以上のNIVDIA VOLTA V100 Tensor Core GPU、ならびに/または、機械学習の計算を行うことが可能なその他の適切なプロセッサを含み得る。機械学習プロセッサは、ソフトウェア、たとえば、機械学習モデルを実行するソフトウェアに公開される、アドレス指定可能な名前空間である高速オンチップメモリを有するTPUであり得る。
【0046】
図2は、機械学習プロセッサ201のための例示的な実行フレームワーク200のブロック図である。実行フレームワーク200は、2つのレベルのメモリ、L1メモリ203および主メモリ204を含む例示的なメモリ階層230を含む。L1メモリ203は、機械学習プロセッサ201のプロセッサコア202とともに機械学習プロセッサのチップ(たとえば、集積回路)上に集積されるオンチップメモリである。コア202は、1つ以上の機械学習モデルを利用して機械学習の計算を行うように構成されたチップの個々のプロセッサである。いくつかのチップは、後述する複数のコアを含む。
【0047】
主メモリ204は、コア202およびL1メモリ203とともにチップ上に集積されないオフチップメモリであり得る。よって、主メモリ204は、L1メモリ203よりも容量が大きくてもよい(たとえば、記憶容量が大きい)。L1メモリ203がオンチップで
あるため、L1メモリ203は、主メモリ204よりもかなり高いバンド幅を有し得る。しかしながら、L1メモリ203のサイズが限定されているため、機械学習データによっては、コア202によって使われるまで主メモリ204に格納されるデータもある。いくつかの実施態様では、L1メモリ203は、SRAM(Static Random-Access Memory)であり、主メモリ204は、DRAM(Dynamic Random-Access Memory)である。
【0048】
この例では、コア202は、メモリチャネル211および212のそれぞれによって主メモリ204およびL1メモリ203の両方に直接アクセスすることができる。また、コア202は、メモリチャネル212および213を用いるL1メモリ203を通して主メモリ204に間接的にアクセスすることができる。たとえば、この間接的なアクセスは、コア202がアクセスするためにデータを主メモリ204からL1メモリ203に移動させることによって達成されてもよい。メモリ間でのデータ移動は、たとえば、DMA(Direct Memory Access)を利用してバックグラウンドで行われ得る。その他の例では、コア202が主メモリに間接的にのみアクセスする必要があるメモリチャネル211は、含まれなくてもよい。
【0049】
図3は、機械学習プロセッサ301のための別の例示的な実行フレームワーク300のブロック図である。この例では、実行フレームワーク300は、3つのレベルのメモリ、L1メモリ303、L2メモリ304、および主メモリ305を含むメモリ階層330を含む。L1メモリ303およびL2メモリ304は、コア302とともにチップ上に集積されたオンチップメモリであり得る。別の例では、L1メモリ303はオンチップメモリであり得、L2メモリ304はオフチップメモリであるが緊密に当該チップに統合されている(たとえば、3D積層またはその他の適切な高速チップ接続技術)。主メモリ305は、コア302とともにチップ上に集積されていないオフチップメモリであるが、緊密に当該チップに統合されている。
【0050】
L1メモリ303は、メモリ303~305の中でバンド幅が最も高いが、メモリ303~305の中で記憶容量が最小であり得る。L2メモリ304のバンド幅は、L1メモリ303のバンド幅よりも低いが、主メモリ305のバンド幅よりも高くてもよい。主メモリ305は、3つのメモリ303~305の中で記憶容量が最大であり得る。いくつかの実施態様では、L1メモリ303およびL2メモリ304は、SRAMであり、主メモリ305は、DRAMである。別の例では、L1メモリ303がSRAMであり、L2メモリ304および主メモリ305がDRAMである。
【0051】
この例では、L1メモリ303またはL2メモリ304に収めることができない大容量データは、主メモリ305に格納され得る。これに加えて、しばらくの間(たとえば、少なくともしきい値時間またはしきい値数の作業の間)利用されないとおもわれるデータは、主メモリ305に格納され、利用される前にL2メモリ304のL1メモリ303にプリフェッチされ得る。上述したように、メモリ303~305間のデータ移動は、たとえば、DMAを利用してバックグラウンドで行われ得る。
【0052】
コア302は、メモリチャネル311、312、および313のそれぞれによって主メモリ305、L2メモリ304、およびL1メモリ303に直接アクセスすることができる。また、コア302は、メモリチャネル312および315を用いるL2メモリ304を通して、またはメモリチャネル313、314、および315を用いるL1メモリおよびL2メモリを通して主メモリ305に間接的にアクセスすることができる。上述したように、間接的なアクセスには、メモリ間のデータ移動が伴い得る。同様に、コア302は、メモリチャネル313および314を用いるL1メモリ303を通してL2メモリ304に間接的にアクセスすることができる。L1メモリ303およびL2メモリ304を迂
回するメモリチャネル311は、より小さくかつ頻繁にアクセスされるデータが上書きされずに主メモリ305から依然として高速アクセス可能になるよう、有用であり得る。
【0053】
その他の例では、メモリ階層330は、L1メモリ303と主メモリ305との間に直接メモリチャネルを含み得、コア302が、L2メモリ304を通さずにL1メモリ303を介して主メモリ305にアクセスできるようにする。別の例では、L1メモリ303およびL2メモリ304は、主メモリ305とのメモリチャネルを共有し得る。
【0054】
図2および
図3の機械学習プロセッサ201および301は、同じ(または、異なるメモリ階層)を有する複数のコアを備え得る。たとえば、機械学習プロセッサ201は、2つのコアを有し得る。当該2つのコアは、各々がそれぞれのL1メモリを有し、かつ共有主メモリへのアクセスを有する。別の例では、機械学習プロセッサ301は、同じL1、L2、および主メモリを共有する3つのコアを含み得る。
【0055】
図4は、機械学習プロセッサ401のための別の例示的な実行フレームワーク400のブロック図である。例示的な機械学習プロセッサ401は、2つのコア402および412を含む。この例では、実行フレームワーク400は、専用L1メモリ、専用L2メモリ、および専用主メモリを含む別個のメモリ階層を含んだメモリ階層430を各コア402および412に対して含む。たとえば、コア402は、そのL1メモリ404にメモリチャネル421を通して直接アクセスすることができる。また、コア402は、そのL2メモリ406にL1メモリ404およびメモリチャネル422を通して間接的にアクセスすることができ、その主メモリ408にメモリチャネル423を通してさらにアクセスすることができる。また、メモリ階層430は、コア402とL2メモリ406との間、および/またはコア402と主メモリ408との間に直接メモリチャネルを含むことができる。
【0056】
L1メモリ404は、メモリ404、406、および408の中でバンド幅が最も高いが、メモリ404、406、および408の中で記憶容量が最小であり得る。L2メモリ406は、L1メモリ404のバンド幅よりも低いが、主メモリ408のバンド幅よりも高くてもよい。主メモリ408は、3つのメモリ404、406、および408の中で記憶容量が最大であり得る。たとえば、L1メモリ404はオンチップメモリであり得、L2メモリ406は、オンチップメモリであり得るまたはオフチップメモリであるが緊密に当該チップに統合され得、主メモリ408は、オフチップメモリであり得る。
【0057】
同様に、コア412は、そのL1メモリ414にメモリチャネル424を通して直接アクセスすることができる。また、コア412は、そのL2メモリ416にL1メモリ414およびメモリチャネル425を通して間接的にアクセスすることができ、共有主メモリ418にメモリチャネル426を通してさらにアクセスすることができる。また、メモリ階層430は、コア412とL2メモリ416との間、および/またはコア412と主メモリ418との間に直接メモリチャネルを含むことができる。
【0058】
L1メモリ414は、メモリ414、416、および418の中でバンド幅が最も高いが、メモリ414、416、および418の中で記憶容量が最小であり得る。L2メモリ416は、L1メモリ414のバンド幅よりも低いが、主メモリ418のバンド幅よりも高くてもよい。主メモリ418は、3つのメモリ414、416、および418の中で記憶容量が最大であり得る。たとえば、L1メモリ414は、オンチップメモリであり得、L2メモリ416は、オンチップメモリであり得るまたはオフチップメモリであるが緊密に当該チップに統合され得、主メモリ418は、オフチップメモリであり得る。
【0059】
いくつかの実施態様では、L1メモリ404および414ならびにL2メモリ406お
よび416は、SRAMであり、主メモリ408および418は、DRAMである。別の例では、L1メモリ404および414は、SRAMであり、L2メモリ406および416ならびに主メモリ408および418は、DRAMである。
【0060】
例示的な機械学習プロセッサ401は、別個のメモリ階層を有する2つのコア402および412を備えているが、機械学習プロセッサ401は、各自のメモリ階層を各々が有するその他の適切な量のコア(たとえば、4つ、8つなど)を備え得る。メモリのうちのいくつかは、コア間で共有され得る。たとえば、専用L2メモリと主メモリとを有するのではなく、
図5に示したようにこれらのメモリを共有することができる。
【0061】
図5は、機械学習プロセッサ501の別の例示的な実行フレームワーク500のブロック図である。例示的な機械学習プロセッサ501は、2つのコア502および512を備える。この例では、実行フレームワーク500は、専用L1メモリおよび共有L2ならびに主メモリを含む別個のメモリ階層を含むメモリ階層530を各コア502および512に対して含む。たとえば、コア502は、そのL1メモリ504にメモリチャネル521を通して直接アクセスすることができる。また、コア502は、共有L2メモリ516にL1メモリ504およびメモリチャネル522を通して間接的にアクセスすることができ、共有主メモリ520に共有メモリチャネル523を通してさらにアクセスすることができる。また、メモリ階層530は、コア502とL2メモリ516との間、および/またはコア502と主メモリ520との間に直接メモリチャネルを含むことができる。
【0062】
同様に、コア512は、そのL1メモリ514にメモリチャネル524を通して直接アクセスすることができる。また、コア512は、共有L2メモリ516にL1メモリ514およびメモリチャネル526を通して間接的にアクセスすることができ、共有主メモリ520に共有メモリチャネル523を通してさらにアクセスすることができる。また、メモリ階層530は、コア512とL2メモリ516との間、および/またはコア512と主メモリ520との間に直接メモリチャネルを含むことができる。
【0063】
L1メモリ504および514は、L2メモリ516および主メモリ520よりも高いバンド幅を有し得る。しかしながら、L1メモリ504および514は、L2メモリ516および主メモリ520よりも小さい記憶容量を有し得る。L2メモリ516は、L1メモリ504および514のバンド幅よりも低いが主メモリ520のバンド幅よりも高いバンド幅を有し得る。主メモリ520は、メモリ504、514、516、および520の中で最も高い記憶容量を有し得る。たとえば、L1メモリ504および514はオンチップメモリであり得、L2メモリ516は、オンチップメモリであり得るまたはオフチップメモリであるが緊密に当該チップに統合され得、主メモリ520は、オフチップメモリであり得る。
【0064】
いくつかの実施態様では、L1メモリ504および514、ならびにL2メモリ516は、SRAMであり、主メモリ520は、DRAMである。別の例では、L1メモリ504および514は、SRAMであり、L2メモリ516および主メモリ520は、DRAMである。
【0065】
この例では、L2メモリ516および主メモリ520は、コア502および512によって共有される。両方のコア502および512によって使われる機械学習データは、L2メモリ516および/または主メモリ520に格納され得る。たとえば、両方のコア502および512によって使われる重みまたはバイアス値は、L2メモリ516および/または主メモリ520に格納され得る。また、コア502および512は、その他の機械学習データ(たとえば、作業の出力)をL2メモリ516および/または主メモリ520に格納することによって、当該データを互いに共有することができる。
【0066】
例示的な機械学習プロセッサ501は、別個のメモリまたは共有メモリを有する2つのコア502および512を備えているが、機械学習プロセッサ501は、各自のメモリ階層を各々が有するその他の適切な量のコア(たとえば、4つ、8つなど)を備え得る。たとえば、機械学習プロセッサは、4つのコアを備え得る。当該4つのコアは、各々がそれぞれのL1メモリを有するが、共通のL2メモリおよび主メモリを共有する。
【0067】
図6は、機械学習プロセッサ601のための別の例示的な実行フレームワーク600のブロック図である。例示的な機械学習プロセッサ601は、L1メモリ610と主メモリ620とを含む共通のメモリ階層630を共有する4つのコア602~605を備える。また、図示しないが、4つのコア602~605は、L2メモリおよび/またはその他のメモリを共有してもよい。
【0068】
この例では、各コア602~605は、L1メモリ610にアクセスするための個々のメモリチャネル621~624を有する。コア602~605は、主メモリ620へのメモリチャネル625を共有する。その他の例では、各コア602~605は、主メモリ620への専用のメモリチャネルおよび/またはL1メモリ610への共有チャネルを有し得る。
【0069】
L1メモリ610は、主メモリ620よりも高いバンド幅を有し得るが、主メモリ620よりも小さい記憶容量を有し得る。たとえば、L1メモリ610は、オンチップメモリであり得るが、主メモリ620は、オフチップメモリであり得る。いくつかの実施態様では、L1メモリ601は、SRAMであり、主メモリ620は、DRAMである。
【0070】
図7は、機械学習モデルの入力グラフ710と、入力グラフ710と比較して局所性が改善された更新済みグラフ720とを示す
図700である。入力グラフ710は、(ノードによって表される)作業、および(ノード間のエッジによって表される)制御依存関係ならびにデータ依存関係を含んだより大きなグラフの一部である。入力グラフ710は、エッジ(矢印)が間にある作業C~Iを含む。エッジは、作業間の制御依存関係および/またはデータ依存関係を表す。たとえば、作業Cは、入力データAと入力データBとを使う。入力データAおよび/または入力データBは、機械学習モデルに入力される機械学習データ、または
図7に示していない別の作業によって出力される機械学習データデあり得る。この例では、作業Cは、機械学習の計算を行う際に入力データAおよび入力データBを用いてもよい。
【0071】
入力グラフ710は、入力データAと作業Cとの間にエッジ711を含み、入力データBと作業Cとの間にエッジ712を含む。これらのエッジ711および712は、作業Cのデータ依存関係を表す。すなわち、作業Cは、入力データAおよび入力データBに依存している。同様に、作業D、作業E、および作業Iは、エッジ713、714、および715によってそれぞれ表されるように、最初に実行される作業Cに依存している。この例では、作業D、作業E、および作業Iは、作業Cによって出力されるデータを用いて機械学習の計算を実行する。よって、エッジ713は、作業Cと作業Dとの制御依存関係およびデータ依存関係を表している。同様に、エッジ714および715は、作業Cと作業Eとの間、および作業Cと作業Iとの間の制御依存関係およびデータ依存関係をそれぞれ表す。
【0072】
グラフ710によって表される機械学習モデルを機械学習プロセッサが実行するとき、エッジは、機械学習プロセッサに、エッジの方向に基づいて作業から作業へ順番に遷移させる。たとえば、エッジ711は、入力データAが利用可能になった後に機械学習プロセッサに作業Cを実行させる。しかしながら、エッジ712は、入力データBも利用可能に
なるまで作業Cを実行しない必要がある。これは、これらのエッジのデータ依存関係を表している。同様に、エッジ713は、作業Cが実行された後に機械学習プロセッサに作業Dを実行させる。エッジ715および716は、作業Cおよび作業Hの両方が実行された後に機械学習プロセッサに作業Iを実行させる。
【0073】
更新済みグラフ720は、入力グラフ710と比較して、更新されている。改善モジュール、たとえば、
図1の改善モジュール131は、機械学習モデルが展開される機械学習プロセッサのメモリ階層の特性に基づいて更新済みグラフ720を作成し得る。この例では、メモリ階層は、L1メモリ722と、L2メモリ724とを含む。L1メモリは、L2メモリよりも高速であり得るが、L2メモリよりもデータ記憶容量が小さい。
【0074】
改善モジュールは、入力グラフ710に基づいて、作業によって出力される機械学習データの再利用パターンを判断し、入力グラフ710を改良して再利用パターンおよびメモリ階層の特性に基づいた更新済みグラフ720を生成し得る。たとえば、改善モジュールは、各作業によって出力される出力データのセットごとに、データが再び使われる前に実行される作業の数(および/または予想される経過時間)を判断し得る。改善モジュールは、各作業がいつ実行されるか、データが使われる前の作業の数(および/または時間)、およびメモリの記憶容量に基づいて、データをどのメモリに格納するか、およびデータをより高速なメモリにいつプリフェッチするかを判断し得る。
【0075】
更新済みグラフ720は、異なる制御依存関係およびデータ依存関係と、作業の出力をどのメモリに格納するかを指定するデータとを含む。たとえば、更新済みグラフ720は、入力データAおよびBがL2メモリ724に格納されていることを示している。更新済みグラフは、エッジ731および732を含む。エッジ731および732は、機械学習プロセッサに、作業Cへの入力のために入力データAおよびBをL1メモリ722にプリフェッチさせる。
【0076】
また、更新済みグラフ720は、作業Cからの出力データが作業Dおよび作業Eへの入力として使われることを指定しており、これは入力グラフ710と一致する。更新済みグラフ720は、新しいエッジ733を含む。新しいエッジ733は、作業Cからの出力データが作業Iまで使われることがないため、機械学習プロセッサに、当該出力データもL2メモリ724に(データC’として)格納させる。
【0077】
更新済みグラフ720は、作業Fと出力データC”(出力データC’と同じであり得る)との間に別の新しいエッジを含む。エッジ734は、機械学習プロセッサに、出力データC”をL2メモリ724からL1メモリ722にプリフェッチさせる制御依存関係を表している。たとえば、作業Cからの出力データは、作業Iによって使用されるためにL1メモリ722にプリフェッチされ得る。作業Hが実行された後にデータをL2メモリ724から作業Iに転送する際に生じ得る待ち時間を減らすために、出力データは、作業Iが実行される前にプリフェッチされ得る。その代わりに、更新済みグラフ720は、作業Fと出力データC”のプリフェッチとの間の制御依存関係を表すエッジ734を含む。この例では、作業Fが実行された後、L2メモリ724に格納された出力データC”がL1メモリ722にプリフェッチされる。このデータは、作業Gおよび作業Hが機械学習プロセッサによって実行されている間にバックグラウンド(たとえば、DMAを用いて)で転送され得る。
【0078】
(たとえば、予測される転送時間に基づいた)転送する必要があるデータの量、および機械学習プロセッサが作業Iよりも前の作業を実行するのにかかる予測時間に基づいて、改善モジュールは、プリフェッチをいつ開始するか(たとえば、どの作業をトリガとして利用するか)を判断し得る。このようにすれば、改善モジュールは、その他のデータ(た
とえば、作業Fと作業Gとの間のデータ)を格納するために使うことが出来るより高速のL1メモリ722を不必要に用いることなく、作業Iが実行される前にデータが必ず転送されるようにすることができる。
【0079】
いくつかの実施態様では、更新済みグラフ720は、機械学習モデルの作業自体、たとえば、データ依存関係および/または制御依存関係を表すエッジではなく、データをどのメモリに格納するのか、およびデータをいつ転送するのかを機械学習プロセッサに指示するアノテーションを含み得る。アノテーションは、更新済みグラフ720に含めることができる、または、機械学習プロセッサによって実行されるその他のコードの一部であり得る。
【0080】
図8は、機械学習モデルの別の入力グラフ810および局所性が改善された別の更新済みグラフ820を示す
図800である。この例では、入力グラフ810は、テンソルXを用いて機械学習の計算を行う作業1A~6Aのシーケンスを含む。作業1A~6Aのシーケンスは、より大きなグラフの一部であり得る。たとえば、作業1A~6Aのシーケンスは、第1の作業シーケンスであり得、テンソルXは、機械学習モデルへの入力テンソルであり得る。別の例では、作業1A~6Aのシーケンスは、その他の作業の後に実行され得、テンソルXは、中間テンソル(たとえば、前の作業により、入力テンソルとは異なる)または部分テンソル(たとえば、入力テンソルの一部)であり得る。
【0081】
この例では、テンソルXは、大きすぎて、機械学習モデルが実行される機械学習プロセッサのメモリ階層の最速メモリ(たとえば、L1メモリ)に格納できない場合がある。改善モジュールは、更新済みグラフ820にバッチ分割作業821を含め得る。バッチ分割作業821は、テンソルXを複数のサブテンソルに分割する。また、改善モジュールは、作業1A~5Aのシーケンスの複数のイテレーションを更新済みのグラフに含め得る。作業1A~5Aのシーケンスの各イテレーションは、サブテンソルのうちの1つサブテンソル上で実行され得る。
【0082】
たとえば、テンソルXのデータサイズがL1メモリの5倍である場合を考える。改善モジュールは、L1メモリに各々が収まる5つのサブテンソルにテンソルを分割するバッチ分割作業を更新済みグラフ820に含め得る。これに加えて、改善モジュールは、作業1A~5Aのシーケンスの5回のイテレーション(各サブテンソルに1つのイテレーション)を、更新済みグラフ820に含め得る。このようにすれば、各作業の出力を、次の作業のために、作業1A~5Aのシーケンスにおける各作業がサブテンソルに対して実行されるまでL1メモリに格納することができる。
【0083】
データをL1メモリに保持することによって、各作業1A~5Aによって実行される機械学習の計算を、入力グラフ810を用いて全てのテンソルXで作業1A~5Aが行われた場合よりもはるかに高速に行うことができるようになる。たとえば、入力グラフにおいて、作業ごとの入力データのうち少なくとも一部を、より低速のメモリから取り出さなければならなくなり、各作業において機械学習プロセッサにそのデータが取り出されるのを待たせてしまうことになる。
【0084】
また、改善モジュールは、テンソルXからいくつのサブテンソルを生成するかを判断する際、および作業のシーケンスのイテレーションをいくつ更新済みグラフ820に含めるかを判断する際に、作業のシーケンスにおける各作業によって出力されるデータのサイズを考慮する。たとえば、作業1Aに入力されるサブテンソルはL1メモリに収まるにもかかわらず、作業のうちの1つの作業の出力がL1メモリの容量を超える場合、改善モジュールは、各作業によって出力されるデータがL1メモリに収まるよう、テンソルXをより多くのサブテンソルに分割し得る。
【0085】
改善モジュールは、制御依存関係823を生成し、更新済みグラフ820に、作業5Aの最後のイテレーションの前、作業5Aの各イテレーションの後に含めることができる。制御依存関係823は、機械学習プロセッサに、作業1A~5Aのシーケンスの次のイテレーションに制御を移させて、作業1Aの次のイテレーションから開始する。このようにすれば、作業1A~5Aのシーケンスを、テンソルXの各サブテンソル上で実行できるようになる。
【0086】
改善モジュールは、作業1A~5Aのシーケンスの各イテレーションの出力データを1つの出力テンソルに結合できる結合作業824を生成し、更新済みグラフ820に含めることができる。結合作業824は、バッチ分割作業821によって生成されたサブテンソルごとに5Aによって出力されたデータ(たとえば、テンソル)をマージし得る。次に、出力テンソルを入力として作業6Aに提供する。
【0087】
図9は、局所性が改善した更新済みのグラフを作成し、更新済みグラフを用いて機械学習の計算を行うための例示的な処理900を説明するフロー図である。工程900は、
図1の機械学習システム120によって実行され得る。
【0088】
機械学習モデルのデータを受け付ける(910)。このデータは、機械学習モデルの作業と、作業間のデータ依存関係とを表し得る。たとえば、データは、作業ごとのノードと、作業間のエッジを含むグラフを含み得る。各エッジは、エッジによって繋がれた2つの作業間のデータ依存関係を表し得る。たとえば、第1作業から第2作業へのエッジは、第1作業が第2作業の前に実行されることと、第2作業が第1作業によるデータ出力を利用することとを示し得る。
【0089】
機械学習プロセッサのメモリ階層の特性を指定するデータを受け付ける(920)。機械学習プロセッサは、機械学習モデルが展開されるプロセッサであり得る。メモリ階層は、機械学習モデルを利用した機械学習の計算を行うときに機械学習プロセッサによって使われる機械学習データを格納するためのメモリを複数レベルに含み得る。
【0090】
メモリの各レベルは、各その他のレベルとは異なる特性を有し得る。上述したように、各メモリレベルの特性は、メモリのデータ記憶容量と、メモリのメモリバンド幅とを含み得る。各メモリの特性は、プロセッサ(たとえば、プロセッサコア)とメモリとの間のメモリチャネルの特性(直接であるか間接的であるか、共通であるか専用であるか、速度など)を含み得る。
【0091】
機械学習モデルのグラフおよびメモリ階層の特性に基づいて、更新済み機械学習モデルを作成する(930)。たとえば、上述したように、改善モジュールは、ルールセット、1つ以上の機械学習モデル、および/または局所性が改善した更新済みの機械学習モデルを作成するための入力機械学習モデルのシミュレーションを利用し得る。
【0092】
上述したように、更新済みの機械学習モデルを作成するステップは作業のうち少なくとも一部の作業について、作業の出力を格納するためのメモリを、当該出力が別の作業への入力としていつ使われるかに基づいてメモリ階層の複数のメモリの中から選択するステップを含み得る。たとえば、当該作業の出力、および作業が実行される時点と作業の出力が別の作業によって使われる時との間に実行されるその他の作業の出力をより高速なメモリが格納できない場合、作業の出力は、より低速のメモリに格納されて、のちにより高速なメモリにプリフェッチされ得る。
【0093】
更新済みの機械学習モデルを作成するステップは、第1作業の出力データがメモリ階層
の複数のメモリのうち第1メモリ(たとえば、より低速のメモリ)に、作業の出力データが第2作業によって入力としていつ使われるかに基づいて格納されると判断するステップを含み得る。これに応答して、改善モジュールは、機械学習プロセッサに、出力データが第1作業によって生成された後に第1作業の出力データを第1メモリに格納させる第1制御データ(たとえば、作業、アノテーションなど)を、更新済みの機械学習モデルに含め得る。また、改善モジュールは、出力データが第2作業への入力として使われる前に機械学習プロセッサに出力データを第1メモリから第2メモリ(たとえば、より高速なメモリ)に転送(たとえば、プリフェッチ)させる第2制御データを、更新済みの機械学習モデルを含め得る。
【0094】
第2制御データは、機械学習プロセッサに、第3作業が実行されることに応答して出力データを第1メモリから第2メモリに転送させ得る。たとえば、第2制御データは、第3作業と出力データを転送させる作業との制御依存関係を含み得る。
【0095】
改善モジュールは、機械学習の計算を実行するために出力データを用いる第1作業と第2作業との間に実行される作業の数に基づいて、複数のメモリのうちどのメモリが第1作業の出力データを格納するかを判断し得る。たとえば、作業の数が作業のしきい値数を超える場合、出力データは、より低速のメモリに格納され得る。作業の数がしきい値を超えない場合、より高速なメモリに出力データを格納することができる。
【0096】
改善モジュールは、第1作業が実行される時点と第2作業が実行される時点との間の予想期間に基づいて、複数のメモリのうちどのメモリが第1作業の出力データを格納するかを判断し得る。たとえば、期間がしきい値期間を超える場合、出力データは、より低速のメモリに格納され得る。期間がしきい値を超えない場合、出力データは、より高速なメモリに格納され得る。
【0097】
更新済みの機械学習モデルを作成するステップは、特定のシーケンスの機械学習モデルの作業の入力データ(たとえば、テンソル)が、複数のメモリのうち特定のメモリ(たとえば、最速メモリ)よりも多くのデータ記憶容量を必要とすると判断するステップを含み得る。これに応答して、改善モジュールは、特定の作業シーケンスと同じ作業シーケンスを含む複数の作業シーケンスを、更新済みの機械学習モデルに含め得る。また、改善モジュールは、機械学習プロセッサに入力データを複数のデータ部分(たとえば、サブテンソル)に分割させる第1制御データと、機械学習プロセッサに各データ部分を複数の作業シーケンスの各作業シーケンスに割り当てさせる第2制御データと、機械学習プロセッサに複数の作業シーケンスを連続して実行させる第3制御データ(たとえば、制御依存関係)とを、更新済みの機械学習モデルに含め得る。入力データを複数部分に分割して複数の作業シーケンスを更新済み機械学習モデルに含めることの例を、
図8に示し、以下に説明する。
【0098】
更新済みの機械学習モデルを利用して機械学習の計算を行う(940)。たとえば、更新済みの機械学習モデルは、機械学習プロセッサ上に展開され得る。機械学習プロセッサは、訓練データを用いて更新済みの機械学習モデルを訓練することができる。たとえば、機械学習プロセッサは、入力データを分類するように機械学習モデルを訓練することができる。次に、機械学習プロセッサは、訓練済み機械学習モデルを利用して機械学習の計算を行う、たとえば、その他の入力データを分類することができる。
【0099】
上述したように、機械学習モデルの作業は、たとえば機械学習モデルによって推論を計算するために機械学習モデルによってフォワードパスを実行するために必要な作業を含み得る。これらの作業は、たとえば、ニューラルネットワークの層によって実行される行列の演算作業および/または畳み込み演算を含み得る。また、これらの作業は、機械学習モ
デルを訓練するための訓練プロセスのイテレーションを実行するために必要な作業を含み得る。また、これらの作業は、機械学習モデルによってフォワードパスを実行するために必要な作業と、機械学習モデルによってバックワードパスを実行するために必要な作業、つまり、機械学習モデルの重みまたはパラメータに関して勾配を判断するために必要な逆伝播作業とを含み得る。
【0100】
本明細書において説明した主題および機能的動作の実施の形態は、デジタル電子回路系、有形で実施されるコンピュータソフトウェアもしくはファームウェア、本明細書に開示される構造およびそれらの構造的等価物を含むコンピュータハードウェア、またはそれらの1つまたは複数の組合せで実現され得る。本明細書において説明した主題の実施の形態は、1つまたは複数のコンピュータプログラムとして実現され得る。すなわち、データ処理装置による実行のために、または、データ処理装置の動作を制御するために有形の非一時的なプログラム担体上で符号化されたコンピュータプログラム命令の1つまたは複数のモジュールとして実現され得る。これに代えて、またはこれに加えて、プログラム命令は、データ処理装置による実行のために好適な受信側装置に送信するための情報を符号化するよう生成される人為的に生成された伝播信号、たとえばマシンにより生成される電気信号、光信号、または電磁気信号上で符号化することができる。コンピュータ記憶媒体は、機械読み取り可能な記憶装置、機械読み取り可能な記憶基板、ランダムもしくはシリアルアクセスメモリデバイス、または、それらの1つまたは複数の組合せであり得る。
【0101】
本明細書において説明した処理フローおよび論理フローは、入力データ上で動作して出力を生成することによって機能を実行するように1つまたは複数のプログラマブルコンピュータが1つまたは複数のコンピュータプログラムを実行することによって実行され得る。また、処理フローおよび論理フローは、たとえばFPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)、またはGPGPU(汎用グラフィック処理装置)などの特殊目的論理回路によっても実行され得、装置も当該特殊目的論理回路によって実現され得る。
【0102】
コンピュータプログラムの実行に適したコンピュータは、一例として、汎用もしくは特定用途向けマイクロプロセッサもしくはその両方、またはその他の種類のCPU(Central Processing Unit)を含むことができる。一般に、CPUは、ROM(Read Only Memory)、RAM(Random Access Memory)、またはその両方から命令およびデータを受け取る。コンピュータの必須構成要素は、命令を実施または実行するためのCPUと、命令およびデータを格納するための1つ以上のメモリ素子である。一般に、コンピュータは、データを格納するための1つ以上の大容量記憶装置、たとえば、磁気ディスク、光磁気ディスク、または光ディスクを備える、または、このような1つ以上の大容量記憶装置との間でデータの受信、送信、もしくはその両方を行うように操作可能に接続される。しかしながら、コンピュータは、このような機器を有する必要はない。また、コンピュータは、別の機器、たとえば、一例を挙げると、携帯電話、携帯情報端末(PDA)、携帯オーディオもしくはビデオプレーヤ、ゲームコントローラ、GPS(Global Positioning System)受信機、またはポータブル記憶装置(たとえば、USB(Universal Serial Bus)フラッシュドライブ)に組み込むことができる。
【0103】
コンピュータプログラム命令およびデータを格納するのに適した読み取り可能な媒体は、一例として、EPROM、EEPROM、およびフラッシュメモリ素子などの半導体メモリ素子を含む不揮発性メモリ、複数の媒体およびメモリ素子、内蔵ハードディスクまたはリムーバブルディスクなどの磁気ディスク、光磁気ディスク、ならびにCD-ROMおよびDVD-ROMディスクの全ての形態を含む。プロセッサおよびメモリは、専用の論理回路によって補ったり、専用の論理回路に内蔵したりすることができる。
【0104】
本明細書は、多くの具体的な実施態様の詳細を含むが、これらは発明または特許請求の範囲の限定として解釈されるべきではなく、むしろ、特定の発明の特定の実施の形態に特有であると思われる特徴の説明であると解釈されるべきである。本明細書おいて別々の実施の形態として説明された特定の特徴も、組み合わせて1つの実施の形態で実現することができる。その逆に、1つの実施の形態として説明された様々な特徴を、別々の複数の実施の形態または任意の適した部分的な組み合わせで実現することもできる。また、特徴は、いくつかの特定の組み合わせで動作するものとして上述され、そのように当初クレームされてもよいが、クレームされた組合せからの1つ以上の特徴は、場合によっては、組み合わせから削除することができ、クレームされた組合せは、部分的な組み合わせまたは部分的な組み合わせの変形例を対象としてもよい。
【0105】
同様に、図面に動作を特定の順番で示しているが、所望の結果を実現するためにこのような動作を図示された特定の順番または順序で実行する必要がある、または、図示した動作のすべてを実行する必要がある、と理解されるべきではない。特定の状況では、多重タスク処理および並列処理が有利である場合がある。また、上述の実施の形態における様々なシステムモジュールおよび構成要素を分離することは、このような分離がすべての実施の形態において必要であると理解されるべきではなく、説明したプログラムコンポーネントおよびシステムは、一般に、1つのソフトウェアプロダクトに一体化したり、複数のソフトウェアプロダクトにパッケージ化したりすることができると理解されるべきである。
【0106】
本発明の主題の特定の実施の形態を説明した。その他の実施の形態も、添付の特許請求の範囲に含まれる。たとえば、請求項に記載された動作は、異なる順序で実行することができ、それでもなお所望の結果を実現することができる。一例として、添付の図面に示した処理は、所望の結果を実現するために必ずしも図示した特定の順番または一連の順序である必要はない。いくつかの実施態様において、多重タスク処理および並列処理が有利である場合がある。