(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024016196
(43)【公開日】2024-02-06
(54)【発明の名称】ニューラルネットワークプロセッサで使用される重みのプリフェッチ
(51)【国際特許分類】
G06F 15/80 20060101AFI20240130BHJP
G06F 17/16 20060101ALI20240130BHJP
G06N 3/063 20230101ALI20240130BHJP
【FI】
G06F15/80
G06F17/16 M
G06N3/063
【審査請求】有
【請求項の数】21
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2023190654
(22)【出願日】2023-11-08
(62)【分割の表示】P 2022076581の分割
【原出願日】2016-04-29
(31)【優先権主張番号】62/164,981
(32)【優先日】2015-05-21
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】14/844,670
(32)【優先日】2015-09-03
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ロス,ジョナサン
(57)【要約】 (修正有)
【課題】ハードウェアにおいてニューラルネットワーク推測値を計算する回路及び方法を提供する。
【解決手段】行列計算ユニットを含むアーキテクチャ300は、複数のセルを備える二次元シストリックアレイ306及び重みフェッチャインターフェイスを含む。重みフェッチャインターフェイスは、複数のニューラルネットワーク層の各々について、ニューラルネットワーク層のための二次元シストリックアレイの第1の次元に沿ったセルに複数の重み入力を送る。各々が二次元シストリックアレイの第1の次元に沿った個別のセルに結合される複数の重みシーケンサは、複数のニューラルネットワーク層の各々について、複数のクロックサイクルでニューラルネットワーク層のための二次元シストリックアレイの第2の次元に沿ったセルに複数の重み入力をシフトする。二次元シストリックアレイの各々のセルは、乗算回路を使用して起動入力と夫々の重み入力との積を計算する。
【選択図】
図3
【特許請求の範囲】
【請求項1】
複数の層を備えるニューラルネットワークについてニューラルネットワーク計算を実行するための回路であって、
複数のセルを備えるシストリックアレイと、
重みフェッチャユニットとを備え、
前記重みフェッチャユニットは、前記複数のニューラルネットワーク層の各々について、前記ニューラルネットワーク層のための前記シストリックアレイの第1の次元に沿ったセルに複数の重み入力を送るように構成され、前記回路はさらに、
複数の重みシーケンサユニットを備え、各々の重みシーケンサユニットは、前記シストリックアレイの前記第1の次元に沿った個別のセルに結合され、
前記複数の重みシーケンサユニットは、前記複数のニューラルネットワーク層の各々について、複数のクロックサイクルにわたって前記ニューラルネットワーク層のための前記シストリックアレイの第2の次元に沿ったセルに前記複数の重み入力をシフトするように構成され、各々の重み入力は、前記第2の次元に沿ったそれぞれのセル内に格納され、各々のセルは、乗算回路を使用して起動入力とそれぞれの重み入力との積を計算するように構成される、回路。
【請求項2】
前記複数のニューラルネットワーク層の各々について、前記ニューラルネットワーク層のための前記シストリックアレイの前記第2の次元に沿ったセルに複数の起動入力を送るように構成された値シーケンサユニットをさらに備える、請求項1に記載の回路。
【請求項3】
前記シストリックアレイの前記第1の次元は、前記シストリックアレイの行に対応し、前記シストリックアレイの前記第2の次元は、前記シストリックアレイの列に対応する、請求項1または2に記載の回路。
【請求項4】
各々のセルは、重み制御信号を隣接するセルに渡すように構成され、前記重み制御信号は、前記隣接するセル内の回路に、前記隣接するセルについての重み入力をシフトまたはロードさせる、請求項1~3のいずれか1項に記載の回路。
【請求項5】
各々のセルは、
前記セルにシフトされた前記重み入力を格納するように構成された重みパスレジスタと、
前記重みパスレジスタに結合された重みレジスタと、
前記重みレジスタに前記重み入力を格納するか否かを判断するように構成された重み制御レジスタと、
起動入力を格納するように構成され、前記起動入力を前記第1の次元に沿った第1の隣接するセル内の別の起動レジスタに送るように構成された起動レジスタと、
前記重みレジスタおよび前記起動レジスタに結合された前記乗算回路とを備え、前記乗算回路は、前記重み入力と前記起動入力との積を出力するように構成され、前記各々のセルはさらに、
前記乗算回路に結合され、前記積および第1の部分和を前記第2の次元に沿った第2の隣接するセルから受け取るように構成された総和回路を備え、前記総和回路は、前記積と前記第1の部分和との第2の部分和を出力するように構成され、前記各々のセルはさらに、
前記総和回路に結合され、前記第2の部分和を格納するように構成された部分和レジスタを備え、前記部分和レジスタは、前記第2の部分和を前記第2の次元に沿った第3の隣接するセル内の別の総和回路に送るように構成される、請求項1~3のいずれか1項に記載の回路。
【請求項6】
各々の重みシーケンサユニットは、
前記重みシーケンサユニットに結合された前記対応するセル内の前記重み制御レジスタに対応する一時停止カウンタと、
デクリメント回路とを備え、前記デクリメント回路は、前記重みシーケンサユニットへの入力をデクリメントして、デクリメントされた出力を生成し、前記デクリメントされた出力を前記一時停止カウンタに送るように構成される、請求項5に記載の回路。
【請求項7】
各々の一時停止カウンタにおける値は同一であり、各々の重みシーケンサユニットは、対応する重み入力を前記シストリックアレイの前記対応する個別のセルにロードするように構成され、前記ロードは、前記重み入力を前記乗算回路に送ることを備える、請求項6に記載の回路。
【請求項8】
各々の一時停止カウンタにおける値は異なっており、各々の重みシーケンサユニットは、対応する重み入力を前記第2の次元に沿って隣接する重みシーケンサユニットにシフトするように構成される、請求項6に記載の回路。
【請求項9】
各々の一時停止カウンタにおける値は、予め定められた値に到達して、前記複数の重みシーケンサユニットに前記第2の次元に沿った前記複数の重み入力のシフトを一時停止させる、請求項6に記載の回路。
【請求項10】
前記シストリックアレイは、前記複数のニューラルネットワーク層の各々について、前記ニューラルネットワーク層のための累積出力を各々の積から生成するように構成される、請求項1~9のいずれか1項に記載の回路。
【請求項11】
複数の層を備えるニューラルネットワークについてニューラルネットワーク計算を実行するための方法であって、前記方法は、前記複数のニューラルネットワーク層の各々について、
重みフェッチャユニットにおいて、複数のセルを備えるシストリックアレイの第1の次元に沿ったセルに複数の重み入力を送るステップと、
複数の重みシーケンサユニットの各々において、複数のクロックサイクルにわたって前記シストリックアレイの第2の次元に沿ったセルに前記複数の重み入力をシフトするステップとを備え、各々の重みシーケンサユニットは、前記シストリックアレイの前記第1の次元に沿った個別のセルに結合され、各々の重み入力は、前記第2の次元に沿ったそれぞれのセル内に格納され、各々のセルは、乗算回路を使用して起動入力とそれぞれの重み入力との積を計算するように構成される、方法。
【請求項12】
値シーケンサユニットにおいて、前記ニューラルネットワーク層のための前記シストリックアレイの前記第2の次元に沿ったセルに複数の起動入力を送るステップをさらに備える、請求項11に記載の方法。
【請求項13】
前記シストリックアレイの前記第1の次元は、前記シストリックアレイの行に対応し、前記シストリックアレイの前記第2の次元は、前記シストリックアレイの列に対応する、請求項11または12に記載の方法。
【請求項14】
各々のセルについて、隣接するセルに対する重み制御信号を当該セルに渡すステップをさらに備え、前記重み制御信号は、前記隣接するセル内の回路に、前記隣接するセルについての重み入力をシフトまたはロードさせる、先行するいずれかの請求項に記載の方法。
【請求項15】
各々のセルは、
前記セルにシフトされた前記重み入力を格納するように構成された重みパスレジスタと
、
前記重みパスレジスタに結合された重みレジスタと、
前記重みレジスタに前記重み入力を格納するか否かを判断するように構成された重み制御レジスタと、
起動入力を格納するように構成され、前記起動入力を前記第1の次元に沿った第1の隣接するセル内の別の起動レジスタに送るように構成された起動レジスタと、
前記重みレジスタおよび前記起動レジスタに結合された前記乗算回路とを備え、前記乗算回路は、前記重み入力と前記起動入力との積を出力するように構成され、前記各々のセルはさらに、
前記乗算回路に結合され、前記積および第1の部分和を前記第2の次元に沿った第2の隣接するセルから受け取るように構成された総和回路を備え、前記総和回路は、前記積と前記第1の部分和との第2の部分和を出力するように構成され、前記各々のセルはさらに、
前記総和回路に結合され、前記第2の部分和を格納するように構成された部分和レジスタを備え、前記部分和レジスタは、前記第2の部分和を前記第2の次元に沿った第3の隣接するセル内の別の総和回路に送るように構成される、請求項11~13のいずれか1項に記載の方法。
【請求項16】
各々の重みシーケンサユニット内のデクリメント回路において、前記重みシーケンサユニットへのそれぞれの入力をデクリメントして、それぞれのデクリメントされた出力を生成するステップと、
各々の重みシーケンサユニットについて、前記それぞれのデクリメントされた出力をそれぞれの一時停止カウンタに送るステップとをさらに備え、前記それぞれの一時停止カウンタは、前記重みシーケンサユニットに結合された対応するセル内の前記重み制御レジスタに対応する、請求項15に記載の方法。
【請求項17】
各々の一時停止カウンタにおける値は同一であり、各々の重みシーケンサユニットにおいて、対応する重み入力を前記シストリックアレイの前記対応する個別のセルにロードするステップをさらに備え、前記ロードするステップは、前記重み入力を前記乗算回路に送るステップを備える、請求項16に記載の方法。
【請求項18】
各々の一時停止カウンタにおける値は異なっており、各々の重みシーケンサユニットにおいて、対応する重み入力を前記第2の次元に沿って隣接する重みシーケンサユニットにシフトするステップをさらに備える、請求項16に記載の方法。
【請求項19】
各々の一時停止カウンタにおける値は、予め定められた値に到達して、前記複数の重みシーケンサユニットに前記第2の次元に沿った前記複数の重み入力のシフトを一時停止させる、請求項16に記載の方法。
【請求項20】
前記シストリックアレイにおいて、前記複数のニューラルネットワーク層の各々について、前記ニューラルネットワーク層のためのそれぞれの累積出力を各々の積から生成するステップをさらに備える、請求項11~19のいずれか1項に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
背景
本明細書は、ハードウェアにおいてニューラルネットワーク推測値を計算することに関する。
【背景技術】
【0002】
ニューラルネットワークは、モデルの1つ以上の層を利用して、受け取った入力について出力、たとえば分類を生成する機械学習モデルである。いくつかのニューラルネットワークは、出力層に加えて1つ以上の隠れ層を含む。各隠れ層の出力は、ネットワーク内の次の層、すなわちネットワークの次の隠れ層または出力層、への入力として使用される。ネットワークの各層は、パラメータのそれぞれのセットの現在の値に従って、受け取った入力から出力を生成する。
【0003】
いくつかのニューラルネットワークは、1つ以上の畳み込みニューラルネットワーク層を含む。各々の畳み込みニューラルネットワーク層は、カーネルの関連付けられたセットを有する。各カーネルは、ユーザによって作成されたニューラルネットワークモデルによって構築される値を含む。いくつかの実現例では、カーネルは、特定の画像輪郭、形状または色を識別する。カーネルは、重み入力の行列構造と表わすことができる。各々の畳み込み層は、起動入力のセットも処理することができる。起動入力のセットは、行列構造と表わすこともできる。
【0004】
いくつかの既存のシステムは、ソフトウェアにおいて所与の畳み込み層について計算を実行する。たとえば、ソフトウェアは、当該層についての各カーネルを起動入力のセットに適用することができる。すなわち、各カーネルについて、ソフトウェアは、多次元的に表わされ得るカーネルを、多次元的に表わされ得る起動入力の第1の部分の上に重ね合わせることができる。次いで、ソフトウェアは、重複した要素からドット積を計算することができる。ドット積は、単一の起動入力、たとえば重複した多次元空間内に左上位置を有する起動入力要素、に対応し得る。次いで、たとえば、スライディングウィンドウを使用して、ソフトウェアは、カーネルをシフトさせて、起動入力の第2の部分を重ね合わせて、別の起動入力に対応する別のドット積を算出することができる。ソフトウェアは、各起動入力が対応するドット積を有するまでこのプロセスを繰返し実行することができる。いくつかの実現例では、ドット積は、起動値を生成する起動関数への入力である、起動値は、ニューラルネットワークの後続の層に送られる前に、結合、たとえばプールされることができる。
【0005】
畳み込み演算を計算する1つの方法は、大きな次元空間において多数の行列乗算を必要とする。プロセッサは、ブルートフォース法によって行列乗算を計算することができる。たとえば、計算集約的であり時間集約的であるが、プロセッサは、畳み込み演算のために個々の合計および積を繰返し算出することができる。プロセッサが算出を並列化する程度は、そのアーキテクチャに起因して制限される。
【発明の概要】
【発明が解決しようとする課題】
【0006】
概要
全体として、本明細書では、ニューラルネットワーク推測値を計算する特定目的ハードウェア回路について説明する。
【課題を解決するための手段】
【0007】
全体として、本明細書に記載されている主題の1つの革新的な局面は、複数の層を備えるニューラルネットワークについてニューラルネットワーク計算を実行するための回路で実施することができ、上記回路は、複数のセルを備えるシストリックアレイと、重みフェッチャユニットとを備え、上記重みフェッチャユニットは、上記複数のニューラルネットワーク層の各々について、上記ニューラルネットワーク層のための上記シストリックアレイの第1の次元に沿ったセルに複数の重み入力を送るように構成され、上記回路はさらに、複数の重みシーケンサユニットを備え、各々の重みシーケンサユニットは、上記シストリックアレイの上記第1の次元に沿った個別のセルに結合され、上記複数の重みシーケンサユニットは、上記複数のニューラルネットワーク層の各々について、複数のクロックサイクルにわたって上記ニューラルネットワーク層のための上記シストリックアレイの第2の次元に沿ったセルに上記複数の重み入力をシフトするように構成され、各々の重み入力は、上記第2の次元に沿ったそれぞれのセル内に格納され、各々のセルは、乗算回路を使用して起動入力とそれぞれの重み入力との積を計算するように構成される。
【0008】
実現例は、以下のもののうちの1つ以上を含み得る。値シーケンサユニットは、上記複数のニューラルネットワーク層の各々について、上記ニューラルネットワーク層のための上記シストリックアレイの上記第2の次元に沿ったセルに複数の起動入力を送るように構成される。上記シストリックアレイの上記第1の次元は、上記シストリックアレイの行に対応し、上記シストリックアレイの上記第2の次元は、上記シストリックアレイの列に対応する。各々のセルは、重み制御信号を隣接するセルに渡すように構成され、上記重み制御信号は、上記隣接するセル内の回路に、上記隣接するセルについての重み入力をシフトまたはロードさせる。重みパスレジスタは、上記セルにシフトされた上記重み入力を格納するように構成され、重みレジスタは、上記重みパスレジスタに結合され、重み制御レジスタは、上記重みレジスタに上記重み入力を格納するか否かを判断するように構成され、起動レジスタは、起動入力を格納するように構成され、上記起動入力を上記第1の次元に沿った第1の隣接するセル内の別の起動レジスタに送るように構成され、上記乗算回路は、上記重みレジスタおよび上記起動レジスタに結合され、上記乗算回路は、上記重み入力と上記起動入力との積を出力するように構成され、総和回路は、上記乗算回路に結合され、上記積および第1の部分和を上記第2の次元に沿った第2の隣接するセルから受け取るように構成され、上記総和回路は、上記積と上記第1の部分和との第2の部分和を出力するように構成され、部分和レジスタは、上記総和回路に結合され、上記第2の部分和を格納するように構成され、上記部分和レジスタは、上記第2の部分和を上記第2の次元に沿った第3の隣接するセル内の別の総和回路に送るように構成される。各々の重みシーケンサユニットは、上記重みシーケンサユニットに結合された上記対応するセル内の上記重み制御レジスタに対応する一時停止カウンタと、デクリメント回路とを備え、上記デクリメント回路は、上記重みシーケンサユニットへの入力をデクリメントして、デクリメントされた出力を生成し、上記デクリメントされた出力を上記一時停止カウンタに送るように構成される。各々の一時停止カウンタにおける値は同一であり、各々の重みシーケンサユニットは、対応する重み入力を上記シストリックアレイの上記対応する個別のセルにロードするように構成され、上記ロードは、上記重み入力を上記乗算回路に送ることを備える。各々の一時停止カウンタにおける値は、予め定められた値に到達して、上記複数の重みシーケンサユニットに上記第2の次元に沿った上記複数の重み入力のシフトを一時停止させる。上記シストリックアレイは、上記複数のニューラルネットワーク層の各々について、上記ニューラルネットワーク層のための累積出力を各々の積から生成するように構成される。
【0009】
本明細書に記載されている主題の特定の実施形態は、以下の利点のうちの1つ以上を達成するように実現することができる。重みをプリフェッチすることにより、ニューラルネットワークプロセッサがさらに効率的に計算を実行することが可能になる。プロセッサは
、重みフェッチャユニットおよび重みシーケンサユニットを使用して重み入力をシストリックアレイにロードすることを連係させ、それによって、シストリックアレイ内の各セルに外部メモリユニットを結合するワイヤを不要にする。プロセッサは、複数の畳み込み計算の実行を同期させるために重み入力のシフトを一時停止、すなわち「フリーズ」させることができる。
【0010】
本明細書の主題の1つ以上の実施形態の詳細が添付の図面および以下の説明に記載されている。主題の他の特徴、局面および利点は、説明、図面および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【0011】
【
図1】ニューラルネットワークの所与の層について計算を実行するための例示的な方法のフロー図である。
【
図2】例示的なニューラルネットワーク処理システムを示す。
【
図3】行列計算ユニットを含む例示的なアーキテクチャを示す。
【
図4】シストリックアレイ内のセルの例示的なアーキテクチャを示す。
【
図5】空間次元と特徴次元とを有する例示的な行列構造を示す。
【
図6】どのようにカーネル行列構造がシストリックアレイに送られるかの例示的な図を示す。
【
図7】3つのクロックサイクル後のセル内の重み入力の例示的な図を示す。
【
図8】どのように制御信号が起動入力をシフトまたはロードさせるかの例示的な図である。
【発明を実施するための形態】
【0012】
さまざまな図における同様の参照番号および名称は、同様の要素を示す。
詳細な説明
複数の層を有するニューラルネットワークは、推測値の計算に使用することができる。たとえば、入力を前提として、ニューラルネットワークは当該入力について推測値を計算することができる。ニューラルネットワークは、ニューラルネットワークの各層を介して入力を処理することによってこの推測値を計算する。特に、ニューラルネットワークの層は、各々が重みのそれぞれのセットを有する状態で、ある順序で配置される。各層は、入力を受け取って、当該層の重みのセットに従って入力を処理して、出力を生成する。
【0013】
したがって、受け取った入力から推測値を計算するために、ニューラルネットワークは、当該入力を受け取って、当該順序でニューラルネットワーク層の各々を介してそれを処理して、推測値を生成し、1つのニューラルネットワーク層からの出力は、次のニューラルネットワーク層への入力として提供される。ニューラルネットワーク層へのデータ入力、たとえばニューラルネットワークへの入力または当該順序内の当該層の下方にある層の、ニューラルネットワーク層への出力、は、当該層への起動入力と称することができる。
【0014】
いくつかの実現例では、ニューラルネットワークの層は、有向グラフに配置される。すなわち、任意の特定の層が複数の入力、複数の出力、またはそれら両方を受け取ることができる。また、ニューラルネットワークの層は、層の出力を前の層への入力として送り返すことができるように配置することもできる。
【0015】
図1は、特定目的ハードウェア回路を使用してニューラルネットワークの所与の層について計算を実行するための例示的なプロセス100のフロー図である。便宜上、方法100は、方法100を実行する1つ以上の回路を有するシステムに関連して説明する。方法100は、受け取った入力から推測値を計算するためにニューラルネットワークの各層について実行され得る。
【0016】
当該システムは、所与の層についての重み入力の複数のセットを受け取り(ステップ102)、所与の層についての起動入力の複数のセットを受け取る(ステップ104)。重み入力の複数のセットおよび起動入力の複数のセットは、それぞれ特定目的ハードウェア回路のダイナミックメモリおよび統合バッファから受け取られることができる。いくつかの実現例では、重み入力の複数のセットも起動入力の複数のセットも統合バッファから受け取られてもよい。
【0017】
当該システムは、特定目的ハードウェア回路の行列乗算ユニットを使用して重み入力および起動入力から累積値を生成する(ステップ106)。いくつかの実現例では、累積値は、重み入力の複数のセットと起動入力の複数のセットとのドット積である。すなわち、重みの1つのセットについて、当該システムは、各重み入力と各起動入力とを掛け合わせ、その積を合計して、累積値を形成することができる。次いで、当該システムは、重みの他のセットと起動入力の他の複数のセットとのドット積を計算することができる。
【0018】
当該システムは、特定目的ハードウェア回路のベクトル計算ユニットを使用して累積値から層出力を生成することができる(ステップ108)。いくつかの実現例では、ベクトル計算ユニットは、起動関数を累積値に適用する。層の出力は、ニューラルネットワーク内の後続の層への入力として使用できるように統合バッファに格納されてもよく、または推測値を求めることに使用されてもよい。当該システムは、受け取った入力をニューラルネットワークの各層を介して処理して受け取った入力について推測値を生成すると、ニューラルネットワークを処理することを終了する。
【0019】
図2は、ニューラルネットワーク計算を実行するための例示的な特定目的集積回路200を示す。システム200は、ホストインターフェイス202を含む。ホストインターフェイス202は、ニューラルネットワーク計算のためのパラメータを含む命令を受け取ることができる。パラメータは、何個の層を処理すべきであるか、層の各層についての重み入力の対応する複数のセット、起動入力の最初のセット、すなわち推測値を計算するためのニューラルネットワークへの入力、各層の対応する入力および出力サイズ、ニューラルネットワーク計算のためのストライド値、および処理すべき層のタイプ、たとえば畳み込み層または完全に接続された層、のうちの少なくとも1つ以上を含み得る。
【0020】
ホストインターフェイス202は、シーケンサ206に命令を送ることができ、シーケンサ206は、当該命令を、ニューラルネットワーク計算を実行するように回路を制御する低レベル制御信号に変換する。いくつかの実現例では、当該制御信号は、回路内のデータフロー、たとえば重み入力の複数のセットおよび起動入力の複数のセットがどのように回路内を流れるか、を調整する。シーケンサ206は、統合バッファ208、行列計算ユニット212およびベクトル計算ユニット214に当該制御信号を送ることができる。いくつかの実現例では、シーケンサ206は、ダイレクトメモリアクセスエンジン204およびダイナミックメモリ210にも制御信号を送る。いくつかの実現例では、シーケンサ206は、クロック信号を生成するプロセッサである。シーケンサ206は、当該クロック信号のタイミングを使用して、回路200の各コンポーネントに当該制御信号を適切なときに送ることができる。いくつかの他の実現例では、ホストインターフェイス202は、外部プロセッサからクロック信号を渡す。
【0021】
ホストインターフェイス202は、ダイレクトメモリアクセスエンジン204に重み入力の複数のセットおよび起動入力の最初のセットを送ることができる。ダイレクトメモリアクセスエンジン204は、起動入力の複数のセットを統合バッファ208に格納することができる。いくつかの実現例では、ダイレクトメモリアクセスは、メモリユニットであり得るダイナミックメモリ210に重みの複数のセットを格納する。いくつかの実現例で
は、ダイナミックメモリは、回路から離れて位置している。
【0022】
統合バッファ208は、メモリバッファである。統合バッファ208を使用して、ダイレクトメモリアクセスエンジン204からの起動入力のセットおよびベクトル計算ユニット214の出力を格納することができる。ダイレクトメモリアクセスエンジン204は、ベクトル計算ユニット214の出力を統合バッファ208から読み出すこともできる。
【0023】
ダイナミックメモリ210および統合バッファ208は、行列計算ユニット212に重み入力の複数のセットおよび起動入力の複数のセットをそれぞれ送ることができる。いくつかの実現例では、行列計算ユニット212は、二次元シストリックアレイである。行列計算ユニット212は、一次元シストリックアレイであってもよく、または数学的演算、たとえば乗算および加算を実行することができる他の回路であってもよい。いくつかの実現例では、行列計算ユニット212は、汎用行列プロセッサである。
【0024】
行列計算ユニット212は、重み入力および起動入力を処理して、ベクトル計算ユニット214に出力のベクトルを提供することができる。いくつかの実現例では、行列計算ユニットは、統合バッファ208に出力のベクトルを送り、統合バッファ208は、ベクトル計算ユニット214に出力のベクトルを送る。ベクトル計算ユニットは、出力のベクトルを処理して、処理された出力のベクトルを統合バッファ208に格納することができる。たとえば、ベクトル計算ユニット214は、非線形関数を行列計算ユニットの出力、たとえば累積値のベクトルに適用して、起動値を生成することができる。いくつかの実現例では、ベクトル計算ユニット214は、正規化値、プール値、またはそれら両方を生成する。処理された出力のベクトルは、たとえばニューラルネットワーク内の後続の層で使用できるように、行列計算ユニット212への起動入力として使用することができる。行列計算ユニット212については、
図3および
図4を参照して以下でさらに詳細に説明する。
【0025】
図3は、行列計算ユニットを含む例示的なアーキテクチャ300を示す。行列計算ユニットは、二次元シストリックアレイ306である。アレイ306は、複数のセル304を含む。いくつかの実現例では、シストリックアレイ306の第1の次元320はセルの列に対応し、シストリックアレイ306の第2の次元322はセルの行に対応する。シストリックアレイは、列よりも多くの行を有していてもよく、行よりも多くの列を有していてもよく、または列と行とが同数であってもよい。
【0026】
示されている例では、値ローダ302がアレイ306の行に起動入力を送り、重みフェッチャインターフェイス308がアレイ306の列に重み入力を送る。しかし、いくつかの他の実現例では、起動入力がアレイ306の列に送信され、重み入力がアレイ306の行に送信される。
【0027】
値ローダ302は、統合バッファ、たとえば
図2の統合バッファ208から起動入力を受け取ることができる。各値ローダは、対応する起動入力をアレイ306の個別の最も左側のセルに送ることができる。最も左側のセルは、アレイ306の最も左側の列に沿ったセルであり得る。たとえば、値ローダ312は、セル314に起動入力を送ることができる。値ローダは、隣接する値ローダにも起動入力を送ることができ、起動入力は、アレイ306の別の最も左側のセルで使用することができる。これにより、アレイ306の別の特定のセルで使用できるように起動入力をシフトすることができる。
【0028】
重みフェッチャインターフェイス308は、メモリユニット、たとえば
図2のダイナミックメモリ210から重み入力を受け取ることができる。重みフェッチャインターフェイス308は、対応する重み入力をアレイ306の個別の最上部のセルに送ることができる
。最上部のセルは、アレイ306の最上部の行に沿ったセルであり得る。たとえば、重みフェッチャインターフェイス308は、セル314および316に重み入力を送ることができる。
【0029】
いくつかの実現例では、ホストインターフェイス、たとえば
図2のホストインターフェイス202は、アレイ306全体にわたって1つの次元に沿って、たとえば右側まで起動入力をシフトし、アレイ306全体にわたって別の次元に沿って、たとえば下部まで重み入力をシフトする。たとえば、1つのクロックサイクルで、セル314における起動入力は、セル314の右側のセル316における起動レジスタにシフトすることができる。同様に、セル316における重み入力は、セル314の下方のセル318における重みレジスタにシフトすることができる。
【0030】
各クロックサイクルで、各セルは、所与の重み入力および所与の起動入力を処理して、累積出力を生成することができる。累積出力は、所与の重み入力と同一の次元に沿って隣接するセルにも渡されることができる。個々のセルについては、
図4を参照して以下でさらに説明する。
【0031】
いくつかの実現例では、重みおよび起動は、所与のクロックサイクル中に2つ以上のセルでシフトされて、1つの畳み込み演算から別の畳み込み演算に移行する。
【0032】
累積出力は、重み入力と同一の列に沿って、たとえばアレイ306内の列の下部の方に渡されることができる。いくつかの実現例では、アレイ306は、列よりも多くの重み入力を有する層または行よりも多くの起動入力を有する層で算出を実行するときに各列から各累積出力を格納して累積するアキュムレータユニット310を各列の下部に含み得る。いくつかの実現例では、各アキュムレータユニットは、複数の並列累積値を格納する。これについては、
図6を参照して以下でさらに説明する。アキュムレータユニット310は、各累積出力を累積して、最終的な累積値を生成することができる。最終的な累積値は、ベクトル計算ユニットに送信されることができる。いくつかの他の実現例では、アキュムレータユニット310は、列よりも少ない重み入力を有する層または行よりも少ない起動入力を有する層を処理するときにいかなる累積も実行することなく累積値をベクトル計算ユニットに渡す。
【0033】
起動入力および重み入力が回路内を流れるとき、回路は、重み入力のセットが流れることを「フリーズ」または一時停止させて、累積値を正確に算出することができる。すなわち、回路は、重み入力のセットを一時停止させることができ、そのため、重み入力の特定のセットを起動入力の特定のセットに適用することができる。
【0034】
いくつかの実現例では、重みシーケンサ324は、重み入力が隣接するセルにシフトするか否かを構成する。重みシーケンサ326は、ホスト、たとえば
図2のホストインターフェイス202、または外部プロセッサから制御値を受け取ることができる。各々の重みシーケンサは、アレイ306内の対応するセルに制御値を渡すことができる。特に、制御値は、セル内の重み制御レジスタ、たとえば
図4の重み制御レジスタ414に格納することができる。制御値は、重み入力がアレイの次元に沿ってシフトされるかロードされるかを判断することができ、これについては、
図8を参照して以下で説明する。重みシーケンサは、隣接する重みシーケンサにも制御値を送ることができ、当該隣接する重みシーケンサは、対応するセルのための対応する重み入力のシフトまたはロードを調整することができる。
【0035】
いくつかの実現例では、制御値は、整数として表わされる。各々の重みシーケンサは、当該整数を格納する一時停止カウンタレジスタを含み得る。また、重みシーケンサは、制
御値を一時停止カウンタレジスタに格納する前に当該整数をデクリメントすることができる。制御値を一時停止カウンタレジスタに格納した後、重みシーケンサは、当該整数を隣接する重みシーケンサに送り、当該整数を対応するセルに送ることができる。たとえば、各々の重みシーケンサは、デクリメントされた整数を制御値から生成するように構成されたデクリメント回路を有し得る。デクリメントされた整数は、一時停止カウンタレジスタに格納することができる。格納された制御値は、アレイの列全体にわたるシフトの同時一時停止を連係させることに使用することができ、これについては、
図8を参照して以下でさらに説明する。
【0036】
いくつかの実現例では、回路内で重みを一時停止させることにより、開発者が回路をデバッグすることが可能になる。
【0037】
重みを一時停止させる他の方法も可能である。たとえば、一時停止カウンタレジスタ内の値を隣接する一時停止カウンタレジスタに渡す代わりに、ツリーを使用して制御値が渡されてもよい。すなわち、所与のセルにおいて、隣接する1つのセルだけでなく全ての隣接するセルに信号を渡すことができ、それによって、信号をシストリックアレイ全体に迅速に分散させる。
【0038】
図4は、シストリックアレイ、たとえば
図3のシストリックアレイ306内のセルの例示的なアーキテクチャ400を示す。
【0039】
セルは、起動入力を格納する起動レジスタ406を含み得る。起動レジスタは、シストリックアレイ内のセルの位置に応じて、左側の隣接するセル、すなわち所与のセルの左側に位置する隣接するセルから、または統合バッファから起動入力を受け取ることができる。セルは、重み入力を格納する重みレジスタ402を含み得る。重み入力は、シストリックアレイ内のセルの位置に応じて、上側の隣接するセルから、または重みフェッチャインターフェイスから送信されることができる。セルは、合計レジスタ404も含み得る。合計レジスタ404は、上側の隣接するセルからの累積値を格納することができる。乗算回路408は、重みレジスタ402からの重み入力と起動レジスタ406からの起動入力とを掛け合わせることに使用することができる。乗算回路408は、その積を総和回路410に出力することができる。
【0040】
総和回路は、その積と合計レジスタ404からの累積値とを総計して、新たな累積値を生成することができる。次いで、総和回路410は、下側の隣接するセルに位置する別の合計レジスタに当該新たな累積値を送ることができる。当該新たな累積値は、下側の隣接するセルでの総計のためのオペランドとして使用することができる。
【0041】
いくつかの実現例では、セルは一般的な制御レジスタも含む。制御レジスタは、セルが隣接するセルに重み入力をシフトすべきであるか起動入力をシフトすべきであるかを判断する制御信号を格納することができる。いくつかの実現例では、重み入力または起動入力のシフトは、2つ以上のクロックサイクルを要する。制御信号は、起動入力を乗算回路408に送信するか重み入力を乗算回路408に送信するかを判断することもでき、または、乗算回路408が起動入力および重み入力上で動作するか否かを判断することもできる。制御信号も、たとえばワイヤを使用して1つ以上の隣接するセルに渡されることができる。
【0042】
いくつかの実現例では、重みは、重みパスレジスタ412に事前にシフトされる。重みパスレジスタ412は、たとえば上側の隣接するセルから重み入力を受け取って、制御信号に基づいて重み入力を重みレジスタ402に送信することができる。重みレジスタ402は、たとえば起動レジスタ406を介して複数のクロックサイクルで起動入力がセルに
送信されるときに重み入力がセル内にとどまって隣接するセルに送信されないように、重み入力を静的に格納することができる。したがって、重み入力は、たとえば乗算回路408を使用して複数の起動入力に適用可能であり、それぞれの累積値は、隣接するセルに送信されることができる。
【0043】
いくつかの実現例では、重み制御レジスタ414は、重み入力が重みレジスタ402に格納されるか否かを制御する。たとえば、重み制御レジスタ414が0という制御値を格納している場合、重みレジスタ402は、重みパスレジスタ412によって送られた重み入力を格納することができる。いくつかの実現例では、重み入力を重みレジスタ402に格納することを、重み入力のロードと称する。重み入力がロードされると、重み入力は、処理のために乗算回路408に送られることができる。重み制御レジスタ414がゼロでない制御値を格納している場合、重みレジスタ402は、重みパスレジスタ412によって送られた重み入力を無視することができる。重み制御レジスタ414に格納された制御値は、たとえば所与のセルの1つ以上の隣接するセルに渡されることができ、当該制御値は、所与のセルの右側に位置するセル内の重み制御レジスタに送られることができる。
【0044】
また、セルは、重み入力および起動入力を隣接するセルにシフトさせることもできる。たとえば、重みパスレジスタ412は、下側の隣接するセルにおける別の重みパスレジスタに重み入力を送ることができる。起動レジスタ406は、右側の隣接するセルにおける別の起動レジスタに起動入力を送ることができる。したがって、重み入力も起動入力も、後続のクロックサイクルでアレイ内の他のセルによって再使用することができる。
【0045】
図5は、空間次元と特徴次元とを有する例示的な行列構造500を示す。行列構造500は、起動入力のセットまたは重み入力のセットのいずれかを表わすことができる。起動入力のセットのための行列構造を本明細書では起動行列構造と称し、重み入力のセットのための行列構造を本明細書ではカーネル行列構造と称する。行列構造500は、3つの次元、すなわち2つの空間次元と1つの特徴次元、とを有する。
【0046】
いくつかの実現例では、空間次元は、起動入力のセットの空間または位置に対応する。たとえば、ニューラルネットワークが2つの次元を有する画像を処理している場合、行列構造は、当該画像の空間座標、すなわちXY座標に対応する2つの空間次元を有し得る。
【0047】
特徴次元は、起動入力からの特徴に対応する。各特徴次元は、深さレベルを有し得る。たとえば、行列構造500は、深さレベル502,504および506を有する。例示として、行列構造500が第1の層への起動入力のセットとして送られた3×3×3画像を表わす場合、当該画像のXおよびY次元(3×3)が空間次元であってもよく、Z次元(3)がR,GおよびB値に対応する特徴次元であってもよい。すなわち、深さレベル502が9個の「1」起動入力、たとえば赤色値の特徴に対応し得て、深さレベル504が9個の「2」起動入力、たとえば緑色値の特徴に対応し得て、深さレベル506が9個の「3」起動入力、たとえば青色値の特徴に対応し得る。
【0048】
図5の例では特徴次元の深さレベルを3つだけ示しているが、所与の特徴次元は多数の特徴次元、たとえば何百もの特徴次元を有していてもよい。同様に、1つの特徴次元だけを示しているが、所与の行列構造は複数の特徴次元を有していてもよい。
【0049】
行列構造500を用いて畳み込み層について計算を実行するために、当該システムは、畳み込み計算を二次元行列乗算に変換しなければならない。
【0050】
図6は、どのように
図5の行列構造500が所与の畳み込み層においてシストリックアレイ606によって処理されるかの例示的な図を示す。行列構造600は、起動入力のセ
ットであり得る。一般に、ニューラルネットワークプロセッサは、起動入力、たとえば行列構造600内の要素と、重み入力、たとえばカーネルA~D 610とをアレイの行および列にそれぞれ送ることができる。起動入力および重み入力は、シストリックアレイの右側および下部にそれぞれシフトされることができ、特定の位置、たとえば特定のセルにおける特定のレジスタに到達しなければならない。たとえば制御信号を検証することによって入力が所定の位置にきたと判断されると、プロセッサは、セル内に格納された入力を使用して算出を実行して、所与の層の出力を生成することができる。
【0051】
ニューラルネットワークプロセッサは、上記のように、構造600の一部をシストリックアレイの行に送る前に行列構造600を「平坦化する」。すなわち、ニューラルネットワークプロセッサは、行列構造600の深さ層602、たとえば
図6の深さ層602,604および606を分割し、各深さ層を個別のセルに送ることができる。いくつかの実現例では、各深さ層は、シストリックアレイ606の異なる行のセルに送られる。たとえば、プロセッサは、第1の深さ層、たとえば9個の「1」起動入力の行列からシストリックアレイ606の第1の行における最も左側のセルに起動入力を送ることができ、第2の深さ層、たとえば9個の「2」起動入力の行列からシストリックアレイ606の第2の行における最も左側のセルに起動入力を送ることができ、第3の深さ層、たとえば9個の「3」起動入力の行列からシストリックアレイ606の第3の行における最も左側のセルに起動入力を送ることができる、などである。
【0052】
所与の層は、複数のカーネル、たとえばカーネルA~D 610を有し得る。カーネルA~D 610は、次元3×3×10の行列構造を有し得る。プロセッサは、各カーネル行列構造をシストリックアレイ606の個別の列におけるセルに送ることができる。たとえば、カーネルAは、第1の列における上部のセルに送られることができ、カーネルBは、第2の列における上部のセルに送られることができる、などである。
【0053】
行列構造がセルに送られると、1つのクロックサイクル中に行列の第1の要素をセルに格納することができる。次のクロックサイクルで、次の要素をセルに格納することができる。
図4を参照して上記したように、格納された第1の要素は、隣接するセルにシフトさせることができる。入力のシフトは、行列構造の全ての要素がシストリックアレイ606に格納されるまで継続することができる。起動入力も重み入力も、1つ以上のクロックサイクル後に各々のセル全体にわたってシフトさせることができる。シストリックアレイ内の入力のシフトについては、
図7を参照して以下でさらに説明する。
【0054】
図7は、3つのクロックサイクル後の例示的な3×3シストリックアレイのセル内の重み入力の例示的な
図700を示す。
図5を参照して上記したように、各セルは、重み入力および起動入力を格納することができる。
図7を参照して上記したように、重み入力は、畳み込み演算のためにシストリックアレイの個別の列におけるセルに送られることができる。例示として、当該システムは、1,2および4という重み入力を有する第1のカーネル行列構造をシストリックアレイの第1の列に送る。当該システムは、3,5および7という重み入力を有する第2のカーネル構造を第2の列に送る。当該システムは、重み6,8および10を有する第3のカーネル構造を第3の列に送る。どのクロックサイクルの後でも、重み入力は一次元で、たとえば上から下にシフトさせることができる一方、起動入力は別の次元で、たとえば左から右にシフトさせることができる(図示せず)。
【0055】
重み入力は、互い違いの態様でセル内に格納することができる。すなわち、第1のクロックサイクル702後のシストリックアレイの状態は、左上のセル内の「1」を示す。「1」は、「1」という重み入力がセルに格納されていることを表わす。次のクロックサイクル704において、「1」は左上のセルの下方のセルにシフトされ、カーネルからの別の重み入力、すなわち「2」が左上のセルに格納され、同様に「3」という重み入力が第
2の列における最上部のセルに格納される。
【0056】
第3のクロックサイクル706で、各々の重みが再びシフトされる。第1の列では、最下部のセルが「1」という重み入力を格納し、前のサイクルで「1」という重み入力が格納されていた場所に「2」という重み入力が格納され、「4」という重み入力が上部の最も左側のセルに格納される。同様に、第2の列では、「3」が下にシフトされ、「5」という重み入力が上部中央のセルに格納される。第3の列では、「6」という重み入力が上部の最も右側のセルに格納される。
【0057】
いくつかの実現例では、重み入力をシフトすべきであるか否かを判断する重み入力のための制御信号も重み入力とともにシフトされる。
【0058】
起動入力は、同様の態様で他の次元で、たとえば左から右にシフトさせることができる。
【0059】
起動入力および重み入力が所定の位置にくると、プロセッサは、たとえばセル内の乗算回路および総和回路を使用することによって畳み込み演算を実行して、ベクトル計算ユニットで使用される累積値のセットを生成することができる。
【0060】
重み入力がアレイの列に送られ起動入力がアレイの行に送られるものとして当該システムを説明したきたが、いくつかの実現例では、重み入力がアレイの行に送られ、起動入力がアレイの列に送られる。
【0061】
図8は、どのように制御値が重み入力をシフトまたはロードさせることができるかの例示的な図である。
図3を参照して上記したように、制御値806は、ホストによって送られることができ、重みシーケンサによって格納されることができる。グラフ内の値は、それぞれシストリックアレイの行1~4 804に対応する重みシーケンサ808~814に格納された制御値をクロックサイクル802ベースで表わす。
【0062】
いくつかの実現例では、所与の重みシーケンサにおける制御値がゼロでない場合、シストリックアレイの対応するセルにおける重み入力は、隣接するセルにシフトすることになる。所与の重みシーケンサにおける制御値がゼロである場合、重み入力は、対応するセルにロードされて、セル内の起動入力との積を計算することに使用することができる。
【0063】
例示として、ホストは、4個の重み入力をロードする前にシフトすべきであると判断することができる。クロックサイクル0で、ホストは、5という制御値を重みシーケンサ808、すなわち行1に対応する重みシーケンサに送ることができる。重みシーケンサ808は、5という制御値に基づいて4という制御値を出力するのに1つのクロックサイクルを要するデクリメント回路を含む。したがって、4という制御値は、後続のクロックサイクル、すなわちクロックサイクル1で重みシーケンサ808に格納される。
【0064】
クロックサイクル1で、ホストは、4という制御値を重みシーケンサ808に送る。したがって、クロックサイクル2で、重みシーケンサ808は、たとえばデクリメント回路を使用して3という制御値を格納する。クロックサイクル1で、重みシーケンサ808は、4という制御値を重みシーケンサ810に送ることができる。したがって、クロックサイクル2で、4という制御値が重みシーケンサ810のデクリメント回路によって処理された後、重みシーケンサ810は、3という制御値を格納することができる。
【0065】
同様に、ホストは、クロックサイクル2,3および4でそれぞれ3という制御値、2という制御値および1という制御値を送ることができる。各重みシーケンサ808~814
におけるデクリメント回路が制御値をデクリメントするときに遅延を生じさせるので、各クロックサイクルで制御値806をデクリメントすることにより、最終的に、各重みシーケンサに同一の制御値、すなわちクロックサイクル4では1という制御値およびクロックサイクル5では0という制御値、を格納させることができる。
【0066】
いくつかの実現例では、各重みシーケンサが0という制御値を出力すると、シストリックアレイは、重み入力のシフトを一時停止させ、重み入力を各セルにロードする。すなわち、重み入力をロードすることによって、シストリックアレイは、ドット積計算におけるオペランドとして重み入力を使用することを可能にし、それによって、ニューラルネットワーク内の層を処理し始める。
【0067】
いくつかの実現例では、計算が終了した後、重みのシフトを再び開始するために、ホストは、制御値をゼロでない数字に変更し、たとえばクロックサイクル7の間に5という制御値を送る。シフトのプロセスは、クロックサイクル0を参照して上記したように繰返すことができる。
【0068】
いくつかの実現例では、制御値は別のオフセット、たとえば1から開始する。
本明細書に記載されている主題および機能動作の実施形態は、デジタル電子回路で実現されてもよく、有形に実施されたコンピュータソフトウェアもしくはファームウェアで実現されてもよく、本明細書に開示されている構造およびそれらの構造的等価物を含むコンピュータハードウェアで実現されてもよく、またはそれらのうちの1つ以上の組み合わせで実現されてもよい。本明細書に記載されている主題の実施形態は、1つ以上のコンピュータプログラムとして実現されてもよく、すなわちデータ処理装置による実行またはデータ処理装置の動作の制御のために有形の非一時的なプログラムキャリアに符号化されたコンピュータプログラム命令の1つ以上のモジュールとして実現されてもよい。代替的にまたは加えて、プログラム命令は、人工的に生成された伝搬信号、たとえば機械によって生成された電気信号、光信号または電磁信号、に符号化されてもよく、当該信号は、情報を符号化して好適な受信機装置に送信してデータ処理装置によって実行するように生成される。コンピュータ記憶媒体は、機械読取可能な記憶装置であってもよく、機械読取可能な記憶基板であってもよく、ランダムもしくはシリアルアクセスメモリデバイスであってもよく、またはそれらのうちの1つ以上の組み合わせであってもよい。
【0069】
「データ処理装置」という用語は、一例としてプログラム可能なプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む、データを処理するための全ての種類の装置、デバイスおよび機械を包含する。当該装置は、特定目的論理回路、たとえばFPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)を含み得る。当該装置は、ハードウェアに加えて、対象のコンピュータプログラムのための実行環境を作成するコード、たとえばプロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらのうちの1つ以上の組み合わせを構成するコード、も含み得る。
【0070】
(プログラム、ソフトウェア、ソフトウェアアプリケーション、モジュール、ソフトウェアモジュール、スクリプト、またはコードと称してもよく、またはそのようなものとして記載されてもよい)コンピュータプログラムは、コンパイラ型もしくはインタープリタ型言語、または機能的に純粋なもしくは宣言型もしくは手続き型言語を含むいずれかの形態のプログラミング言語で書かれてもよく、スタンドアロンのプログラム、または計算環境での使用に適したモジュール、コンポーネント、サブルーチンもしくは他のユニットを含むいずれかの形態でデプロイすることができる。コンピュータプログラムは、ファイルシステムにおけるファイルに対応し得るが、そうでなくてもよい。プログラムは、他のプログラムもしくはデータ、たとえばマークアップ言語ドキュメントに格納された1つ以上
のスクリプト、を保持するファイルの一部に格納されてもよく、対象のプログラムに専用の単一のファイルに格納されてもよく、または複数の協調的ファイル、たとえば1つ以上のモジュール、サブプログラムもしくはコードの一部を格納するファイル、に格納されてもよい。コンピュータプログラムは、1つのコンピュータで実行されるようにデプロイされてもよく、または、一箇所に位置するかもしくは複数の箇所に分散されて通信ネットワークによって相互接続された複数のコンピュータで実行されるようにデプロイされてもよい。
【0071】
本明細書に記載されているプロセスおよび論理フローは、1つ以上のプログラム可能なコンピュータによって実行されてもよく、当該1つ以上のプログラム可能なコンピュータは、入力データ上で動作して出力を生成することによって機能を実行するように1つ以上のコンピュータプログラムを実行する。また、当該プロセスおよび論理フローは、特定目的論理回路、たとえばFPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)によって実行されてもよく、装置は、特定目的論理回路、たとえばFPGAまたはASICとして実現されてもよい。
【0072】
コンピュータプログラムの実行に適したコンピュータは、一例として、汎用マイクロプロセッサもしくは特定目的マイクロプロセッサ、またはそれら両方、またはその他の種類の中央処理装置に基づいていてもよい。一般に、中央処理装置は、リードオンリメモリまたはランダムアクセスメモリまたはそれら両方から命令およびデータを受け取る。コンピュータの必須の要素は、命令を実施または実行するための中央処理装置と、命令およびデータを格納するための1つ以上のメモリデバイスとである。一般に、コンピュータは、データを格納するための1つ以上の大容量記憶装置、たとえば磁気ディスク、光磁気ディスクもしくは光ディスクも含み、または、当該1つ以上の大容量記憶装置からデータを受信したり、当該1つ以上の大容量記憶装置にデータを送信したり、もしくは当該1つ以上の大容量記憶装置との間でデータを送受信したりするように動作可能に結合される。しかし、コンピュータはこのような装置を有していなくてもよい。さらに、コンピュータは、別のデバイス、たとえばいくつか例を挙げると携帯電話、パーソナルデジタルアシスタント(personal digital assistant:PDA)、モバイルオーディオプレーヤもしくはビデオプレーヤ、ゲーム機、グローバルポジショニングシステム(Global Positioning System
:GPS)受信機で実施されてもよく、または携帯型記憶装置、たとえばユニバーサルシリアルバス(universal serial bus:USB)フラッシュドライブで実施されてもよい。
【0073】
コンピュータプログラム命令およびデータの格納に適したコンピュータ読取可能な媒体は、全ての形態の不揮発性メモリ、媒体およびメモリデバイスを含み、一例として、半導体メモリデバイス、たとえばEPROM、EEPROMおよびフラッシュメモリデバイス;磁気ディスク、たとえば内部ハードディスクまたはリムーバブルディスク;光磁気ディスク;ならびにCD ROMおよびDVD-ROMディスクを含む。プロセッサおよびメモリは、特定目的論理回路によって補完されてもよく、または特定目的論理回路に組み込まれてもよい。
【0074】
ユーザとの対話を要求するために、本明細書に記載されている主題の実施形態は、ユーザに情報を表示するためのディスプレイデバイス、たとえばCRT(陰極線管)またはLCD(液晶ディスプレイ)モニタと、ユーザが入力をコンピュータに送ることができるキーボードおよびポインティングデバイス、たとえばマウスまたはトラックボールとを有するコンピュータで実現されてもよい。ユーザとの対話を要求するために他の種類のデバイスも使用してもよい。たとえば、ユーザに提供されるフィードバックは、いずれかの形態の感覚フィードバック、たとえば視覚フィードバック、聴覚フィードバックまたは触覚フィードバックであってもよく、ユーザからの入力は、音響入力、音声入力または触覚入力を含むいずれかの形態で受け取られてもよい。また、コンピュータは、ユーザが使用する
デバイスにドキュメントを送ったり当該デバイスからドキュメントを受け取ったりすることによってユーザと対話してもよく、たとえばウェブブラウザから受け取った要求に応答してユーザのクライアントデバイスのウェブブラウザにウェブページを送ることによってユーザと対話してもよい。
【0075】
本明細書に記載されている主題の実施形態は、バックエンドコンポーネント、たとえばデータサーバを含む計算システムで実現されてもよく、またはミドルウェアコンポーネント、たとえばアプリケーションサーバを含む計算システムで実現されてもよく、またはフロントエンドコンポーネント、たとえばユーザが本明細書に記載されている主題の実現例と対話できるグラフィカルユーザインターフェイスもしくはウェブブラウザを有するクライアントコンピュータを含む計算システムで実現されてもよく、または1つ以上のこのようなバックエンドコンポーネント、ミドルウェアコンポーネントもしくはフロントエンドコンポーネントのいずれかの組み合わせを含む計算システムで実現されてもよい。当該システムのコンポーネント同士は、デジタルデータ通信のいずれかの形態または媒体、たとえば通信ネットワークによって相互接続されてもよい。通信ネットワークの例としては、ローカルエリアネットワーク(local area network:LAN)および広域ネットワーク(wide area network:WAN)、たとえばインターネットが挙げられる。
【0076】
計算システムは、クライアントとサーバとを含んでいてもよい。クライアントおよびサーバは、一般に互いに離れており、通常は通信ネットワークを介して対話する。クライアントとサーバとの関係は、それぞれのコンピュータ上で動作して互いに対してクライアント-サーバ関係を有するコンピュータプログラムによって生じる。
【0077】
本明細書は、多くの具体的な実現例の詳細を含んでいるが、これらは、発明の範囲またはクレームされ得るものの範囲を限定するものとして解釈されるべきではなく、特定の発明の特定の実施形態に特有であろう特徴を説明するものとして解釈されるべきである。別々の実施形態の文脈で本明細書に記載されている特定の特徴は、組み合わせて単一の実施形態で実現されてもよい。逆に、単一の実施形態の文脈で記載されているさまざまな特徴は、複数の実施形態で別々に、またはいずれかの好適な部分的組み合わせで実現されてもよい。さらに、特徴は特定の組み合わせで動作するものとして上記され、当初はそのようなものとしてクレームされさえし得るが、クレームされている組み合わせからの1つ以上の特徴は、場合によっては当該組み合わせから削除されてもよく、クレームされている組み合わせは、部分的組み合わせまたは部分的組み合わせの変形例に向けられてもよい。
【0078】
同様に、動作は特定の順序で図面に示されているが、これは、望ましい結果を達成するために、示されている特定の順序またはシーケンシャルな順序でこのような動作を実行しなければならないものとして理解されるべきではなく、または全ての示されている動作を実行しなければならないものとして理解されるべきではない。特定の状況では、マルチタスクおよび並列処理が有利であるかもしれない。さらに、上記の実施形態におけるさまざまなシステムモジュールおよびコンポーネントの分離は、全ての実施形態でこのような分離が必要であるものとして理解されるべきではなく、記載されているプログラムコンポーネントおよびシステムは一般に単一のソフトウェア製品に実装されるかまたは複数のソフトウェア製品にパッケージングされ得るということが理解されるべきである。
【0079】
主題の特定の実施形態について説明してきた。他の実施形態も以下の特許請求の範囲の範囲内である。たとえば、特許請求の範囲に記載されている動作は、異なる順序で実行されてもよく、依然として望ましい結果を達成することができる。一例として、添付の図面に示されているプロセスは、望ましい結果を達成するために、示されている特定の順序またはシーケンシャルな順序を必ずしも必要としない。特定の実現例では、マルチタスクおよび並列処理が有利であるかもしれない。
【手続補正書】
【提出日】2023-11-17
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
複数のニューラルネットワーク層を有するニューラルネットワークについてニューラルネットワーク計算を実行するためのシステムであって、
回路を含む行列計算ユニットを備え、前記回路は、
前記複数のニューラルネットワーク層のうちのニューラルネットワーク層についての重み入力を取得し、
制御信号を受信し、
前記制御信号に基づいて、前記重み入力を後続のクロックサイクルで再使用するか否かを判断するように構成される、システム。
【請求項2】
前記回路はさらに、前記重み入力を前記後続のクロックサイクルで再使用するとの判断に応答して、前記重み入力をシフトさせるように構成される、請求項1に記載のシステム。
【請求項3】
前記回路はさらに、
前記ニューラルネットワーク層についての起動入力を取得し、
前記制御信号に基づいて、前記起動入力を後続のクロックサイクルで再使用するか否かを判断するように構成される、請求項1または2に記載のシステム。
【請求項4】
前記起動入力を取得することは、前記起動入力を値ローダから取得することを含む、請求項3に記載のシステム。
【請求項5】
前記重み入力を取得することは、シフトされた重み入力を取得することを含み、
前記起動入力を取得することは、シフトされた起動入力を取得することを含む、請求項3に記載のシステム。
【請求項6】
前記複数のニューラルネットワーク層に起動入力を提供するように構成された第1のメモリと、
前記複数のニューラルネットワーク層に重み入力を提供するように構成された第2のメモリとをさらに備える、請求項3に記載のシステム。
【請求項7】
回路を含むベクトル計算ユニットをさらに備え、前記回路は、
1つまたは複数の累積値を前記行列計算ユニットから受信し、
前記1つまたは複数の累積値に基づいてベクトルを決定し、
前記ベクトルを前記第1のメモリに提供するように構成される、請求項6に記載のシステム。
【請求項8】
1つまたは複数の制御信号を前記第1のメモリ、前記第2のメモリ、前記ベクトル計算ユニットまたは前記行列計算ユニットのうちの少なくとも1つに提供するように構成されたシーケンサ回路をさらに備える、請求項7に記載のシステム。
【請求項9】
前記重み入力を取得することは、前記重み入力を重みフェッチャインターフェイスから取得することを含む、請求項1から4のいずれか1項に記載のシステム。
【請求項10】
前記制御信号に基づいて、前記重み入力を前記後続のクロックサイクルで再使用するか否かを判断することは、前記制御信号が予め定められた値を満たすことを判断することを含む、請求項1から9のいずれか1項に記載のシステム。
【請求項11】
前記回路は、
前記制御信号を格納するように構成された1つまたは複数の重み制御レジスタと、
前記重み入力をロードするように構成された1つまたは複数の重みレジスタとを含む、請求項1から10のいずれか1項に記載のシステム。
【請求項12】
前記制御信号を前記行列計算ユニットに提供するように構成された回路を含むシーケンサをさらに備える、請求項1に記載のシステム。
【請求項13】
前記シーケンサの前記回路は、各クロックサイクルにおいて前記制御信号の値をデクリメントするように構成されたデクリメント回路を含む、請求項12に記載のシステム。
【請求項14】
複数のニューラルネットワーク層を有するニューラルネットワークについてニューラルネットワーク計算を実行するための方法であって、
行列計算ユニットが、前記複数のニューラルネットワーク層のうちのニューラルネットワーク層についての重み入力を取得するステップと、
前記行列計算ユニットが、制御信号を受信するステップと、
前記制御信号に基づいて、前記重み入力を後続のクロックサイクルで再使用するか否かを判断するステップとを備える、方法。
【請求項15】
前記重み入力を前記後続のクロックサイクルで再使用するとの判断に応答して、前記重み入力をシフトさせるステップをさらに備える、請求項14に記載の方法。
【請求項16】
前記行列計算ユニットが、前記ニューラルネットワーク層についての起動入力を取得するステップと、
前記制御信号に基づいて、前記起動入力を後続のクロックサイクルで再使用するか否かを判断するステップとをさらに備える、請求項14または15に記載の方法。
【請求項17】
前記制御信号に基づいて、前記重み入力を前記後続のクロックサイクルで再使用するか否かを判断するステップは、前記制御信号が予め定められた値を満たすことを判断するステップを含む、請求項14から16のいずれか1項に記載の方法。
【請求項18】
複数のニューラルネットワーク層を有するニューラルネットワークについてニューラルネットワーク計算を実行するための行列計算ユニットであって、前記行列計算ユニットは、回路を備え、前記回路は、
前記複数のニューラルネットワーク層のうちのニューラルネットワーク層についての重み入力を取得し、
制御信号を受信し、
前記制御信号に基づいて、前記重み入力を後続のクロックサイクルで再使用するか否かを判断するように構成される、行列計算ユニット。
【請求項19】
前記回路はさらに、前記重み入力を前記後続のクロックサイクルで再使用するとの判断に応答して、前記重み入力をシフトさせるように構成される、請求項18に記載の行列計算ユニット。
【請求項20】
前記回路はさらに、
前記ニューラルネットワーク層についての起動入力を取得し、
前記制御信号に基づいて、前記起動入力を後続のクロックサイクルで再使用するか否かを判断するように構成される、請求項18または19に記載の行列計算ユニット。
【請求項21】
請求項14から17のいずれか1項に記載の方法をコンピュータに実行させるプログラム。
【外国語明細書】