(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024096786
(43)【公開日】2024-07-17
(54)【発明の名称】ニューラルネットワーク計算ユニットにおける入力データのスパース性の活用
(51)【国際特許分類】
G06F 17/16 20060101AFI20240709BHJP
【FI】
G06F17/16 P
【審査請求】有
【請求項の数】11
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2024060830
(22)【出願日】2024-04-04
(62)【分割の表示】P 2022138360の分割
【原出願日】2017-08-22
(31)【優先権主張番号】15/336,066
(32)【優先日】2016-10-27
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】15/465,774
(32)【優先日】2017-03-22
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ウ,ドン・ヒョク
(72)【発明者】
【氏名】ナラヤナスワミ,ラビ
(57)【要約】 (修正有)
【課題】特殊用途の計算ユニットを用いて機械学習計算を実行する方法、ストレージデバイス及び電子システムを提供する。
【解決手段】コンピューティングデバイスによる方法は、コントローラが、少なくとも部分的に、インデックスに関連付けられたメモリアドレス位置から提供される入力アクティベーションを受信し、その各々がゼロ値又は非ゼロ値の何れを有するかを判断し、メモリバンクに入力アクティベーションのうち少なくとも1つを格納して非ゼロ値である入力アクティベーション値を有する1つ以上のメモリアドレス位置を含むインデックスを生成し、メモリバンクから計算アレイのうちの1つ以上のユニットによってアクセス可能なデータバスに対して少なくとも1つの入力アクティベーションをブロードキャストし、ブロードキャストを検出し、ゼロ入力に関連付けられた乗算演算を防ぐための制御信号を計算アレイのうちの少なくとも1つのユニットに提供する。
【選択図】
図5
【特許請求の範囲】
【請求項1】
コンピュータにより実現される方法であって、
コンピューティングデバイスが、少なくとも部分的に、前記コンピューティングデバイス外にあるソースから提供される複数の入力アクティベーションを受信するステップと、
前記コンピューティングデバイスのコントローラが、前記複数の入力アクティベーションの各々がゼロ値または非ゼロ値のうちのいずれを有するかを判断するステップと、
前記コンピューティングデバイスのメモリバンクに前記入力アクティベーションのうち少なくとも1つを格納するステップと、
前記コントローラが、非ゼロ値である入力アクティベーション値を有する1つ以上のメモリアドレス位置を含むインデックスを生成するステップと、
前記コントローラが、前記メモリバンクから、少なくとも1つの入力アクティベーションを、計算アレイのうちの1つ以上のユニットによってアクセス可能なデータバスに対して提供するステップとを含み、
前記アクティベーションは、少なくとも部分的に、前記インデックスに関連付けられたメモリアドレス位置から提供される、方法。
【請求項2】
前記インデックスは、複数のビットを含むビットマップに基づいて作成され、前記ビットマップのうちの各々のビットは、非ゼロ入力アクティベーション値またはゼロ入力アクティベーション値のうち少なくとも1つを示す、請求項1に記載の方法。
【請求項3】
非ゼロ値を有する第1の入力アクティベーションを提供して、少なくとも1つのユニットが前記非ゼロ値を用いて計算を実行し、その後、ゼロ値を有する第2の入力アクティベーションを提供し、少なくとも1つのユニットにおいて、前記ゼロ値を用いて実行される可能性のある計算を防止するステップをさらに含む、請求項1に記載の方法。
【請求項4】
前記防止するステップは、前記入力アクティベーションが前記インデックスに関連付けられていないメモリアドレス位置から提供されると前記コントローラが判断することに応じて、行なわれる、請求項3に記載の方法。
【請求項5】
前記入力アクティベーションが前記インデックスに関連付けられていないメモリアドレス位置から提供されることを、前記コントローラが検出するステップと、前記検出するステップに応じて、前記ゼロ入力アクティベーション値に関連付けられた乗算演算を防止するための制御信号を前記計算アレイのうちの少なくとも1つのユニットに提供するステップとをさらに含む、請求項4に記載の方法。
【請求項6】
前記コントローラが、テンソル計算のうち第1の入力アクティベーションを用いる第1の部分を第1のユニットにマップし、前記テンソル計算のうち前記第1の入力アクティベーションも用いる第2の部分を前記第1のユニットとは異なる第2のユニットにマップするステップをさらに含む、請求項1に記載の方法。
【請求項7】
単一の入力アクティベーションを連続的に前記データバスに対して提供するステップをさらに含み、前記単一の入力アクティベーションは、前記インデックスに関連付けられたメモリアドレス位置からアクセスおよび選択される、請求項1に記載の方法。
【請求項8】
前記提供するステップはさらに、ゼロ値を有する入力アクティベーションを提供しないステップを含む、請求項1に記載の方法。
【請求項9】
1つ以上の処理デバイスによって実行可能であるとともに以下の動作を実行するための命令を格納する1つ以上の機械読取り可能ストレージデバイスであって、前記以下の動作
は、
コンピューティングデバイスが、少なくとも部分的に、前記コンピューティングデバイス外にあるソースから提供される複数の入力アクティベーションを受信する動作と、
前記コンピューティングデバイスのコントローラが、前記複数の入力アクティベーションの各々がゼロ値または非ゼロ値のうちのいずれを有するかを判断する動作と、
前記コンピューティングデバイスのメモリバンクに前記入力アクティベーションのうち少なくとも1つを格納する動作と、
前記コントローラが、非ゼロ値である入力アクティベーション値を有する1つ以上のメモリアドレス位置を含むインデックスを生成する動作と、
前記コントローラが、前記メモリバンクから、少なくとも1つの入力アクティベーションを、計算アレイのうちの1つ以上のユニットによってアクセス可能なデータバスに対して提供する動作とを含み、
前記アクティベーションは、少なくとも部分的に、前記インデックスに関連付けられたメモリアドレス位置から提供される、1つ以上の機械読取り可能ストレージデバイス。
【請求項10】
前記インデックスは、複数のビットを含むビットマップに基づいて作成され、前記ビットマップのうちの各々のビットは、非ゼロ入力アクティベーション値またはゼロ入力アクティベーション値のうち少なくとも1つを示す、請求項9に記載の機械読取り可能ストレージデバイス。
【請求項11】
非ゼロ値を有する第1の入力アクティベーションを提供して、少なくとも1つのユニットが前記非ゼロ値を用いて計算を実行し、その後、ゼロ値を有する第2の入力アクティベーションを提供し、少なくとも1つのユニットにおいて、前記ゼロ値を用いて実行される可能性のある計算を防止する動作をさらに含む、請求項9に記載の機械読取り可能ストレージデバイス。
【請求項12】
前記防止する動作は、前記入力アクティベーションが前記インデックスに関連付けられていないメモリアドレス位置から提供されると前記コントローラが判断することに応じて、行なわれる、請求項11に記載の機械読取り可能ストレージデバイス。
【請求項13】
前記入力アクティベーションが前記インデックスに関連付けられていないメモリアドレス位置から提供されることを、前記コントローラが検出する動作と、前記検出する動作に応じて、前記ゼロ入力アクティベーション値に関連付けられた乗算演算を防止するための制御信号を前記計算アレイのうちの少なくとも1つのユニットに提供する動作とをさらに含む、請求項12に記載の機械読取り可能ストレージデバイス。
【請求項14】
前記以下の動作はさらに、前記コントローラが、テンソル計算のうち第1の入力アクティベーションを用いる第1の部分を第1のユニットにマップし、前記テンソル計算のうち前記第1の入力アクティベーションも用いる第2の部分を前記第1のユニットとは異なる第2のユニットにマップする動作を含む、請求項9に記載の機械読取り可能ストレージデバイス。
【請求項15】
電子システムであって、
コンピューティングデバイスに配置されるとともに1つ以上の処理デバイスを含むコントローラと、
前記1つ以上の処理デバイスによって実行可能であるとともに以下の動作を実行するための命令を格納するための1つ以上の機械読取り可能ストレージデバイスとを含み、前記以下の動作は、
前記コンピューティングデバイスが、少なくとも部分的に、前記コンピューティングデバイス外にあるソースから提供される複数の入力アクティベーションを受信する動作と
、
前記コントローラが、前記複数の入力アクティベーションの各々がゼロ値または非ゼロ値のうちのいずれを有するかを判断する動作と、
前記コンピューティングデバイスのメモリバンクに前記入力アクティベーションのうち少なくとも1つを格納する動作と、
前記コントローラが、非ゼロ値である入力アクティベーション値を有する1つ以上のメモリアドレス位置を含むインデックスを生成する動作と、
前記コントローラが、前記メモリバンクから、少なくとも1つの入力アクティベーションを、計算アレイのうちの1つ以上のユニットによってアクセス可能なデータバスに対して提供する動作とを含み、
前記アクティベーションは、少なくとも部分的に、前記インデックスに関連付けられたメモリアドレス位置から提供される、電子システム。
【請求項16】
前記インデックスは、複数のビットを含むビットマップに基づいて作成され、前記ビットマップのうちの各々のビットは、非ゼロ入力アクティベーション値またはゼロ入力アクティベーション値のうち少なくとも1つを示す、請求項15に記載の電子システム。
【請求項17】
非ゼロ値を有する第1の入力アクティベーションを提供して、少なくとも1つのユニットが前記非ゼロ値を用いて計算を実行し、その後、ゼロ値を有する第2の入力アクティベーションを提供し、少なくとも1つのユニットにおいて、前記ゼロ値を用いて実行される可能性のある計算を防止する動作をさらに含む、請求項15に記載の電子システム。
【請求項18】
前記防止する動作は、前記入力アクティベーションが前記インデックスに関連付けられていないメモリアドレス位置から提供されると前記コントローラが判断することに応じて、行なわれる、請求項17に記載の電子システム。
【請求項19】
前記入力アクティベーションが前記インデックスに関連付けられていないメモリアドレス位置から提供されることを、前記コントローラが検出する動作と、前記検出する動作に応じて、前記ゼロ入力アクティベーション値に関連付けられた乗算演算を防止するための制御信号を前記計算アレイのうちの少なくとも1つのユニットに提供する動作とをさらに含む、請求項17に記載の電子システム。
【請求項20】
前記以下の動作はさらに、前記コントローラが、テンソル計算のうち第1の入力アクティベーションを用いる第1の部分を第1のユニットにマップし、前記テンソル計算のうち前記第1の入力アクティベーションも用いる第2の部分を前記第1のユニットとは異なる第2のユニットにマップする動作を含む、請求項15に記載の電子システム。
【発明の詳細な説明】
【技術分野】
【0001】
背景
この明細書は、特殊用途の計算ユニットを用いて機械学習計算を実行することに関する。
【背景技術】
【0002】
ニューラルネットワークは機械学習モデルであって、モデルのうちの1つ以上の層を用いて、受信された入力のための出力(たとえば、分類)を生成する。いくつかのニューラルネットワークは、出力層に加えて1つ以上の隠された層を含む。各々の隠された層の出力は、ネットワークにおける次の層への入力(すなわち、ネットワークにおける次の隠された層または出力層)として用いられる。ネットワークの各層は、対応するそれぞれのパラメータのセットの現在値に従って、受信された入力から出力を生成する。
【0003】
いくつかのニューラルネットワークは、1つ以上の畳み込みニューラルネットワーク層を含む。各々の畳み込みニューラルネットワーク層は、関連するカーネルのセットを有する。各々のカーネルは、ユーザによって作成されたニューラルネットワークモデルによって設定された値を含む。いくつかの実現例においては、カーネルは特定の画像外形、形状または色を識別する。カーネルは、重み入力のマトリックス構造として表わすことができる。各々の畳み込み層はまた、1セットのアクティベーション入力を処理することもできる。当該1セットのアクティベーション入力もマトリックス構造として表わすことができる。
【発明の概要】
【発明が解決しようとする課題】
【0004】
概要
畳み込み計算を実行する一方法は、大次元空間における多数の行列乗算を必要とする。計算ユニットのプロセッサまたはコントローラデバイスはブルートフォース(brute force)法によって行列乗算を計算することができる。たとえば、計算集約的であるとともに
時間集約的であるが、プロセッサは、畳み込み計算のために個々の和および積を繰返し計算することができる。プロセッサが計算を並列化する度合は、そのアーキテクチャのせいで制限されている。
【課題を解決するための手段】
【0005】
この明細書中に記載される主題の革新的な局面は、コンピュータにより実現される方法で具体化することができる。当該方法は、コンピューティングデバイスが、少なくとも部分的に、当該コンピューティングデバイス外にあるソースから提供される複数の入力アクティベーションを受信するステップと、当該コンピューティングデバイスのコントローラが、当該複数の入力アクティベーションの各々がゼロ値または非ゼロ値のうちのいずれであるかを判断するステップとを含む。当該方法はさらに、当該コンピューティングデバイスのメモリバンクに少なくとも1つの入力アクティベーションを格納するステップを含む。当該少なくとも1つの入力アクティベーションを格納するステップは、当該コントローラが、非ゼロ値である入力アクティベーション値を有する1つ以上のメモリアドレス位置を含むインデックスを生成するステップを含む。当該方法はさらに、当該コントローラが、当該メモリバンクから、少なくとも1つの入力アクティベーションを、計算アレイのうちの1つ以上のユニットによってアクセス可能なデータバスに対して提供するステップを含む。当該アクティベーションは、少なくとも部分的に、当該インデックスに関連付けら
れたメモリアドレス位置から提供される。
【0006】
いくつかの実現例においては、当該インデックスは、複数のビットを含むビットマップに基づいて作成される。当該ビットマップのうちの各々のビットは、非ゼロ入力アクティベーション値またはゼロ入力アクティベーション値のうち少なくとも1つを示す。いくつかの実現例においては、当該方法はさらに、非ゼロ値を有する第1の入力アクティベーションを提供して、少なくとも1つのユニットが当該非ゼロ値を用いて計算を実行し、その後、ゼロ値を有する第2の入力アクティベーションを提供し、少なくとも1つのユニットにおいて、当該ゼロ値を用いて実行される可能性のある計算を防止するステップを含む。
【0007】
いくつかの実現例においては、当該防止するステップは、当該入力アクティベーションが当該インデックスに関連付けられていないメモリアドレス位置から提供されると当該コントローラが判断することに応じて、行なわれる。いくつかの実現例においては、当該方法はさらに、当該入力アクティベーションが当該インデックスに関連付けられていないメモリアドレス位置から提供されることを、当該コントローラが検出するステップと、当該検出するステップに応じて、当該ゼロ入力アクティベーション値に関連付けられた乗算演算を防止するための制御信号を当該計算アレイのうちの少なくとも1つのユニットに提供するステップとを含む。
【0008】
いくつかの実現例においては、当該方法はさらに、当該コントローラが、テンソル計算のうち第1の入力アクティベーションを用いる第1の部分を第1のユニットにマップし、当該テンソル計算のうち当該第1の入力アクティベーションも用いる第2の部分を当該第1のユニットとは異なる第2のユニットにマップするステップを含む。いくつかの実現例においては、当該方法はさらに、単一の入力アクティベーションを連続的に当該データバスに対して提供するステップを含む。当該単一の入力アクティベーションは、当該インデックスに関連付けられたメモリアドレス位置からアクセスおよび選択される。いくつかの実現例においては、当該提供するステップはさらに、ゼロ値を有する入力アクティベーションを提供しないステップを含む。
【0009】
この明細書中に記載される主題の別の革新的な局面は、1つ以上の処理デバイスによって実行可能であるとともに以下の動作を実行するための命令を格納する1つ以上の機械読取り可能ストレージデバイスにおいて具体化することができる。当該以下の動作は、コンピューティングデバイスが、少なくとも部分的に、当該コンピューティングデバイス外にあるソースから提供される複数の入力アクティベーションを受信する動作と、当該コンピューティングデバイスのコントローラが、当該複数の入力アクティベーションの各々がゼロ値または非ゼロ値のうちのいずれであるかを判断する動作とを含む。当該以下の動作はさらに、当該コンピューティングデバイスのメモリバンクに当該入力アクティベーションのうち少なくとも1つを格納する動作を含む。当該少なくとも1つの入力アクティベーションを格納する動作は、当該コントローラが、非ゼロ値である入力アクティベーション値を有する1つ以上のメモリアドレス位置を含むインデックスを生成する動作を含む。当該以下の動作はさらに、当該コントローラが、当該メモリバンクから、少なくとも1つの入力アクティベーションを、計算アレイのうちの1つ以上のユニットによってアクセス可能なデータバスに対して提供する動作を含む。当該アクティベーションは、少なくとも部分的に、当該インデックスに関連付けられたメモリアドレス位置から提供される。
【0010】
この明細書中に記載される主題の別の革新的な局面は、電子システムにおいて具体化することができる。当該電子システムは、コンピューティングデバイスに配置されるとともに1つ以上の処理デバイスを含むコントローラと、当該1つ以上の処理デバイスによって実行可能であるとともに以下の動作を実行するための命令を格納するための1つ以上の機械読取り可能ストレージデバイスとを含み、当該以下の動作は、当該コンピューティング
デバイスが、少なくとも部分的に、当該コンピューティングデバイス外にあるソースから提供される複数の入力アクティベーションを受信する動作と、当該コントローラが、当該複数の入力アクティベーションの各々がゼロ値または非ゼロ値のうちのいずれであるかを判断する動作とを含む。当該以下の動作はさらに、当該コンピューティングデバイスのメモリバンクに当該入力アクティベーションのうち少なくとも1つを格納する動作を含む。当該少なくとも1つの入力アクティベーションを格納する動作は、非ゼロ値である入力アクティベーション値を有する1つ以上のメモリアドレス位置を含むインデックスを生成する動作を含む。当該以下の動作はさらに、当該コントローラが、当該メモリバンクから、少なくとも1つの入力アクティベーションを、計算アレイのうちの1つ以上のユニットによってアクセス可能なデータバスに対して提供する動作を含む。当該アクティベーションは、少なくとも部分的に、当該インデックスに関連付けられたメモリアドレス位置から提供される。
【0011】
この明細書中に記載される主題は、以下の利点のうち1つ以上を実現するように特定の実施形態において実現することができる。第1のメモリからアクセス可能なアクティベーションおよび第2のメモリからアクセス可能な重みは、単一の計算システムにおいて、レジスタから検索されたメモリアドレス値に基づいてトラバースすることができる。計算システムのコントローラは、非ゼロ値だけを第1のメモリに格納することによってアクティベーションデータを圧縮することができ、これにより、メモリストレージ空間および対応する帯域幅を節約することができる。行列乗算は、主として非ゼロ入力アクティベーションを提供することに部分的に基づいて計算システムにおいて行なわれる。さらに、計算システムが、主として非ゼロアクティベーション値を含む通信スキーム用いる場合、ゼロ乗を排除することによって計算効率を向上または促進させることができる。
【0012】
この局面および他の局面についての他の実現例は、上記方法の動作を実行するように構成された対応するシステム、装置と、コンピュータストレージデバイス上で符号化されるコンピュータプログラムとを含む。1つ以上のコンピュータのシステムは、システムにインストールされて動作時に当該システムに上記動作を実行させるソフトウェア、ファームウェア、ハードウェア、またはそれらの組合わせによって、このように構成され得る。1つ以上のコンピュータプログラムは、データ処理装置によって実行されると当該装置に上記動作を実行させる命令を有することによって、このように構成され得る。
【0013】
この明細書中に記載される主題はまた、画像認識および/または分類方法/システムに関する。システムは、ハードウェアコンピューティングシステムのコンピューティングユニットが推論計算を実行するためにニューラルネットワーク層のための入力を処理する場合に入力データのスパース性を活用するための開示技術を用いて実現することができる。
【0014】
この明細書中に記載される主題の1つ以上の実現例についての詳細が添付の図面および以下の記載において説明される。主題についての他の潜在的な特徴、局面および利点は、この記載、添付の図面および添付の特許請求の範囲から明らかになるだろう。
【図面の簡単な説明】
【0015】
【
図1】アクティベーションおよびパラメータを含む例示的な計算構造を示す図である。
【
図2】アクティベーションと2以上の出力深度のための複数のパラメータ構造とを含む例示的な計算構造を示す図である。
【
図3】入力アクティベーションを1つ以上のパラメータに供給するための例示的な計算システムを示す図である。
【
図4】入力アクティベーションを1つ以上の積和演算(multiply accumulate:MAC)演算子に提供するメモリユニットを含む例示的なアーキテクチャを示す図である。
【
図5】パラメータ計算を減らして入力データのスパース性を活用するためのプロセスの例示的なフローチャートである。
【発明を実施するための形態】
【0016】
さまざまな図面における同様の参照番号および参照符号は同様の要素を示している。
詳細な説明
この明細書中に記載される主題は、例示的なニューラルネットワーク・ハードウェアコンピューティングシステムの計算ユニットまたはタイル内において行なわれる計算を減らすことに関する。概して、ニューラルネットワーク推論を計算する一環として、入力アクティベーションにパラメータまたは重み値を乗じて、出力アクティベーションを生成する。ここでは、入力および入力アクティベーションは、ニューラルネットワークにおいて一般に用いられるテンソル、マトリックスおよび/またはデータアレイなどの多次元データ構造に含まれるデータ要素を指し得る。ディープニューラルネットワークのための計算推論のアルゴリズム特性のために、入力アクティベーションの大部分はゼロである。言いかえれば、現在の計算ユニットは、ゼロ(入力アクティベーション値)に対して1つの数(たとえば重み)を乗じることを含む多数の不必要な計算を実行する。
【0017】
この明細書は、一部には、より効率的なアクティベーションストレージおよび通信スキームと、ディープニューラルネットワーク処理のための、特にニューラルネットワークの畳み込み層を処理するための、カスタムのアーキテクチャ設計とを記載している。この明細書では、時間をかけて稠密な行列乗算を実行する従来のハードウェアアクセラレータとは異なり、1)ゼロ入力値を認識すると計算をスキップをするかまたはバイパスすることができ、2)非ゼロ値だけを含む圧縮された入力アクティベーションを格納することにより計算ユニットにおけるメモリ使用を減らすことができる、アーキテクチャを記載している。全体的に、この明細書の教示により、ニューラルネットワーク推論計算のための計算ユニット性能が改善されるとともに、不必要な計算をスキップすることによってエネルギが節約される。
【0018】
図1は、アクティベーション構造102およびパラメータ構造104を含む例示的な計算構造100を示す。アクティベーション構造102は、(下付き文字0によって示される)第1の入力深度に対応する複数のデータ要素を含む第1のデータ構造102aを含み得る。同様に、アクティベーション構造102はまた、(下付き文字1によって示される)第2の入力深度に対応する複数のデータ要素を含む第2のデータ構造102bを含み得る。データ構造102aにおいて示される複数のデータ要素はa
0、b
0、c
0、d
0として示され、データ構造102bにおいて示される複数のデータ要素はa
1、b
1、c
1、d
1として示される。データ構造102a/102bの各データ要素(a
0、a
1、b
0、b
1、c
0、d
0など)は入力アクティベーション値であって、各々の入力深度はニューラルネットワーク層への入力の深度に対応する。いくつかの実現例においては、ニューラルネットワーク層は1の入力深度を有し得るとともに、他の実現例においては、ニューラルネットワーク層は、2以上の入力深度を有し得る。
【0019】
パラメータ構造104は、アクティベーション構造102と同様の態様で説明することができる。パラメータ構造104は、第1のデータ構造104aおよび第2のデータ構造104bを含む。各々のデータ構造104a/104bは、各々がカーネル値を含む複数のデータ要素を含み得る。
図1に示されるように、データ構造104aに対応する複数のデータ要素はx
0、y
0、z
0として示され、データ構造104bに対応する複数のデータ要素はx
1、y
1、z
1として示される。
【0020】
上述のとおり、ニューラルネットワークの各層は、対応するそれぞれのオペランドのセットの値に従って、受信された入力から出力を生成する。他のニューラルネットワーク層
と同様に、各々の畳み込み層は、マトリックス構造として表わすことができる1セットのアクティベーション入力を処理することができる。畳み込みニューラルネットワーク層はまた、値を含む関連するカーネルのセットを有することとなり、カーネルも、重みのマトリックス構造として表わすことができる。
図1において、アクティベーション構造102は、1つ以上のアクティベーション入力を有するマトリックス構造に対応し得るとともに、パラメータ構造104は、1つ以上のカーネルまたは重みパラメータを有するマトリックス構造に対応し得る。
【0021】
以下においてより詳細に記載されるように、ニューラルネットワークのさまざまな層は、行列乗算を含む大量の計算を実行することによって機械学習推論を処理する。ニューラルネットワーク層(たとえば、畳み込み層)内において実行される計算プロセスは、1以上のサイクルで入力アクティベーション(すなわち、第1オペランド)に重み(すなわち、第2オペランド)を乗じることと、多くのサイクルにわたって積の累積を実行することとを含み得る。出力アクティベーションは、2つのオペランドに対して実行される乗算動作および累積動作に基づいて生成される。
【0022】
図示のとおり、式106は、アクティベーション構造102の或るデータ要素に関連付けられた入力アクティベーションに、パラメータ構造104の或るデータ要素に関連付けられたカーネル値または重み/パラメータを乗じる場合に実行することができる直列シーケンスベースの数学的演算の一例を提供する。たとえば、式106において、インデックス「i」が0と等しい場合、アクティベーション構造102のデータ要素a0に関連付けられた入力アクティベーションに、パラメータ構造104のデータ要素x0に関連付けられた重み/パラメータを乗じる。さらに、式106が部分的に直列ベースの式であるので、付加的な乗算演算が、アクティベーション構造102およびパラメータ構造104の他のデータ要素に対応するオペランドのセット間で行なわれることとなる。いくつかの実現例においては、1セットのオペランドの乗算により、特定の出力特徴またはアクティベーションについての部分和106a/106bを生成することができる。したがって、式106に示されるように、部分和を追加して出力特徴を生成することができる。
【0023】
ニューラルネットワークは、ネットワーク層の機械学習推論ワークロードを促進するように構成された複数のコンピューティングユニットを含む1つ以上のハードウェアコンピューティングシステムにおいて具体化することができる。各々のコンピューティングユニットは、所与の層のための計算のサブセットを処理することができる。いくつかの実現例においては、構造100は、少なくとも2つのメモリバンクと、(以下に記載される)MACアレイを集合的に形成し得る1つ以上の積和演算(MAC)セルとを各々が含む1つ以上のコンピューティングユニットにおいて具体化することができる。
【0024】
一例においては、例示的なコンピューティングユニットの第1のメモリバンク108は、アクティベーション構造102に関連付けられたデータを格納するとともに、入力アクティベーション値を受信してメモリバンク108内のメモリアドレス位置に書込むように構成され得る。同様に、例示的なコンピューティングユニットの第2のメモリバンク110は、パラメータ構造104に関連付けられたデータを格納するとともに、重み値を受信してメモリバンク110内のメモリアドレス位置に書込むように構成され得る。この例においては、データ要素102aの各要素(たとえば、a0、b0、c0、d0)は、第1のメモリバンク108の対応するそれぞれのメモリアドレスに格納することができる。同様に、データ要素104aの各要素(たとえば、x0、y0、z0)は、第2のメモリ110の対応するそれぞれのメモリアドレスに格納することができる。
【0025】
いくつかの実現例においては、第1のメモリバンク108および第2のメモリバンク110は、各々、1つの揮発性メモリユニットまたは複数の揮発性メモリユニットである。
他のいくつかの実現例においては、メモリバンク108およびメモリバンク110は各々、1つの不揮発性メモリユニットまたは複数の不揮発性メモリユニットである。メモリバンク108および110はまた、コンピュータ読取り可能記憶媒体の別の形態、たとえば、フロッピー(登録商標)ディスクデバイス、ハードディスクデバイス、光ディスクデバイス、もしくはテープデバイスなど、フラッシュメモリもしく他の同様のソリッドステートメモリデバイス、または、ストレージエリアネットワークもしくは他の構成におけるデバイスを含むデバイスのアレイであり得る。
【0026】
概して、ハードウェアコンピューティングシステムのコンピューティングユニットは、メモリアドレス値を追跡するために1つ以上のレジスタを含み得る。アクティベーション構造102に対応するマトリックス構造のデータ要素は、第1のメモリバンク108からアクセスすることができるとともに、パラメータ構造104に対応するマトリックス構造のデータ要素は第2のメモリバンク110からアクセスすることができる。コンピューティングタイル/計算ユニットの例示的な制御デバイスは、1つ以上のレジスタからアクセス可能なアドレス値に基づいてマトリックス構造のデータ要素にアクセスすること、および/またはデータ要素をトラバースすることができる。例示的な制御デバイス、アクティベーション構造102、パラメータ構造104、第1のメモリバンク108および第2のメモリバンク110を含む例示的な計算ユニット/タイルが、
図3に関連付けて以下においてより詳細に説明される。
【0027】
さらに、ニューラルネットワーク推論ワークロードのためのニューラルネットワーク・テンソル計算および行列乗算を促進するためのハードウェアコンピューティングシステムに関する付加的な詳細および記載が、2016年10月27日付で提出された「ニューラルネットワークコンピュートタイル(Neural Network Compute Tile)」と題された米国
特許出願第15/335,769号に記載されている。米国特許出願第15/335,769号の開示全体は、引用によりその全体がこの明細書中に援用されている。
【0028】
図2は、アクティベーション構造と、2以上の出力特徴深度のための複数のパラメータ構造とを含む例示的な計算構造200を示す。いくつかの実現例においては、ニューラルネットワークは、複数の出力特徴深度を有する出力を生成する複数の層を有し得る。いくつかの実現例においては、各々のパラメータ構造は、出力深度のうち対応する出力深度に関与し得る。したがって、計算構造200はスケーラブルなコンピューティング構造を示しており、このスケーラブルなコンピューティング構造においては、出力深度のNの数値に関連付けられた計算を容易にするために、付加的なパラメータ構造104a/104b/104cが追加される。Nは変数であって、たとえば、1~5の範囲の整数値を有し得るか、または代替的には、コンピューティングシステム設計者の好みもしくは必要性に応じて1~Nの範囲の整数値を有し得る。
【0029】
データ経路105によって示されるように、データ構造102aに関連付けられた要素についての個々の入力アクティベーション値は、それぞれのパラメータ構造104に関連付けられた複合演算子によって実行される計算で使用するために各々のパラメータ構造104a/104b/104cに供給することができる。次いで、各々のパラメータ構造104は、パイプラインの態様で、その左隣りから受信したアクティベーション値をその右隣りに渡すことができる。代替的には、アクティベーションは、各々のパラメータ構造104によって同時に提供および消費することができる。
【0030】
マトリックス202は、アクティベーション102に対応する例示的なマトリックス構造を表わし得る。より具体的には、要素行202aはデータ構造102aに対応し得るとともに、要素行202bはデータ構造102bに対応し得る。概して、一例として、第1のパラメータ構造104(1)は、空間206に関連付けられた計算を実行するためにア
クセスされるとともに、第2のパラメータ構造104(2)は、空間208に関連付けられた計算を実行するためにアクセスされる。図示されていないが、付加的な計算もz次元に対応して実行することができる。一例として、要素行202aはRGB画像のR面にあり得るとともに、要素行202bは同じRGB画像のG面にあり得る。ニューラルネットワークの例示的な畳み込み層は、典型的には、複数の出力特徴を生成する。例示的な出力特徴は、りんごを分類するための出力特徴とバナナを分類するための別の出力特徴とを含み得る。データ構造204に関して、空間206および208は、さまざまな分類のためのさまざまな面を表わし得る。
【0031】
図3は、入力アクティベーションを1つ以上のパラメータ構造に供給するための例示的な計算システム300を示す。計算システム300は概してコントローラ302を含む。コントローラ302は、アクティベーション構造102のための入力アクティベーションをメモリバンク108のメモリアドレスに格納させるかまたは当該メモリアドレスから検索させるための1つ以上の制御信号310を与える。同様に、コントローラ302はまた、パラメータ構造104a/104b/104cについての重みをメモリバンク110のメモリアドレスに格納させるかまたは当該メモリアドレスから検索させるための1つ以上の制御信号310を与える。計算システム300はさらに、1つ以上の積和演算(MAC)セル/ユニット304、入力アクティベーションバス306および出力アクティベーションバス308を含む。制御信号310は、たとえば、メモリバンク108に、1つ以上の入力アクティベーションを入力アクティベーションバス306に提供させること、メモリバンク110に、1つ以上の重みをパラメータ構造104a/104b/104cに提供させること、および/または、MACユニット304に、出力アクティベーションバス308に提供される出力アクティベーションを生成する計算を実行させること、ができる。
【0032】
コントローラ302は1つ以上の処理ユニットおよびメモリを含み得る。いくつかの実施形態においては、コントローラ302の処理ユニットは、1つ以上のプロセッサ(たとえば、マイクロプロセッサまたは中央処理装置(central processing unit:CPU))
、グラフィック処理装置(graphics processing unit:GPU)、特定用途向け集積回路(application specific integrated circuit:ASIC)、またはさまざまなプロセッ
サの組合せを含み得る。代替的な実施形態においては、コントローラ302は、この明細書中に記載される判断および計算のうち1つ以上を実行するための付加的な処理オプションを提供する他のストレージまたはコンピューティングリソース/デバイス(たとえば、バッファ、レジスタ、制御回路など)を含み得る。
【0033】
いくつかの実現例においては、コントローラ302の処理ユニットは、コントローラ302および計算システム300にこの明細書中に記載される1つ以上の機能を実行させるための、メモリに格納されたプログラムされた命令を実行する。コントローラ302のメモリは、1つ以上の非一時的な機械読取り可能記憶媒体を含み得る。非一時的な機械読取り可能記憶媒体は、ソリッドステートメモリ、磁気ディスクおよび光ディスク、ポータブルコンピュータディスケット、ランダムアクセスメモリ(random access memory:RAM)、読取専用メモリ(read-only memory:ROM)、消去可能プログラム可能な読取り専用メモリ(たとえば、EPROM、EEPROMもしくはフラッシュメモリ)、または情報を格納することができる他の任意の有形媒体を含み得る。
【0034】
概して、計算システム300は、例示的な計算ユニットまたはタイルであって、テンソル、マトリックスおよび/またはデータアレイなどの多次元データ構造に関連付けられた計算を実行するための付加的なハードウェア構造を含み得る。いくつかの実現例においては、入力アクティベーション値は、アクティベーション構造102のためのメモリバンク108に予めロードすることができるとともに、重み値は、計算システム300によって
受信されたデータ値を用いて第2のメモリバンク110に予めロードすることができる。これらデータ値は、ニューラルネットワーク・ハードウェアコンピューティングシステムに関連付けられた外部の制御デバイスまたはより上位の制御デバイスから計算システム300に到達するものである。
【0035】
命令、入力または入力アクティベーション、および重みは、ニューラルネットワーク・ハードウェアコンピューティングシステムに関連付けられた外部入/出力(input/output:I/O)デバイスまたは上位制御デバイスなどの外部ソースからシステム300に提供することができる。いくつかの実現例においては、1つ以上のデータバスが、外部ソース(たとえば、制御デバイス)とシステム300との間にデータ通信を提供する。データバスは、命令、入力もしくはアクティベーションおよび重みを、例示的なI/Oデバイスから複数のシステム300の各々に提供するために、または、ニューラルネットワークのためのハードウェアコンピューティングシステムに含まれる複数のコンピュートタイル(たとえば、複数のシステム300)間において提供するために、用いられる。
【0036】
システム300は、システム300によって実行されるべき特定の計算動作を規定する命令を受信することができる。さらに、コントローラ302は、たとえば、受信された入力アクティベーションに関連付けられたデータストリームを分析するために、プログラムされた命令を実行することができる。入力アクティベーションデータストリームを分析することにより、コントローラ302が、入力アクティベーションの各々に関連付けられた値がゼロ値であるかまたは非ゼロ値であるかどうかを検出するかまたは判断することが可能となり得る。いくつかの実現例においては、コントローラ302は、例示的な入力アクティベーションデータストリームを分析し、各々の検出されたゼロアクティベーション値および各々の検出された非ゼロアクティベーション値をビットベクトルまたはビットマップ303にマップする。
【0037】
図3に示されるように、ビットマップ303は、バイナリ値を用いて、検出されたゼロ値入力アクティベーションおよび検出された非ゼロ値入力アクティベーションをマップすることができる。たとえば、「0」のバイナリ値は、検出されたゼロ入力アクティベーション値に対応し得るとともに、「1」のバイナリ値は、検出された非ゼロ入力アクティベーション値に対応し得る。たとえば、ビットマップ303は8ビットのビットマップであり得る。この場合、バイナリ「1」を含む奇数のビット位置が非ゼロアクティベーション値に対応するとともに、バイナリ「0」を含む偶数のビット位置がゼロアクティベーション値に対応する。
【0038】
コントローラ302は、入力アクティベーションをメモリバンク108に格納させることができる。概して、メモリバンク108に格納されたデータ値は、典型的には、各々が対応するそれぞれのメモリアドレス位置に書込まれている。次いで、特定の計算動作を実行するために入力アクティベーションなどのデータ値が必要になると、例示的な制御デバイス(たとえば、コントローラ302)によってメモリバンク108におけるアドレス位置にアクセスすることができる。コントローラ302は、ビットマップ303を用いて、非ゼロ入力アクティベーション値を含むメモリアドレス位置のインデックスを作成することができる。
【0039】
いくつかの実現例においては、コントローラ302は、ビットマップ303を用いて、どの入力アクティベーションをメモリバンク108に書込むべきかを判断する。たとえば、ビットマップ303の分析は、ビットマップ位置1、3、5、7(非ゼロ値)に対応するアクティベーション値だけがメモリバンク108におけるアドレス位置に書込まれるべきであることを示し得る。さらに、ビットマップ位置2、4、6、8(ゼロ値)に関連付けられたデータ値は、アクティベーション値が入力バス306に提供されたときにコント
ローラ302によってアクセスされる可能性があるがアクセスされない可能性もあるメモリアドレス位置に書込むことができるか、または廃棄することができる。これにより、ビットマップ303はゼロアクティベーション値を圧縮するための基準として用いることができる。この場合、ゼロ値入力アクティベーションがメモリアドレス位置に書込まれていなければ圧縮が行なわれ、これにより、全体的なメモリ使用を減らして、他のデータ値を格納するためのアドレス位置を解放する。
【0040】
コントローラ302は、入力アクティベーションをメモリバンク108から入力アクティベーションバス306にロードするために1つ以上の制御信号310をメモリバンク108に提供するとともに、これら値をMAC304を含む計算ユニットのアレイに提供することができる。いくつかの実現例においては、非ゼロアクティベーション値を提供するためにどのメモリアドレス値にアクセスしなければならないかを判断するために、コントローラ302によって、ビットマップ303、またはビットマップ303に対応する非ゼロメモリアドレスインデックスが参照され得る。アクティベーション値は、コントローラ302によってメモリバンク108からデータバス306に対して提供される。
【0041】
いくつかの実現例においては、入力アクティベーションは、少なくとも部分的に、インデックスまたはビットマップ303に関連付けられたメモリアドレス位置から提供される。他の実現例においては、コントローラ302は、ビットマップ303またはインデックスのうちの1つに基づいて、提供される入力アクティベーションがゼロ値を有しているかどうかを検出または判断することができる。この判断の実行に応じて、コントローラ302は、さらに、不必要な乗算演算(例えば、ゼロ乗)が行なわれるのを防止するか停止させるかまたは阻止するための制御信号を計算アレイにおけるユニットまたはMAC304に提供することができる。計算システム300内において、ゼロアクティベーション値を提供し、その後、または同時に、そのアクティベーションに関連付けられた計算動作を不可能化することでエネルギの節約が実現可能となる。
【0042】
上述のとおり、インデックスは、非ゼロ値を備える入力アクティベーションを有するすべてのメモリアドレス位置を含む。データバス306は、計算アレイのうちの1つ以上のユニットによってアクセス可能である。計算アレイのこれらユニットは、データバス306から1つ以上の非ゼロアクティベーション値を受信して、受信したアクティベーション値に基づいて行列乗算に関連する計算を実行することができる。いくつかの実現例においては、計算システム300は、単に、インデックス付きアドレスに対応するメモリアドレス位置から入力アクティベーションを提供するだけであるだろう。このため、ゼロアクティベーションが入力バス306に提供されることはなく、このため、計算動作の実行が不可能化されたり防止されたりすることはないだろう。計算システム300がこの通信スキームを用いる場合、ゼロ乗を排除することによって計算効率を向上または促進させることができる。
【0043】
所与の計算サイクルにわたって、計算システム300は、ニューラルネットワーク層についての推論計算に関連付けられた乗算演算を実行するために、アクティベーション構造102およびパラメータ構造104の要素へのアクセスを必要とし得る。上述のように、メモリバンク108およびメモリバンク110についての特定のメモリアドレス値は、それぞれ、アクティベーション構造102およびパラメータ構造104の要素に対応し得る。
【0044】
計算が実行されるサイクルにわたって、コントローラ302は一度に1つの入力アクティベーション値を提供することとなり、MACセル304を含む計算ユニットのアレイは、アクティベーションに重みを乗じて、所与の入力アクティベーションについてのさまざまな出力アクティベーションを生成することとなる。計算ユニットのアレイの(パラメー
タ構造として上述された)各要素またはMACセル304は、ニューラルネットワーク層のさまざまな出力深度に関与し得る。概して、コントローラ302がゼロアクティベーション値を検出するたびに、コントローラ302は、1)メモリバンク108にそのアクティベーション値を格納しないこと、2)アクティベーション値を提供しないこと、または、3)当該値を提供して、そのゼロアクティベーション値に対応する乗算演算を特定の計算ユニットに実行させないようにするための制御信号をこの特定の計算ユニットに提供すること、を実行し得る。
【0045】
計算ユニットのアレイは、ゼロアクティベーション値の検出に基づいて、いつ特定の計算をスキップするかまたは防ぐことが必要になるかを判断することができるコントローラ302によって、十分に制御される。このため、特定の計算をスキップするために計算ユニットのアレイ内に複雑なハードウェア構造を追加する必要はない。さらに、入力アクティベーション値は、メモリバンク108への格納のために計算システム300に到達すると、分析され得る。入力アクティベーションの分析に応じて、コントローラ302は、非ゼロ値だけをメモリ108に格納することによって効率的にアクティベーションデータを圧縮するための命令を実行することができ、これにより、メモリ格納空間および対応する帯域幅を節約することができる。
【0046】
計算システム300が入力アクティベーションおよび重みを受信すると、コントローラ302は、たとえば、1つ以上のダイレクトメモリアクセス動作を実行することができる。これらのメモリアクセス動作の実行は、アクティベーション構造102の次元要素に対応する入力アクティベーションをメモリバンク108のアドレス位置に格納することを含む。同様に、コントローラ302はまた、パラメータ構造104の次元要素に対応するパラメータをメモリバンク110のアドレス位置に格納することができる。ビットマップ303に加えて、コントローラ302は1つ以上のアドレスレジスタをさらに含み得る。1つ以上のアドレスレジスタが維持しているメモリアドレスからは、(たとえば、ゼロ値または非ゼロ値を有する)特定の入力アクティベーションがフェッチされることとなる。さらに、1つ以上のレジスタはまた、メモリアドレスを格納することとなる。これらメモリアドレスからは、特定の入力アクティベーションが乗算される対応する重みがフェッチされる。
【0047】
上述のとおり、コントローラ302は、部分的にビットマップ303に基づいて、非ゼロアクティベーション値についてのメモリアドレスを識別する。いくつかの実現例においては、コントローラ302は、ビットマップ303を読取り、たとえば、非ゼロアクティベーション値を有する少なくとも2つのメモリアドレスを決定する。コントローラ302がゼロアクティベーション値を提供し、その後、ゼロアクティベーション値についての計算をスキップするかまたは不可能にするように構成されている場合、コントローラ302はまた、ゼロアクティベーション値を有する少なくとも1つのメモリアドレスを決定してもよい。この実現例においては、コントローラ302は、上述のレジスタを参照して、第1の入力アクティベーションについての対応する重み(およびメモリアドレス)を決定するとともに、第2の入力アクティベーションについての対応する重み(およびメモリアドレス)を決定することができる。
【0048】
上述のとおり、コントローラ302はメモリにおいて1つ以上のアドレスレジスタを維持する。このため、オペランド(入力アクティベーションおよび重み)の潜在的な如何なる不整合をも軽減するかまたは防ぐために、ゼロ値入力アクティベーションが検出されると、コントローラ302は、対応する計算ユニットを使用不可能にし、特定の重みのロードをスキップし、次の非ゼロ入力アクティベーションのために適切な対応する重み(およびメモリアドレス)を検索して、所与のニューラルネットワーク層のための出力アクティベーションの計算を再開することができる。
【0049】
いくつかの実現例においては、第1のニューラルネットワーク層において計算された出力アクティベーションは、ネットワークにおける次の第2の層(たとえば、ネットワークのうち次の隠された層または出力層)への入力アクティベーションとして用いられる。概して、ニューラルネットワークの各層は、対応するそれぞれのパラメータのセットの現在値に従って、受信された入力から出力を生成する。いくつかの場合には、コントローラ302は、出力アクティベーションバス308に提供された出力アクティベーションに関連付けられたデータストリームを分析するために、プログラムされた命令(すなわち、出力論理)を実行することができる。出力アクティベーションデータストリームを分析することにより、コントローラ302が、出力アクティベーションの各々に関連付けられた値がゼロ値であるかまたは非ゼロ値であるかを検出または判断することが可能となり得る。コントローラ302は、例示的な出力アクティベーションデータストリームを分析するとともに、検出された非ゼロアクティベーション値の各々をビットマップ305にマップすることができる。ビットマップ305におけるマップされた非ゼロアクティベーション値を用いることにより、ネットワークにおける次の第2の層に関連付けられた計算に関与する後続の計算システム300に対して、入力アクティベーションとして非ゼロ値だけを供給することができる。
【0050】
代替的な実現例においては、いくつかの計算動作があってもよく、これら計算動作においては、単一の非ゼロ入力アクティベーションが、パラメータ構造104の所与の次元要素についてのさまざまな重みを包含する(すなわち、「x」または「y」次元を繰り返す)いくつかの乗算演算のためのオペランドとして用いられる。たとえば、コントローラ302がメモリバンク108に第1の入力アクティベーション(たとえば、非ゼロ値)を提供させると、パラメータ構造104aがアクティベーションを受信し、所与のアドレスにおける対応する重みがまたパラメータ構造104aにロードされる。パラメータ構造104aは、第1の入力アクティベーションがK回の計算サイクルにわたって影響を及ぼす(たとえば、変数「K」によって示される)部分和の特定の数値を更新し始めることとなる。結果として、これらのK回のサイクルの間、パラメータ構造104aは追加の入力アクティベーションを受信することはないだろう。次いで、コントローラ302は、次の入力アクティベーションを入力アクティベーションバス306に提供させるための制御信号をメモリバンク108に提供することができる。
【0051】
図4は、アクティベーション404を入力バス306を介して1つ以上の積和演算(MAC)演算子に提供するメモリバンク108を含む例示的なアーキテクチャを示す。シフトレジスタ404はシフト機能を提供することができ、これにより、アクティベーション404が、MACセル304における1つ以上のMAC演算子によって受信されるように、一度に1つずつ入力バス306に発送される。図示のとおり、一実現例においては、アクティベーション406は、ゼロのアクティベーション値を有している可能性もあり、したがって、MACセル304によって消費されない可能性がある。
【0052】
概して、MAC演算子を含むMACセル304は、部分和を計算するとともに、いくつかの実現例において、出力バス308に対して部分和データを書込むように構成された計算ユニットとして規定される。図示のとおり、セル304は1つ以上のMAC演算子から構成されていてもよい。一実現例においては、MACセル304におけるMAC演算子の数はセルの発行幅と称される。一例として、デュアル発行セル(dual issue cell)は、
(メモリ110からの)2つのパラメータとの(メモリバンク108からの)2つのアクティベーション値の乗算を計算することができるとともに、2つの乗数の結果と現在の部分和との加算を実行することができる、2つのMAC演算子を備えたセルを指している。
【0053】
上述のとおり、入力バス306は、線形ユニット(すなわち、MACアレイ304)の
MAC演算子に入力アクティベーションを提供する通信バスである。いくつかの実現例においては、同じ入力がすべてのMAC演算子間で共有される。入力バス306の幅は、入力アクティベーションを所与のMACアレイ304のための対応する数のセルに供給するのに十分に広くなければならない。入力バス306の構造を例示するために以下の例を検討する。線形ユニットにおけるセルの数が4に等しく、アクティベーション幅が8ビットに等しい場合、入力バス306は、サイクルごとに最大で4つまでの入力アクティベーションを提供するように構成することができる。この例においては、MACアレイ304におけるすべてのセルが、提供される4つのアクティベーションのうちの1つにアクセスするだけとなるだろう。
【0054】
いくつかの例においては、命令データ312は、MACアレイ304のセルが同じ入力アクティベーションを用いて計算を実行する必要があるだろうことを示し得る。これは、MACアレイ304のセル内のZoutパーティショニングと称されてもよい。同様に、MACアレイ304のセルが計算を実行するために異なるアクティベーションを必要とする場合、セル内においてZinパーティショニングが行なわれる。前者の場合、単一の入力アクティベーションが4回複製されるとともに、メモリバンク108から読取られた4つのアクティベーションが4サイクルにわたって提供される。後者の場合、サイクルごとにメモリバンク108の読取りが必要となる。
【0055】
図5は、パラメータ計算を減らして入力データのスパース性を活用するためのプロセスの例示的なフローチャートである。ブロック502において、計算システム300は、ゼロアクティベーション値または非ゼロアクティベーション値のいずれかを有する入力アクティベーションを受信する。上述のとおり、いくつかの実現例においては、計算システム300は、例示的なニューラルネットワークハードウェアシステムのホストインターフェイスデバイスまたは上位コントローラから入力アクティベーションを受信することができる。
【0056】
ブロック504において、コントローラ302は、入力アクティベーションの各々がゼロ値であるかまたは非ゼロ値であるかを判断する。いくつかの実現例においては、コントローラ302は、入力アクティベーションデータストリームを分析するとともに、ゼロ入力アクティベーション値(「0」)および非ゼロ入力アクティベーション値(「1」)に対応するバイナリ値を含むビットマップ303に対して、検出されたゼロ値および非ゼロ値の各々をマップする。
【0057】
ブロック506において、コントローラ302は、受信した入力アクティベーションをメモリバンク108に格納する。入力アクティベーションを格納することは、コントローラ302が、非ゼロ値を含む入力アクティベーションを有する1つ以上のメモリアドレス位置のインデックスを生成することを含み得る。いくつかの実現例においては、インデックスはビットマップ303に基づいて作成される。たとえば、ビットマップ303の各ビットが非ゼロアクティベーション値またはゼロアクティベーション値のいずれかを示しているので、入力アクティベーションをメモリバンク108に書込む際に非ゼロ値を有するメモリアドレス位置のインデックスを作成するためにコントローラ302によってビットマップ303が参照され得る。
【0058】
ブロック508において、コントローラ302が、少なくとも1つの入力アクティベーションをメモリバンク108からデータバス306に対して提供する。いくつかの実現例においては、入力アクティベーションは、少なくとも部分的に、インデックスにおいて識別されたメモリアドレス位置から提供される。上述のとおり、インデックスは、非ゼロ値を備えた入力アクティベーションを格納するすべてのメモリアドレス位置を識別する。データバス306は、計算アレイのうちの1つ以上のユニットによってアクセス可能である
。計算アレイのユニットは、行列乗算に関する計算を実行するために1つ以上の非ゼロアクティベーション値をデータバス306から受信する。いくつかの実現例においては、計算システム300は、単に、インデックス付きアドレスに対応するメモリアドレスから入力アクティベーションを提供するだけであるだろう。計算システム300がこの通信スキームを用いる場合、ゼロ乗算を排除することよって計算効率を向上させることができる。
【0059】
ブロック510において、インデックス付きアドレスから入力アクティベーションだけではなくすべてのアクティベーション値が提供される実現例においては、コントローラ302は、入力アクティベーションが、非ゼロアクティベーション値を含むいずれのインデックス付きアドレスにも関連付けられていないメモリアドレスから提供されていることを検出する。この検出するステップに応じて、コントローラ302は、ゼロ入力に関連付けられた乗算演算を防ぐための制御信号を計算アレイのうちの少なくとも1つのユニットに提供することができる。計算システム300がこの通信スキームを用いる場合、有用な結果(たとえば、部分和または出力アクティベーションの計算を含む有用な結果)をもたらさない不必要または無駄な計算を防ぐことによって、エネルギの節約を実現することができる。
【0060】
本明細書に記載されている主題および機能的動作の実施形態は、デジタル電子回路で実現されてもよく、有形的に具体化されたコンピュータソフトウェアもしくはファームウェアで実現されてもよく、本明細書に開示されている構造およびそれらの構造的等価物を含むコンピュータハードウェアで実現されてもよく、またはそれらのうちの1つ以上の組合せで実現されてもよい。本明細書中に記載される主題の実施形態は、1つ以上のコンピュータプログラムとして、すなわちデータ処理装置による実行のために、またはデータ処理装置の動作を制御するために有形の非一時的なプログラムキャリア上で符号化されるコンピュータプログラム命令の1つ以上のモジュールとして、実現されてもよい。代替的または付加的には、プログラム命令は、データ処理装置によって実行されるのに適した受信機装置に送信される情報を符号化するために生成される人為的に生成された伝搬信号(たとえば機械によって生成された電気信号、光学信号または電磁気信号)で符号化することができる。コンピュータ記憶媒体は、機械読取り可能なストレージデバイス、機械読取り可能なストレージ基板、ランダムもしくはシリアルアクセスメモリデバイス、またはこれらのうちの1つ以上の組合せであってもよい。
【0061】
本明細書中に記載されているプロセスおよび論理フローは、入力データ上で動作して出力を生成することによって機能を実行するように1つ以上のコンピュータプログラムを実行する1つ以上のプログラム可能なプロセッサによって実行され得る。また、プロセスおよび論理フローは、特殊用途論理回路、たとえばフィールド・プログラマブル・ゲート・アレイ(field programmable gate array:FPGA)または特殊用途向け集積回路(application specific integrated circuit:ASIC)、汎用グラフィック処理ユニット(General purpose graphics processing unit:GPGPU)、または他のいくつかの処理ユニットとして実現されてもよい。
【0062】
コンピュータプログラムの実行に適したコンピュータは、汎用マイクロプロセッサ、特殊用途マイクロプロセッサもしくはこれら両方、または、他の任意の種類の中央処理装置を含み、一例として、汎用マイクロプロセッサ、特殊用途マイクロプロセッサもしくはこれら両方、または、他の任意の種類の中央処理装置に基づいていてもよい。概して、中央処理装置は、読出し専用メモリまたはランダムアクセスメモリまたはそれら両方から命令およびデータを受信するであろう。コンピュータの必須の要素は、命令を実行または実施するための中央処理装置と、命令およびデータを格納するための1つ以上のメモリデバイスとである。一般に、コンピュータは、データを格納するための1つ以上の大容量記憶装置、たとえば磁気ディスク、光磁気ディスクまたは光ディスクも含み得るか、または、当
該1つ以上の大容量記憶装置からデータを受信するもしくは当該1つ以上の大容量記憶装置にデータを転送するように、もしくは受信も転送も行なうように動作可能に結合されるであろう。しかし、コンピュータは、このようなデバイスを有する必要はない。
【0063】
コンピュータプログラム命令およびデータを格納するのに適したコンピュータ読取り可能な媒体は、すべての形態の不揮発性メモリ、媒体およびメモリデバイスを含み、一例としてたとえばEPROM、EEPROMおよびフラッシュメモリデバイスといった半導体メモリデバイス、たとえば内蔵ハードディスクまたは取外し可能なディスクといった磁気ディスクを含む。プロセッサおよびメモリは、特殊用途論理回路によって補完されてもよく、または特殊用途論理回路に組込まれてもよい。
【0064】
本明細書は多くの具体的な実現例の詳細を含んでいるが、これらは、いずれかの発明の範囲またはクレームされ得るものの範囲を限定するものとして解釈されるべきではなく、むしろ特定の発明の特定の実施形態に特有となり得る特徴の説明として解釈されるべきである。別々の実施形態の文脈において本明細書に記載されている特定の特徴は、単一の実施形態において組合わせて実現されてもよい。逆に、単一の実施形態の文脈において記載されているさまざまな特徴は、複数の実施形態において別々に、または任意の好適なサブコンビネーションで実現されてもよい。さらに、特徴は特定の組合せで作用するものとして記載され得るとともに、さらにはそのようなものとして最初にクレームされ得るが、クレームされている組合せのうちの1つ以上の特徴は、場合によっては、当該組合せから削除されてもよく、クレームされている組合せは、サブコンビネーションまたはサブコンビネーションの変形例に向けられてもよい。
【0065】
同様に、動作は特定の順序で図面に示されているが、これは、このような動作が、望ましい結果を達成するために、示されている特定の順序もしくは連続した順序で実行されなければならないと理解されるべきではなく、または、望ましい結果を達成するために、すべての示されている動作が実行されなければならないと理解されるべきではない。特定の状況では、マルチタスクおよび並列処理が有利である可能性がある。さらに、上述の実施形態におけるさまざまなシステムモジュールおよび構成要素の分離は、すべての実施形態においてこのような分離が必要であると理解されるべきではなく、記載されているプログラム構成要素およびシステムが、一般に単一のソフトウェア製品に一体化されてもよく、または複数のソフトウェア製品にパッケージングされてもよいことが理解されるべきである。
【0066】
さらなる実現例が以下の例において要約される。
例1:コンピュータにより実現される方法であって、コンピューティングデバイスが、少なくとも部分的に、当該コンピューティングデバイス外にあるソースから提供される複数の入力アクティベーションを受信するステップと、当該コンピューティングデバイスのコントローラが、当該複数の入力アクティベーションの各々がゼロ値または非ゼロ値のうちのいずれを有するかを判断するステップと、当該コンピューティングデバイスのメモリバンクに当該入力アクティベーションのうち少なくとも1つを格納するステップと、当該コントローラが、非ゼロ値である入力アクティベーション値を有する1つ以上のメモリアドレス位置を含むインデックスを生成するステップと、当該コントローラが、当該メモリバンクから、少なくとも1つの入力アクティベーションを、計算アレイのうちの1つ以上のユニットによってアクセス可能なデータバスに対して提供するステップとを含む。当該アクティベーションは、少なくとも部分的に、当該インデックスに関連付けられたメモリアドレス位置から提供される。
【0067】
例2:例1の方法であって、当該インデックスは、複数のビットを含むビットマップに基づいて作成され、当該ビットマップのうちの各々のビットは、非ゼロ入力アクティベー
ション値またはゼロ入力アクティベーション値のうち少なくとも1つを示す。
【0068】
例3:例1または例2の方法であって、非ゼロ値を有する第1の入力アクティベーションを提供して、少なくとも1つのユニットが当該非ゼロ値を用いて計算を実行し、その後、ゼロ値を有する第2の入力アクティベーションを提供し、少なくとも1つのユニットにおいて、当該ゼロ値を用いて実行される可能性のある計算を防止するステップをさらに含む。
【0069】
例4:例3の方法であって、当該防止するステップは、当該入力アクティベーションが当該インデックスに関連付けられていないメモリアドレス位置から提供されると当該コントローラが判断することに応じて、行なわれる。
【0070】
例5:例4の方法であって、当該入力アクティベーションが当該インデックスに関連付けられていないメモリアドレス位置から提供されることを、当該コントローラが検出するステップと、当該検出するステップに応じて、当該ゼロ入力アクティベーション値に関連付けられた乗算演算を防止するための制御信号を当該計算アレイのうちの少なくとも1つのユニットに提供するステップとをさらに含む。
【0071】
例6:例1から例5のうちのいずれか1つの方法であって、当該方法は、当該コントローラが、テンソル計算のうち第1の入力アクティベーションを用いる第1の部分を第1のユニットにマップし、当該テンソル計算のうち当該第1の入力アクティベーションも用いる第2の部分を当該第1のユニットとは異なる第2のユニットにマップするステップをさらに含む。
【0072】
例7:例1から例6のうちのいずれか1つの方法であって、単一の入力アクティベーションを連続的に当該データバスに対して提供するステップをさらに含み、当該単一の入力アクティベーションは、当該インデックスに関連付けられたメモリアドレス位置からアクセスおよび選択される。
【0073】
例8:例1から例7のうちのいずれか1つの方法であって、当該提供するステップはさらに、ゼロ値を有する入力アクティベーションを提供しないステップを含む。
【0074】
例9:1つ以上の処理デバイスによって実行可能であるとともに以下の動作を実行するための命令を格納する1つ以上の機械読取り可能ストレージデバイスであって、当該以下の動作は、コンピューティングデバイスが、少なくとも部分的に、当該コンピューティングデバイス外にあるソースから提供される複数の入力アクティベーションを受信する動作と、当該コンピューティングデバイスのコントローラが、当該複数の入力アクティベーションの各々がゼロ値または非ゼロ値のうちのいずれを有するかを判断する動作と、当該コンピューティングデバイスのメモリバンクに当該入力アクティベーションのうち少なくとも1つを格納する動作と、当該コントローラが、非ゼロ値である入力アクティベーション値を有する1つ以上のメモリアドレス位置を含むインデックスを生成する動作と、当該コントローラが、当該メモリバンクから、少なくとも1つの入力アクティベーションを、計算アレイのうちの1つ以上のユニットによってアクセス可能なデータバスに対して提供する動作とを含む。当該アクティベーションは、少なくとも部分的に、当該インデックスに関連付けられたメモリアドレス位置から提供される。
【0075】
例10:例9の機械読取り可能ストレージデバイスであって、当該インデックスは、複数のビットを含むビットマップに基づいて作成され、当該ビットマップのうちの各々のビットは、非ゼロ入力アクティベーション値またはゼロ入力アクティベーション値のうち少なくとも1つを示す。
【0076】
例11:例9または例10の機械読取り可能ストレージデバイスであって、非ゼロ値を有する第1の入力アクティベーションを提供して、少なくとも1つのユニットが当該非ゼロ値を用いて計算を実行し、その後、ゼロ値を有する第2の入力アクティベーションを提供し、少なくとも1つのユニットにおいて、当該ゼロ値を用いて実行される可能性のある計算を防止する動作をさらに含む。
【0077】
例12:例11の機械読取り可能ストレージデバイスであって、当該防止する動作は、当該入力アクティベーションが当該インデックスに関連付けられていないメモリアドレス位置から提供されると当該コントローラが判断することに応じて、行なわれる。
【0078】
例13:例12の機械読取り可能ストレージデバイスであって、当該入力アクティベーションが当該インデックスに関連付けられていないメモリアドレス位置から提供されることを、当該コントローラが検出する動作と、当該検出する動作に応じて、当該ゼロ入力アクティベーション値に関連付けられた乗算演算を防止するための制御信号を当該計算アレイのうちの少なくとも1つのユニットに提供する動作とをさらに含む。
【0079】
例14:例9から例13のうちのいずれか1つの機械読取り可能ストレージデバイスであって、当該以下の動作はさらに、当該コントローラが、テンソル計算のうち第1の入力アクティベーションを用いる第1の部分を第1のユニットにマップし、当該テンソル計算のうち当該第1の入力アクティベーションも用いる第2の部分を当該第1のユニットとは異なる第2のユニットにマップする動作を含む。
【0080】
例15:電子システムは、コンピューティングデバイスに配置されるとともに1つ以上の処理デバイスを含むコントローラと、当該1つ以上の処理デバイスによって実行可能であるとともに以下の動作を実行するための命令を格納するための1つ以上の機械読取り可能ストレージデバイスとを含み、当該以下の動作は、当該コンピューティングデバイスが、少なくとも部分的に、当該コンピューティングデバイス外にあるソースから提供される複数の入力アクティベーションを受信する動作と、当該コントローラが、当該複数の入力アクティベーションの各々がゼロ値または非ゼロ値のうちのいずれを有するかを判断する動作と、当該コンピューティングデバイスのメモリバンクに当該入力アクティベーションのうち少なくとも1つを格納する動作と、当該コントローラが、非ゼロ値である入力アクティベーション値を有する1つ以上のメモリアドレス位置を含むインデックスを生成する動作と、当該コントローラが、当該メモリバンクから、少なくとも1つの入力アクティベーションを、計算アレイのうちの1つ以上のユニットによってアクセス可能なデータバスに対して提供する動作とを含む。当該アクティベーションは、少なくとも部分的に、当該インデックスに関連付けられたメモリアドレス位置から提供される。
【0081】
例16:例15の電子システムであって、当該インデックスは、複数のビットを含むビットマップに基づいて作成され、当該ビットマップのうちの各々のビットは、非ゼロ入力アクティベーション値またはゼロ入力アクティベーション値のうち少なくとも1つを示す。
【0082】
例17:例15または例16の電子システムであって、非ゼロ値を有する第1の入力アクティベーションを提供して、少なくとも1つのユニットが当該非ゼロ値を用いて計算を実行し、その後、ゼロ値を有する第2の入力アクティベーションを提供し、少なくとも1つのユニットにおいて、当該ゼロ値を用いて実行される可能性のある計算を防止する動作をさらに含む。
【0083】
例18:例17の電子システムであって、当該防止する動作は、当該入力アクティベー
ションが当該インデックスに関連付けられていないメモリアドレス位置から提供されると当該コントローラが判断することに応じて、行なわれる。
【0084】
例19:例17または例18の電子システムであって、当該入力アクティベーションが当該インデックスに関連付けられていないメモリアドレス位置から提供されることを、当該コントローラが検出する動作と、当該検出する動作に応じて、当該ゼロ入力アクティベーション値に関連付けられた乗算演算を防止するための制御信号を当該計算アレイのうちの少なくとも1つのユニットに提供する動作とをさらに含む。
【0085】
例20:例15から例19のうちのいずれか1つの電子システムであって、当該以下の動作はさらに、当該コントローラが、テンソル計算のうち第1の入力アクティベーションを用いる第1の部分を第1のユニットにマップし、当該テンソル計算のうち当該第1の入力アクティベーションも用いる第2の部分を当該第1のユニットとは異なる第2のユニットにマップする動作を含む。
【0086】
主題の特定の実施形態が記載されてきた。他の実施形態は添付の特許請求の範囲内である。たとえば、特許請求の範囲に記載されている動作は、異なる順序で実行することもで、依然として望ましい結果を達成することができる。一例として、添付の図面に示されるプロセスは、所望の結果を達成するために、必ずしも、図示される特定の順序または連続的順序を必要とするものではない。いくつかの実現例においては、マルチタスクおよび並列処理が有利であるかもしれない。
【手続補正書】
【提出日】2024-05-02
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
複数のニューラルネットワーク層を含むニューラルネットワークを実現するように構成されたハードウェア集積回路であって、前記集積回路は、
第1のニューラルネットワーク層の出力を生成するように構成された第1の計算ユニットを含み、前記第1の計算ユニットは、
前記出力を生成するために、対応する重みで入力の第1のバッチ内の非ゼロ入力を乗算するように構成された第1の複数の積和演算セルと、
前記複数の積和演算セルの各々に結合された第1の入力バスと、
前記第1の入力バスに結合された第1の入力メモリとを備え、前記第1の入力メモリは、前記入力の第1のバッチ内の非ゼロ入力だけを格納するように構成されており、前記第1の計算ユニットはさらに、
制御信号を生成するように構成された第1のコントローラを備え、前記制御信号は、前記第1の入力バスに、前記入力の第1のバッチ内のそれぞれの非ゼロ入力を前記第1の複数の積和演算セルの各々に提供することを行なわせる、ハードウェア集積回路。
【請求項2】
前記入力の第1のバッチと比べて入力の異なるバッチ内の非ゼロ入力を処理することに応答して、第2の異なるニューラルネットワーク層の出力を生成するように構成された第2の計算ユニットをさらに備える、請求項1に記載の集積回路。
【請求項3】
第2の計算ユニットをさらに備え、前記第2の計算ユニットは、
第2の複数の積和演算セルと、
前記第2の複数の積和演算セルの各々に結合された第2の入力バスと、
制御信号を生成するように構成された第2のコントローラとを含み、前記制御信号は、前記第2の入力バスに、入力の第2のバッチ内のそれぞれの非ゼロ入力を前記第2の複数の積和演算セルの各々に提供することを行なわせる、請求項1または2に記載の集積回路。
【請求項4】
前記第2の計算ユニットは、前記第2の複数の積和演算セルを用いて前記入力の第2のバッチ内の非ゼロ入力を処理することに応答して第2のニューラルネットワーク層の出力を生成するように構成される、請求項3に記載の集積回路。
【請求項5】
前記第1の計算ユニットは、
前記第1のニューラルネットワーク層を介して処理されるべき前記入力の第1のバッチと、前記第1のニューラルネットワーク層のための対応する重みの第1のセットとを受信し、
i)前記重みの第1のセット内の対応する重みと、ii)前記第1の入力バスから前記非ゼロ入力を受信する対応する積和演算セルとを用いて、前記入力の第1のバッチ内の各々の非ゼロ入力を処理するように構成される、請求項1~4のいずれか1項に記載の集積回路。
【請求項6】
前記第1の計算ユニットはさらに、前記第1の複数の積和演算セルのうちの各積和演算セルに結合された第1の重みメモリを含み、前記第1の重みメモリは、前記重みの第1のセットを格納するように構成される、請求項5に記載の集積回路。
【請求項7】
前記第1の複数の積和演算セルのうちの各積和演算セルは、
前記第1の入力バスを介して前記第1の入力メモリからそれぞれの非ゼロ入力を受信し、
前記第1のニューラルネットワーク層のための前記第1の重みメモリから対応する重みを受信し、
前記第1のニューラルネットワーク層のための前記出力を生成するために、前記それぞれの非ゼロ入力と前記対応する重みとの乗算を実行するように構成される、請求項6に記載の集積回路。
【請求項8】
前記第2の計算ユニットはさらに、
前記第2の入力バスに結合された第2の入力メモリを含み、前記第2の入力メモリは、前記入力の第2のバッチ内の非ゼロ入力だけを格納するように構成され、前記第2の計算ユニットはさらに、
前記第2の複数の積和演算セルのうちの各積和演算セルに結合された第2の重みメモリを含み、前記第2の重みメモリは前記重みの第2のセットを格納するように構成される、請求項7に記載の集積回路。
【請求項9】
前記第2の複数の積和演算セルのうちの各積和演算セルは、
前記第2の入力バスを介して前記第2の入力メモリからそれぞれの非ゼロ入力を受信し、
前記第2のニューラルネットワーク層のための前記第2の重みメモリから対応する重みを受信し、
前記第2のニューラルネットワーク層のための前記出力を生成するために、前記それぞれの非ゼロ入力と前記対応する重みとの乗算を実行するように構成される、請求項8に記載の集積回路。
【請求項10】
複数のニューラルネットワーク層を含むニューラルネットワークを実現する集積回路を用いて実行される方法であって、
複数のアクティベーション間のそれぞれの非ゼロアクティベーション値を識別するステップと、
各々の非ゼロアクティベーション値を前記集積回路の入力データバスに連続的に提供するステップと、
前記集積回路の複数の積和演算セル(multiply accumulate cell:MAC)の各々に前記入力データバスからのそれぞれの非ゼロアクティベーション値を提供するステップと、
それぞれの前記非ゼロアクティベーション値を用いて前記複数のMACの各々によって実行される行列乗算に基づいてニューラルネットワーク層の出力を生成するステップとを含む、方法。
【請求項11】
前記複数のアクティベーション間のそれぞれの非ゼロアクティベーション値を識別するステップは、
前記集積回路の計算タイルにおいて入力アクティベーションのデータストリームを受信するステップと、
前記入力アクティベーションのデータストリーム内の各々の入力アクティベーションの分析に基づいてそれぞれの非ゼロアクティベーション値を識別するステップとを含む、請求項10に記載の方法。
【外国語明細書】