(57)【要約】  コンピュータによって実行される方法は、ハードウェア回路上のニューラルネットワークを使用して処理されるニューラルネットワーク入力のバッチを受信するステップを含む。ニューラルネットワークは、有向グラフの状態で配置された複数のレイヤを有し、各レイヤは、それぞれのパラメータセットを有する。上記方法は、ニューラルネットワークのレイヤの、スーパーレイヤのシーケンスへのパーティショニングを決定するステップを含む。各スーパーレイヤは、１つ以上のレイヤを含む有向グラフのパーティションである。上記方法は、ハードウェア回路を使用して入力のバッチを処理するステップを含み、ハードウェア回路を使用して入力のバッチを処理するステップは、シーケンスにおける各スーパーレイヤについて、ｉ）スーパーレイヤにおけるレイヤのためのそれぞれのパラメータセットをハードウェア回路のメモリにロードするステップと、ｉｉ）バッチ内の各入力について、ハードウェア回路のメモリ内のパラメータを使用して、スーパーレイヤの各レイヤを介して入力を処理して、入力のためのスーパーレイヤ出力を生成するステップとを含む。
2020521195.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
ハードウェア回路上のニューラルネットワークを使用して処理されるニューラルネットワーク入力のバッチを受信するステップを備え、前記ニューラルネットワークは、有向グラフの状態で配置された複数のレイヤを有し、各レイヤは、それぞれのパラメータセットを有し、前記方法はさらに、
前記ニューラルネットワークのレイヤの、スーパーレイヤのシーケンスへのパーティショニングを決定するステップを備え、各スーパーレイヤは、１つ以上のレイヤを含む前記有向グラフのパーティションであり、前記方法はさらに、
前記ハードウェア回路を使用して前記ニューラルネットワーク入力のバッチを処理するステップを備え、前記ハードウェア回路を使用して前記ニューラルネットワーク入力のバッチを処理するステップは、前記シーケンスにおける各スーパーレイヤについて、
前記スーパーレイヤにおける前記レイヤのための前記それぞれのパラメータセットを前記ハードウェア回路のメモリにロードするステップと、
前記バッチ内の各ニューラルネットワーク入力について、前記ハードウェア回路の前記メモリ内の前記パラメータを使用して、前記スーパーレイヤの各レイヤを介して前記ニューラルネットワーク入力に対応するスーパーレイヤ入力を処理して、前記ニューラルネットワーク入力のためのスーパーレイヤ出力を生成するステップとを備える、方法。
【請求項２】
前記シーケンスにおける第１のスーパーレイヤでは、前記ニューラルネットワーク入力に対応する前記スーパーレイヤ入力が前記ニューラルネットワーク入力である、請求項１に記載の方法。
【請求項３】
前記第１のスーパーレイヤ出力の後の各スーパーレイヤへの前記スーパーレイヤ入力は、前記シーケンスにおける先行するスーパーレイヤによって生成されたスーパーレイヤ出力である、請求項２に記載の方法。
【請求項４】
前記ハードウェア回路を使用して前記ニューラルネットワーク入力のバッチを処理するステップは、各スーパーレイヤについて、
前記バッチ内の第２のニューラルネットワーク入力に対応するスーパーレイヤ入力が前記スーパーレイヤの各レイヤを介して後に処理される前に前記バッチ内の第１のニューラルネットワーク入力のための前記スーパーレイヤ入力が前記スーパーレイヤの各レイヤを介して処理されるように、前記スーパーレイヤの各レイヤを介して前記ニューラルネットワーク入力のバッチに対応する前記スーパーレイヤ入力をシーケンシャルに処理するステップを備える、請求項１〜３のいずれか１項に記載の方法。
【請求項５】
スーパーレイヤのそれぞれのレイヤは、ワーキングセットに関連付けられ、各ワーキングセットは、少なくとも
ｉ）前記ハードウェア回路上の前記ニューラルネットワークを使用して処理される前記ニューラルネットワーク入力のバッチの１つ以上の入力または前記スーパーレイヤの先行するレイヤの１つ以上の出力、および
ｉｉ）前記スーパーレイヤの各レイヤを介して前記１つ以上の入力を処理するのに必要なメモリの量を示すサイズパラメータ
によって定義される、請求項１〜４のいずれか１項に記載の方法。
【請求項６】
前記ニューラルネットワークのレイヤの、スーパーレイヤのシーケンスへの前記パーティショニングを決定するステップは、
ｉ）少なくとも１つのワーキングセットのための特定のサイズパラメータを決定するステップと、
ｉｉ）前記ハードウェア回路の前記メモリの特定の集約パラメータ容量を決定するステップと、
ｉｉｉ）前記少なくとも１つのワーキングセットのための前記特定のサイズパラメータまたは前記ハードウェア回路の前記メモリの特定の集約パラメータ容量のうちの少なくとも１つに基づいて、前記ニューラルネットワークのレイヤの、スーパーレイヤのシーケンスへの前記パーティショニングを決定するステップとを備える、請求項５に記載の方法。
【請求項７】
前記ハードウェア回路の前記メモリは、閾値記憶容量を有し、前記ニューラルネットワークのレイヤの、スーパーレイヤのシーケンスへの前記パーティショニングを決定するステップは、
前記ハードウェア回路の前記メモリの前記閾値記憶容量に基づいて、前記ニューラルネットワークのレイヤをスーパーレイヤのシーケンスにパーティショニングするステップを備える、請求項１〜６のいずれか１項に記載の方法。
【請求項８】
前記ニューラルネットワークのレイヤは、前記ハードウェア回路が前記ニューラルネットワーク入力のバッチを処理する際に前記メモリの前記閾値記憶容量を超えないようにスーパーレイヤのシーケンスにパーティショニングされる、請求項７に記載の方法。
【請求項９】
前記ニューラルネットワーク入力のバッチおよび前記それぞれのパラメータセットは、前記ハードウェア回路の外部のソースから受信され、前記スーパーレイヤの各レイヤを介して前記ニューラルネットワーク入力に対応する前記スーパーレイヤ入力を処理するステップは、前記外部のソースから追加のパラメータを受信することなく前記スーパーレイヤ入力を処理するステップを備える、請求項１〜８のいずれか１項に記載の方法。
【請求項１０】
コンピューティングシステムであって、
前記コンピューティングシステムに配設されたハードウェア回路を備え、前記ハードウェア回路は、１つ以上の処理装置を含み、前記コンピューティングシステムはさらに、
動作を実行するように前記１つ以上の処理装置によって実行可能な命令を格納するための１つ以上の機械読取可能記憶装置を備え、前記動作は、
ハードウェア回路上のニューラルネットワークを使用して処理されるニューラルネットワーク入力のバッチを受信するステップを備え、前記ニューラルネットワークは、有向グラフの状態で配置された複数のレイヤを有し、各レイヤは、それぞれのパラメータセットを有し、前記動作はさらに、
前記ニューラルネットワークのレイヤの、スーパーレイヤのシーケンスへのパーティショニングを決定するステップを備え、各スーパーレイヤは、１つ以上のレイヤを含む前記有向グラフのパーティションであり、前記動作はさらに、
前記ハードウェア回路を使用して前記ニューラルネットワーク入力のバッチを処理するステップを備え、前記ハードウェア回路を使用して前記ニューラルネットワーク入力のバッチを処理するステップは、前記シーケンスにおける各スーパーレイヤについて、
前記スーパーレイヤにおける前記レイヤのための前記それぞれのパラメータセットを前記ハードウェア回路のメモリにロードするステップと、
前記バッチ内の各ニューラルネットワーク入力について、前記ハードウェア回路の前記メモリ内の前記パラメータを使用して、前記スーパーレイヤの各レイヤを介して前記ニューラルネットワーク入力に対応するスーパーレイヤ入力を処理して、前記ニューラルネットワーク入力のためのスーパーレイヤ出力を生成するステップとを備える、コンピューティングシステム。
【請求項１１】
前記シーケンスにおける第１のスーパーレイヤでは、前記ニューラルネットワーク入力に対応する前記スーパーレイヤ入力が前記ニューラルネットワーク入力である、請求項１０に記載のコンピューティングシステム。
【請求項１２】
前記第１のスーパーレイヤ出力の後の各スーパーレイヤへの前記スーパーレイヤ入力は、前記シーケンスにおける先行するスーパーレイヤによって生成されたスーパーレイヤ出力である、請求項１１に記載のコンピューティングシステム。
【請求項１３】
前記ハードウェア回路を使用して前記ニューラルネットワーク入力のバッチを処理するステップは、各スーパーレイヤについて、
前記バッチ内の第２のニューラルネットワーク入力に対応するスーパーレイヤ入力が前記スーパーレイヤの各レイヤを介して後に処理される前に前記バッチ内の第１のニューラルネットワーク入力のための前記スーパーレイヤ入力が前記スーパーレイヤの各レイヤを介して処理されるように、前記スーパーレイヤの各レイヤを介して前記ニューラルネットワーク入力のバッチに対応する前記スーパーレイヤ入力をシーケンシャルに処理するステップを備える、請求項１０〜１２のいずれか１項に記載のコンピューティングシステム。
【請求項１４】
スーパーレイヤのそれぞれのレイヤは、ワーキングセットに関連付けられ、各ワーキングセットは、少なくとも
ｉ）前記ハードウェア回路上の前記ニューラルネットワークを使用して処理される前記ニューラルネットワーク入力のバッチの１つ以上の入力または前記スーパーレイヤの先行するレイヤの１つ以上の出力、および
ｉｉ）前記スーパーレイヤの各レイヤを介して前記１つ以上の入力を処理するのに必要なメモリの量を示すサイズパラメータ
によって定義される、請求項１０〜１３のいずれか１項に記載のコンピューティングシステム。
【請求項１５】
前記ニューラルネットワークのレイヤの、スーパーレイヤのシーケンスへの前記パーティショニングを決定するステップは、
ｉ）少なくとも１つのワーキングセットのための特定のサイズパラメータを決定するステップと、
ｉｉ）前記ハードウェア回路の前記メモリの特定の集約パラメータ容量を決定するステップと、
ｉｉｉ）前記少なくとも１つのワーキングセットのための前記特定のサイズパラメータまたは前記ハードウェア回路の前記メモリの特定の集約パラメータ容量のうちの少なくとも１つに基づいて、前記ニューラルネットワークのレイヤの、スーパーレイヤのシーケンスへの前記パーティショニングを決定するステップとを備える、請求項１４に記載のコンピューティングシステム。
【請求項１６】
前記ハードウェア回路の前記メモリは、閾値記憶容量を有し、前記ニューラルネットワークのレイヤの、スーパーレイヤのシーケンスへの前記パーティショニングを決定するステップは、
前記ハードウェア回路の前記メモリの前記閾値記憶容量に基づいて、前記ニューラルネットワークのレイヤをスーパーレイヤのシーケンスにパーティショニングするステップを備える、請求項１０〜１５のいずれか１項に記載のコンピューティングシステム。
【請求項１７】
前記ニューラルネットワークのレイヤは、前記ハードウェア回路が前記ニューラルネットワーク入力のバッチを処理する際に前記メモリの前記閾値記憶容量を超えないようにスーパーレイヤのシーケンスにパーティショニングされる、請求項１６に記載のコンピューティングシステム。
【請求項１８】
前記ニューラルネットワーク入力のバッチおよび前記それぞれのパラメータセットは、前記ハードウェア回路の外部のソースから受信され、前記スーパーレイヤの各レイヤを介して前記ニューラルネットワーク入力に対応する前記スーパーレイヤ入力を処理するステップは、前記外部のソースから追加のパラメータを受信することなく前記スーパーレイヤ入力を処理するステップを備える、請求項１０〜１７のいずれか１項に記載のコンピューティングシステム。
【請求項１９】
動作を実行するように１つ以上の処理装置によって実行可能な命令を格納する１つ以上の機械読取可能記憶装置であって、前記動作は、
ハードウェア回路上のニューラルネットワークを使用して処理されるニューラルネットワーク入力のバッチを受信するステップを備え、前記ニューラルネットワークは、有向グラフの状態で配置された複数のレイヤを有し、各レイヤは、それぞれのパラメータセットを有し、前記動作はさらに、
前記ニューラルネットワークのレイヤの、スーパーレイヤのシーケンスへのパーティショニングを決定するステップを備え、各スーパーレイヤは、１つ以上のレイヤを含む前記有向グラフのパーティションであり、前記動作はさらに、
前記ハードウェア回路を使用して前記ニューラルネットワーク入力のバッチを処理するステップを備え、前記ハードウェア回路を使用して前記ニューラルネットワーク入力のバッチを処理するステップは、前記シーケンスにおける各スーパーレイヤについて、
前記スーパーレイヤにおける前記レイヤのための前記それぞれのパラメータセットを前記ハードウェア回路のメモリにロードするステップと、
前記バッチ内の各ニューラルネットワーク入力について、前記ハードウェア回路の前記メモリ内の前記パラメータを使用して、前記スーパーレイヤの各レイヤを介して前記ニューラルネットワーク入力に対応するスーパーレイヤ入力を処理して、前記ニューラルネットワーク入力のためのスーパーレイヤ出力を生成するステップとを備える、機械読取可能記憶装置。
【請求項２０】
前記ハードウェア回路を使用して前記ニューラルネットワーク入力のバッチを処理するステップは、各スーパーレイヤについて、
前記バッチ内の第２のニューラルネットワーク入力に対応するスーパーレイヤ入力が前記スーパーレイヤの各レイヤを介して後に処理される前に前記バッチ内の第１のニューラルネットワーク入力のための前記スーパーレイヤ入力が前記スーパーレイヤの各レイヤを介して処理されるように、前記スーパーレイヤの各レイヤを介して前記ニューラルネットワーク入力のバッチに対応する前記スーパーレイヤ入力をシーケンシャルに処理するステップを備える、請求項１９に記載の機械読取可能記憶装置。
【発明の詳細な説明】
【背景技術】
【０００１】
背景
本明細書は、ニューラルネットワーク計算を実行するためのメモリ管理プロセスに関する。
【０００２】
ニューラルネットワークは、オペレーションの１つ以上のレイヤを利用して、受信した入力に対する出力、たとえば分類、を生成する機械学習モデルである。いくつかのニューラルネットワークは、出力レイヤに加えて、１つ以上の隠れレイヤを含む。各隠れレイヤの出力は、ネットワーク内の次のレイヤ、すなわちネットワークの次の隠れレイヤまたは出力レイヤ、への入力として使用される。ネットワークのレイヤのうちの一部または全ては、それぞれのパラメータセットの現在の値に従って、受信した入力から出力を生成する。
【０００３】
いくつかのニューラルネットワークは、１つ以上の畳み込みニューラルネットワークレイヤを含む。各畳み込みニューラルネットワークレイヤは、関連付けられたカーネルセットを有する。各カーネルは、ユーザが作成するニューラルネットワークモデルによって確立された値を含む。いくつかの実現例では、カーネルは、特定の画像輪郭、形状または色を識別する。カーネルは、重み入力のマトリックス構造として表すことができる。また、各畳み込みレイヤは、活性化入力セットも処理することができる。活性化入力セットも、マトリックス構造として表すことができる。
【０００４】
概要
本明細書に記載されている主題は、ハードウェア回路上のニューラルネットワークを使用して処理されるニューラルネットワーク入力のバッチを受信するためのシステムおよび方法を含む。上記ニューラルネットワークは、有向グラフの状態で配置された複数のレイヤを含んでもよく、各レイヤは、それぞれのパラメータセットを有してもよい。記載されている技術に係る方法は、上記ニューラルネットワークのレイヤの、スーパーレイヤのシーケンスへのパーティショニングを決定するステップを含む。各スーパーレイヤは、１つ以上のレイヤを含む上記有向グラフのパーティションであってもよい。
【０００５】
記載されている方法は、上記ハードウェア回路を使用して上記入力のバッチを処理するステップを含んでもよい。たとえば、上記入力のバッチを処理するステップは、上記シーケンスの各スーパーレイヤにおける上記レイヤのための上記それぞれのパラメータセットを上記ハードウェア回路のメモリにロードするステップを含んでもよい。さらに、記載されている方法は、上記バッチ内の各入力について、上記ハードウェア回路の上記メモリ内の上記パラメータを使用して、上記スーパーレイヤの各レイヤを介して上記入力を処理して、上記入力に基づいてスーパーレイヤ出力を生成するステップを含んでもよい。
【０００６】
本明細書に記載されている主題の一局面は、コンピュータによって実行される方法で具体化されてもよい。上記方法は、ハードウェア回路上のニューラルネットワークを使用して処理されるニューラルネットワーク入力のバッチを受信するステップを含み、上記ニューラルネットワークは、有向グラフの状態で配置された複数のレイヤを有し、各レイヤは、それぞれのパラメータセットを有し、上記方法はさらに、上記ニューラルネットワークのレイヤの、スーパーレイヤのシーケンスへのパーティショニングを決定するステップを含み、各スーパーレイヤは、１つ以上のレイヤを含む上記有向グラフのパーティションである。
【０００７】
上記方法はさらに、上記ハードウェア回路を使用して上記ニューラルネットワーク入力のバッチを処理するステップを含み、上記ハードウェア回路を使用して上記ニューラルネットワーク入力のバッチを処理するステップは、上記シーケンスにおける各スーパーレイヤについて、上記スーパーレイヤにおける上記レイヤのための上記それぞれのパラメータセットを上記ハードウェア回路のメモリにロードするステップと、上記バッチ内の各ニューラルネットワーク入力について、上記ハードウェア回路の上記メモリ内の上記パラメータを使用して、上記スーパーレイヤの各レイヤを介して上記ニューラルネットワーク入力に対応するスーパーレイヤ入力を処理して、上記ニューラルネットワーク入力のためのスーパーレイヤ出力を生成するステップとを含む。
【０００８】
これらのおよび他の実現例の各々は、任意に以下の特徴のうちの１つ以上を含んでもよい。たとえば、いくつかの実現例では、上記シーケンスにおける第１のスーパーレイヤでは、上記ニューラルネットワーク入力に対応する上記スーパーレイヤ入力が上記ニューラルネットワーク入力である。いくつかの実現例では、上記第１のスーパーレイヤ出力の後の各スーパーレイヤへの上記スーパーレイヤ入力は、上記シーケンスにおける先行するスーパーレイヤによって生成されたスーパーレイヤ出力である。
【０００９】
いくつかの実現例では、上記ハードウェア回路を使用して上記ニューラルネットワーク入力のバッチを処理するステップは、各スーパーレイヤについて、上記バッチ内の第２のニューラルネットワーク入力に対応するスーパーレイヤ入力が上記スーパーレイヤの各レイヤを介して後に処理される前に上記バッチ内の第１のニューラルネットワーク入力のための上記スーパーレイヤ入力が上記スーパーレイヤの各レイヤを介して処理されるように、上記スーパーレイヤの各レイヤを介して上記ニューラルネットワーク入力のバッチに対応する上記スーパーレイヤ入力をシーケンシャルに処理するステップを備える。
【００１０】
いくつかの実現例では、スーパーレイヤのそれぞれのレイヤは、ワーキングセットに関連付けられ、各ワーキングセットは、少なくともｉ）上記ハードウェア回路上の上記ニューラルネットワークを使用して処理される上記ニューラルネットワーク入力のバッチの１つ以上の入力または上記スーパーレイヤの先行するレイヤの１つ以上の出力、およびｉｉ）上記スーパーレイヤの各レイヤを介して上記１つ以上の入力を処理するのに必要なメモリの量を示すサイズパラメータによって定義される。
【００１１】
いくつかの実現例では、上記ニューラルネットワークのレイヤの、スーパーレイヤのシーケンスへの上記パーティショニングを決定するステップは、ｉ）少なくとも１つのワーキングセットのための特定のサイズパラメータを決定するステップと、ｉｉ）上記ハードウェア回路の上記メモリの特定の集約パラメータ容量を決定するステップと、ｉｉｉ）上記少なくとも１つのワーキングセットのための上記特定のサイズパラメータまたは上記ハードウェア回路の上記メモリの特定の集約パラメータ容量のうちの少なくとも１つに基づいて、上記ニューラルネットワークのレイヤの、スーパーレイヤのシーケンスへの上記パーティショニングを決定するステップとを含む。
【００１２】
いくつかの実現例では、上記ハードウェア回路の上記メモリは、閾値記憶容量を有し、上記ニューラルネットワークのレイヤの、スーパーレイヤのシーケンスへの上記パーティショニングを決定するステップは、上記ハードウェア回路の上記メモリの上記閾値記憶容量に基づいて、上記ニューラルネットワークのレイヤをスーパーレイヤのシーケンスにパーティショニングするステップを含む。
【００１３】
いくつかの実現例では、上記ニューラルネットワークのレイヤは、上記ハードウェア回路が上記ニューラルネットワーク入力のバッチを処理する際に上記メモリの上記閾値記憶容量を超えないようにスーパーレイヤのシーケンスにパーティショニングされる。
【００１４】
いくつかの実現例では、上記ニューラルネットワーク入力のバッチおよび上記それぞれのパラメータセットは、上記ハードウェア回路の外部のソースから受信され、上記スーパーレイヤの各レイヤを介して上記ニューラルネットワーク入力に対応する上記スーパーレイヤ入力を処理するステップは、上記外部のソースから追加のパラメータを受信することなく上記スーパーレイヤ入力を処理するステップを備える。
【００１５】
これの他の実現例および他の局面は、対応するシステム、装置、およびコンピュータ記憶装置にエンコードされた、上記の方法の動作を実行するように構成されたコンピュータプログラムを含む。１つ以上のコンピュータまたはハードウェア回路のコンピューティングシステムは、システムにインストールされて動作時にシステムに動作を実行させるソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせによってそのように構成することができる。１つ以上のコンピュータプログラムは、データ処理装置によって実行されると装置に動作を実行させる命令を有することによってそのように構成することができる。
【００１６】
本明細書に記載されている主題は、以下の利点のうちの１つ以上を達成するように特定の実施形態において実現可能である。ニューラルネットワークレイヤをスーパーレイヤのシーケンスにパーティショニングすることによって、ニューラルネットワークがパラメータセットを使用して入力を処理する際に、ニューラルネットワークハードウェア回路による外部通信を最小化することができる。計算プロセス中のハードウェア回路による外部通信が最小化されることにより、ハードウェア回路による帯域幅消費およびエネルギ最適化を向上させることができる。
【００１７】
さらに、スーパーレイヤのシーケンスは、ニューラルネットワークモデルの「バッチ」次元と「レイヤ」次元とを混合してニューラルネットワークレイヤを介した入力の処理のための１つ以上のメモリワーキングセットを最適化するグローバルスケジューリングプロセスを提供することができる。たとえば、バッチ次元およびレイヤ次元に対してグローバルスケジューリングを実行することによって、ニューラルネットワークアプリケーションのライブメモリワーキングセットを最小化することができ、それによって、所与のハードウェア回路での入力のバッチレス実行を向上させる。ライブメモリワーキングセットは、ニューラルネットワークのレイヤを介した処理のためのデータに対応し得て、このデータは、現在のところ、データ処理装置またはプロセッサハードウェア回路の物理的メモリ空間にある。
【００１８】
さらに、ハードウェア回路の一例は、最小化されたワーキングセットの入力およびパラメータを、ＳＲＡＭ容量を使用してオンチップで格納できるようにオンチップメモリ（たとえば、ＳＲＡＭ）を含んでもよい。したがって、スーパーレイヤのシーケンスを提供するグローバルスケジューリングプロセスに基づいてＳＲＡＭ容量が効率的に利用されるときに入力およびパラメータを格納するのに追加のメモリリソースが必要とされなければ、コストの節約を実現することができる。いくつかの実現例では、オンチップＳＲＡＭ容量は、特定の設計要件を満たすように、かつ、スーパーレイヤシーケンスを形成することを含む場合もあれば含まない場合もあるスケジューリングプロセスを提供するように、必要に応じて拡大または縮小されてもよい。
【００１９】
本明細書に記載されている主題の１つ以上の実現例の詳細については、添付の図面および以下の説明に記載されている。主題の他の考えられる特徴、局面および利点は、明細書、図面および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００２０】
【図１】各々がそれぞれのパラメータセットを有するニューラルネットワークのレイヤを介してニューラルネットワーク入力を処理するためのハードウェア回路の一例を示す。
【図２Ａ】ニューラルネットワークのそれぞれのレイヤを使用した単一のバッチ要素の処理に関連するグラフの一例を示す。
【図２Ｂ】ニューラルネットワークの所与のレイヤのための複数のバッチ要素の処理に関連するグラフの一例を示す。
【図３】スーパーレイヤを形成するニューラルネットワークの複数のレイヤの中での単一のバッチ要素の処理に関連するグラフの一例を示す。
【図４】ニューラルネットワークのスーパーレイヤを介してニューラルネットワーク入力を処理する方法のフロー図の一例である。
【図５】スーパーレイヤの複数のレイヤを使用して単一のバッチ要素を処理するためにスーパーレイヤのシーケンスにパーティショニングされるニューラルネットワークレイヤを示すグラフの一例を示す。
【図６Ａ】ニューラルネットワークレイヤのワーキングセットサイズを示すグラフの一例を示す。
【図６Ｂ】ニューラルネットワークのスーパーレイヤのワーキングセットサイズを示すグラフの一例を示す。
【発明を実施するための形態】
【００２１】
さまざまな図における同様の参照番号および符号は、同様の要素を示す。
詳細な説明
複数のレイヤを有するニューラルネットワークを使用して、推論を計算することができる。たとえば、入力が与えられると、ニューラルネットワークはその入力に対する推論を計算することができる。ニューラルネットワークは、ニューラルネットワークの各レイヤを介して入力を処理することによってこの推論を計算する。特に、ニューラルネットワークのレイヤは、有向グラフの状態で配置され得て、レイヤの一部または全ては、それぞれのパラメータセットを有する。各レイヤは、入力を受信し、そのレイヤのためのパラメータセットに従って入力を処理して、出力を生成する。出力は、次のニューラルネットワークレイヤにおいて入力として使用することができる。
【００２２】
したがって、受信した入力から推論を計算するために、ニューラルネットワークは、入力を受信し、有向グラフにおける各ニューラルネットワークレイヤを介してそれを処理して、推論を生成し、１つのニューラルネットワークレイヤからの出力は、次のニューラルネットワークレイヤへの入力として提供される。ニューラルネットワークレイヤへのデータ入力、たとえばニューラルネットワークへの入力または有向グラフにおけるレイヤに接続された１つ以上のレイヤの、ニューラルネットワークレイヤへの出力は、レイヤへの活性化入力と称される。
【００２３】
有向グラフにおける特定のレイヤは、複数の入力を受信したり、複数の出力を生成したり、複数の入力を受信して複数の出力を生成したりすることができる。また、ニューラルネットワークのレイヤは、レイヤの出力を前のレイヤへの入力として送り返すことができるように配置することもできる。記載されている技術に係る方法は、各スーパーレイヤが１つ以上のレイヤを含む有向グラフのパーティションであるように、ニューラルネットワークレイヤの、スーパーレイヤのシーケンスへのパーティショニングを決定するステップを含み得る。
【００２４】
記載されている方法は、ハードウェア回路上のニューラルネットワークについてシーケンスにおけるそれぞれのスーパーレイヤのレイヤを介して入力のバッチを処理するステップを含み得る。入力のバッチを処理するステップは、レイヤのためのパラメータをハードウェア回路のメモリにロードするステップと、これらのパラメータを使用してニューラルネットワーク入力を処理して、この入力に対するそれぞれのスーパーレイヤ出力を生成するステップとを含み得る。
【００２５】
いくつかの実現例では、本明細書に記載されている１つ以上の機能は、システムのハードウェア回路または電子部品を使用して実行することができる。ハードウェア回路は、ハードウェア回路に電気的に結合された制御装置から制御信号を受信することができる。ハードウェア回路は、ニューラルネットワークレイヤへの入力およびこれらの入力を処理するために使用されるパラメータを格納するための１つ以上の非一時的な機械読取可能記憶媒体（たとえば、メモリ）を含むパッケージングされた電子デバイスであってもよい。
【００２６】
ハードウェア回路は、プロセッサマイクロチップ（たとえば、ＣＰＵまたはＧＰＵ）などのパッケージングされた集積回路またはプロセッサデバイスを形成する複数のコンポーネントを含み得る。したがって、この例では、ハードウェア回路のメモリは、マイクロチップを形成する複数の他のコンポーネントに対する「オンチップ」メモリであってもよい。本明細書では、パッケージングされたハードウェア回路または電子デバイスは、支持ケース内に密閉または封入されたシリコンウェハなどの半導体材料を含んでもよい。支持ケースは、デバイスを印刷回路基板に接続するために、ケースの外縁から延びる１本の導線を含み得る。
【００２７】
制御装置は、ハードウェア回路から間隔をあけて配置され、かつ、少なくともハードウェア回路のコンポーネントパッケージ（たとえば、支持ケース）によって封入されたオンチップメモリの外部にある外部コントローラであってもよい。外部コントローラは、ハードウェア回路に制御信号を提供してハードウェア回路に上記の入力およびパラメータを使用してニューラルネットワーク推論計算を実行させるシステムレベルコントローラであってもよい。外部コントローラは、メモリが、少なくともパッケージングされたハードウェア回路のオンチップメモリと同一場所に位置していないのでオフチップである「オフチップ」メモリを含んでもよい。
【００２８】
いくつかの実現例では、推論計算を実行する際、外部コントローラは、オフチップメモリを使用するのではなく、ハードウェア回路のオンチップメモリを使用して、入力およびパラメータを格納することができる。システムの少なくとも１つのコントローラから制御信号を受信したことに応答して、ハードウェア回路は、オンチップメモリにアクセスして、格納された入力およびパラメータを使用してニューラルネットワーク計算を実行する。
【００２９】
図１は、ニューラルネットワーク計算を実行するために使用することができるハードウェア回路１００の一例を示す。ニューラルネットワーク計算を実行することは、各々がそれぞれのパラメータセットを有するニューラルネットワークのレイヤを介して回路１００がニューラルネットワーク入力を処理することを含み得る。いくつかの実現例では、回路１００は、ニューラルネットワークを具体化する１つ以上のプロセッサ、プロセッサマイクロチップまたは他の回路コンポーネントを含むハードウェア回路に対応する。他の実現例では、回路１００は、１つ以上のニューラルネットワークを形成する１つ以上のハードウェア回路、プロセッサおよび他の関連の回路コンポーネントを含み得る。一般に、記載されている技術に係る方法は、ＣＰＵ、ＧＰＵ、デジタル信号プロセッサ（ＤＳＰ）もしくは他の関連のプロセッサアーキテクチャなどのさまざまなプロセッサアーキテクチャに適用することができ、またはさまざまなプロセッサアーキテクチャを使用して実現することができる。
【００３０】
一般に、回路１００は、コントローラ１０８を含み、コントローラ１０８は、１つ以上の制御信号１１０を提供して、メモリ１０４に関連付けられた入力をメモリ１０２のメモリアドレスに格納するか、またはメモリ１０２のメモリアドレスから取得する。同様に、コントローラ１０８は、１つ以上の制御信号１１０を提供して、パラメータメモリ１０６のパラメータをメモリ１０２のメモリアドレスに格納するか、またはメモリ１０２のメモリアドレスから取得する。
【００３１】
回路１００は、１つ以上の積和演算（ＭＡＣ）セル／ユニット１０７と、入力活性化バス１１２と、出力活性化バス１１４とをさらに含む。制御信号１１０は、たとえば、１つ以上の入力を入力活性化バス１１２上に提供することをメモリ１０２にさせたり、１つ以上のパラメータをパラメータメモリ１０６から提供することをメモリ１０２にさせたり、これらの入力およびパラメータを使用して計算を実行して出力活性化を生成して出力活性化バス１１４に提供することをＭＡＣセル／ユニット１０７にさせたりすることができる。
【００３２】
コントローラ１０８は、１つ以上の処理ユニットとメモリとを含み得る。コントローラ１０８の処理ユニットは、１つ以上のプロセッサ（たとえば、マイクロプロセッサまたは中央処理装置（ＣＰＵ））、グラフィックス処理ユニット（ＧＰＵ）、特定用途向け集積回路（ＡＳＩＣ）、またはさまざまなプロセッサの組み合わせを含み得る。コントローラ１０８は、本明細書に記載されている判断および計算のうちの１つ以上を実行するための追加の処理オプションを提供する他の記憶または計算リソース／装置（たとえば、バッファ、レジスタ、制御回路など）も含み得る。
【００３３】
いくつかの実現例では、コントローラ１０８の処理ユニットは、メモリに格納された命令を実行して、コントローラ１０８および回路１００に本明細書に記載されている１つ以上の機能を実行させる。コントローラ１０８のメモリは、１つ以上の非一時的な機械読取可能記憶媒体を含み得る。本明細書に記載されている非一時的な機械読取可能記憶媒体は、ソリッドステートメモリ、磁気ディスク、光ディスク、携帯型コンピュータディスケット、ランダムアクセスメモリ（ＲＡＭ）、リードオンリメモリ（ＲＯＭ）、消去可能プログラマブルリードオンリメモリ（たとえば、ＥＰＲＯＭ、ＥＥＰＲＯＭまたはフラッシュメモリ）、または情報を格納することができるその他の有形の媒体を含み得る。
【００３４】
回路１００は、計算ユニットまたは計算タイルの一例であってもよく、テンソル、行列および／またはデータアレイなどの多次元データ構造に関連付けられた計算を実行するために追加のハードウェア構造を含み得る。いくつかの実現例では、入力値は、活性化メモリ１０４に予めロードすることができ、パラメータ／重み値は、ニューラルネットワークコンピューティングシステムに関連付けられた外部または上位制御装置から回路１００によって受信されるデータ値を使用してパラメータメモリ１０６に予めロードすることができる。
【００３５】
回路１００は、システムのニューラルネットワークを使用して実行される特定の計算オペレーションを定義する命令を受信することができる。一般に、メモリ１０２に格納されたデータ値の各々は、通常、それぞれのメモリアドレス位置に書き込まれる。そして、特定の計算オペレーションを実行するのに入力などのデータ値が必要であるときに、メモリ１０２におけるアドレス位置は、制御装置の一例（たとえば、コントローラ１０８）によってアクセスすることができる。
【００３６】
コントローラ１０８は、１つ以上の制御信号１１０をメモリ１０２に提供して、入力をメモリ１０２から入力活性化バス１１２上にロードし、ＭＡＣ１０７を含む計算ユニットのアレイに値を提供することができる。活性化メモリ１０４のインデックスは、入力を有する全てのメモリアドレス位置を含み得る。データバス１１２は、計算アレイの１つ以上のユニットによってアクセス可能である。計算アレイのユニットは、１つ以上の活性化値をデータバス１１２から受信して、受信した活性化値に基づいて行列乗算に関連する計算を実行することができる。
【００３７】
所与の計算サイクルにおいて、回路１００は、ニューラルネットワークレイヤの推論計算に関連付けられた乗算演算を実行するために、活性化メモリ１０４およびパラメータメモリ１０６の要素へのアクセスを必要とし得る。計算が実行されるサイクルにおいて、コントローラ１０８は、１つの入力値を一度に提供することができ、ＭＡＣセル１０７を含む計算ユニットのアレイは、活性化に重み／パラメータを乗算して、所与の入力についてさまざまな出力活性化を生成する。
【００３８】
いくつかの実現例では、計算ユニットのアレイの各ＭＡＣセル１０７は、ニューラルネットワークレイヤのさまざまな出力深さを担うことができる。計算ユニットのアレイは、コントローラ１０８によって完全に制御することができ、コントローラ１０８は、活性化値の検出に基づいて、いつ特定の計算を実行する必要があるかを判断することができる。
【００３９】
さらに、入力値は、メモリ１０２に格納するために回路１００に到達すると、分析され得る。入力を分析したことに応答して、コントローラ１０８は、プログラムされた命令を実行して、メモリ１０２に特定の入力値のみ（たとえば、ゼロでない活性化値のみ）を格納することによって活性化データを効率的に圧縮し、それによってメモリストレージスペースおよび対応する帯域幅を節約することができる。
【００４０】
回路１００が入力およびパラメータを受信すると、コントローラ１０８は、たとえば、１つ以上のダイレクトメモリアクセスオペレーションを実行することができる。これらのメモリアクセスオペレーションの実行は、活性化メモリ１０４の次元要素に対応する入力をメモリ１０２のアドレス位置に格納することを含む。同様に、コントローラ１０８は、パラメータメモリ１０６の次元要素に対応するパラメータもメモリ１０２のアドレス位置に格納することができる。コントローラ１０８は、特定の入力がフェッチされるメモリアドレスを維持する１つ以上のアドレスレジスタをさらに含み得る。さらに、１つ以上のレジスタは、対応するパラメータがフェッチされて特定の入力を乗算されるメモリアドレスも格納する。
【００４１】
コントローラ１０８は、上記のレジスタを参照して、第１および第２の入力がシーケンシャルに処理される際に、第１の入力のための対応するパラメータ（およびメモリアドレス）を決定し、第２の入力のための対応するパラメータ（およびメモリアドレス）を決定することができる。いくつかの実現例では、第１のニューラルネットワークレイヤにおいて計算される出力活性化は、ネットワーク内の次の／後続の第２のレイヤ、たとえばネットワークの次の隠れレイヤまたは出力レイヤ、への入力として使用される。一般に、ニューラルネットワークの各レイヤは、それぞれのパラメータセットの現在の値に従って、受信した入力から出力を生成する。
【００４２】
代替的な実現例では、（たとえば、「Ｘ」または「Ｙ」次元を繰り返すように）パラメータメモリ１０６の所与の次元要素についてさまざまな重みをカバーするいくつかの乗算演算のオペランドとして単一の入力が使用されるいくつかの計算オペレーションがあってもよい。記載されている技術によれば、回路１００は、計算システムまたは機械学習システムの外部コントローラから制御信号を受信するように構成され得る。外部コントローラは、回路１００のオンチップメモリに格納されたニューラルネットワーク入力およびパラメータのバッチを提供することができる。以下でより詳細に説明するように、外部コントローラは、回路１００上のニューラルネットワークによるバッチ要素処理のためのスケジューリングポリシーを実行するように構成され得る。
【００４３】
たとえば、システムの外部コントローラは、制御信号を回路１００に提供して、回路１００に、回路１００のオンチップメモリに格納された入力およびパラメータを使用してニューラルネットワークのレイヤを介してニューラルネットワーク入力を処理させることができる。記載されている技術によれば、特定のスケジューリングポリシーを使用して、ニューラルネットワークのレイヤを、スーパーレイヤ（以下で説明）の１つ以上のシーケンスを形成するレイヤのグループにパーティショニングすることができる。次いで、システムコントローラは、回路１００を使用して、オンチップメモリに格納された入力およびパラメータにアクセスし、次いで、スーパーレイヤのシーケンスにおける各レイヤを介してニューラルネットワーク入力のバッチを処理することができる。
【００４４】
図２Ａは、ニューラルネットワークのそれぞれのレイヤを使用した単一のバッチ要素の処理に関連するグラフ２００Ａの一例を示す。いくつかの実現例では、グラフ２００Ａ／Ｂおよび下記のグラフ３００、５００および６００Ａ／Ｂは、ニューラルネットワークのトポロジを表すことができる有向グラフの一例とは異なっている。
【００４５】
グラフ２００Ａは、ニューラルネットワークのレイヤを介したバッチ要素の処理中にワーキングセットのサイズがどのように変化するかを示している。ワーキングセットのサイズは、ストレージユニット２０４で表されている。一般に、所与のニューラルネットワークレイヤのワーキングセットは、ニューラルネットワークレイヤへの入力と、ニューラルネットワークレイヤからの出力と、ニューラルネットワークレイヤによって入力を処理するために使用されるパラメータとを含む。ワーキングセットは、一般に、所与のニューラルネットワーク計算に必要な１つ以上のデータ構造のグループを含み、これらのデータ構造については以下でより詳細に説明する。
【００４６】
１つ以上のストレージユニット２０４は、ワーキングセットの入力およびニューラルネットワークレイヤのための関連付けられたパラメータを格納するために使用される。ストレージユニット２０４は、上記のメモリ１０２のメモリリソースに関連付けることができる。バッチ要素は、ハードウェア回路上のニューラルネットワークの一例を使用して処理される単一のニューラルネットワーク入力である。
【００４７】
上記のように、ニューラルネットワークは、推論を計算するために使用される複数のレイヤを含み得て、推論は、ニューラルネットワークのレイヤを介してニューラルネットワーク入力を処理することによって計算される。したがって、グラフ２００Ａは、レイヤＡ、レイヤＢ、レイヤＣ、レイヤＤおよびレイヤＥを含むニューラルネットワークレイヤ２０６をさらに示している。グラフ２００Ａは、バッチ要素がまずレイヤＡを介して処理され、次いでレイヤＢを介して処理され、次いでレイヤＣを介して処理され、次いでレイヤＤを介して処理され、次いでレイヤＥを介して処理されることを示している。いくつかの実現例では、レイヤ２０６のそれぞれのレイヤは、畳み込みレイヤ、削減レイヤ、全結合（ＦＣ）レイヤ、分類子レイヤ、要素ごと乗算レイヤ、またはプーリングレイヤ、たとえば平均プーリングレイヤもしくは最大プーリングレイヤといったタイプのニューラルネットワークレイヤのうちの１つであってもよい。
【００４８】
ニューラルネットワークレイヤのワーキングセットは、１つ以上のバッチ要素と、ニューラルネットワークのそれぞれのレイヤを介してこれらのバッチ要素を処理するために使用されるパラメータとを含み得る。ワーキングセットは、ｉ）ハードウェア回路上のニューラルネットワークを使用して処理される入力のバッチの１つ以上の入力／バッチ要素、およびｉｉ）入力およびパラメータを格納するのに必要なメモリ量を示すサイズパラメータまたはストレージユニット２０４の数によって定義することができる。入力に加えて、ワーキングセットは、出力活性化も含んでもよい。いくつかの実現例では、ニューラルネットワークは、上記のバッチ要素に関連付けられた「バッチ」次元およびレイヤ２０６に対応する「レイヤ」次元を有するものとすることができる。
【００４９】
概して、図２Ａの以下の説明は、たとえば図３〜図６を参照して以下で説明する改良されたニューラルネットワークスケジューリングプロセスのための文脈を提供する。たとえば、レイヤ２０６は、少なくとも５つのレイヤ（たとえば、レイヤＡ、Ｂ、Ｃ、ＤおよびＥ）を含む機械学習モデルの一例のニューラルネットワークレイヤであってもよい。機械学習モデルによって実行される推論計算は、特徴深さまたは出力ストライディングが急にまたは予想外に増加する場合がある。これが発生すると、アクティブワーキングセットは、ニューラルネットワーク計算プロセスの所与の時点において、入力および出力活性化量を時間とともに増加させたり、入力および出力活性化量を時間とともに減少させたりし得る。
【００５０】
たとえば、図２Ａに示されるように、機械学習モデルによって処理される単一のバッチ要素のワーキングセットは、レイヤＡで行われるバッチ処理に単一のストレージユニット２０４を必要としてもよい。レイヤＢでのバッチ処理中に、所与のワーキングセットについて処理される入力活性化の増加が起こり得る。そのため、機械学習モデルは、レイヤＡにおける単一のストレージユニット２０４ではなく、８個のストレージユニット２０４をレイヤＢでのバッチ処理中に使用する必要があるであろう。さらに、図２Ａの実現例では、レイヤＣ、ＤおよびＥで処理されるワーキングセットは、それぞれ２個、４個および１個のストレージユニットを必要としてもよい。
【００５１】
いくつかの実現例では、入力／出力活性化量および対応する必要なストレージユニットの増加または減少は、ニューラルネットワークのレイヤに基づいて起こり得て、これらのレイヤの各々は、異なる数のパラメータまたは重みを有する。そのため、レイヤＡのワーキングセットは、レイヤＢと比較してより少ない活性化およびパラメータを含み得るため、レイヤＡのワーキングセットは、より多くのストレージリソースを必要とし得るレイヤＢのより大きなワーキングセットと比較して、必要とするストレージリソースが少なくて済む。
【００５２】
いくつかの実現例では、ストレージユニット２０４は、入力メモリ１０４およびパラメータメモリ１０６のメモリリソースに対応し得る。たとえば、ストレージユニット２０４は、回路１００のハードウェア回路の上記の電子部品のオンチップメモリに関連付けられたスタティックランダムアクセスメモリ（ＳＲＡＭ）のメモリリソースに対応し得る。メモリ１０４，１０６を含むオンチップメモリリソースは、固定または閾値記憶容量を有し得る。この閾値記憶容量は、回路１００のオフチップメモリに関連付けられたダイナミックランダムアクセスメモリ（ＤＲＡＭ）リソースの記憶容量よりも小さくてもよく、または実質的に小さくてもよい。上記のように、オフチップメモリは、上位外部制御装置のメモリであってもよい。
【００５３】
図２Ｂは、ニューラルネットワークの所与のレイヤのための複数のバッチ要素の処理に関連するグラフ２００Ｂの一例を示す。グラフ２００Ｂは、バッチ２１２のそれぞれのバッチ要素に関連付けられたワーキングセットの入力を格納するためのストレージユニットの第１の集合体２０８を含む。グラフ２００Ｂは、バッチ２１４のそれぞれのバッチ要素に関連付けられたワーキングセットの入力を格納するためのストレージユニットの第２の集合体２１０をさらに含む。
【００５４】
図２Ｂの実現例では、２つ以上のバッチの各々は、複数のバッチ要素を含み得て、すなわち、バッチ２１２は、少なくとも１つの個々のバッチ要素「０」を有し得て、バッチ２１４は、少なくとも１つの個々のバッチ要素「１」を有し得る。少なくとも２つのバッチ２１２，２１４を処理することにより、所与のワーキングセットの相対的サイズをバッチサイズだけ増幅させることができる。たとえば、図２Ｂに示されるように、レイヤ２０６（レイヤＡ〜レイヤＥ）の各々におけるワーキングセットサイズは、対応するバッチサイズを有する少なくとも２つのバッチ、すなわちバッチ２１２およびバッチ２１４、の入力を処理することに基づいて、増幅させることができ、たとえば二倍にすることができる。
【００５５】
上記のように、システムコントローラは、入力のバッチがニューラルネットワークの１つ以上のレイヤを介して処理される態様を定義するニューラルネットワークスケジューリングプロセスまたはポリシーを実行するためにコンパイルタイムスケジューリングまたは他の計算論理を含むように構成され得る。たとえば、回路１００は、ニューラルネットワーク入力のバッチを受信し、システムコントローラは、バッチ内の各入力について推論を実行するために入力をどのように処理すべきであるかに関してスケジューリングプロセスを決定する。入力を処理することにより、ニューラルネットワークは、入力活性化などの中間入力を生成し、これらの中間入力は、ニューラルネットワークの後続のレイヤに提供され得る。中間入力は、入力活性化として後続のニューラルネットワークレイヤに提供される第１のニューラルネットワークレイヤの出力活性化に対応し得る。
【００５６】
従来のスケジューリングポリシーでは、ニューラルネットワークは、第１のニューラルネットワークレイヤを介してバッチ内の各入力またはバッチ要素を処理して、各バッチ要素についてレイヤ出力（出力活性化）を生成する。次いで、バッチ内のバッチ要素の処理が完了するまで、各レイヤ出力は、第２のニューラルネットワークレイヤなどを介して処理される。すなわち、ニューラルネットワークにおける次のレイヤの処理が行われる前に、所与のレイヤの処理がバッチ内の全てのバッチ要素に対して実行される。この従来のニューラルネットワークスケジューリングポリシーは、メモリ容量などの制約によって制限される場合があるため、機械学習システムの利用可能なメモリおよび計算リソースを最大限使用するという観点からは非効率であるかもしれない。
【００５７】
オンチップメモリ、たとえばハードウェア回路の一例のメモリ１０４，１０６のストレージユニット２０４、の使用に関して、いくつかの実現例では、オンチップメモリリソースによってサポート可能な最大バッチサイズは、ワーキングセットのサイズに基づいて決定することができる。特に、ストレージユニット２０４によってサポートされる最大バッチサイズは、一部には、所与のニューラルネットワークレイヤによって処理される入力およびパラメータの最大のワーキングセットに基づいて決定することができる。
【００５８】
たとえば、図２Ｂを参照して、メモリ１０２および１０４に関連付けられた合計オンチップ記憶容量は、２０個のストレージユニット２０４に制限されてもよい。図２Ｂでは、レイヤＢによって処理される２つのバッチ要素のワーキングセットが１６個のストレージユニット２０４を必要とするので、第３のバッチ要素の処理には２４個のストレージユニット２０４が必要になり、そのため、２０個のストレージユニット容量を超えることになる。そのため、この例では、各バッチ要素の処理に少なくとも８個のストレージユニットが必要である場合、ニューラルネットワークは、２つのバッチ要素を含む特定の最大ワーキングセットサイズをサポートするだけでよい。
【００５９】
具体的には、図２Ｂの実現例では、ワーキングセットにおけるバッチ要素「０」の処理には、参照特徴２０８によって示されるように８個のストレージユニットが必要であり、ワーキングセットにおけるバッチ要素「１」の処理も、参照特徴２１０によって示されるように８個のストレージユニットが必要である。したがって、バッチ要素０および１の処理には、まとめて、１６個のストレージユニット２０４が必要であるので、５個以上のストレージユニット２０４を必要とする少なくとも１つの追加のバッチ要素の処理は、ニューラルネットワークのハードウェア回路の利用可能なメモリリソースのオンチップ記憶容量（ここでは、２０個のユニットに制限される）を超えるであろう。
【００６０】
図３は、１つ以上のスーパーレイヤ３０８および３１０を形成するニューラルネットワークの複数のレイヤ２０６間でのバッチ要素の処理に関連するグラフ３００の一例を示し、スーパーレイヤ３０８は、たとえばレイヤＡ、ＢおよびＣを含む。グラフ３００は、それぞれのバッチ要素３０２のバッチ要素０に関連付けられたワーキングセットの入力およびパラメータを格納するためのストレージユニットの第１の集合体３０４を含む。同様に、グラフ３００は、それぞれのバッチ要素３０２のバッチ要素１に関連付けられたワーキングセットの入力およびパラメータを格納するための、図３では灰色で示されているストレージユニットの第２の集合体３０６をさらに含む。
【００６１】
上記のように、回路１００は、回路１００の他のコンポーネントまたは回路と比較してより少ないオンチップまたはＳＲＡＭストレージリソースを有し得る電子部品またはハードウェア回路の一例を含み得る。しかし、本明細書に記載されているように、回路１００は、利用可能なオンチップメモリを使用して計算集約型の機械学習アルゴリズムを実行するように構成され得る。これらの例では、機械学習システムのニューラルネットワークは、ハードウェア回路のオンチップメモリのストレージユニット２０４によってサポート可能な最小または最大バッチサイズに対して不必要な制約を課すことのないアクセラレータアーキテクチャを含み得る。
【００６２】
記載されている技術によれば、改良されたニューラルネットワークスケジューリングプロセスを使用して、回路１００のハードウェア回路のローカルオンチップストレージリソースを使用することにより提供されるバッチローカリティを効率的に利用することができる。さらに、このオンチップストレージおよび他のローカル計算リソースを使用することにより、利用可能な帯域幅を最適化することができ、帯域幅およびエネルギの影響を受けやすい計算環境においてコンポーネントエネルギ消費を節約することができる。さらに、このオンチップストレージおよび他のローカルリソースの使用は、ニューラルネットワークのレイヤを介した入力の処理中のハードウェア回路による外部通信を最小化するのに役立つことができる。
【００６３】
たとえば、簡単に上記したように、ニューラルネットワークを実現するハードウェア回路は、ホストデバイス／外部コントローラと外部通信して、ニューラルネットワークが推論の計算に使用するニューラルネットワーク入力およびパラメータを受信してもよい。これらの外部通信は、ハードウェア回路のオンチップ計算リソースの使用を必要とする可能性がある。したがって、外部通信は、ハードウェア回路の利用可能な計算帯域幅を減少させてシステムレイテンシを増加させる可能性があり、ハードウェア回路の電子部品によるエネルギ消費の増加も生じさせるおそれがある。
【００６４】
帯域幅およびエネルギ消費に関連するこれらの制約に鑑みて、本明細書には、ニューラルネットワークモデルの一例の「バッチ」次元と「レイヤ」次元とを混合して特定のメモリワーキングセットの使用を最適化するグローバルスケジューリングポリシーまたはプロセスが記載されている。特に、記載されている技術の実現例は、機械学習モデルのバッチ次元およびレイヤ次元を活用して、ニューラルネットワークによって処理されるバッチ要素のアクティブワーキングセットのサイズを最小化する柔軟なニューラルネットワークスケジューリングポリシーを含み得る。
【００６５】
たとえば、記載されている教示に係る改良されたニューラルネットワークスケジューリングプロセスは、オンチップメモリ１０４，１０６へのパラメータを含むワーキングセットの格納がオンチップメモリリソースの閾値記憶容量を超えないようにアクティブワーキングセットをサイズ決めすることを可能にする。したがって、本明細書に記載されている方法は、ニューラルネットワークによるバッチ要素処理の効率的なスケジューリングを可能にする。たとえば、効率は、入力およびこれらの入力を処理するために使用されるパラメータのバッチサイズに対して不必要な制約を課すことのない態様でハードウェア回路のオンチップストレージにワーキングセットを格納することを可能にするスケジューリングポリシーに基づいて達成することができる。
【００６６】
さらに、記載されている教示に係る改良されたスケジューリングポリシーは、入力およびパラメータを格納するための利用可能なオンチップリソースの効率的使用を最大化することにより、オフチップリソースにアクセスするための外部通信を最小化することができる。オンチップリソースの効率的使用および外部通信の低減は、利用可能なシステム帯域幅の増加およびシステムコンポーネントによるエネルギ消費の全体的な減少につながるであろう。
【００６７】
いくつかの実現例では、改良されたスケジューリングプロセスまたはポリシーの局面は、ソフトウェア命令またはプログラムコードを使用してエンコードすることができる。これらの命令は、回路１００の少なくとも１つのプロセッサ、コントローラ１０８の少なくとも１つのプロセッサ、または回路１００もしくはコントローラ１０８もしくはそれら両方のハードウェア回路の一例の少なくとも１つのプロセッサによって実行可能であってもよい。
【００６８】
図４は、回路１００を使用してニューラルネットワークのスーパーレイヤを介してニューラルネットワーク入力を処理する方法４００のフロー図の一例である。方法またはプロセス４００は、ニューラルネットワークによるバッチ要素処理のための改良されたスケジューリングポリシーに対応する。ブロック４０２において、回路１００は、システムのハードウェア回路上のニューラルネットワークを使用して処理されるニューラルネットワーク入力のバッチを受信する。ニューラルネットワークは、有向グラフの状態で配置された複数のレイヤを有し得て、各レイヤは、それぞれのパラメータセットを有し得る。上記のように、いくつかの実現例では、回路１００のハードウェア回路は、ニューラルネットワークハードウェアシステムの一例のホストインターフェイスデバイスまたは上位コントローラから入力を受信することができる。
【００６９】
ブロック４０４において、回路１００は、ニューラルネットワークレイヤの、スーパーレイヤのシーケンスへのパーティショニングを決定する。たとえば、回路１００は、スーパーレイヤのシーケンスへのニューラルネットワークレイヤの１つ以上のパーティションを決定するように構成されたコンパイラロジックを含んでもよく、またはこのコンパイラロジックへのアクセスを有してもよい。代替的に、またはコンパイラロジックに加えて、回路１００は、スーパーレイヤのシーケンスへのニューラルネットワークレイヤの１つ以上のパーティションを決定するように構成された少なくとも１つのハードウェアブロックを含んでもよく、またはこの少なくとも１つのハードウェアブロックへのアクセスを有してもよい。いくつかの実現例では、スーパーレイヤのシーケンスにおける各スーパーレイヤは、１つ以上のレイヤを含む有向グラフのパーティションである。
【００７０】
ブロック４０６において、回路１００は、システムのハードウェア回路を使用してニューラルネットワーク入力のバッチを処理する。いくつかの実現例では、ハードウェア回路を使用してニューラルネットワーク入力のバッチを処理することは、スーパーレイヤにおけるレイヤのためのそれぞれのパラメータセットをメモリ１０６にロードすることを含み得る。いくつかの例では、スーパーレイヤにおけるレイヤのためのパラメータは、スーパーレイヤのシーケンスにおける各スーパーレイヤについてロードされる。さらに、ハードウェア回路を使用してニューラルネットワーク入力のバッチを処理することは、バッチ内の各ニューラルネットワーク入力について、ハードウェア回路のメモリ内のパラメータを使用してスーパーレイヤの各レイヤを介してニューラルネットワーク入力を処理して、ニューラルネットワーク入力のためのスーパーレイヤ出力を生成することも含み得る。
【００７１】
シーケンスにおける第１のスーパーレイヤでは、スーパーレイヤへのニューラルネットワーク入力（たとえば、スーパーレイヤ入力）の出力は、第１のスーパーレイヤ出力である。さらに、第１のスーパーレイヤの後の各スーパーレイヤへのスーパーレイヤ入力は、シーケンスにおける先行するスーパーレイヤによって生成されたスーパーレイヤ出力である。いくつかの実現例では、ニューラルネットワーク入力のバッチを処理することは、シーケンスにおける第１のスーパーレイヤの全てのレイヤを介して入力を処理し、次いで、バッチ内の全ての入力がニューラルネットワーク内の全てのスーパーレイヤを介して処理されるまでシーケンスにおける各々の後続のスーパーレイヤの全てのレイヤを介して入力を処理することを含む。
【００７２】
再び図３を参照して、改良されたニューラルネットワークスケジューリングプロセスを使用する際、複数のレイヤ３０８および３１０についてバッチレスの態様で１つのバッチ要素を実行することができる。記載されている技術によれば、複数のレイヤ３０８は第１のスーパーレイヤを形成することができ、複数のレイヤ３１０は第１のスーパーレイヤとは異なる第２のスーパーレイヤを形成することができる。スーパーレイヤを形成するようにパーティショニングされる複数のレイヤのグループ分けについては、図４を参照して以下でより詳細に説明する。
【００７３】
図３に示されるように、いくつかの実現例では、機械学習モデルの一例のレイヤＢは、より小さなワーキングセットが処理されるレイヤＣにおける必要なストレージユニットの量と比較して、大きなワーキングセットを処理するために大量のストレージユニット２０４を必要とし得る。バッチ要素のワーキングセットが十分に小さい場合、改良されたスケジューリングプロセスは、スーパーレイヤ／レイヤ３０８などの複数のレイヤ（たとえば、スーパーレイヤ）の特定のグループによって処理される次のバッチ要素への機械学習モデル切り替えを含み得る。
【００７４】
たとえば、回路１００のハードウェア回路上で実現されるニューラルネットワークは、ニューラルネットワークの「バッチ」次元および「レイヤ」次元にわたってグローバルなスケジューリングを実行するように構成され得る。特に、ニューラルネットワークレイヤへの入力のバッチ処理は、第１のプロセス反復の際に要素０の第１のバッチに対してレイヤ３０８（Ａ，Ｂ，Ｃ）のグループを実行し、次いで、第２のプロセス反復の際に要素１の第２のバッチに対して同じレイヤ（Ａ，Ｂ，Ｃ）３０８のグループを実行することによって実行することができる。
【００７５】
図３に示されるように、改良されたスケジューリングポリシーに従って異なるバッチ要素間で交互に行うことにより、上記の従来のスケジューリングポリシーの最大ワーキングセットサイズに対してワーキングセットの最大サイズが減少する。たとえば、少なくともバッチ要素１に対するレイヤＢでのバッチ処理に関して、異なるバッチ要素間で交互に行うことにより、上記の従来のスケジューリングポリシーを使用したときに必要とされる１６個のユニットという最大ワーキングセットサイズの代わりに、レイヤＢの最大ワーキングセットサイズを１０個のユニットに減少させることができる。たとえば、バッチ要素１に対するレイヤＢでのバッチ処理に８個のユニットを使用してもよく、バッチ要素０に対するレイヤＡ、Ｂ、Ｃでの前のバッチ処理の出力、ならびに／または、レイヤＤおよびＥでの処理のためのバッチ要素０に関連付けられたワーキングセットの入力およびパラメータを格納するために２個のユニットを使用してもよい。
【００７６】
図５は、スーパーレイヤを形成するようにパーティショニングされる複数のレイヤを使用して少なくとも単一のバッチ要素を処理するためにスーパーレイヤのシーケンスにパーティショニングされるニューラルネットワークレイヤを示すグラフ５００の一例を示す。グラフ５００は、それぞれのバッチ要素５０２のバッチ要素０のためのワーキングセットの入力を格納するためのストレージユニットの第１の集合体５０４を含む。
【００７７】
同様に、グラフ５００は、ａ）それぞれのバッチ要素５０２のバッチ要素１のためのワーキングセットの入力を格納するためのストレージユニットの第２の集合体５０６と、ｂ）それぞれのバッチ要素５０２のバッチ要素２のためのワーキングセットの入力を格納するためのストレージユニットの第３の集合体５０８と、ｃ）それぞれのバッチ要素５０２のバッチ要素３のためのワーキングセットの入力を格納するためのストレージユニットの第４の集合体５１０とをさらに含む。
【００７８】
グラフ５００は、グラフのＸ軸に沿ってスーパーレイヤのシーケンスをさらに含む。たとえば、グラフ５００は、ｉ）レイヤＡ、Ｂ、Ｃの各々を介してバッチ要素０、１、２および３を処理するための第１のスーパーレイヤ５１２と、ｉｉ）レイヤＤ、Ｅの各々を介してバッチ要素０、１、２および３を処理するための第２のスーパーレイヤ５１４とを含む。記載されている教示によれば、改良されたニューラルネットワークスケジューリングポリシーに基づいて定義されるスーパーレイヤのシーケンスは、ニューラルネットワークを実行するハードウェア回路のオンチップメモリ容量または閾値容量を超えることなく、比較的大きなワーキングセットバッチサイズをサポートすることができる。
【００７９】
たとえば、図５に示されるように、例示的な「Ｂ３」レイヤおよびバッチ局面中に入力が処理される場合、ワーキングセットの最大サイズは、４個のバッチ要素、たとえばそれぞれのストレージユニット２０４の特徴的な網掛けパターンによって示されるバッチ要素０、１、２および３、のために１４個のストレージユニットしか必要としない。このように（たとえば、１６個のストレージユニットを必要とする）従来のスケジューリングプロセスと比較して必要なストレージユニットが減少することにより、ハードウェア回路のオンチップメモリを介して受信して格納される入力およびパラメータのローカリティの利用を向上させることができる。このようにオンチップリソースの活用を向上させることにより、帯域幅およびエネルギの節約を増加させることができ、これは、一部には、オフチップまたはＤＲＡＭメモリリソースの使用量の減少に基づいて実現される。
【００８０】
さらに、簡単に上記したように、改良されたスケジューリングポリシーを使用して、回路１００のハードウェア回路のオンチップメモリ容量を超えることなく入力の１つ以上のバッチまたは入力を処理することができる。いくつかの実現例では、シーケンスにおけるスーパーレイヤのレイヤを介してニューラルネットワーク入力の１つ以上のバッチを処理することは、シーケンスにおける第１のスーパーレイヤ（５１２）が、少なくともニューラルネットワークの後続のレイヤによって受信されるように第１のスーパーレイヤ出力をこの後続のレイヤへの入力として生成することを含み得る。
【００８１】
いくつかの例では、スーパーレイヤのシーケンスにおける第２のスーパーレイヤへのニューラルネットワーク入力は、シーケンスにおける第１のスーパーレイヤによって生成される第１のスーパーレイヤ出力に対応し得る。さらに、シーケンスにおけるスーパーレイヤのレイヤを介して入力のバッチを処理することは、ハードウェア回路のメモリ内のパラメータを使用して第２のスーパーレイヤにおける各レイヤを介してニューラルネットワーク入力を処理して、第１のスーパーレイヤ出力に対応するニューラルネットワーク入力のための第２のスーパーレイヤ出力を生成することを含み得る。
【００８２】
いくつかの実現例では、スーパーレイヤのシーケンスにおけるスーパーレイヤのレイヤを介してニューラルネットワーク入力のバッチを処理することは、スーパーレイヤの各レイヤを介してバッチ要素についての入力を１つずつ処理することを含み得る。たとえば、入力のバッチを処理することは、スーパーレイヤにおける各レイヤを介して２つ以上のニューラルネットワーク入力をシーケンシャルに処理することを含み得る。このようなシーケンシャルな処理は、スーパーレイヤの各レイヤを介して第１のニューラルネットワーク入力を処理し、次いでスーパーレイヤの各レイヤを介して第２のニューラルネットワーク入力を処理することを含み得る。
【００８３】
いくつかの実現例では、シーケンスにおける各スーパーレイヤについて、スーパーレイヤのレイヤを介して入力を処理することは、バッチ内の第２のニューラルネットワーク入力に対応するスーパーレイヤ入力がスーパーレイヤにおける各レイヤを介して後に処理される前にバッチ内の第１のニューラルネットワーク入力のためのスーパーレイヤ入力がスーパーレイヤにおける各レイヤを介して処理されるように、スーパーレイヤにおける各レイヤを介してニューラルネットワーク入力のバッチに対応するスーパーレイヤ入力をシーケンシャルに処理することを含み得る。
【００８４】
いくつかの実現例では、スーパーレイヤのシーケンスにおける第１のスーパーレイヤは、単一のニューラルネットワークレイヤを含み得る。この実現例では、スーパーレイヤのシーケンスを介して入力を処理することは、この単一のニューラルネットワークレイヤを含む第１のスーパーレイヤを介して第１の入力を処理することを含み得る。この第１の入力が第１のスーパーレイヤの単一のレイヤを介して処理された後、第１の入力がシーケンスにおける第１のスーパーレイヤに続く後続のスーパーレイヤの全てのレイヤを介して処理される前に、第２の入力を第１のスーパーレイヤによってすぐに処理することができる。シーケンスにおける後続のスーパーレイヤによって処理される第１の入力は、単一のニューラルネットワークレイヤを含む第１のスーパーレイヤのスーパーレイヤ出力であってもよい。
【００８５】
スーパーレイヤおよびスーパーレイヤの１つ以上のシーケンスは、改良されたニューラルネットワークスケジューリングポリシーに従ってレイヤのグループをパーティショニングすることに基づいて形成することができる。いくつかの実現例では、回路１００は、改良されたスケジューリングポリシーのためのプログラムされた命令を含み、これらの命令は、ニューラルネットワークレイヤの、スーパーレイヤのシーケンスへのパーティショニングを決定することを含み得る。各スーパーレイヤは、１つ以上のレイヤを含む有向グラフのパーティションであり得る。
【００８６】
改良されたスケジューリングプロセスの局面により、所与のスーパーレイヤのための全ての入力およびパラメータが回路１００のハードウェア回路のオンチップストレージからアクセスできるようにニューラルネットワークレイヤを複数のスーパーレイヤに形成することができる。上記のように、入力およびパラメータへのオンチップアクセスは、ハードウェア回路による外部通信を最小化することができる。たとえば、ハードウェア回路は、追加量の入力およびパラメータをオフチップインターフェイスから取得するための反復性フェッチ動作に関連付けられた計算プロセスを回避することができるので、外部通信を最小化することができる。
【００８７】
いくつかの実現例では、オフチップインターフェイスは、入力およびパラメータを回路１００に提供する外部制御装置にハードウェア回路を結合することができる。特に、スーパーレイヤのシーケンスにおける各スーパーレイヤは、このスーパーレイヤに対する１つ以上のニューラルネットワーク入力を処理するために特定量のパラメータを受信することができる。いくつかの例では、スーパーレイヤのレイヤを介して１つ以上のニューラルネットワーク入力を処理することは、スーパーレイヤに対する特定量の入力を処理するために後続のある量のパラメータを受信することなく入力を処理することを含み得る。
【００８８】
いくつかの実現例では、回路１００は、スーパーレイヤのシーケンスの１つ以上のスーパーレイヤパーティションまたは境界を決定するようにプログラムコードを実行する。たとえば、回路１００は、所与のレイヤについて活性化ワーキングセットと集約パラメータ容量との合計を求めるまたは計算することができる。次いで、回路１００は、求められた合計を使用して、一部にはハードウェア回路のメモリリソースの予め規定されたまたは閾値オンチップ記憶容量（たとえば、メモリ１０４および１０６）に基づいて、ニューラルネットワークレイヤの、スーパーレイヤのシーケンスへのパーティショニングを決定することができる。したがって、ニューラルネットワークレイヤは、回路１００のハードウェア回路がニューラルネットワーク入力の１つ以上のバッチを処理する際にオンチップメモリの閾値記憶容量を超えないようにスーパーレイヤのシーケンスにパーティショニングされることができる。
【００８９】
いくつかの実現例では、ニューラルネットワークレイヤの、スーパーレイヤのシーケンスへのパーティショニングを決定することは、ｉ）回路１００が、ニューラルネットワークによって処理するための入力を含む少なくとも１つのワーキングセットのための特定のサイズパラメータを決定することと、ｉｉ）回路１００が、ハードウェア回路のメモリの特定の集約入力活性化およびパラメータ容量を決定することと、ｉｉｉ）回路１００が、少なくとも１つのワーキングセットのための特定のサイズパラメータまたはハードウェア回路のメモリの特定の集約入力活性化およびパラメータ容量に少なくとも基づいて、スーパーレイヤのシーケンスへのレイヤのパーティショニングを決定することとを含む。
【００９０】
たとえば、オンチップメモリの記憶容量または閾値容量は、５００メガバイト（ＭＢ）であってもよい。回路１００は、式１［合計使用量＝（ワーキングセット×Ｎ）＋パラメータ］に基づいて合計オンチップメモリ使用量を求めることができ、式１の変数Ｎはバッチサイズである。次いで、回路１００は、ニューラルネットワークの各レイヤのためのそれぞれのパラメータセットを格納するのに必要なメモリの量を決定することができる。いくつかの実現例では、図５を参照して、回路１００は、ｉ）レイヤＡのためのパラメータセットが２５ＭＢのメモリを必要とし、ｉｉ）レイヤＢのためのパラメータセットが１２５ＭＢのメモリを必要とし、ｉｉｉ）レイヤＣのためのパラメータセットが５０ＭＢのメモリを必要とすると判断することができる。
【００９１】
したがって、この例では、回路１００は、レイヤＡ、ＢおよびＣのためのそれぞれのパラメータセットの総メモリ使用量が２００ＭＢであり、利用可能なオンチップメモリのうち３００ＭＢが残っており入力を格納するのに使用される（たとえば、５００ＭＢのオンチップメモリ容量−２００ＭＢの総メモリ使用量）と判断する。それぞれのレイヤＡ、Ｂ、Ｃについて、回路１００は、それぞれのレイヤによって処理されるワーキングセットの入力のための特定のサイズパラメータおよびワーキングセットの対応するバッチサイズを決定することができる。ワーキングセットに対する入力のサイズパラメータおよび対応するバッチサイズを使用して、回路１００は、メモリの集約活性化およびパラメータ容量を決定することができる。回路１００は、メモリの集約活性化およびパラメータ容量を使用して、スーパーレイヤのシーケンスへのレイヤのパーティショニングを決定することができる。
【００９２】
いくつかの実現例では、回路１００は、式１、（たとえば、メモリ単位の）入力のサイズパラメータ、バッチサイズ、およびパラメータに使用される集約メモリを使用して、レイヤの１つ以上のグループの合計オンチップメモリ使用量を決定する。回路１００は、レイヤの各グループの合計メモリ使用量を５００ＭＢのオンチップ記憶容量と比較することができる。次いで、回路１００は、比較結果に基づいて、スーパーレイヤのシーケンスを形成するレイヤのパーティショニングまたはグループを決定することができる。回路１００は、ハードウェア回路がワーキングセットのためのニューラルネットワーク入力のバッチを処理する際にオンチップメモリの閾値記憶容量（５００ＭＢ）を超えないようにスーパーレイヤのシーケンスへのレイヤのパーティショニングを決定する。
【００９３】
図６Ａは、ニューラルネットワークレイヤのための活性化ワーキングセットサイズを示すグラフ６００Ａの一例を示し、図６Ｂは、ニューラルネットワークのスーパーレイヤのための活性化ワーキングセットサイズを示すグラフ６００Ｂの一例を示す。上記のように、ならびにグラフ６００Ａおよび６００Ｂによって示されるように、スーパーレイヤとして配置されていないニューラルネットワークレイヤのワーキングセットは、スーパーレイヤとして配置されたニューラルネットワークレイヤのワーキングセットのサイズと比較して、実質的により大きなワーキングセットサイズを含み得る。
【００９４】
たとえば、上記の従来のスケジューリングポリシーを使用したバッチ処理のためのワーキングセットでは、ワーキングセットサイズが何百万もの入力を含むことになる。このような大量の入力は、入力およびこれらの入力を処理するために使用されるパラメータを格納するのにオンチップストレージユニット２０４が使用される場合にハードウェア回路のオンチップメモリリソースの記憶または閾値容量を超える可能性がある。これに対して、本明細書に記載されている改良されたスケジューリングポリシーに基づくスーパーレイヤパーティションを使用したバッチ処理のためのワーキングセットでは、ワーキングセットサイズが含む入力を実質的に少なくすることができる。このような実質的に少ない量の入力を、オンチップメモリ容量を超えないようにオンチップストレージユニット２０４を使用して効率的に格納することができる。
【００９５】
主題の実施形態および本明細書に記載されている機能動作は、本明細書に開示されている構造およびそれらの構造的等価物を含むデジタル電子回路、有形に具体化されたコンピュータソフトウェアもしくはファームウェア、コンピュータハードウェア、またはそれらのうちの１つ以上の組み合わせで実現することができる。本明細書に記載されている主題の実施形態は、１つ以上のコンピュータプログラムとして、すなわちデータ処理装置によって実行されるようにまたはデータ処理装置の動作を制御するように有形の非一時的なプログラムキャリアにエンコードされるコンピュータプログラム命令の１つ以上のモジュールとして実現することができる。
【００９６】
代替的にまたは加えて、プログラム命令は、人工的に発生させた伝搬信号、たとえば機械によって生成される電気信号、光信号または電磁信号にエンコードすることができ、これらの信号は、情報をエンコードするように生成され、好適な受信機装置に送信され、データ処理装置によって実行される。コンピュータ記憶媒体は、機械読取可能記憶装置、機械読取可能記憶基板、ランダムもしくはシリアルアクセスメモリデバイス、またはそれらのうちの１つ以上の組み合わせであってもよい。
【００９７】
本明細書に記載されているプロセスおよび論理フローは、入力データ上で動作して出力を生成することによって機能を実行するように１つ以上のコンピュータプログラムを実行する１つ以上のプログラム可能なコンピュータによって実行することができる。これらのプロセスおよび論理フローは、特殊目的論理回路、たとえばＦＰＧＡ（フィールドプログラマブルゲートアレイ）、ＡＳＩＣ（特定用途向け集積回路）、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）またはその他の処理ユニットによっても実行することができ、装置は、特殊目的論理回路としても実現することができる。
【００９８】
コンピュータプログラムの実行に好適なコンピュータは、一例として、汎用マイクロプロセッサ、または特殊目的マイクロプロセッサ、またはそれら両方、またはその他の種類の中央処理装置を含み、これらに基づいていてもよい。一般に、中央処理装置は、リードオンリメモリまたはランダムアクセスメモリまたはそれら両方から命令およびデータを受信する。コンピュータの必須の要素は、命令を実施または実行するための中央処理装置、ならびに、命令およびデータを格納するための１つ以上のメモリデバイスである。一般に、コンピュータは、データを格納するための１つ以上の大容量記憶装置、たとえば磁気ディスク、光磁気ディスクまたは光ディスク、も含み、または１つ以上の大容量記憶装置からデータを受信したりデータを送信したりデータを送受信したりするように動作可能に結合される。しかし、コンピュータは、このような装置を有していなくてもよい。
【００９９】
コンピュータプログラム命令およびデータの格納に好適なコンピュータ読取可能媒体は、全ての形態の不揮発性メモリ、媒体およびメモリデバイスを含み、これらのデバイスは、一例として、半導体メモリデバイス（たとえば、ＥＰＲＯＭ、ＥＥＰＲＯＭおよびフラッシュメモリデバイス）、磁気ディスク（たとえば、内部ハードディスクまたはリムーバブルディスク）を含む。プロセッサおよびメモリは、特殊目的論理回路によって補完されてもよく、または特殊目的論理回路に組み込まれてもよい。
【０１００】
本明細書は、多くの具体的な実現例の詳細を含んでいるが、これらは、いずれの発明または請求の範囲を限定するものとして解釈されるべきではなく、特定の発明の特定の実施形態に特有の特徴を説明するものとして解釈されるべきである。別々の実施形態の文脈で本明細書に記載されている特定の特徴は、単一の実施形態において組み合わせて実現することも可能である。逆に、単一の実施形態の文脈で記載されているさまざまな特徴は、複数の実施形態において別々にまたは任意の好適な部分的な組み合わせで実現することも可能である。さらに、特徴は、特定の組み合わせで動作するものとして上記され、最初にそのように記載されているかもしれないが、記載されている組み合わせの中の１つ以上の特徴は、場合によってはこの組み合わせから除外されてもよく、記載されている組み合わせは、部分的な組み合わせまたは部分的な組み合わせの変形例を対象としてもよい。
【０１０１】
同様に、動作は、特定の順序で図面に示されているが、これは、望ましい結果を達成するために、示されている特定の順序またはシーケンシャルな順序でこのような動作を実行しなければならないものとして理解されるべきではなく、示されている動作を全て実行しなければならないものとして理解されるべきでもない。特定の状況では、マルチタスクおよび並列処理が有利である場合もある。さらに、上記の実施形態におけるさまざまなシステムモジュールおよびコンポーネントの分離は、このような分離が全ての実施形態で必要であるものとして理解されるべきではなく、記載されているプログラムコンポーネントおよびシステムは、一般に、単一のソフトウェア製品に一体化されるかまたは複数のソフトウェア製品にパッケージングされてもよいということが理解されるべきである。
【０１０２】
主題の特定の実施形態について説明してきた。他の実施形態は、以下の特許請求の範囲の範囲内である。たとえば、特許請求の範囲に記載されている動作は、異なる順序で実行されても、依然として望ましい結果を達成することができる。一例として、添付の図面に示されているプロセスは、望ましい結果を達成するために、示されている特定の順序またはシーケンシャルな順序を必ずしも必要としない。特定の実現例では、マルチタスクおよび並列処理が有利である場合もある。
【図１】
2020521195.tif 000003
【図２Ａ】
2020521195.tif 000004
【図２Ｂ】
2020521195.tif 000005
【図３】
2020521195.tif 000006
【図４】
2020521195.tif 000007
【図５】
2020521195.tif 000008
【図６Ａ】
2020521195.tif 000009
【図６Ｂ】
2020521195.tif 000010
【国際調査報告】
2020521195.tif 000011
2020521195.tif 000012
2020521195.tif 000013