JP2020537784A - ニューラルネットワークアクセラレーションのための機械学習ランタイムライブラリ - Google Patents

ニューラルネットワークアクセラレーションのための機械学習ランタイムライブラリ Download PDF

Info

Publication number
JP2020537784A
JP2020537784A JP2020521369A JP2020521369A JP2020537784A JP 2020537784 A JP2020537784 A JP 2020537784A JP 2020521369 A JP2020521369 A JP 2020521369A JP 2020521369 A JP2020521369 A JP 2020521369A JP 2020537784 A JP2020537784 A JP 2020537784A
Authority
JP
Japan
Prior art keywords
neural network
processing
packet
memory
library
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2020521369A
Other languages
English (en)
Other versions
JP7382925B2 (ja
Inventor
アーロン ウン,
アーロン ウン,
インドリフ ゼイダ,
インドリフ ゼイダ,
エリオット ドゥレー,
エリオット ドゥレー,
ショウ テン,
ショウ テン,
ソナル サンタン,
ソナル サンタン,
ソレン ティー. スー,
ソレン ティー. スー,
アンシュ シラサオ,
アンシュ シラサオ,
エーサン ギャセミ,
エーサン ギャセミ,
ショーン セトル,
ショーン セトル,
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xilinx Inc
Original Assignee
Xilinx Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Xilinx Inc filed Critical Xilinx Inc
Publication of JP2020537784A publication Critical patent/JP2020537784A/ja
Application granted granted Critical
Publication of JP7382925B2 publication Critical patent/JP7382925B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/10Interfaces, programming languages or software development kits, e.g. for simulating neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/94Hardware or software architectures specially adapted for image or video understanding
    • G06V10/955Hardware or software architectures specially adapted for image or video understanding using specific electronic processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Biophysics (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Computing Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Neurology (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)

Abstract

本明細書の実施形態は、ライブラリ(130)を使用してニューラルネットワークアプリケーション(120)をニューラルネットワークアクセラレータ(165)とインターフェースするための技法について説明する。ニューラルネットワークアプリケーション(120)は、ホストコンピューティングシステム(105)上で実行し得るが、ニューラルネットワークアクセラレータ(165)は、超並列ハードウェアシステム、たとえば、FPGA(150)上で実行する。ライブラリ(130)は、ニューラルネットワークアプリケーション(120)から受信されたタスクをニューラルネットワークアクセラレータ(165)にサブミットするためにパイプライン(500)を動作させる。一実施形態では、パイプライン(500)は、各々異なるスレッドに対応する、前処理ステージ、FPGA実行ステージ、および後処理ステージ(135)を含む。ニューラルネットワークアプリケーション(120)からタスクを受信すると、ライブラリ(130)は、パイプライン中の異なるステージがタスクを実施するために必要とされる情報を含むパケット(410)を生成する。それらのステージが異なるスレッド(415)に対応するので、ライブラリ(130)は、複数のパケットを並列に処理することができ、これは、ハードウェアシステム上のニューラルネットワークアクセラレータ(165)の利用率を増加させることができる。【選択図】図3

Description

本開示の例は、一般に、ホストコンピューティングシステム上で実行するニューラルネットワークアプリケーションと、ニューラルネットワークアクセラレータとの間の通信に関する。
機械学習は、コンピューティングシステムが、明示的にプログラムされることなしに働くことを引き起こす科学である。古典的な機械学習は、K平均クラスタリング、線形およびロジスティック回帰、確率的勾配降下法、相関ルール学習などを含む、様々なクラスタリングおよび分類技法を含む。深層学習は、機械学習におけるより新しい最先端領域である。深層学習は、特徴抽出および変換のために非線形処理ユニットの複数の層を使用する機械学習アルゴリズムのクラスである。深層学習アルゴリズムは、教師なし(たとえば、パターン分析)であるか、または教師あり(たとえば、分類)であり得る。深層学習アルゴリズムは、(本明細書では「ニューラルネットワーク」と呼ばれる)人工ニューラルネットワーク(ANN)の層を使用して実装され得る。
概して、ニューラルネットワークは、グラフ中で結合されたノード(すなわち、「ニューロン」)の集合である。ニューラルネットワーク中のノードは、重み付けされた入力の和を算出し、その和に随意のバイアスを加算する。ノードの出力は、(「活性化関数」と呼ばれる)最終的な和の関数である。例示的な活性化関数は、シグモイド関数、双曲線正接(tanh)関数、正規化線形ユニット(ReLU)関数、および恒等関数を含む。ニューラルネットワークモデルは、しばしば、特定のトポロジーと、対応する重みおよびバイアスとを定義するノードの層に編成される。重みおよびバイアスは、ネットワークパラメータと呼ばれる。
概して、ニューラルネットワークは、入力層と出力層とを含み、入力層と出力層との間の1つまたは複数の隠れ層を随意に含むことができる。深層学習アプリケーションにおいて使用されるニューラルネットワークは、典型的に、多くの隠れ層を含み、それにより、深層ニューラルネットワーク(DNN)という用語が生じる。ニューラルネットワークの層は、密結合される(たとえば、層中の各ノードが前の層中のすべてのノードに全結合される)か、またはスパース結合され得る(たとえば、層中の各ノードが前の層中のノードの一部のみに結合される)。畳み込みニューラルネットワーク(CNN)は、畳み込み層と呼ばれる、1つまたは複数のスパース結合された層を含む、DNNのタイプである。CNNは、画像またはビデオデータを処理するのに好適である。DNNの他のタイプは、音声およびテキストデータを処理するのに好適であるリカレントニューラルネットワーク(RNN)を含む。
現代のフィールドプログラマブルゲートアレイ(FPGA)は、超並列ハードウェアシステムをもたらすために利用され得る、数百万個のルックアップテーブルと、数千個のデジタル信号処理(DSP)およびランダムアクセスメモリブロック(BRAM)とを与える。FPGA中のプログラマブル論理は、並列ハードウェアシステムを使用して(概して、アクセラレーション回路と呼ばれる)ニューラルネットワークアクセラレータを実行することができる1つまたは複数のカーネルを形成することができる。
FPGAの利用率(utilization)を増加させることは、ニューラルネットワークアプリケーションの性能を改善することができる。したがって、FPGAがニューラルネットワークアプリケーションによって与えられるタスクを実行するのに忙しい時間の量が多いほど、ニューラルネットワークは、速く処理し、結果を与えることができる。しかしながら、ニューラルネットワーク設計者は、FPGA上でニューラルネットワークアクセラレータを十分に利用するために必要とされる、必要とされる技能および専門知識を有しないことがある。
ニューラルネットワークをスケジュールするための技法が説明される。一例は、ニューラルネットワークアクセラレータにサブミットされるタスクをパイプライン化するための方法である。本方法は、ニューラルネットワークアプリケーションから、ニューラルネットワークアクセラレータによって処理されるべき第1のタスクを受信することと、パイプライン中の複数のステージによって使用される情報を含んでいるパケットを生成することと、複数のステージにおいてパケットを処理することであって、複数のステージのうちの少なくとも1つが、ニューラルネットワークアクセラレータを実行するハードウェアシステムへの呼出しを実施し、パイプラインが、パケットを処理することと並列に、第2のタスクに対応する少なくとも1つの他のパケットを処理する、パケットを処理することとを含む。本方法は、パイプラインを使用してパケットを処理した結果をニューラルネットワークアプリケーションに返すことをも含む。
いくつかの実施形態では、複数のステージにおいてパケットを処理することは、前処理ステージ(pre−processing stage)においてパケットを処理することと、前処理ステージの後に行われる実行ステージ(execute stage)においてパケットを処理することであって、ハードウェアシステムへの呼出しが、実行ステージ中に行われ得る、実行ステージにおいてパケットを処理することと、実行ステージの後の後処理ステージ(post−processing stage)においてパケットを処理することとを含み得る。
いくつかの実施形態では、前処理ステージにおいてパケットを処理することは、第1のタスクに対応するデータを、ニューラルネットワークアプリケーションによって使用される第1のフォーマットから、ハードウェアシステムによって使用される第2のフォーマットに変換することを含み得る。後処理ステージにおいてパケットを処理することは、結果を第2のフォーマットから第1のフォーマットに変換することを含み得る。
いくつかの実施形態では、複数のステージの各々は、他のスレッドから独立してパケットを処理するそれぞれのスレッドを含み得る。
いくつかの実施形態では、本方法は、ニューラルネットワークアプリケーションのためのメモリの割り当てブロックを、ハードウェアシステム中のニューラルネットワークアクセラレータのためのメモリの割り当てブロックにマッピングするメモリマップを生成することと、メモリマップに基づいてニューラルネットワークアプリケーションから受信された第1のメモリアドレスを、ハードウェアシステム中のメモリブロックのための第2のメモリアドレスに変換することとをさらに含み得る。
いくつかの実施形態では、本方法は、ニューラルネットワークの複数の層を実施するために使用される重みを、行列フォーマットにおいてハードウェアシステムに転送することと、新しいタスクに対応する重みのサブセットを識別することと、パケットを処理するときに使用されるべきである重みのサブセットを示すオフセットをハードウェアシステムに送信することとをさらに含み得る。
いくつかの実施形態では、本方法は、ハードウェアシステム上のニューラルネットワークアクセラレータの実行に関するメトリックを取得することと、表示のためにメトリックの視覚表現を出力することと、ニューラルネットワークアクセラレータの利用率を増加させるように、パイプライン中の複数のステージを実行するハードウェアリソースを調整することとをさらに含み得る。
いくつかの実施形態では、パイプライン中の複数のステージはライブラリにおいて定義され得る。ライブラリは、異なるタイプのニューラルネットワークアプリケーションがタスクをニューラルネットワークアクセラレータにサブミットするためにパイプライン中の複数のステージを使用することを可能にするように構成されたアプリケーションプログラムインターフェース(API)を含み得る。
いくつかの実施形態では、本方法は、ニューラルネットワークアクセラレータに情報を与えるために使用されるパケット中の複数のフィールドをカスタマイズすることをさらに含み得る。カスタマイズされた複数のフィールドは、ニューラルネットワークアクセラレータのタイプによって変動し得、異なるタイプのニューラルネットワークアクセラレータは、異なるフィールドを使用し得る。
いくつかの実施形態では、本方法は、デバッグ機能がアクティブであるかどうかを決定すること、およびパケットをニューラルネットワークアクセラレータにサブミットすることと、パケットを、ニューラルネットワークアプリケーションを実行するホスト中の1つまたは複数のコンピュータプロセッサにサブミットすることとの間で切り替えることをさらに含み得る。
別の例は、1つまたは複数の処理デバイス上で実行されたとき、ニューラルネットワークアクセラレータにサブミットされるタスクをパイプライン化するための動作(operation)を実施する命令を記憶する非一時的コンピュータ可読記憶媒体である。動作は、ニューラルネットワークアプリケーションから、ニューラルネットワークアクセラレータによって処理されるべき第1のタスクを受信することと、パイプライン中の複数のステージによって使用される情報を含んでいるパケットを生成することと、複数のステージにおいてパケットを処理することであって、複数のステージのうちの少なくとも1つが、ニューラルネットワークアクセラレータを実行するハードウェアシステムへの呼出しを実施し、パイプラインが、パケットを処理することと並列に、第2のタスクに対応する少なくとも1つの他のパケットを処理する、パケットを処理することとを含む。動作は、パイプラインを使用してパケットを処理した結果をニューラルネットワークアプリケーションに返すことをも含む。
別の例は、プロセッサとメモリとを含むコンピューティングシステムである。メモリは、プロセッサによって実行されたとき、動作を実施するライブラリを含む。動作は、ニューラルネットワークアプリケーションから、ニューラルネットワークアクセラレータによって処理されるべき第1のタスクを受信することと、パイプライン中の複数のステージによって使用される情報を含んでいるパケットを生成することと、複数のステージにおいてパケットを処理することであって、複数のステージのうちの少なくとも1つが、ニューラルネットワークアクセラレータを実行するハードウェアシステムへの呼出しを実施し、パイプラインが、パケットを処理することと並列に、第2のタスクに対応する少なくとも1つの他のパケットを処理する、パケットを処理することとを含む。動作は、パイプラインを使用してパケットを処理した結果をニューラルネットワークアプリケーションに返すことをも含む。
いくつかの実施形態では、複数のステージにおいてパケットを処理することは、前処理ステージにおいてパケットを処理することと、前処理ステージの後に行われる実行ステージにおいてパケットを処理することであって、ハードウェアシステムへの呼出しが、実行ステージ中に行われ得る、実行ステージにおいてパケットを処理することと、実行ステージの後の後処理ステージにおいてパケットを処理することとを含み得る。
いくつかの実施形態では、前処理ステージにおいてパケットを処理することは、第1のタスクに対応するデータを、ニューラルネットワークアプリケーションによって使用される第1のフォーマットから、ハードウェアシステムによって使用される第2のフォーマットに変換することを含み得、後処理ステージにおいてパケットを処理することは、結果を第2のフォーマットから第1のフォーマットに変換することを含み得る。
いくつかの実施形態では、動作は、ニューラルネットワークアプリケーションのためのメモリの割り当てブロックを、ハードウェアシステム中のニューラルネットワークアクセラレータのためのメモリの割り当てブロックにマッピングするメモリマップを生成することと、メモリマップに基づいてニューラルネットワークアプリケーションから受信された第1のメモリアドレスを、ハードウェアシステム中のメモリブロックのための第2のメモリアドレスに変換することとをさらに含み得る。
いくつかの実施形態では、動作は、ニューラルネットワークの複数の層を実施するために使用される重みを、行列フォーマットにおいてハードウェアシステムに転送することと、新しいタスクに対応する重みのサブセットを識別することと、パケットを処理するときに使用されるべきである重みのサブセットを示すオフセットをハードウェアシステムに送信することとをさらに含み得る。
いくつかの実施形態では、動作は、ハードウェアシステム上のニューラルネットワークアクセラレータの実行に関するメトリックを取得することと、表示のためにメトリックの視覚表現を出力することと、ニューラルネットワークアクセラレータの利用率を増加させるように、パイプライン中の複数のステージを実行するハードウェアリソースを調整することとをさらに含み得る。
いくつかの実施形態では、パイプライン中の複数のステージはライブラリにおいて定義され得る。ライブラリは、異なるタイプのニューラルネットワークアプリケーションがタスクをニューラルネットワークアクセラレータにサブミットするためにパイプライン中の複数のステージを使用することを可能にするように構成されたAPIを含み得る。
いくつかの実施形態では、動作は、ニューラルネットワークアクセラレータに情報を与えるために使用されるパケット中の複数のフィールドをカスタマイズすることをさらに含み得る。カスタマイズされた複数のフィールドは、ニューラルネットワークアクセラレータのタイプによって変動し得、異なるタイプのニューラルネットワークアクセラレータは、異なるフィールドを使用し得る。
いくつかの実施形態では、コンピューティングシステムは、デバッグ機能がアクティブであると決定すること、およびパケットをニューラルネットワークアクセラレータにサブミットすることと、パケットを、実行のためのコンピューティングシステム中のプロセッサにサブミットすることとの間で切り替えることをさらに含み得る。
上記の具陳された特徴が詳細に理解され得るように、上記で手短に要約されたより詳細な説明は、添付の図面にその一部が示されている例示的な実装形態を参照することによってなされ得る。しかしながら、添付の図面は、典型的な例示的な実装形態を示すにすぎず、したがって、その範囲の限定と見なされるべきでないことに留意されたい。
一例による、多層ニューラルネットワークを示す図である。 一例による、ニューラルネットワークアクセラレータをニューラルネットワークアプリケーションとインターフェースするためのシステムの図である。 一例による、ニューラルネットワークアクセラレータとニューラルネットワークアプリケーションとの間の通信フローを示す図である。 一例による、ニューラルネットワークアクセラレータにおける実行のためにニューラルネットワークアプリケーションから受信されたタスクをパイプライン化するためのフローチャートである。 一例による、ニューラルネットワークアプリケーションによってサブミットされるタスクのためのパイプラインを示す図である。 一例による、ニューラルネットワークアプリケーションによってサブミットされるタスクのためのパイプラインの実行を調整するためのフローチャートである。 一例による、ニューラルネットワークアプリケーションによってサブミットされるタスクをパイプライン化することに対応するタイミングチャートである。 一例による、ニューラルネットワークを実装するためのシステムを示すブロック図である。 一例による、コンピューティングシステムを示すブロック図である。 一例による、アクセラレーション回路を示すブロック図である。 一例による、プログラマブル集積回路(IC)を示すブロック図である。 一例による、プログラマブルICのフィールドプログラマブルゲートアレイ(FPGA)実装形態を示す図である。
理解を容易にするために、可能な場合、図に共通である同じ要素を示すために同じ参照番号が使用されている。一例の要素が、他の例に有益に組み込まれ得ることが企図される。
図を参照しながら様々な特徴が以下で説明される。図は一定の縮尺で描かれることも描かれないこともあり、同様の構造または機能の要素が、図全体にわたって同様の参照番号によって表されることに留意されたい。図は、特徴の説明を容易にすることを意図されているにすぎないことに留意されたい。図は、本明細書の網羅的な説明として、または特許請求の範囲に対する限定として意図されていない。さらに、示されている例は、すべての態様または利点が示される必要があるとは限らない。特定の例に関して説明される一態様または利点は、必ずしもその例に限定されるとは限らず、そのように示されていない場合でも、またはそのように明示的に説明されていない場合でも、任意の他の例において実施され得る。
本明細書の実施形態は、ライブラリを使用してニューラルネットワークアプリケーションをニューラルネットワークアクセラレータとインターフェースするための技法について説明する。たとえば、ニューラルネットワークアプリケーションは、ホストコンピューティングシステム上で実行し得るが、ニューラルネットワークアクセラレータは、超並列ハードウェアシステム、たとえば、FPGA、グラフィックス処理ユニット(GPU)、または特殊設計された特定用途向け集積回路(ASIC)上で実行する。一実施形態では、(アクセラレータとニューラルネットワークアプリケーションとの間のインターフェースエンジンまたはアダプタと呼ばれることもある)ライブラリは、ニューラルネットワークアプリケーションから受信されたタスクをニューラルネットワークアクセラレータにサブミットするためにパイプラインを動作させるコードを含む。一実施形態では、パイプラインは、各々異なるスレッドに対応する、前処理ステージ、FPGA実行ステージ(execution stage)、および後処理ステージを含む。ニューラルネットワークアプリケーションからタスクを受信すると、ライブラリは、パイプライン中の異なるステージがタスクを実施するために必要とされる情報を含むパケットを生成する。それらのステージが異なるスレッドに対応するので、ライブラリは、複数のパケットを並列に処理することができる。すなわち、ライブラリは、第2のパケットが実行ステージにあり、第3のパケットが後処理ステージにある間、前処理ステージにおいて第1のパケットを処理することができる。そうすることは、超並列ハードウェアシステム上のニューラルネットワークアクセラレータの利用率を増加させ得る。すなわち、各処理サイクル中に、ライブラリは、実行ステージにおいて異なるパケット(またはタスク)をサブミットし、それにより、ニューラルネットワークアクセラレータが、新しいデータを待っている、またはすでに処理されたデータをライブラリが取り出すのを待っている、ダウンタイムを最小限に抑えることができる。
一実施形態では、ライブラリは、ニューラルネットワークアプリケーションに割り当てられたホストコンピューティングシステム中のメモリブロックと、ニューラルネットワークアクセラレータに割り当てられた超並列ハードウェアシステム中のメモリブロックとの間のメモリマップを維持する。ライブラリは、ホストコンピューティングシステム中のメモリブロックの変更を検出し、それらの変更を超並列ハードウェアシステム中のメモリブロックにおいて自動的にミラーリングすることができる。別の例では、ライブラリは、超並列ハードウェアシステム中のメモリブロックへの1つの書込みを実施し、次いで、2つのシステム間で転送されるデータの量を低減するためにメモリマップによるオフセットアドレスを使用することができる。
別の実施形態では、ライブラリは、ニューラルネットワークアクセラレータの利用率に関するメトリックを与える。これらのメトリックは、リアルタイムで(または遅延して)ニューラルネットワークのオペレータに視覚的に出力され得、次いで、オペレータは、パイプラインのための調整を識別することができる。たとえば、ニューラルネットワークアクセラレータが、次のパケットが前処理ステージから入手可能である前に実行ステージ中にパケットを処理することを終了することができる場合、オペレータは、パイプラインの全体的実行の速度を上げるために前処理ステージを実行するスレッドに追加のハードウェアリソース(たとえば、より多くの処理能力)を割り当てることができる。
図1は、一例による、多層ニューラルネットワーク100を示す。本明細書で使用されるニューラルネットワーク100は、機械学習において使用される計算モジュールであり、人工ニューロンと呼ばれる結合されたユニットの大きい集合に基づき、ニューロン間の結合は、変動する強度の活性化信号を搬送する。ニューラルネットワーク100は、明示的にプログラムされるのではなく、例からトレーニングされ得る。一実施形態では、ニューラルネットワーク100中のニューロンは、層、たとえば、層1、層2、層3などにおいて結合され、データが、第1の層、たとえば、層1から、最後の層、たとえば、層7に進む。7つの層が図1に示されているが、ニューラルネットワーク100は数百個または数千個の異なる層を含むことができる。
ニューラルネットワークは、コンピュータビジョン、特徴検出、音声認識など、任意の数のタスクを実施することができる。図1では、ニューラルネットワーク100は、デジタル画像中の物体を分類する、顔認識を実施する、テキストを識別するなど、デジタル画像中の特徴を検出する。そうするために、画像データ105が、ニューラルネットワーク中の第1の層に供給され、第1の層は、画像データ105に対して、対応する関数、この例では、10×10畳み込みを実施する。次いで、その関数の結果は、次の層、たとえば、層2に受け渡され、層2は、処理された画像データを次のレベルに受け渡す前に層2の関数を実施し、以下同様である。層によって処理された後に、データは画像分類器102において受信され、画像分類器102は、画像データ中の特徴を検出することができる。
層は、層1が層2の前に実施され、層2が層3の前に実施され、以下同様であるように、連続した順序で定義される。したがって、下位層と(1つまたは複数の)上位層との間にデータ依存性が存在する。層2は層1からデータを受信するのを待つが、一実施形態では、ニューラルネットワーク100は、各層がコンカレントに動作することができるように並列化され得る。すなわち、各クロックサイクル中に、層は、新しいデータを受信し、処理されたデータを出力することができる。たとえば、各クロックサイクル中に、新しい画像データ105が層1に与えられ得る。簡単のために、各クロックサイクル中に、新しい画像が層1に与えられ、各層が、前のクロックサイクル中で受信された画像データのために、処理されたデータを出力することができると仮定する。並列化されたパイプラインを形成するように層がハードウェアで実装された場合、7つのクロックサイクルの後に、層の各々は(7つの異なる画像上であろうとも)画像データを処理するためにコンカレントに動作する。したがって、並列パイプラインを形成するように層をハードウェアで実装することは、層を一度に1つ動作させることと比較して、ニューラルネットワークのスループットを非常に増加させることができる。超並列ハードウェアシステム中の層をスケジュールすることのタイミング利益は、ニューラルネットワーク100中の層の数が増加するにつれてさらに改善する。
図2は、一例による、ニューラルネットワークアクセラレータ165をニューラルネットワークアプリケーション120とインターフェースするためのシステム200である。システム200は、ホスト105(たとえば、ホストコンピューティングシステム)とFPGA150とを含む。FPGAが詳細に示されているが、本明細書の実施形態は、ライブラリ130を使用して、任意のタイプのハードウェアシステム、たとえば、GPUまたはASIC上にホストされたニューラルネットワークアクセラレータ165(たとえば、アクセラレーション回路またはカーネルアクセラレータ回路)を、ニューラルネットワークアプリケーション120とインターフェースするために使用され得る。
ホスト105はプロセッサ110とメモリ115とを含む。プロセッサ110は、任意の数の処理コアを各々含むことができる任意の数の処理要素を表す。メモリ115は、揮発性メモリ要素、不揮発性メモリ要素、およびそれらの組合せを含むことができる。その上、メモリ115は、異なる媒体(たとえば、ネットワークストレージまたは外部ハードドライブ)にわたって分散され得る。
メモリ115は、一実施形態では、プロセッサ110によって実行されるソフトウェアアプリケーションであるニューラルネットワークアプリケーション120を含むが、他の例では、ニューラルネットワークアプリケーション120はハードウェア要素を含むことができる。ニューラルネットワークアプリケーション120は、異なる関数、たとえば、畳み込み、最大プーリング、im2col、行列乗算などを実施する任意の数の層を有することができるニューラルネットワーク、たとえば、図1に示されているニューラルネットワーク100を確立する。示されていないが、ニューラルネットワークアプリケーション120は、メモリ115に記憶されたまたは外部ソースからのデータ(たとえば、画像またはオーディオデータ)を処理するためにニューラルネットワークを使用することができる。たとえば、ホスト105は、ユーザが画像をサブミットすることを可能にするウェブポータルに通信可能に連結され得、その画像は、次いで、ニューラルネットワークアプリケーション120によって処理される。
以下の実施形態では、ニューラルネットワークアプリケーション120は、FPGA150上のニューラルネットワークアクセラレータ165に通信可能に連結され、これにより、ニューラルネットワークの性能を改善し、たとえば、プロセッサ110のみに依拠するのではなく、ニューラルネットワークが複数の層をより速く実行することを可能にし得る。しかしながら、ニューラルネットワークアプリケーション120は、ニューラルネットワークアクセラレータ165とは異なるフォーマットを使用してデータを処理し得る。さらに、ホスト105のメモリとFPGA150のメモリとは、異なる非コヒーレントメモリであり得る。
ライブラリ130は、ニューラルネットワークアプリケーション120をニューラルネットワークアクセラレータ165に通信可能に連結するための方法および動作を与える。ライブラリは、ニューラルネットワークアプリケーション120のためのメモリの割り当てブロック125を、FPGA150中のニューラルネットワークアクセラレータ165のためのメモリの割り当てブロック175にマッピングする、メモリマップ140(たとえば、データ構造またはデータベース)を含む。一実施形態では、ホスト105は、処理されるべき異なる画像を記憶するニューラルネットワークアプリケーション120のために、メモリの大半(すなわち、割り当てブロック125)を割り当て得る。たとえば、異なる画像を処理するとき、ニューラルネットワークアプリケーション120は、特定の画像が記憶された割り当てブロック125中へのオフセットをライブラリ130に送信し得る。メモリマップ140を使用して、ライブラリは、FPGA150中の対応する割り当てられた1つまたは複数のブロック175を識別することができる。一実施形態では、ライブラリ130は、同じ画像またはオーディオファイルに対応するデータが、ホスト105中のメモリ115とFPGA150中のメモリ170との間で正しく相関され得るように、ホスト105およびFPGA150がブロック125およびブロック175を割り当て後に、メモリマップ140を生成する。
さらに、ライブラリ130は、ニューラルネットワークアクセラレータ165によって完了されるべき、ニューラルネットワークアプリケーション120によってサブミットされるタスクを処理するパイプライン化ステージ(pipelined stage)135を含む。すなわち、ニューラルネットワークアプリケーション120からタスクを受信し、タスクをニューラルネットワークアクセラレータ165にサブミットし、結果を待つ代わりに、ライブラリ130は、異なるステージにおいて複数のタスクを並列に処理するためにパイプラインステージ(pipeline stage)135を使用する。一実施形態では、新しいタスクを受信すると、ライブラリ130は、タスクを完了するために使用されるデータを含むパケットを生成する。一実施形態では、パケットは、各パケットが、パイプラインにおいて他のパケットへのデータ依存性を有することなしに、ステージ135において個々に処理され得るように独立型である。ライブラリ130が、3つのステージ135(たとえば、前処理ステージ、FPGA実行ステージ、および後処理ステージ)をもつパイプラインを形成する場合、ライブラリ130は、3つのステージを使用して(アプリケーション120によってサブミットされる異なるタスクに各々対応することができる)3つのパケットを並列に処理することができる。そうすることは、ニューラルネットワークアクセラレータの利用率とニューラルネットワークの全体的ランタイムとを増加させることができる。
一実施形態では、ライブラリ130は、ニューラルネットワークオペレータがFPGA150中のニューラルネットワークアクセラレータ165をどのように構成すべきか、またはどのように効率的に実行すべきかを知る必要なしに、そのオペレータがニューラルネットワークアクセラレータ165を使用することを可能にする。すなわち、オペレータは、典型的にFPGA150中のプログラマブル論理155を構成するために使用されるレジスタ転送論理(RTL)を理解する必要がない。代わりに、ライブラリ130は、パイプラインステージ135とメモリマップ140とを使用して、ニューラルネットワークアプリケーション120とニューラルネットワークアクセラレータ165との間の通信を抽象化する。その上、ライブラリ130は、ニューラルネットワークアクセラレータ165と通信するために異なるタイプのニューラルネットワーク(およびニューラルネットワークアプリケーション)とともに使用され得る一般的なアプリケーションプログラムインターフェース(API)を与えることができる。
メモリ115は、ホスト105とFPGA150との間の通信を可能にするFPGAドライバ145をも含む。一実施形態では、FPGAドライバ145は、ライブラリ130とライブラリ130の対応する関数とオペレータとが、FPGA150と通信することを可能にする。その上、FPGAドライバ145は、プログラマブル論理155およびメモリ170の利用率など、FPGA150中のハードウェアに関するメトリックを受信する(または要求する)ことができる。一実施形態では、ライブラリ130は、これらのメトリックを使用してニューラルネットワークアクセラレータ165の利用率の視覚表現を出力することができ、これは、スループットを増加させるようにパイプライン化ステージ135を調整するときにオペレータを助けることができる。
FPGA150は、プログラマブル論理155とメモリ170とを含む。プログラマブル論理155は、プログラマブル論理ブロックのアレイと、論理ブロックが通信可能に連結されることを可能にする再構成可能な相互接続の階層とを含むことができる。図2では、プログラマブル論理155は、1つまたは複数のニューラルネットワークアクセラレータ165を各々実行することができる1つまたは複数のカーネル160を形成する。一例では、ニューラルネットワークアクセラレータ165は、ニューラルネットワークのための畳み込みを実施するときに有用であるDSPブロックを含む。別の実施形態では、アクセラレータ165は、畳み込みを実施するために行列乗算が使用され得るように、受信された画像データを(im2colと呼ばれる)2D行列に変換する。しかしながら、ニューラルネットワークアプリケーション120は、画像がスケーリングされるときに特徴が失われないように画像中の特徴を増幅する最大プーリング、活性化関数またはランプ関数である正規化線形ユニット(ReLU)など、他のタイプのニューラルネットワーク関数をニューラルネットワークアクセラレータ165にオフロードすることができる。
メモリ170は、DDR ramなど、揮発性および不揮発性メモリ要素を含むことができる。ニューラルネットワークアプリケーション120間の通信を確立すると、FPGA150は、割り当てブロック175をニューラルネットワークアクセラレータ165に割り当てる。しかしながら、FPGA150中のメモリ170がホスト105中のメモリ115と共有されないことがあるので、割り当てブロック175についてのアドレスは、ホスト105中の割り当てブロック125のアドレスと対応しない。その上、割り当てブロック125および175は、メモリ中の隣接ブロックでないことがあるか、または異なる時間に割り当てられ得る。上述のように、ライブラリ130は、割り当てブロック125および175中の個々のブロックを互いにマッピングすることができるメモリマップ140を含む。したがって、ライブラリ130は、割り当てブロック125中のアドレスAに位置する画像のためのタスクを受信すると、ライブラリ130は、そのタスクを実施するために、そのアドレスを、割り当てブロック175中のアドレスBに変換することができる。同様に、割り当てブロック175から結果を読み取ると、ライブラリ130は、結果を、割り当てブロック125に記憶するために、そのアドレスを対応する宛先アドレスにマッピングすることができる。
図3は、一例による、ニューラルネットワークアプリケーション120とニューラルネットワークアクセラレータ165との間の通信フロー300を示す。示されているように、ライブラリ130およびFPGAドライバ145は、通信フロー300においてニューラルネットワークアプリケーション120とニューラルネットワークアクセラレータ165との間にある。したがって、ニューラルネットワークアプリケーション120はタスクをライブラリ130にサブミットし、ライブラリ130は、読取り/書込みコマンドを生成し、ニューラルネットワークアクセラレータ165にデータを送信するためにFPGAドライバ145を使用する。
ニューラルネットワークアクセラレータ165は、ニューラルネットワークアプリケーション120によって割り当てられるタスクを完了するために、im2col205、行列乗算210、ReLU215、および最大プーリング220など、様々な動作を実施することができる。一実施形態では、ニューラルネットワークアプリケーション120は、ニューラルネットワークの単一の層を実施する、たとえば、10×10畳み込みを実施する、または最大プーリングを実施するために、ニューラルネットワークアクセラレータ165のためのタスクをサブミットする。ネットワークアクセラレータ165はまた、畳み込みなどの動作を、別個のim2col/行列乗算ステップを通ることなしに、直接実施することができる。別の実施形態では、ニューラルネットワークアプリケーション120は、画像ごとにタスクをサブミットすることができ、その場合、ライブラリ130およびFPGAドライバ145は、ニューラルネットワークアクセラレータ165に、ニューラルネットワーク中の層のうちの選択された層ではなく、画像を処理するためにニューラルネットワーク中のすべての層を実施するように命令する。
ニューラルネットワークアクセラレータ165は、im2col205、行列乗算(MM)210、ReLU215、最大プーリング220など、1つまたは複数の関数を実施するための論理(たとえば、FPGA上に実装された場合、プログラマブル論理)を含む。一実施形態では、これらの関数は、ニューラルネットワークアクセラレータ165を形成する論理ブロックが並列に実行することができるようにパイプライン化され得る。すなわち、ニューラルネットワークアクセラレータ165におけるハードウェア論理は、ライブラリ130によって与えられる関数とともに並列化され得る。
逆方向に進んで、タスクを処理した後に、ニューラルネットワークアクセラレータ165は、処理されたデータをFPGAドライバ145に転送し、FPGAドライバ145は、データをライブラリ130にフォワーディングする。1つまたは複数のパイプライン化ステージを使用して、ライブラリ130は結果を処理し、ニューラルネットワークアプリケーション120に結果を送信する。一実施形態では、ライブラリ130は、データをニューラルネットワークアプリケーション120からアクセラレータ165に送信するときの、ならびに結果をアクセラレータ165からアプリケーション120に送信するときの、フォーマットを変更する。ライブラリ130は、複数のタスクを同時に処理するためにパイプラインステージを使用し得る。
図4は、一例による、ニューラルネットワークアクセラレータにおける実行のためにニューラルネットワークアプリケーションから受信されたタスクをパイプライン化するための方法400のフローチャートである。ブロック405において、ライブラリは、ニューラルネットワークアプリケーションから新しいタスクを受信する。一実施形態では、タスクは、ニューラルネットワークアプリケーションがニューラルネットワークアクセラレータに処理して欲しいデータを記憶する、ホストメモリ中のメモリアドレスを含む。そのメモリアドレスは、ニューラルネットワークアプリケーションに割り当てられたメモリのブロックについての開始メモリアドレスに対するオフセットであり得る。たとえば、ホストはメモリの大きいブロックをニューラルネットワークアプリケーションに割り当て、次いで、メモリオフセットを使用してメモリ内のサブブロックを参照し得る。
一実施形態では、ライブラリ中のメモリマップは、ホスト中の割り当てられたメモリのサブブロックを、ニューラルネットワークアクセラレータを実行するFPGA中のメモリの対応するブロックにマッピングするポインタを記憶する。たとえば、ニューラルネットワークアプリケーションは、サブブロックのうちの1つに記憶された特定の画像を参照し得る。メモリマップを使用して、ライブラリは、FPGA中の対応するアドレスブロックを識別することができる。したがって、メモリマップは、ニューラルネットワークアプリケーションに割り当てられたホスト中のメモリを、ニューラルネットワークアクセラレーションに割り当てられたFPGA中のメモリに同期させることができる。一実施形態では、ライブラリは、ニューラルネットワークアプリケーションに割り当てられたメモリ中で行われた変更を、ニューラルネットワークアクセラレータに割り当てられたメモリにミラーリングすることができる。しかしながら、ライブラリは、メモリの変更が他のプラットフォームにいつ伝搬されるか、および伝搬されるかどうかを選定することができる。DDRメモリ転送は費用がかかるので、ライブラリはホストへのDDR転送を最小限に抑え、できる限りデータをFPGA上に保ち得る。たとえば、ニューラルネットワークアクセラレータがFPGAに対して4つの畳み込みを連続的に実行する(たとえば、conv1−>conv2−>conv3−>conv4)場合、ライブラリは、ホスト中のメモリに、畳み込み動作のすべての入力/出力を自動的に同期させるとは限らず、代わりに、畳み込み動作の最初および最後のみを同期させ得る。すなわち、ホスト中のメモリ中で行われる変更は、FPGA中の対応するメモリに自動的に伝搬され、その逆も同様である。一実施形態では、ライブラリは、メモリがホストおよびFPGA中で割り当てられるとき、メモリをマッピングするために使用されるメモリマップおよびポインタをポピュレートすることができる。
その上、ライブラリは、ホストとFPGAとの間でデータを転送するのにかなりの量の時間を費やすことがある。ニューラルネットワークは、ネットワーク中のニューロン間の結合の大きさを特徴づけるために重みを使用する。ニューラルネットワークの各層について使用される重みは、異なり得る。したがって、ニューラルネットワークアクセラレータにタスクを転送するとき、ニューラルネットワークアプリケーションは、1つまたは複数の層についての重みをも送信し得る。ニューラルネットワークアクセラレータは、複数回(たとえば、新しい画像が受信されるたびに)ニューラルネットワークを実行し得、これは、1つまたは複数の層が実行されるたびに、ライブラリがFPGAに重みを送信することを意味し得る。代わりに、一実施形態では、ライブラリは、1回の転送において、ニューラルネットワークアクセラレータによって実施される層についての重みを送る。一実施形態では、ライブラリは、大きい行列においてFPGAに重みを送る。ライブラリが、異なる重みをもつ異なる層を必要とする新しいタスクを受信すると、重みを転送する代わりに、ライブラリは、タスクを実施するために重みのどのサブセットが使用されるべきかを識別する、行列中へのオフセットを送信することができる。このようにして、ライブラリは、1回の転送において重みを送信し、次いで、特定のタスクについての行列中の関連する重みを識別するためにオフセットメモリアドレスを使用することができる。
一実施形態では、ライブラリは、どんなデータがFPGAに転送されたかを識別するために、メモリマップにおいてフラグを使用する。たとえば、FPGAに重みを転送した後に、ライブラリは、重みを記憶する、ホスト中のメモリアドレスにフラグを付けることができる。したがって、ニューラルネットワークアプリケーションが、フラグを付けられたメモリアドレスをライブラリに送るときはいつでも、ライブラリは、そのメモリアドレスにおいて記憶されたデータが前にFPGAに送られていたと決定することができる。データを再送する代わりに、ライブラリは、FPGA中の、データが記憶された対応するアドレスのみを送ることができる。重みに加えて、ライブラリは、FPGAに前に転送された画像データまたはオーディオデータを示すためにフラグを使用し得る。
一実施形態では、メモリが割り当てられたとき、ライブラリは、新しいメモリブロックを使用済みセットに保存し、メモリを解放するように命令されたとき、ライブラリは、ブロックを使用済みセットから未使用セットに移動する。可能なときはいつでも、ライブラリは、異なるメモリを割り当てる前に未使用メモリブロックを再使用することを試みる。言い換えれば、メモリを割り当てるための要求を受信すると、ライブラリは、最初に、メモリを未使用セットから割り当てることを試み、なぜなら、これが、整合メモリブロックからのメモリ断片化の発生を低減することができるからである。その上、そうすることは、各順方向伝搬において割り当てられたメモリのサイズおよびパターンが同等であり得る深層ニューラルネットワークの性質を利用する。
ブロック410において、ライブラリは、タスクを実施するためにパイプライン化ステージによって使用される情報を含んでいる第1のデータパケットを生成する。一実施形態では、データパケットは、パイプライン化ステージの各々がそれらのジョブを実施するために必要とされるすべての情報を含んでいる。たとえば、各ステージは、パケットを処理するとき、パケット中の1つまたは複数の異なるフィールドを使用し得る。したがって、あるステージは、パケット中で、第2のフィールドではなく第1のフィールドを使用し得るが、別のステージは、第1のフィールドではなく第2のフィールドを使用する。ライブラリがパケット中でポピュレートすることができるフィールドの非限定的な例は、行列次元、重みへのメモリオフセット、処理されるべきデータのメモリアドレス、結果が記憶されるべきであるメモリアドレス、ホストメモリへのメモリオフセットなどを含む。一実施形態では、ライブラリは、異なるニューラルネットワークアクセラレータ(たとえば、異なるカーネル)のためにフィールドをカスタマイズすることができる。すなわち、異なるタイプのアクセラレータまたは異なるカーネルは、異なるフィールドを使用し得る。
ブロック415において、ライブラリは、パイプライン中の各ステージに対応するスレッドを使用して第1のデータパケットを処理する。一実施形態では、各スレッド(すなわち、各ステージ)は、他のスレッドが他のパケットを処理するのと同時に、パケットを処理することができる。このようにして、パイプラインは、異なるタスクに対応する異なるパケットを並列に処理することができる。その上、1つのストリームからのパケットは、他のストリームからのパケットと並列に処理され得る。たとえば、ニューラルネットワークアプリケーションは、ウェブポータルからの画像の第1のストリームと、ローカルメモリ中に保存された画像の第2のストリームとを受信し得る。ライブラリは、パイプライン化ステージによって並列に処理され得る2つのストリーム中の画像からの独立したパケットを生成することができる。すなわち、パケットが独立型であるかまたは互いから独立しているので、パイプラインは、異なるソースからのパケットを並列に処理することができる。
図5は、一例による、ニューラルネットワークアプリケーションによってサブミットされるタスクのためのパイプライン500を示す。パイプライン500は、3つのステージ、すなわち、前処理ステージ、FPGA実行ステージ、および後処理ステージを含む。各パケットは各ステージを通過するが、他の実施形態では、いくつかのパケットはステージのうちの1つまたは複数をスキップし得る。たとえば、1つのパケット中のデータは、ライブラリが前処理ステージと後処理ステージとを実施する必要がないようにフォーマットされ得る。
図5では、4つのパケットが、時間期間A〜F中にパイプライン500によって処理される。時間期間A中に、パケットAが、前処理ステージに対応するスレッドによって処理される。時間期間B中に、(パケットAを処理し終わった)前処理ステージはパケットBを処理するが、FPGA実行ステージはパケットAを処理する。時間期間C中に、前処理ステージは、FPGA実行ステージがパケットBを処理すること、および後処理ステージがパケットCを処理することと並列にパケットCを処理する。新しいタスクがニューラルネットワークアプリケーションから受信される限り、パイプライン500は、各時間期間中に3つのパケットを並列に処理することができる。
一実施形態では、時間期間の持続時間は、最も長く実行ステージに従って設定される。言い方を変えれば、ライブラリは、パケットをパイプライン中の次のステージに受け渡すことと、後続の時間期間を開始することとを行う前に、時間期間中のすべてのステージが完了するまで待つ。たとえば、前処理ステージが、完了するのに最も長くかかる場合、ライブラリは、次の時間期間に移動する前にこのステージが完了するまで待ち、これは、FPGA実行ステージおよび後処理ステージがすでに完了しており、アイドルであることを意味する。一実施形態では、ステージの持続時間は変動し得、それにより、時間期間の持続時間を変動させることができる。すなわち、時間期間C中に、FPGA実行ステージが、実行するのに最も長くかかることがあるが、時間期間D中に、後処理ステージが、実行するのに最も長くかかる。
一実施形態では、ライブラリは、ステージ間のパケットのフローを制御するために、および新しい時間期間が開始するときにロッキング関数を使用する。たとえば、前処理スレッドがパケットを処理し終わったとき、そのスレッドは、FPGA実行するスレッド(execute thread)のための入力キューをロックすることができる。ロックされている間、そのスレッドは、パケットを処理したことからの結果を、前処理スレッドの出力バッファからFPGA実行ステージの入力キューに移動し、そのキューをアンロックし、FPGA実行ステージのスレッドに、次のパケットが処理される準備ができていることをシグナリングすることができる。ステージをロックすることは、ステージ間でパケットをハンドオフするときに、データが破損することがあるという可能性を緩和する。
一実施形態では、前処理ステージは、ニューラルネットワークアプリケーションから受信されたデータを、ニューラルネットワークアクセラレータを実行するハードウェアによって処理され得るフォーマットに変更する。一例では、ニューラルネットワークアプリケーションは、浮動小数点フォーマット(たとえば、32ビット浮動小数点)においてデータを処理し得るが、FPGA中のハードウェア論理は、固定小数点値(たとえば、16ビットまたは8ビット固定小数点)に関して動作する。前処理ステージは、浮動小数点値を、ニューラルネットワークアクセラレータによって処理され得る固定小数点値に変換する。
その上、前処理ステージは、ニューラルネットワークアプリケーションから受信されたデータを、行列フォーマット(たとえば、データの32×64ブロック)に変換することができる。データの行列は、FPGA実行ステージ中にニューラルネットワークアクセラレータの動作を並列に実施するのを助け得る。前処理ステージが完了すると、パケット中のデータは、FPGA中のハードウェア論理によってより容易に処理され得るフォーマットで配置される。
FPGA実行ステージ中に、対応するスレッドは、パケット(またはパケット中のデータの一部分)をFPGAに送信する。たとえば、実行ステージのためのスレッドは、対応するデータおよび重みがメモリ中のどこに記憶されるかを示す、パケットのフィールド(たとえば、メモリアドレス)を送信し得る。一実施形態では、FPGA実行ステージのためのスレッドは、(メモリマップを使用して)FPGA中の適切なメモリへのパケットの一部分の書込みを実施し、ニューラルネットワークアクセラレータを実行するカーネルを監視し、FPGA中のメモリから、処理された結果を取り出すために読取りを実施する。一実施形態では、そのスレッドは、エンキューコマンドを使用して、データをFPGAに移動し、1つまたは複数のカーネルに実行するように命令し、そのカーネルに対応するバッファからの結果を読み取る。このようにして、(ホスト上で動作する)FPGA実行ステージのスレッドは、ニューラルネットワークアクセラレータを制御および監視するために、コマンドをFPGAに送信することができる。ニューラルネットワークアクセラレータが終了され、結果が取り出されると、FPGA実行ステージのスレッドは、更新されたパケットを後処理ステージに受け渡す。
一実施形態では、後処理ステージは、パケット中のデータを、FPGAによって使用されるデータフォーマットからニューラルネットワークアプリケーションによって使用されるデータフォーマットに変換する。たとえば、後処理ステージのスレッドは、前処理ステージに対する逆方向変換を実施する。たとえば、FPGAからの結果は、固定小数点値から浮動小数点値に変換され得る。その上、そのスレッドは、もはやデータを行列として記憶しないことがある。
後処理ステージを完了した後に、ライブラリは、関連するデータをホストメモリに記憶し、タスクが完了したことをニューラルネットワークアプリケーションに通知する。一実施形態では、ライブラリはパケットの一部分のみをメモリに保存する。たとえば、パケット中のフィールドは、パイプラインステージによってのみ使用され得、したがって、パケットがパイプライン500を横断したとき、廃棄される。
図5は、3つのステージを含むパイプライン500を示しているが、ライブラリは、任意の数のステージを含むパイプラインを確立することができる。たとえば、いくつかのニューラルネットワークアプリケーションの場合、ライブラリは、FPGA実行ステージおよび後処理ステージのみを使用し得る。他のアプリケーションの場合、ライブラリは、パケットが同じFPGA中の異なるニューラルネットワークアクセラレータ間で、または異なるFPGA中の異なるニューラルネットワークアクセラレータ間で受け渡される、4つ以上のステージをもつパイプラインを含み得る。
方法400に戻ると、ブロック420において、ライブラリは、第1のデータパケットを処理しながら、スレッドを使用して他のパケットを処理する。すなわち、図5に示されているパイプライン500は、複数のスレッドを並列に処理することができる。したがって、前処理ステージが第1のパケットを処理する間、FPGA実行ステージと後処理ステージとは、他のパケットを同時に処理する(ニューラルネットワークアプリケーションが複数のタスクをサブミットしたと仮定する)。その結果、パイプラインはダウンタイムを低減し、ニューラルネットワークアクセラレータを実行するカーネルの利用率を改善することができる。たとえば、ニューラルネットワークアクセラレータが現在のパケットを処理することを終了すると、前処理ステージによって処理されるパケットは、ニューラルネットワークアクセラレータが直ちにそのパケットを処理し始めることができるように、FPGAに転送され得る。
ブロック425において、ライブラリは、ニューラルネットワークアクセラレータを使用して第1のパケットを処理した結果をニューラルネットワークアプリケーションに返す。すなわち、第1のパケットがパイプライン(たとえば、前処理ステージ、FPGA実行ステージ、および後処理ステージ)を横断すると、ライブラリは、その結果を、ニューラルネットワークアプリケーションのための割り当てられたメモリに記憶し、アプリケーションに、タスクが完了したことを示すことができる。それらのステージがパイプライン化されるので、ライブラリは、複数のタスク(またはパケット)を並列に処理することができる。したがって、各時間期間の終わりに、ライブラリは、タスクを完了した結果をニューラルネットワークアプリケーションに転送し得る。それらのステージがパイプライン化されなかった場合、ライブラリは、ニューラルネットワークアプリケーションによってサブミットされる新しいタスクを開始する前にタスクが完了するのを待たなければならない。その場合、ニューラルネットワークアクセラレータは、ライブラリが前処理動作と後処理動作とを実施するとき、アイドルである。
図6は、一例による、ニューラルネットワークアプリケーションによってサブミットされるタスクのためのパイプラインの実行を調整するための方法600のフローチャートである。ブロック605において、ライブラリは、ニューラルネットワークアクセラレータの実行に関するメトリックを取得する。一実施形態では、ライブラリは、ライブラリがFPGA中のハードウェア要素を監視することを可能にするFPGAドライバと通信する。たとえば、ドライバは、ニューラルネットワークアクセラレータを実行するカーネルまたは計算ノードがいつ実行し始めるか、およびジョブが完了する前にどのくらい長くかかるかなど、メトリックをライブラリに報告し得る。その上、ドライバは、メモリへの読取りおよび書込み、ならびにそれらの読取りおよび書込みがどのくらい長くかかるか(これは、読取りまたは書込みを行われているデータの量に応じて変動することがある)に関して報告することができる。
一実施形態では、ライブラリは、このデータをドライバに要求することができる。代替的に、ドライバは、FGPAのためのハードウェアインターフェースを自動的に監視し、これらのメトリックをライブラリに報告し得る。
ブロック610において、ライブラリは、メトリックをリアルタイムグラフィックにおいて表示する。一実施形態では、ライブラリは、FPGA中のニューラルネットワークアクセラレータを実行する1つまたは複数のカーネルの利用率を示すチャートを出力する。チャートは、ニューラルネットワークのオペレータがカーネルの利用率を可視化し、ライブラリによって確立されるパイプラインを改善するためのやり方を識別することを可能にする。
図7は、一例による、ニューラルネットワークアプリケーションによってサブミットされるタスクをパイプライン化することに対応するタイミングチャート700である。チャート700は、カーネルAを使用してパケットを処理するための読取り705と、DDR書込み710と、DDR書込み715とを含み、カーネルBを使用してパケットを処理するための読取り720と、DDR書込み725と、DDR書込み730とを含む。この実施形態では、FPGAは、2つのニューラルネットワークアクセラレータを並列に実行することができる2つのカーネルを含む。言い換えれば、パイプラインのFPGA実行ステージ中に、ライブラリは、カーネルAおよびカーネルBによって並列に実施されるべきタスクをサブミットすることができる。
その上、この実施形態では、ライブラリは、タスクのバッチをカーネルにサブミットする。ここで、ライブラリは、8つのタスクまたはパケットをバッチとしてカーネルの各々にサブミットする。カーネルは8つのタスクを連続的に処理する。たとえば、DDR書込み710は、ライブラリが、N個のタスクのためのデータをカーネルAと、対応するニューラルネットワークアクセラレータとのために割り当てられたメモリ中に書き込むことを表すN個のドットを含み得る。同様に、DDR書込み725も、N個のタスクの異なるバッチがカーネルBのために割り当てられたメモリに書き込まれることを表す同じN個のドットを含む。DDR書込み715は、ライブラリによって生成されたパケットからの情報がFPGAに転送される時間を示す。
カーネルAについての円、およびカーネルBについてのXは、これらのカーネルがタスクをいつ処理し始めるかを示し、ラインは、これらのタスクにかかる時間の長さを示す。示されているように、カーネルは、ほとんど常にタスクを実行している。すなわち、カーネルは、高いレートの利用率を有する。これは、カーネルがタスクを終了するときと、新しいタスクを開始するときとの間に、あるとしても、ごくわずかな間隔(またはギャップ)があることによって視覚的に示される。
読取り705および720は、タスクを処理するカーネルからライブラリがいつ結果を取り出すかを示す。読取り705は、カーネルAによって与えられる結果を読み取ることを示すN個の正方形を含み、読取り720は、カーネルBによって与えられる結果を読み取ることを示すN個のプラス符号を含む。このようにして、チャート700は、カーネルAおよびBの利用率、ならびにメモリへの読取りおよび書込みを可視化し、これは、ニューラルネットワークのオペレータが、カーネル上で実行するニューラルネットワークアクセラレータの利用率または効率を決定するのを助けることができる。
一実施形態では、ライブラリは、チャート700をリアルタイムで更新する。すなわち、ライブラリは、カーネルが実行され、読取りおよび書込みが実施されるとき、(左から右に開始する)チャートを生成することができる。したがって、オペレータは、生成されるチャート700を見ることができる。一実施形態では、オペレータは、チャート上にズームインするか、または過去の結果を閲覧するためにチャートを時間的に戻すことができる。
タイミングチャートが示されているが、FPGA中のカーネルおよびDDRメモリのためのメトリックは他のやり方で表示され得る。タイミングチャートの代わりに、ライブラリは、アイドル時間と実行時間との比を示す利用率パーセンテージを出力することができる。別の例では、ライブラリは、カーネルの平均利用率を示す棒グラフを出力することができる。
方法600に戻ると、ブロック615において、ライブラリは、パイプラインステージの実行を変更するニューラルネットワークのオペレータから最適化パラメータを受信する。チャート700を閲覧するとき、オペレータは、前処理ステージが、典型的には、FPGA実行ステージおよび後処理ステージよりも実行するのに長くかかることを識別していることがある。その結果、カーネルは、新しいパケット(またはパケットのバッチ)が、処理のためにニューラルネットワークアクセラレータによってサブミットされ得るように、前処理ステージを待っている間アイドルであり得る。応答して、オペレータは、パイプラインステージのうちの1つまたは複数の実行時間を変更する最適化パラメータを与えることができる。この例では、最適化パラメータは、前処理ステージの持続時間を低減し得る。
一実施形態では、最適化パラメータは、パイプラインステージのスレッドを実行するために割り当てられたハードウェアリソースの量である。たとえば、前処理ステージが、パイプライン中の他のステージよりも実行するのに多くの時間を常に必要とする場合、オペレータは、前処理ステージを実行するためにホスト中の追加の処理コアを割り当てることができる。そうすることは、前処理ステージが、平均して、持続時間において他のステージにより近い持続時間を有するように、その持続時間を低減し得る。その結果、パイプラインの全体的実行時間は減少し得、FPGA中のカーネルの利用率が増加することができる。
別の例では、最適化パラメータは、パイプライン化ステージを実行するスレッドにより多くの仮想メモリを割り当てること、またはスレッドがより速いメモリ要素または通信バスを使用することを可能にすることを含み得る。たとえば、FPGA実行ステージの持続時間は、ライブラリおよびドライバが、より速いホストFPGA間通信方式(たとえば、PCIe)を使用することを可能にすることによって増加され得る。
ブロック620において、ライブラリは、受信された最適化パラメータに従ってニューラルネットワークアクセラレータの利用率を増加させるように、パイプラインのスレッドを実行するために使用されるハードウェアリソースを調整する。上述のように、ライブラリは、パイプライン化ステージのうちの1つのパイプライン化ステージのスレッドを実行するために割り当てられた処理コアの数を増加させるか、スレッドがより速いメモリ要素を使用することを可能にするか、またはホストとFPGAとの間のより速い通信経路を可能にし得る。
一実施形態では、ハードウェアリソースをより厳密に調整することは、パイプライン中のステージの持続時間を整合させる。言い換えれば、ライブラリは、ステージの持続時間がより等しくなるようにステージの持続時間を調整することができ、これは、FPGAがより効率的に利用されることを意味する。そうすることは、ステージのうちのいくつかのステージの持続時間を増加させ得る。たとえば、後処理ステージが、FPGA実行ステージよりも短い持続時間を有するが、前処理ステージは、FPGA実行ステージよりも長い持続時間を有する場合。オペレータは、後処理ステージを実行するために前に割り当てられた処理コアを前処理ステージに割り当て得る。その結果、後処理ステージの持続時間は増加し、前処理ステージの持続時間は減少する。しかし、これらの持続時間が、FPGA実行ステージの持続時間と同じである場合、パイプラインの全体的実行時間、およびニューラルネットワークアクセラレータを実行するカーネルの利用率は増加することができる。
一実施形態では、ライブラリは、タスクを、外部ニューラルネットワークアクセラレータにサブミットすること、またはホストにサブミットすることの間で切り替えるためのデバッグ関数を含む。たとえば、デバッグするとき、タスクをFPGAにサブミットする代わりに、ライブラリは、ホスト上のプロセッサを使用してタスクを実行することができる。これには、より多くの時間がかかり得るが、そうすることは、問題がニューラルネットワークの設計によって引き起こされるのかニューラルネットワークアクセラレータの設計によって引き起こされるのかを決定することができる。言い方を変えれば、タスクをホストにサブミットすることによって、オペレータは、FPGA上でタスクを実行することによってエラーが引き起こされるかどうかを決定することができる。このようにして、ホストプロセッサは、FGPA特徴をデバッグするためのベースラインとして働くことができる。一実施形態では、ライブラリは、同じタスクをFPGA上のニューラルネットワークアクセラレータとホスト上のプロセッサの両方にサブミットし、その結果を比較する。
図8は、一例による、ニューラルネットワークを実装するためのシステム800を示すブロック図である。システム800は、コンピュータシステム802と、1つまたは複数のコンピュータシステム808とを含む。コンピュータシステム802は、1つまたは複数の設計ツール804を与えるソフトウェアを実行するように構成された従来のコンピューティング構成要素を含む。各コンピュータシステム808は、(上記で説明された例のいずれかの場合のような)1つまたは複数のニューラルネットワーク810を実行する。(1つまたは複数の)ニューラルネットワーク810は、(上記で説明された例のいずれかの場合のような)アプリケーション812と、(上記で説明された例のいずれかの場合のような)アクセラレーションライブラリ814と、(上記で説明された例のいずれかの場合のような)1つまたは複数のハードウェアアクセラレータ816とを使用して実装される。
一例では、(1つまたは複数の)ハードウェアアクセラレータ816は、FPGAなどのプログラマブルICを含む。アクセラレーションライブラリ814は、(1つまたは複数の)ハードウェアアクセラレータ816とインターフェースするためのAPIを与える。アクセラレーションライブラリ814はまた、ニューラルネットワーク層および他のタイプのニューラルネットワーク構造のあらかじめ定義されたおよび最適化された実装形態を含む、ニューラルネットワーク関数を与えるライブラリを含むことができる。したがって、(1つまたは複数の)ニューラルネットワーク810は、(1つまたは複数の)ハードウェアアクセラレータ816において実装されるハードウェア部分、ならびにアクセラレーションライブラリ814において実装されるソフトウェア部分の両方を含むことができる。アプリケーション812は、(1つまたは複数の)ニューラルネットワーク810を実装するように(1つまたは複数の)ハードウェアアクセラレータ816をプログラムし、制御するためにアクセラレーションライブラリ814のAPIを起動する。
設計者は、(1つまたは複数の)ニューラルネットワーク810を定義するために、(1つまたは複数の)設計ツール804と対話する。(1つまたは複数の)設計ツール804は、(1つまたは複数の)ハードウェアアクセラレータ816をプログラムするためのファイル(たとえば、FPGAのための構成ビットストリーム)と、アクセラレーションライブラリ814を与えるファイルと、アプリケーション812を与えるファイルとを生成することができる。設計者は、レジスタ転送言語(RTL)を使用して、あるいは、C、C++、OpenCLなど、プログラミング言語、またはRTLと(1つまたは複数の)プログラマブル言語との組合せを使用して、(1つまたは複数の)ニューラルネットワーク810のハードウェア部分を定義することができる。ユーザは、C、C++、OpenCLなど、プログラミング言語を使用して、(1つまたは複数の)ニューラルネットワーク810のソフトウェア部分を定義することができる。(1つまたは複数の)設計ツール804は、(1つまたは複数の)ハードウェアアクセラレータ816をプログラムするためのファイルと、アクセラレーションライブラリ814のためのライブラリファイルとを生成するために、ソフトウェア定義されたニューラルネットワークをコンパイルする。設計者は、(1つまたは複数の)ニューラルネットワーク810のハードウェア部分およびソフトウェア部分を開発するのを支援するために、クラスライブラリ、テンプレートライブラリなどを与えるライブラリ106を活用することができる。
ユーザは、プログラミング言語(たとえば、C、C++、Pythonなど)を使用してアプリケーション812を定義することができる。ユーザは、Caffe、TensorFlow、MXNetなど、ニューラルネットワークフレームワークおよびライブラリを活用することができる。
図9は、一例による、コンピューティングシステム808を示すブロック図である。コンピューティングシステム808は、ハードウェア904と、ハードウェア904上で実行するソフトウェア906とを含む。ハードウェア904は、処理システム910と、システムメモリ916と、ストレージデバイス(「ストレージ918」)と、ハードウェアアクセラレータ816とを含む。ソフトウェア906は、オペレーティングシステム(OS)944と、アクセラレーションライブラリ814と、アプリケーション812とを含む。
処理システム910は、マイクロプロセッサ912と、サポート回路914と、周辺バス915とを含む。マイクロプロセッサ912は、x86ベースプロセッサ、ARM(登録商標)ベースプロセッサなど、任意のタイプの汎用中央処理ユニット(CPU)であり得る。マイクロプロセッサ912は、1つまたは複数のコアと、関連する回路要素(たとえば、キャッシュメモリ、メモリ管理ユニット(MMU)、割込みコントローラなど)とを含むことができる。マイクロプロセッサ912は、本明細書で説明される1つまたは複数の動作を実施するプログラムコードを実行するように構成され、それらのプログラムコードは、システムメモリ916および/またはストレージ918に記憶され得る。サポート回路914は、マイクロプロセッサ912と協働して、マイクロプロセッサ912、システムメモリ916、ストレージ918、ハードウェアアクセラレータ816、または任意の他の周辺デバイス間のデータフローを管理する、様々なデバイスを含む。たとえば、サポート回路914は、チップセット(たとえば、ノースブリッジ、サウスブリッジ、プラットフォームホストコントローラなど)、電圧調節器、ファームウェア(たとえば、BIOS)などを含むことができる。サポート回路914は、マイクロプロセッサ912と周辺バス915との間のデータフローを管理し、そこにハードウェアアクセラレータ816などの様々な周辺機器が接続される。いくつかの例では、マイクロプロセッサ912は、チップセット(たとえば、ノースブリッジ、サウスブリッジなど)の機能性の全部または実質的部分を吸収する、システムインパッケージ(SiP)、システムオンチップ(SoC)などであり得る。周辺バスは、周辺構成要素相互接続エクスプレス(PCIe)など、拡張バス規格を実装することができる。本例では、処理システム910は、ハードウェアアクセラレータ816とは別個に示されている。以下でさらに説明される他の例では、処理システム910とハードウェアアクセラレータ816とは、システムオンチップ(SoC)を使用して同じIC上に実装され得る。
システムメモリ916は、実行可能な命令およびデータなど、情報が記憶され、取り出されることを可能にするデバイスである。システムメモリ916は、たとえば、ダブルデータレート(DDR)ダイナミックRAM(DRAM)など、1つまたは複数のランダムアクセスメモリ(RAM)モジュールを含むことができる。ストレージデバイス918は、ローカルストレージデバイス(たとえば、1つまたは複数のハードディスク、フラッシュメモリモジュール、ソリッドステートディスク、および光ディスク)、および/またはコンピューティングシステム808が1つまたは複数のネットワークデータストレージシステムと通信することを可能にするストレージインターフェースを含む。ハードウェア904は、グラフィックスカード、ユニバーサルシリアルバス(USB)インターフェースなど、コンピューティングシステムの様々な他の従来のデバイスおよび周辺機器を含むことができる。
ハードウェアアクセラレータ816は、プログラマブルIC928と、不揮発性メモリ924と、RAM926とを含む。プログラマブルIC928は、FPGAなど、またはFPGAを有するSoCなどであり得る。NVM924は、フラッシュメモリなど、任意のタイプの不揮発性メモリを含むことができる。RAM926は、DDR DRAMなどを含むことができる。プログラマブルIC928は、NVM924およびRAM926に連結される。プログラマブルIC928は、処理システム910の周辺バス915にも連結される。
OS944は、Linux(登録商標)、Microsoft Windows(登録商標)、Mac OS(登録商標)など、当技術分野において知られている任意のコモディティオペレーティングシステムであり得る。アクセラレーションライブラリ814は、ハードウェアアクセラレータ816のコマンドおよび制御のためのAPIを与えるドライバおよびライブラリを含む。アプリケーション812は、(1つまたは複数の)ニューラルネットワークを実装するためにアクセラレーションライブラリ814のAPIを起動する、マイクロプロセッサ912上で実行するソフトウェアを含む。
動作中、プログラマブルIC928はアクセラレーション回路930で構成される。一例では、アクセラレーション回路930は、図2中のニューラルネットワークアクセラレータ165であるが、本明細書の実施形態は、そのようなものに限定されず、他のタイプのニューラルネットワークアクセラレータまたは他のタイプのハードウェアアクセラレータであり得る。アクセラレーション回路930は、概して、ベースプラットフォーム930Aとカーネル930Bとを含む。たとえば、アクセラレーション回路930は、静的領域934とプログラマブル領域936とを使用して実装され得る。静的領域934は、周辺バス915と、NVM924と、RAM926とにインターフェースを与えるためのサポート回路940を含む。プログラマブル領域936は、1つまたは複数のカーネル回路(「(1つまたは複数の)カーネル938」)を含むことができる。ベースプラットフォーム930Aは静的領域934を使用して実装され、カーネル930Bはプログラマブル領域936を使用して実装される。別の例では、ベースプラットフォーム930Aはまた、プログラマブル領域936の一部分を使用して実装され得る。したがって、いくつかの例では、プログラマブル領域936は、いくつかのインターフェース回路をも含む。いくつかの例では、アクセラレーション回路930は、それらの各々が個々に(1つまたは複数の)カーネル938で構成され得る、2つ以上のプログラマブル領域936を含むことができる。
静的領域934は、静的領域934の回路要素がプログラマブル領域936の再構成にわたって不変のままであるという点で「静的」である。一例では、サポート回路940は、PCIeエンドポイント回路、ダイレクトメモリアクセス(DMA)コントローラ、相互接続、メモリコントローラ、メモリインターフェース回路(たとえば、DDRインターフェース)、(部分再構成をサポートするための)デカップラ回路、フラッシュプログラマー、デバッグ回路などを含む。いくつかの例では、プログラマブル領域936は、サポート回路940のいずれをも含まない。他の例では、いくつかのサポート回路は、プログラマブル領域936において実装される。そのような場合、プログラマブル領域936は「拡張されたプログラマブル領域」と呼ばれることがある。いずれの場合も、一例では、PCIe回路およびDMA回路など、いくつかのサポート回路940は、常に、静的領域934中に存在する。
図10は、一例による、アクセラレーション回路930を示すブロック図である。アクセラレーション回路930は、サポート回路940とカーネル938とを含む。本例では、サポート回路940は、PCIeエンドポイント回路(「PCIeエンドポイント1002」)と、PCIe DMAコントローラ1004と、相互接続回路(「相互接続1006」)と、メモリコントローラ1010と、メモリインターフェース1012とを含む。サポート回路940は、明快のために省略される他の回路(たとえば、デカップラ回路、デバッグ回路など)を含むことができる。PCIeエンドポイント1002は、周辺バス915への物理インターフェースを与える。PCIe DMAコントローラ1004は、RAM926とカーネル938とへのDMA動作を容易にする。相互接続1006は、PCIe DMAコントローラ1004をメモリコントローラ1010とカーネル938とに連結する。メモリコントローラ1010はメモリインターフェース1012に連結される。メモリインターフェース1012はRAM926に連結される。
動作中、アクセラレーションライブラリ814は、PCIe DMAコントローラ1004を通してRAM926に直接アクセスすることができる。アクセラレーションライブラリ814はまた、PCIe DMAコントローラ1004を通してカーネル938にアクセスすることができる。カーネル938は、メモリコントローラ1010を通してRAM926にアクセスすることができる。データは、システムメモリ916とRAM926との間のDMA動作を使用して、ソフトウェア906とカーネル938との間で交換され得る。
本例では、カーネル938は、相互接続1006と通信するためにインターフェース1030、1031、および1032を使用する。特に、これらのインターフェースは、第1の読取りインターフェース1030と、第2の読取りインターフェース1031と、読取り/書込みインターフェース1032とを含み得る。たとえば、読取りインターフェース1030は、カーネル938を制御するための制御インターフェースとして使用され得る。読取りインターフェース1031は、メモリインターフェース1012のうちの第1のメモリインターフェースを通してRAM926から読み取るために使用され得る。読取り/書込みインターフェース1032は、メモリインターフェース1012のうちの第2のメモリインターフェースを通してRAM926からの読取りおよび書込みを行うために使用され得る。
カーネル938は、相互接続インターフェース1004と、制御論理1042と、処理回路1041とを含む。処理回路1041は、IM2COL回路(「IM2COL1044」)と、読取り制御回路(「読取り制御1046」)と、マルチプレクサ1056と、先入れ先出し回路(「FIFO1058」)と、算出アレイ1062と、スケーラ回路(「スケーラ1064」)と、最大プール回路(「最大プール1066」)と、マルチプレクサ1068と、FIFO1054と、書込み制御回路(「書込み制御1052」)と、キャッシュ1048と、読取り制御回路(「読取り制御1050」)と、FIFO1060とを含む。相互接続インターフェース1040は、インターフェース1030、1031、および1032と、制御論理1042と、処理回路1041とに連結される。相互接続インターフェース1040は、制御論理1042とインターフェース1030との間の通信、ならびに処理回路1041とインターフェース1031および1032との間の通信を容易にするための、スイッチ、クロック変換器などを含むことができる。
本例では、相互接続インターフェース1040は、IM2COL回路1044の入力と、読取り制御回路1046の入力と、キャッシュ1048の入力と、書込み制御回路1052の入力とに連結される。IM2COL回路1044の出力と、読取り制御回路1046の出力とが、マルチプレクサ1056の入力に連結される。マルチプレクサ1056の出力がFIFO1056の入力に連結される。FIFO1056の出力が算出アレイ1062の第1の入力に連結される。キャッシュ1048の出力が読取り制御回路1050の入力に連結される。読取り制御回路1050の出力がFIFO1060の入力に連結される。FIFO1060の出力が算出アレイ1062の第2の入力に連結される。算出アレイ1062の出力がスケーラ1064の入力に連結される。スケーラ1064の出力が、最大プール回路1066の入力とマルチプレクサ1068の入力とに連結される。最大プール回路1066の出力がマルチプレクサ1068の別の入力に連結される。マルチプレクサ1068の出力がFIFO1054の入力に連結される。FIFO1054の出力が書込み制御回路1052に連結される。
動作中、算出アレイ1062は、ニューラルネットワークを実装するための行列乗算動作を実施する。算出アレイ1062の入力は、FIFO1058から入力活性化行列を受信し、FIFO1060から重み行列を受信する。入力活性化行列は、読取り制御回路1046を使用してRAM926から直接読み取られ得る。代替的に、入力活性化はRAM926から読み取られ、算出アレイ1062への入力のためにIM2COL回路1044によって処理され得る。IM2COL回路1044の実施形態が以下で説明される。重み行列は、読取り制御回路1050によってRAM926から読み取られ、キャッシュ1048中にキャッシュされ得る。スケーラ1064は、算出アレイ1062の出力をスケーリングし得る。最大プール回路1066は、算出アレイ1062のスケーリングされた出力に対する最大プーリング関数を実装することができる。一例では、最大プール回路1066は、構成可能な論理ブロック(CLB)または他の構成可能な論理を使用して実装される。最大プール回路1066の出力またはスケーラ1064の出力のいずれかがFIFO1054に記憶され得る。書込み制御回路1052は、FIFO中のデータをRAM926に書き込む。制御論理1042は、IM2COL回路1044、読取り制御回路1046、マルチプレクサ1056および1068、読取り制御回路1050、ならびにスケーラ1064、最大プール回路1066、ならびに書込み制御回路1052など、処理回路1041中の様々な回路を制御する。
図11は、一例による、プログラマブルIC928を示すブロック図である。プログラマブルIC928は、プログラマブル論理3と、構成論理25と、構成メモリ26とを含む。プログラマブルIC928は、NVM924、RAM926、および他の回路29など、外部回路に連結され得る。プログラマブル論理3は、論理セル30と、サポート回路31と、プログラマブル相互接続32とを含む。論理セル30は、複数の入力の一般的な論理関数を実装するように構成され得る回路を含む。サポート回路31は、トランシーバ、入出力ブロック、デジタル信号プロセッサ、メモリなどの専用回路を含む。論理セルとサポート回路31とは、プログラマブル相互接続32を使用して相互接続され得る。論理セル30をプログラムするための情報と、サポート回路31のパラメータを設定するための情報と、プログラマブル相互接続32をプログラムするための情報とが、構成論理25によって構成メモリ26に記憶される。構成論理25は、不揮発性メモリ924または任意の他のソース(たとえば、DRAM28または他の回路29)から構成データを取得することができる。いくつかの例では、プログラマブルIC928は処理システム2を含む。処理システム2は、(1つまたは複数の)マイクロプロセッサ、メモリ、サポート回路、IO回路などを含むことができる。たとえば、処理システム2は、処理システム910と同様の回路を含むことができる。いくつかの例では、処理システム2は、処理システム910の代わりに使用され得る。そのような場合、コンピューティングシステム808全体がプログラマブルIC928を使用して実装され得、ソフトウェア906は処理システム2上で実行する。
図12は、トランシーバ37、CLB33、BRAM34、入出力ブロック(「IOB」)36、構成およびクロッキング論理(「CONFIG/CLOCKS」)42、DSP35、特殊な入出力ブロック(「I/O」)41(たとえば、構成ポートおよびクロックポート)、ならびにデジタルクロックマネージャ、アナログデジタル変換器、システム監視論理などの他のプログラマブル論理39を含む、多数の異なるプログラマブルタイルを含むプログラマブルIC928のFPGA実装形態を示す。FPGAはまた、PCIeインターフェース40、アナログデジタル変換器(ADC)38などを含むことができる。
いくつかのFPGAでは、各プログラマブルタイルは、図12の上部に含まれる例によって示されているように、同じタイル内のプログラマブル論理要素の入力および出力端子48への接続を有する少なくとも1つのプログラマブル相互接続要素(「INT」)43を含むことができる。各プログラマブル相互接続要素43は、同じタイルまたは(1つまたは複数の)他のタイル中の(1つまたは複数の)隣接するプログラマブル相互接続要素の相互接続セグメント49への接続をも含むことができる。各プログラマブル相互接続要素43は、論理ブロック(図示せず)間の一般的なルーティングリソースの相互接続セグメント50への接続をも含むことができる。一般的なルーティングリソースは、相互接続セグメント(たとえば、相互接続セグメント50)のトラックを備える論理ブロック(図示せず)と、相互接続セグメントを接続するためのスイッチブロック(図示せず)との間のルーティングチャネルを含むことができる。一般的なルーティングリソースの相互接続セグメント(たとえば、相互接続セグメント50)は、1つまたは複数の論理ブロックにわたることができる。一般的なルーティングリソースとともにとられるプログラマブル相互接続要素43は、示されているFPGAのためのプログラマブル相互接続構造(「プログラマブル相互接続」)を実装する。
例示的な一実装形態では、CLB33は、ユーザ論理を実装するようにプログラムされ得る構成可能論理要素(「CLE」)44と、単一のプログラマブル相互接続要素(「INT」)43とを含むことができる。BRAM34は、1つまたは複数のプログラマブル相互接続要素に加えてBRAM論理要素(「BRL」)45を含むことができる。典型的には、タイル中に含まれる相互接続要素の数は、タイルの高さに依存する。描かれている例では、BRAMタイルは、5つのCLBと同じ高さを有するが、他の数(たとえば、4つ)も使用され得る。DSPタイル35は、適切な数のプログラマブル相互接続要素に加えてDSP論理要素(「DSPL」)46を含むことができる。IOB36は、たとえば、プログラマブル相互接続要素43の1つのインスタンスに加えて入出力論理要素(「IOL」)47の2つのインスタンスを含むことができる。当業者に明らかになるように、たとえばI/O論理要素47に接続される実際のI/Oパッドは、典型的に、入出力論理要素47のエリアに制限されない。
描かれている例では、(図12に示されている)ダイの中心の近くの水平方向のエリアが、構成、クロック、および他の制御論理のために使用される。この水平方向のエリアまたは列から延びる垂直方向の列51が、FPGAの幅にわたってクロックおよび構成信号を分散させるために使用される。
図12に示されているアーキテクチャを利用するいくつかのFPGAは、FPGAの大部分を構築する規則的な列状構造を損なう追加の論理ブロックを含む。追加の論理ブロックは、プログラマブルブロックおよび/または専用の論理であり得る。
図12は、例示的なFPGAアーキテクチャを示すことを意図されているにすぎないことに留意されたい。たとえば、1つの行中の論理ブロックの数、行の相対幅、行の数および順序、行中に含まれる論理ブロックのタイプ、論理ブロックの相対サイズ、および図12の上部に含まれる相互接続/論理実装形態は、例にすぎない。たとえば、実際のFPGAでは、ユーザ論理の効率的な実装を容易にするために、CLBが現れるところならどこでも、CLBの2つ以上の隣接する行が典型的に含まれるが、隣接するCLB行の数は、FPGAの全体的なサイズによって変動する。
上記では、本開示において提示される実施形態への言及が行われた。しかしながら、本開示の範囲は、特定の説明される実施形態に限定されない。代わりに、本明細書で説明される特徴および要素の任意の組合せが、異なる実施形態に関係するか否かにかかわらず、企図された実施形態を実装および実施するために企図される。さらに、本明細書で開示される実施形態は、他の可能な解決策または従来技術に勝る利点を達成し得るが、特定の利点が所与の実施形態によって達成されるか否かは、本開示の範囲を限定するものではない。したがって、本明細書で説明される態様、特徴、実施形態および利点は、例示的なものにすぎず、(1つまたは複数の)請求項において明示的に具陳されている場合を除いて、添付の特許請求の範囲の要素または限定と見なされない。同様に、「本発明」への言及は、本明細書で開示される発明の主題の一般化と解釈されるものではなく、(1つまたは複数の)請求項において明示的に具陳されている場合を除いて、添付の特許請求の範囲の要素または限定であると見なされるものではない。
本明細書で説明される態様は、完全にハードウェアの実施形態、(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)完全にソフトウェアの実施形態、またはソフトウェア態様とハードウェア態様とを組み合わせる実施形態の形態をとり得、これらはすべて、本明細書では概して「モジュール」または「システム」と呼ばれることがある。
本発明は、システム、方法、および/またはコンピュータプログラム製品であり得る。コンピュータプログラム製品は、プロセッサに本発明の態様を行わせるためのコンピュータ可読プログラム命令をその上に有する(1つまたは複数の)コンピュータ可読記憶媒体を含み得る。
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のための命令を保持および記憶することができる有形デバイスであり得る。コンピュータ可読記憶媒体は、たとえば、限定はしないが、電子ストレージデバイス、磁気ストレージデバイス、光ストレージデバイス、電磁ストレージデバイス、半導体ストレージデバイス、または上記の任意の好適な組合せであり得る。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、消去可能プログラマブル読取り専用メモリ(EPROMまたはフラッシュメモリ)、スタティックランダムアクセスメモリ(SRAM)、ポータブルコンパクトディスク読取り専用メモリ(CD−ROM)、デジタル多用途ディスク(DVD)、メモリスティック、フロッピーディスク、パンチカードまたは命令が記録された溝における隆起構造など、機械的に符号化されたデバイス、および上記の任意の好適な組合せを含む。本明細書で使用されるコンピュータ可読記憶媒体は、電波または他の自由に伝搬する電磁波、導波路または他の伝送媒体中を伝搬する電磁波(たとえば、光ファイバーケーブルを通過する光パルス)、あるいはワイヤを通して送信される電気信号など、それ自体が一時的信号であると解釈されるべきではない。
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、あるいはネットワーク、たとえば、インターネット、ローカルエリアネットワーク、ワイドエリアネットワークおよび/またはワイヤレスネットワークを介して外部コンピュータまたは外部ストレージデバイスにダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバー、ワイヤレス送信、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータおよび/またはエッジサーバを備え得る。各コンピューティング/処理デバイス中のネットワークアダプタカードまたはネットワークインターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、そのコンピュータ可読プログラム命令を、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体に記憶するためにフォワーディングする。
本発明の動作を行うためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、あるいは、Smalltalk、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組合せで書き込まれたソースコードまたはオブジェクトコードのいずれかであり得る。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロンソフトウェアパッケージとして、部分的にユーザのコンピュータ上でおよび部分的にリモートコンピュータ上で、あるいは完全にリモートコンピュータまたはサーバ上で実行し得る。後者のシナリオでは、リモートコンピュータは、ローカルエリアネットワーク(LAN)またはワイドエリアネットワーク(WAN)を含む任意のタイプのネットワークを通してユーザのコンピュータに接続され得るか、あるいは接続は、(たとえば、インターネットサービスプロバイダを使用してインターネットを通して)外部コンピュータに対して行われ得る。いくつかの実施形態では、たとえば、プログラマブル論理回路要素、フィールドプログラマブルゲートアレイ(FPGA)、またはプログラマブル論理アレイ(PLA)を含む電子回路要素が、本発明の態様を実施するために、電子回路要素を個人化するためにコンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行し得る。
本発明の態様が、本発明の実施形態による方法、装置(システム)、およびコンピュータプログラム製品のフローチャートの例示図および/またはブロック図を参照しながら本明細書で説明された。フローチャートの例示図および/またはブロック図の各ブロック、ならびにフローチャートの例示図および/またはブロック図中のブロックの組合せが、コンピュータ可読プログラム命令によって実装され得ることを理解されよう。
これらのコンピュータ可読プログラム命令は、汎用コンピュータ、専用コンピュータ、または機械を製造するための他のプログラマブルデータ処理装置のプロセッサに与えられ得、その結果、コンピュータまたは他のプログラマブルデータ処理装置のプロセッサを介して実行する命令は、フローチャートおよび/またはブロック図の1つまたは複数のブロックにおいて指定された関数/行為を実装するための手段を作成する。これらのコンピュータ可読プログラム命令はまた、コンピュータ、プログラマブルデータ処理装置、および/または他のデバイスに特定の様式で機能するように指示することができるコンピュータ可読記憶媒体に記憶され得、その結果、命令が記憶されたコンピュータ可読記憶媒体は、フローチャートおよび/またはブロック図の1つまたは複数のブロックにおいて指定された関数/行為の態様を実装する命令を含む製造品を備える。
コンピュータ可読プログラム命令はまた、コンピュータ実装プロセスを作り出すために、一連の動作ステップをコンピュータ、他のプログラマブルデータ処理装置または他のデバイス上で実施させるように、コンピュータ、他のプログラマブル装置、または他のデバイスにロードされ得、その結果、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する命令は、フローチャートおよび/またはブロック図の1つまたは複数のブロックにおいて指定された関数/行為を実装する。
図中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータプログラム製品の可能な実装形態のアーキテクチャ、機能性、および動作を示す。この点について、フローチャートまたはブロック図中の各ブロックは、(1つまたは複数の)指定された論理関数を実装するための1つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表し得る。いくつかの代替実装形態では、ブロック中で言及される関数は、図中で言及される順序から外れて行われ得る。たとえば、関与する機能性に応じて、連続して示されている2つのブロックが、事実上、実質的にコンカレントに実行され得るか、またはブロックが、時々、逆の順序で実行され得る。また、ブロック図および/またはフローチャートの例示図の各ブロック、ならびにブロック図および/またはフローチャートの例示図中のブロックの組合せが、指定された関数または行為を実施するかあるいは専用ハードウェアとコンピュータ命令との組合せを行う専用ハードウェアベースシステムによって実装され得ることに留意されたい。
上記は特定の例を対象とするが、他のおよびさらなる例がその基本的範囲から逸脱することなく考案され得、その範囲は以下の特許請求の範囲によって決定される。

Claims (15)

  1. ニューラルネットワークアクセラレータにサブミットされるタスクをパイプライン化するための方法であって、前記方法は、
    ニューラルネットワークアプリケーションから、前記ニューラルネットワークアクセラレータによって処理されるべき第1のタスクを受信することと、
    1つまたは複数のコンピュータプロセッサを使用して、パイプライン中の複数のステージによって使用される情報を含んでいるパケットを生成することと、
    前記複数のステージにおいて前記パケットを処理することであって、前記複数のステージのうちの少なくとも1つが、前記ニューラルネットワークアクセラレータを実行するハードウェアシステムへの呼出しを実施し、前記パイプラインが、前記パケットを処理することと並列に、第2のタスクに対応する少なくとも1つの他のパケットを処理する、前記パケットを処理することと、
    前記パイプラインを使用して前記パケットを処理した結果を前記ニューラルネットワークアプリケーションに返すことと
    を含む、方法。
  2. 前記複数のステージにおいて前記パケットを処理することは、
    前処理ステージにおいて前記パケットを処理することと、
    前記前処理ステージの後に行われる実行ステージにおいて前記パケットを処理することであって、前記ハードウェアシステムへの前記呼出しが、前記実行ステージ中に行われる、実行ステージにおいて前記パケットを処理することと、
    前記実行ステージの後の後処理ステージにおいて前記パケットを処理することと
    を含む、請求項1に記載の方法。
  3. 前記前処理ステージにおいて前記パケットを処理することが、
    前記第1のタスクに対応するデータを、前記ニューラルネットワークアプリケーションによって使用される第1のフォーマットから、前記ハードウェアシステムによって使用される第2のフォーマットに変換すること
    を含み、
    前記後処理ステージにおいて前記パケットを処理することが、前記結果を前記第2のフォーマットから前記第1のフォーマットに変換することを含む、請求項2に記載の方法。
  4. 前記複数のステージの各々が、他のスレッドから独立して前記パケットを処理するそれぞれのスレッドを含む、請求項1に記載の方法。
  5. 前記ニューラルネットワークアプリケーションのためのメモリの割り当てブロックを、前記ハードウェアシステム中の前記ニューラルネットワークアクセラレータのためのメモリの割り当てブロックにマッピングするメモリマップを生成することと、
    前記メモリマップに基づいて前記ニューラルネットワークアプリケーションから受信された第1のメモリアドレスを、前記ハードウェアシステム中のメモリブロックのための第2のメモリアドレスに変換することと
    をさらに含む、請求項1に記載の方法。
  6. ニューラルネットワークの複数の層を実施するために使用される重みを、行列フォーマットにおいて前記ハードウェアシステムに転送することと、
    新しいタスクに対応する前記重みのサブセットを識別することと、
    前記パケットを処理するときに使用されるべきである前記重みの前記サブセットを示すオフセットを前記ハードウェアシステムに送信することと
    をさらに含む、請求項1に記載の方法。
  7. 前記ハードウェアシステム上の前記ニューラルネットワークアクセラレータの実行に関するメトリックを取得することと、
    表示のために前記メトリックの視覚表現を出力することと、
    前記ニューラルネットワークアクセラレータの利用率を増加させるように、前記パイプライン中の前記複数のステージを実行するハードウェアリソースを調整することと
    をさらに含む、請求項1に記載の方法。
  8. 前記パイプライン中の前記複数のステージがライブラリにおいて定義され、前記ライブラリは、異なるタイプのニューラルネットワークアプリケーションがタスクを前記ニューラルネットワークアクセラレータにサブミットするために前記パイプライン中の前記複数のステージを使用することを可能にするように構成されたアプリケーションプログラムインターフェース(API)を含む、請求項1に記載の方法。
  9. プロセッサと、
    ライブラリを備えるメモリと
    を備えるコンピューティングシステムであって、前記ライブラリは、前記プロセッサによって実行されたとき、
    ニューラルネットワークアプリケーションから、ニューラルネットワークアクセラレータによって処理されるべき第1のタスクを受信することと、
    1つまたは複数のコンピュータプロセッサを使用して、パイプライン中の複数のステージによって使用される情報を含んでいるパケットを生成することと、
    前記複数のステージにおいて前記パケットを処理することであって、前記複数のステージのうちの少なくとも1つが、前記ニューラルネットワークアクセラレータを実行するハードウェアシステムへの呼出しを実施し、前記パイプラインが、前記パケットを処理することと並列に、第2のタスクに対応する少なくとも1つの他のパケットを処理する、前記パケットを処理することと、
    前記パイプラインを使用して前記パケットを処理した結果を前記ニューラルネットワークアプリケーションに返すことと
    を含む動作を実施する、コンピューティングシステム。
  10. 前記複数のステージにおいて前記パケットを処理することは、
    前処理ステージにおいて前記パケットを処理することと、
    前記前処理ステージの後に行われる実行ステージにおいて前記パケットを処理することであって、前記ハードウェアシステムへの前記呼出しが、前記実行ステージ中に行われる、実行ステージにおいて前記パケットを処理することと、
    前記実行ステージの後の後処理ステージにおいて前記パケットを処理することと
    を含む、請求項9に記載のコンピューティングシステム。
  11. 前記前処理ステージにおいて前記パケットを処理することが、
    前記第1のタスクに対応するデータを、前記ニューラルネットワークアプリケーションによって使用される第1のフォーマットから、前記ハードウェアシステムによって使用される第2のフォーマットに変換すること
    を含み、
    前記後処理ステージにおいて前記パケットを処理することが、前記結果を前記第2のフォーマットから前記第1のフォーマットに変換することを含む、請求項10に記載のコンピューティングシステム。
  12. 前記動作が、
    前記ニューラルネットワークアプリケーションのためのメモリの割り当てブロックを、前記ハードウェアシステム中の前記ニューラルネットワークアクセラレータのためのメモリの割り当てブロックにマッピングするメモリマップを生成することと、
    前記メモリマップに基づいて前記ニューラルネットワークアプリケーションから受信された第1のメモリアドレスを、前記ハードウェアシステム中のメモリブロックのための第2のメモリアドレスに変換することと
    をさらに含む、請求項9に記載のコンピューティングシステム。
  13. 前記動作が、
    ニューラルネットワークの複数の層を実施するために使用される重みを、行列フォーマットにおいて前記ハードウェアシステムに転送することと、
    新しいタスクに対応する前記重みのサブセットを識別することと、
    前記パケットを処理するときに使用されるべきである前記重みの前記サブセットを示すオフセットを前記ハードウェアシステムに送信することと
    をさらに含む、請求項9に記載のコンピューティングシステム。
  14. 前記動作が、
    前記ハードウェアシステム上の前記ニューラルネットワークアクセラレータの実行に関するメトリックを取得することと、
    表示のために前記メトリックの視覚表現を出力することと、
    前記ニューラルネットワークアクセラレータの利用率を増加させるように、前記パイプライン中の前記複数のステージを実行するハードウェアリソースを調整することと
    をさらに含む、請求項9に記載のコンピューティングシステム。
  15. 前記パイプライン中の前記複数のステージが前記ライブラリにおいて定義され、前記ライブラリは、異なるタイプのニューラルネットワークアプリケーションがタスクを前記ニューラルネットワークアクセラレータにサブミットするために前記パイプライン中の前記複数のステージを使用することを可能にするように構成されたAPIを含む、請求項9に記載のコンピューティングシステム。
JP2020521369A 2017-10-17 2018-09-26 ニューラルネットワークアクセラレーションのための機械学習ランタイムライブラリ Active JP7382925B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/785,679 2017-10-17
US15/785,679 US11694066B2 (en) 2017-10-17 2017-10-17 Machine learning runtime library for neural network acceleration
PCT/US2018/052833 WO2019079008A1 (en) 2017-10-17 2018-09-26 LEARNING EXECUTION LIBRARY MACHINE FOR NEURONAL NETWORK ACCELERATION

Publications (2)

Publication Number Publication Date
JP2020537784A true JP2020537784A (ja) 2020-12-24
JP7382925B2 JP7382925B2 (ja) 2023-11-17

Family

ID=63858145

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020521369A Active JP7382925B2 (ja) 2017-10-17 2018-09-26 ニューラルネットワークアクセラレーションのための機械学習ランタイムライブラリ

Country Status (5)

Country Link
US (1) US11694066B2 (ja)
EP (1) EP3698294A1 (ja)
JP (1) JP7382925B2 (ja)
CN (1) CN111247533B (ja)
WO (1) WO2019079008A1 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023062443A1 (en) * 2021-10-14 2023-04-20 University Of Moratuwa A system and method for evaluating convolutional neural networks
JP7424137B2 (ja) 2019-05-22 2024-01-30 富士通株式会社 動作のスケジューリング

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10609119B2 (en) * 2017-11-03 2020-03-31 Salesforce.Com, Inc. Simultaneous optimization of multiple TCP parameters to improve download outcomes for network-based mobile applications
KR102615443B1 (ko) * 2018-05-25 2023-12-20 에스케이하이닉스 주식회사 머신 러닝 장치 및 이를 이용한 머신 러닝 시스템
US11277455B2 (en) 2018-06-07 2022-03-15 Mellanox Technologies, Ltd. Streaming system
US11151769B2 (en) * 2018-08-10 2021-10-19 Intel Corporation Graphics architecture including a neural network pipeline
US10846201B1 (en) * 2018-09-21 2020-11-24 Amazon Technologies, Inc. Performance debug for networks
US20200106828A1 (en) * 2018-10-02 2020-04-02 Mellanox Technologies, Ltd. Parallel Computation Network Device
US11044099B2 (en) * 2018-12-28 2021-06-22 Intel Corporation Technologies for providing certified telemetry data indicative of resources utilizations
US11687771B2 (en) * 2019-01-23 2023-06-27 Samsung Electronics Co., Ltd. Platform for concurrent execution of GPU operations
US11625393B2 (en) 2019-02-19 2023-04-11 Mellanox Technologies, Ltd. High performance computing system
EP3699770A1 (en) 2019-02-25 2020-08-26 Mellanox Technologies TLV Ltd. Collective communication system and methods
US11175898B2 (en) * 2019-05-31 2021-11-16 Apple Inc. Compiling code for a machine learning model for execution on a specialized processor
US20210026686A1 (en) * 2019-07-22 2021-01-28 Advanced Micro Devices, Inc. Chiplet-integrated machine learning accelerators
US11621808B1 (en) 2019-10-16 2023-04-04 Xilinx, Inc. Machine learning based methodology for signal waveform, eye diagram, and bit error rate (BER) bathtub prediction
WO2021079168A1 (en) * 2019-10-22 2021-04-29 Mipsology SAS Multiple locally stored artificial neural network computations
US11423303B1 (en) 2019-11-21 2022-08-23 Xilinx, Inc. Machine learning based methodology for adaptative equalization
US11182314B1 (en) * 2019-11-27 2021-11-23 Amazon Techaologies, Inc. Low latency neural network model loading
CN110991632B (zh) * 2019-11-29 2023-05-23 电子科技大学 一种基于fpga的异构神经网络计算加速器设计方法
KR102490539B1 (ko) * 2019-12-30 2023-01-19 주식회사 모레 딥러닝을 위한 가속기용 프로그램 생성 방법
WO2021137669A1 (ko) * 2019-12-30 2021-07-08 매니코어소프트주식회사 딥러닝을 위한 가속기용 프로그램 생성 방법
US11687778B2 (en) 2020-01-06 2023-06-27 The Research Foundation For The State University Of New York Fakecatcher: detection of synthetic portrait videos using biological signals
US11750699B2 (en) 2020-01-15 2023-09-05 Mellanox Technologies, Ltd. Small message aggregation
US11252027B2 (en) 2020-01-23 2022-02-15 Mellanox Technologies, Ltd. Network element supporting flexible data reduction operations
WO2021177976A1 (en) * 2020-03-06 2021-09-10 Google Llc Distributed computing pipeline processing
KR102455310B1 (ko) * 2020-05-08 2022-10-18 한국전자통신연구원 콘볼루션 신경망 양자화 추론 장치 및 방법
JP2021189832A (ja) * 2020-06-01 2021-12-13 株式会社日立製作所 電子制御装置
US11574249B2 (en) 2020-06-02 2023-02-07 International Business Machines Corporation Streamlining data processing optimizations for machine learning workloads
US11876885B2 (en) 2020-07-02 2024-01-16 Mellanox Technologies, Ltd. Clock queue with arming and/or self-arming features
CN112099943B (zh) * 2020-08-13 2024-05-03 深圳云天励飞技术股份有限公司 内存分配方法及相关设备
CN112101178B (zh) * 2020-09-10 2023-03-24 电子科技大学 一种辅助盲人感知外界环境的智能soc终端
WO2022087811A1 (zh) * 2020-10-27 2022-05-05 华为技术有限公司 模型推理异常处理方法及装置
US20220147813A1 (en) * 2020-11-06 2022-05-12 Micron Technology, Inc. Runtime optimization of computations of an artificial neural network compiled for execution on a deep learning accelerator
CN112508188A (zh) * 2020-12-01 2021-03-16 北京奇艺世纪科技有限公司 一种分布式模型训练系统、方法、装置、设备和存储介质
US11556378B2 (en) 2020-12-14 2023-01-17 Mellanox Technologies, Ltd. Offloading execution of a multi-task parameter-dependent operation to a network device
CN112580787B (zh) * 2020-12-25 2023-11-17 北京百度网讯科技有限公司 神经网络加速器的数据处理方法、装置、设备及存储介质
CN115222015A (zh) 2021-04-21 2022-10-21 阿里巴巴新加坡控股有限公司 指令处理装置、加速单元和服务器
US11829279B2 (en) * 2021-09-23 2023-11-28 Intel Corporation Systems, apparatus, and methods to debug accelerator hardware
US11922237B1 (en) 2022-09-12 2024-03-05 Mellanox Technologies, Ltd. Single-step collective operations
CN116050499B (zh) * 2023-04-03 2023-07-18 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) 一种模型并行训练中的自适应模型划分方法、系统及设备
CN116962176B (zh) * 2023-09-21 2024-01-23 浪潮电子信息产业股份有限公司 一种分布式集群的数据处理方法、装置、系统及存储介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005182785A (ja) * 2003-12-09 2005-07-07 Microsoft Corp グラフィックス処理ユニットを使用して機械学習技術の処理を速め、最適化するシステムおよび方法
JP2009116872A (ja) * 2007-11-08 2009-05-28 Internatl Business Mach Corp <Ibm> ネットワーク・オン・チップ(noc)上のソフトウェア・パイプライン化の方法、プログラムおよび装置
US20100076915A1 (en) * 2008-09-25 2010-03-25 Microsoft Corporation Field-Programmable Gate Array Based Accelerator System
JP2011034190A (ja) * 2009-07-30 2011-02-17 Renesas Electronics Corp データ処理装置
JP2014527733A (ja) * 2011-06-29 2014-10-16 ベリサイン・インコーポレイテッド データ・プレーン・パケット処理ツール・チェーン
US20150268978A1 (en) * 2014-03-21 2015-09-24 Vmware, Inc. Binary editing of applications executed by virtual machines
JP2017050001A (ja) * 2015-09-04 2017-03-09 バイドゥ・ユーエスエイ・リミテッド・ライアビリティ・カンパニーBaidu USA LLC 効果的なニューラルネットワークの配置に用いるシステム及び方法
WO2017091763A1 (en) * 2015-11-25 2017-06-01 Baidu Usa Llc End-to-end speech recognition

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6346825B1 (en) 2000-10-06 2002-02-12 Xilinx, Inc. Block RAM with configurable data width and parity for use in a field programmable gate array
US9153230B2 (en) 2012-10-23 2015-10-06 Google Inc. Mobile speech recognition hardware accelerator
US9710749B2 (en) * 2013-09-03 2017-07-18 Qualcomm Incorporated Methods and apparatus for implementing a breakpoint determination unit in an artificial nervous system
WO2016077393A1 (en) 2014-11-12 2016-05-19 Xilinx, Inc. Heterogeneous multiprocessor program compilation targeting programmable integrated circuits
EP3035249B1 (en) * 2014-12-19 2019-11-27 Intel Corporation Method and apparatus for distributed and cooperative computation in artificial neural networks
US20160224379A1 (en) 2015-01-29 2016-08-04 The Intellisis Corporation Mapping Processes to Processors in a Network on a Chip Computing System
US10621486B2 (en) 2016-08-12 2020-04-14 Beijing Deephi Intelligent Technology Co., Ltd. Method for optimizing an artificial neural network (ANN)
CN106650922B (zh) * 2016-09-29 2019-05-03 清华大学 硬件神经网络转换方法、计算装置、软硬件协作系统
US10175980B2 (en) 2016-10-27 2019-01-08 Google Llc Neural network compute tile

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005182785A (ja) * 2003-12-09 2005-07-07 Microsoft Corp グラフィックス処理ユニットを使用して機械学習技術の処理を速め、最適化するシステムおよび方法
JP2009116872A (ja) * 2007-11-08 2009-05-28 Internatl Business Mach Corp <Ibm> ネットワーク・オン・チップ(noc)上のソフトウェア・パイプライン化の方法、プログラムおよび装置
US20100076915A1 (en) * 2008-09-25 2010-03-25 Microsoft Corporation Field-Programmable Gate Array Based Accelerator System
JP2011034190A (ja) * 2009-07-30 2011-02-17 Renesas Electronics Corp データ処理装置
JP2014527733A (ja) * 2011-06-29 2014-10-16 ベリサイン・インコーポレイテッド データ・プレーン・パケット処理ツール・チェーン
US20150268978A1 (en) * 2014-03-21 2015-09-24 Vmware, Inc. Binary editing of applications executed by virtual machines
JP2017050001A (ja) * 2015-09-04 2017-03-09 バイドゥ・ユーエスエイ・リミテッド・ライアビリティ・カンパニーBaidu USA LLC 効果的なニューラルネットワークの配置に用いるシステム及び方法
WO2017091763A1 (en) * 2015-11-25 2017-06-01 Baidu Usa Llc End-to-end speech recognition
JP2018513399A (ja) * 2015-11-25 2018-05-24 バイドゥ ユーエスエー エルエルシーBaidu USA LLC 配置されたエンドツーエンド音声認識

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7424137B2 (ja) 2019-05-22 2024-01-30 富士通株式会社 動作のスケジューリング
WO2023062443A1 (en) * 2021-10-14 2023-04-20 University Of Moratuwa A system and method for evaluating convolutional neural networks

Also Published As

Publication number Publication date
KR20200069353A (ko) 2020-06-16
US11694066B2 (en) 2023-07-04
US20190114533A1 (en) 2019-04-18
CN111247533A (zh) 2020-06-05
CN111247533B (zh) 2024-04-30
JP7382925B2 (ja) 2023-11-17
EP3698294A1 (en) 2020-08-26
WO2019079008A1 (en) 2019-04-25

Similar Documents

Publication Publication Date Title
JP7382925B2 (ja) ニューラルネットワークアクセラレーションのための機械学習ランタイムライブラリ
KR102650299B1 (ko) 대규모 병렬 소프트웨어로 정의된 하드웨어 시스템에서의 정적 블록 스케줄링
KR102562715B1 (ko) 다수의 프로세서들 및 뉴럴 네트워크 가속기를 갖는 뉴럴 네트워크 프로세싱 시스템
US10372428B1 (en) Dynamic computational acceleration using a heterogeneous hardware infrastructure
CN107346351B (zh) 用于基于源代码中定义的硬件要求来设计fpga的方法和系统
US11204747B1 (en) Re-targetable interface for data exchange between heterogeneous systems and accelerator abstraction into software instructions
CN115495614A (zh) 使用一个或更多个神经网络的视频上采样
JP2020537785A (ja) ホスト通信されるマージされた重みと層単位命令のパッケージとを使用するニューラルネットワークアクセラレータによる多層ニューラルネットワーク処理
US20210382754A1 (en) Serverless computing architecture for artificial intelligence workloads on edge for dynamic reconfiguration of workloads and enhanced resource utilization
US20210319298A1 (en) Compute-based subgraph partitioning of deep learning models for framework integration
CN110569019A (zh) 数值的随机修约
CN114830135A (zh) 算子的层次分区
JP2023511467A (ja) 機械学習ワークロードのためのタスクスケジューリング
US20220006457A1 (en) Glitch-free multiplexer
US9529587B2 (en) Refactoring data flow applications without source code changes or recompilation
US11556381B2 (en) Asynchronous distributed data flow for machine learning workloads
US11847507B1 (en) DMA synchronization using alternating semaphores
US20210365804A1 (en) Dynamic ai model transfer reconfiguration to minimize performance, accuracy and latency disruptions
KR102665580B1 (ko) 신경 네트워크 가속화를 위한 머신 러닝 런타임 라이브러리
US11748622B1 (en) Saving intermediate outputs of a neural network
US11875247B1 (en) Input batching with serial dynamic memory access
US20220004864A1 (en) Preventing glitch propagation

Legal Events

Date Code Title Description
A529 Written submission of copy of amendment under article 34 pct

Free format text: JAPANESE INTERMEDIATE CODE: A529

Effective date: 20200605

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210922

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220907

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20221018

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230104

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230418

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230623

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20231010

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20231107

R150 Certificate of patent or registration of utility model

Ref document number: 7382925

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150