IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ザイリンクス インコーポレイテッドの特許一覧

特許7535542バックプロパゲーションを直接用いたプログラマブルデバイスブロックのニューラルネットワークの学習
<>
  • 特許-バックプロパゲーションを直接用いたプログラマブルデバイスブロックのニューラルネットワークの学習 図1A
  • 特許-バックプロパゲーションを直接用いたプログラマブルデバイスブロックのニューラルネットワークの学習 図1B
  • 特許-バックプロパゲーションを直接用いたプログラマブルデバイスブロックのニューラルネットワークの学習 図2
  • 特許-バックプロパゲーションを直接用いたプログラマブルデバイスブロックのニューラルネットワークの学習 図3
  • 特許-バックプロパゲーションを直接用いたプログラマブルデバイスブロックのニューラルネットワークの学習 図4
  • 特許-バックプロパゲーションを直接用いたプログラマブルデバイスブロックのニューラルネットワークの学習 図5
  • 特許-バックプロパゲーションを直接用いたプログラマブルデバイスブロックのニューラルネットワークの学習 図6A
  • 特許-バックプロパゲーションを直接用いたプログラマブルデバイスブロックのニューラルネットワークの学習 図6B
  • 特許-バックプロパゲーションを直接用いたプログラマブルデバイスブロックのニューラルネットワークの学習 図6C
  • 特許-バックプロパゲーションを直接用いたプログラマブルデバイスブロックのニューラルネットワークの学習 図6D
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-08-07
(45)【発行日】2024-08-16
(54)【発明の名称】バックプロパゲーションを直接用いたプログラマブルデバイスブロックのニューラルネットワークの学習
(51)【国際特許分類】
   G06N 3/063 20230101AFI20240808BHJP
   G06N 3/08 20230101ALI20240808BHJP
【FI】
G06N3/063
G06N3/08
【請求項の数】 15
(21)【出願番号】P 2021576147
(86)(22)【出願日】2020-04-17
(65)【公表番号】
(43)【公表日】2022-08-25
(86)【国際出願番号】 US2020028842
(87)【国際公開番号】W WO2020256822
(87)【国際公開日】2020-12-24
【審査請求日】2023-04-07
(31)【優先権主張番号】16/449,264
(32)【優先日】2019-06-21
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591025439
【氏名又は名称】ザイリンクス インコーポレイテッド
【氏名又は名称原語表記】XILINX INCORPORATED
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ウムログル,ヤマン
(72)【発明者】
【氏名】フレイザー,ニコラス
(72)【発明者】
【氏名】ブロット,ミカエラ
(72)【発明者】
【氏名】デノルフ,クリストフ
(72)【発明者】
【氏名】フィッセルス,コルネリス
【審査官】山本 俊介
(56)【参考文献】
【文献】特開平04-289957(JP,A)
【文献】Erwei Wang et al.,LUTNet: Rethinking Inference in FPGA Soft Logic,arXiv[オンライン],verson 1,2019年04月01日,頁1~9,[検索日 2024.03.28] <インターネット:https://arxiv.org/abs/1904.00938>
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00-99/00
(57)【特許請求の範囲】
【請求項1】
ニューラルネットワークを訓練する方法であって、
ハードウェアビルディングブロック(HBB)、ニューロン等価(NEQ)、およびNEQからHBBへの変換手順を定義すること(302)であって、NEQは機械学習フレームワークで表現された計算グラフであり、各NEQは1つのHBBと数学的に等価であり、前記変換手順を介して1つのHBBに変換可能であることと、
機械学習フレームワークで前記NEQを用いて前記ニューラルネットワークを定義すること(304)と、
トレーニングプラットフォーム(212)で前記ニューラルネットワークを訓練すること(304)と、
前記変換手順を用いて、訓練された前記ニューラルネットワークをHBBのネットリストに変換するために、前記ニューラルネットワーク内の前記NEQの各々を前記ネットリストの前記HBBのうちの1つのHBBに変換すること(306)とを備える、方法。
【請求項2】
前記ネットリストを後処理(308)して、前記ネットリストの1つ以上の最適化を行うことをさらに備える、請求項1に記載の方法。
【請求項3】
プログラマブルデバイスをプログラミングするために、前記ネットリストのインプリメンテーションを生成することをさらに備える、請求項1に記載の方法。
【請求項4】
前記HBB、前記NEQおよび前記変換手順を定義するステップは、
プログラマブルデバイスのプログラマブルファブリック内のプリミティブを特定して、前記HBBを実装することと、
HBBごとに、前記機械学習フレームワークで前記NEQのうちの1つ以上を定義することと、
NEQごとに、対応するHBBに対する変換手順を特定することとを含む、請求項1に記載の方法。
【請求項5】
各NEQは、量子化入力および量子化出力を含み、前記量子化入力の幅の合計は、前記NEQのそれぞれが変換されるHBBを実装するメモリコンポーネントのアドレスビット数以下であり、前記量子化出力の幅の合計は、前記メモリコンポーネントの幅以下である、請求項1に記載の方法。
【請求項6】
プロセッサによって実行されると前記プロセッサにニューラルネットワークを訓練する方法を行わせる命令を格納した非一時的コンピュータ読取可能媒体であって、前記方法は、
ハードウェアビルディングブロック(HBB)、ニューロン等価(NEQ)、およびNEQからHBBへの変換手順を定義することであって、NEQは機械学習フレームワークで表現された計算グラフであり、各NEQは1つのHBBと数学的に等価であり、前記変換手順を介して1つのHBBに変換可能であることと、
機械学習フレームワークで前記NEQを用いて、前記ニューラルネットワークを定義することと、
トレーニングプラットフォームで前記ニューラルネットワークを訓練することと、
前記変換手順を用いて、訓練された前記ニューラルネットワークをHBBのネットリストに変換するために、前記ニューラルネットワーク内の前記NEQの各々を前記ネットリストの前記HBBのうちの1つのHBBに変換することとを含む、非一時的コンピュータ読取可能媒体。
【請求項7】
前記ネットリストを後処理して、前記ネットリストの1つ以上の最適化を行うことをさらに備える、請求項6に記載の非一時的コンピュータ読取可能媒体。
【請求項8】
プログラマブルデバイスをプログラミングするために、前記ネットリストのインプリメンテーションを生成することをさらに備える、請求項6に記載の非一時的コンピュータ読取可能媒体。
【請求項9】
前記HBB、前記NEQおよび前記変換手順を定義するステップは、
プログラマブルデバイスのプログラマブルファブリック内のプリミティブを特定して、前記HBBを実装することと、
HBBごとに、前記機械学習フレームワークで前記NEQのうちの1つ以上を定義することと、
NEQごとに、対応するHBBに対する変換手順を特定することとを含む、請求項6に記載の非一時的コンピュータ読取可能媒体。
【請求項10】
各NEQは、ドット積演算および非線形演算を含み、各NEQは、量子化入力および量子化出力を含み、前記量子化入力の幅の合計は、前記NEQのそれぞれが変換されるHBBを実装するメモリコンポーネントのアドレスビット数以下であり、前記量子化出力の幅の合計は、前記メモリコンポーネントの幅以下である、請求項6に記載の非一時的コンピュータ読取可能媒体。
【請求項11】
コンピューティングシステム(200)であって、
設計ツールを実装するコードを格納するように構成されたシステムメモリ(208)と、
トレーニングプラットフォーム(212)と、
前記システムメモリおよび前記トレーニングプラットフォームに結合されたプロセッサ(206)とを備え、前記プロセッサは、前記コードを実行して、ニューラルネットワークの訓練を、
ハードウェアビルディングブロック(HBB)、ニューロン等価(NEQ)、およびNEQからHBBへの変換手順を定義すること(302)であって、NEQは機械学習フレームワークで表現された計算グラフであり、各NEQは1つのHBBと数学的に等価であり、前記変換手順を介して1つのHBBに変換可能であることと、
機械学習フレームワークで前記NEQを用いて前記ニューラルネットワークを定義すること(304)と、
前記トレーニングプラットフォームで前記ニューラルネットワークを訓練すること(304)と、
前記変換手順を用いて、訓練された前記ニューラルネットワークをHBBのネットリストに変換するために、前記ニューラルネットワーク内の前記NEQの各々を前記ネットリストの前記HBBのうちの1つのHBBにに変換すること(306)とによって実行するように構成される、コンピューティングシステム。
【請求項12】
前記ニューラルネットワークを訓練することはさらに、前記ネットリストを後処理して、前記ネットリストの1つ以上の最適化を行うことを含む、請求項11に記載のコンピューティングシステム。
【請求項13】
前記ニューラルネットワークを訓練することはさらに、プログラマブルデバイスをプログラミングするために、前記ネットリストのインプリメンテーションを生成することを含む、請求項11に記載のコンピューティングシステム。
【請求項14】
前記HBB、前記NEQおよび前記変換手順を定義することは、
プログラマブルデバイスのプログラマブルファブリック内のプリミティブを特定して、前記HBBを実装することと、
HBBごとに、前記機械学習フレームワークで前記NEQのうちの1つ以上を定義することと、
NEQごとに、対応するHBBに対する変換手順を特定することとを含む、請求項11に記載のコンピューティングシステム。
【請求項15】
各NEQは、ドット積演算および非線形演算を含み、各NEQは、量子化入力および量子化出力を含み、前記量子化入力の幅の合計は、前記NEQのそれぞれが変換されるHBBを実装するメモリコンポーネントのアドレスビット数以下であり、前記量子化出力の幅の合計は、前記メモリコンポーネントの幅以下である、請求項11に記載のコンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【0001】
技術分野
本開示の例は、一般にニューラルネットワーク、特にバックプロパゲーションを直接用いたプログラマブルデバイスブロックのニューラルネットワークの学習に関する。
【背景技術】
【0002】
背景
ディープニューラルネットワーク(deep neural network:DNN)の規模が予測能力を向上させるために拡大し続けるにつれて、それらのメモリおよび計算フットプリントも拡大し、エネルギーおよびリソースに制約のあるハードウェア環境での展開がますます困難になっている。浮動小数点演算を使用するDNNには大きな冗長性があり、これによって計算およびメモリコストを削減することができる。これらの技術は、量子化、枝刈りおよび低ランク分解を含む。量子化の手法として提案されているもののうち、訓練型量子化法(訓練過程でDNNを量子化する)は、量子化ニューラルネットワーク(quantized neural network:QNN)という形で精度を維持しつつ作業量を削減するという点で、いくつかの最も有望な結果をもたらしている。量子化の最も極端な形態はバイナリニューラルネットワーク(binary neural network:BNN)であり、重みおよび活性度を2値に拘束することで、高い精度を維持しながら計算およびメモリコストを大幅に下げる。
【0003】
従来、フィールド・プログラマブル・ゲート・アレイ(Field Programmable Gate Array:FPGA)などのプログラマブルデバイス用のDNNアクセラレータを作成する戦略は、学習したパラメータをメモリに配置し、対応する重みと活性度との間で正しい計算が行われるように演算をスケジューリングすることによって、人工ニューロンを固定ハードウェアアーキテクチャにマッピングすることであった。そして、ルックアップテーブル(lookup table:LUT)、デジタル信号プロセッサ(digital signal processor:DSP)および他のプログラマブルデバイスリソースを用いて、固定ハードウェアアーキテクチャを実装する。この問題を全体として見ると、固定アーキテクチャは、ファブリックの機能とDNNが実行する演算との間のインターフェイスとして機能する。しかしながら、このインターフェイスは、DNNがプログラマブルデバイスファブリックを最大限に活用できるようにするための最適化の障害にもなる。さらに、固定アーキテクチャでは、DNNの計算をハードウェアにマッピングしスケジュールする重要な最適化コンパイラが必要であり、これがさらに性能を低下させる可能性がある。
【発明の概要】
【課題を解決するための手段】
【0004】
概要
バックプロパゲーションを直接用いて、プログラマブルデバイスブロックのニューラルネットワークを学習するための技術について説明する。一例では、ニューラルネットワークを訓練する方法は、ハードウェアビルディングブロック(HBB)、ニューロン等価(neuron equivalent:NEQ)、およびNEQからHBBへの変換手順を定義することと、機械学習フレームワークでNEQを用いてニューラルネットワークを定義することと、トレーニングプラットフォームでニューラルネットワークを訓練することと、変換手順を用いて、訓練されたニューラルネットワークをHBBのネットリストに変換して、ニューラルネットワーク内のNEQをネットリストのHBBに変換することとを備える。
【0005】
他の例では、プロセッサによって実行されるとプロセッサにニューラルネットワークを訓練する方法を行わせる命令を格納した非一時的コンピュータ読取可能媒体であって、方法は、ハードウェアビルディングブロック(HBB)、ニューロン等価(NEQ)、およびNEQからHBBへの変換手順を定義することと、機械学習フレームワークでNEQを用いてニューラルネットワークを定義することと、トレーニングプラットフォームでニューラルネットワークを訓練することと、変換手順を用いて、訓練されたニューラルネットワークをHBBのネットリストに変換して、ニューラルネットワーク内のNEQをネットリストのHBBに変換することとを含む。
【0006】
他の例では、コンピューティングシステムは、設計ツールを実装するコードを格納するように構成されたシステムメモリと、トレーニングプラットフォームと、システムメモリおよびトレーニングプラットフォームに結合されたプロセッサとを備え、プロセッサは、コードを実行して、ニューラルネットワークの訓練を、ハードウェアビルディングブロック(HBB)、ニューロン等価(NEQ)、およびNEQからHBBへの変換手順を定義することと、機械学習フレームワークでNEQを用いてニューラルネットワークを定義することと、トレーニングプラットフォームでニューラルネットワークを訓練することと、変換手順を用いて、訓練されたニューラルネットワークをHBBのネットリストに変換して、ニューラルネットワーク内のNEQをネットリストのHBBに変換することとによって、実行するように構成される。
【0007】
これらおよび他の態様は、以下の詳細な説明を参照して理解可能である。
上記の特徴が詳細に理解され得るような態様で、そのいくつかが添付の図面において示される実現例を参照することによって、簡潔に概説された実現例のより詳細な記載が提供され得る。しかしながら、添付の図面は、実現例の典型的な例のみを示しているため、その範囲を限定するものと考えられるべきではないことに留意されたい。
【図面の簡単な説明】
【0008】
図1A】ある例に係るハードウェアアクセラレーションシステムを示すブロック図である。
図1B】ある例に係る高速化アプリケーションを示すブロック図である。
図2】ある例に係るコンピューティングシステム(「コンピュータ」)を示すブロック図である。
図3】ある例に係るニューラルネットワークの訓練方法を示すフロー図である。
図4】ある例に係る、図3に示す方法の一部を実行する方法を示すフロー図である。
図5】疎なグラフトポロジを有するニューラルネットワークの例を示すブロック図である。
図6A】ある例に係るマルチ集積回路(IC)プログラマブルデバイスを示すブロック図である。
図6B】ある例に係るプログラマブルICを示すブロック図である。
図6C】ある例に係るプログラマブルICのシステムオンチップ(System-on-Chip:SOC)実装を示すブロック図である。
図6D】ある例に係るプログラマブルICのフィールド・プログラマブル・ゲート・アレイ(FPGA)実装を示す図である。
【発明を実施するための形態】
【0009】
理解を容易にするために、可能な場合、これらの図に共通の同一の要素を指定するように、同一の参照符号が使用されている。ある例の要素は、他の例において有用に援用され得ると考えられる。
【0010】
詳細な説明
図面を参照して、さまざまな特徴について以下で説明する。図が縮尺通りに描かれていてもいなくてもよく、図面全体を通して、同様の構造の要素または機能が同様の参照符号で表されていることに留意されたい。図面が特徴の説明を容易にすることのみを意図されたものであることに留意されたい。それらは、請求された発明の網羅的な説明として、または請求された発明の範囲に対する制限であると意図されていない。くわえて、図示された例は、示された全ての態様または利点を有する必要はない。特定の例と関連して説明される態様または利点は、必ずしもその例に限定されず、そのように図示されていない場合、またはそのように明示的に説明されていない場合でも、他の任意の例において実施することが可能である。
【0011】
プログラマブルデバイスブロックのニューラルネットワークを、バックプロパゲーションを直接用いて学習するための技術について説明する。これらの技術は、プログラマブルデバイスファブリック(たとえば、ルックアップテーブル(LUT)、ブロックランダムアクセスメモリ(BRAM)およびこれらの組合わせ)のビルディングブロックを機械学習フレームワークに直接公開するものである。これらの技術により、カスタムオーバーレイアーキテクチャまたはスケジューリングツールを定義する必要がなく、効率的なプログラマブルデバイスのハードウェア実装に直接マッピングする態様で、トレーニングフェーズ中にディープニューラルネットワーク(DNN)をカスタマイズ可能になる。要するに、これらの技術は、量子化入力、量子化出力および任意の重みを有する人工ニューロンを使用することにより、ニューラルネットワークのトポロジにプログラマブルデバイスファブリックの機能を反映させる。ネットワークの訓練が完了すると、各ニューロンを1つのビルディングブロックの真理値表にマッピングすることができる。その結果生じるネットリストは、同じニューラルネットワークを実装した高度にパイプライン可能な超並列回路として、十分なサイズのデバイスのプログラマブルファブリック上に配置およびルーティングすることができる。これらおよび他の態様について、図面に関して以下で説明する。
【0012】
図1Aは、一例に係るハードウェアアクセラレーションシステム100を示すブロック図である。ハードウェアアクセラレーションシステム100は、ホストコンピューティングシステム102を備える。ホストコンピューティングシステム102は、ハードウェアプラットフォーム(「ハードウェア104」)と、ハードウェア104で実行されるソフトウェアプラットフォーム(「ソフトウェア106」)とを含む。ハードウェア104は、処理システム110、システムメモリ116、ストレージデバイス(「ストレージ118」)およびハードウェアアクセラレータ122を含む。ソフトウェア106は、オペレーティングシステム(OS)144、アクセラレーションスタック146、ホストアプリケーション150および競合スレッド139を含む。
【0013】
処理システム110は、マイクロプロセッサ112、サポート回路114および周辺バス115を含む。マイクロプロセッサ112は、x86ベースのプロセッサ、またはARM(登録商標)ベースのプロセッサなど、任意のタイプの汎用中央処理装置(CPU)であり得る。マイクロプロセッサ112は、1つ以上のコアおよび関連する回路(たとえば、キャッシュメモリ、メモリ管理ユニット(MMU)、割込みコントローラ等)を含み得る。マイクロプロセッサ112は、システムメモリ116および/またはストレージ118に格納することができる、本明細書に記載される1つ以上の動作を実行するプログラムコードを実行するように構成されている。サポート回路114は、マイクロプロセッサ112と協働して、マイクロプロセッサ112、システムメモリ116、ストレージ118、ハードウェアアクセラレータ122、または任意の他の周辺デバイス間のデータフローを管理するさまざまなデバイスを含む。たとえば、サポート回路114は、チップセット(たとえば、ノースブリッジ、サウスブリッジ、プラットフォームホストコントローラ等)、電圧レギュレータ、およびファームウェア(たとえば、基本入出力システム(BIOS))などを含み得る。サポート回路114は、マイクロプロセッサ112と、ハードウェアアクセラレータ122などのさまざまな周辺機器が接続されている周辺バス115との間のデータフローを管理する。例によっては、マイクロプロセッサ112は、チップセット(たとえば、ノースブリッジ、サウスブリッジ等)の機能の全てまたはかなりの部分を吸収するシステムインパッケージ(System-in-Package:SiP)またはシステムオンチップ(SOC)などであり得る。周辺バス115は、PCIe(Peripheral Component Interconnet Express)などの拡張バス規格を実装することができる。
【0014】
システムメモリ116は、実行可能な命令およびデータなどの情報を記憶し、取出すことを可能にする装置である。システムメモリ116は、たとえば、ダブルデータレート(DDR)ダイナミックRAM(DRAM)などの1つ以上のランダムアクセスメモリ(RAM)モジュールを含み得る。ストレージ118は、ローカルストレージデバイス(たとえば、1つ以上のハードディスク、フラッシュメモリモジュール、ソリッドステートディスクおよび光ディスク)ならびに/またはコンピューティングシステム102が1つ以上のネットワークデータストレージシステムと通信することを可能にするストレージインターフェイスを含む。ハードウェア104は、グラフィックスカードおよびユニバーサルシリアルバス(USB)インターフェイスなどの、コンピューティングシステムのさまざまな他の従来のデバイスおよび周辺機器を含み得る。
【0015】
一例では、ハードウェアアクセラレータ122は、プログラマブルデバイス128およびRAM126を含む。ハードウェアアクセラレータ122は任意に、不揮発性メモリ(NVM)124を含み得る。プログラマブルデバイス128は、フィールド・プログラマブル・ゲート・アレイ(FPGA)または他の組込みサブシステムとともにFPGAプログラマブルロジックを有するSOCであり得る。NVM124は、フラッシュメモリなどの任意のタイプの不揮発性メモリを含み得る。RAM126は、DDR DRAMなどを含み得る。RAM126は、以下でさらに説明するように、離散的なRAMバンク127に編成することができる。プログラマブルデバイス128は、NVM124およびRAM126に結合される。また、プログラマブルデバイス128は、処理システム110の周辺バス115に結合される。
【0016】
OS144は、Linux(登録商標)、Microsoft Windows(登録商標)、またMac OS(登録商標)などの、当該技術分野で知られている任意の商品オペレーティングシステムであり得る。アクセラレーションスタック146は、ハードウェアアクセラレータ122に対して、そのコマンドおよび制御のためのアプリケーションプログラミングインターフェイス(API)を提供するドライバおよびライブラリを含む。
【0017】
図1Bは、ある例に係る高速化アプリケーション180を示すブロック図である。高速化アプリケーション180は、ホストアプリケーション150およびアクセラレーション回路130を含む。アクセラレーション回路130は、ハードウェアアクセラレータ122上のプログラマブルデバイス128のプログラマブルロジック(PL)3でプログラムされる。ホストアプリケーション150は、マイクロプロセッサ112上で実行されるソフトウェアを含み、マイクロプロセッサ112は、加速スタック146へのAPIコールを用いてアクセラレーション回路130を呼出して、ある作業を実行する。ホストアプリケーション150は、ハードウェアアクセラレータ122に一部の機能をオフロードするニューラルネットワーク、ビデオ処理、またはネットワーク処理などのタイプのアプリケーションを含み得る。
【0018】
図2は、ある例に係るコンピューティングシステム(「コンピュータ200」)を示すブロック図である。コンピュータ200は、ハードウェアプラットフォーム202で実行されるソフトウェアプラットフォーム204を含む。ハードウェアプラットフォーム202は、中央処理装置(CPU)206、システムメモリ208、ストレージデバイス210、サポート回路211およびトレーニングプラットフォーム212を含む。ソフトウェアプラットフォーム204は、オペレーティングシステム(OS)230および設計ツール235を含む。
【0019】
CPU206は、x86ベースのプロセッサまたはARMベースのプロセッサなど、任意のタイプの汎用中央処理装置(CPU)であり得る。CPU206は、1つ以上のコアおよび関連する回路(たとえば、キャッシュメモリ、メモリ管理ユニット(MMU)、割込みコントローラ等)を含み得る。CPU206は、システムメモリ208および/またはストレージデバイス210に格納可能な、本明細書に記載される1つ以上の動作を実行するプログラムコードを実行するように構成されている。サポート回路211は、CPU206と協働して、CPU206、システムメモリ208、ストレージデバイス210、トレーニングプラットフォーム212、ハードウェアアクセラレータ214、または他の任意の周辺デバイス間のデータフローを管理するさまざまなデバイスを含む。たとえば、サポート回路211は、チップセット(たとえば、ノースブリッジ、サウスブリッジ、プラットフォームホストコントローラ等)、電圧レギュレータおよびファームウェア(たとえば、BIOS)などを含み得る。例によっては、CPU206は、システムインパッケージ(SiP)またはシステムオンチップ(SoC)などであり得、チップセット(たとえば、ノースブリッジ、サウスブリッジ等)の機能の全てまたはかなりの部分を吸収する。
【0020】
システムメモリ208は、実行可能な命令およびデータなどの情報を記憶し、取出すことを可能にする装置である。システムメモリ208は、たとえば、ダブルデータレート(DDR)ダイナミックRAM(DRAM)などの1つまたは複数のランダムアクセスメモリ(RAM)モジュールを含み得る。システムメモリ208は、データ226と、ソフトウェアプラットフォーム204を実装するためにCPU226によって処理および実行されるプログラムコード(「コード228」)とを格納し得る。ストレージデバイス210は、ローカルストレージデバイス(たとえば、1つ以上のハードディスク、フラッシュメモリモジュール、ソリッドステートディスクおよび光ディスク)ならびに/またはコンピュータ200が1つ以上のネットワークデータストレージシステムと通信することを可能にするストレージインターフェイスを含む。ハードウェアプラットフォーム202は、グラフィックスカードおよびユニバーサルシリアルバス(USB)インターフェイスなどの、コンピューティングシステムのさまざまな他の従来のデバイスおよび周辺機器を含み得る。
【0021】
トレーニングプラットフォーム212は、プロセッサ(複数可)、メモリ、入出力(IO)回路などを含み得るハードウェア216を含む。一例では、ハードウェア216は、グラフィックス処理ユニット(GPU)および関連するサポート回路を含む。他の例では、ハードウェア216は、関連するサポート回路と共に、特定用途向け集積回路(ASIC)またはプログラマブルICなどを含み得る。一例では、トレーニングプラットフォーム212は、ハードウェアアクセラレータ122よりも性能が高いが、ハードウェアアクセラレータ122よりエネルギー消費も多い。トレーニングプラットフォーム212は、ニューラルネットワークを訓練するために使用可能である。
【0022】
OS230は、Linux、Microsoft Windows、またはMac OSなどの、当該技術分野で知られている任意の商品オペレーティングシステムであり得る。設計ツール235は、トレーニングプラットフォーム212上でニューラルネットワークをトレーニングし、ターゲットプログラマブルデバイスのためにニューラルネットワークを実装するソフトウェアを含む。
【0023】
図3は、ある例に係るニューラルネットワークの訓練方法300を示すフロー図である。方法300は、上述したコンピュータ200上の設計ツール235によって実行可能である。方法300はステップ302で始まり、ステップ302で、設計ツール235は、ハードウェアビルディングブロック(HBB)、ニューロン等価(NEQ)および変換手順を定義する。
【0024】
HBBは、真理値表を実装可能な、プログラマブルデバイスファブリックで利用できるプリミティブである。たとえば、プログラマブル・ファブリックは、ルックアップテーブル(LUT)およびブロックRAM(BRAM)などを含み得る。HBBは、異なるサイズの真理値表を実装する。HBB真理値表への入力ビット数は、Bと表記される。出力ビット数(すなわち、異なる出力変数の数)は、Bと表記される。真理値表の内容は、HBBの構成と呼ばれる。一般に、任意のメモリ部品があるサイズの真理値表を実装可能であり、HBBとして使用可能である。
【0025】
NEQは、機械学習フレームワークで表現される計算グラフである。一例では、NEQは、入力および学習可能なパラメータに対する乗算累積演算と、後に続く非線形関数とを含む。NEQは量子化入力および出力を含むが、浮動小数点数パラメータを有し得る。各NEQは数学的に1つのHBBと等価であり、変換手順により1つのHBBに変換可能である。一般に、メモリデバイスは以下の条件を満たす限り、どのような形式のリダクションも扱うことができる。
【0026】
【数1】
【0027】
式中、Bはメモリ部品のアドレスビット数であり、Cinは入力チャネル数であり、Bはi番目の入力チャネルに使用されるビット数である。NEQは、最後の演算が以下の制約を満たす限り、任意の数の要素ごとの演算または非要素ごとの演算を含み得る。
【0028】
【数2】
【0029】
式中、Coutは出力チャネル数であり、Bはo番目の出力チャネル用のビット数であり、Bは出力ビット数(たとえば、メモリ幅)である。各NEQは、標準的なバックプロパゲーションのような勾配法を用いて学習可能なパラメータを含む。したがって、NEQは、半微分可能な関数のみを含む。
【0030】
変換手順は、訓練されたパラメータを有するNEQを受取り、その構成でHBBを出力する。NEQがマッピングするHBBのタイプは静的に決定される(すなわち、各NEQのタイプは1つのHBBのタイプにのみマッピングされる)。NEQは量子化入力および出力を有するため、HBB(すなわち真理値表)の構成は、訓練されたNEQの入力のすべての並べ換えを評価し、出力を観察するだけで生成可能である。各(入力、出力)ペアは、真理値表の1行となる。
【0031】
HBBおよびNEQの例について以下で説明する。たとえば、B=6およびB=1である6対1のLUTについて考える。ターゲット・デバイスで利用可能であれば、他のタイプのLUT構成も利用可能である。一般に、各NEQは、ドット積演算と非線形演算(たとえば、閾値演算)とを含み得る。任意に、NEQは、ドット積演算と非線形演算との間の要素ごとの演算(たとえば、バッチ正規化)などの1つ以上の付加的な演算を含み得る。このようなNEQは、LUTにマッピングされる。変換には、各入力候補を列挙し(たとえば、ここでは2^6=64の可能性)、入力候補ごとに訓練された方程式を評価し、(入力、出力)ペアをHBB真理値表へ入力することが含まれる。
【0032】
他の例では、BRAMがHBBとして使用される。BRAMについて説明したが、ファブリック内のどのようなタイプのRAM素子も使用可能である。BRAMは、多くの異なる方法で構成することができ、各例でメモリデバイスとして機能する。たとえば、2つの独立した18kメモリとして、または1つの36kメモリとして構成可能なBRAMについて考える。さらに、これらの構成の各々は、ワードあたりのビット数ならびにメモリの容量(たとえば、18k構成の場合は16k 1ビットワード、8k 2ビットワード等)および(たとえば、36k構成の場合は32k 1ビットワード、16k 2ビットワード等)を変える複数のモードを有し得る。このような例では、2×18k構成の場合、14/1、13/2,12/4,11/9,10/18,および9/36のB/Bの組合わせがサポートされる。なお、この構成では、事実上2つの並列NEQがあり、各々が上記のような独立したB/Bモードをサポートしている。1×36k構成では、15/1,14/2,13/4,12/9,11/18,10/36,および9/72のB/Bの組合わせがサポートされる。BRAMにマッピング可能なNEQは、LUTにマッピング可能なNEQと同様である。しかしながら、6対1のLUTと異なり、BRAMはより高いビット幅の出力を生成可能である。LUTベースのNEQと同様に、Bの制約を満たす限り、任意の数の要素ごとの演算を含み得る。
【0033】
図4は、ある例に係る方法300におけるステップ302を実行する方法を示すフロー図である。ステップ402で、設計ツール235は、所与のプログラマブルデバイスファブリックについてHBBを特定する。ステップ404で、HBBごとに、設計ツール235は、機械学習フレームワークで1つまたは複数のNEQを定義する。各NEQは、バックプロパゲーションを用いて訓練可能である。ステップ406で、NEQタイプごとに、設計ツール235は、学習されたニューロンからその対応するHBBへの変換手順を特定する。
【0034】
図3に戻り、ステップ304で、ユーザーは、設計ツール235とインタラクトして、機械学習フレームワークでNEQを用いてDNNを定義し、DNNを訓練する。機械学習フレームワークとして、PyTorchまたはTensorFlowなどが挙げられる。ステップ302で特定する利用可能なNEQを用いて、ユーザーは、NEQをインスタンス化しそれらを接続することによって、DNNトポロジを構築する。トポロジは、バックプロパゲーションを用いて、機械学習フレームワークでラベル付きデータセットに対して訓練可能である。
【0035】
理論的には、NEQの数および接続性に制限はない。しかしながら、実際には、各NEQはHBBにマップバックされ、プログラマブルデバイスの容量および相互接続構造を考慮する必要がある。たとえば、図5は、疎なグラフトポロジを有するニューラルネットワークの一例を示すブロック図である。ニューラルネットワークは、LUT層502および504と、出力層508とを含む。LUT層502には、データセット501が適用される。データセット501は、LUT層502に疎に接続されている。LUT層502は、LUT層504に疎に接続されている。LUT層504は、出力層508に完全に接続されている。各LUT層502,504は、複数のLUT NEQ510を含む。各LUT NEQ510は、和演算子512および非線形演算子514(たとえば、大なりイコール演算子)を含む。この例では、各LUT層は次の層に疎に接続されている、すなわち、レベルN+1におけるすべてのLUT入力がレベルNにおけるすべてのLUT出力に直接接続されていない。これは、前の層における幅を指数関数的に増大させることなく出力ノードのファンインの増大を可能にし、マルチレベル論理合成を暗示するものである。層間の接続パターンは、ランダムに選択してもよく、配置・ルーティングアルゴリズムに資することが知られている所定の疎パターンに従って選択してもよい。さらに、この方式では、階層の途中で生成された中間出力を共有して、新しい/異なるニューロン出力を生成することができる。
【0036】
一例では、ユーザは、標準的な畳込み層、完全接続層およびプーリング層などの非NEQビルディングブロックを含むことによって、ハイブリッドトポロジを生成することができる。しかしながら、そのような場合、本明細書で説明する技術はトポロジのNEQ部分にのみ適用される。すなわち、設計ツール235は、トポロジのNEQをHBBにマッピングするだけである。トポロジの残りの非NEQ部分に加えて、NEQ部分と非NEQ部分との間の接続性も、従来の方法を用いて(たとえば、オーバーレイアーキテクチャを定義し、マッピングおよびスケジューリングツールを用いることによって)ハードウェアにマッピングされる。たとえば、通常の浮動小数点畳込み層で始まりLUT層で終わるネットワークを構築可能であり、バックプロパゲーションで訓練可能であり、第1の部分は固定ハードウェアアーキテクチャにマッピングされ、第2の部分はHBB(たとえば、LUT、BRAM等)に直接変換される。
【0037】
ステップ302からのNEQが微分可能である限り、NEQ(および任意で非NEQの従来の深層学習層)から構築されるトポロジは、バックプロパゲーションアルゴリズムを用いてエンドツーエンドで訓練可能になる。NEQは量子化入力および出力を有するため、ストレートスルー推定器(STE)技術を用いて、量子化関数によって勾配を伝搬することができ、これは、QNNおよびBNNに対して実際に良好に機能することが示されている。バックプロパゲーションを訓練に用いるため、知識蒸留(knowledge distillation)およびアンサンブル(ensembling)といった、標準的なニューラルネットワーク訓練を改善するために適用される技術を適用可能である。
【0038】
図3に戻り、ステップ306で、設計ツール235は、変換手順を用いて、NEQの訓練されたネットワークをHBBのネットリストに変換する。トポロジが訓練され所望の精度に達すると、ステップ302からの変換手順が各NEQに適用されて、その等価HBBに変換される。ステップ304で得られた訓練済みのNEQパラメータを用いて、変換手順は、出力を得るために、各可能な入力の組合わせで各NEQを評価することになる。各(入力->出力)マッピングは、HBBが実装する必要のある真理値表の1行に相当する。NEQの入力および出力の量子性によって、結果として得られるHBBは、どの入力に対してもNEQと同じ結果を生成する。NEQごとにこの手順を実行すると、構成されたHBBのネットリストが生成され、各HBBは変換元のNEQの接続性および機能を模倣する。
【0039】
ステップ308で、設計ツール235は、ネットリストに適用可能な任意の後処理最適化を任意で行い、ターゲットプログラマブルデバイス用のインプリメンテーションを生成する。たとえば、ヒューリスティックロジックミニマイザーをネットリストに適用して使用するLUT数を減らすことが可能である、パイプラインレジスタを層間に挿入してクロック周波数を高めることが可能である、または、ネットリストをチャンクに分割して一度に1つのチャンクずつ、動的な部分再構成を有するより小さなプログラマブルデバイスにマッピング可能である。オプションの後処理が完了すると、最終的なネットリストが配置・ルーティングアルゴリズムで処理されて、プログラマブルデバイス用のビットファイルが生成される。とりわけ、HBBはターゲットとなるプログラマブル・ファブリックのプリミティブに対応するため、論理合成および技術マッピングは必要ではない。その結果得られる設計は超並列になり、ステップ304から訓練されたネットワークと同じになる。くわえて、最適化中にネットリストが分割されていない限り、ニューラルネットワークのハードウェア実装は、回路のクロックレートで入力を分類することができる。
【0040】
図6Aは、ある例に係るプログラマブルデバイス54を示すブロック図である。プログラマブルデバイス54は、ハードウェアアクセラレータ122にプログラマブルデバイス128を実装するために使用可能である。プログラマブルデバイス54は、複数のプログラマブル集積回路(IC)1、たとえば、プログラマブルIC1A,1B,1Cおよび1Dを含む。ある例では、各プログラマブルIC1は、インターポーザ51上に配置されたICダイである。各プログラマブルIC1は、プログラマブルデバイス54のスーパーロジック領域(SLR)53、たとえば、SLR53A,53B,53Cおよび53Dを含む。プログラマブルIC1は、インターポーザ51上の導体(SLL(Super Long Line)52と称する)を介して相互接続されている。
【0041】
図6Bは、ある例に係るプログラマブルIC1を示すブロック図である。プログラマブルIC1は、プログラマブルデバイス128またはプログラマブルデバイス54のプログラマブルIC1A~1Dのうちの1つを実装するために使用され得る。プログラマブルIC1は、プログラマブルロジック3(プログラマブルファブリックとも呼ばれる)、構成ロジック25および構成メモリ26を含む。プログラマブルIC1は、不揮発性メモリ27、DRAM28およびその他の回路29などの外部回路に結合可能である。プログラマブルロジック3は、論理セル30、サポート回路31およびプログラマブルインターコネクト32を含む。論理セル30は、複数の入力の一般的な論理機能を実装するように構成可能な回路を含む。サポート回路31は、トランシーバ、入出力ブロック、デジタル信号プロセッサおよびメモリなどの専用回路を含む。論理セルおよびサポート回路31は、プログラマブルインターコネクト32を用いて相互接続可能である。論理セル30をプログラミングするための情報、サポート回路31のパラメータを設定するための情報およびプログラマブルインターコネクト32をプログラミングするための情報は、構成ロジック25によって構成メモリ26に格納される。構成ロジック25は、不揮発性メモリ27または他のソース(たとえば、DRAM28または他の回路29)から構成データを取得し得る。例によっては、プログラマブルIC1は処理システム2を含む。処理システム2は、マイクロプロセッサ(複数可)、メモリ、サポート回路およびIO回路などを含み得る。例によっては、プログラマブルIC1は、ネットワークオンチップ(Network-on-Chip:NOC)55およびデータ処理エンジン(DPE)アレイ56を含む。NOC55は、PS2、PL3およびDPEアレイ56の間など、プログラマブルIC1のサブシステム間の通信を提供するように構成される。DPEアレイ56は、ベクトルプロセッサのアレイといった、データ処理を実行するように構成されたDPEのアレイを含み得る。
【0042】
図6Cは、ある例に係るプログラマブルIC1のSOC実装を示すブロック図である。本例では、プログラマブルIC1は、処理システム2およびプログラマブルロジック3を含む。処理システム2は、リアルタイム処理ユニット(RPU)4、アプリケーション処理ユニット(APU)5、グラフィックス処理ユニット(GPU)6、構成・セキュリティユニット(CSU)12およびプラットフォーム管理ユニット(PMU)122などのさまざまな処理ユニットを含む。また、処理システム2は、オンチップメモリ(OCM)14、トランシーバ7、周辺機器8、インターコネクト16、DMA回路9、メモリコントローラ10、周辺機器15および多重入出力(MIO)回路13などのさまざまなサポート回路を含む。処理ユニットおよびサポート回路は、インターコネクト16によって相互接続されている。また、PL3は、インターコネクト16に結合されている。トランシーバ7は、外部ピン24に結合されている。PL3は、外部ピン23に結合されている。メモリコントローラ10は、外部ピン22に結合されている。MIO13は、外部ピン20に結合されている。PS2は、一般に外部ピン21に結合されている。APU5は、CPU17、メモリ18およびサポート回路19を含み得る。
【0043】
図6Cの例では、プログラマブルIC1は、ハードウェアアクセラレータ122において用いることができ、上述したように機能し得る。アクセラレーション回路130は、PL3においてプログラムされ、上述したように機能し得る。他の例では、上述したハードウェア104の機能は、コンピューティングシステムのハードウェアを介してではなく、PS2を用いて実装可能である。このような場合、ソフトウェア106は、PS2上で実行され、上述したように機能する。
【0044】
PS2を参照すると、処理ユニットの各々は、1つ以上の中央処理装置(CPU)と、メモリ、割込みコントローラ、ダイレクトメモリアクセス(DMA)コントローラ、メモリ管理ユニット(MMU)および浮動小数点ユニット(FPU)などの関連回路とを含む。インターコネクト16は、処理ユニットを相互接続するとともに、PS2内の他のコンポーネントを処理ユニットに相互接続するように構成されたさまざまなスイッチ、バスおよび通信リンクなどを含む。
【0045】
OCM14は、1つまたは複数のRAMモジュールを含み、これらはPS2全体に分散可能である。たとえば、OCM14は、バッテリバックアップ式RAM(BBRAM)および密結合メモリ(TCM)などを含み得る。メモリコントローラ10は、外部DRAMにアクセスするためのDRAMインターフェイスを含み得る。周辺機器8,15は、PS2にインターフェイスを提供する1つ以上のコンポーネントを含み得る。たとえば、周辺機器15は、グラフィックス処理ユニット(GPU)、ディスプレイインターフェイス(たとえば、DisplayPort、高品位マルチメディアインターフェイス(HDMI(登録商標))ポート等)、ユニバーサルシリアルバス(USB)ポート、イーサネット(登録商標)ポート、ユニバーサル・アシンクロナス・トランシーバ(UART)ポート、シリアル周辺インターフェイス(SPIRIT)ポート、汎用IO(GPIO)ポート、SATA(serial advanced technology attachment)ポートおよびPCIeポートなどを含み得る。周辺機器15は、MIO13に結合可能である。周辺機器8は、トランシーバ7に結合可能である。トランシーバ7は、シリアライザ/デシリアライザ(SERDES)回路およびマルチギガビットトランシーバ(MGT)などを含み得る。
【0046】
図6Dは、PL3を含むプログラマブルIC1のフィールド・プログラマブル・ゲート・アレイ(FPGA)実装を示す図である。図6Dに示すPL3は、本明細書で説明するプログラマブルデバイスの任意の例で使用可能である。PL3は、トランシーバ37と、コンフィギュラブル論理ブロック(「CLB」)33と、ランダムアクセスメモリブロック(「BRAM」)34と、入出力ブロック(「IOB」)36と、構成・クロッキングロジック(「CONFIG/CLOCKS」)42と、デジタル信号処理ブロック(「DSP」)35と、専用入出力ブロック(「I/O」)41(たとえば、構成ポートおよびクロックポート)と、デジタルクロックマネージャ、アナログ-デジタルコンバータ、システムモニタリングロジックなどの他のプログラマブルロジック39とを含む。また、PL3は、PCIeインターフェイス40およびアナログ-デジタル・コンバータ(ADC)38などを含み得る。
【0047】
PLによっては、各プログラマブルタイルは、図6Dの上部に含まれる例によって示されるように、同じタイル内のプログラマブルロジック素子の入力および出力端子48への接続を有する少なくとも1つのプログラマブル相互接続素子(「INT」)43を含み得る。また、各プログラマブル相互接続要素43は、同じタイルまたは他のタイル(複数可)内の隣接するプログラマブル相互接続要素(複数可)の相互接続セグメント49への接続を含み得る。また、各プログラマブル相互接続要素43は、論理ブロック(図示せず)間の一般的なルーティングリソースの相互接続セグメント50への接続を含み得る。一般的なルーティングリソースは、相互接続セグメント(たとえば、相互接続セグメント50)のトラックと、相互接続セグメントを接続するためのスイッチブロック(図示せず)とを含む論理ブロック(図示せず)間のルーティングチャネルを含み得る。一般的なルーティングリソースの相互接続セグメント(たとえば、相互接続セグメント50)は、1つまたは複数の論理ブロックにまたがり得る。プログラマブル相互接続要素43は、一般的なルーティングリソースと共に、図示されたPLについてプログラマブル相互接続構造(「プログラマブルインターコネクト」)を実装する。
【0048】
ある実現例では、CLB33は、ユーザロジックを実現するようにプログラム可能なコンフィギュラブル論理素子(「CLE」)44に加えて、1つのプログラマブル相互接続素子(「INT」)43を含み得る。BRAM34は、1つ以上のプログラマブル相互接続要素に加えて、BRAM論理要素(「BRL」)45を含み得る。一般に、タイルに含まれる相互接続要素の数は、タイルの高さによって決まる。図示された例では、BRAMタイルは5つのCLBと同じ高さを有するが、他の数(たとえば、4つ)も使用することができる。DSPタイル35は、適切な数のプログラマブル相互接続要素に加えて、DSPロジック要素(「DSPL」)46を含み得る。IOB36は、たとえば、プログラマブル相互接続要素43の1つのインスタンスに加えて、入出力論理要素(「IOL」)47の2つのインスタンスを含み得る。当業者に明らかなように、たとえば入出力論理素子47に接続される実際のI/Oパッドは、典型的には、入出力論理素子47の領域に制限されない。
【0049】
図示された例では、ダイの中央付近の水平領域(図3Dに示す)が、構成、クロック、およびその他の制御ロジックに使用される。この水平領域またはカラムから延びる垂直カラム51は、クロックおよび構成信号をPLの幅にわたって分散させるために使用される。
【0050】
図6Dに示すアーキテクチャを利用するPLの中には、PLの大部分を構成する通常の柱状構造を崩すような追加ロジックブロックを含むものがある。追加ロジックブロックは、プログラマブルブロックおよび/または専用ロジックであり得る。
【0051】
なお、図6Dは、例示的なPLアーキテクチャのみを説明することを意図している。たとえば、行内の論理ブロックの数、行の相対幅、行の数および順序、行に含まれる論理ブロックのタイプ、論理ブロックの相対サイズおよび図6Dの上部に含まれる相互接続/論理実装は、例示に過ぎない。たとえば、実際のPLでは、ユーザーロジックの効率的な実装を容易にするために、CLBが現れる場所には通常1つ以上の隣接するCLBの行が含まれるが、隣接するCLB行の数は、PL全体のサイズによって変化する。
【0052】
プログラマブルデバイスブロックのニューラルネットワークをバックプロパゲーションを直接用いて学習する技術について説明した。上記の新しい技術は、LUTおよび他のプログラマブルデバイスのビルディングブロックの上に固定アーキテクチャを実施することが、プログラマブルデバイスでニューラルネットワークを実行するための最適化の障壁になると認識することを含む。これらの技術には、プログラマブルデバイスのプリミティブと、異なるモードの単一LUTおよびRAMを含む量子化ニューロンとの間のマッピングが含まれる。プログラマブルデバイスのプリミティブは、機械学習フレームワークに公開され、バックプロパゲーションで訓練可能である。複数レベルの2値ニューロンを積層し疎に接続して、間接的なファンインを増加させ、機械学習フレームワークでバックプロパゲーションおよびSTEで訓練し、LUTのネットワークにマッピングしてターゲットプログラマブルデバイスのプログラマブルファブリック上に配置することができる。
【0053】
上記は特定の例に関するが、それらの基本的な範囲から逸脱することがなければ、他の例およびさらに他の例が考案されてもよく、その範囲は、添付の請求の範囲によって決まる。
図1A
図1B
図2
図3
図4
図5
図6A
図6B
図6C
図6D