JP2024502225A - ワークロードが平準化された活性化スパース性を用いた畳込みのための方法およびシステム - Google Patents
ワークロードが平準化された活性化スパース性を用いた畳込みのための方法およびシステム Download PDFInfo
- Publication number
- JP2024502225A JP2024502225A JP2023527417A JP2023527417A JP2024502225A JP 2024502225 A JP2024502225 A JP 2024502225A JP 2023527417 A JP2023527417 A JP 2023527417A JP 2023527417 A JP2023527417 A JP 2023527417A JP 2024502225 A JP2024502225 A JP 2024502225A
- Authority
- JP
- Japan
- Prior art keywords
- output values
- tensor
- bank
- tensors
- weight
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 73
- 230000004913 activation Effects 0.000 title abstract description 71
- 238000013138 pruning Methods 0.000 claims abstract description 32
- 238000003860 storage Methods 0.000 claims abstract description 17
- 238000012545 processing Methods 0.000 claims description 61
- 238000013528 artificial neural network Methods 0.000 claims description 32
- 239000000872 buffer Substances 0.000 claims description 32
- 230000015654 memory Effects 0.000 claims description 20
- 238000009825 accumulation Methods 0.000 claims description 18
- 239000013598 vector Substances 0.000 claims description 14
- 241001442055 Vipera berus Species 0.000 claims description 13
- 238000004590 computer program Methods 0.000 abstract description 2
- 238000001994 activation Methods 0.000 description 70
- 230000008569 process Effects 0.000 description 30
- 230000006870 function Effects 0.000 description 18
- 239000011159 matrix material Substances 0.000 description 15
- 238000010586 diagram Methods 0.000 description 14
- 238000004422 calculation algorithm Methods 0.000 description 11
- 238000013527 convolutional neural network Methods 0.000 description 10
- 238000004891 communication Methods 0.000 description 7
- 238000004364 calculation method Methods 0.000 description 6
- 238000011176 pooling Methods 0.000 description 6
- 238000007792 addition Methods 0.000 description 5
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000011218 segmentation Effects 0.000 description 4
- 238000010801 machine learning Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000013473 artificial intelligence Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 210000002569 neuron Anatomy 0.000 description 2
- 206010028980 Neoplasm Diseases 0.000 description 1
- 201000011510 cancer Diseases 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 238000010191 image analysis Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000013468 resource allocation Methods 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012549 training Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/082—Learning methods modifying the architecture, e.g. adding, deleting or silencing nodes or connections
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/0464—Convolutional networks [CNN, ConvNet]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/0495—Quantised networks; Sparse networks; Compressed networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/70—Arrangements for image or video recognition or understanding using pattern recognition or machine learning
- G06V10/82—Arrangements for image or video recognition or understanding using pattern recognition or machine learning using neural networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
- G06F18/241—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/38—Indexing scheme relating to groups G06F7/38 - G06F7/575
- G06F2207/48—Indexing scheme relating to groups G06F7/48 - G06F7/575
- G06F2207/4802—Special implementations
- G06F2207/4818—Threshold devices
- G06F2207/4824—Neural networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/048—Activation functions
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Data Mining & Analysis (AREA)
- Artificial Intelligence (AREA)
- General Health & Medical Sciences (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- Mathematical Physics (AREA)
- Neurology (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Medical Informatics (AREA)
- Multimedia (AREA)
- Databases & Information Systems (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Evolutionary Biology (AREA)
- Complex Calculations (AREA)
- Image Analysis (AREA)
- Image Processing (AREA)
- Measurement Of Velocity Or Position Using Acoustic Or Ultrasonic Waves (AREA)
Abstract
コンピュータ記憶媒体にエンコードされたコンピュータ・プログラムを含む、ワークロードが平準化された活性化スパース性を用いた畳込みのための方法、システム、および装置が説明される。例示的な方法は、畳込み層における入力テンソルおよび重みテンソルを複数のプロセッサに割り当てて、入力テンソルおよび重みテンソルに基づいて、積和(MAC)演算を並列的に実行することと、MAC演算の結果に基づいて、複数の出力値を取得することと、複数の出力値に基づいて、出力値の1つまたは複数のバンクを構築することと、バンクのそれぞれについて、バンクにおける1つまたは複数の出力値に対して上位K個のソートを実行して、K個の出力値を取得することと、各バンクにおいて取得されたK個の出力値以外の、1つまたは複数の出力値をゼロに設定することにより、バンクのそれぞれを枝刈りすることと、枝刈りされたバンクに基づいて、畳込み層の出力テンソルを構築することとを備えている。
Description
本開示は、一般に人工知能に関し、より具体的には、ワークロードが平準化された活性化スパース性を用いた畳込み処理に関する。
ニューラル・ネットワーク(NN)は現在、画像やビデオの認識、レコメンダ・システム、分類、医用画像解析、および自然言語処理など、多くの最新の人工知能(AI)アプリケーションの基盤となっている。NNは、自動運転車や、がんの検出から複雑なゲームをプレイすることまで、様々な使用シナリオで使用されている。典型的なNNは、一連の畳込み層を備えることができ、ここでは、集中的、したがって(計算量とエネルギーの面で)高価な畳込み演算が実行される。一般的な畳込み層は、1つまたは複数の活性化(または入力)テンソルと、1つまたは複数の重みテンソルとを含むことができる。
近年、重みテンソルを枝刈りして非ゼロ重みの数を減らすなど、NNにおける畳込み処理にスパース性を導入することで、NNの計算効率を向上させる様々なアプローチが開発されている。一部の既存のハードウェア・アーキテクチャは、活性化スパース性を完全に無視するか、構造化されていない活性化スパース性を前提としているため、並列処理フレームワークを使用して畳込み演算を実行する場合に、ワークロードの不均衡が生じる可能性がある。不均衡なワークロードは、システムのスケーラビリティと、アーキテクチャのパフォーマンスとに直接影響を与える可能性がある。したがって、畳込み処理の効率を向上させるために、ワークロードが平準化された活性化スパース性を提供および活用する新しいシステム・アーキテクチャを構築することが望ましい。
本明細書の様々な実施形態は、ワークロードが平準化された活性化スパース性を用いた畳込みのためのシステム、方法、および非一時的なコンピュータ可読媒体を含むことができる。
1つの態様によれば、ワークロードが平準化された活性化スパース性を用いた畳込みのための方法は、畳込み層における入力テンソルおよび重みテンソルを複数のプロセッサに割り当てて、入力テンソルおよび重みテンソルに基づいて、積和(MAC)演算を並列的に実行することと、MAC演算の結果に基づいて、複数の出力値を取得することと、複数の出力値に基づいて、出力値の1つまたは複数のバンクを構築することであって、バンクのそれぞれは、複数の出力値のうちの1つまたは複数の出力値を備えている、構築することと、バンクのそれぞれについて、バンクにおける1つまたは複数の出力値に対して上位K個のソートを実行して、K個の出力値を取得することであって、ここで、Kは正の整数である、取得することと、各バンクにおいて取得されたK個の出力値以外の、1つまたは複数の出力値をゼロに設定することにより、バンクのそれぞれを枝刈りすることと、枝刈りされたバンクに基づいて、畳込み層の出力テンソルを構築することとを備えている。
いくつかの実施形態では、畳込み層における入力テンソルおよび重みテンソルを複数のプロセッサに割り当てることは、ニューラル・ネットワークにおける畳込み層において、入力テンソルおよび複数の重みテンソルを取得することと、入力テンソルを複数のサブ・テンソルにセグメント化し、複数のサブ・テンソルを複数のプロセッサに割り当てることと、複数の重みテンソルを複数の重みグループにセグメント化し、複数の重みグループを複数のプロセッサに割り当てることとを備えている。
いくつかの実施形態では、複数のサブ・テンソルおよび複数の重みグループを複数のプロセッサに割り当てることは、複数のプロセッサのそれぞれについて、複数のサブ・テンソルのうちの1つまたは複数のサブ・テンソルと、複数の重みグループのうちの1つまたは複数の重みグループとを、プロセッサの内部バッファに格納することを備えている。
いくつかの実施形態では、複数の重みグループを複数のプロセッサに割り当てることは、複数の並列処理サイクルのそれぞれの間に、複数の重みグループのうちの1つまたは複数の重みグループを複数のプロセッサに割り当てて、複数のサブ・テンソル、および複数の重みグループのうちの1つまたは複数の重みグループに基づいて、複数のプロセッサがMAC演算を並列的に実行することを備えている。
いくつかの実施形態では、1つまたは複数のバンクのそれぞれは、複数の重みグループのうちの1つの重みグループに基づいて生成された出力値に対応する。
いくつかの実施形態では、MAC演算の結果に基づいて複数の出力値を取得することは、複数の並列処理サイクルのそれぞれの間に、複数のプロセッサによって実行されたMAC演算の結果として、複数の部分和を取得することと、複数の部分和を、加算器ツリー・デバイスに供給して、1つまたは複数の出力値を取得することと、複数の並列処理サイクルのうちの1つまたは複数の並列処理サイクルの間、1つまたは複数の出力値を累積バッファに格納して、複数の出力値を取得することとを備えている。
いくつかの実施形態では、バンクにおける出力値に対して上位K個のソートを実行して、K個の出力値を取得することは、バンクにおける出力値の大きさに対して上位K個のソートを実行して、K個の出力値を取得することを備えている。
いくつかの実施形態では、バンクのそれぞれは、ゼロより大きい高さ次元と、ゼロより大きい幅次元と、1より大きいチャネル次元とを備えている。
いくつかの実施形態では、方法はさらに、バンクのそれぞれにおけるK個の非ゼロ出力値をそれぞれ、K個の多次元ベクトルとして表すことを備えることができ、K個の多次元ベクトルのそれぞれは、非ゼロ出力値と、バンク内の非ゼロ出力値の、対応するチャネル次元識別子とを備えている。
いくつかの実施形態では、枝刈りされたバンクに基づいて、畳込み層の出力テンソルを構築することは、バンクのそれぞれのK個の多次元ベクトルを組み立てて、出力テンソルを形成することを備えている。
いくつかの実施形態では、枝刈りされたバンクのそれぞれは、バンク識別子に関連付けられており、枝刈りされたバンクに基づいて、畳込み層の出力テンソルを構築することは、対応するバンク識別子に基づいて、バンクのそれぞれのK個の多次元ベクトルを組み立てて、出力テンソルを形成することを備えている。
いくつかの実施形態では、出力テンソルは、スパース・テンソルである。
別の態様によれば、ワークロードが平準化された活性化スパース性を用いた畳込みのためのシステムが提供される。このシステムは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサに結合され、1つまたは複数のプロセッサによって実行可能な命令で、畳込み層における入力テンソルおよび重みテンソルを複数のプロセッサに割り当てて、入力テンソルおよび重みテンソルに基づいて、積和(MAC)演算を並列的に実行することと、MAC演算の結果に基づいて、複数の出力値を取得することと、複数の出力値に基づいて、出力値の1つまたは複数のバンクを構築することであって、バンクのそれぞれは、複数の出力値のうちの1つまたは複数の出力値を備えている、構築することと、バンクのそれぞれについて、バンクにおける1つまたは複数の出力値に対して上位K個のソートを実行して、K個の出力値を取得することであって、ここで、Kは正の整数である、取得することと、各バンクにおいて取得されたK個の出力値以外の、1つまたは複数の出力値をゼロに設定することにより、バンクのそれぞれを枝刈りすることと、枝刈りされたバンクに基づいて、畳込み層の出力テンソルを構築することとを備える動作をシステムに実行させるように構成された1つまたは複数の非一時的なコンピュータ可読メモリと、を備えることができる。
さらに別の態様によれば、ワークロードが平準化された活性化スパース性を用いた畳込みのための非一時的なコンピュータ可読記憶媒体が提供される。媒体は、1つまたは複数のプロセッサによって実行可能な命令で、畳込み層における入力テンソルおよび重みテンソルを複数のプロセッサに割り当てて、入力テンソルおよび重みテンソルに基づいて、積和(MAC)演算を並列的に実行することと、MAC演算の結果に基づいて、複数の出力値を取得することと、複数の出力値に基づいて出力値の1つまたは複数のバンクを構築することであって、バンクのそれぞれは、複数の出力値のうちの1つまたは複数の出力値を備えている、構築することと、バンクのそれぞれについて、バンクにおける1つまたは複数の出力値に対して上位K個のソートを実行して、K個の出力値を取得することであって、ここで、Kは正の整数である、取得することと、各バンクにおいて取得されたK個の出力値以外の、1つまたは複数の出力値をゼロに設定することにより、バンクのそれぞれを枝刈りすることと、枝刈りされたバンクに基づいて、畳込み層の出力テンソルを構築することとを備える動作を1つまたは複数のプロセッサに実行させるように構成することができる。
本明細書で開示されたシステム、方法、および非一時的なコンピュータ可読媒体のこれら特徴および他の特徴、ならびに構造の関連要素の動作方法および機能、部品の組合せ、および製造の経済性は、以下の説明および添付の特許請求の範囲を、添付の図面を参照して考慮するとより明らかになり、添付の図面のすべては、本明細書の一部を形成しており、同一の参照番号が、様々な図において、対応する部分を示している。しかしながら、図面は、例示および説明のみの目的のためであり、本発明の境界の定義として意図されていないことが明確に理解されるべきである。
本明細書で説明されている実施形態は、ニューラル・ネットワークにおいて、ワークロードが平準化された活性化スパース性を用いた畳込みのための方法、システム、装置を提供する。畳込み処理は、入力データから特徴を抽出するための、基本的ではあるが計算コストのかかる演算を称することができる。畳込み処理は通常、ニューラル・ネットワーク内の畳込み層で行われる。畳込み層への入力データは、画像もしくはオーディオ波から導出された特徴マップ、または前の層から受け取られた活性化テンソルを含む場合があり、入力テンソルと称することができる。畳込み層の出力は、出力テンソルと称することができる。いくつかの実施形態では、入力テンソルおよび出力テンソルは、両方とも活性化と称することができる。入力テンソルは、複数チャネルの特徴マップを備えることができる。たとえば、RGB画像は3つのチャネル(赤チャネル、緑チャネル、青チャネル)を有する入力テンソルとして表すことができ、各チャネルは、特徴マップ(たとえば、元のRGB画像と同じサイズのグレースケール画像であるが、赤、緑、青のいずれか1つの色だけで構成されている)を備えている。入力テンソルから特徴を抽出するために、1つまたは複数の特徴抽出器(重みテンソルまたはフィルタとも呼ばれる)を、入力テンソルに、畳込み(たとえば、スライドまたは移動)方式で適用できる。特徴検出器(重みテンソルまたはフィルタ)と、入力テンソルとの間の積和(MAC)演算は、各畳込みステップ中に実行することができる。畳込みステップから生成された出力は、その後、組み立てられて、畳込み層の出力テンソルを形成することができる。出力テンソルは、ニューラル・ネットワークにおける次の層の入力テンソルとなることができる。場合によっては、複数の入力テンソルを1つの畳込み層で処理することができる。
畳込み処理中に、計算コストを削減し、推論速度を向上させるために、多数のゼロを導入することで、入力テンソルおよび/または重みテンソルを枝刈りまたはスパース化することができる。たとえば、50%を上回る、入力テンソルにおける値をゼロに設定することができる。畳込み処理は通常、並列処理フレームワーク(プロセッサ、コア、または別のタイプの処理エンティティのクラスタ)で実行されるため、入力テンソルの非構造化された、または不均衡な枝刈りにより、処理エンティティ(PE)間でのワークロードの不均衡をもたらす可能性があり、これは、システムのスケーラビリティとパフォーマンスの低下につながる可能性がある。したがって、入力テンソルの枝刈りの重要な目標は、並列畳込み中に、処理ユニット間のワークロードを平準化することを含むことができる。
いくつかの実施形態では、入力テンソルを、最初に、畳込み処理に参加するために利用可能なPEの数に従って、複数のサブ・テンソルにセグメント化することができる。サブ・テンソルのそれぞれは、複数のPEのうちの1つのPEに割り当てられ、PEのローカル・メモリ/バッファからスワップ・アウトすることなく、(NNにおける複数の畳込み層に対応する)複数の畳込み処理全体にわたってそこに留まることができる。各畳込み処理の後、入力としてPEに割り当てられたサブ・テンソルを更新することができ、次の畳込み処理のための入力として使用することができる出力に展開することができる。いくつかの実施形態では、更新されたサブ・テンソルは、メモリ管理の目的で一時的にPEからスワップ・アウトされ、次の反復のために戻されてスワップ・インすることができる。
いくつかの実施形態では、重みテンソルのそれぞれを、複数の重みグループにセグメント化することができ、そのそれぞれを、複数のPEのうちの1つのPEに格納して、割り当てられたサブ・テンソル(入力テンソルの一部)を用いて、ローカルMAC演算を実行することができる。いくつかの実施形態では、他のサブ・テンソルと畳み込むために、畳込み処理が完了するまで、複数の重みグループを複数のPE間で回転させることができる。複数のPEからの出力値は、途中で累積され、最終的には、畳込み処理の出力テンソルとして組み立てられる。
上記で説明されたセグメント化および並列処理スキームは、非常にスケーラブルでもある。いくつかの実施形態では、並列処理の各ラウンド(反復とも呼ばれる)は、複数の部分和を生成することができ、複数のPEは、複数のラウンドに対して並列処理を実行して、各ラウンドで生成された部分和を累積し、累積された結果を、出力テンソルとして組み立てることができる。いくつかの実施形態では、複数のラウンドにわたって各PEによって生成された部分和は、他のPEとデータを交換する必要なしに、出力テンソルの一部を生成するために(各PE内で)直接累積できる。
以下の説明では、本発明の特定の非限定的な実施形態が、図面を参照して説明される。本明細書で開示された任意の実施形態の特定の特徴および態様は、本明細書で開示された任意の他の実施形態の特定の特徴および態様と使用できる、および/または、組み合わせることができる。また、そのような実施形態は一例であり、単に本発明の範囲内の少数の実施形態しか説明していないことも理解されるべきである。本発明に関連する当業者にとって明らかな様々な変更および修正は、添付の特許請求の範囲でさらに定義される本発明の精神、範囲および企図内であるとみなされる。
図1は、様々な実施形態による、例示的な畳込みニューラル・ネットワーク(CNN)を示している。CNNは、画像理解、音声認識、ゲームプレイ、ロボット工学を含む様々なアプリケーションにおいて広く使用されており、畳込み演算が行われる畳込み層を含む層の深い階層を適用する場合がある。CNNは、例示目的でのみ使用されており、本明細書で開示された実施形態は、畳込み演算を伴う他のニューラル・ネットワークに適用できることに留意されたい。
図1に示される例示的なニューラル・ネットワーク100は、第1の畳込み層120と第1のReLU(ランプ関数)層、第1のプーリング層130、第2の畳込み層140と第2のReLU層、第2のプーリング層150、平坦化層160、および全結合(FC)層170のような複数の層を備えている。この例示的なニューラル・ネットワーク100は、所与の画像におけるアルファベットを、複数の知られているアルファベット・クラスと照合するようにトレーニングすることができる。図1に示すように、文字付き画像110がニューラル・ネットワーク100に入力され、複数の層を介して変換される。最後の層(FC層170)は、最終的に、入力画像110における文字と、知られているアルファベット・クラスのそれぞれとの間の類似性を表す複数のスコアを生成する。
いくつかの実施形態では、入力画像110を、最初に入力テンソルに変換することができる。例として、入力画像110が、32*32ピクセルを含んでおり、各ピクセルが、3つのカラー・チャネル(赤、緑、青)を有する場合、その対応する入力テンソルは、高さが32で、幅が32で、深さ(たとえば、チャネル数)が3の、32*32*3のサイズを有することができる。説明を簡単にするために、3次元サイズは、HWCフォーマットと呼ばれることがあり、ここで、Hは、入力テンソルの高さ(たとえば、前の画像の例では32)を称し、Wは、入力テンソルの幅(たとえば、前の画像の例では32)を称し、Cは、入力テンソルにおけるチャネル数(たとえば、前の画像の例では3)を称する。場合によっては、畳込み層に複数の入力テンソルがある場合(たとえば、畳込み層に複数の画像が入力されている場合、または前の層から受け取った複数の入力活性化テンソルがある場合)、各入力テンソルは、NHWC形式で表すことができ、ここで、Nは、入力テンソルのバッチ内の入力テンソルのインデクスを称する。以下の説明では、特に明記しない限り、簡略化のため(たとえば、入力テンソルが1つしかないと仮定して)Nを省略する場合がある。当業者にとって、N>1の場合をカバーするように実施形態を拡張することは明らかであろう。
いくつかの実施形態では、CNNは、複数の畳込み層(たとえば、図1における第1の畳込み層120および第2の畳込み層140)を含むことができる。畳込み層は、入力テンソル(たとえば、元の入力画像、または前の層からの入力テンソル)を、良好な予測/分類を得るために重要な特徴を失うことなく、処理しやすい形態に縮小する。画像処理におけるたとえばエッジ検出器や曲線検出器などの1つまたは複数の特徴検出器が、畳込み層における畳込み処理に関与する場合がある。これらの特徴検出器は、フィルタ、重みテンソル、カーネルと称することができることがあり、これらは、本説明では同じ意味で使用される。フィルタのそれぞれは、入力テンソルと同じ数のチャネルを有することができる。説明を容易にするために、本明細書は、各フィルタおよび入力テンソルが、同じ数のチャネルを有することを表現するために「複数のチャネルを共有する」という用語を使用する。たとえば、入力テンソルは32*32*3行列であり、例示的なフィルタは、3*3*3行列とできる。畳込み処理の詳細な説明は、図2の説明を参照することができる。
いくつかの実施形態では、CNNにおける畳込み層の後に、非線形活性化関数が続き、CNNに非線形性を導入することができる。例示的な非線形活性化関数は、シグモイド、双曲線正接、およびランプ関数(ReLU)を含んでいる。図1に示されるように、ReLU関数(ReLU層とも称することができる)は、畳込み層120および畳込み層140のそれぞれに続く。ReLU関数は、要素ごとの活性化関数を適用して、畳込み層120または畳込み層140によって生成された一部の出力(活性化)をフィルタリングして除去することができる。たとえば、max(0,x)関数を使用して、畳込み出力におけるすべての負の活性化をフィルタリングして除去し、正の活性化のみを次の層に供給することができる。ReLU関数は、出力活性化のサイズを変更することはできないが、後続層における計算効率を向上させるために、負の活性化がすべてゼロにされるので、アクティブなニューロンの数を制限する。
いくつかの実施形態では、CNNは、入力テンソルの次元を削減する様々な計算を提供するために、1つまたは複数のプーリング層を含むこともできる。図1において、ニューラル・ネットワーク100の第1のプーリング層130および第2のプーリング層150はそれぞれ、空間次元(高さおよび幅)に沿って入力テンソルに対してダウン・サンプリング演算を実行できるが、通常、深さの次元(たとえば、チャネルの数)を変更しない。
いくつかの実施形態では、ニューラル・ネットワークにおける全結合(FC)層は、前の層(たとえば、図1におけるプーリング層150、または畳込み層)からの出力によって表される高レベルの特徴の非線形な組合せを学習し、それに従って、クラス・スコアを計算することができる。図1を参照して示すように、プーリング層150からの出力は、最初に(たとえば、平坦化層160において)ベクトルに平坦化されることが可能で、そこから、その空間における固有の非学習関数を、複数のクラスの最終スコアを計算するためにFC層170によって学習することができる。スコアのそれぞれは、入力画像におけるアルファベットと、対応するクラスとの間の定量化された類似性を表すことができる。
図2は、様々な実施形態による、例示的な畳込み処理を示している。ニューラル・ネットワークにおける典型的な畳込み処理は、1つまたは複数の入力テンソルと、複数のフィルタとを受け取り(または、取得し)、畳込み処理を実行して1つまたは複数の出力テンソルを生成することで開始することができる。簡略化のために、図2における例示的な畳込み処理220は、1つの入力テンソル222、1つのフィルタ224、および1つの出力テンソル225を含んでいる。入力テンソル222を、その高さ(H)、幅(W)、およびチャネル数(C)によって表すことができる。図2に示されるように、入力テンソル222は、高さ3、幅3、およびチャネル数3の3*3*3行列であることができる。各チャネルにおける入力テンソル222の高さと幅(たとえば、3(H)*3(W))は、2D入力特徴マップと称することができる。{h,w,c}のタプルは、チャネルcにおける2D入力特徴マップの1つの要素を指すことができる。たとえば、{2,1,1}は、チャネル1における2D入力特徴マップの要素を指すことができ、その位置は{2,1}によって定義される(たとえば、高さ方向のインデクスは2、幅方向のインデクスは1である)。フィルタ224は、その高さ(R)、幅(S)、およびチャネル数(C)によって表すことができる。図2において、フィルタ224は、1*1*3行列であることができる。各チャネルにおけるフィルタ224の高さと幅(たとえば、1(R)*1(S))は、カーネルと称することができる(フィルタ224は、3つのチャネルにそれぞれ3つのカーネルを有する)。
シナリオによっては、畳込み処理が、ストライドおよびパディングを含むことができる。たとえば、ストライドが1である場合、フィルタは、一度に1ピクセル畳込み(たとえば、移動、スライド)を行い、ストライドが2である場合、フィルタは、スライドしながら一度に2ピクセル畳込みを行う。ストライドが大きいほど、空間的に小さい出力テンソルを生成する(出力テンソルにおけるH*Wが小さくなる)。別の例として、フィルタの空間サイズ(高さ*幅)が1*1より大きい(たとえば、3*3、または5*5)場合、入力テンソルは、フィルタを適用し、出力テンソルの空間サイズを制御するために、たとえば、入力と出力の高さおよび幅が同じになるように、入力テンソルの空間サイズを保存するために、境界の周囲をゼロでパディングすることができる。図2では、入力テンソル222に対してパディングは実行されず、ストライドは1であると仮定されている。
図2に示す畳込み処理220中に、フィルタ224と、入力テンソルの第1の深さ方向スライス223などの各深さ方向のスライスに対してMAC演算が実行され、ドット積228などのドット積が生成される。たとえば、入力テンソル222の第1の深さ方向スライス223は、入力テンソル222の左上にある1*1*3テンソル(3つの灰色の立方体)である。第1の深さ方向スライス223とフィルタ224との両方が、1*1*3のサイズを有する。MAC演算の後、生成されたドット積228を、出力テンソル225の一部として組み立てることができる。したがって、出力テンソル225を、フィルタ224が入力テンソル222におけるすべての深さ方向のスライス(図2における9つのスライス)を通して畳込み(たとえば、移動)した後に決定することができる。出力テンソル225におけるチャネルの数は、畳込み中に適用されたフィルタの数に等しい。畳込み処理220は、1つのフィルタ224しか使用しないので、対応する出力テンソル228は、1つのチャネルしか有していない。
比較すると、畳込み処理260は、2つのフィルタ264、265を含んでいる。入力テンソル262を通してフィルタ264を畳み込むことによって、第1のチャネルにおける出力テンソル268の値(たとえば、チャネル1における2D出力特徴マップ)を決定することができる。入力テンソル262を通してフィルタ265を畳み込むことによって、第2のチャネルにおける出力テンソル268の値(たとえば、チャネル2における2D出力特徴マップ)を決定することができる。したがって、結果として得られる出力テンソル268は、2D出力特徴マップの2つのチャネルを備えている。
畳込み処理中の一部の演算は、並列化できることに留意されたい。たとえば、異なるフィルタが、異なる出力チャネルための2D出力特徴マップを生成するので、あるフィルタで実行されるMAC演算は、別のフィルタのMAC演算とは独立している。別の例として、入力テンソルにおける深さ方向のスライスは、各2D出力特徴マップにおける異なる位置の値を生成するため、互いに独立している。これらすべての演算を、複数の処理エンティティ(たとえば、プロセッサ、コア、またはスレッド)間で並列化できる場合、理論的に理想的な並列処理を実現できる。しかしながら、現実世界のアプリケーションには、多数のフィルタと大量の入力テンソルがある可能性があるため、理論的に理想的な並列処理を追求するには、達成できないコンピューティング能力(たとえば、膨大な数の処理エンティティとメモリ交換機構)を備えたハードウェアが必要になる場合がある。以下の説明で開示される実施形態は、よりスケーラブルで実用的なアプローチである、所与のハードウェアの並列処理能力を十分に活用することによって、理想的な並列処理を達成する方法(および対応するシステム、記憶媒体)を提供する。
図3は、様々な実施形態による、ニューラル・ネットワーク層の例示的な図面300と、重み枝刈りおよび活性化枝刈りの例示的な図面340とを示している。図面300は、ニューラル・ネットワーク層、特に畳込み層の抽象図を示している。図3における畳込み層は、(1)1つまたは複数の入力テンソルの入力値を称することができるx1、x2およびx3として示される複数の入力活性化312(たとえば、入力テンソルにおける入力値)と、(2)フィルタ/重みテンソル/特徴抽出器の重みを指すことができ、W1,1として示される1つまたは複数の重み314と、(3)任意選択で、活性化312を(重み314とともに)調整するための1つまたは複数のバイアス316と、(3)ニューロンが活性化されるべきか否かを判定するための活性化関数318と、(4)y1、y2およびy3として示される複数の出力活性化320(たとえば、出力テンソルにおける出力値)とを含んでいる。図面300は、例示の目的で1つの重み314のみを示しており、より多くの重みを含んでいてもよい。例示的な活性化関数318は、シグモイド、双曲線正接(TanH)、ReLu、または別の適切な活性化関数を含むことができる。
図3における図面340は、重み枝刈り342および活性化枝刈り344を有する例示的なニューラル・ネットワークを示す。重み枝刈り342および活性化枝刈り344は、畳込み処理にスパース性を導入して、エネルギーを削減し、より高いスループットを実現することができる。図示されるように、重み枝刈り342は、入力活性化(たとえば、x1,x2,x3)と重みとの間で実行する必要がある畳込み演算の数が少なくなるように、フィルタにおける非ゼロ重みの数を削減することができる。いくつかの実施形態では、活性化枝刈り344は、出力活性化(たとえば、y1,y2,y3)にマスク(たとえば、t1,t2,t3)を適用することを含むことができる。マスクは、出力活性化の一部をゼロに設定する(たとえば、出力を非活性化する)場合がある。図3において、マスクt2は、出力活性化y2をゼロに設定するが、マスクt1およびマスクt3は、対応する出力活性化y1および出力活性化y3を変更しない。このようにして、結果として得られる出力活性化が、いくつかのゼロ値を含むように枝刈りされ、次の層の計算コストを削減するのに役立てることができる。
しかしながら、図3に示されたマスク・ベースの方法は、非ゼロ出力活性化の平準化(たとえば、均等分配)に失敗する可能性がある。畳込み処理は通常、複数のプロセッサを使用して、並列処理アーキテクチャにおいて実行されるため、出力活性化が不均衡であると、プロセッサ間のワークロードの不均衡が生じ、アーキテクチャのスケーラビリティとスループットを制限する可能性がある。以下の説明では、ワークロードが平準化された活性化枝刈り方法およびアーキテクチャが、例示的な実施形態を用いて説明される。
図4は、様々な実施形態による、ワークロードが平準化された活性化枝刈りの例示的な図面を示す。例示的なニューラル・ネットワーク層400は、図3における例示的なニューラル・ネットワーク層300またはニューラル・ネットワーク層340の別の視点を称することができる。例示的なニューラル・ネットワーク層400は、入力テンソルXと、複数のフィルタ/重みテンソルとの間の畳込み処理で開始することができ、任意選択で、出力活性化を生成する前に、畳込み結果を調整するバイアス層を含むことができる。フィルタW1のうちの1つのフィルタを例にとると、(対応するバイアス・テンソルB1とともに)入力テンソルXとフィルタW1との間の畳込み処理が、出力テンソルY1の一部を生成することができる。
いくつかの実施形態では、出力テンソルY1の一部は、テーブル410として表される密な活性化行列であることができる。行列410は、多数の非ゼロ値を含む可能性があるため、「密」である。いくつかの実施形態では、密行列410は、出力値の1つまたは複数のバンクを構築することによって、平準化されたスパース活性化行列420に枝刈りされることが可能であり、バンクのそれぞれは、同数の非ゼロ出力値を含んでいる。図4に示すように、出力値の2つのバンクを、密行列410の各行に基づいて構築することができる。密行列410の各行は、8つの非ゼロ出力値を含むことができ、2つのバンクは、各バンクが4つの非ゼロ出力値を含むように行を均等に分割することができる。
いくつかの実施形態では、平準化された方式で、活性化を枝刈りするために、各バンクにおける同じ数の出力値が、非ゼロとして保持されることが可能であり、他の出力値を、ゼロに枝刈りすることができる。いくつかの実施形態では、各バンクにおいて非ゼロとして保持される出力値を、上位K個のソート動作によって決定することができる。各バンクにおける上位K個のソート動作では、最大の大きさを有するK個の非ゼロ値を選択して、その値を保持することができ、他の非ゼロ値は、ゼロに設定できる。図4に示されるように、第1のバンクを、密行列410における左上の4つの非ゼロ値(0.2,0.1,-0.4および0.8)を用いて構築することができる。第1のバンクにおける上位2個のソート(たとえば、K=2)は、最大の大きさ(たとえば、絶対値)を有し、この場合は-0.4と0.8である、2つの非ゼロ値を検出することができる。続いて、第1のバンクにおける-0.4および0.8は、そのまま保持されるが、他の値である0.2および0.1はゼロに枝刈りされる。同じ処理が他のバンクで並列的に実行され、平準化されたスパース活性化行列420を生成することができる。
上記で説明された活性化処理を、所望の結果を達成するために様々な手法でカスタマイズすることができる。たとえば、より多くの非ゼロ活性化が好ましい場合には、Kの値を、大きな数に設定することができ、より大きなスパース性が好ましい場合には、小さな数に設定することができる。別の例として、バンクのサイズを、出力テンソルにおいて、非ゼロの活性化がどのように分散されるかを決定するように構成することができる。
説明を明確にするために、層400の出力活性化は、H*W*C出力テンソル430として表すことができ、ここで、Hは、高さの次元、Wは、幅の次元、Cは、チャネルの次元である。いくつかの実施形態では、出力テンソル430の各次元を、グループにセグメント化することができる。たとえば、出力テンソル430のH次元は、各グループをHg(高さグループ)として表す3つのグループに分割することができる。同様に、W次元を、3つのWg(幅グループ)に分割し、C次元を3つのCg(チャネル・グループ)に分割してもよい。図4において、Y1活性化が、出力テンソルの最も右側の面432に対応すると仮定され、したがって、最も右側の面432を、枝刈り前の密な活性化行列410、または枝刈り後の平準化されたスパース活性化行列420として表すことができる。図4は、バンクの1つの例示的な構成を示しており、各Hg*Wg*Cgサブ・テンソルは、バンクを形成している。たとえば、面432の影付きのHg*Wg*Cg部分は、平準化されたスパース行列420の左上のバンクとして表すことができるバンクと称することができる。実施に応じて、Hg,WgおよびCgを、異なる値に設定することによって、バンクは、異なる形状を有することができる。いくつかの実施形態では、Cgは、1より大きい整数(少なくとも2)に構成することができ、Hgは、0より大きい整数に構成することができ、Wgは、0より大きい整数に構成することができる。
図5は、様々な実施形態による、ワークロードが平準化された活性化スパース性を用いた畳込みのための例示的なシステム図面を示している。図5に示されるアーキテクチャは、ニューラル・ネットワークがロードされて実行されるときに推論を実行するように設計されたコンピュータ・システムを備えている。いくつかの実施形態では、そのようなコンピュータ・システムは、ハードウェア・アクセラレータ500として実施される。ハードウェア・アクセラレータ500における一部の構成要素は、特定の手法で連携して、複数の処理エンティティにおける並列畳込み計算を容易にすることによって、ニューラル・ネットワークのスループットおよびエネルギー効率を向上させることができる。アクセラレータ500は単に例示的なものであり、より多い、より少ない、または代替の構成要素を含んでいてもよい。ハードウェア・アクセラレータ500を、フィールド・プログラマブル・ゲートアレイ(FPGA)または特定用途向け集積回路(ASIC)などの再構成可能なデバイスとして設計することができる。
図5に示されるように、ハードウェア・アクセラレータ500は、アクセラレータ500内のワークフローと、ホストCPU510およびダブル・データ・レート(DDR)メモリ520などのオフ・チップ構成要素とのインタラクションを制御するためのスケジューラ570を備えることができる。たとえば、アクセラレータ500は、周辺構成要素相互接続エクスプレス(PCIe)物理層(PHY)コントローラ512を介して、ホストCPU510と、DDRインターフェース530を介して、オフ・チップDDRメモリ520とインタラクトすることができる。アクセラレータ500は、DDRインターフェース530を介してオフ・チップDDRメモリ520と通信する、ダイレクト・メモリ・アクセス(DMA)コントローラ540を介して、オフ・チップDDRメモリ520からデータをフェッチすることができる。フェッチされたデータを、並列畳込み計算の準備として、グローバル・バッファ550と呼ばれるオン・チップ・バッファに格納することができる。グローバル・バッファ550を、入力バッファ552、重みバッファ554、および出力バッファ556などの複数のセクションに論理的に分割することができる。入力バッファ552は、入力テンソルに関連付けられたデータを格納することができ、重みバッファ554は、フィルタに関連付けられたデータを格納することができ、出力バッファ556は、畳込み計算の結果(たとえば、出力テンソル)に関連付けられたデータを格納することができる。グローバル・バッファ550は、スパース処理ユニット(SPU)562のアレイ560とデータを交換して、畳込み計算を実行することができる。SPUの名前における「スパース」は、SPUアレイ560が、スパース性(たとえば、スパース入力テンソル、および/またはスパース・フィルタ)を伴う畳込み計算を効率的に実行するように特別に設計されていることを示す。SPU562のそれぞれは、複数の処理エンティティ(PE)580を備えることができ、各PE580は、単位量の畳込み計算を処理することができる。
いくつかの実施形態では、SPU562のそれぞれは、内部の複数のPE580によって実行される畳込み計算の出力値を枝刈りするためのモジュールをさらに備えることができる。たとえば、図5における「Dense2Sparsity」モジュール564は、以下の方法、すなわち、(複数のPE580によって生成された)複数の出力値に基づいて、出力値の1つまたは複数のバンクを構築することであって、バンクのそれぞれは、1つまたは複数の複数の出力値を備える、構築することと、バンクのそれぞれについて、バンクにおける1つまたは複数の出力値に対して上位K個のソートを実行して、K個の非ゼロ出力値を取得することであって、ここで、Kはゼロより大きい正の整数である、取得することと、バンクにおいて取得されたK個の非ゼロ出力値以外の1つまたは複数の出力値をゼロに設定することによって、バンクのそれぞれを枝刈りすることとを使用して、複数のPE580からの出力値を枝刈りすることができる。いくつかの実施形態では、1つのKが、ニューラル・ネットワークにおける1つの層に対応することができる。つまり、ニューラル・ネットワークにおける異なる層は、異なるK個の値を有することができる。層のためのK個の値を、機械学習を通じて学習することができる。
いくつかの実施形態では、1つまたは複数のバンクは、サイズが等しく(たとえば、各バンクは、同じ数の出力値を含み)、枝刈り後に、同数の非ゼロの出力値を含むことができる。各バンクにおける非ゼロ出力値の位置は、ランダムであってもよいが、各バンクにおける非ゼロ出力値の総数(たとえば、1より大きい整数K)は、同じであってもよい。
図6Aは、様々な実施形態に従って、ワークロードが平準化された活性化スパース性を有する出力テンソルを生成するための例示的なシステム・アーキテクチャ600を示している。例示的なシステム・アーキテクチャ600は、畳込み計算を並列的に実行するように構成された複数のPE630と、複数のPE630によって生成された出力(たとえば、部分和)への加算を実行するように構成された加算器ツリー640と、加算器ツリー640によって生成された出力(たとえば、出力テンソルに組み立てられる出力値)を累積するように構成された累積バッファ650と、累積バッファ650によって累積された出力を枝刈りするように構成された上位K個のソーティング・デバイス660とを含むことができる。上位K個のソーティング・デバイス660によって実行される枝刈り処理は、平準化された方式で分散された非ゼロ活性化を有するスパース出力活性化680を生成することができる。いくつかの実施形態では、上位K個のソーティング・デバイス660は、図5における「Dense2Sparsity」モジュール564に対応することができる。いくつかの実施形態では、加算器ツリー640は、デバイスの一部またはスタンドアロン・デバイスを称することができる。
以下の説明では、畳込み層における例示的な畳込み処理を使用して、ワークロードが平準化された活性化スパース性を用いた出力テンソルが、畳込み層のためにどのように生成されるかを説明する。いくつかの実施形態では、例示的な畳込み処理は、入力テンソル610および重みテンソル620に基づいて積和(MAC)演算を並列的に実行するために、畳込み層において、入力テンソル610、および1つまたは複数の重みテンソル620を、複数のプロセッサ(PE630)に割り当てることで開始することができる。
いくつかの実施形態では、入力テンソル610は、複数のサブ・テンソルにセグメント化され、複数のPE630に割り当てられることが可能であり、重みテンソル620は、複数の重みグループにセグメント化され、同様に、複数のPE630に割り当てられることが可能である。いくつかの実施形態では、サブ・テンソルおよび重みグループの「割当て」は、サブ・テンソルおよび重みグループをPE630の内部バッファに格納することを称することができる。
いくつかの実施形態では、割り当てられたサブ・テンソルおよび重みグループを受け取った後、複数のPE630は、MAC演算を並列的に実行して、複数の部分和を取得することができる。これらの部分和は、加算器ツリー640に供給されて、1つまたは複数の出力値を取得することができ、これらの出力値を、累積し、累積バッファ650に格納することができる。累積バッファ650における出力値が、フル・バンクを形成するのに十分である場合、出力値を、枝刈りのために上位K個のソーティング・デバイス660に供給することができる。いくつかの実施形態では、バンクのサイズは予め定められている。バンクの例示的な構成は、図4における説明を参照することができる。いくつかの実施形態では、累積バッファ650における出力値の一部を、加算器ツリー640にフィードバックして、PE630によって新たに生成された部分和に加算することができる。いくつかの実施形態では、出力値のフル・バンクが、上位K個のソーティング・デバイス660に供給されるとき、コントローラまたはスケジューラ(たとえば、図5におけるスケジューラ570)は、バンク670の対応するインデクスを、上位K個のソーティング・デバイス660に送信することができる。出力値の複数のバンクが、上位K個のソーティング・デバイス660に供給される場合、コントローラまたはスケジューラは、バンク・インデクス670の配列を、上位K個のソーティング・デバイス660に送信することができる。
入力テンソル610/重みテンソル620のセグメント化の粒度と、バンクのサイズとに応じて、累積バッファ650は、異なるレートで出力値のフル・バンクを生成することができる。いくつかの実施形態では、複数のPE630は、累積バッファ650が出力値の1つのフル・バンクを累積するために、(並列処理サイクルとも呼ばれる)複数のサイクルにわたって並列畳込み処理を実行する必要がある場合がある。いくつかの実施形態では、累積バッファ650は、各並列処理サイクル中に、複数のPE630によって生成された部分和に基づいて、出力値の1つまたは複数のフル・バンクを累積することができる。
セグメント化の粒度と、フル・バンクの生成レートとの間の関係の説明を単純化するために、入力テンソルが1つだけ存在し、バンク・サイズがKで示されると仮定される。たとえば、各並列処理サイクル中に、PEが、1つの重みテンソルと、対応する入力値とを並列的に取り扱う場合、出力値の1つのフル・バンクを、K個の並列処理サイクルごとに累積することができる。別の例として、PEが各並列処理サイクル中に、K個の重みテンソルと、対応する入力値とを並列的に取り扱う場合、出力値の1つのフル・バンクを、並列処理サイクルごとに生成することができる。さらに別の例として、PEが各並列処理サイクル中にN*K個の重みテンソルと、対応する入力値とを並列的に取り扱う場合、出力値のN個のフル・バンクを、各並列処理サイクルに対して生成することができる。
いくつかの実施形態では、上位K個のソーティング・デバイス680は、バンクにおける出力値の大きさに対して、上位K個のソーティング・ロジックを実行して、最大の大きさを有するK個の出力値を取得する。上位K個ソーティング・ロジックを、以下のソフトウェア・ソーティング・アルゴリズム、すなわち、ヒープ・ソーティング・アルゴリズム、マージ・ソーティング・アルゴリズム、クイック・ソーティング・アルゴリズム、別の適切なソーティング・アルゴリズムのうちの少なくとも1つと組み合わされたハードウェア・ベースのビットニック・ソータによって実施することができる。いくつかの実施形態では、K個の出力値を、そのまま(たとえば、元の非ゼロ値として)保持することができ、他の出力値を、ゼロとして枝刈りすることができる。各バンクが、N個の出力値を有すると仮定すると、上記で説明された枝刈り処理が、最大の大きさのK個の非ゼロ値と、(N-K)個のゼロ値とを、各バンクに残すことができる。スパース性をバンクに取り込み、非ゼロ出力値(非ゼロ活性化)を、平準化された方式で分散することにより、バンクから組み立てられた出力活性化は、次の畳込み層のために、ワークロードが平準化された活性化スパース性を用いた入力テンソルを提供することができる。
いくつかの実施形態では、枝刈りされたバンクを、畳込み層の出力テンソルを構築するために組み立てることができる。出力テンソルは、スパース性があり、かつ平準化されている(たとえば、非ゼロの活性化は、バンク間で平準化された方式で分散されている)。これは、複数のPEがワークロードを均等に分散できるようにすることによって、次の畳込み層における並列畳込み処理に利益をもたらす。
図6Bは、様々な実施形態による、ワークロードが平準化された活性化スパース性を有する出力テンソルを生成するための例示的なフローチャートを示している。図6におけるフローチャートは、1つの並列処理サイクル中の、畳込み層における畳込み処理の簡略化されたバージョンを説明している。簡略かつ明瞭化のために、H*W*C個の入力テンソル610が、すでに4つのHg*Wg*Cg個の入力サブ・テンソル(たとえば、図6における入力テンソル610の網掛け領域)にセグメント化されており、重みグループ620が、入力サブ・テンソルと同じ次元を共有する4つの重みテンソルを含んでおり、MAC演算を並列的に実行するために利用可能な、4つのPE630があると仮定する。これらの仮定は、実際の使用の場合に応じて、緩和または変更される場合があり、それに従って、ワークフローに必要な調整を実施することができる。
いくつかの実施形態では、1つの並列処理サイクル中に、PE630のそれぞれは、重みグループ620において、1つの入力サブ・テナーおよび1つの重みテンソルを取り扱うことができる。ここで、「取り扱う」とは、入力サブ・テンソルにおける入力値と、重みテンソルにおける重みとの間でMAC演算を実行することを称することができる。PE630は、ローカルMAC演算を並列的に実行することができる。いくつかの実施形態では、PE630は、MAC演算の後に、複数の部分和を生成することができる。これらの部分和は、加算器ツリー・デバイス632に供給されて、複数の部分和をともに加算して出力値を取得するなど、必要な加算を実行することができる。いくつかの実施形態では、加算器ツリー・デバイス632によって生成された出力値を、累積のために累積バッファ634に供給することができる。累積バッファ634は、出力値を累積し続けて、出力値のフル・バンク640を生成することができる。いくつかの実施形態では、バンクのサイズを、予め定めることができる。
いくつかの実施形態では、システム・アーキテクチャ、入力/重みテンソル・セグメント化、およびワークロード分散は、出力値のフル・バンクを生成する効率を向上させる手法で構成することができる。図6に示される例では、各PE630は、入力サブ・テンソルと重みテンソルとの1つの組合せを取り扱い、これは、並列処理サイクル中、1つの出力値を生成し、4つのPE630から生成された4つの出力値は、並列処理サイクル中に、1つのバンク640を形成することができる。このようにして、図6における例示的なセットアップが、各並列処理サイクル後に出力値の1つのバンク640を生成する。いくつかの実施形態では、重みテンソルおよび/または入力サブ・テンソルを、入力テンソル610と、重みグループ620との間の畳込み処理が終了するまで、複数の並列処理サイクルの間、PE630間で回転することができる。複数の並列処理サイクル中にPE630によって生成された複数のバンクを、畳込み層の出力テンソルを形成するために枝刈りして、組み立てることができる。
いくつかの実施形態では、出力値のバンク640を、枝刈りのために上位K個のソート構成要素642に供給することができる。上位K個のソート構成要素642は、バンク640における出力値に対して上位K個のソート動作を実行して、最大の大きさ(たとえば、絶対値)を有するK個の出力値を識別することができる。実施に応じて、上位K個のソート構成要素642、加算器ツリー632、および累積バッファ634を、別個のデバイスとして、または統合されたデバイスの一部として実装することができる。これらのK個の出力値は、それらの値を保持することができ、バンク640における他の出力値を、ゼロに枝刈りすることができる。たとえば、図6における累積バッファ634から生成されたバンク640は、4つの非ゼロ出力値(網掛け)を含むことができ、上位2個のソートが実行された後、スパース・バンク650に枝刈りすることができる。上位2個のソートは、4つの出力値のうち最大の大きさを有する2つを特定し、他の2つの値をゼロに設定することができる。
いくつかの実施形態では、バンク640が、上位K個のソート動作によって、スパース・バンク650内に枝刈りされた後、結果/スパース・バンク650内のK個の非ゼロ値は、その中に均等に分散される必要がない場合がある。しかしながら、各スパース・バンク650は、同数の非ゼロ出力値(活性化)を含むため、すべてのスパース・バンクに基づいて組み立てられた出力テンソルは平準化され、スパースになる。スパース出力テンソルが、次の畳込み層の入力テンソルになるとき、畳込みを並列的に実行するために、複数のPEに、平準化されたワークロードを割り当てることができる(たとえば、各PEは、各並列処理サイクル中に、同数の非ゼロ入力値を受け取る)。
図7は、様々な実施形態による、ワークロードが平準化された活性化スパース性を用いた畳込みのための例示的な方法を示している。方法700は、リソース割当てを最適化するためのデバイス、装置、またはシステムによって実行することができる。方法700は、図5におけるハードウェア・アクセラレータ500など、図1~図6によって示される環境またはシステムの1つまたは複数のモジュール/構成要素によって実行することができる。以下に提示される方法700の動作は、例示を目的としている。実施に応じて、方法700は、様々な順序でまたは並列的に実行される追加のステップ、より少ないステップ、または代替のステップを含むことができる。
ブロック710は、畳込み層における入力テンソルおよび重みテンソルを複数のプロセッサに割り当てて、入力テンソルおよび重みテンソルに基づいて、積和(MAC)演算を並列的に実行することを含んでいる。いくつかの実施形態では、畳込み層における入力テンソルおよび重みテンソルを複数のプロセッサに割り当てることは、ニューラル・ネットワークにおける畳込み層において、入力テンソルおよび複数の重みテンソルを取得することと、入力テンソルを複数のサブ・テンソルにセグメント化し、複数のサブ・テンソルを複数のプロセッサに割り当てることと、複数の重みテンソルを複数の重みグループにセグメント化し、複数の重みグループを複数のプロセッサに割り当てることとを備えている。いくつかの実施形態では、複数のサブ・テンソルおよび複数の重みグループを複数のプロセッサに割り当てることは、複数のプロセッサのそれぞれについて、複数のサブ・テンソルのうちの1つまたは複数のサブ・テンソル、および複数の重みグループのうちの1つまたは複数の重みグループをプロセッサの内部バッファに格納することを備えている。
いくつかの実施形態では、複数の重みグループを複数のプロセッサに割り当てることは、複数の並列処理サイクルのそれぞれの間に、複数のサブ・テンソルと、複数の重みグループのうちの1つまたは複数の重みグループとに基づいて、複数の重みグループのうちの1つまたは複数の重みグループを、複数のプロセッサがMAC演算を並列的に実行するために、複数のプロセッサに割り当てることを備えている。いくつかの実施形態では、1つまたは複数のバンクのそれぞれは、複数の重みグループのうちの1つの重みグループに基づいて生成された出力値に対応する。
ブロック720は、MAC演算の結果に基づいて複数の出力値を取得することを含んでいる。いくつかの実施形態では、MAC演算の結果に基づいて複数の出力値を取得することは、複数の並列処理サイクルのそれぞれの間に、複数のプロセッサによって実行されたMAC演算の結果として、複数の部分和を取得することと、複数の部分和を、加算器ツリー・デバイスに供給して、1つまたは複数の出力値を取得することと、複数の並列処理サイクルのうちの1つまたは複数の並列処理サイクルの間、1つまたは複数の出力値を累積バッファに格納して、複数の出力値を取得することとを備えている。
ブロック730は、複数の出力値に基づいて、出力値の1つまたは複数のバンクを構築することを含んでおり、バンクのそれぞれは、複数の出力値のうちの1つまたは複数の出力値を備えている。いくつかの実施形態では、バンクのそれぞれは、ゼロより大きい高さ次元と、ゼロより大きい幅次元と、1より大きいチャネル次元とを備えている。いくつかの実施形態では、方法はさらに、バンクのそれぞれにおけるK個の非ゼロ出力値を、K個の多次元ベクトルとしてそれぞれ表すことを備えており、K個の多次元ベクトルのそれぞれは、非ゼロ出力値と、バンク内の非ゼロ出力値の対応するチャネル次元識別子とを備えている。いくつかの実施形態では、枝刈りされたバンクに基づいて畳込み層の出力テンソルを構築することは、バンクのそれぞれのK個の多次元ベクトルを組み立てて、出力テンソルを形成することを備えている。
ブロック740は、バンクのそれぞれについて、バンクにおける1つまたは複数の出力値に対して上位K個のソートを実行して、K個の出力値を取得することを含んでおり、ここで、Kは、正の整数である。いくつかの実施形態では、バンクにおける出力値に対して上位K個のソートを実行して、K個の出力値を取得することは、バンクにおける出力値の大きさに対して上位K個のソートを実行して、K個の出力値を取得することを備えている。
ブロック750は、各バンクにおいて取得されたK個の出力値以外の1つまたは複数の出力値をゼロに設定することによって、バンクのそれぞれを枝刈りすることを含んでいる。
ブロック760は、枝刈りされたバンクに基づいて、畳込み層の出力テンソルを構築することを含んでいる。いくつかの実施形態では、枝刈りされたバンクのそれぞれは、バンク識別子に関連付けられており、枝刈りされたバンクに基づいて畳込み層の出力テンソルを構築することは、対応するバンク識別子に基づいて、バンクのそれぞれのK個の多次元ベクトルを組み立てて、出力テンソルを形成することを備えている。いくつかの実施形態では、出力テンソルは、スパース・テンソルである。
図8は、本明細書で説明されている実施形態のいずれかを実施することができる例示的なコンピューティング・デバイスを示している。コンピューティング・デバイスを、図1~図7に示されるシステムおよび方法の1つまたは複数の構成要素を実施するために使用することができる。コンピューティング・デバイス800は、情報を通信するためのバス802または他の通信機構と、情報を処理するためにバス802に結合された1つまたは複数のハードウェア・プロセッサ804とを備えることができる。ハードウェア・プロセッサ804は、たとえば、1つまたは複数の汎用マイクロプロセッサとすることができる。
コンピューティング・デバイス800はまた、プロセッサ804によって実行される情報および命令を格納するためにバス802に結合された、ランダム・アクセス・メモリ(RAM)、キャッシュおよび/または他のダイナミック記憶デバイスなどのメイン・メモリ807をも含むことができる。メイン・メモリ807はまた、プロセッサ804によって実行される命令の実行中に、一時変数または他の中間情報を格納するために使用することができる。そのような命令は、プロセッサ804へアクセス可能な記憶媒体に格納されると、コンピューティング・デバイス800を、命令で指定された動作を実行するようにカスタマイズされた専用マシンにすることができる。メイン・メモリ807は、不揮発性媒体および/または揮発性媒体を含むことができる。不揮発性媒体は、たとえば、光ディスクまたは磁気ディスクを含むことができる。揮発性媒体は、ダイナミック・メモリを含むことができる。一般的な媒体の形態は、たとえば、フロッピー・ディスク、フレキシブル・ディスク、ハード・ディスク、ソリッド・ステート・ドライブ、磁気テープ、または他の任意の磁気データ記憶媒体、CD-ROM、他の任意の光学データ記憶媒体、穴のパターンを有する任意の物理媒体、RAM、DRAM、PROM、EPROM、FLASH(登録商標)-EPROM、NVRAN、他の任意のメモリ・チップまたはカートリッジ、またはこれらのネットワーク化されたバージョンを含むことができる。
コンピューティング・デバイス800は、カスタマイズされたハード・ワイヤ・ロジックと、1つまたは複数のASICまたはFPGAと、ファームウェアと、および/または、コンピューティング・デバイスと組み合わされて、コンピューティング・デバイス800を専用マシンにするか、またはプログラムできるプログラム・ロジックとを使用して、本明細書で説明されている技法を実施することができる。1つの実施形態によれば、本明細書に記載された技法は、プロセッサ804が、メイン・メモリ807に含まれる1つまたは複数の命令の、1つまたは複数のシーケンスを実行することに応答して、コンピューティング・デバイス800によって実行される。そのような命令は、記憶デバイス809などの別の記憶媒体からメイン・メモリ807に読み込むことができる。メイン・メモリ807に含まれる一連の命令を実行すると、プロセッサ804は、本明細書で説明されている処理ステップを実行することができる。たとえば、本明細書で開示された処理/方法を、メイン・メモリ807に格納されたコンピュータ・プログラム命令によって実施することができる。これらの命令は、プロセッサ804によって実行されると、対応する図に示され上記で説明されたステップを実行することができる。代替実施形態では、ソフトウェア命令の代わりに、またはソフトウェア命令と組み合わせて、ハード・ワイヤ回路構成を使用することができる。
コンピューティング・デバイス800は、バス802に結合された通信インターフェース810も含んでいる。通信インターフェース810は、1つまたは複数のネットワークに接続された1つまたは複数のネットワークリンクに結合する双方向データ通信を提供することができる。別の例として、通信インターフェース810は、互換性のあるLAN(またはWANと通信するWAN構成要素)へのデータ通信接続を提供するローカル・エリア・ネットワーク(LAN)カードとすることができる。ワイヤレスリンクを実施することもできる。
特定の動作のパフォーマンスを、プロセッサ間で分散することができ、単一のマシン内に存在するだけでなく、多数のマシン間で展開することもできる。いくつかの例示的な実施形態では、プロセッサ、またはプロセッサによって実施されるエンジンを、単一の地理的位置(たとえば、家庭環境、オフィス環境、またはサーバ・ファーム内)に配置することができる。他の例示的な実施形態では、プロセッサ、またはプロセッサによって実施されるエンジンを、多数の地理的位置にわたって分散することができる。
前のセクションで説明された処理、方法、およびアルゴリズムのそれぞれを、コンピュータ・ハードウェアを備えている1つまたは複数のコンピュータ・システムまたはコンピュータ・プロセッサによって実行されるコード・モジュールにおいて具現化することができ、このコード・モジュールによって完全にまたは部分的に自動化することができる。処理およびアルゴリズムを、特定用途向け回路構成において、部分的または全体的に実施することができる。
本明細書で開示された機能が、ソフトウェア機能ユニットの形態で実施され、独立した製品として販売または使用される場合、それら機能を、プロセッサ実行可能な不揮発性コンピュータ可読記憶媒体に格納することができる。本明細書で開示された特定の技術的解決策(全部または一部)または現在の技術に貢献する態様を、ソフトウェア製品の形態で具現化することができる。ソフトウェア製品を、(パーソナル・コンピュータ、サーバ、ネットワーク・デバイスなどとすることができる)コンピューティング・デバイスに対して、本願の実施形態の方法のすべてまたは一部のステップを実行させるための多くの命令を備えている記憶媒体に格納することができる。記憶媒体は、フラッシュ・ドライブ、ポータブル・ハード・ドライブ、ROM、RAM、磁気ディスク、光ディスク、プログラム・コードを格納するように動作可能な別の媒体、またはそれら任意の組合せを備えることができる。
特定の実施形態は、プロセッサと、上記で開示された実施形態の任意の方法におけるステップに対応する動作をシステムに実行させるためにプロセッサによって実行可能な命令を格納する非一時的なコンピュータ可読記憶媒体とを備えるシステムをさらに提供する。特定の実施形態は、1つまたは複数のプロセッサによって実行可能な命令で、上記で開示された実施形態の任意の方法におけるステップに対応する動作を1つまたは複数のプロセッサに実行させるように構成された非一時的なコンピュータ可読記憶媒体をさらに提供する。
本明細書で開示された実施形態を、クライアントとインタラクトするクラウド・プラットフォーム、サーバ、またはサーバ・グループ(以下、集合的に「サービス・システム」)によって実施することができる。クライアントは、端末デバイス、またはユーザによってプラットフォームに登録されたクライアントであってもよく、端末デバイスは、モバイル端末、パーソナル・コンピュータ(PC)、および、プラットフォーム・アプリケーション・プログラムをインストールできる任意のデバイスとすることができる。
上記で説明された様々な特徴および処理を、互いに独立して使用することができるか、または、様々な手法で組み合わせることできる。あらゆる可能な組合せおよび部分的な組合せが、本開示の範囲内に含まれることが意図されている。それに加えて、いくつかの実施では、特定の方法または処理ブロックが省略される場合がある。また、本明細書で説明されている方法および処理は、いかなる特定のシーケンスにも限定されず、それに関連するブロックまたは状態は、他の適切なシーケンスで実行することができる。たとえば、説明されたブロックまたは状態は、具体的に開示された順序以外の順序で実行されてもよく、または複数のブロックまたは状態が、単一のブロックまたは状態に結合されてもよい。例示的なブロックまたは状態は、直列、並列、または他の方式で実行することができる。ブロックまたは状態を、開示された例示的な実施形態に対して追加または削除することができる。本明細書で説明されている例示的なシステムおよび構成要素は、説明されたものとは異なるように構成されてもよい。たとえば、開示された例示的な実施形態と比較して、要素を追加したり、削除したり、再配置することができる。
本明細書で説明されている例示的な方法の様々な動作は、少なくとも部分的にアルゴリズムによって実行することができる。アルゴリズムを、メモリ(たとえば、上記で説明された非一時的なコンピュータ可読記憶媒体)に格納されたプログラム・コードまたは命令に含むことができる。そのようなアルゴリズムは、機械学習アルゴリズムを備えることができる。いくつかの実施形態では、機械学習アルゴリズムは、機能を実行するようにコンピュータを明示的にプログラムしないかもしれないが、機能を実行する予測モデルを作成するために、トレーニング・データから学習することができる。
本明細書で説明されている例示的な方法の様々な動作は、関連する動作を実行するように一時的に(たとえば、ソフトウェアによって)構成された、または永続的に構成された、1つまたは複数のプロセッサによって、少なくとも部分的に実行することができる。一時的または永続的に構成されるかに関わらず、そのようなプロセッサは、本明細書で説明されている1つまたは複数の動作または機能を実行するように動作する、プロセッサによって実施されるエンジンを構成することができる。
同様に、本明細書で説明されている方法は、少なくとも部分的にプロセッサによって実施されることが可能であり、特定の1つまたは複数のプロセッサは、ハードウェアの一例である。たとえば、方法の動作の少なくとも一部は、1つまたは複数のプロセッサ、またはプロセッサによって実施されるエンジンによって実行することができる。さらに、1つまたは複数のプロセッサは、「クラウド・コンピューティング」環境において、または「サービスとしてのソフトウェア」(SaaS)として、関連する動作のパフォーマンスをサポートするように動作することもできる。たとえば、動作の少なくとも一部は、(プロセッサを含むマシンの例として)コンピュータのグループによって実行されることが可能であり、これら動作は、ネットワーク(たとえば、インターネット)を介して、および1つまたは複数の適切なインターフェース(たとえば、アプリケーション・プログラム・インターフェース(API))を介してアクセス可能である。
特定の動作のパフォーマンスを、プロセッサ間で分散することができ、単一のマシン内に存在するだけでなく、多数のマシン間で展開することができる。いくつかの例示的な実施形態では、プロセッサ、またはプロセッサによって実施されるエンジンを、単一の地理的位置(たとえば、家庭環境、オフィス環境、またはサーバ・ファーム内)に配置することができる。他の例示的な実施形態では、プロセッサ、またはプロセッサによって実施されるエンジンを、多数の地理的位置にわたって分散することができる。
本明細書全体を通じて、単一の事例として説明された構成要素、動作、または構造を、複数の事例が実施することができる。1つまたは複数の方法の個別の動作は、別個の動作として図示および説明されているが、1つまたは複数の個別の動作は、同時に実行することができ、動作は、図示された順序で実行される必要はない。例示的な構成では、別個の構成要素として提示された構造および機能を、組み合わされた構造または構成要素として実施することができる。同様に、単一の構成要素として提示された構造および機能を、別個の構成要素として実施することができる。これらおよび他の変形、修正、追加、および改良は、本明細書の主題の範囲内に含まれる。
本明細書で使用される場合、「または」は、明示的に別段の指示がない限り、または文脈によって別段の指示がない限り、包括的であり、排他的ではない。したがって、本明細書において、「A、BまたはC」は、明示的に別段の指示がない限り、または文脈により別段の指示がない限り、「A、B、AおよびB、AおよびC、BおよびC、またはA、BおよびC」を意味する。さらに、「および」は、特に明示的に別段の指示がない限り、または文脈により別段の指示がない限り、組合せおよび個別の両方を意味する。したがって、本明細書において、「AおよびB」は、明示的に別段の指示がないか、または文脈により別段の指示がない限り、「AおよびBを、組み合わせて、または個別に」を意味する。さらに、単一の事例として本明細書で説明されているリソース、動作、または構造に対して、複数の事例を提供することができる。それに加えて、様々なリソース、動作、エンジン、およびデータ・ストア間の境界はある程度任意であり、特定の動作は、特定の例示的な構成のコンテキストで示されている。機能の他の割当ても想定されており、本開示の様々な実施形態の範囲内に含まれる可能性がある。一般に、例示的な構成において別個のリソースとして提示された構造および機能を、組み合わされた構造またはリソースとして実施することができる。同様に、単一のリソースとして提示された構造および機能を、別個のリソースとして実施することができる。これらおよび他の変形、修正、追加、および改良は、添付の特許請求の範囲によって表される本開示の実施形態の範囲内に含まれる。したがって、明細書および図面は、限定的な意味ではなく、例示的な意味としてみなされるべきである。
「含む」または「備える」という用語は、その後に宣言された特徴の存在を示すために使用されるが、他の特徴の追加を排除するものではない。特に「できる」、「できた」、「かもしれない」、または「することができる」などの条件付きの文言は、特に別段の記載がない限り、または使用される文脈内で別段理解されない限り、一般に、特定の実施形態は、特定の特徴、要素、および/またはステップを含むが、他の実施形態は含まないことを伝えるように意図されている。したがって、そのような条件付きの文言は、一般に、特徴、要素、および/またはステップが、何らかの形で、1つまたは複数の実施形態のために必要とされること、または、1つまたは複数の実施形態が、ユーザ入力またはプロンプトの有無に関わらず、これらの特徴、要素、および/またはステップが、任意の特定の実施形態に含まれるか、または任意の特定の実施形態において実行されるべきであるかを判断するためのロジックを必ず含むことを示唆するようには意図されていない。
特定の例示的な実施形態を参照して主題の概要を説明したが、本開示の実施形態のより広い範囲から逸脱することなく、これらの実施形態に対して様々な修正および変更を行うことができる。主題のそのような実施形態は、本明細書では、実際には複数の開示または概念が開示されている場合、どの単一の開示または概念に対しても本願の範囲を自発的に限定することを意図することなく、単に便宜上、個別にまたは集合的に、「発明」という用語で称することができる。
本明細書に示される実施形態は、当業者が、開示された教示を実施できるように十分に詳細に説明されている。本開示の範囲から逸脱することなく、構造的および論理的な置換および変更を行うことができるように、他の実施形態を、使用し、そこから派生させることができる。したがって、詳細な説明は、限定的な意味で解釈されるべきではなく、様々な実施形態の範囲は、添付の特許請求の範囲と、そのような特許請求の範囲が権利を有する均等物の全範囲によってのみ定義される。
Claims (20)
- コンピュータによって実施される方法であって、
畳込み層における入力テンソルおよび重みテンソルを複数のプロセッサに割り当てて、前記入力テンソルおよび前記重みテンソルに基づいて、積和(MAC)演算を並列的に実行することと、
前記MAC演算の結果に基づいて、複数の出力値を取得することと、
前記複数の出力値に基づいて、出力値の1つまたは複数のバンクを構築することであって、前記バンクのそれぞれは、前記複数の出力値のうちの1つまたは複数の出力値を備えている、構築することと、
前記バンクのそれぞれについて、前記バンクにおける前記1つまたは複数の出力値に対して上位K個のソートを実行して、K個の出力値を取得することであって、ここで、Kは正の整数である、取得することと、
前記各バンクにおいて前記取得されたK個の出力値以外の、前記1つまたは複数の出力値をゼロに設定することにより、前記バンクのそれぞれを枝刈りすることと、
前記枝刈りされたバンクに基づいて、前記畳込み層の出力テンソルを構築することと
を備えた、方法。 - 畳込み層における入力テンソルおよび重みテンソルを複数のプロセッサに前記割り当てることは、
ニューラル・ネットワークにおける前記畳込み層において、入力テンソルおよび複数の重みテンソルを取得することと、
前記入力テンソルを複数のサブ・テンソルにセグメント化し、前記複数のサブ・テンソルを複数のプロセッサに割り当てることと、
前記複数の重みテンソルを複数の重みグループにセグメント化し、前記複数の重みグループを前記複数のプロセッサに割り当てることと
を備えた、請求項1に記載の方法。 - 前記複数のサブ・テンソルおよび前記複数の重みグループを複数のプロセッサに前記割り当てることは、前記複数のプロセッサのそれぞれについて、前記複数のサブ・テンソルのうちの1つまたは複数のサブ・テンソルと、前記複数の重みグループのうちの1つまたは複数の重みグループとを、前記プロセッサの内部バッファに格納することを備えた、請求項2に記載の方法。
- 前記複数の重みグループを前記複数のプロセッサに前記割り当てることは、
複数の並列処理サイクルのそれぞれの間に、前記複数の重みグループのうちの1つまたは複数の重みグループを前記複数のプロセッサに割り当てて、前記複数のサブ・テンソル、および前記複数の重みグループのうちの前記1つまたは複数の重みグループに基づいて、前記複数のプロセッサが前記MAC演算を並列的に実行することを備えた、請求項2に記載の方法。 - 前記1つまたは複数のバンクのそれぞれは、前記複数の重みグループのうちの1つの重みグループに基づいて生成された出力値に対応する、請求項4に記載の方法。
- 前記MAC演算の結果に基づいて複数の出力値を前記取得することは、
複数の並列処理サイクルのそれぞれの間に、前記複数のプロセッサによって実行された前記MAC演算の結果として、複数の部分和を取得することと、
前記複数の部分和を、加算器ツリー・デバイスに供給して、1つまたは複数の出力値を取得することと、
前記複数の並列処理サイクルのうちの1つまたは複数の並列処理サイクルの間、前記1つまたは複数の出力値を累積バッファに格納して、前記複数の出力値を取得することと
を備えた、請求項1に記載の方法。 - 前記バンクにおける前記出力値に対して上位K個のソートを実行して、K個の出力値を取得することは、
前記バンクにおける前記出力値の大きさに対して上位K個のソートを実行して、前記K個の出力値を取得することを備えた、請求項1に記載の方法。 - 前記バンクのそれぞれは、
ゼロより大きい高さ次元と、
ゼロより大きい幅次元と、
1より大きいチャネル次元と
を備えた、請求項1に記載の方法。 - 前記バンクのそれぞれにおける前記K個の非ゼロ出力値をそれぞれ、K個の多次元ベクトルとして表すことをさらに備えており、前記K個の多次元ベクトルのそれぞれは、非ゼロ出力値と、前記バンク内の前記非ゼロ出力値の、対応するチャネル次元識別子とを備えた、請求項1に記載の方法。
- 前記枝刈りされたバンクに基づいて、前記畳込み層の前記出力テンソルを前記構築することは、
前記バンクのそれぞれの前記K個の多次元ベクトルを組み立てて、前記出力テンソルを形成することを備えた、請求項9に記載の方法。 - 前記枝刈りされたバンクのそれぞれは、バンク識別子に関連付けられており、
前記枝刈りされたバンクに基づいて、前記畳込み層の前記出力テンソルを前記構築することは、
前記対応するバンク識別子に基づいて、前記バンクのそれぞれの前記K個の多次元ベクトルを組み立てて、前記出力テンソルを形成することを備えた、請求項9に記載の方法。 - 前記出力テンソルは、スパース・テンソルである、請求項1に記載の方法。
- システムであって、1つまたは複数のプロセッサと、前記1つまたは複数のプロセッサに結合され、前記1つまたは複数のプロセッサによって実行可能な命令で、
畳込み層における入力テンソルおよび重みテンソルを複数のプロセッサに割り当てて、前記入力テンソルおよび前記重みテンソルに基づいて、積和(MAC)演算を並列的に実行することと、
前記MAC演算の結果に基づいて、複数の出力値を取得することと、
前記複数の出力値に基づいて、出力値の1つまたは複数のバンクを構築することであって、前記バンクのそれぞれは、前記複数の出力値のうちの1つまたは複数の出力値を備えている、構築することと、
前記バンクのそれぞれについて、前記バンクにおける前記1つまたは複数の出力値に対して上位K個のソートを実行して、K個の出力値を取得することであって、ここで、Kは正の整数である、取得することと、
前記各バンクにおいて前記取得されたK個の出力値以外の、前記1つまたは複数の出力値をゼロに設定することにより、前記バンクのそれぞれを枝刈りすることと、
前記枝刈りされたバンクに基づいて、前記畳込み層の出力テンソルを構築することと
を備える動作を前記システムに実行させるように構成された1つまたは複数の非一時的なコンピュータ可読メモリとを備えた、システム。 - 畳込み層における入力テンソルおよび重みテンソルを複数のプロセッサに前記割り当てることは、
ニューラル・ネットワークにおける前記畳込み層において、入力テンソルおよび複数の重みテンソルを取得することと、
前記入力テンソルを複数のサブ・テンソルにセグメント化し、前記複数のサブ・テンソルを複数のプロセッサに割り当てることと、
前記複数の重みテンソルを複数の重みグループにセグメント化し、前記複数の重みグループを前記複数のプロセッサに割り当てることと
を備えた、請求項13に記載のシステム。 - 前記MAC演算の結果に基づいて複数の出力値を前記取得することは、
複数の並列処理サイクルのそれぞれの間に、前記複数のプロセッサによって実行された前記MAC演算の結果として、複数の部分和を取得することと、
前記複数の部分和を、加算器ツリー・デバイスに供給して、1つまたは複数の出力値を取得することと、
前記複数の並列処理サイクルのうちの1つまたは複数の並列処理サイクルの間、前記1つまたは複数の出力値を累積バッファに格納して、前記複数の出力値を取得することと
を備えた、請求項13に記載のシステム。 - 前記バンクにおける前記出力値に対して上位K個のソートを実行して、K個の出力値を取得することは、
前記バンクにおける前記出力値の大きさに対して上位K個のソートを実行して、前記K個の出力値を取得することを備えた、請求項13に記載のシステム。 - 非一時的なコンピュータ可読記憶媒体であって、1つまたは複数のプロセッサによって実行可能な命令で、
畳込み層における入力テンソルおよび重みテンソルを複数のプロセッサに割り当てて、前記入力テンソルおよび前記重みテンソルに基づいて、積和(MAC)演算を並列的に実行することと、
前記MAC演算の結果に基づいて、複数の出力値を取得することと、
前記複数の出力値に基づいて出力値の1つまたは複数のバンクを構築することであって、前記バンクのそれぞれは、前記複数の出力値のうちの1つまたは複数の出力値を備えている、構築することと、
前記バンクのそれぞれについて、前記バンクにおける前記1つまたは複数の出力値に対して上位K個のソートを実行して、K個の出力値を取得することであって、ここで、Kは正の整数である、取得することと、
前記各バンクにおいて前記取得されたK個の出力値以外の、前記1つまたは複数の出力値をゼロに設定することにより、前記バンクのそれぞれを枝刈りすることと、
前記枝刈りされたバンクに基づいて、前記畳込み層の出力テンソルを構築することと
を備える動作を1つまたは複数のプロセッサに実行させるように構成された、非一時的なコンピュータ可読記憶媒体。 - 畳込み層における入力テンソルおよび重みテンソルを複数のプロセッサに前記割り当てることは、
ニューラル・ネットワークにおける前記畳込み層において、入力テンソルおよび複数の重みテンソルを取得することと、
前記入力テンソルを複数のサブ・テンソルにセグメント化し、前記複数のサブ・テンソルを複数のプロセッサに割り当てることと、
前記複数の重みテンソルを複数の重みグループにセグメント化し、前記複数の重みグループを前記複数のプロセッサに割り当てることと
を備えた、請求項17に記載の非一時的なコンピュータ可読記憶媒体。 - 前記MAC演算の結果に基づいて複数の出力値を前記取得することは、
複数の並列処理サイクルのそれぞれの間に、前記複数のプロセッサによって実行された前記MAC演算の結果として、複数の部分和を取得することと、
前記複数の部分和を、加算器ツリー・デバイスに供給して、1つまたは複数の出力値を取得することと、
前記複数の並列処理サイクルのうちの1つまたは複数の並列処理サイクルの間、前記1つまたは複数の出力値を累積バッファに格納して、前記複数の出力値を取得することと
を備えた、請求項17に記載の非一時的なコンピュータ可読記憶媒体。 - 前記バンクにおける前記出力値に対して上位K個のソートを実行してK個の出力値を取得することは、
前記バンクにおける前記出力値の大きさに対して上位K個のソートを実行して、前記K個の出力値を取得することを備えた、請求項17に記載の非一時的なコンピュータ可読記憶媒体。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/091,216 US20220147826A1 (en) | 2020-11-06 | 2020-11-06 | Method and system for convolution with workload-balanced activation sparsity |
US17/091,216 | 2020-11-06 | ||
PCT/CN2021/129141 WO2022095984A1 (en) | 2020-11-06 | 2021-11-05 | Method and system for convolution with workload-balanced activation sparsity |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2024502225A true JP2024502225A (ja) | 2024-01-18 |
Family
ID=81454090
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2023527417A Pending JP2024502225A (ja) | 2020-11-06 | 2021-11-05 | ワークロードが平準化された活性化スパース性を用いた畳込みのための方法およびシステム |
Country Status (7)
Country | Link |
---|---|
US (1) | US20220147826A1 (ja) |
EP (1) | EP4226286A4 (ja) |
JP (1) | JP2024502225A (ja) |
KR (1) | KR20230104235A (ja) |
CN (1) | CN116547643A (ja) |
TW (2) | TWI804041B (ja) |
WO (1) | WO2022095984A1 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP4168944A1 (en) * | 2020-07-21 | 2023-04-26 | The Governing Council of the University of Toronto | System and method for using sparsity to accelerate deep learning networks |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11055063B2 (en) * | 2016-05-02 | 2021-07-06 | Marvell Asia Pte, Ltd. | Systems and methods for deep learning processor |
US11544545B2 (en) * | 2017-04-04 | 2023-01-03 | Hailo Technologies Ltd. | Structured activation based sparsity in an artificial neural network |
US11275996B2 (en) * | 2017-06-21 | 2022-03-15 | Arm Ltd. | Systems and devices for formatting neural network parameters |
US20190392287A1 (en) * | 2018-06-22 | 2019-12-26 | Samsung Electronics Co., Ltd. | Neural processor |
CN111160516B (zh) * | 2018-11-07 | 2023-09-05 | 杭州海康威视数字技术股份有限公司 | 一种深度神经网络的卷积层稀疏化方法及装置 |
CN109948794A (zh) * | 2019-02-28 | 2019-06-28 | 清华大学 | 神经网络结构化剪枝方法、剪枝装置和电子设备 |
WO2020190772A1 (en) * | 2019-03-15 | 2020-09-24 | Futurewei Technologies, Inc. | Neural network model compression and optimization |
US11763156B2 (en) * | 2019-11-15 | 2023-09-19 | Microsoft Technology Licensing, Llc | Neural network compression based on bank-balanced sparsity |
US20200134417A1 (en) * | 2019-12-24 | 2020-04-30 | Intel Corporation | Configurable processor element arrays for implementing convolutional neural networks |
US20220101118A1 (en) * | 2020-09-30 | 2022-03-31 | Moffett Technologies Co., Limited | Bank-balanced-sparse activation feature maps for neural network models |
-
2020
- 2020-11-06 US US17/091,216 patent/US20220147826A1/en active Pending
-
2021
- 2021-11-05 KR KR1020237018879A patent/KR20230104235A/ko unknown
- 2021-11-05 EP EP21888676.0A patent/EP4226286A4/en active Pending
- 2021-11-05 TW TW110141250A patent/TWI804041B/zh active
- 2021-11-05 TW TW112107790A patent/TW202328986A/zh unknown
- 2021-11-05 WO PCT/CN2021/129141 patent/WO2022095984A1/en active Application Filing
- 2021-11-05 CN CN202180075198.8A patent/CN116547643A/zh active Pending
- 2021-11-05 JP JP2023527417A patent/JP2024502225A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
EP4226286A1 (en) | 2023-08-16 |
TW202328986A (zh) | 2023-07-16 |
CN116547643A (zh) | 2023-08-04 |
TW202230228A (zh) | 2022-08-01 |
US20220147826A1 (en) | 2022-05-12 |
EP4226286A4 (en) | 2024-04-10 |
TWI804041B (zh) | 2023-06-01 |
KR20230104235A (ko) | 2023-07-07 |
WO2022095984A1 (en) | 2022-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7450815B2 (ja) | 階層的重み疎畳み込み処理のための方法とシステム | |
US11113601B1 (en) | Method and system for balanced-weight sparse convolution processing | |
US20200151573A1 (en) | Dynamic precision scaling at epoch granularity in neural networks | |
US11567778B2 (en) | Neural network operation reordering for parallel execution | |
JP2024502225A (ja) | ワークロードが平準化された活性化スパース性を用いた畳込みのための方法およびシステム | |
CN115362450A (zh) | 在机器学习作业期间基于改善的存储器压缩传输的相似性的特征重排序 | |
CN118043821A (zh) | 混合稀疏压缩 | |
TWI813414B (zh) | 用於最佳化神經網路訓練之電腦實施之方法、系統及非暫時性電腦可讀取儲存媒體 | |
TWI836405B (zh) | 用於平衡權重稀疏卷積處理之方法、系統及非暫時性電腦可讀儲存媒體 | |
WO2021248433A1 (en) | Method and system for dual-sparse convolution processing and parallelization | |
TW202338668A (zh) | 用於神經網路訓練的稀疏性掩蔽方法 |