(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-02-14
(54)【発明の名称】ニューラルネットワークプロセッサ
(51)【国際特許分類】
G06N 3/063 20060101AFI20220204BHJP
G06F 17/10 20060101ALI20220204BHJP
【FI】
G06N3/063
G06F17/10 A
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2021536053
(86)(22)【出願日】2019-12-20
(85)【翻訳文提出日】2021-08-17
(86)【国際出願番号】 US2019068092
(87)【国際公開番号】W WO2020132593
(87)【国際公開日】2020-06-25
(32)【優先日】2018-12-21
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】317015065
【氏名又は名称】ウェイモ エルエルシー
(74)【代理人】
【識別番号】100079108
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100126480
【氏名又は名称】佐藤 睦
(72)【発明者】
【氏名】リー,キョン ホ
(72)【発明者】
【氏名】ラヴィクマル,サバレーシュクマル
(72)【発明者】
【氏名】ドネリー,ポール
(72)【発明者】
【氏名】ローゼンバンド,ダニエル
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056BB26
(57)【要約】
複数のニューラルネットワーク(NN)層を含むニューラルネットワークの計算を実行するための回路。回路は、計算を実行するためのプログラミングデータを提供する処理装置と、プログラミングデータを受信するための処理装置とデータ通信しているコアと、を含む。コアは、層の入力を格納するアクティベーションメモリと、第1のNN層のパラメータを格納するパラメータメモリと、を含む。コアはまた、プログラミングデータに基づいて、アクティベーションメモリからの入力にアクセスして回転する回転ユニットと、それぞれの入力および第1のNN層のパラメータを受信し、入力およびパラメータを使用して、第1のNN層の出力を生成する計算ユニットと、を含む。コアはまた、バンク割り当てパターンに従って、出力をアクティベーションメモリに格納させるクロスバーユニットを含む。
【選択図】
図1
【特許請求の範囲】
【請求項1】
複数のニューラルネットワーク層を含むニューラルネットワークの計算を実行するための回路であって、前記回路は、
データ信号を処理し、前記計算を実行するためのプログラミングデータを提供するように構成された処理装置と、
前記処理装置によって提供される前記プログラミングデータを受信するための前記処理装置とデータ通信しているコアと、を含み、前記コアは、
層入力のセットを格納するように構成されたアクティベーションメモリと、
第1のニューラルネットワーク層のパラメータを格納するように構成されたパラメータメモリと、
前記プログラミングデータに基づいて、前記アクティベーションメモリからの前記層入力のセットにアクセスして回転するように構成された回転ユニットと、
複数の計算セルを有する計算ユニットであって、前記複数の計算セルのうちの少なくとも1つの計算セルは、
i)前記第1のニューラルネットワーク層について、前記回転ユニットによってアクセスされる前記層入力のセットの入力を受信すること、
ii)前記第1のニューラルネットワーク層のパラメータを受信すること、および
iii)前記入力および前記パラメータを使用して、前記第1のニューラルネットワーク層の出力の少なくとも一部を生成すること、を行うように構成されている、計算ユニットと、
前記プログラミングデータおよび第2のニューラルネットワーク層に割り当てられた属性値に基づくバンク割り当てパターンに従って、前記第1のニューラルネットワーク層の前記出力を前記アクティベーションメモリに格納させるように構成されたクロスバーユニットと、を含む、回路。
【請求項2】
前記回転ユニットは、入力テンソルの要素を回転させるようにさらに構成され、前記入力テンソルの各要素は、前記アクティベーションメモリに格納された入力のセットのそれぞれの入力に対応する、請求項1に記載の回路。
【請求項3】
前記回転ユニットは、
第1の回転係数に基づいて、前記入力テンソルの第1の次元に沿って前記入力テンソルの要素を回転させることと、
前記第1の回転係数とは異なる第2の回転係数に基づいて、前記入力テンソルの異なる第2の次元に沿って前記入力テンソルの要素を回転させることと、
前記入力テンソルの回転要素に対応する入力を、前記計算ユニットの計算セルに提供することと、を行うようにさらに構成されている、請求項2に記載の回路。
【請求項4】
前記クロスバーユニットは、
前記バンク割り当てパターンの処理に応答して前記出力内のアクティベーションのマッピングを決定するようにさらに構成されており、前記マッピングは、前記第2のニューラルネットワーク層に割り当てられた前記属性値に基づいて、前記第2のニューラルネットワーク層の前記アクティベーションを格納するための前記アクティベーションメモリのメモリバンクを識別する、請求項1に記載の回路。
【請求項5】
前記クロスバーユニットは、
前記第1のニューラルネットワーク層の前記出力のデータを前記アクティベーションメモリの特定のアドレス位置に格納させるようにさらに構成されており、前記出力の前記データは、前記ニューラルネットワークの異なるそれぞれの層に対して変化する構成可能なマッピングに基づいて、前記アクティベーションメモリのアドレス位置に割り当てられる、請求項4に記載の回路。
【請求項6】
前記回転ユニットは、前記第2のニューラルネットワーク層で処理するための前記第2のニューラルネットワーク層への層入力として、前記第1のニューラルネットワーク層の前記出力の出力データにアクセスするようにさらに構成されており、
前記決定されたマッピングは、前記回転ユニットが前記第1のニューラルネットワーク層の前記出力に対応する前記第2のニューラルネットワーク層の層入力にアクセスするとき、前記アクティベーションメモリの前記メモリバンクでバンクコンフリクトが発生しないように構成されている、請求項4に記載の回路。
【請求項7】
前記第2のニューラルネットワーク層に割り当てられた前記属性値は、
前記第2のニューラルネットワーク層のストライド値、または
前記第2のニューラルネットワーク層のスキップ値である、請求項1に記載の回路。
【請求項8】
前記コアは、
前記回転ユニットを使用して、バンクコンフリクトの前記発生なく、前記アクティベーションメモリのメモリバンクの第1のセットに格納されている層入力にアクセスすることと、
前記クロスバーユニットを使用して、バンクコンフリクトの前記発生なく、前記アクティベーションメモリのメモリバンクの第2のセットに層出力を格納することと、を行うように構成されている、請求項1に記載の回路。
【請求項9】
前記コアは、
前記回転ユニットの回転ベースのデータアクセス操作を、前記クロスバーユニットのパターンベースのデータストレージ操作と同期させて、閾値使用率を超える前記計算ユニットの使用率を達成するように構成されている、請求項7に記載の回路。
【請求項10】
前記処理装置は、
外部コントローラから、前記コアで使用されるデータ値を含む命令を受信することと、
前記コアの構成要素に格納するために、少なくとも前記命令の前記データ値を前記コアに提供することと、を行うように構成されている、請求項1に記載の回路。
【請求項11】
前記処理装置は、
前記外部コントローラから受信された命令を処理することと、
前記命令の処理に応答して、前記命令のデータ値を使用して前記コアで1つ以上のレジスタを構成することと、を行うように構成されたデジタル信号プロセッサ(DSP)である、請求項10に記載の回路。
【請求項12】
前記コアは、前記1つ以上のレジスタにアクセスして、前記ニューラルネットワークの前記計算を定義する構成データを取得するように構成されており、前記計算は、前記外部コントローラから受信された前記命令から導出されたデータ値に基づいて前記コアの前記計算ユニットによって実行される、請求項11に記載の回路。
【請求項13】
複数のニューラルネットワーク層を含むニューラルネットワークの計算を実行するためのコンピュータ実装方法であって、前記方法は、
ハードウェア回路の処理装置によって、前記ニューラルネットワークの前記計算を実行するためのプログラミングデータを提供することと、
前記処理装置と通信する前記ハードウェア回路のコアによって、前記処理装置によって提供される前記プログラミングデータを受信することであって、前記コアは、層入力のセットを格納するように構成されたアクティベーションメモリ、および第1のニューラルネットワーク層のパラメータを格納するように構成されたパラメータメモリ、を含む、受信することと、
前記コアの回転ユニットによって、前記アクティベーションメモリに格納された前記層入力のセットにアクセスすることであって、前記回転ユニットは、前記コアによって受信された前記プログラミングデータに基づいて前記層入力のセットにアクセスして回転する、アクセスすることと、
前記コアの計算ユニットによって、前記回転ユニットによってアクセスされる前記層入力のセットの入力を受信することであって、前記入力は、前記第1のニューラルネットワーク層で処理するために受信される、受信することと、
前記計算ユニットによって、前記第1のニューラルネットワーク層のパラメータを受信することと、
前記計算ユニットによって、前記回転ユニットおよび前記パラメータによってアクセスされる前記入力を使用して、前記第1のニューラルネットワーク層の出力を生成することと、
前記コアのクロスバーユニットを使用して、前記プログラミングデータおよび第2のニューラルネットワーク層に割り当てられた属性値に基づくバンク割り当てパターンに従って、前記第1のニューラルネットワーク層の前記出力を前記アクティベーションメモリに格納することと、を含む、方法。
【請求項14】
前記回転ユニットによって、入力テンソルの要素を回転させることをさらに含み、前記入力テンソルの各要素は、前記アクティベーションメモリに格納された入力のセットのそれぞれの入力に対応する、請求項13に記載の方法。
【請求項15】
前記回転ユニットによって、第1の回転係数に基づいて、前記入力テンソルの第1の次元に沿って前記入力テンソルの要素を回転させることと、
前記回転ユニットによって、前記第1の回転係数とは異なる第2の回転係数に基づいて、前記入力テンソルの異なる第2の次元に沿って前記入力テンソルの要素を回転させることと、
前記回転ユニットによって、前記入力テンソルの回転要素に対応する入力を、前記計算ユニットの計算セルに提供することと、をさらに含む、請求項14に記載の方法。
【請求項16】
前記クロスバーユニットによって、前記バンク割り当てパターンの処理に応答して前記出力内のアクティベーションのマッピングを決定することをさらに含み、前記マッピングは、前記第2のニューラルネットワーク層に割り当てられた前記属性値に基づいて、前記第2のニューラルネットワーク層の前記アクティベーションを格納するための前記アクティベーションメモリのメモリバンクを識別する、請求項13に記載の方法。
【請求項17】
前記クロスバーユニットを使用して、前記ニューラルネットワークの異なるそれぞれの層に対して変化する構成可能なマッピングに基づいて、前記第1のニューラルネットワーク層の前記出力のためのデータを前記アクティベーションメモリのアドレス位置に割り当てることと、
前記クロスバーユニットを使用して、前記第2のニューラルネットワーク層の前記構成可能なマッピングに基づいて、前記アクティベーションメモリの特定の割り当てられたアドレス位置に前記第1のニューラルネットワーク層の前記出力の前記データを格納することと、をさらに含む、請求項16に記載の方法。
【請求項18】
前記回転ユニットは、前記第2のニューラルネットワーク層で処理するための前記第2のニューラルネットワーク層への層入力として、前記第1のニューラルネットワーク層の前記出力の出力データにアクセスするようにさらに構成されており、
前記決定されたマッピングは、前記回転ユニットが前記第1のニューラルネットワーク層の前記出力に対応する前記第2のニューラルネットワーク層の層入力にアクセスするとき、前記アクティベーションメモリの前記メモリバンクでバンクコンフリクトが発生しないように構成されている、請求項16に記載の方法。
【請求項19】
前記属性値に対応する前記第2のニューラルネットワーク層にストライド値を割り当てることと、
前記属性値に対応する前記第2のニューラルネットワーク層にスキップ値を割り当てることと、をさらに含む、請求項13に記載の方法。
【請求項20】
前記コアによって、前記回転ユニットを使用して、バンクコンフリクトの前記発生なく、前記アクティベーションメモリのメモリバンクの第1のセットに格納されている層入力にアクセスすることと、
前記コアによって、前記クロスバーユニットを使用して、バンクコンフリクトの前記発生なく、前記アクティベーションメモリのメモリバンクの第2のセットに層出力を格納することと、をさらに含む、請求項13に記載の方法。
【請求項21】
前記コアによって、前記回転ユニットの回転ベースのデータアクセス操作を、前記クロスバーユニットのパターンベースのデータストレージ操作と同期させて、閾値使用率を超える前記計算ユニットの使用率を達成することをさらに含む、請求項20に記載の方法。
【請求項22】
前記処理装置によって、および外部コントローラから、前記コアで使用されるデータ値を含む命令を受信することと、
前記処理装置によって、前記コアの構成要素に格納するために、少なくとも前記命令の前記データ値を前記コアに提供することと、をさらに含む、請求項13に記載の方法。
【請求項23】
前記処理装置は、デジタル信号プロセッサ(DSP)であり、前記方法は、
前記DSPによって、前記外部コントローラから受信された命令を処理することと、
前記命令の処理に応答して、前記DSPによって、前記命令のデータ値を使用して前記コアで1つ以上のレジスタを構成することと、をさらに含む、請求項22に記載の方法。
【請求項24】
前記コアによって、前記構成された1つ以上のレジスタにアクセスして、前記ニューラルネットワークの前記計算を定義する構成データを取得することと、
前記計算ユニットで、前記外部コントローラから受信された前記命令から導出されたデータ値に基づいて前記計算を実行することと、をさらに含む、請求項23に記載の方法。
【請求項25】
1つ以上の処理装置によって実行可能であり、
ハードウェア回路の処理装置によって、前記ニューラルネットワークの前記計算を実行するためのプログラミングデータを提供することと、
前記処理装置と通信する前記ハードウェア回路のコアによって、前記処理装置によって提供される前記プログラミングデータを受信することであって、前記コアは、層入力のセットを格納するように構成されたアクティベーションメモリ、および第1のニューラルネットワーク層のパラメータを格納するように構成されたパラメータメモリ、を含む、受信することと、
前記コアの回転ユニットによって、前記アクティベーションメモリに格納された前記層入力のセットにアクセスすることであって、前記回転ユニットは、前記コアによって受信された前記プログラミングデータに基づいて前記層入力のセットにアクセスして回転する、アクセスすることと、
前記コアの計算ユニットによって、前記回転ユニットによってアクセスされる前記層入力のセットの入力を受信することであって、前記入力は、前記第1のニューラルネットワーク層で処理するために受信される、受信することと、
前記計算ユニットによって、前記第1のニューラルネットワーク層のパラメータを受信することと、
前記計算ユニットによって、前記回転ユニットおよび前記パラメータによってアクセスされる前記入力を使用して、前記第1のニューラルネットワーク層の出力を生成することと、
前記コアのクロスバーユニットを使用して、前記プログラミングデータおよび第2のニューラルネットワーク層に割り当てられた属性値に基づくバンク割り当てパターンに従って、前記第1のニューラルネットワーク層の前記出力を前記アクティベーションメモリに格納することと、を含む操作の実行を引き起こす命令を格納するための1つ以上の非一時的機械可読記憶装置。
【発明の詳細な説明】
【背景技術】
【0001】
本明細書は、ハードウェアでのニューラルネットワーク推論の計算に関する。
【0002】
ニューラルネットワークは、ノードの1つ以上の層を採用して、受信された入力する例えば分類などの出力を生成する機械学習モデルである。一部のニューラルネットワークは、出力層に加えて1つ以上の隠れ層を含む。各隠れ層の出力は、ネットワーク内の1つ以上の他の層、例えば、他の隠れ層またはネットワークの出力層への入力として使用される。ネットワークの一部の層は、それぞれのパラメータセットのセットの現在の値に従って、受信された入力から出力を生成する。
【0003】
一部のニューラルネットワークは、1つ以上の畳み込みニューラルネットワーク層を含む。各畳み込みニューラルネットワーク層は、関連するカーネルのセットを有する。カーネルは、パラメータのテンソル、すなわち、多次元アレイとして表すことができる。各畳み込み層は、アクティベーション入力のセットを処理することもできる。アクティベーション入力のセットは、テンソルとして表すこともできる。
【発明の概要】
【0004】
本明細書は、ニューラルネットワーク計算を実施する専用ハードウェア回路について記載する。ハードウェア回路は、回路の構成要素と対話してニューラルネットワークワークロードの計算を高速化するコアを含む。コアは、ハードウェアまたはソフトウェアに実装され得る制御論理および複数の構成要素を含む。制御論理は、コア内の複数の構成要素の各々にニューラルネットワーク計算の命令を提供するために使用される。コアは、入力、入力アクティベーション、または出力、出力アクティベーションを格納するアクティベーションメモリと、畳み込みニューラルネットワーク(CNN)などのニューラルネットワークの1つの層の少なくとも一部のパラメータセットを格納するパラメータメモリとを含む。コアはまた、計算ユニット、回転ユニット、およびクロスバーユニットを含む。
【0005】
計算ユニットは、ニューラルネットワークの層を介して入力を処理するためのニューラルネットワーク計算を実施するために使用される。例えば、計算ユニットは、アクティベーションメモリからの入力アクティベーションとパラメータメモリからのパラメータとを処理して、層の出力のセットを生成する。回転ユニットは、アクティベーションメモリから入力を取得し、計算ユニットの計算セルに入力を提供する。回転ユニットは、アクティベーションメモリから入力を取得し、計算セルの全体的な使用を最適化する方法で入力を計算ユニットにルーティングする。クロスバーユニットは、バンク割り当てパターンを使用して、層の出力をアクティベーションメモリに格納する。クロスバーユニットは、格納された出力が後続の層への入力として取得されたときにアクティベーションメモリがバンクコンフリクトを経験しないように出力を格納する。
【0006】
ハードウェア回路は、コアに実装され得るカーネルロケーションメモリをさらに含む。カーネルロケーションメモリは、カーネル構造を表すパラメータインデックスおよび他のデータを格納する。カーネル構造は、ニューラルネットワークの層のパラメータのセットに対応し得る。コアは、カーネルロケーションメモリを使用して、カーネル構造内のゼロ値と非ゼロ値の配置など、様々なスパース性属性を持つカーネル構造をより効率的に処理する。コアは、カーネルロケーションメモリと対話して、カーネル構造の様々な空間次元にわたってゼロ値および非ゼロ値の任意の配置を有するカーネルなど、任意のカーネル形状をサポートする。
【0007】
ハードウェア回路は、従来の回路よりも効率が改善された深さ方向の畳み込みで並列処理を活用するように構成される。ハードウェア回路のコアおよび他の構成要素を使用して、並列処理を活用する機会を活用して、深さ方向の畳み込みだけでなく、密な畳み込みの実施も加速する。例えば、密な畳み込みでは、ハードウェア回路は、計算ユニットで使用可能な計算セルの数に基づいて、アクティベーションのセットに対して特定の数の入力チャネル(zin)および出力チャネル(zout)をサポートすることができる。
【0008】
深さ方向の畳み込みでは、入力チャネルを使用して複数の出力チャネルを生成することができ、例えば、単一の入力チャネルを使用して、1つの出力チャネル、2つの出力チャネル、または4つの出力チャネルを生成することができる。ハードウェア回路は、回転ユニットおよびクロスバーユニットを使用して、回路の様々なkxおよびky並列処理(例えば、x方向およびy方向のパラメータを使用する複数の積が同じサイクルで計算される並列計算)の特徴を実行する構成可能な論理を採用する。これらの特徴は、単一の入力チャネルから生成されるいくつかの出力チャネルに関する。構成可能な論理により、ハードウェア回路は、深さ方向の畳み込み中の計算ユニットの全体的な使用量を増やすことにより、深さ方向の畳み込みの計算効率を改善することができる。
【0009】
本明細書に記載されている主題の一態様は、複数のニューラルネットワーク層を含むニューラルネットワークの計算を実施するための回路で具体化することができる。回路は、データ信号を処理し、計算を実施するためのプログラミングデータを提供するように構成された処理デバイスと、処理デバイスによって提供されるプログラミングデータを受信するための処理デバイスとデータ通信しているコアと、を含むコアは、層入力のセットを格納するように構成されたアクティベーションメモリと、第1のニューラルネットワーク層のパラメータを格納するように構成されたパラメータメモリと、プログラミングデータに基づいて、アクティベーションメモリからの層入力のセットにアクセスして回転するように構成された回転ユニットと、複数の計算セルを有する計算ユニットと、を含む。
【0010】
複数の計算セルのうちの少なくとも1つの計算セルは、i)第1のニューラルネットワーク層について、回転ユニットによってアクセスされる層入力のセットの入力を受信すること、ii)第1のニューラルネットワーク層のパラメータを受信すること、およびiii)入力およびパラメータを使用して、第1のニューラルネットワーク層の出力の少なくとも一部を生成すること、を行うように構成されている。コアは、プログラミングデータおよび第2のニューラルネットワーク層に割り当てられた属性値に基づくバンク割り当てパターンに従って、第1のニューラルネットワーク層の出力をアクティベーションメモリに格納させるように構成されたクロスバーユニットをさらに含む。
【0011】
これらおよび他の実装形態は、各々、以下の特徴のうちの1つ以上を任意選択的に含み得る。例えば、いくつかの実装形態では、回転ユニットは、入力テンソルの要素を回転させるようにさらに構成され、入力テンソルの各要素は、アクティベーションメモリに格納された入力のセットのそれぞれの入力に対応する。
【0012】
いくつかの実装形態では、回転ユニットは、第1の回転係数に基づいて、入力テンソルの第1の次元に沿って入力テンソルの要素を回転させることと、第1の回転係数とは異なる第2の回転係数に基づいて、入力テンソルの異なる第2の次元に沿って入力テンソルの要素を回転させることと、入力テンソルの回転要素に対応する入力を、計算ユニットの計算セルに提供することと、を行うようにさらに構成されている。
【0013】
いくつかの実装形態では、クロスバーユニットは、バンク割り当てパターンの処理に応答して出力内のアクティベーションのマッピングを決定するようにさらに構成されており、マッピングは、第2のニューラルネットワーク層に割り当てられた属性値に基づいて、第2のニューラルネットワーク層のアクティベーションを格納するためのアクティベーションメモリのメモリバンクを識別する。いくつかの実装形態では、クロスバーユニットは、第1のニューラルネットワーク層の出力のデータをアクティベーションメモリの特定のアドレス位置に格納させるようにさらに構成されており、出力のデータは、ニューラルネットワークの異なるそれぞれの層に対して変化する構成可能なマッピングに基づいて、アクティベーションメモリのアドレス位置に割り当てられる。
【0014】
いくつかの実装形態では、回転ユニットは、第2のニューラルネットワーク層で処理するための第2のニューラルネットワーク層への層入力として、第1のニューラルネットワーク層の出力の出力データにアクセスするようにさらに構成されており、決定されたマッピングは、回転ユニットが第1のニューラルネットワーク層の出力に対応する第2のニューラルネットワーク層の層入力にアクセスするとき、アクティベーションメモリのメモリバンクでバンクコンフリクトが発生しないように構成されている。
【0015】
いくつかの実装形態では、第2のニューラルネットワーク層に割り当てられた属性値は、第2のニューラルネットワーク層のストライド値、または第2のニューラルネットワーク層のスキップ値である。いくつかの実装形態では、コアは、回転ユニットを使用して、バンクコンフリクトの発生なく、アクティベーションメモリのメモリバンクの第1のセットに格納されている層入力にアクセスすることと、クロスバーユニットを使用して、バンクコンフリクトの発生なく、アクティベーションメモリのメモリバンクの第2のセットに層出力を格納することと、を行うように構成されている。
【0016】
いくつかの実装形態では、コアは、回転ユニットの回転ベースのデータアクセス操作を、クロスバーユニットのパターンベースのデータストレージ操作と同期させて、閾値使用率を超える計算ユニットの使用率を達成するように構成されている。いくつかの実装形態では、処理デバイスは、外部コントローラから、コアで使用されるデータ値を含む命令を受信することと、コアの構成要素に格納するために、少なくとも命令のデータ値をコアに提供することと、を行うように構成されている。
【0017】
いくつかの実装形態では、処理デバイスは、外部コントローラから受信された命令を処理することと、命令の処理に応答して、命令のデータ値を使用してコアで1つ以上のレジスタを構成することと、を行うように構成されたデジタル信号プロセッサ(DSP)である。いくつかの実装形態では、コアは、1つ以上のレジスタにアクセスして、ニューラルネットワークの計算を定義する構成データを取得するように構成されており、計算は、外部コントローラから受信された命令から導出されたデータ値に基づいてコアの計算ユニットによって実施される。
【0018】
本明細書に記載されている主題の一態様は、複数のニューラルネットワーク層を含むニューラルネットワークの計算を実施するためのコンピュータ実装方法で具体化することができる。この方法は、ハードウェア回路の処理デバイスによって、ニューラルネットワークの計算を実施するためのプログラミングデータを提供することと、処理デバイスと通信するハードウェア回路のコアによって、処理デバイスによって提供されるプログラミングデータを受信することであって、コアは、層入力のセットを格納するように構成されたアクティベーションメモリ、および第1のニューラルネットワーク層のパラメータを格納するように構成されたパラメータメモリ、を含む、受信することと、コアの回転ユニットによって、アクティベーションメモリに格納された層入力のセットにアクセスすることであって、回転ユニットは、コアによって受信されたプログラミングデータに基づいて層入力のセットにアクセスして回転する、アクセスすることと、を含む。
【0019】
方法は、コアの計算ユニットによって、回転ユニットによってアクセスされる層入力のセットの入力を受信することであって、入力は、第1のニューラルネットワーク層で処理するために受信される、受信することと、計算ユニットによって、第1のニューラルネットワーク層のパラメータを受信することと、計算ユニットによって、回転ユニットおよびパラメータによってアクセスされる入力を使用して、第1のニューラルネットワーク層の出力を生成することと、コアのクロスバーユニットを使用して、プログラミングデータおよび第2のニューラルネットワーク層に割り当てられた属性値に基づくバンク割り当てパターンに従って、第1のニューラルネットワーク層の出力をアクティベーションメモリに格納することと、をさらに含む。
【0020】
これらおよび他の実装形態は、各々、以下の特徴のうちの1つ以上を任意選択的に含み得る。例えば、いくつかの実装形態では、方法は、回転ユニットによって、入力テンソルの要素を回転させることをさらに含み、入力テンソルの各要素は、アクティベーションメモリに格納された入力のセットのそれぞれの入力に対応する。
【0021】
いくつかの実装形態では、方法は、回転ユニットによって、第1の回転係数に基づいて、入力テンソルの第1の次元に沿って入力テンソルの要素を回転させることと、回転ユニットによって、第1の回転係数とは異なる第2の回転係数に基づいて、入力テンソルの異なる第2の次元に沿って入力テンソルの要素を回転させることと、回転ユニットによって、入力テンソルの回転要素に対応する入力を、計算ユニットの計算セルに提供することと、をさらに含む。
【0022】
いくつかの実装形態では、方法は、クロスバーユニットによって、バンク割り当てパターンの処理に応答して出力内のアクティベーションのマッピングを決定することをさらに含み、マッピングは、第2のニューラルネットワーク層に割り当てられた属性値に基づいて、第2のニューラルネットワーク層のアクティベーションを格納するためのアクティベーションメモリのメモリバンクを識別する。
【0023】
いくつかの実装形態では、方法は、クロスバーユニットを使用して、ニューラルネットワークの異なるそれぞれの層に対して変化する構成可能なマッピングに基づいて、第1のニューラルネットワーク層の出力のためのデータをアクティベーションメモリのアドレス位置に割り当てることと、クロスバーユニットを使用して、第2のニューラルネットワーク層の構成可能なマッピングに基づいて、アクティベーションメモリの特定の割り当てられたアドレス位置に第1のニューラルネットワーク層の出力のデータを格納することと、をさらに含む。
【0024】
いくつかの実装形態では、回転ユニットは、第2のニューラルネットワーク層で処理するための第2のニューラルネットワーク層への層入力として、第1のニューラルネットワーク層の出力の出力データにアクセスするようにさらに構成されており、決定されたマッピングは、回転ユニットが第1のニューラルネットワーク層の出力に対応する第2のニューラルネットワーク層の層入力にアクセスするとき、アクティベーションメモリのメモリバンクでバンクコンフリクトが発生しないように構成されている。
【0025】
いくつかの実装形態では、方法は、属性値に対応する第2のニューラルネットワーク層にストライド値を割り当てることと、属性値に対応する第2のニューラルネットワーク層にスキップ値を割り当てることと、をさらに含む。いくつかの実装形態では、方法は、コアによって、回転ユニットを使用して、バンクコンフリクトの発生なく、アクティベーションメモリのメモリバンクの第1のセットに格納されている層入力にアクセスすることと、コアによって、クロスバーユニットを使用して、バンクコンフリクトの発生なく、アクティベーションメモリのメモリバンクの第2のセットに層出力を格納することと、をさらに含む。
【0026】
いくつかの実装形態では、方法は、コアによって、回転ユニットの回転ベースのデータアクセス操作を、クロスバーユニットのパターンベースのデータストレージ操作と同期させて、閾値使用率を超える計算ユニットの使用率を達成することをさらに含む。いくつかの実装形態では、方法は、処理デバイスによって、および外部コントローラから、コアで使用されるデータ値を含む命令を受信することと、処理デバイスによって、コアの構成要素に格納するために、少なくとも命令のデータ値をコアに提供することと、をさらに含む。
【0027】
いくつかの実装形態では、処理デバイスは、デジタル信号プロセッサ(DSP)であり、方法は、DSPによって、外部コントローラから受信された命令を処理することと、命令の処理に応答して、DSPによって、命令のデータ値を使用してコアで1つ以上のレジスタを構成することと、をさらに含む。いくつかの実装形態では、コアによって、構成された1つ以上のレジスタにアクセスして、ニューラルネットワークの計算を定義する構成データを取得することと、計算ユニットで、外部コントローラから受信された命令から導出されたデータ値に基づいて計算を実施することと。
【0028】
本明細書に記載されている主題の一態様は、複数のニューラルネットワーク層を含むニューラルネットワークの計算を実施するための回路で具体化することができる。回路は、データ信号を処理し、計算を実施するためのプログラミングデータを提供するように構成された処理デバイスを含む。回路は、処理デバイスによって提供されるプログラミングデータを受信するための処理デバイスとデータ通信しているコアを含む。回路は、コアに配設されたカーネルロケーションメモリを含む。カーネルロケーションメモリは、プログラミングデータによって識別されるデータ値を受信するように構成されており、データ値は、1つ以上のニューラルネットワーク層のパラメータを含む。カーネルロケーションメモリは、1つ以上のニューラルネットワーク層の各々のパラメータのそれぞれのセットを格納するように構成されており、パラメータのそれぞれのセットは、別個のカーネル構造に対応する。各カーネル構造は、それぞれのスパース性属性と、カーネル構造のスパース性またはカーネル構造の次元性によって特徴付けられるそれぞれのカーネル形状とを有する。カーネルロケーションメモリは、コアの計算ユニットにロードするためのパラメータの1つ以上のセットからのパラメータ値を提供するように構成され、パラメータのセットの少なくとも1つは、カーネル構造の1つ以上の空間次元にわたって任意のカーネル形状を有するカーネル構造に対応する。少なくとも1セットのパラメータの各パラメータ値は、非ゼロのパラメータ値を有する。
【0029】
これらおよび他の実装形態は、各々、以下の特徴のうちの1つ以上を任意選択的に含み得る。例えば、いくつかの実装形態では、回路は、コアでアクセス可能な制御論理を含む。制御論理は、入力テンソルの入力を処理するために使用される1つ以上のループネストに対応する1つ以上のループインデックスを変更することであって、1つ以上のループインデックスの各々は、カーネルロケーションメモリから取得された任意のカーネル構造のデータに基づいて変更される、変更することと、入力テンソルの入力の一部を処理するために使用されるループネストの少なくとも1つのループインデックスを変更することに応答して、任意のカーネル構造の非ゼロのパラメータ値のみをロードすることと、を行うように構成される。
【0030】
いくつかの実装形態では、制御論理は、カーネルロケーションメモリに格納されたカーネルロケーションメモリワードのデータフィールドによって識別されるそれぞれのデータ値を変更することによって、1つ以上のループネストに対応する1つ以上のループインデックスを変更するように構成される。いくつかの実装形態では、カーネルロケーションメモリは、1つ以上のニューラルネットワーク層のパラメータを格納するように構成され、パラメータは、複数の任意の形状のカーネル構造に対応し、各カーネル構造は、多次元テンソルによって表される。
【0031】
本明細書に記載されている主題の一態様は、複数のニューラルネットワーク層を含む畳み込みニューラルネットワークの計算を実施するように構成された回路で具体化することができる。この回路は、コアの外部の処理装置によって提供されるプログラミングデータの受信に応答して計算を実施するように構成されたコアを含む。コアは、計算ユニットに配置された計算セルを使用して層出力を計算するように構成された計算ユニットを含む。層出力は、畳み込みニューラルネットワーク層で処理される入力テンソルの入力とパラメータテンソルによって表される畳み込みニューラルネットワーク層のパラメータとの間の乗算から、畳み込みニューラルネットワーク層に対して計算される。コアは、畳み込みのタイプを指定するプログラミングデータの操作モードに基づいて、入力テンソルの入力チャネルの入力のルーティングおよびパラメータテンソルのパラメータを決定するように構成された制御論理を含む。制御論理は、決定されたルーティングに基づいて、入力チャネルの入力およびパラメータテンソルのパラメータを計算ユニットにルーティングするように構成され、計算ユニットに、プログラミングデータによって指定された畳み込みのタイプに従って、複数の出力チャネルに対して生成された出力からの層出力を計算させる。複数の出力チャネルの各々の出力は、計算ユニットの閾値量の乗数および計算セルを使用して、少なくとも1サイクルで計算ユニットで同時に計算される。
【0032】
これらおよび他の実装形態は、各々、以下の特徴のうちの1つ以上を任意選択的に含み得る。例えば、いくつかの実装形態では、畳み込みのタイプは、深さ方向の畳み込みまたは密な畳み込みの計算に対応し、深さ方向の畳み込みは、入力チャネルの要素に対応する単一のアクティベーションを、多次元パラメータテンソルの少なくとも2つの次元にわたる複数のパラメータで畳み込むことを含む。
【0033】
いくつかの実装形態では、回路は、入力チャネルの入力を処理して複数の出力チャネルを生成することを含む深さ方向の畳み込みの計算を実施するように構成され、深さ方向の畳み込みの計算の少なくとも一部は、計算ユニットの計算セルのハードウェア構成に基づいて同時に実施される。いくつかの実装形態では、回路は、計算ユニットの計算セルの閾値パーセンテージの使用率に基づいて、少なくとも入力チャネルの1つ以上の入力と同時に畳み込まれるパラメータテンソルの最大次元数によって特徴付けられる並列処理の尺度を有するように構成される。
【0034】
いくつかの実装形態では、制御論理は、コアの外部の処理デバイスによって提供されるプログラミングデータに基づいてコアによって構成可能であり、制御論理は、回路に含まれる複数のデータ処理パスの1つ以上を選択するように構成可能であり、複数のデータ処理パスは、回路の2つ以上の構成要素間の接続パターンに基づく。
【0035】
本明細書に記載の主題の特定の実施形態は、以下の利点の1つ以上を実現するように実装することができる。構成要素のレイアウトにより、ニューラルネットワークプロセッサの回路は、計算をより効率的に実施することができる。プロセッサは、回転ユニットおよびクロスバーユニットを含み、これらは、層出力(例えば、アクティベーション)をアクティベーションメモリに格納すること、ならびにメモリからアクティベーションを取得または読み取ることを調整するために使用される。プロセッサは、回転ユニットおよびクロスバーユニットを使用して、層のパラメータをパラメータメモリにロードし、ならびにメモリからパラメータを読み取るように構成することもできる。
【0036】
プロセッサは、特定の構成要素の特徴を使用して、回路の性能を低下させる可能性のあるバンクコンフリクトを経験することなく、同じサイクルで特定のメモリ操作を達成することができる。プロセッサは、特定の構成要素の特徴を使用して、プロセッサの計算ユニット内の各計算コア/セルに対して実質的に高い使用率を取得することにより、複数のニューラルネットワーク計算の実施を最大化することもできる。プロセッサは、計算ユニットの高い使用率を損なうことなく、所与のニューラルネットワーク計算、例えば、畳み込み層を伴う計算など、ストライド値およびスキップ値の範囲をサポートするように構成される。
【0037】
本明細書の主題の1つ以上の実施形態の詳細を、添付の図面および以下の説明に記載する。主題の他の特徴、態様、および利点は、明細書、図面、および特許請求の範囲から、明らかになるであろう。
【図面の簡単な説明】
【0038】
【
図1】例示的なニューラルネットワーク処理システムを示す。
【
図2】ニューラルネットワーク処理システムの例示的なデータルーティングトポロジーを示す。
【
図3】畳み込み計算を実施するための入力データの取得を示す例示的な図を示す。
【
図4】ニューラルネットワークの計算を実施するための入力データの処理を示す例示的な図を示す。
【
図5】入力データを処理してニューラルネットワークの計算を実施することを示す別の例示的な図を示す。
【
図6A】入力データと出力データの例示的なバンク割り当て、および所与のストライド値の入力データの処理を示す図を示す。
【
図6B】入力データと出力データの例示的なバンク割り当て、および所与のストライド値の入力データの処理を示す図を示す。
【
図7】例示的なカーネル構造、ネストされたforループ、およびカーネルロケーションメモリのメモリワードを示す図を示す。
【
図8】カーネルロケーションメモリのメモリアドレスに関する情報を含む例示的なテーブルを示す。
【
図9-12】深さ方向の畳み込みの入力データの処理を示す例示的な図を各々示す。
【
図13】入力データを処理して出力データを生成する深さ方向の畳み込み層を示す例示的な図を示す。
【
図14】深さ方向の畳み込みにおける並列処理の入力ウィンドウを示す例示的な図を示す。
【0039】
様々な図面の中の同様の参照番号および名称は、同様の要素を示す。
【発明を実施するための形態】
【0040】
複数の層を有するニューラルネットワークを使用して、推論を計算することができる。例えば、入力が与えられると、ニューラルネットワークは、入力の推論を計算することができる。ニューラルネットワークは、ニューラルネットワークの各層を介して入力を処理することによって、この推論を計算する。特に、ニューラルネットワークの層間の接続は、有向グラフで表すことができる。したがって、ネットワーク内の所与の層は、(i)有向グラフの入力エッジによって所与の層に接続されている層によって生成された出力を入力として受信し、(ii)有向グラフの出力エッジによって所与の層に接続されている各層に、所与の層によって生成された出力を入力として提供するように構成される。すなわち、任意の特定の層は、複数の入力、複数の出力、またはその両方を受信することができる。一部またはすべての層は、パラメータのそれぞれのセットを有する。これらの各層は入力を受信し、層のパラメータのセットに従って入力を処理して出力を生成する。
【0041】
したがって、受信された入力から推論を計算するために、ニューラルネットワークは入力を受信し、ネットワーク内の各ニューラルネットワーク層を介してそれを処理して推論を生成し、1つのニューラルネットワーク層からの出力が、1つ以上の他のニューラルネットワーク層に入力として提供される。ニューラルネットワーク層へのデータ入力、例えば、ニューラルネットワークへの入力または有向グラフ内の別の層の出力は、層入力または層への入力と呼ばれ得る。場合によっては、ニューラルネットワークの1つの層への入力は、ニューラルネットワークの別の層の出力として生成されたアクティベーション値を含むアクティベーションまたはアクティベーションのセットである。例えば、第1の層で層入力を処理することは、第1の層がアクティベーション関数を適用して、第1の層の出力であるアクティベーション値のセットを生成することを伴い得る。次いで、第1の層によって出力されたアクティベーションは、第2の層で処理するために、ニューラルネットワークの第2の層への層入力として提供される。
【0042】
図1は、例示的なシステム100を示している。システム100は、ニューラルネットワーク計算を実施するための1つ以上の専用集積回路のニューラルネットワーク処理システムである。システム100は、例えば、例示的なベクトル処理ユニットのコア102を含む。いくつかの実装形態では、コア102は、ニューラルネットワーク計算の性能を加速するように構成されたベクトルプロセッサコアであり得る。コア102は、システム100の構成要素と対話して、ニューラルネットワークを訓練するための、またはニューラルネットワークを使用して推論ワークロードを処理するための計算の実施を加速する。コア102は、制御論理106と、システム100のソフトウェアまたはハードウェア特徴で具体化され得る複数の構成要素とを含む。コア102は、制御論理106を使用して、コア102内の複数の構成要素の各々に命令を提供する。命令は、ニューラルネットワーク計算のデータを含むことができる。いくつかの実装形態では、命令は、外部コントローラまたはホストデバイスからコア102で受信される。
【0043】
複数のハードウェア構成要素の各々は、命令を低レベルの制御信号に変換して、システム100にニューラルネットワークの計算を実施させることができる。一般に、制御信号は、システム100内のデータフロー、例えば、計算のためのデータが少なくともコア102の構成要素の特徴をどのように移動するかを調節する。いくつかの実装形態では、制御論理106は、コア102内の構成要素を制御するためのクロック信号を生成するためにプロセッサによって実行されるクロック信号またはプログラムコードを生成するプロセッサである。制御論理106は、クロック信号のタイミングを使用して、適切な時間に、システム100の各構成要素に命令および制御信号を送信することができる。他の実装形態では、外部コントローラなどのホストデバイスは、コントローラの外部プロセッサからのクロック信号を渡す。
【0044】
コア102は、アクティベーションメモリ108およびパラメータメモリ116を含む。アクティベーションメモリ108は、多層ニューラルネットワークの1つ以上の層を介して処理される入力または入力アクティベーションなどのデータを格納するように構成される。アクティベーションメモリ108はまた、層の出力または出力アクティベーションを格納するように構成される。上記のように、ニューラルネットワークの第1の層は、層入力を受信し、アクティベーション(例えば、層出力)を生成する。第1の層は、ニューラルネットワークに非線形性を提供する、ReLU、シグモイド、またはtanhなどの非線形関数を表すアクティベーション関数を有していてもよい(有していなくてもよい)。第1の層によって生成されたアクティベーションは、ニューラルネットワークの第2の層以降の層で処理することができる。パラメータメモリ116は、多層ニューラルネットワークの1つ以上の層のパラメータのセットを格納するように構成することができる。
【0045】
いくつかの実装形態では、システム100は、複数のコア102および複数の計算ファブリック104(以下で説明する)を含む。複数のコアの各コア102は、アクティベーションメモリ108およびパラメータメモリ116を含み、それぞれの計算ファブリック104と通信するように構成される。この実装形態では、1つ以上のコア102は、それぞれのパラメータメモリ116を使用して、所与のコア102に割り当てられた特定の層または層の一部のパラメータを格納することができる。一般に、ニューラルネットワークの層を介した入力の処理は、例えば乗算や加算などの数学演算を実施することによって達成される。
【0046】
以下で説明するように、動作は、システム100のハードウェア回路上の例示的なニューラルネットワークなどの例示的なニューラルネットワークプロセッサの計算回路を使用して実施される。数学演算は、入力の処理に使用されるニューラルネットワークのタイプまたはニューラルネットワーク層のタイプに基づいて異なる場合がある。
【0047】
畳み込みニューラルネットワーク(CNN)は、ニューラルネットワークへの入力が画像の画像ピクセルデータまたは複数の場所にある特徴を含む他のデータに対応するという推定に基づいて構成することができる。例えば、入力のセットは、例示的なデジタル画像(例えば、車両の周囲の画像)の色の特徴を表すテンソルなどの多次元データ構造を形成することができる。いくつかの実装形態では、ニューラルネットワークへの入力は、車両の異なるデバイスおよびセンサから取得されたデータ、点群データ、特定の特徴を含むオーディオデータ、または複数の時間ステップの各々での生のオーディオ、または様々なタイプの一次元または多次元データなど、様々な他のタイプのデータに対応する。畳み込みニューラルネットワークの畳み込み層は、入力を処理して、データ構造の入力によって表される画像の特徴を変換することができる。例えば、入力は、データ構造の所与の次元に沿った入力データおよび畳み込み層のパラメータのセットを使用して、内積演算を実施することによって処理される。
【0048】
畳み込み層の計算の実施は、データ構造内の入力の一部に1つ以上のカーネルセットを適用することを含み得る。システムが計算を実施する方法は、例示的な多層ニューラルネットワークまたはディープニューラルネットワークロードをサポートするディープニューラルネットワークの各層の特定のプロパティに基づき得る。ディープニューラルネットワークは、1つ以上の畳み込みタワー(または層)および他の計算層を含むことができる。特に、例えばコンピュータビジョンの用途の場合、これらの畳み込みタワーは、実施される推論計算の大部分を占めることがよくある。CNNの畳み込み層は、幅次元、高さ次元、深さ次元の三次元に配置された人工ニューロンのセットを有することができる。深さ次元は、入力ボリュームまたはアクティベーションボリュームの三次元に対応し、画像のそれぞれのカラーチャネルを表すことができる。例えば、入力画像は、データの入力ボリューム(例えば、アクティベーション)を形成することができ、ボリュームは、次元32x32x3(それぞれ幅、高さ、奥行き)を有する。深さの次元3は、赤(R)、緑(G)、および青(B)のRGBカラーチャネルに対応することができる。
【0049】
一般に、CNNの層は、三次元の入力ボリューム(入力)をニューロンアクティベーション(アクティベーション)の多次元出力ボリュームに変換するように構成される。例えば、32x32x3の3D入力構造は、この場合は、幅32、高さ32の画像で、3つのカラーチャネルR、G、Bを有する、例示的な画像の生のピクセル値を保持する。システム100のニューラルネットワークの畳み込み層は、入力ボリューム内の局所領域に接続され得るニューロンの出力を計算する。畳み込み層の各ニューロンは、空間的に入力ボリュームのローカル領域にのみ接続することができるが、入力ボリュームの全深度(例えば、すべてのカラーチャネル)に接続することができる。畳み込み層のニューロンのセットの場合、層は、ニューロンのパラメータ(重み)とニューロンが接続されている入力ボリューム内の特定の領域との間の内積を計算する。この計算により、32×32×12などのボリュームになり得、12は、計算に使用されるカーネルの数に対応する。領域の入力へのニューロンの接続は、入力ボリュームの深さに等しい深さ軸に沿った空間範囲を有することができる。空間範囲は、カーネルの空間次元(x次元およびy次元など)に対応する。
【0050】
カーネルのセットは、幅および高さを含み、入力ボリュームの深さまで広がる空間特性を有することができる。層のカーネルの各セットは、層に提供される1つ以上の入力セットに適用される。すなわち、各カーネルまたはカーネルのセットについて、システム100は、多次元的に表すことができるカーネルを、層入力の第1の部分(例えば、入力ボリュームまたは入力テンソルを形成する)上にオーバーレイすることができ、多次元的に表現され得る。例えば、CNNの第1の層のカーネルのセットは、幅5ピクセル、高さ5ピクセル、カーネルが適用されている入力ボリュームのカラーチャネルに対応する深さ3、および出力チャネルの数に対応する16の出力次元に対応するサイズ5×5×3×16を有し得る。この文脈において、カーネルのセットは、16のカーネルを含み、その結果、畳み込みの出力は、16の深さの次元を有する。
【0051】
次いで、システムは、オーバーラップした要素から内積を計算することができる。例えば、システム100は、入力ボリュームの幅および高さにわたって各カーネルを畳み込み(またはスライドさせ)、カーネルのエントリと画像の位置または領域の入力との間の内積を計算することができる。畳み込み出力の各出力値は、カーネルと例示的な入力テンソルからの入力の何らかのセットとの間の内積の結果である。内積は、単一層の入力に対応する畳み込み出力、例えば、オーバーラップした多次元空間で左上の位置を有するアクティベーション要素をもたらす可能性がある。上記で説明したように、畳み込み層のニューロンは、複数の入力を含む入力ボリュームの領域に接続することができる。システム100は、入力ボリュームの各入力にわたって各カーネルを畳み込むことができる。システム100は、例えば、領域内の各入力上で各カーネルを移動(またはスライド)させることによって、この畳み込み演算を実施する。
【0052】
システム100は、所与の畳み込み層のストライド値に基づいて、領域の入力上で各カーネルを移動させる。例えば、ストライドが1に設定されているとき、システム100は、一度に1ピクセル(または入力)ずつ、領域上でカーネルを移動させる。同様に、ストライドが2であるとき、システム100は、一度に2ピクセルずつ、領域上でカーネルを移動させる。したがって、カーネルは、層のストライド値に基づいてシフトすることができ、システム100は、領域の入力が対応する内積を有するまで、このプロセスを繰り返し実施することができる。ストライド値に関するのは、スキップ値または拡張値である。スキップ値は、入力がニューラルネットワーク層で処理するためにロードされるときにスキップされる、入力ボリュームの領域内の入力の1つ以上のセット(例えば、2×2)を識別することができる。いくつかの実装形態では、画像のピクセルの入力ボリュームは、例えば、画像の境界領域の周りにゼロを「埋める」ことができる。このゼロパディングは、出力ボリュームの空間サイズを制御するために使用される。
【0053】
上で説明したように、CNNの畳み込み層は、三次元の入力ボリューム(領域の入力)をニューロンアクティベーションの多次元の出力ボリュームに変換するように構成される。例えば、カーネルが入力ボリュームの幅および高さにわたって畳み込まれると、システム100は、ストライド値に基づいて1つ以上の空間位置でカーネルを畳み込む結果を含む多次元アクティベーションマップを生成する。場合によっては、ストライド値を大きくすると、空間的にアクティベーションの出力量が少なくなる。いくつかの実装形態では、出力がニューラルネットワークの後続の層に送信される前に、アクティベーション関数を畳み込みの出力に適用することができる。
【0054】
例示的な畳み込み層は、層のプロパティを表す層の1つ以上の制御パラメータを有することができる。例えば、制御パラメータは、カーネルの数K、カーネルの空間範囲F、ストライド(またはスキップ)S、およびゼロパディングの量Pを含み得る。これらのパラメータの数値、層への入力、層のカーネルのパラメータ値は、層で発生する計算と層の出力ボリュームのサイズを形成する。一実装形態では、出力ボリュームの空間サイズは、式(W-F+2P)/S+1を使用して、入力ボリュームサイズWの関数として計算される。例えば、入力テンソルは、サイズ[227×227×3]のピクセル入力ボリュームを表すことができる。ニューラルネットワークの畳み込み層は、空間範囲値F=11、ストライド値S=4、およびゼロパディングなし(P=0)を有し得る。上記の式および層カーネル量K=96を使用して、システム100は、サイズ[55×55×96]の畳み込み層出力ボリュームをもたらす層の計算を実施し、55は[(227-11+0)/4+1=55]から取得される。
【0055】
ニューラルネットワークの畳み込み層または他の層の計算(例えば、内積計算)は、システム100のハードウェア回路の複数の計算セルを使用して、数学演算、例えば、乗算および加算を実施することを伴う。ハードウェア回路の設計により、ニューラルネットワークの層の計算を実施するときに回路の計算セルを完全に利用するシステムの能力が制限される可能性がある。
【0056】
本明細書に記載されている技術に基づいて、システム100は、様々なニューラルネットワーク層の計算の実施をネイティブにサポートすることができる。例えば、システム100は、異なる特性を有する畳み込み層をサポートするように構成することができ、同時に、異なる層の各々に対して特定のタイプのニューラルネットワーク計算を実施するために利用される計算セル(以下で説明)のパーセンテージの改善を達成する。いくつかの実装形態では、畳み込み層の様々なプロパティは、カーネルを表すパラメータのマトリックス構造のサイズ、層の深さを表し、入力のデータ構造に適用されるカーネルの量、またはカーネルを入力領域に適用するためのストライド(またはスキップ)値に対応し得る。
【0057】
いくつかの実装形態では、ニューラルネットワーク層によって処理される多次元データ構造は、例えば、道路または地形を横断する車両の画像センサによってキャプチャされたデジタル画像など、デジタル画像の入力特徴を表す。これらの実装形態では、ニューラルネットワークの様々な層を介して入力を処理することにより、システム100は、車両が地形を横断する間に車両をナビゲートするために使用できる推論の複数のセットを計算する。
【0058】
コア102はまた、回転ユニット110、計算ユニット112、およびクロスバーユニット114を含む。制御論理106は、アクティベーション入力のセットおよびパラメータ入力のセットを計算ユニット112に送信するために使用される。計算ユニット112は、例えば、乗算および加算などの数学演算を実施するための回路を含む。この回路は、アクティベーション入力とパラメータのセットを使用して数学演算を実施するように構成された複数の計算セルを含む。例えば、計算ユニット112は、アクティベーションメモリ108およびパラメータメモリ116からそれぞれ取得されるアクティベーションとパラメータのセットを各々受信する1つ以上の積和セル(MAC)を含むことができる。計算ユニット112は、入力およびパラメータを処理して、出力のセットを生成する。
【0059】
回転ユニット110は、アクティベーションメモリ108と通信して、層で処理するための入力データを取得し、取得した入力を計算ユニット112のMACに提供する。以下で説明するように、回転ユニット110は、アクティベーションメモリ108のメモリアドレス位置からアクセスされる層入力を受信して回転させる。層入力は、制御論理106によって決定された回転命令に基づいて回転される。回転命令は、回転の量を定義し、入力がアドレス位置から取得され、計算ユニットでのMACの使用を最適化する方法で計算ユニット112に移動されることを可能にする。いくつかの実装形態では、システム100の回路の例示的な論理接続は、データ(入力またはアクティベーション)をアクティベーションメモリ108から受信でき、計算ユニット112に提供できるようにするために、回路の一部で論理的に接続または物理的に結合されている回転ユニット110を含むことができる。同様に、クロスバーユニット114は、計算ユニット112の出力データがメモリバンクに格納するためにアクティベーションメモリ108に提供されることを可能にするために、計算ユニット112とアクティベーションメモリ108との間に論理的に接続することができ、一方、計算ユニット112は、計算を実施するためにパラメータメモリから重みを受信するために、パラメータメモリ116に論理的に結合または接続される。他の実装形態では、回転ユニット110とクロスバーユニット114は両方とも、例えば、論理的に、アクティベーションメモリ108と計算ユニット112との間に位置する。いくつかの実装形態では、計算ユニット112の入力および出力は、多次元データ構造である。
【0060】
本明細書に記載されている専用回路とは異なるアーキテクチャを採用しているニューラルネットワークプロセッサは、特定のメモリ操作中にメモリバンクコンフリクトを経験する可能性がある。バンクコンフリクトにより、同じサイクルでメモリからのデータの読み取りおよび書き込みが妨げられる可能性があり、ニューラルネットプロセッサの性能と計算効率が低下する可能性がある。
【0061】
一般に、回路は、メモリの複数のバンク(「メモリバンク」)に分割された共有メモリのセクション、および複数のメモリバンク内の各バンクのアドレス位置のそれぞれのセットを有し得る。場合によっては、各バンクは、一度に1つのデータセットしか対処することができない。そのため、システムが同じバンクから(または同じバンクに)データをロード(または格納)しようとする場合、メモリバンクのアドレス位置へのアクセスをシリアル化する必要があり、すなわち、システムは、同じバンク内の2つの位置に並行してアクセスすることはできない。この必要なシリアル化は、バンクコンフリクトと呼ばれる。例えば、同じバンクに2つのメモリロケーション(アドレス)が発生すると、バンクコンフリクトが発生し、アドレスロケーションへのアクセスがシリアルに処理されるため、パラレルアクセスの利点が失われる。以下でより詳細に説明するように、回転ユニット110およびクロスバーユニット114を使用して、システム100でメモリバンクコンフリクトを発生させることなく、同じサイクルでアクティベーションメモリ108およびパラメータメモリ116からデータを取得するか、またはそこにデータを格納することができる。
【0062】
回転ユニット110は、層を介して処理するためにアクティベーションメモリ108からデータを取得するように構成される。上記のように、データは、デジタル画像の一部に関連付けられた多次元データ構造(例えば、アレイまたはテンソル)を形成するアクティベーションのセットであり得る。この多次元データ構造は、以降、例示的なbx×by×bz、3Dテンソルなどの入力アクティベーションの基本テンソルユニットと呼ばれるものとする。以下、基本テンソルユニットは、アクティベーションメモリ108から一度にロードして回転ユニット110に渡すことができる3Dテンソル構造を指し、システム100で処理される基本データユニットである。コア102では、ニューラルネットワークの層は、特定のサイズの入力を処理し、別のサイズの出力を生成することができる。出力は、アクティベーションメモリ108に格納されるアクティベーションのセットであり得る。アクティベーションのセットは、後でアクティベーションメモリ108のアドレス位置を使用して取得され、ニューラルネットワークの別の層への入力として提供される。いくつかの実装形態では、回転ユニット110は、アクティベーションメモリ108のアドレス位置からアクセスされるアクティベーションのセットを回転させるために使用される。
【0063】
例として、ニューラルネットワークは、三次元テンソルに関連付けられたデータを処理するように構成された層1、2、および3を含むことができる。層1は、170×170×3の画像を処理し、アクティベーション値の28×28×96テンソルを出力することができる。アクティベーション値の28×28×96テンソルは、層2~3によって処理され、層3の出力を使用してニューラルネットワークの推論を生成することができる。いくつかの実装形態では、層1~3は、畳み込み層または完全に接続された層であり得る。場合によっては、1つ以上の層は、プーリング層、非線形層、または分類層であり得る。
【0064】
クロスバーユニット114は、制御論理106から取得された特定の計算命令に基づいて特定のバンク割り当てパターンを生成するために使用される。バンク割り当てパターンは、1つの層による処理後にデータを格納し、単一のクロックサイクル中に実施される複数の読み取り操作でメモリバンクコンフリクトが発生することなく、次の層による処理のために読み戻すことができるように生成される。クロスバーユニット114のこのバンク割り当ての特徴は、次の層が現在の層とは異なるストライド値を有するときでも、バンクコンフリクトなしに次の層のためにデータを格納し、データにアクセスすることを可能にするので、特に有利である。このようにして、メモリのそれぞれのバンクのアドレス位置を使用する固有のパターンに基づいて、システム100のメモリからデータを取得するか、またはメモリに書き込むことができる。
【0065】
単一のクロックサイクルにおいて、回転ユニット110およびクロスバーユニット114は各々、システム100で実施されるニューラルネットワーク計算中に生成されたバンク割り当てパターンを処理するための命令を実行することができる。例えば、画像の入力データを処理するとき、回転ユニット110は、クロックサイクルごとに1つ以上のピクセルだけアクセス入力を回転させることができる。
【0066】
いくつかの実装形態では、回転ユニット110は、制御論理106から受信された命令または制御信号を処理して、例示的な基本テンソルユニットで回転操作を実施する。制御信号は、3Dテンソルのx次元のx回転係数を定義し、および/または、3Dテンソルのy次元のy回転係数を定義することができる。例えば、アクティベーションメモリ108に格納される基本テンソルユニットが与えられると、回転ユニット110は、制御論理106から受信された制御信号を処理して、制御信号によって定義された回転係数に基づいてテンソル内の入力データ要素の位置を回転させることができる。制御信号の処理に応答して、回転ユニット110は、x回転係数に基づいてテンソルのx次元に沿ってテンソルの要素の入力データを回転させ、および/またはy回転係数に基づいてy次元に沿ってテンソルの要素の入力データを回転させることができる。
【0067】
いくつかの実装形態では、回転ユニット110が入力データをx次元に沿って回転させるとき、x次元に沿った個々のデータ要素は、同じ量、例えば、x回転係数によって定義される量だけ、x方向にシフトされる。量は、要素が回転操作中に所与の次元に沿ってシフトされる位置の数を示す整数値に基づき得る。例えば、
図1に示されるように、所与の2D基本テンソルユニット118は、5×5の個々のデータ要素を含み得る。コア102は、制御論理106を使用して、回転ユニット110に、2Dテンソル118のx次元120に沿って入力データを回転させる。この例では、2Dテンソル118の個々のデータ要素がx方向122にシフトされて、回転された2Dテンソル124が作成される。示されるように、2Dテンソル124は、個々のデータ要素が同じ量、例えば2の量だけシフトされるx次元126を有する。一般に、個々のデータ要素がシフトされる量は、x回転係数、y回転係数、またはその両方によって定義される。
【0068】
以下でより詳細に説明するように、システム100は、計算ユニット112での計算セルの構成、ならびに現在のニューラルネットワーク層の他の特性、例えば、畳み込み層、および計算セルを使用して処理される層への入力に少なくとも基づいて回転スキームを決定することができる。システム100は、決定された回転スキームを使用して、回転ユニット110を回転させて、層の入力にアクセスする。一般に、回転ユニット110は、所与の出力値に必要な入力がアクセスされ、出力値に対応する計算ユニット112の適切な計算セルに提供されることを確実にする責任がある。いくつかの実装形態では、回転ユニット110は、単一のクロックサイクル中に一定数の回転操作を並行して実施する。
【0069】
回転ユニット110は、データ回転を実行して、システム100が1つ以上のクロックサイクルにわたって並行してニューラルネットワーク計算のセットを実施できるようにすることができる。このようにして、回転ユニット110およびクロスバーユニット114は、システム100が、複数の計算セルまたはMACを含む計算ユニット112内のコンピューティングブロックの比較的高い使用率(例えば、>80%の使用率)を達成できるように構成される。例えば、回転ユニット110は、システム100が所与のニューラルネットワーク計算の任意のストライド値および任意のスキップ値をサポートすることができるように構成され、計算ユニット112の高い使用率における損失は最小限である(またはまったくない)。
【0070】
1つ以上の要因が、システムの計算ユニット112の使用率に影響を及ぼし得る。いくつかの実装形態では、多次元テンソル(例えば、h×w×d)の場合、多次元テンソルの個々の次元の特性は、計算ユニット112での計算ブロックの使用率に影響を及ぼし得る。例えば、システム100がh×w×dの3D入力アクティベーションテンソルを処理する場合、3D入力テンソルのそれぞれの次元(例えば、次元に沿った要素の数)が、2×2×1と整数倍6×6×3、または10×12×6と整数倍20×36×12など、基本テンソルユニットの次元の一定の整数倍(bxxbyxbz)に対応するとき、計算ユニット112の使用率が最大化される。したがって、システム100は、基本テンソルユニットの特定の高さ値(by)、幅値(bx)、または深さ値(bz)の倍数であるいくつかの次元要素を有する例示的な入力テンソルh×w×dを好むコンピューティングアーキテクチャを有するように構成され得る。この整数倍の実装を使用して、システム100は、次いで、所与のニューラルネットワーク層のストライド値および/またはスキップ値に関係なく、計算ユニット112の100%の使用率を達成することができる。他の実装形態では、システム100は、ニューラルネットワーク層のストライド値および/またはスキップ値に関係なく100%の使用率を達成するために、様々な他の基本テンソルユニット構成および対応する整数倍を使用できるように構成され得る。
【0071】
本明細書で説明するように、計算ユニット112は、ニューラルネットワークの層を介してニューラルネットワーク入力を処理するための数学演算を実施するために使用される大量の計算セルまたはMACを含むことができる。いくつかの実装形態では、回転ユニット110およびクロスバーユニット114によって実行されるバンク割り当てパターンを使用して、システム100は、特定のタイプのニューラルネットワーク層に対して計算が実施されるときに、より高いコア使用率を達成することができる。これらの構成要素特徴を使用して、システム100はまた、様々なストライド値およびスキップ値に対して比較的高いコア使用率を達成することができる。コア使用率は、入力を処理するための計算を実行するために使用される、計算ユニット112でのMACのパーセンテージを指す。場合によっては、コア使用率は、単一のクロックサイクルまたは複数のクロックサイクルを参照して決定される。
【0072】
クロスバーユニット114は、バンク割り当てパターンの命令を使用して、システム100のメモリ、例えば、アクティベーションメモリ108へのアクティベーションの格納を容易にする。アクティベーションは1つの層によって生成され、クロスバーユニット114は、バンク割り当てパターンを使用して、それらがメモリからアクセスされ、ニューラルネットワークの次のまたは後続の層への入力として使用されることを可能にする方法でアクティベーションを格納する。クロスバーユニット114およびバンク割り当てパターンの命令を使用して、アクティベーションは、例えば、アクティベーションメモリ108の特定のアドレス位置に格納され、次の層がアクティベーションを生成した前の層とは異なるストライド値またはスキップ値を有する場合でも、バンクコンフリクトなしに次の層の入力として使用するために後でアクセスされ得る。
【0073】
いくつかの実装形態では、クロスバーユニット114は、後続の層(以下で説明する)のストライド値および/または特定のスキップ値を参照する。いくつかの実装形態では、クロスバーユニット114は、出力データを格納するために少なくとも1段階または2段階のプロセスを使用するスパースクロスバーである。この1段階または2段階のプロセスを使用して、少なくとも行および列のフォーマットに従って、例示的な出力データアレイ/テンソルをアクティベーションメモリ108に格納することができる。例えば、出力データを格納するための第1の段階中に、クロスバーユニット114は、アレイの行に関連付けられたデータをシャッフルまたは調整するために第1のシャッフル操作を実行する。出力データを格納するための第2の段階中に、クロスバーユニット114は、アレイの列に関連付けられたデータをシャッフルまたは調整するために第2のシャッフル操作を実行する。場合によっては、クロスバーユニット114は、テンソルの行および列の両方に関連付けられたデータをシャッフルまたは調整するために、少なくとも1つのシャッフル操作を実行する。
【0074】
一般に、回転ユニット110およびクロスバーユニット114の各々は、バンク割り当てパターンの命令を使用して、入力またはアクティベーションのセットの入力データにアクセスし、アクティベーションメモリ108でバンクコンフリクトが発生することなく出力データを格納する。バンクパターンにより、出力データは、1つの層による処理後にアクティベーションメモリ108に書き込まれ、次いで、アクティベーションメモリ108を形成するそれぞれのバンクでアドレスコンフリクトが発生することなく、次の後続の層による処理のためにアクティベーションメモリ108から読み取られるかまたは取得される。
【0075】
アクセスされた入力データを回転させることにより、回転ユニット110は、ニューラルネットワークの層を介して処理するために入力データへのアクセスを最適化するシステム100の制御特徴を活用する。例えば、指定されたパターンに基づいてデータアクセスを回転させることにより、単一のクロックサイクル中に、アクティベーションメモリ108の異なるバンクのアドレス位置に格納された入力のセットへの並列アクセスが容易になる。これにより、アクティベーションおよびパラメータのそれぞれのセットを、アクティベーションメモリ108およびパラメータメモリ116からの積和セル(MAC)の各々に提供することが可能になる。
【0076】
上に示したように、クロスバーユニット114は、後続の層のストライド値および/または特定のスキップ値を参照することができる。例えば、画像の第1の部分に対する入力アクティベーションのセットは、第1の層で処理される。この処理により、出力アクティベーションに対応する特定の数の要素を有する出力データのセットが生成される。次いで、これらの要素は、ニューラルネットワークの次の後続の層による処理のためにアクセスされる。いくつかの実装形態では、特定のストライド値が次の層に割り当てられるか、特定のスキップ値が次の層に割り当てられる。
【0077】
例えば、スキップ値は、データ入力がニューラルネットワーク層で処理するためにロードされるときにスキップされる要素の1つ以上のセットを識別することができる。いくつかの実装形態では、入力データアレイの[行、列]要素をトラバースするために、任意のスタッガードスライディングウィンドウアクセススキームを使用して、隣接するbx×byピクセルをロードすることによって、スキップをサポートすることができる。この例では、bxおよびyは各々、例えば、3×3ピクセルまたは2×2ピクセルなど、それぞれの1以上の整数値を表すことができる。バンク割り当てパターン、ならびにコア102の回転およびクロスバー機能に基づいて、入力データアレイからの要素の任意のbx×byパッチを、バンクコンフリクトなしに1サイクルでロードすることができる。したがって、任意のスキップ値は、説明された技術に基づいてシステム100でサポートされ得る。ニューラルネットワークの所与の畳み込み層の場合、スキップを有する畳み込みは、拡張畳み込みとも呼ぶことができ、スキップ値は、拡張係数に対応する。この文脈において、拡張は、解像度またはカバレッジを失うことなく、受容野の指数関数的拡大をサポートすることができる。例えば、3×3カーネルに適用されたスキップ値2(例えば、2拡張畳み込み)は、カーネルパラメータが2ピクセルごとに現れて個々のカーネルパラメータが1ピクセルスキップしているように見えるため、最初の3×3受容野を、例えば5×5に拡張する。
【0078】
ストライド値は、カーネルが画像の別の部分の入力データ(ピクセル値など)に適用されたときに各カーネルがシフトされる量を定義する。いくつかの実装形態では、後続の層への入力として使用される、現在の層に対して生成されたアクティベーションを格納するときに、ストライド値、例えば、ストライド=8が参照される。場合によっては、入力テンソルの要素を表す二次元(2D)ウィンドウ内の互いに隣接していないbx×byピクセル要素をロードするために、ストライド値を参照することができる。一般に、システム100は、制限なしに任意のストライド値をサポートするように構成することができる。
【0079】
各クロックサイクル中に、出力データの要素のセットがアクティベーションメモリ108で受信される。バンク割り当てパターンに基づいて、これらの要素は、次の層のストライド値を考慮する方法で格納される。生成されたバンク割り当てパターンは、データ要素の各セットに割り当てられる特定のメモリバンクを定義する。制御論理106は、特定のストライド値(例えば、ストライド=8)を有する要素の格納を容易にし、システム100が次の層によって処理するための要素を取得するときのバンクコンフリクトを防止するために、次の層のための一意のバンク割り当てパターンを生成するように構成される。いくつかの実装形態では、制御論理106は、多層ニューラルネットワークの各層に固有のバンク割り当てパターンを生成する。
【0080】
アクティベーションメモリ108は、様々なニューラルネットワーク層の計算中にコア102および柔軟な計算ファブリック104(例えば、デジタル信号プロセッサ(DSP)または他のスカラーもしくはベクトルプロセッサ)によって使用される共有メモリとして構成することができる。場合によっては、計算ファブリック104は、システム100の回路において、ディープニューラルネットワーク層で処理される計算をサポートすることができる例示的な処理デバイスによって表される。コア102と計算ファブリック104との間でデータを共有することは、異なる計算ファブリックにおけるニューラルネットワーク層のより効率的で用途の広いサポートを提供する。計算ファブリック104は、コア102に、回転およびクロスバー特徴を使用するための、ならびにバンク割り当てパターンを使用するための命令を取得および処理させる、強化されたプログラム可能性を提供する。計算ファブリック104は、処理されてコア102に送信される命令をホストデバイスまたは外部コントローラから受信するように構成することができる。命令は、コア102でレジスタまたは他のデータ処理デバイスを構成するためのデータ値を含むことができる。コア102および計算ファブリック104は、対話して、システム100内で補完的なデータ処理機能を提供することができる。例えば、コア102内の計算ユニット112の計算セルは、ディープネットワークロードの計算を加速するために使用することができ、一方、計算ファブリック104は、特定のディープネット層のワークロードを改善された効率で完了することを可能にする。
【0081】
いくつかの実装形態では、例示的なディープネットの各層は、計算ファブリック104またはコア102のいずれかで実行することができる。層がコア102で実行されると、入力データは、アクティベーションメモリ108からロードされ、回転ユニット110、計算ユニット112、およびクロスバーユニット114を介してルーティングされ、次いで、出力データは、アクティベーションメモリ108に書き込まれる。例えば、計算ユニット112を使用して入力データから生成された出力データは、次いで、アクティベーションメモリ108のメモリバンクに出力として格納される前に、クロスバーユニット114を介してルーティングされる。層が計算ファブリック104で実行されると、入力データは、アクティベーションメモリ108からロードされ、計算のために計算ファブリック104にルーティングされ、次いで、出力データがアクティベーションメモリ108に書き込まれる。
【0082】
いくつかの実装形態では、システム100は、計算ユニットの少なくとも2つのそれぞれのセット、コア102の計算ユニット(例えば、ユニット112)および計算ファブリック104の計算ユニットを含む。コア102は、密な/深さ方向の畳み込み、完全に接続された非線形操作(例えば、アクティベーション関数の適用)、およびプーリング操作を含むニューラルネット層の計算をサポートするように構成することができる。コア102はまた、深さ連結を実施するためなど、データ配置層の計算をサポートするように構成される。計算ファブリック104は、1つ以上の他のニューラルネット層をサポートするように構成され、これらの他の層に関連付けられた操作の計算を実施するために使用することができる。
【0083】
いくつかの実装形態では、任意の形状のカーネル構造を伴うニューラルネットワーク計算をサポートするカーネルロケーションメモリ130をコア102に位置させることができる。例えば、カーネルロケーションメモリ130は、制御論理106と通信する組み込みメモリ構造としてコア102に含まれ得る。カーネルロケーションメモリ130は、
図7を参照して、以下でより詳細に説明される。
【0084】
コア102では、例示的な計算パスは、以下の方法で実行することができる。計算のセットは、計算ユニット112で実施され、例えば、畳み込みおよび完全に接続された層の計算である。いくつかの実装形態では、計算ユニット112は、非線形関数を使用し、プーリング操作を完了するためのハードウェア構成要素も含むように構成され、構成要素はパイプライン構成で実行され得る。計算ユニット112は、畳み込みの計算の実施に応答して全和を生成することができる。いくつかの実装形態では、全和は、アクティベーション関数を適用するためにコア102の非線形ユニットにルーティングされるが、他の実装形態では、このルーティング操作はスキップすることができる。場合によっては、非線形ユニットの出力は、プーリング操作を完了するためにコア102のプーリングユニットにルーティングされるが、他の場合には、このルーティングもスキップすることができる。計算ユニット112の最終出力は、クロスバーユニット114にルーティングされる。本明細書で説明するように、クロスバーユニット114は、バンク割り当てパターンを使用して、アクティベーションメモリ108内のメモリバンクのアドレス位置に最終出力のデータ値を書き込む/格納する。この例示的な計算パスおよび関するデータルーティングは、計算ファブリック104を伴わない。
【0085】
上述のように、例示的なディープネットの各層は、計算ファブリック104またはコア102のいずれかで実行することができる。層が計算ファブリック104で実行されると、入力データは、アクティベーションメモリ108からロードされ、計算のために計算ファブリック104にルーティングされ、計算の最終出力データがアクティベーションメモリ108に書き込まれる。いくつかの実装形態では、計算ファブリック104は、コア102でサポートされていない可能性がある特定のタイプの計算を実施するために使用される。例えば、値のベクトル内の最大値のインデックスを取得するためのargmax層の計算が可能である。
【0086】
計算ファブリック104は、アクティベーションメモリ108とのデータ通信用に構成される。場合によっては、前の層の出力(A)が、メモリバンクに格納するためにアクティベーションメモリ108に書き込まれる。計算ファブリック104は、i)前の層output_Aのデータを読み取るまたは取得する、ii)データを入力として別の層にルーティングする、iii)計算ファブリック104の計算ユニットを使用してその層の計算を実施して出力(B)を生成する、およびiv)次いで、このoutput_Bのデータをアクティベーションメモリ108に書き込む/格納する、ように構成することができる。次いで、コア102を使用して、アクティベーションメモリ108からoutput_Bのデータを取得して、1つ以上の他の層を計算することができる。
【0087】
一般に、計算ファブリック104は、ニューラルネットワークの様々な層で入力を処理するための制御およびデータ同期を管理および実行するように構成される。いくつかの実装形態では、計算ファブリック104は、コア102内の異なるレジスタに命令および制御値をロードすることによって、コア102内のレジスタをプログラムするために使用される。制御値は、ニューラルネットワーク計算のストライド値およびスキップ値を含むバンク割り当てパターンを定義することができる。命令は、回転ユニット110およびクロスバーユニット114によって実行され、ストライド値およびスキップ値を参照してバンク割り当てパターンを処理する。他の実装形態では、コア102は、制御およびデータ同期機能を実施するためにコア102によって使用されるスカラープロセッサを含むことができる。スカラープロセッサは、計算ファブリック104とのデータ通信用に構成され、計算ファブリック104を使用して直接プログラムすることができる。
【0088】
システム100は、複数のサブシステムを含むことができ、各サブシステムは、それぞれのコア102を含む。例えば、第1のサブシステムは、コア102aを含むことができ、第2のサブシステムは、コア102bを含むことができ、第3のサブシステムは、コア102cを含むことができる。コア102a、102b、および102cは、システム100の隣接するコアに対応することができる。システム100の例示的な境界ピクセル論理を使用して、上記のように、システム100の各サブシステムに含まれる隣接するコア102a、102b、および102c間のデータ共有を容易にすることができる。例えば、画像のエッジピクセル値は、コア102の境界ピクセル論理を使用して、コア102a/b/cによる並列処理のために共有することができる。コア102の例示的なデータアービターを使用して、システム100の異なるインターフェースによって受信される情報を制御することができる。例えば、データアービターは、計算ファブリック104、制御論理106、または外部コントローラなどのホストデバイスによって提供される情報に優先順位を付けて配信するための制御論理を含むことができる。
【0089】
図2は、ニューラルネットワーク処理システム100の例示的なデータルーティングトポロジー200を示す。ルーティングトポロジー200は、一般に、計算ユニット112内のそれぞれのセルの複数に提供される入力の回転アクセスを表すデータルーティングラインを含む。例えば、特定のサイズの入力データ構造(例えば、入力基本テンソルユニット)は、アクティベーションメモリ108から取得することができる。計算ユニット112は、各々がMACのクラスタを含むそれぞれのコンピューティングブロック202を含むことができる。
図2には16個のコンピューティングブロックが示されているが、システム100は、より多くのまたはより少ないコンピューティングブロック202を含むように設計することができる。MACクラスタの各々を使用して、例示的な入力データに基づいて、より大きな内積の一部を計算することができる。いくつかの実装形態では、より大きな内積のそれぞれの部分は、同じクロックサイクル中に並行して計算される。
【0090】
畳み込み層の例示的な計算中、MACは、畳み込みの出力の所与の出力値に対応し得る。いくつかの実装形態では、システム100は、畳み込みの出力における所与の出力値に対応する特定のMACに基づいて回転スキームを決定する。場合によっては、例示的な回転スキームは、データを受信する特定のMACに基づいて、層のデータをどのように回転させるかを定義することができる。システム100は、決定された回転スキームを使用して、回転ユニット110に、アクセスされた入力基本テンソルユニットを層に対して回転させる。回転ユニット110は、所与の畳み込み出力値に必要な入力がアクセスされ、出力値に対応する適切なMACに提供されることを確実にする責任がある。回転ユニット110は、制御論理106を使用して処理されたバンク割り当てパターンに基づいて、アクセスされた入力基本テンソルユニットを回転させる。例えば、制御論理106は、バンク割り当てパターンに基づいて回転係数を生成し、回転ユニット110は、回転係数を使用して、層のデータを回転させる。
【0091】
回転の場合、回転ユニット110は、(例えば、基本テンソルユニットの)データの一部にアクセスし、アクセスされたデータを、計算ユニット112内の計算ブロック202のMACクラスタに提供することができる。すべてのサイクルにおいて、各コンピューティングブロック202は、回転ユニット110からデータの一部を受信する。回転ユニット110とコンピューティングブロック202との間のデータルーティングパターンは、異なる操作モード(例えば、密な畳み込み、深さ方向の畳み込みなどのモード)に対して異なり得る。いくつかの実装形態では、回転ユニット110は、単一のクロックサイクル中にこれらの回転操作の各々を並行して実施する。他の実装形態では、計算ユニット112内の計算ブロック202の一部またはすべてを使用して、1つ以上のクロックサイクルにわたってより大きな内積を並行して計算する。
【0092】
例えば、より大きな内積を計算するとき、1つ以上の計算ブロック202は各々、ニューラルネットワーク層のパラメータを表すデータのそれぞれの部分を受信することができる。各コンピューティングブロック202は、そのMACクラスタを使用して、アクティベーション入力用のデータの一部およびパラメータ用のデータの一部を使用して、内積計算の一部を実施することができる。場合によっては、コンピューティングブロック202は、出力データのそれぞれのセットを生成することができる。出力データのセットは、アクティベーションメモリ108を形成する個々のメモリバンクのアドレス位置で処理および格納するためにクロスバーユニット114に提供される。
【0093】
図3は、アクティベーションメモリ108から取得され、例示的なニューラルネットワーク計算を実施するために使用される入力データを示す例示的な
図300を示す。
図300は、複数の要素(例えば、00、01、02、03など)を有する例示的な入力データ構造を含む第1の入力ウィンドウ302を示している。各要素は、畳み込みニューラルネットワーク層などのニューラルネットワーク層で処理される対応する入力値(ピクセル値など)を有する。
図3では、入力ウィンドウ302の数値参照(すなわち、10、11、20、21)は、入力値がマッピングされる入力テンソルのそれぞれの位置または要素に対応することができる。入力テンソルの要素に対応する各入力(例えば、アクティベーション)は、データメモリ304のそれぞれのメモリアドレス位置に格納することができる。例えば、データメモリ304は、メモリバンク_0、メモリバンク_1、メモリバンク_2、およびメモリバンク_3を含むことができ、要素00の入力(「入力00」)は、メモリバンク_0の例示的なメモリアドレス位置に格納され得る。データメモリ304のメモリバンクは、アクティベーションメモリ108の例示的なメモリバンクに対応することができる。
【0094】
上記のように、いくつかの実装形態では、現在のニューラルネットワーク層への入力は、クロスバーユニット114を使用してアクティベーションメモリ108のアドレス位置に格納された前の層からの出力アクティベーションであり得る。クロスバーユニット114は、出力アクティベーションを格納し、例えば、バンク割り当てパターンに基づいて出力アクティベーションを格納させ、アクティベーションは、バンクコンフリクトなしにアクセスされ、現在の層で処理するための現在のニューラルネットワーク層への入力として使用できるようにする。データパターン306は、要素にマッピングされた入力またはアクティベーションが、現在のニューラルネットワーク層で処理するためにデータメモリ304から取得されるときに、例示的なデータ構造308の要素がどのように配置され得るかの例を示す。それぞれの入力がマッピングされるデータ構造308の特定の要素は、例えば、データパターン306に示されるように、(アクティベーションメモリ108の)データメモリ304のアドレス位置に出力アクティベーションを格納するために使用されたバンク割り当てパターンに基づいて配置され得る。例えば、クロスバーユニット114は、特定のバンク割り当てパターンを使用してアクティベーションメモリ108にデータを格納するので、格納されたデータが後でアクセスされるとき、それは、例示的なデータパターン306など、クロスバーユニット114がデータの格納に使用した特定のバンク割り当てパターンと一致する、またはそれに対応する方法で配置される。
【0095】
いくつかの実装形態では、データメモリ304からアクセスされる入力データが、以前のバンク割り当てパターンに基づいて配置される場合、アクセスされる入力データは、回転ユニット110を使用して回転され、入力ウィンドウ302の入力データレイアウトと整列することができる。上に示したように、回転ユニット110は、回転ステージ312、314を使用して、入力データを回転させることができる。例えば、少なくとも1つの回転ステージを使用して、入力ウィンドウ302のデータレイアウトに一致する入力データ構造310を取得することができる。いくつかの実装形態では、パターン306に基づいて配置された入力データ構造308の要素での入力データは、デジタル画像のピクセル値に対応することができる。この文脈において、回転ユニット110の1つ以上の回転ステージを使用して入力データを回転させると、入力ウィンドウ302に示されるように、入力データのピクセル値がデジタル画像のピクセル位置と整列する。次いで、回転されたデータ構造310は、計算316を実施するために、計算ブロック202、またはMACのセットにルーティングされる。
【0096】
図4は、例えば、ストライド=1およびスキップ=1を使用して、ニューラルネットワーク計算を実施するための入力データ402の処理を示す例示的な
図400を示す。計算は、1Dテンソルを伴い得る。しかし、以下で説明するように、計算は、例えば2Dまたは3Dテンソルなど、より高次元のテンソルにも拡張することができる。この実装形態では、入力データが処理され、従来のハードウェア回路を使用して、所与のニューラルネットワーク層の畳み込みが計算される。したがって、
図400は、所与の層の畳み込みを計算するために1つの乗数404のみが使用される従来の回路に関する。
図400の説明は、従来の回路の制限された機能を参照して畳み込みを計算する例示的なプロセスを示す。これらの記述はまた、システム100を参照して本書に記載されている専用ハードウェア回路によって提供される強化された特徴および計算上の利点を実証するための文脈を提供する。
【0097】
図400に示すように、従来のハードウェア回路の1つの乗数を使用して、第1のサイクル(サイクル=1)で、入力値in[0]が従来の回路にロードされ、パラメータk0と乗算されて、乗数404を使用して、第1の結果または積403が生成される。次のまたは第2のサイクル(サイクル=2)において、従来の回路は、乗数404を使用して、in[1]*k1を計算して、第2の結果405を生成する。次いで、回路は、第1の/前の結果403を第2の結果405と累積または加算して、合計406を生成することができる。次の/第3のサイクル(サイクル=3)において、従来の回路は、単一の乗数404を使用して、in[2]*k2を計算し、第3の結果407を生成する。次いで、従来の回路は、合計406を第3の結果407と累積または加算して、合計408を生成することができる。
【0098】
場合によっては、結果403、結果405、合計406、および結果407は各々、例示的な出力アクティベーションを生成するためにいくつかのプロセッササイクルにわたって累積される部分和である。合計408は、所与の層に対して生成されるアクティベーション出力410、out[0]に対応することができる。
図400は、複数の3Dテンソルをロード/格納するための改善された効率に寄与する、システム100の専用ハードウェア回路の特徴の少なくともいくつかを欠いている例示的な従来の回路に関連付けることができる。
【0099】
図5は、ニューラルネットワーク計算を実施するために入力データを処理するための改善されたアプローチを示す別の例示的な図を示す。いくつかの実装形態では、入力データは、その層に割り当てられたストライドおよび/またはスキップ値を使用して、所与のニューラルネットワーク層の畳み込みを計算するために処理される。上記のように、
図4の
図400の説明は、従来の回路の制限された機能を参照して畳み込みを計算するための例示的なプロセスを示す。対照的に、
図5の
図500は、畳み込みを計算するための入力データを処理するために使用される従来のシステムよりも改善されたアプローチを提供する。
【0100】
図5の実装形態では、入力データのセット402(例えば、
図5の1Dの例における入力基本テンソルユニット)は、システム100に含まれる専用ハードウェア回路の例示的な計算ブロック202に含まれるMACのいくつかの乗数を使用して並行して処理することができる。例えば、システム100は、いくつかの乗数の各々を使用して、パラメータメモリ116から取得された同じパラメータで、アクティベーションのバッチにおいて異なるアクティベーションを乗算することによって、その並列性を拡張または拡大するように構成することができる。
【0101】
例として、異なる入力に対応するパラメータを乗算する例を、一次元(1D)データ構造を参照して説明する。しかしながら、この計算アプローチは、例えば、入力テンソルの第1の次元(例えば、x次元)に沿って取得された入力を使用して計算の第1のセットを実施し、並行して、入力テンソルの第2の次元(例えば、y次元)に沿って取得された入力を使用して、実質的に同様の第2の計算セットを実施することにより、多次元計算コンテキストに拡張することもできる。この計算アプローチは、2D並列処理を示す例示的な計算コンテキストを表し、ここで、同様のアプローチは、入力テンソルのx、y、z次元の各々に沿って取得され、次いで、3D並列処理を示すために並行して処理されるそれぞれの入力セットを使用して、使用され得る。
【0102】
図5に示されるように、入力のセットを使用して出力アクティベーションの例示的なベクトルを生成するニューラルネットワーク計算は、セット内の各入力値に対してそれぞれの部分和を生成し、出力アクティベーションのベクトルを生成するために数サイクルにわたって部分和を累積することを含み得る。例えば、入力の1D、2D、または3Dベクトルが与えられた場合、例えば、少なくとも1つの次元のサイズが24の入力を有する場合、システム100は、3の例示的なカーネルサイズを使用して畳み込みを計算して、出力アクティベーションを生成することができる。本明細書で説明されている技術を使用して、システム100は、畳み込みを計算するために複数の計算を並行して実施することができ、従来のハードウェア回路と比較して、少ないプロセッササイクル数を使用し、その乗数の全体的な使用率を高くすることができる。
【0103】
例えば、システム100は、12(または24)の入力サイズで1D入力ベクトル402の計算を初期化することができる。システム100は、3のカーネルサイズを使用して畳み込みを計算することができ、ここで、カーネルは、パラメータk0、k1、およびk2を含む。一般に、1D入力ベクトル402は、各々がin[0]、in[1]、in[2]、…、in[11]によって示される離散入力値を含むことができる。各ベクトルエントリin[n]は、それぞれの入力を表すことができ、ここで、nはゼロ以上の整数である。いくつかの実装形態では、1Dベクトル内の入力のサブセット(例えば、in[0]、in[1]、in[2]、およびin[3])は、例示的な入力ウィンドウ302の入力を表すことができる。場合によっては、入力ウィンドウ302の入力は、画像センサによって取得されたデジタル画像のピクセルに対応するか、またはシステム100の外部にあるセンサデバイスによって取得された他のタイプの生の入力データに対応し得る。以下でより詳細に説明するように、システム100は、例えば、1D、2D、または3Dカーネル、またはデータレイアウトにゼロ値の任意の割り当てを有するカーネル構造など、任意のスパース性のカーネルを使用して、畳み込みの計算を加速することができる。
【0104】
図500は、システム100の専用ハードウェア回路が、計算ユニット112の複数のMACとの並列性をどのように拡張できるかの例を示している。例えば、計算ユニット112の計算ブロック202は、少なくとも8つの乗数の1つ以上のセットを含むことができ、セット内の8つの乗数の各々は、同じパラメータ値k0、k1、またはk2を受信し、格納する。したがって、3のカーネルサイズが与えられると、システム100は、アクティベーションメモリ108から、8つの入力またはアクティベーションのセットを取得またはロードし、セット内の8つの入力の各々にそれぞれのパラメータを乗算して、出力アクティベーションのベクトルを生成するために、いくつかのサイクルにわたって累積できる異なるセットの部分和を生成するように構成することができる。
【0105】
例えば、サイクル=1で、システム100は、アクティベーションメモリ108から8つの入力402(例示的な1D基本テンソルユニット)、in[0]~in[7]を取得し、乗数512を使用して、各入力にパラメータk0を乗算して、部分和513のセットを生成する。取得された入力402は、特定の入力ウィンドウ302のためのものであり得る。サイクル=2で、ストライド=1およびスキップ=2の場合、システム100は、アクティベーションメモリ108から8つの入力の別のセット、in[2]~in[9]を取得し、乗数の同じセットを使用して各入力にパラメータk1を乗算して、部分和515のセットを生成する。アキュムレータ516のセットは、部分和513および515のそれぞれのセットを受信し、部分和513および515を累積し、累積された部分和に基づいて累積値517のセットを生成する。サイクル=3で、システム100は、アクティベーションメモリ108から8つの入力の別のセット、in[4]~in[11]を取得し、乗数の同じセットを使用して、各入力にパラメータk2を乗算して、部分和の519のセットを生成することができる。アキュムレータ520のセットは、累積値のセット517および部分和519のセットを受信し、値517を部分和519で累積し、この累積の結果に基づいて出力アクティベーションのベクトル522を生成する。アキュムレータ516および518は、累積値を生成または計算するために各サイクルで再利用されるアキュムレータの単一のセットを表すことができる。
【0106】
出力アクティベーション522は、アクティベーションメモリ108に格納され、後で、計算ユニット112のMAC、例えば、別のニューラルネットワーク層の重みを使用して計算を実施するために使用されるMACでロードするために取得され得る。一般に、システム100は、特定のバンク割り当てパターンを使用して、出力アクティベーション522のデータをアクティベーションメモリ108のメモリバンクに格納する。
【0107】
いくつかの実装形態では、8つの入力402のセットは、ニューラルネットワーク内の別の層に対して実施された計算の後に以前に格納された出力アクティベーションであった可能性がある。出力アクティベーション522は、アクティベーションメモリ108から取得され得、この他の層のストライドまたはスキップ値に従って、ニューラルネットワークの別の層への入力として使用され得る。例えば、
図5に示されるように、MAC514の8つの乗数について、システム100は、スキップ=2で8つの値をロードすることができる。これは、データスキップビジュアル524を介して示され、ここで、入力データin[0]は、サイクル=1で取得され、スキップ=2は、入力データin[2]をサイクル=2にする。したがって、各サイクルで、システム100は、部分和のセットを計算するために8つの入力を取得し、次のサイクルで、システム100は、ニューラルネットワーク層のスキップパラメータに従って、いくつかの入力またはアクティベーションをスキップすることによってデータを取得または読み取る。
【0108】
システム100は、1つ以上のクロックサイクルにわたって結果データを蓄積するために使用されるアキュムレータ516、520の1つ以上のグループを含むことができる。結果データは、部分和または累積値のそれぞれのセットを含むことができる。いくつかの実装形態では、アキュムレータのグループは、i)計算ユニット112のそれぞれのMACに、乗数512とともに含まれ、ii)部分和または累積値のセットから受信された2つ以上のオペランドを加算する加算回路から形成され、iii)加算結果を正規化して、出力アクティベーションの例示的なベクトルを生成するために使用される。
【0109】
前の例では、システム100は、わずか3つのプロセッササイクルにわたって結果データの複数のセットを蓄積した。したがって、従来のハードウェア回路と比較して、そのプロセッサハードウェア回路の複数のMACを使用して、システム100は、出力アクティベーションのベクトルの生成を加速するために、少ないプロセッササイクル数にわたって蓄積できる部分和のより大きなセットを効率的に生成するように構成される。
【0110】
いくつかの実装形態では、システム100は、24の入力(in[0]…in[23])の例示的な1D入力サイズの場合、出力の次のセット、例えば、out[8]-out[15]を計算することができる。この実装形態では、システム100は、次いで、8つの入力526の次のセット、in[8]~in[15]をロードし、計算ユニット112のMACの特定のセットを使用して、セット内の各入力にパラメータk0を乗算し得る。システム100は、システムが入力ウィンドウの終わりに到達するまで、1D入力ウィンドウの24個の入力を反復するこのプロセスを継続することができる。
【0111】
いくつかの実装形態では、8の入力の例示的なセットを取得することは、各セットのそれぞれの8の入力を計算ユニット112においてMAC512、514、518の各セルにロードする前に、回転ユニット110を使用して8の入力を回転させることを含む。MAC512、514、518は、同じMACに対応するか、または代替的に、異なるMACに対応することもできる。他の実装形態では、出力アクティベーション522を格納することは、クロスバーユニット114を使用して、制御論理106を使用して生成されたバンク割り当てパターンに基づいて、各出力アクティベーションのメモリアドレス割り当てをシャッフルすることを含む。上に示したように、回転ユニット110およびクロスバーユニット114ユニットは、システム100が、バンクコンフリクトなしにニューラルネットワーク層で処理するためのデータを取得および格納することを可能にする。このようにして、システム100は、メモリバンクコンフリクトから生じる性能の低下なしに、並列処理および加速された計算の効率を達成することができる。
【0112】
システム100は、プロセッササイクルごと、他のサイクルごと、または制御論理106によって処理される命令によって定義される特定のサイクル反復に基づいて、入力のセット(すなわち、基本テンソルユニット)を取得することができる。同様に、システム100は、制御論理106によって受信された命令に基づいて、特定の計算のために取得される入力の数を変えることができる。いくつかの実装形態では、システム100は、その計算を3D並列処理に拡張し、処理される入力テンソルがbxxbyxbzの倍数になるように、特定の計算のために取得される入力の数を変えることができる。このようにして、システム100は、所与のニューラルネットワーク層のストライド値および/またはスキップ値に関係なく、計算ユニット112においてMACのより大きな使用率を達成するように構成することができる。
【0113】
図6Aは、ニューラルネットワークの計算を実施するためにストライド値に基づいて入力データを処理することを示す例示的な
図600Aを示す。一般に、ニューラルネットワーク層のストライド機能をサポートするようにシステムを構成するとき、少なくとも2つの制約が存在する可能性がある。第1の制約は、システムが出力アクティベーションのセットをメモリに書き込んだり格納したりするときに、メモリバンクコンフリクトが発生しないことを確実にすることである。第2の制約は、システムがメモリから入力またはアクティベーションを読み取るか、または取得するときに、メモリバンクコンフリクトが発生しないことを確実にすることである。本明細書で説明するように、各制約に対処するために、システム100の専用のハードウェア回路は、出力アクティベーションのデータをアクティベーションメモリ108のメモリバンクに格納させるクロスバーユニット114を含む。クロスバーユニット114は、特定のバンク割り当てパターンを使用して、格納およびロード操作中のバンクコンフリクトを防止する。
【0114】
図6Aおよび
図6Bの以下の説明は、システム100が、次の層のために少なくともストライド=1、および次の層のためにストライド=2を、それぞれどのようにサポートするかを示している。説明は、他のストライドパラメータ、例えばストライド=3以上に拡張することができ、これらのパラメータは、所与のニューラルネットワーク計算のデータを処理する次の層に割り当てることができる。例示的な1D計算は、例えば、
図6Aおよび
図6Bの説明のために使用される。説明のために1Dの例が使用されているが、
図6Aおよび
図6Bの実装形態に関連付けられた計算スキームはまた、2D以上などのより高い次元に拡張することができる。さらに、
図6Aおよび
図6Bの説明で参照されるバンク割り当てパターンは、システム100がニューラルネットワークの様々な層に対して異なるストライド値をどのようにサポートするかを説明するために使用される例である。したがって、1つ以上の他のバンク割り当てパターンは、所与のストライド値を提供することができ、本開示の範囲内にある。
【0115】
一般に、現在の層を計算するとき、システム100は、制御論理106を使用して、次の層のストライド値を決定することができる。例えば、制御論理106は、ニューラルネットワークの計算のセットにおける次の層のストライド値を定義するプログラミング命令を参照することができる。命令は、ストライド=1と指定することができ、これは、アクティベーションメモリ108から入力を受信する次の層のストライドが1に等しいことを意味する。
図6Aに示されるように、電流層を計算するとき、システム100は、8つの連続する出力アクティベーションの単位で出力を生成するように構成することができる。
図5を参照する上記の例では、システム100は、カーネルサイズ3を使用して、最初の3サイクルで、出力アクティベーションのセット、out[0]~out[7]を生成する。次の3サイクルで、システム100は、出力アクティベーションの別のセット、out[8]~out[15]を生成する。次の3サイクルで、システム100は、出力アクティベーションの別のセット、out[16]~out[23]を生成する。
【0116】
システム100は、現在の層に対して生成された出力アクティベーションを格納するときに、次の層のストライド値を参照することができる。例えば、次の層のストライドが1であるとき、システム100は、出力602の第1のセットがメモリバンク614の第1のセット(例えば、banks_0~banks_7)に格納され、出力604の第2のセットがメモリバンク616の第2のセット(例えば、banks_0~banks_7)に格納され、出力606の第3のセットがメモリバンク618の第3のセット(例えば、banks_0~banks_7)に格納されるように、現在の層の出力を格納することができる。いくつかの実装形態では、出力アクティベーションのセット602、604、606の各ボックスは、1つの出力アクティベーションを表す。ボックス内の数字、例えば、0、1、2、3などは、出力アクティベーションのデータがどのメモリバンクに書き込まれるか、または格納されるかを示す。
【0117】
例えば、セット602の最初の8つの出力アクティベーションは、bank_0、bank_1、bank_2、bank_3、bank_4、bank_5、bank_6、およびbank_7の順序でアクティベーションメモリ108のメモリバンクに書き込まれる。いくつかの実装形態では、この書き込み順序は、セット604の次の8つの出力アクティベーションと、セット606の最後の8つの出力アクティベーションの両方について同じである。他の実装形態では、この書き込み順序は、制御論理106を使用して生成される特定のバンク割り当てパターンに基づいて、および次の層のストライド値に基づいて異なる可能性がある。クロスバーユニット114は、バンク割り当てパターンの命令を処理して、出力602、604、606のセットが、命令で指定されたバンク割り当てに基づいて適切なメモリバンクに格納されるようにする。
【0118】
上記のように、クロスバーユニット114は、特定のバンク割り当てパターンを使用して、出力602、604、606のセットを、アクティベーションメモリ108内のメモリバンクのアドレス位置に格納する。バンク割り当てパターンに基づいて、出力セットのデータが格納されるため、格納操作中にバンクコンフリクトが発生せず、格納された出力に対応する入力のデータを取得するための後続の読み取り操作中にバンクコンフリクトが発生しない。
【0119】
いくつかの実装形態では、システム100は、同じメモリバンク(例えば、bank_0)に格納される出力の異なるセットのデータが、異なるオフセットに格納されるか、または置かれるように構成される。メモリから入力データを格納および/または検索するとき、オフセットを使用して、入力データが格納されているアドレス位置を決定することができる。例えば、システム100は、オフセット8100で始まるデータを検索するためにデータ要求を発行することができる。一般に、オフセットは、オフセットID番号などの識別子であり、メモリバンク内のデータの正しい場所を指定するために使用することができる。クロスバーユニット114は、オフセット値を使用して、特定の出力を格納するメモリバンクの特定のアドレス位置を識別する。
【0120】
図6Aの実装形態では、同じメモリバンク(例えば、bank_1)に格納されているそれぞれのセット602、604、606の各出力のデータもまた、異なるオフセットに格納されている。例えば、セット602の8つの出力アクティベーションのデータは、8つのメモリバンク(bank_0~bank_7)のオフセット0、例えばオフセットID番号0000に格納される。セット604の8つの出力アクティベーションのデータは、メモリバンクのオフセット1、例えば、オフセットID番号0001に格納される。同様に、セット606の8つの出力アクティベーションのデータは、メモリバンクのオフセット2、例えば、オフセットID番号0002に格納される。
【0121】
システム100は、アクティベーションメモリ108(bank_0~bank_7)のメモリバンクから入力データを読み取るかまたは取得して、次の層の計算を実施し、次の層は、1に等しいストライドを有する。いくつかの実装形態では、アクティベーションメモリ108から取得された入力データは、出力602、604、606のセットからの出力アクティベーションに対応する。プロセッササイクル1、2、および3のデータ読み取りプロセスが
図6Aに示されている。以下に説明するように、
図6Aの例では、入力アクティベーションのそれぞれのセットは、3クロックサイクルにわたってアクティベーションメモリ108のメモリバンクから取得される。しかしながら、(例えば、アクティベーションなど)データの読み取り、ロード、またはそうでなければ取得するこのプロセスは、3プロセッササイクルを超えるか、3プロセッササイクル未満で行われ得る。
【0122】
第1のサイクルにおいて、システム100は、メモリbank_0~bank_7の入力608(アクティベーション)のセットを読み取る。第2のサイクルにおいて、システム100は、bank_1~bank_7の7つのアクティベーションおよびメモリbank_0の1つのアクティベーションを含む入力610のセットを読み取る。
図6Aに示されるように、システム100によって実施されるこれらの読み取り操作の間、バンクコンフリクトはない。第3のサイクルにおいて、システム100は、bank_2~bank_7)からの6つのアクティベーションと、メモリbank_0およびbank_1)からの2つのアクティベーションを含む入力612のセットをロードまたは取得する。この場合も、システム100によって実施されるこの読み取り操作について、バンクコンフリクトはない。
【0123】
図6Aの実装形態において、回転ユニット110は、アクティベーションがアクティベーションメモリ108から読み取られた後、入力データを回転させるために使用される。例えば、パラメータk0、k1、およびk2を伴う計算のサイクル1では、8つのアクティベーションのうちの第1のアクティベーションをbank_0から読み取り、パラメータk0を掛けることができる。サイクル2では、8つのアクティベーションのうち第1のアクティベーションをbank_1から読み取り、パラメータk1を掛け、次いで、前のサイクル、すなわち、サイクル1の結果を累積することができる。このようにして、システム100は、異なるメモリバンクから取得されたアクティベーションを同じ計算ユニット、例えば、特定のパラメータk0またはk1にアクセスする特定のMACにルーティングする必要がある場合がある。いくつかの実装形態では、システム100が入力データを計算ユニット112の正しいMACに提供するように、8つの異なるメモリバンクから取得された入力データを回転(またはシフト)させなければならない。
【0124】
図6Bは、ニューラルネットワーク計算を実施するために別のストライド値に基づいて入力データを処理することを示す例示的な
図600Bを示す。上述したように、システム100は、現在の層に対して生成された出力アクティベーションを格納するときに、次の層のストライド値を参照する。次の層のストライドが2であるとき、システム100は、出力630の第1のセットがメモリバンク642の第1のセットに格納され、出力632の第2のセットがメモリバンク644の第2のセットに格納され、出力634の第3のセットがメモリバンク646の第3のセットに格納されるように、現在の層の出力を格納することができる。この実装形態では、クロスバーユニット114は、次の層のストライド値2を参照し、このストライド値に基づいて、格納されたデータを取得するための格納操作またはその後の読み取り操作中にバンクコンフリクトが発生しないように、出力のそれぞれのセットのデータをアクティベーションメモリ108の特定のメモリバンクに格納させるバンク割り当てパターンを生成する。
【0125】
例えば、セット630内の8つの出力アクティベーションは、bank_0、bank_4、bank_1、bank_5、bank_2、bank_6、bank_3、およびbank_7の順序でアクティベーションメモリ108のメモリバンクに書き込まれる。セット632内の8つの出力アクティベーションは、bank_4、bank_0、bank_5、bank_1、bank_6、bank_2、bank_7、およびbank_3の順序でアクティベーションメモリ108のメモリバンクに書き込まれる。セット634内の8つの出力アクティベーションは、セット630内の出力アクティベーションの順序と一致する順序で、アクティベーションメモリ108のメモリバンクに書き込まれる。いくつかの実装形態では、書き込み順序は、制御論理106を使用して生成される特定のバンク割り当てパターンに基づいて、および次の層のストライド値に基づいて異なる。
【0126】
図6Bの実装形態では、同じメモリバンク(例えば、bank_4)に格納されているそれぞれのセット630、632、634の各出力のデータもまた、メモリバンクの異なるオフセットに格納されている。例えば、セット630の8つの出力アクティベーションのデータはオフセット0に格納され、セット632の8つの出力アクティベーションのデータはオフセット1に格納され、セット634の8つの出力アクティベーションのデータはオフセット2に格納される。この例は、出力アクティベーションをアクティベーションメモリ108に格納または書き込むときのクロスバーユニット114の利点を示している。次の層に割り当てられ得る異なるストライド(またはスキップ)パラメータをサポートするために、システム100は、データをアクティベーションメモリ108のメモリバンクに格納する前に、出力のデータをシャッフルすることを要求され得る。このシャッフル操作は、クロスバーユニット114によって可能になる。前の層の記憶された出力アクティベーションに対応する次の層で入力を処理するために、システム100は、
図650に示すように、ストライド=2で以前に記憶された出力アクティベーションのデータを読み取る。以下に説明するように、
図6Bの例では、入力アクティベーションのそれぞれのセットは、3クロックサイクルにわたってアクティベーションメモリ108のメモリバンクから取得される。しかしながら、(例えば、アクティベーションなど)データの読み取り、ロード、またはそうでなければ取得するこのプロセスは、3プロセッササイクルを超えるか、3プロセッササイクル未満で行われ得る。
【0127】
プロセッササイクル1、2、および3のデータ読み取りプロセスが
図6Bに示されている。第1のサイクルにおいて、システム100は、bank_0~bank_7の入力636(アクティベーション)のセットを読み取る。第2のサイクルにおいて、システム100は、bank_4~bank_7、およびbank_0~bank_3の入力638のセットを読み取る。
図6Bに示されるように、システム100によって実施されるこれらの読み取り操作の間、バンクコンフリクトはない。第3のサイクルにおいて、システム100は、bank_1~bank_7の入力640のセットと、メモリbank_0からの1つの入力とをロードまたは取得する。この場合も、システム100によって実施されるこの読み取り操作について、バンクコンフリクトはない。いくつかの実装形態では、システム100は、特定の繰り返しパターンを使用して、いかなる読み取りバンクコンフリクトまたは書き込みバンクコンフリクトもなしに、次の層の特定のストライド値(例えば、ストライド=2)をサポートする。
【0128】
図6Bの実装形態において、回転ユニット110は、アクティベーションがアクティベーションメモリ108から読み取られた後、入力データを回転させるために使用され得る。例えば、上に示したように、アクティベーションメモリ108の異なるメモリバンクから取得された入力データは、システム100が入力データを計算ユニット112の正しいMACに提供するように、回転(またはシフト)させる必要があり得る。
【0129】
図7は、例示的なカーネル構造702、704、706、ネストされたforループ710、およびカーネルロケーションメモリの例示的なメモリワード712を示す図を示す。カーネルロケーションメモリは、1つ以上のカーネル構造(例えば、カーネル702、704、706)を表すデータを格納するように構成される。本明細書で説明するように、コア102は、コアの制御論理106の柔軟性を強化または増大させるカーネルロケーションメモリを含むように構成することができる。強化された柔軟性により、システム100およびコア102は、それぞれの形状およびスパース性属性が異なる可能性がある様々なタイプのカーネル構造を効率的に処理することができる。例えば、コア102は、制御論理106のカーネルロケーションメモリを使用して、カーネル構造内の異なる種類のデータスパース性を効率的にサポートすることができる。
【0130】
一般に、カーネルロケーションメモリ130は、コア102に位置し、例えば、制御論理106に埋め込まれ得る。カーネルロケーションメモリ130は、システム100が、任意の形状のカーネル構造を伴うことができる様々なニューラルネットワーク計算をサポートすることを可能にする。カーネル構造の形状は、カーネル構造のそれぞれのスパース性を参照して説明することができる。カーネル構造のスパース性は、カーネル構造を表すテンソルのそれぞれの要素に割り当てられた個々のゼロの量に対応する。例えば、カーネル構造702は、構造がその要素に割り当てられたゼロを有していないので、非スパースカーネルに対応する。カーネル構造704は、構造がその要素にゼロを有し、構造が一般にダイアモンドに対応する形状を有するようにするので、ダイアモンド形状のカーネルに対応する。カーネル構造706は、ゼロがその要素に任意に割り当てられているように見えるので、任意のスパースカーネルに対応する。
図7に示されるように、カーネル構造706は、非ゼロの値を有する第1のデータ要素708aと、ゼロ値を有する第2のデータ要素708bとを有することができる。
【0131】
コア102のカーネルロケーションメモリは、例示的なニューラルネットワーク計算中に、カーネル構造の1つ以上の空間次元(x、y)にわたって任意の形状をサポートするように構成される。空間次元x、yに加えて、コア102のカーネルロケーションメモリはまた、zin方向のスパース性をサポートすることができる。上で論じたように、zinまたは深さの次元は、入力またはアクティベーションボリュームの第3の次元に対応することができ、画像のそれぞれのカラーチャネルを表すことができる。
【0132】
一例では、任意のカーネル形状を有する例示的な長方形カーネルは、ゼロ値が割り当てられた複数の要素を含むことができる。カーネル構造またはテンソルに複数のゼロがあると、システムの効率またはハードウェア使用率が低下する可能性がある。効率の低下とハードウェア使用率の低下は、システムが処理サイクルを失って、計算を実施するための有用なデータを含まないゼロ要素をロードするときに発生する。以下のように、本明細書は、カーネルロケーションメモリによって可能にされる制御機能を使用して、非ゼロのカーネル構成要素のみを計算ユニット112の計算セルにロードするための技術を説明する。説明されている技術は、システムがゼロカーネル構成要素をロードするサイクルを失うことがないため、システムの効率を改善する。システム100または他のハードウェアを使用して、特定のスパース性またはスパースパターンを有するようにニューラルネットワークを訓練することができる。訓練フレームワークは、システム100によってサポートされているスパース性を活用するための効率的なネットワークを構築することができる。
【0133】
コア102は、制御論理106のカーネルロケーションメモリを使用して、非ゼロのカーネルロケーションを格納するように構成される。いくつかの実装形態では、カーネルロケーションメモリは、アクティベーションメモリ108とは別のメモリである。場合によっては、システム100は、システム100に含まれる各コア102のカーネルロケーションメモリとして、例示的な記憶媒体、例えば、ランダムアクセスメモリを使用する。次の例は、カーネルロケーションメモリに関連する以下の説明のコンテキストを提供するために含まれている。一実施形態では、ネストされたループ710は、ニューラルネットワークの例示的な畳み込み層で入力または入力アクティベーションのセットを処理するためにコア102によって使用される。例えば、3×3カーネル構造が16×16×8入力アクティベーションの入力テンソルに適用されて、16×16×32出力アクティベーションの出力テンソルが生成される。x_loopおよびkx_loopループからのforループインデックスは、3D入力テンソルのxインデックスを計算するために追加され、y_loopおよびky_loopループは、yインデックスのために、zin_loopループはzインデックスのために追加される。このようにして、システム100は、(x,y,z)=(x_loop+kx_loop,y_loop+ky_loop,zin_loop)に基づいて入力テンソル位置を反復することができる。いくつかの実装形態では、これは、前述のbx×by×bz基本テンソルユニットのアンカーポイントに対応し、アンカーポイントは、基本テンソルユニットの原点でのアクティベーションを指す。例えば、基本テンソルユニットの原点でのアクティベーションを参照するアンカーポイントは、z方向の第1のチャネルのxおよびy位置の左上隅でのアクティベーションである可能性がある。
【0134】
任意の形状のカーネルの場合、システム100は、カーネルロケーションメモリから取得されたデータを使用して、ky_loop、kx_loop、およびzin_loopを置き換えるように構成される。例えば、カーネルロケーションメモリのメモリワード712は、3つのデータフィールドを有することができ、ここで、3つのフィールドの特定のフィールドは、それぞれのx、y、またはzinインデックスを示す。いくつかの実装形態では、メモリワードの第4のフィールドを使用して、所与のzinインデックスのカーネル計算の終了を示す。場合によっては、xインデックスおよびyインデックスは、それぞれ、mビットおよびnビットのデータサイズを有することができ、システム100は、このmビットおよびnビットのデータサイズに基づいて、最大2
mx2
nのカーネルウィンドウをサポートするように構成することができる。同様に、システム100は、単一サイクルで、zinインデックスのデータの一部(例えば、2、4、または6のzin)を読み取ることができる。zinインデックスのパラメータ値は、読み取られているデータのzin部分のインデックスを示すことができる。例えば、{zin index}=0に変換されるパラメータ値は、zin要素[0]に対応するデータの部分を示すか、または{zin index}=1に変換されるパラメータ値は、zin要素[1]に対応するデータの部分を示すことができる。場合によっては、zinインデックスは、lビットのデータサイズを有することができ、システム100は、このlビットデータサイズに基づいて、特定のzinインデックスサイズをサポートするように構成することができる。
図7に示されるように、メモリワードは、メモリワードがインデックスの最後の要素に対応することを示す終了フラグを含むことができる。
【0135】
図8は、カーネルロケーションメモリのメモリアドレスに関する情報を含む例示的なデータテーブル800を示す。例えば、表800は、例示的なカーネルのxインデックス806、yインデックス808、およびzinインデックス810のメモリアドレス位置に格納されたデータ内容を示している。データの内容にアクセスして、入力テンソルを処理するために使用することができる。いくつかの実装形態では、システム100は、パラメータメモリに格納されたパラメータテンソルのインデックスを識別するように構成される。次いで、システムは、識別されたインデックスを、アクティベーションメモリ108に格納された入力テンソルの(x、y、z)位置に追加して、最終的な(x、y、z)位置を計算することができる。例えば、16×16×8入力テンソル802のアクティベーションを処理して、16×16×32出力テンソルの出力アクティベーションを生成することができる。コア102は、ネストされたループ804を使用して、16×16×8入力テンソル802のアクティベーションを処理することができる。
【0136】
この処理操作が開始されると、コア102は、zout_loop=0、y_loop=0、およびx_loop=0となるように、ネストされたループ804を初期化することができる。説明された技術を使用して、システム100は、カーネルロケーションメモリのメモリアドレスロケーションを、例えば1つずつ読み取るように構成される。例えば、第1のサイクルにおいて、システムは、コア102に、xインデックス806、yインデックス808、およびzinインデックス810の各々のメモリアドレスを読み取らせて、カーネルロケーションメモリからデータ内容(0、2、0)を取得させる。カーネルロケーションメモリのこれらのインデックスについて取得されたデータは、forループ804の出力に追加され、(0+0、0+2、0)=(0、2、0)に等しい最終的な(x、y、z)ロケーションを計算する。新しい基本テンソルユニットがアンカー位置(0、2、0)から読み取られる。
【0137】
第2のサイクルにおいて、システム100は、コア102にメモリアドレスを読み取らせて、xインデックス806、yインデックス808、およびzinインデックス810の各々について、カーネルロケーションメモリからデータ812(1、4、0)を取得させる。この場合、システムは(0+1、0+4、0)に基づいて最終(x、y、z)を計算し、結果(1、4、0)を取得する。システム100は、第3、第4、または第5のサイクルに対して同様の計算を実施することができる。いくつかの実装形態では、システム100は、終了フラグ条件(例えば、終了フラグ=1)が満たされたことを示すために使用されるパラメータ(例えば、end_flag)の発生を識別するように構成される。上に示したように、満たされる終了フラグ条件の発生は、現在のメモリワードがカーネルロケーションメモリを伴うプロセス反復の終了であることを意味する。例えば、end_flagパラメータを使用して、カーネルロケーションメモリの反復が完了したことをシグナリングすることができる。
【0138】
いくつかの実装形態では、第1のカーネルロケーションメモリ反復の完了は、処理されている入力テンソル802の現在の位置[要素、インデックス]を参照して増加を引き起こす。このようにして、入力テンソル802の現在の位置値は、カーネルロケーションメモリの次の反復のために増加される。例えば、x_loopは、入力テンソル802に基づいて、(zout_loop,y_loop,x_loop)=(0,0,1)に対応することができるストライドの量だけ増やすことができる。この実装形態では、システム100は、カーネルロケーションメモリのメモリアドレスのセット内の第1の位置の読み取りを開始して、データ内容を取得し、第1の反復に関して上記と同様の計算を実施する。システム100は、カーネルロケーションメモリの読み取りに応答して、この同様の計算を適用して、最終セットx、y、およびz出力を計算する。
【0139】
この第2の反復の処理は、第1の反復と実質的に同じとすることができる。例えば、システム100は、終了フラグパラメータの発生を識別し、終了フラグパラメータの値814を読み取って、終了フラグ条件が満たされているかどうか(例えば、終了フラグ=1)を決定することができる。システムは、終了フラグ条件が満たされていると決定したことに応答して、カーネルロケーションメモリの反復が完了したことを示す信号を生成することができる。カーネルロケーションメモリの反復が完了すると、x_loopは0から15まで反復し、システムは、次いで、入力テンソル802の現在の位置値を増やすことができ、これは(zout_loop,y_loop,x_loop)=(0,1,0)に対応し得る。y_loopが0から15まで反復するカーネルロケーションメモリの反復が完了すると、入力テンソル802の現在の位置が増加し、例えば、(zout_loop,y_loop,x_loop)=(1,0,0)に対応する、異なるzoutへの変更が引き起こされることがある。したがって、カーネルロケーションメモリの別の反復は、zout=1(818)のメモリアドレス816からの読み取りを開始することができる。いくつかの実装形態では、システム100は、zout forループを監視して、zout forループの現在の位置値を決定し、zout forループの位置値の増加を検出するように構成されたzout監視論理を含む。
【0140】
図9は、深さ方向のニューラルネットワーク計算を実施するときに利用することができる並列処理を示す例示的な図の例を示す。以下でより詳細に説明するように、並列処理は、少なくとも深さ方向の畳み込みを参照して説明することができる。一般に、複数の入力チャネルを持つ入力テンソルが与えられると、深さ方向の畳み込みの計算は、i)入力テンソルとパラメータの対応するフィルタ(k0、k1、k2など)とをチャネルに分割し、ii)入力テンソルの各チャネルについて、チャネルの入力を対応するフィルタパラメータで畳み込み、対応する出力を生成することを含み得る。複数の出力をプールまたは連結して、例示的な出力テンソルの例の出力アクティベーションを生成することができる。一般に、1つ以上の入力チャネルを伴う深さ方向の畳み込みは、出力テンソルの1つ以上の出力チャネルの出力アクティベーションをもたらし得る。
【0141】
上記で説明したように、例示的な入力テンソルは、入力テンソルの幅、高さ、および深さを含むことができる多次元(例えば、3D)入力テンソルであり得る。これらの次元は、それぞれx次元、y次元、およびzin次元に対応できる。深さまたはzin次元は、入力ボリュームまたはアクティベーションボリュームの第3の次元に対応し、画像のそれぞれのカラーチャネルを表すことができる。いくつかの実装形態では、深さ方向の畳み込みを計算するときに、所与のチャネルでの単一のアクティベーションを複数のパラメータ(kxおよびky並列処理)で畳み込むことができる。このようにして、システム100の並列処理の特徴を活用する機会を活用して、例えば、従来の回路を使用して深さ方向の畳み込みを実施することができる速度と比較して、深さ方向の畳み込みの実施を加速することができる。いくつかの実装形態では、システム100の特殊なプロセッサハードウェア回路を使用して、深さ方向の畳み込みが加速され、システム100はまた、計算ユニット112で比較的高い使用率を達成する。例えば、高い使用率は、MACの70%以上が計算の実施に使用されていることを特徴とし得る。
【0142】
システム100は、その並列処理の特徴を活用して、多層ニューラルネットワークで計算を実施するために使用することができる様々な計算スキームをサポートするように構成されている。いくつかの実装形態では、例えば、外部コントローラまたはホストデバイスからコア102で受信されるニューラルネットワーク計算のためのパラメータおよび命令に応じて、異なるタイプの並列処理を活用することができる。場合によっては、密な畳み込みなど、特定の畳み込み計算に対して様々な並列計算の機会が存在する可能性がある。例えば、密な畳み込みでは、システム100は、計算ユニット112で利用可能なMACの量に基づいて、アクティベーションのセットのために特定の数の入力チャネル(zin)および出力チャネル(zout)をサポートするように構成することができる。いくつかの実装形態では、システム100は、密な畳み込みでの計算にzin、zout、x、およびyの並列処理を使用する。特定の方向(または特定の次元に沿った)の並列処理は、同じ計算サイクルで計算されるその方向の複数の要素に対応できる。例えば、8x並列処理は、計算例500のように、x方向の8つの要素が同時に(例えば、同時に)計算されるときに対応することができる。システム100は、a、b、c、およびdが整数値である場合、a×b×c×dのMACユニットを必要とするa-zin、b-zout、c-x、およびd-yの並列処理をサポートするように構成される。例えば、システム100は、計算ユニット112で8×8×6×6=2304のMACユニットを必要とする8個のzin、8個のzout、6x、および6yの並列処理をサポートするように構成することができる。
【0143】
しかしながら、深さ方向の畳み込みでは、入力チャネルを使用して複数の出力チャネルを生成することができる。例えば、単一の入力チャネルを使用して、1つの出力チャネル、2つの出力チャネル、または4つの出力チャネルを生成することができる。以下でより詳細に説明するように、深さ方向の畳み込みは、zinの次元とzoutの次元との間の接続が少なく、zinおよびzoutの並列処理が非効率になるため、並列計算の機会が低減する。深さ方向の畳み込みのこの特性により、計算ユニットでのMACユニットの使用率が大幅に低減し、プロセッサ回路の効率が低下する可能性がある。
【0144】
システム100のプロセッサハードウェア回路によってサポートされる並列処理の特徴の中で、kxおよびkyの並列処理は、深さ方向の畳み込みに関連付けられた計算のためのMACユニット利用を増加させる機会を提供することができる。kxおよびky並列処理では、xおよびy方向の複数のパラメータに同時にアクティベーションが乗算され、xおよびy方向の単一パラメータ(k0、k1、およびk2)は、密な畳み込みの例500で単一のサイクルで乗算される。以下で説明するように、kxおよびkyの並列処理は、異なるzout倍数の場合に実行することができ、ここで、「zout倍数」は、単一の入力チャネルから生成されるいくつかの出力チャネルを指す。例えば、1つの入力チャネルが2つの出力チャネルを生成する場合、この計算ではzout倍数=2である。
【0145】
次に
図9~
図12を参照すると、例示的な1D計算を使用して、例えば、カーネルサイズ=7を使用するkx並列処理を説明する。説明のために1Dの例を図に示すが、1D計算を実施するためのこのスキームは、2D以上などのより高い次元に拡張することができる。特に、1D計算の例は、特定のサイクルで入力またはアクティベーションがどのように読み取られるか、および2kxの並列処理がどのように実行されるかを示す。所与の深さ方向の畳み込みについて、システム100は、入力構造のx方向の単一サイクルで8つのアクティベーション902を読み取る。例えば、第1のサイクルでは、インデックスin[0]~in[7]でのアクティベーション902が、アクティベーションメモリ108から読み取られる。アクティベーション902は、制御論理106によって発行された計算命令に基づいて、特定の数のMACにわたって分散することができる。例えば、2つのアクティベーション904のセットは、計算を実施するために使用されるMACのグループ内の少なくとも1つのMAC906に分配され得る。入力908は、ゼロ値を有する画像ピクセルを表すことができる。示されているように、入力0および1は、それぞれパラメータk0およびk1で乗算される。次いで、乗算結果が累積されて、出力アクティベーション0(912)、例えば、完全または部分的な出力アクティベーションが形成される。同様に、入力1および2は、それぞれパラメータk0およびk1で乗算され、乗算結果も累積されて、完全または部分的な出力アクティベーション1が形成される。MAC910では、入力7にパラメータk0を掛けて、部分出力7が形成され得る。
【0146】
いくつかの実装形態では、
図9に示される1Dの例は、2つの乗数および1つのアキュムレータを有するMAC906などのMACユニットで実現することができ、アキュムレータは、1つ以上のプロセッササイクルにわたって累積された部分和を加算する加算回路を含む。MAC906などのMACユニットがx方向とy方向の両方に4つの乗数(および1つのアキュムレータ)を含み、2つの乗数がkx並列処理を可能にし、他の2つの乗数がky並列処理を可能にするとき、このような実装形態は二次元に拡張することができる。この1Dの例では、x方向のみが参照されるため、2つの乗数のみが記述されている。
図9に示されるように、1D入力構造のx方向における2つのアクティベーション904のセットは、単一の出力に対して乗算および累積され、それにより、2のkx並列処理を表す。
【0147】
いくつかの実装形態では、サイクル=1で発生するものと同様の計算が、次のプロセッササイクル中に、パラメータk0、k1の少なくとも1つを使用して、x方向に沿った入力の別のウィンドウに対しても発生し得る。場合によっては、前のサイクル中に読み取るか、または使用すると、例えばk1のパラメータを、一時レジスタに格納することができ、一時レジスタに後でアクセスしてパラメータを取得し、後続の計算を実施することができる。例えば、レジスタにアクセスして、k1を取得し、計算ユニット112のMAC910に供給して、後続の乗算結果を生成する。乗算結果は、出力に累積される。
【0148】
第2のサイクルでは、
図10に示されるように、インデックスin[2]~in[9]でのアクティベーションがロードされる。最初の2つのアクティベーションin[2]とin[3]のデータは、MAC1002で示されるように、それぞれk2とk3とで乗算され、次いで、最初のサイクルの結果に累積されて、部分和in[0]*k0+in[1]*k1+in[2]*k2+in[3]*k3が生成される。しかしながら、MAC1004では、アクティベーションin[8]およびin[9]のデータにk1およびk2が乗算され、ここで、k1は、前のサイクルから読み取られ、サイクル2で使用するために、一時レジスタに格納される。部分和in[7]*k0+in[8]*k1+in[9]*k2は、MAC1004を使用して生成される。
【0149】
第3のサイクルでは、
図11に示すように、同じ計算が異なるデータセット(in[4]~in[11])およびパラメータ(k4とk5)を使用して実行される。1102では、in[4]およびin[5]にそれぞれk4およびk5を掛けて、部分和in[0]*k0+in[1]*k1+in[2]*k2+in[3]*k3+in[4]*k4+in[5]*k5が生成される。1104では、部分和in[7]*k0+in[8]*k1+in[9]*k2+in[10]*k3+in[11]*k4が生成される。
【0150】
図12に示す最後のサイクルでは、1202にin[6]にk6が乗算され、次いで累積され、総和in[0]*k0+in[1]*k1+in[2]*k2+in[3]*k3+in[4]*k4+in[5]*k5+in[6]*k6が得られる。7つの入力データにk0~k6を掛けて累積し、カーネルサイズ7を計算する。カーネルサイズが7であるため、第2の入力1204はゼロである。1206では、乗算に2つのデータin[12]およびin[13]を使用でき、それぞれk5およびk6が掛けられる。1206によって生成される総和は、in[7]*k0+in[8]*k1+in[9]*k2+in[10]*k3+in[11]*k4+in[12]*k5+in[13]*k6であり、7つのデータにk0~k6を乗算し、累積して7のカーネルサイズを計算する。いくつかの実装形態では、上記の例の動作の制御は、制御論理106によって調整されて、アクティベーションおよびパラメータをMACユニットに分配および供給することができる。いくつかの実装形態では、システム100は、1つの入力チャネルが複数の出力チャネルを生成するzout倍数をサポートするために、同じアクティベーションを使用するが異なるパラメータセットを使用する異なるセットのMACユニットを使用することができる。
【0151】
一般に、システム100は、様々な異なるkx-ky並列処理メカニズムをサポートすることができ、複数の異なるkx-ky並列処理メカニズムでさえ、単一のハードウェア回路でサポートすることができる。
図9~
図12は、2kx並列処理のデータとパラメータの分配パターンを示しているが、同様の分配方式で4kx並列処理をサポートすることができ、構成可能な分配論理を使用して、複数の異なるkx-ky並列処理メカニズムをサポートすることができる。この説明のために、次のタイプの構成、i)2×2kx-ky並列処理でzout倍数が4に等しい、ii)4×4kx-ky並列処理でzout倍数が1に等しい、iii)4×2kx-ky並列処理でzout倍数が2に等しい、が考えられる。kx-ky構成iii)の場合、これはkx並列処理=4およびky並列処理=2またはkx並列処理=2およびky並列処理=4のいずれかとして実装することができる。
【0152】
典型的に、深さ方向の畳み込みカーネルは、入力チャネルと出力チャネルとの間の接続が少ないため、利用される可能性のあるzinおよびzoutの並列処理の量が低減する。システム100は、カーネルのxおよびy方向の並列処理、すなわちkx-ky並列処理を利用することによって、この並列処理の低減を克服することができる。加えて、kx-ky並列処理の正確な範囲は、密な畳み込みと深さ方向の畳み込みとの両方で乗数の使用率が最大になるように選択することができる。
【0153】
いくつかの実装形態では、4×4kx-ky並列処理の場合、システム100は、2×2kx-ky並列処理で同じ数の総乗数を必要とする場合がある。例えば、2kxの並列処理をカバーするために必要な乗数の数と比較して、4kxの並列処理をカバーするために、2倍の乗数が必要になる場合がある。これは、y方向のky並列処理でも同じであり、合計で4倍の乗数が必要であるが、上記のように、4×4kx-ky並列処理ではzout乗数=1であるのに対し、2×2kx-ky並列処理の場合はzout乗数=4であるため、この要件は否定することができる。いくつかの実装形態では、4×4kx-ky並列処理は、中間部分和から出力アクティベーション914を生成するために追加の加算器を必要とする。しかしながら、追加の加算器ステージは、2×2kx-ky並列処理ではスキップすることができる。
【0154】
再び
図9を参照すると、この1Dの例では、2kxと4kxの両方の並列処理をサポートするために2つの「アクティベーション分配+MACユニット」モジュールが存在する。2Dの例では、2×2、2×4、4×2、および4×4kx-ky並列処理をサポートするために4つのそのようなモジュールが必要である。加算器ステージ916は、2セットの出力アクティベーション、すなわち、出力アクティベーションAおよび出力アクティベーションBを受信する。この例では、出力アクティベーションの各セットは、8つの出力アクティベーションを含む。2kxの並列処理を伴う第1のケースでは、加算器ステージ916はスキップされる。出力には、2kx並列処理モードの最終出力として選択される2セットの出力アクティベーションがある。4kx並列処理を伴う第2のケースでは、加算器ステージ916は、2セットの出力アクティベーションを合計し、その結果、4kx並列性モードでの最終出力として選択される1セットの出力アクティベーションになる。
【0155】
いくつかの実装形態では、アーキテクチャは、構成可能な論理を採用して、密な畳み込み、2×2kx-ky並列処理での深さ方向の畳み込み、2×4kx-ky並列処理での深さ方向の畳み込み、4×2kx-ky並列処理での深さ方向の畳み込み、および4×4kx-ky並列処理での深度方向の畳み込みなどの操作モードに応じて入力アクティベーションおよび/パラメータを再配置することができる。いくつかの実装形態では、アーキテクチャは構成可能な論理を採用して、操作モードに応じて出力アクティベーションを再配置することができる。
【0156】
図13は、zout倍数=1の場合の深さ方向の畳み込み層1320を示す例示的な図を示す。いくつかの実装形態では、各入力チャネルのカーネルは、異なるパラメータを使用することができるが、同じ形状、例えば3×3または7×7を有する。いくつかの実装形態では、通常の密な畳み込みは4D重みテンソルを使用することができるが、深さ方向の畳み込みは、3D重みテンソルしか使用することができない。
【0157】
一般に、深さ方向の畳み込みは、通常の密な畳み込みと比較して、スパースである(例えば、非常にスパースである)可能性がある。これは、接続数をチャネル数で割ったものであるからである。入力および出力アクティベーションチャネルの並列処理を多用する従来の回路では、深さ方向の畳み込みを実施するときに、計算ユニットの高い使用率を達成することができない。これは、メモリ帯域幅に対する入力チャネルおよび出力チャネルを伴う計算の比率が、典型的な密な畳み込みよりも深さ方向の畳み込みの方がはるかに低いためである。しかしながら、システム100の専用ハードウェア回路の回転ユニット110から計算ユニット112内のMACへのルーティングは、従来のハードウェア回路で観察されるレートよりも高い使用率を達成するように構成することができる。いくつかの実装形態では、入力および重みの接続パターンを計算ユニット112のMACに変更することによって、使用率を改善することができる。これには、密な畳み込みや深さ方向の畳み込みなどの操作モードに応じてルーティングスキームを変更するための構成可能な論理が必要になる場合がある。
【0158】
構成可能な論理を利用して柔軟な接続パターンをサポートすることにより、システム100は、密な畳み込みと深さ方向の畳み込みの両方で高い使用率を達成することができる。例えば、深さ方向の畳み込みが有するチャネル(例えば、入力チャネルまたは出力チャネル)間のリンクは少ない、すなわち、単一の入力チャネルを使用して、複数の出力チャネルが生成される。一方、密な畳み込みは、複数の入力チャネルを使用して複数の出力チャネルを生成する。コア102は、深さ方向の畳み込みにおいて空間カーネル内の並列処理の機会を利用するように構成され得る。このようにして、システム100は、構成可能な接続論理を使用して、例えば、bx×by×bz基本入力テンソルのbz-zinデータを空間次元の一部として扱うことにより、高い使用率を達成することができる。
【0159】
この構成は、2×2kx-ky並列処理をサポートする4×4×b
zの例示的な基本入力テンソルを示す
図14の例示的なスキームを使用して取得することができる。入力テンソルのxおよびy空間次元の4×4データサイズへの参照は、システム100がkx-ky並列処理をサポートする方法を説明するために使用される例である。xおよびy次元の他のデータサイズは、この説明の範囲内である。
【0160】
4×4×b
z入力アクティベーション1402は、b
z4×4×1アクティベーション1404にスライスすることができる。この例は、第1の入力チャネル1406がどのように分配されてMACユニットに供給されるかを示しており、他のすべてのチャネルも同じ方法で分配される。2×2kx-ky並列処理の場合、4×4×1入力アクティベーション1406は複数の2×2ピース1408に分割され、各2×2ピースは入力ウィンドウを表し、2×2ウィンドウの各要素は、4×4×1ウィンドウ1406内の隣接データである。いくつかの実装形態では、エッジ1410、1412、および1414にある1つ以上の2×2ウィンドウは、908のように最後のピクセルウィンドウをサポートするために冗長である。これらの2×2ウィンドウは、隣接する2×2ウィンドウと同じデータを必要とする場合があるが、上記のように、一部のデータをマスクまたはゼロにすることができる。
図14の実装形態において、入力ウィンドウ1410は、2kx並列処理に必要とされ得る冗長ウィンドウを示し、入力ウィンドウ1412は、2ky並列処理のための冗長ウィンドウである。入力ウィンドウ1414は、2×2kx-ky並列処理のための冗長ウィンドウである。4×4および2×4(4×2)kx-ky並列処理では、様々な分配パターンを使用して、所与のkx-ky並列処理をサポートすることができる。
【0161】
4×4kx-ky並列処理を使用するとき、この計算スキームは、例えば、4サイクルで5×5の畳み込みを行うことを伴い得る。システム100の専用ハードウェア回路を使用して、この計算スキームは、従来の回路と比較して、例示的な計算ユニットにおけるMACクラスタの改善されたパーセント使用率を達成するように構成することができる。例えば、計算スキームは、少なくともカーネルサイズ、zout倍数、およびkx-ky並列処理に応じて、計算ユニット112で70%を超えるMACユニット使用率を達成することができる。いくつかの実装形態では、この第1の計算スキームでは、部分和の完全な削減を実施するために追加の計算が必要になる場合がある。
【0162】
システム100は、計算ユニット112でのMACの使用率を改善して、9サイクルで2x2kx-ky並列性を使用して、4つの同時(すなわち、zout倍数=4)、例えば、5×5の深さ方向の畳み込みを計算することができる。この第2の計算スキームでは、出力チャネルは、4つの別々の深さ方向の畳み込みに属する4つの出力にわたって、入力チャネルと同じ2×2ブロックに対応し得る。この第2の計算スキームは、実質的により高い使用率を提供することができ、削減ステップの必要性を回避する。
【0163】
システム100はまた、計算ユニット112でのMACの使用率を改善して、6サイクルで2×4kx-ky並列性を使用して、2つの同時(すなわち、zout倍数=2)、例えば、5×5の深さ方向の畳み込みを計算することができる。
【0164】
いくつかの実装形態では、
図13を参照して説明された計算の第1の部分の結果は、クロスバーユニット114を使用して処理されたバンク割り当てパターンを使用して、例えば、複数のメモリバンクにわたるアクティベーションメモリ108の位置をアドレス指定するために書き込むことができる。場合によっては、複数のメモリバンクからの読み取りを並行して可能にするために、クロスバーユニット114は、異なるx次元およびy次元の順列を定義する命令を処理することができる。
【国際調査報告】