JP2022531403A - 指定したバイアスを用いた浮動小数点演算を用いた行列乗算命令のためのシステム及び方法 - Google Patents

指定したバイアスを用いた浮動小数点演算を用いた行列乗算命令のためのシステム及び方法 Download PDF

Info

Publication number
JP2022531403A
JP2022531403A JP2021565039A JP2021565039A JP2022531403A JP 2022531403 A JP2022531403 A JP 2022531403A JP 2021565039 A JP2021565039 A JP 2021565039A JP 2021565039 A JP2021565039 A JP 2021565039A JP 2022531403 A JP2022531403 A JP 2022531403A
Authority
JP
Japan
Prior art keywords
matrix
floating
floating point
processing
point
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
JP2021565039A
Other languages
English (en)
Other versions
JP7430203B2 (ja
Inventor
サルマ,デブジット ダス
マギー,ウィリアム
タルペス,エミル
Original Assignee
テスラ,インコーポレイテッド
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 テスラ,インコーポレイテッド filed Critical テスラ,インコーポレイテッド
Publication of JP2022531403A publication Critical patent/JP2022531403A/ja
Application granted granted Critical
Publication of JP7430203B2 publication Critical patent/JP7430203B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49905Exception handling
    • G06F7/4991Overflow or underflow
    • G06F7/49915Mantissa overflow or underflow in handling floating-point numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/544Methods 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/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • 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
    • 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/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/48Indexing scheme relating to groups G06F7/48 - G06F7/575
    • G06F2207/4802Special implementations
    • G06F2207/4818Threshold devices
    • G06F2207/4824Neural networks

Abstract

マイクロ処理装置システムは、行列計算ユニットと制御ユニットとを備える。行列計算ユニットは、複数の処理要素を含む。制御ユニットは、行列計算ユニットに行列処理装置命令を提供するように構成される。行列処理装置命令は、第1の浮動小数点表現フォーマットを使用してフォーマットされた浮動小数点オペランドを指定する。行列計算ユニットは、浮動小数点オペランドを使用して計算された中間結果値を蓄積する。中間結果値は、第2の浮動小数点表現フォーマットである。【選択図】図1

Description

[関連出願の相互参照]
本出願は、2019年5月3日に出願された「DATA PATH FOR SCALABLE MATRIX NODE ENGINE WITH MIXED DATA FORMATS」と題する米国特許出願第16/403083号の優先権を主張し、さらに2019年5月23日に出願された「SCALABLE MATRIX NODE ENGINE WITH CONFIGURABLE DATA FORMATS」と題する米国特許出願第16/421225号の優先権を主張し、それら開示は、その全体が参照により本明細書に組み込まれる。
機械学習訓練は、データ及び計算集約的な動作である。その処理は面倒で時間がかかり、かなりの量の関連する訓練データと、それを処理するための計算リソースとの両方が必要である。さらに、データ及び計算リソースは、解決される問題の複雑さにつれて増加する一方である。機械学習モデルを訓練するために、高性能CPUは、適切な重みを決定するために、訓練データを使用して複雑な行列演算を実行する。訓練の速度を高めるために、従来のCPUの代わりに、又は従来のCPUに加えて、画像処理装置(GPU)が使用される。GPUは、訓練の一部を並列化することができ、特定の数学演算の最適化に役立つ。しかしながら、GPUは、従来、3次元の世界を2次元のディスプレイ上にレンダリングするなど、画像問題を処理するように設計されている。機械学習に適用される場合、GPUは、それらが提供する計算能力の量に関して、かなりの量の電力が必要である。さらに、GPUによって使用されるデータフォーマット及びデータパイプラインは、機械学習モデルを訓練するためではなく、画像処理のために設計されている。したがって、強力で、計算量が多く、電力効率が良い機械学習訓練システムが必要とされている。そのようなシステムは、処理され得る訓練データの量を大幅に増加させるために、高いデータ帯域幅をサポートする必要がある。さらに、データフォーマット及びデータパイプラインは、訓練データ及び結果として得られる機械学習モデルのために最適化されるべきである。
本発明の様々な実施形態を、以下の詳細な説明及び添付の図面に開示する。
機械学習モデルを訓練するための処理の一実施形態を示す流れ図である。
機械学習モデルを訓練するためのシステムの一実施形態を示すブロック図である。
行列計算を実行するためのノードエンジンの一実施形態を示すブロック図である。
8ビット浮動小数点フォーマットの実施形態を示すブロック図である。
21ビット浮動小数点フォーマットの一実施形態を示すブロック図である。
行列計算を実行するための処理の一実施形態を示す流れ図である。
行列計算を実行するための処理の一実施形態を示す流れ図である。
複数のインターリーブ行列計算を実行するための処理の一実施形態を示す流れ図である。
本発明は、処理、装置、システム、物質の組成、コンピュータ可読記憶媒体上に具現化されたコンピュータプログラム製品、及び/又は処理装置(例えば、処理装置に接続されたメモリによって、記憶された、かつ/又は提供された命令を実行するように構成された処理装置)などを含む多くの方法で実装することができる。本明細書では、これらの実装形態を、又は本発明が取り得る任意の他の形式を、技術と呼ぶ場合がある。一般に、開示した処理のステップの順序は、本発明の範囲内で変更されてもよい。特に明記しない限り、タスクを実行するように構成されるものとして説明される処理装置又はメモリなどの構成要素は、所与の時間にタスクを実行するように一時的に構成される一般的な構成要素として、又はタスクを実行するように製造される特定の構成要素として実装されてもよい。本明細書で使用される場合、「処理装置」という用語は、コンピュータプログラム命令などのデータを処理するように構成された、1つ若しくは複数のデバイス、回路、及び/又は処理コアを指す。
本発明の1つ又は複数の実施形態の詳細な説明を、本発明の原理を示す添付の図面と共に以下に提供する。本発明を、そのような実施形態に関連して説明するが、本発明は、いかなる実施形態にも限定されない。本発明の範囲は特許請求の範囲によってのみ限定され、本発明は多数の代替形態、修正形態及び均等物を包含する。本発明の完全な理解を提供するために、多数の具体的な詳細を、以下の説明に記載する。これらの詳細は、例示の目的で提供しており、本発明は、これらの具体的な詳細の一部又は全部がなくても、特許請求の範囲に従って実施され得る。明確にするために、本発明に関連する技術分野で知られている技術的材料は、本発明が不必要に不明瞭にならないように詳細には説明していない。
複数の行列処理装置及び構成可能データフォーマットを有する拡張可能なノードエンジンを開示する。機械学習モデル用の訓練プラットフォームのコアな構成要素として、ノードエンジンをネットワークに配置して、機械学習モデル用の訓練を実行することができる。計算及びデータ要件が増加するにつれて、追加の要件を処理するために、ネットワーク内のノードエンジンの数を増やすことができる。開示したノードエンジンは、同様のワークロードを担当する従来のCPU及びGPUと比較して、1ワットあたりmmあたりの性能に関して極めて効率的である。ノード・エンジン・アーキテクチャは、機械学習ワークロードに関するデータフォーマット及びデータ経路を最適化することによって、部分的にこの性能改善を達成する。例えば、ノードエンジンは、複数の行列演算をそれぞれインターリーブし得る複数の行列処理装置を含む。8つの行列処理装置のグループを有するノードエンジンは、サイクルごとに行列乗算の結果を計算することができる。関連する行列演算の第1のセットのデータを待っていてストールした場合、各行列処理装置は、関連する行列演算の第2のセットをインターリーブして、その他の方法でアイドル状態の計算リソースを利用することができる。いくつかの実施形態では、行列オペランドは、低ビット浮動小数点フォーマットを使用して記憶され、中間結果及び最終結果は、高ビット浮動小数点フォーマットを使用して計算される。低ビットフォーマットは、行列処理装置の読取りデータ帯域幅を改善し、一方、高ビットフォーマットは、例えば量子化結果の精度の低下を防止することによって、行列結果の精度及び正確さを維持する。例えば、仮数フィールド及び指数フィールドに割り当てられるビット数を変えるために、異なる構成可能データフォーマットを選択して、異なるデータフォーマット構成を指定してもよい。これにより、特定の機械学習タスクに使用される特定の行列演算に基づいて、データフォーマットを最適化することができる。さらに、データフォーマットは、指数をバイアスする構成可能バイアスを含む場合がある。これにより、指数の範囲を改善し、大きな範囲を利用することができる。
いくつかの実施形態では、ノードエンジンはメッシュ状ネットワークに配置される。各ノードエンジンは、制御ユニットと、メモリと、レジスタと、複数の行列処理装置と、ベクトル計算ユニットなどの後処理装置とを含む。制御ユニットは、複数の行列処理装置のうちの1つに向けられた行列計算命令を含むカスタマイズされた命令を処理することができ、異なる行列処理装置とノードエンジンとの間で結果を同期させるために使用される。行列結果は、レジスタファイルに記憶され、後処理装置によってベクトル演算を使用して処理されてもよい。ノードエンジンを実行するソフトウェアは、大きな行列演算を行い、問題を細分化することができる。問題の異なる下位構成要素は、異なるノードエンジン及び各ノードエンジンの異なる行列処理装置に配置されてもよい。例えば、各スライスが行列処理装置の行列サイズに最適化されるように、2つの大きな行列をスライスすることができる。その後、スライスに対する行列乗算が実行される、異なるノードエンジンの異なる行列処理装置に、スライスを配置することができる。各行列乗算の結果を組み合わせて、元の大きな行列の乗算結果を計算することができる。
いくつかの実施形態では、マイクロ処理装置システムは、行列計算ユニット及び制御ユニットを備える。行列計算ユニットは、1つ又は複数の処理要素を含む。例えば、行列計算ユニットは、2つのオペランドから2つの要素の計算結果を決定するための計算セルの行列を含む。8×8行列計算ユニットは、64個の計算セルを含む。同様に、MxN行列計算ユニットは、MxN個の計算セルを含む。行列計算ユニットは、制御ユニットを介して制御される行列処理装置の一部である。いくつかの実施形態では、制御ユニットは、行列計算ユニットに行列処理装置命令を提供するように構成される。例えば、制御ユニットは、行列計算ユニットが実行するために、行列乗算命令を行列処理装置に提供する。行列処理装置命令は、指定された構成可能バイアスを用いてバイアスされた指数を用いてフォーマットされた浮動小数点オペランドを指定する。例えば、行列乗算命令は、2つの浮動小数点行列オペランドを指定する。行列オペランドの各要素は、特定の浮動小数点フォーマット及び構成可能な指数バイアスを使用してフォーマットされる。行列オペランドと共に、行列処理装置命令は、符号ビットに1ビット、指数に4ビット、仮数に3ビットを割り当てるフォーマット、及び特定の指数バイアスなど、行列要素が使用する浮動小数点フォーマットを指定する。様々な実施形態において、バイアスは、指数バイアスに対応する値を指定することによって構成可能である。いくつかの実施形態では、バイアスは再構成可能である。例えば、行列命令は、構成可能バイアスを再構成するために使用される新規のバイアスを指定してもよい。いくつかの実施形態では、浮動小数点フォーマットは、表現可能な値の数を増やすために非正規数をサポートする。
いくつかの実施形態では、行列処理装置命令は、第1の浮動小数点表現フォーマットを使用してフォーマットされた浮動小数点オペランドを指定する。例えば、命令は、指数に4ビット、仮数に3ビット、及び単一符号ビットを割り当てる8ビット浮動小数点フォーマットを指定する。指定されたフォーマットは、行列オペランドの要素に使用される。フォーマットは、行列処理装置の行列計算ユニットに入るデータ帯域幅を増加させるように選択されてもよい。行列計算ユニットは、浮動小数点オペランドを使用して計算された中間結果値を蓄積し、中間結果値は、第2の浮動小数点表現フォーマットである。例えば、中間結果は、21ビット浮動小数点フォーマットなどの異なる浮動小数点フォーマットを使用する。別の例として、中間結果は、27ビット又は別の適切な浮動小数点フォーマットなどの異なる浮動小数点フォーマットを使用してもよい。中間結果に専用のビット数は、結果を量子化するときの精度の低下を防止するために選択されてもよい。多くのビット数を使用して中間結果を表すフォーマットは、第1の浮動小数点フォーマットを使用することによって生じ得るオーバーフローエラー及び/又はアンダーフローエラーを防止するために選択されてもよい。行列計算ユニットは、蓄積した中間結果を、第3の浮動小数点表現フォーマットでフォーマットされた出力として出力する。例えば、複数の蓄積した中間結果は、行列結果として行列処理装置から移動されてもよい。結果は、行列処理装置が接続されているバスと互換性のある第3のフォーマットを使用して出力されてもよい。例えば、ノードエンジンは、64バイト幅の内部バスを利用してもよい。中間蓄積結果は、16ビット浮動小数点値として行列計算ユニットから出力され、移動命令ごとに32個の要素を行列処理装置から移動させることができる。各命令が32個の要素を移動させる2つの移動命令を使用して、64個の要素を有する蓄積結果を、行列処理装置からノードエンジンのレジスタファイルに移動することができる。移動高命令は、高い32個の要素(例えば、要素32~63)を移動するために使用されてもよく、移動低命令は、低い32個の要素(例えば、要素0~31)を移動するために使用されてもよい。いくつかの実施形態では、移動命令は非破壊的であり、値を行列処理装置のソースアキュムレータから出力アレイ又はレジスタなどの行列処理装置の外部のメモリ位置に移動するときに、ソースアキュムレータの内容をクリアしない。
図1は、機械学習モデルを訓練するための処理の一実施形態を示す流れ図である。例えば、図1の処理を使用して、自律運転又は運転者支援運転のモデルを訓練することができる。人間の運転者によって、自律的に、又は人間と支援運転との両方の混合によってなどで車両が運転されるとき、運転データを取り込むことができる。取込データは、訓練データとして準備され、取込データを使用して、新規の機械学習モデルを訓練し、運転経験を改善する。新規の運転経験を、安全性、効率(電力、時間など)、快適性、性能、利便性などの分野で改善することができる。新規のモデルが訓練され、検証されると、新規の訓練モデルは、車両に配備され、そこで訓練モデルは、1つ又は複数の機械学習ネットワークによって使用されて、改善した運転機能及び機能性を実装する。新規の機能は、とりわけ、自律的な車線変更、高速道路への自律的な車線合流、高速道路の自律的な離脱、障害物及び道路状況の検出の改善、及び自律的なナビゲーションベースの運転など、自律的な運転機能又は支援運転機能を含むことができる。様々な実施形態において、機械学習モデルは、複数のノードエンジンを利用する訓練プラットフォーム上で訓練されてもよく、ここで、各ノードエンジンは、複数の行列処理装置及び構成可能データフォーマットを含む。
101において、機械学習訓練のためにデータが取り込まれる。いくつかの実施形態では、車両が、人間か、自律運転システムのいずれか、又はその両方によって運転されると、車両運転に対応するデータが取り込まれる。車両運転状態の取込データは、画像センサデータ、車両動作パラメータ(例えば、速度、操舵など)、車両タイプ情報(例えば、左ハンドル、右ハンドル、車両モデルなど)、自律運転が可能か否か、自律運転の最後の解除からの時間、障害物検出、運転状態などを含んでもよい。データは、車両の運転を妨げることなく、かつ運転者の支援を必要とすることなく、受動的に取り込まれてもよい。
様々な実施形態では、車両には、異なる形式のデータを取り込むために異なる配置のセンサを装備してもよい。いくつかの実施形態では、センサデータは、視覚データ、超音波データ、LiDARデータ、又は他の適切なセンサデータであってもよい。例えば、画像をハイ・ダイナミック・レンジ前方カメラから取り込む。別の例として、超音波データが、側方超音波センサから取り込まれる。いくつかの実施形態では、車両には、データを取り込むために、複数のセンサが取り付けられる。例えば、いくつかの実施形態では、8つのサラウンドカメラが車両に取り付けられ、車両の周囲の360度の視界を最大250mの範囲で提供する。カメラセンサの異なる配置は、広角前方カメラ、狭角前方カメラ、後方視認カメラ、前方視側方カメラ、及び/又は後方視側方カメラを含むことができる。いくつかの実施形態では、追加の超音波センサ及び/又はレーダセンサは、周囲の詳細を取り込むために使用される。例えば、12個の超音波センサを車両に取り付けて、硬い物体と柔らかい物体の両方を検出してもよい。追加の前方レーダを利用して、周囲環境のデータを取り込むこともできる。様々な実施形態では、レーダセンサは、大雨、霧、埃、及び他の車両に関係なく、周囲の詳細を取り込むことができる。様々なセンサは、車両の周囲の環境を取り込むために使用され、取込データは、深層学習ネットワーク用の訓練データとして検討するために記憶される。
取り込んだとき、1つ又は複数の車両からの取込データは、機械学習訓練プラットフォームに転送される。例えば、セルラ又はWiFi接続などの無線接続を有する車両は、データを機械学習訓練プラットフォームに無線で転送することができる。別の選択肢として、車両が技術者によって整備されているときに、取込データを車両からダウンロードすることができる。様々な実施形態では、車両のフリートなどの複数の車両からの取込データは、機械学習訓練プラットフォームにおいて集約され、訓練データのためのソースのうちの少なくとも1つとして使用される。
103において、取込データは、機械学習モデルを訓練するために準備される。101において車両から取り込まれたデータは、訓練データとして準備される。いくつかのシナリオでは、データは訓練データと検証データとに分離される。データの準備は、取込データを選択(又はカリング)して、特に良好な訓練データを識別することを含む場合がある。いくつかの実施形態では、データは、訓練のための特徴を識別するために注釈付けされる。例えば、レーンマーカ、信号機、交通標識、車両、歩行者などに注釈を付けて、データ準備の一部として訓練データの有用性を高めてもよい。別の例として、データは、異なるフォーマットに変換されてもよく、又は準備処理の一部として事前処理されてもよい。いくつかの実施形態では、データは、ソースデータフォーマットから、行列処理装置と互換性のあるフォーマットに変換されてもよい。例えば、固定小数点データとして取り込まれたデータを、正確さを高めるために、浮動小数点データに変換してもよい。
105において、機械学習モデルが訓練される。103において準備された訓練データを使用して、1つ又は複数の機械学習モデルを訓練する。訓練は、訓練及び検証データセットの両方を利用してもよい。いくつかの実施形態では、訓練は、複数のノードエンジンで構成された機械学習プラットフォームを利用し、ここで、各ノードエンジンは、複数の行列処理装置を含む 例えば、メッシュ又は別の適切なアーキテクチャに編成された複数のノードエンジンを利用することによって、複雑な機械学習訓練問題を並列化し、迅速かつ効率的に実行することができる。同様に、各ノードエンジンが複数の行列処理装置を含むので、各ノードは、複数の行列演算を並列に実行することができる。いくつかの実施形態では、複数の行列処理装置を並列に動作させることによって、ノードエンジンは、クロックサイクルごとに行列乗算の結果を出力することができる。データ読取りを待つ遅延が大幅に低減され、行列乗算結果間の遅延が大幅に低減され、性能帯域幅が大幅に増加する。
訓練の結果は、1つ又は複数の訓練機械学習モデルである。いくつかの実施形態では、潜在的に異なるニューラルネットワークについて、複数のモデルが各々訓練される。例えば、1つの機械学習モデルは、前方カメラからのセンサデータを入力として利用するように訓練されてもよく、別のモデルは、側方超音波センサからのセンサデータを入力として利用するように訓練されてもよい。
107において、訓練機械学習モデルが配置される。例えば、訓練モデルは、車両に配置され、車両にインストールされる。モデルは、無線更新を介して、車両を整備している間に技術者によって、又は別の手段によってインストールされてもよい。特定の状況では、モデルは、車両に容易にインストールするためにデータフォーマットでパッケージ化される。例えば、モデルを車両に送信する必要な時間及び帯域幅を最小にするために、モデルを圧縮してもよい。いくつかの実施形態では、例えば、車両上で実行する異なるニューラルネットワークエンジンについて、複数のモデルを、各々共にパッケージ化し、単一のパッケージとして車両に送信してもよい。
109において、訓練機械学習モデルが適用される。例えば、センサデータを処理し、自律運転又は運転者支援機能を実装するために、新規のモデルが、車両上の畳み込みニューラルネットワークによって利用される。いくつかの実施形態では、2つ以上のモデルが適用され、及び/又は2つ以上のニューラルネットワークが利用される。例えば、いくつかの車両では、複数のニューラルネットワークが、異なるセンサからの異なるデータを処理するために利用される。新規のモデルが利用されると、データを、新規のモデルの性能を反映して取り込み、将来の訓練のために使用することができる。機械学習ネットワークの性能を継続的に改善するために、図1の処理を利用することができる。このようにして、処理は、データが取り込まれる101にループバックする。データを分析して、現在配備されているモデルの困難なユースケースを識別することができ、対応する取込データを将来の訓練に利用することができる。
図2は、機械学習モデルを訓練するためのシステムの一実施形態を示すブロック図である。図2の訓練システムを使用して、自律及び/又は運転者支援運転機能を実施するために、機械学習モデルを訓練することができる。いくつかの実施形態では、図2の訓練システムは、図1の処理を実行するために使用される。図示の例では、訓練システムは、車両に配置された車両サブシステム201の特定の訓練関連サブシステムを利用する。訓練関連サブシステムは、1つ又は複数の訓練データセンタ221に配置された訓練システムのサーバサイドと通信する。車両サブシステム201は、センサ203と、深層学習ネットワーク205と、AI処理装置207と、車両制御モジュール209と、ネットワークインターフェース211と、車両データ取込システム213と、取込データ記憶装置215とを含む。例えば、図示していないが、追加の車両サブシステムが、他の機能を実行するために存在してもよい。訓練データセンタ221は、訓練プラットフォーム223と、訓練データ記憶装置227と、モデルデータ記憶装置229とを含む。訓練プラットフォーム223は、少なくとも1つ又は複数のノードエンジン225を含む。ノードエンジンは、(例えば、メッシュ状ネットワークにおいて)機械学習訓練のための並列化処理を実行するために接続される。いくつかの実施形態では、訓練プラットフォーム223、訓練データ記憶装置227、及びモデルデータ記憶装置229は、単一のデータセンタに配置されるが、それらは、複数のデータセンタにわたって配置又は複製されてもよい。
いくつかの実施形態では、車両(図示せず)は、自律及び運転者支援機能を実装するため、並びに機能性及び/又は新規の機能を実装及び/又は改善するための1つ又は複数の機械学習モデルを訓練するために使用され得るデータを取り込むための車両サブシステム201を含む。様々な実施形態では、異なる車両サブシステムを通信可能に接続してもよい。例えば、センサ203からのセンサデータは、取込データ記憶装置215内に記憶するために、車両データ取込システム213に供給される。取込データは、ネットワークインターフェース211を介して訓練プラットフォーム223に送信される。別の例として、センサ203からのセンサデータは、AI処理装置207上で実行する深層学習ネットワーク205に供給される。AI処理装置207上で実行する深層学習ネットワーク205の出力は、車両制御モジュール209に供給される。様々な実施形態において、ネットワークインターフェース211は、WiFi及び/又はセルラネットワーク接続を含むものなど、無線ネットワークインターフェースである。ネットワークインターフェース211は、リモートサーバと通信し、電話をかけ、テキストメッセージを送信し、かつ/又は受信し、センサデータを訓練プラットフォーム223に送信するなどのために使用される。いくつかの実施形態では、車両サブシステム201は、必要に応じて、追加又は少数のサブシステムを含んでもよい。例えば、いくつかの実施形態では、取込センサデータを事前処理するために、画像事前処理装置(図示せず)が利用される。別の例として、いくつかの実施形態では、出力が車両制御モジュール209に提供される前に、深層学習ネットワーク205の出力に対して後処理を実行するために、後処理構成要素(図示せず)が使用される。いくつかの実施形態では、トリガ分類器構成要素(図示せず)が、潜在的な訓練データとして運転データを識別するために使用される。
いくつかの実施形態では、センサ203は、1つ又は複数のセンサを含む。センサ203は、車両の様々な位置で、及び/又は1つ若しくは複数の異なる方向に方向付けられて、車両に取り付けられてもよい。例えば、センサ203は、車両の前方、側方、後方、及び/又は屋根などにおいて、前方、後方、側方などの方向に取り付けられてもよい。いくつかの実施形態では、センサ203は、ハイ・ダイナミック・レンジ・カメラなどの画像センサであってもよい。いくつかの実施形態では、センサ203は非視覚センサを含む。センサ203は、とりわけ、レーダ、LiDAR、及び/又は超音波センサを含んでもよい。特定の実施形態では、センサ203を、車両制御モジュール209を用いて車両に取り付ない。例えば、センサ203は、隣接する車両に取り付けられてもよく、及び/又は道路若しくは環境に取り付けられてもよく、センサデータを取り込むためのシステムの一部として含まれる。
いくつかの実施形態では、深層学習ネットワーク205は、自律車両制御を実施するための深層学習ネットワークである。例えば、深層学習ネットワーク205は、センサデータを使用して訓練された畳み込みニューラルネットワーク(CNN)などの人工ニューラルネットワークであってもよく、その出力は、車両制御モジュール209に提供される。深層学習ネットワーク205によって使用される機械学習モデルを、図2のシステムを使用して訓練してもよい。
いくつかの実施形態では、人工知能(AI)処理装置207は、深層学習ネットワーク205を実行するためのハードウェア処理装置である。いくつかの実施形態では、AI処理装置207は、センサデータに対して畳み込みニューラルネットワーク(CNN)を使用して推論を実行する専用AI処理装置である。AI処理装置207は、センサデータのビット深度について最適化されてもよく、並びに/あるいは、とりわけ、畳み込み、内積、ベクトル、及び/又は行列演算を含むニューラルネットワーク演算などの深層学習演算について最適化されてもよい。いくつかの実施形態では、AI処理装置207は、画像処理装置(GPU)を使用して実装される。様々な実施形態では、AI処理装置207は、メモリに接続され、メモリは、AI処理装置に命令を提供するように構成され、命令は、実行されると、AI処理装置に、受信した入力センサデータに対する深層学習分析を実行させ、かつ車両を少なくとも部分的に自律的に動作させるために使用される機械学習結果を決定させる。
いくつかの実施形態では、車両制御モジュール209は、人工知能(AI)処理装置207の出力を処理し、かつその出力を車両制御動作に変換するために利用される。いくつかの実施形態では、車両制御モジュール209は、自律運転のために車両を制御するために利用され、車両の速度及び/又は操舵を調整することができる。例えば、制動、操舵、車線変更、加速、及び別の車線への合流などによる車両の制御ために、車両制御モジュール209を使用してもよい。いくつかの実施形態では、車両制御モジュール209は、ブレーキ灯、方向指示灯、ヘッドライトなどの車両照明を制御するために使用される。いくつかの実施形態では、車両制御モジュール209は、車両のサウンドシステム、音声警報の再生、マイクロフォンの有効化、ホーンの有効化など、車両の音声状態を制御するために使用される。いくつかの実施形態では、車両制御モジュール209は、潜在的な衝突、又は指示した目的地の接近など、運転イベントを運転者及び/又は乗客に通知する警告システムを含む通知システムを制御するために使用される。いくつかの実施形態では、車両制御モジュール209は、車両のセンサ203などのセンサを調整するために使用される。例えば、車両制御モジュール209を使用して、方向の変更、出力解像度及び/又はフォーマットタイプの変更、取込速度の増減、取込ダイナミックレンジの調整、カメラの焦点の調整、センサの有効化及び/又は無効化など、1つ又は複数のセンサのパラメータを変更してもよい。様々な実施形態では、車両制御モジュール209は、車両の自動運転及び/又は運転者支援制御を実施するために使用される。
いくつかの実施形態では、ネットワークインターフェース211は、取込センサデータを含むデータを送信し、かつ/又は受信する通信インターフェースである。様々な実施形態では、ネットワークインターフェース211は、訓練プラットフォーム223などのリモートサーバとインターフェース接続し、音声通話を接続し、かつ実施し、テキストメッセージを送信し、かつ/又は受信し、センサデータを送信し、新規に訓練する機械学習モデルを含む自律運転システムへの更新を受信するなどのためのセルラ又は無線インターフェースを含む。例えば、ネットワークインターフェース211を使用して、センサ203、深層学習ネットワーク205、AI処理装置207、車両制御モジュール209、及び/又は車両データ取込システム213のための命令及び/又は動作パラメータの更新を受信してもよい。例えば、深層学習ネットワーク205の機械学習モデルは、ネットワークインターフェース211を使用して更新されてもよい。別の例として、ネットワークインターフェース211を使用して、センサ203のファームウェア、並びに/又はフィルタなどの車両データ取込システム213の動作パラメータ、並びに/又は取り込むデータの種類及び量を決定するためのパラメータを更新してもよい。
いくつかの実施形態では、車両データ取込システム213及び取込データ記憶装置215は、車両運転状態に関連するデータを取り込み、かつ記憶するために使用される。車両データ取込システム213によって取り込まれたデータは、取込データ記憶装置215に記憶される。取込データ記憶装置215は、ハードドライブ、不揮発性メモリなどの任意の適切なデータ記憶装置を使用して実装されてもよい。いくつかの実施形態では、取込データ記憶装置215は、データベース、ファイルシステム、又はデータを編成するための別の手段を使用して実装される。車両運転状態の取込データは、画像センサデータ、車両動作パラメータ(例えば、速度、操舵など)、車両タイプ情報(例えば、左ハンドル、右ハンドル、車両モデルなど)、自律運転が可能か否か、自律運転の最後の解除からの時間、障害物検出、運転状態などを含んでもよい。データは、車両の運転を妨げることなく、かつ運転者の支援を必要とすることなく、受動的に取り込まれてもよい。車両データ取込システム213によって取り込まれたデータは、センサ203から取り込まれたデータを含む。
いくつかの実施形態では、車両データ取込システム213は、ネットワークインターフェース211を介して訓練プラットフォーム223と通信する。ネットワークインターフェース211は、WiFi及び/又はセルラネットワークなどの無線ネットワークであってもよい。車両データ取込システム213は、ネットワークインターフェース211を利用して、取込データ記憶装置215に記憶された取込データを訓練プラットフォーム223に送信する。いくつかの実施形態では、ネットワークインターフェース211は、車両上で実行する深層学習ネットワーク205にインストールするための訓練機械学習モデルをダウンロードするために利用される。
図2の例では、訓練システムのサーバサイド構成要素は、訓練データセンタ221の1つ又は複数のデータセンタに配置され、訓練プラットフォーム223と、訓練データ記憶装置227と、モデルデータ記憶装置229とを含む。訓練プラットフォーム223は、車両データ取込システム213から取込データを受信するための1つ又は複数のコンピュータサーバを含む。訓練プラットフォーム223は、有線又は光ネットワークなどのコンピュータネットワークを介して、訓練データセンタ221の無線ネットワークインターフェース211を介して、車両データ取込システム213に通信可能に接続される。訓練プラットフォーム223は、さらに、1つ又は複数のノードエンジン225を含む。例えば、複数のノードエンジン225をメッシュネットワークで接続してもよい。訓練プラットフォーム223は、車両データ取込システム213から取込データを受信し、データを使用可能な訓練(及び検証)データに処理し、ノードエンジン225を利用して、1つ又は複数の新規の機械学習モデルを訓練する。訓練データ記憶装置227は、1つ又は複数の車両から受信した取込データを記憶するために使用される。いくつかの実施形態では、注釈付きデータを含む訓練データとして使用される処理された取込データは、訓練データ記憶装置227に記憶される。訓練が完了すると、モデルデータ記憶装置229は、訓練機械学習モデルを記憶するために使用される。例えば、訓練機械学習モデルの異なるバージョンを、モデルデータ記憶装置229に記憶し、異なるモデルの相対的な機能性を決定し、改善領域を識別するために利用してもよい。いくつかの実施形態では、訓練データ記憶装置227及びモデルデータ記憶装置229を実装するために、1つ又は複数のデータ記憶装置が使用される。
いくつかの実施形態では、ノードエンジン225は、計算タスクを並列化するために使用され得る複数の接続されたノードを含む。各接続ノードは、少なくとも1つ、場合によっては2つ以上の行列処理装置を含む。例えば、単一のノードは、各々が少なくとも1つの行列乗算結果を決定することができる8つの行列処理装置を含んでもよい。いくつかの実施形態では、行列乗算結果は、単一の行列処理装置が計算するために、少なくとも最小のクロックサイクル数を必要とする。複数の行列処理装置を含むように各ノードをスケーリングすることによって、行列乗算を計算するための最小のクロックサイクル数に対応する初期遅延の後、ノードは、各クロックサイクルの1つの行列乗算の結果を出力することができる。例えば、行列乗算が完了するために8クロックサイクルを必要とする際、7クロックサイクルの初期遅延の後、8つの行列処理装置を有するノードは、クロックサイクルごとに行列乗算の結果を決定することができる。様々な実施形態において、スループットは、行列オペランドにアクセスする際のレイテンシを含むメモリアクセスによってさらに決定される。様々な実施形態において、ノードエンジンは、様々な数値フォーマットを使用して行列計算を実行することができる。例えば、ノードは、固定小数点数フォーマット及び浮動小数点数フォーマットを利用することができる。浮動小数点フォーマットに関して、ノードは、8ビット、16ビット、及び32ビットフォーマットなどの複数のフォーマットで動作するように構成可能である。ビット深度ごとに、1つ又は複数の異なるフォーマットを選択してもよい。計算目標に応じて、異なるフォーマットを使用して数値を表してもよい。フォーマットは、浮動小数点数の仮数が、より正確になるように選択されてもよく、別のフォーマットは、浮動小数点数の指数が、より正確になるように選択されてもよい。いくつかの実施形態では、浮動小数点フォーマットは、計算演算をさらにカスタマイズするために、構成可能バイアスを利用する。数値フォーマットの構成可能性により、訓練システムは、例えば、予想される入力値、中間値、及び出力値に基づいて、異なる機械学習動作を対象にすることができる。様々な実施形態において、複数の浮動小数点フォーマット、及び構成可能バイアスを使用した浮動小数点フォーマットのサポートを含むノードの構成可能性は、精度及び正確さを犠牲にすることなく、行列計算演算のための帯域幅及び性能を大幅に改善する。同様に、消費電力及び効率も大幅に改善される。
図3は、行列計算を実行するためのノードエンジンの一実施形態を示すブロック図である。図示の例では、ノードエンジン300は、制御ユニット301と、メモリ303と、ロードレジスタ305と、後処理装置レジスタファイル307と、マルチプレクサ309及び311と、行列処理装置313及び351~357と、出力アレイ315と、後処理装置317とを含む。様々な実施形態において、ノードエンジンは、複数の行列演算を並列に計算するために、複数の行列処理装置を含んでもよい。図示の例では、ノードエンジン300は、8つの行列処理装置313及び351~357を含む。各行列処理装置は、データ入力アレイ、重み入力アレイ、複数の出力アキュムレータ、及び行列計算ユニットを含む。図示の例では、行列処理装置313は、データ入力アレイ321と、重み入力アレイ323と、2つの出力アキュムレータ329及び331とを含む。データ及び重み入力アレイは、行列計算ユニット325に入力を供給する。例えば、入力アレイ(例えば、データ入力アレイ321及び/又は重み入力アレイ323)内のデータは、複数のサイクル(例えば、8つの連続サイクル)にわたって、行列計算ユニット325に供給するために特定のバイト数(例えば、8バイト)だけシフトされる。いくつかの実施形態では、各行列処理装置は、単一のデータ入力アレイ及び単一の重み入力アレイを含む。行列計算ユニット325は、計算セル327などの計算セルの行列を含む。MxN次元行列計算ユニットは、MxN個の計算セルを含む。各入力アレイは、入力行列全体に適合するようにサイズ設定され、各出力アキュムレータは、行列結果全体に適合するようにサイズ設定される。いくつかの実施形態では、ノードエンジンは、図4の8ビット浮動小数点フォーマット400及び410、並びに図5の21ビット浮動小数点フォーマット500を含む複数の浮動小数点フォーマットをサポートする。いくつかの実施形態では、ノードエンジン300は、図1、図6、図7、及び/又は図8の処理を実行するために使用される。
いくつかの実施形態では、ノードエンジン300は、図示していない追加の構成要素及び追加の制御線を含んでもよい。例えば、ノードエンジン300は、いくつかの例として、スカラレジスタなどの追加のレジスタ、1つ又は複数のメモリキャッシュ、行列処理装置の値をフォーマットするためのデータフォーマッタ、並びにマルチプレクサ309と311及び行列処理装置351~357などの下位構成要素へ制御ユニット301からの追加の制御線を含んでもよい。いくつかの実施形態では、特定のレジスタ(図示せず)は、浮動小数点数に関する数値フォーマット及び構成可能バイアスなどの構成可能なパラメータを記憶するために専用である。いくつかの実施形態では、ノードエンジン300の異なる構成要素を接続するバスは、ワイドデータバスである。バスのサイズを選択して、行列値を転送するために最適化してもよい。例えば、バスはすべて64バイト幅であってもよい。これにより、64個の1バイト要素の8×8行列を、メモリから、レジスタ、行列処理装置など内蔵ユニットに、転送することができる。
図示の例では、制御ユニット301は、メモリ303と、行列処理装置313と、出力アレイ315と、後処理装置317とを含むノードエンジン300の1つ又は複数の構成要素に通信可能に接続されている。図示していないが、制御ユニット301はまた、残りの行列処理装置351~357の各々と通信可能に接続される。様々な実施形態において、制御ユニット301は、行列演算及び後処理演算(ベクトル演算など)並びに/又はメモリ及びレジスタのアクセスを含む計算演算の処理を同期させるために使用される。例えば、制御ユニット301は、行列計算命令をスケジュールするために行列処理装置313に信号を送信し、新規の命令をいつ受信し得るか、及び/又はいつ行列演算が完了して、行列結果が準備完了したかを示すために、制御ユニット301は、行列処理装置313からの準備完了信号を監視してもよい。
いくつかの実施形態では、メモリ303は、行列計算及び後処理計算の入力オペランド及び出力結果を記憶するためのメモリモジュールである。メモリ303は、1つ又は複数のキャッシュ(図示せず)を含んでもよい。図示の例では、メモリ303は、ロードレジスタ305、マルチプレクサ309及び311、並びに後処理装置レジスタファイル307に接続されている。メモリへのデータの記憶及びメモリからのデータの取り出しに必要な柔軟性に応じて、接続を追加する、又は接続を低減することが可能である。示されるように、データを、メモリとの間で読み書きし、更にロードレジスタ305及び後処理装置レジスタファイル307との間で読み書きすることができる。レジスタへの接続により、例えば行列又はベクトル計算のための引数として、データ値を、レジスタに迅速に記憶することができる。メモリ303はまた、入力行列をメモリから取り出し得るように、マルチプレクサ309及び311に接続される。いくつかの実施形態では、メモリ303へのメモリアクセスは、例えばメモリ要求をキューに入れ、特定のメモリ読取りを他のメモリ読取りよりも優先することによって、メモリ要求を最適化するために、メモリアービタ(図示せず)によって制御される。いくつかの実施形態では、メモリ303は、スタティック・ランダム・アクセス・メモリ(SRAM)である。
いくつかの実施形態では、ノードエンジン300は、ロードレジスタ305及び後処理装置レジスタファイル307などのレジスタを含む。これらのレジスタを使用して、メモリアクセスを最適化してもよい。いくつかの例として、レジスタは、メモリ303から取り出された値を記憶し、値をメモリ303に書き込む前に値を記憶し、行列処理装置の入力値及び出力値を記憶し、更に後処理装置の入力値及び出力値を記憶するために使用されてもよい。いくつかの実施形態では、後処理装置レジスタファイル307は、後処理装置317用のレジスタファイルであり、後処理装置317の異なるレーン構成(例えば、64、32、及び/又は16のレーン構成)と互換性がある。例えば、後処理装置レジスタファイル307のレジスタを、1バイト値、2バイト値、及び4バイト値などの様々なバイトフォーマットを使用してアドレス指定することができる。いくつかの実施形態では、各レジスタはサイズが64バイトであり、64個の1バイト要素、32個の2バイト要素、又は16個の4バイト要素を記憶することができる。様々な実施形態において、データフォーマットは、様々な8ビット、16ビット、及び32ビット浮動小数点フォーマットを構成することができ、含むことができる。
いくつかの実施形態では、マルチプレクサは、行列処理装置への入力オペランドのソースを選択するために使用される。図示の例では、マルチプレクサ309及び311は、行列処理装置313のデータ入力行列及び重み入力行列のソースを選択するために使用される。各マルチプレクサで受信される制御信号に応じて、メモリ303又は後処理装置レジスタファイル307から、データを供給することができる。いくつかの実施形態では、メモリ303から供給されたデータは、ロードレジスタ305のレジスタを介して取り出される。いくつかの実施形態では、マルチプレクサ309及び311はまた、行列処理装置351~357のためのデータ入力行列及び重み入力行列を選択するために使用される。ノードエンジンの複数の行列処理装置の処理をオフセットすることによって、1対のマルチプレクサは、ノードエンジンのすべての行列処理装置の入力を選択するために使用される。様々な実施形態において、マルチプレクサ309及び311は、どの行列処理装置がどの行列オペランドを受け取るのかを制御するために使用される。構成に応じて、単一の行列処理装置、すべての行列処理装置のサブセット、又はすべての行列処理装置は、選択された行列オペランドを受け取る。代替の実施形態では、ノードエンジン300は、行列処理装置351~357のそれぞれに専用の追加のマルチプレクサ(図示せず)を含む。
いくつかの実施形態では、行列処理装置313は、行列演算命令を受信し、行列乗算などの行列計算を実行する。行列命令ごとに、行列処理装置313は、1つ又は複数の行列オペランドを1つ又は複数の入力アレイに記憶する。例えば、データ行列は、データ入力アレイ321などのデータ入力アレイに記憶され、重み行列は、重み入力アレイ323などの重み入力アレイに記憶される。様々な実施形態において、行列オペランドは、データと重み行列との対、データと勾配行列との対、重みと勾配行列との対、又は行列オペランドの別の適切な対である。様々な実施形態において、行列処理装置313の入力アレイ321及び323に適合するには大きすぎる行列の行列乗算を計算する処理の一部として、行列処理装置313は、複数の関連する行列計算を計算するために使用される。関連する行列計算の結果は、大きな行列の行列乗算を計算する処理の一部として組み合わされる。様々な実施形態において、行列処理装置313は、(関連する又は関連しない)複数の行列演算をインターリーブする。例えば、行列処理装置313は、第1の行列対に対して1つ又は複数の関連する行列演算を実行することと、第2の行列対に対して1つ又は複数の関連する行列演算を実行することとをインターリーブすることができる。例えば、行列処理装置313は、大きな行列W及びDの一部(例えば、そのスライス)である行列W及びDに対して、それぞれ行列乗算を実行し、続いて、大きな行列W及びGの一部(例えば、そのスライス)である行列W及びGに対して、それぞれ行列乗算を実行することができる。行列W及びDの行列乗算結果は、大きな行列W及びDの行列乗算の計算に使用される部分結果であり、行列W及びGの行列乗算結果は、大きな行列W及びGの行列乗算の計算に使用される部分結果である。入力行列W及びD並びに入力行列W及びGは、アレイ321及び323などの重み及びデータ入力アレイの対に記憶される。いくつかの実施形態では、W*Dの中間結果及び/又は最終結果、並びにW*Gの中間結果及び/又は最終結果を蓄積するために、それぞれ別個の出力アキュムレータ329及び331が使用される。例えば、出力アキュムレータ329は、行列W及びDに関連する行列乗算の中間結果及び/又は最終結果を蓄積するために使用され、出力アキュムレータ331は、行列W及びGに関連する行列乗算の中間結果及び/又は最終結果を蓄積するために使用される。
いくつかの実施形態では、データ入力アレイ及び重み入力アレイは、線形化された形式で行列全体に適合するようにサイズ設定される。例えば、サイズがMxN及びNxOの2つの行列に対して行列乗算を実行し得る行列処理装置は、サイズMxN要素の入力アレイと、対応するMxN及びNxO入力行列を受け取るためのサイズNxO要素の別の入力アレイとを有する。いくつかの実施形態では、行列処理装置は、2つの8×8行列に対して計算を実行し、重み入力アレイ及びデータ入力アレイは、それぞれ64個の要素を受け取るようにサイズ設定される。同様に、出力アキュムレータは、結果行列全体を記憶するようにサイズ設定される。MxN及びNxOのサイズの2つの行列間で行列乗算の結果を記憶するために使用される出力アキュムレータは、MxO個の要素を受け取るようにサイズ設定される。いくつかの実施形態では、行列処理装置は、2つの8×8行列に対して計算を実行し、中間及び最終行列結果を、8×8結果行列に対応する64個の要素に適合するようにサイズ設定されたアキュムレータに記憶する。
図示の例では、入力アレイは行列計算ユニット325に供給する。行列計算ユニット325は、計算セル327などの計算セルの行列で構成される。各計算セルは、各入力行列から1つの要素である2つのオペランドを受け取り得る処理要素であり、2つの入力オペランドに対して乗算などの計算を実行する。いくつかの実施形態では、計算は乗算及び加算である。例えば、2つの入力要素が乗算され、その結果が、アキュムレータの現在の結果に加算され、アキュムレータに再び記憶される。いくつかの実施形態では、計算セル327などの各計算セルは、乗算、除算、加算、又は減算演算などの算術論理演算を実行するための算術論理ユニットを含む。いくつかの実施形態では、部分的な内積を実行するために必要な乗算及び加算演算など、複数の演算を同じクロックサイクルで実行することができる。各計算セルは、データ及び重み入力アレイの1つ又は複数の対に対応する、加算器、乗算器、及び/又は1つ又は複数のアキュムレータを含んでもよい。いくつかの実施形態では、計算セル327などの各計算セルは、浮動小数点乗算器及び1つ又は複数のアキュムレータを含む。図3では、出力アキュムレータ329及び331は、計算セル327とは別に示されているが、いくつかの実施形態では、出力アキュムレータ329及び331の対応する部分がそれぞれの計算セルに統合される。例えば、各計算セルのアキュムレータは、出力アキュムレータ329及び331を共に構成する。
様々な実施形態において、行列計算ユニット325の計算セルは、浮動小数点乗算及び加算などの浮動小数点演算をサポートする。様々な実施形態では、各計算セルは、単一サイクルで乗算及び加算演算を実行するために、乗算器及び1つ又は複数のアキュムレータを含む。各行列計算の開始前に、指示されたアキュムレータがクリアされてもよい。行列計算を実行する処理中、指示されたアキュムレータは、中間結果を蓄積及び記憶するために使用される。いくつかの実施形態では、行列処理装置313は、8×8行列処理装置であり、行列計算ユニット325は、64個の計算セルを含む。各サイクルで、64個の計算セルの各々についてオペランドとして2つの入力要素である128個の要素を、行列計算ユニット325にロードすることができる。各計算セルはまた、指示されたアキュムレータに記憶されたアキュムレータ値へのアクセスを有する。
いくつかの実施形態では、行列乗算は、完了するために複数のクロックサイクルを必要とする。各クロックサイクルに、単一の行及び単一の列が入力オペランドから取り出される。例えば、データ入力アレイに記憶された行列から、行が取り出され、重み入力アレイに記憶された行列から、列が取り出される。いくつかの実施形態では、データは、入力アレイ内のデータを、行又は列全体でシフトすることによって取り出される。各行及び各列はベクトルであり、各ベクトルは計算ユニット全体にコピーされる。各行は、行列計算ユニット325の行に「複製され」、各列は、行列計算ユニット325の列に「複製」される。8×8行列処理装置の場合、重み入力行列の各列は、8要素であり、データ入力行列の各行は、8要素である。パスごとに、行列計算ユニット325の8つの列ごとに、単一の重み列が複製され、行列計算ユニット325の8つの行ごとに、単一のデータ行が複製される。一度に1行及び1列ずつデータを複製することによって、8×8行列処理装置は、8サイクルで行列乗算を完了することができる。各サイクルの間、乗算及び蓄積の中間結果は指示されたアキュムレータに記憶される。8番目の最終サイクルにより、最終的な行列結果は、指示されたアキュムレータに記憶される。異なる次元、例えば4×4又は16×16の行列を使用する行列処理装置を、対応するサイズの入力アレイ、アキュムレータ、及び計算セルと共に使用することができる。
いくつかの実施形態では、入力データ要素は、8ビット浮動小数点値である。8ビット値を利用することによって、行列処理装置の帯域幅性能が大幅に改善される。構成可能な浮動小数点値及び構成可能バイアスを利用することによって、機械学習訓練に必要な精度及び正確さが保持され、帯域幅が増加する。8ビットフォーマットを利用して、64バイト×64バイトの行列処理装置は、2つの8×8行列(合計128個の要素)の行列乗算を計算することができる。対照的に、32ビットフォーマットを使用して、64バイト×64バイトの行列処理装置は、2つの4×4行列(合計で32個の要素のみ)の行列乗算を計算することができる。構成可能な8ビット浮動小数点フォーマットを使用して行列要素を最適化することによって、行列要素を行列処理装置にロードするための帯域幅が大幅に改善される。面積当たりの消費電力も大幅に向上する。オーバーフローエラー及びアンダーフローエラーを防止するために、指示されたアキュムレータに記憶された中間結果及び最終結果は、21ビット、27ビット、又は別の適切な浮動小数点フォーマットなど、大きなビットフォーマットを利用する。入力要素として8ビット要素を使用し、21ビットフォーマットを使用して中間結果を記憶することは、行列処理装置への高い入力帯域幅を維持しつつ、訓練に必要な精度及び正確さを維持する。様々な実施形態では、各出力アキュムレータは、図5のフォーマット500など、21ビット浮動小数点数を使用して結果行列の各要素を記憶する。いくつかの実施形態では、行列処理装置313は、8ビット浮動小数点入力値を使用して行列演算を実行し、21ビット浮動小数点値を使用して中間及び最終行列結果を計算する8×8行列処理装置である。入力アレイは、64バイト(64個の8ビット要素)であり、出力アキュムレータは168バイト(64個の21ビット要素)である。様々な実施形態において、出力アキュムレータは、行列計算命令によって指示される。同様に、8ビット浮動小数点フォーマット及び指数バイアスを、行列計算命令及び/又は1つ若しくは複数のレジスタ引数によって構成することができる。
いくつかの実施形態では、複数の異なる8ビット浮動小数点フォーマットは、行列処理装置313によってサポートされる。例えば、異なるフォーマット400及び410は、サポートされ、計算タスクに基づいて選択され得る。各フォーマットは、浮動小数点数の指数及び仮数を表すために異なるビット数を割り当てる。ユースケースに応じて、1つ又は別のフォーマットが選択される。高精度の数が必要とされる場合、多くのビットを仮数に割り当てることができ、フォーマット410よりも多くの仮数ビットを有するフォーマット400などのフォーマットが選択される。精度を保つために極めて小さな差分が必要とされる勾配降下を実行するために、多くの仮数ビットを有するフォーマットを選択することができる。別の例として、多くの仮数ビットを有するフォーマットが、順伝播を実行するために、選択され、コスト関数を計算してもよい。別の最適化として、各浮動小数点フォーマットは、構成可能バイアスを利用する。構成可能バイアスは、指数範囲をシフトするために使用される。例えば、指数バイアスなしで、3ビットで表される指数は、2以上、2以下の指数値を指定することができる。5のバイアスは、2-5以上、2+2以下の指数値を有するように指数の範囲をシフトする。別の例として、指数を表す4ビット及び15のバイアスを使用すると、指数の範囲は、2以上、231以下から、2-15以上、2+16以下までをシフトする。様々な実施形態において、指数フィールドのビット数及びバイアスのビット数を最適化することによって、浮動小数点数の指数及び数値カバレッジを使用して表される範囲を最適化して、予想される入力及び結果の正確さ及び精度を維持することができる。
いくつかの実施形態では、浮動小数点フォーマットは非正規数をサポートする。例えば、0の値を有する指数フィールドは、先行ゼロのない正規化された仮数を必要としない。非正規数をサポートすることによって、指数範囲及び表現可能な値の数が増加する。様々な実施形態において、計算セル327などの各計算セルは、1つ又は複数の非正規オペランドを使用して浮動小数点演算を実行するためのサポートを含む。
いくつかの実施形態では、構成可能バイアスの値は、構成可能バイアスを表すために使用されるビット数によって制限される。例えば、3ビット構成可能バイアスは、8つの異なる値(0以上、7以下)を有することができる。いくつかの実施形態では、最適化として、構成可能バイアスによって表される値は連続していない。例えば、3ビット構成可能バイアスによって表される8つの値は、値0~7に限定されない。代わりに、バイアスは8つの異なる値から選択可能である。例えば、構成可能バイアスを、8つの所定の値、1、3、5、7、9、11、15、及び17から選択することができる。いくつかの実施形態では、所定の値は、最も有用なバイアスに基づいて決定される。所定の値は、範囲を最大化し、異なるバイアスの範囲間の重複を最小化するように、少なくとも部分的に選択されてもよい。いくつかの実施形態では、構成可能バイアスは、行列処理装置命令によって指定され、かつ/又はレジスタ(図示せず)に記憶される。いくつかの実施形態では、構成可能バイアスは再構成可能である。例えば、算術演算を実行した後、構成可能バイアスを、結果の新規の範囲に調整するように再構成することができる。いくつかの実施形態では、再構成は計算命令の一部として指定される。例えば、命令は、構成可能バイアスを再構成するために使用される新規のバイアスを指定してもよい。
いくつかの実施形態では、行列計算ユニットの計算セルを、大きな入力数フォーマットに関する行列演算もサポートするようにグループ化することができる。例えば、各々が入力として8ビット浮動小数点行列要素を演算する8×8行列計算ユニットの計算セルを、グループ化して、16ビット浮動小数点行列要素を入力として使用して、4×4行列演算を実行することができる。いくつかの実施形態では、出力アキュムレータは、量子化結果の精度の低下を防止するようにサイズ設定されている。例えば、符号ビットに単一ビット、指数に8ビット、仮数に7ビットを使用し、更に構成不可能な指数バイアスを使用する16ビット浮動小数点フォーマットは、浮動小数点結果に、27ビット中間浮動小数点フォーマットを利用する。27ビット浮動小数点フォーマットは、符号ビットに単一ビット、指数に9ビット、仮数に17ビットを割り当てることができる。グループ化された動作モードのサポートは、多くのオペランドフォーマットをサポートすることによって、部分的に行列計算ユニットを汎用的にする。
様々な実施形態において、グループ化された動作モードは、入力オペランドを複数の構成要素に分割することによって、かつ各分割された構成要素を異なる計算セルのグループに提供することによって、行列演算を実行する。各分割された構成要素は、浮動小数点数として表され、合算されると、異なる分割された構成要素は、元のオペランドを合計する。例えば、入力オペランドは、オペランドの最上位ビット(すなわち、高い構成要素)と、最下位ビット(すなわち、低い構成要素)とに分割される。様々な実施形態において、高い構成要素の指数は、入力オペランドの同じ指数値を使用するが、低い構成要素の指数は、入力オペランドから最上位ビットを減算することを考慮して調整される。いくつかの実施形態では、最下位ビットの構成要素は正規化される。いくつかの実施形態では、計算セルは非正規数をサポートし、構成要素は非正規数として表され得る。
様々な実施形態において、計算セルフォーマットのサイズの2倍のオペランド数フォーマット(例えば、8ビット浮動小数点オペランドの代わりに16ビット浮動小数点オペランド)を使用して、2つの入力オペランドに対して乗算を実行するとき、4つの計算セルが、共にグループ化され、各入力オペランドは対応する高い及び低い構成要素を有する。各入力オペランドの高い構成要素及び低い構成要素は、高いと高い、高いと低い、低いと高い、及び低いと低い構成要素を対にすることによって、かつ異なるペアを異なる計算セルのグループに提供することによって、処理要素に提供される。計算セルのグループの各々では、行列乗算が実行され、その結果は、計算セルに関連付けられた出力アキュムレータに記憶される。いくつかの実施形態では、出力アキュムレータは、元の入力オペランドよりも高いビット数を有する浮動小数点フォーマットを利用する。例えば、出力アキュムレータは、構成可能な指数バイアスを有さない16ビットの入力オペランドに関して、27ビットを利用してもよい。グループ化されたセルの出力結果が合算されると、その結果は、元の入力オペランドの行列乗算である。いくつかの実施形態では、結果は、行列計算ユニットから移動され、ベクトル計算ユニットなどの後処理装置を使用して合算される。例えば、浮動小数点加算命令を使用して、構成要素結果を加算し、乗算結果を決定する。浮動小数点ベクトル加算命令を使用して、結果のベクトルに関する構成要素を加算することができる。様々な実施形態において、行列計算ユニットは、図3の行列計算ユニット325であり、後処理装置は、図3の後処理装置317である。
いくつかの実施形態では、ノードエンジン300は、複数の行列処理装置313及び351~357を含む。行列処理装置351~357の機能及び構成要素は、行列処理装置313に関して説明される。いくつかの実施形態では、各行列処理装置は、行列乗算を完了するために少なくとも最小数のサイクル、例えば8×8行列処理装置の場合は8サイクルを必要とする。単一のノードエンジンに複数の行列処理装置を組み込むことによって、行列乗算を異なる行列処理装置に配置することができる。得られた出力を交互にして、各サイクルに、異なる行列処理装置から行列結果を読み取ることができる。8つの8×8行列処理装置のセットの場合、各行列処理装置は、8サイクルごとに行列結果を出力することができる。処理装置を交互にすることにより、異なる処理装置からのクロックサイクルごとの行列結果が可能になる。いくつかの実施形態では、異なるサイズの行列処理装置、例えば4×4又は16×16処理装置を使用することができる。同様に、行列処理装置計算パイプラインの深度に基づいて、異なる数の行列処理装置をノードエンジンに含めることができる。
いくつかの実施形態では、行列命令は、特定の行列演算、特定の行列処理装置を指定し、行列結果を記憶するためのアキュムレータを指示し、行列オペランドの位置を指定する。行列オペランドの位置は、レジスタ値又はメモリアドレスを使用して指定されてもよい。例えば、行列命令は、行列乗算、行列乗算処理装置313、出力アキュムレータ329、後処理装置レジスタファイル307のレジスタ、及びメモリ303のメモリアドレスを指定してもよい。いくつかの実施形態では、制御ユニット301は、行列命令を発行する。いくつかの実施形態では、演算は、行列乗算、行列加算、内積、逆行列などを含む。いくつかの構成では、各行列処理装置の出力アキュムレータは、行列処理装置を一意に識別する。行列命令の一部として特定の出力アキュムレータを指定することによって、行列処理装置は本質的に選択される。例えば、アキュムレータにA0-A11命名方式を使用して、第1及び第2の出力アキュムレータ(例えば、A0及びA1)は行列処理装置313にマッピングされ、第3及び第4の出力アキュムレータ(例えば、A2及びA3)は行列処理装置351にマッピングされ、第5及び第6の出力アキュムレータ(例えば、A4及びA5)は行列処理装置352にマッピングされ、以下同様である。この例では、アキュムレータ329及び331は、それぞれA0及びA1として参照される。行列処理装置313のみが結果をアキュムレータA1に記憶できるため、アキュムレータA1を指定する行列乗算命令は、行列処理装置313に発行される。
いくつかの実施形態では、出力アレイ315は、1つ又は複数の行列処理装置の結果を取り出すために使用される。いくつかの実施形態では、出力アレイ315は、どの行列処理装置から、出力アレイに結果をロードするかを決定するマルチプレクサを含む。いくつかの実施形態では、出力アレイは64バイトアレイであり、行列処理装置から出力アレイに行列結果を移動するために2つの移動命令を必要とする。例えば、21ビット浮動小数点値を使用する行列結果は168バイトを必要とする。各21ビット浮動小数点値は、移動コマンド中に、16ビット浮動小数点値に変換される。2つの移動命令のみを使用して、64個の要素の結果行列が64個の21ビット浮動小数点値から64個の16ビット浮動小数点値に変換される。例えば、移動高命令は、最も高い32個の要素を出力アレイに移動させ、移動低命令は、残りの最も低い32個の要素を出力アレイに移動させる。様々な実施形態では、出力アレイは64バイトであるため、最初の移動の結果は、2回目の移動が実行される前に、レジスタ(後処理装置レジスタファイル307のレジスタなど)に、最初に記憶される。様々な実施形態において、出力アレイは、値がメモリ又はレジスタに移動されるまでの一時的な出力アレイである。いくつかの実施形態では、移動命令は非破壊的であり、例えばソースアキュムレータをクリアにすることによって、行列処理装置からの行列結果をクリアしない。
いくつかの実施形態では、後処理装置317は、正規化、スケーリング、活性化関数、プーリングなどの後処理を実行するために使用される。いくつかの実施形態では、後処理装置317は、ベクトルの各要素に対して動作するベクトル計算エンジンである。後処理装置は、浮動小数点数フォーマットを含む1バイト、2バイト、及び4バイトの数値フォーマットなどの異なる数値フォーマットを利用してもよい。いくつかの実施形態では、後処理装置317のレーンの数を構成することができる。例えば、64バイトベクトルをとる後処理装置317は、64、32、及び16レーン構成に対応する、64個の1バイト要素、32個の2バイト要素、又は16個の4バイト要素で動作することができる。図示の例では、後処理装置317は、入力用のデータを取り出すために、かつ後処理結果を記憶するために、後処理装置レジスタファイル307を利用する。いくつかの実施形態では、追加の機械学習機能を実行するために、必要に応じて、追加の後処理装置(図示せず)をノードエンジンに含めてもよい。
図4は、8ビット浮動小数点フォーマットの実施形態を示すブロック図である。図示の例では、8ビット浮動小数点フォーマット400及び410は、符号、仮数、及び指数を使用して浮動小数点数を表すための異なる8ビット浮動小数点フォーマットである。いくつかの実施形態では、図3のノードエンジン300などのノードエンジン、及び行列処理装置313などの行列処理装置は、行列演算のために、8ビット浮動小数点フォーマット400及び410を利用する。16ビット、32ビット、又は別の浮動小数点フォーマットの代わりに、フォーマット400及び410などの8ビット浮動小数点フォーマットを使用して行列演算を実行することによって、行列処理装置の帯域幅が大幅に増加する。いくつかの実施形態では、フォーマット400及び410は、構成可能バイアスをサポートする。構成可能バイアスは、8ビットのデータサイズを依然として維持しつつ、精度を向上させるために、指数を表現する際の大きな範囲を可能にする。いくつかの実施形態では、浮動小数点フォーマット400及び410は、表現可能な値の数を増やすために、非正規数をサポートする。
図示の例では、8ビット浮動小数点フォーマット400は、符号ビット401の単一ビット、指数403の4ビット、及び仮数405の3ビットを含む。符号ビット401、指数403、及び仮数405は、合計8ビットを占め、それを使用して、浮動小数点数を表すことができる。同様に、8ビット浮動小数点フォーマット410は、符号ビット411の単一ビット、指数413の5ビット、及び仮数415の2ビットを含む。符号ビット411、指数413、及び仮数415は、合計8ビットを占め、それを使用して、浮動小数点数を表すことができる。いくつかの実施形態では、構成可能バイアスは、指数をバイアスするために使用される。例えば、フォーマット400の4ビット指数403により、指数403が16個の異なる値(すなわち、0以上、15以下の値)を有することができる。バイアスなしの4ビット(又は0に設定された構成可能バイアスと同等)を使用して、指数403は、それぞれ値0及び15を有する指数フィールドに対応する、値2~215を有する指数を表すことができる。構成可能バイアスを使用することによって、指数の範囲をシフトすることができる。例えば、5の値に設定された構成可能バイアスを使用して、指数403は、値2-5~210を有する指数を表すことができる。様々な実施形態において、構成可能バイアスの値は、構成可能バイアスを表すために使用されるビット数によって制限される。例えば、3ビット構成可能バイアスは、8つの異なる値を有することができる。いくつかの実施形態では、構成可能バイアスによって表される値は連続していない。例えば、3ビット構成可能バイアスによって表される8つの値は、値0~7に限定されない。代わりに、バイアスは8つの異なる値から選択可能である。例えば、構成可能バイアスを、8つの所定の値、1、3、5、7、9、11、15、及び17から選択することができる。いくつかの実施形態では、所定の値は、最も有用なバイアスに基づいて決定される。いくつかの実施形態では、所定の値は、指数の範囲を最大化し、異なるバイアスの範囲間の重複を最小化するように、少なくとも部分的に選択される。いくつかの実施形態では、構成可能バイアスは、行列処理装置命令によって指定され、かつ/又はレジスタ(図示せず)に記憶される。
様々な実施形態において、フォーマット400及び410などの複数の異なる8ビット浮動小数点フォーマットは、行列処理装置によってサポートされる。複数のフォーマットをサポートすることによって、精度を、指数又は仮数のいずれかに利用することができる。例えば、勾配降下などの特定の演算は、追加の精度が必要となり、したがって仮数のビット数が増える場合がある。別の例として、値が互いに近接してクラスタリングされ、指数のための追加の範囲を必要としない演算のために、仮数に多くのビットを使用することができる。対照的に、特定の演算の場合、値の範囲は大きくてもよく、指数の大きな範囲が必要である。フォーマット410を使用すると、仮数専用のビットが少なくなり、指数専用のビットが多くなる。いくつかの実施形態では、フォーマットは、行列処理装置命令によって指定され、レジスタ(図示せず)に記憶されてもよい。様々な実施形態において、図示していない追加の浮動小数点フォーマットがサポートされてもよい。例えば、4ビット仮数フォーマット及び3ビット指数フォーマットがサポートされてもよい(図示せず)。
図5は、21ビット浮動小数点フォーマットの一実施形態を示すブロック図である。図示の例では、浮動小数点フォーマット500は、符号、仮数、及び指数を使用して、浮動小数点数を表す21ビット浮動小数点フォーマットである。いくつかの実施形態では、図3のノードエンジン300などのノードエンジン、及び行列処理装置313などの行列処理装置は、行列乗算及び/又は行列加算の結果(及び中間結果)を記憶するためなど、特定の行列演算のために、フォーマット500などの21ビット浮動小数点フォーマットを利用する。いくつかの実施形態では、フォーマット500は、図3の出力アキュムレータ329及び331などの行列処理装置用のアキュムレータによって使用される。例えば、2つの8ビット乗算オペランドの乗算結果は、その結果が同じ8ビットフォーマットに制限されている場合、オーバーフローエラー又はアンダーフローエラーを引き起こす可能性がある。その結果に8ビットより大きいフォーマットを使用すると、オーバーフローエラー及びアンダーフローエラーが防止される。同様に、8ビットの行列要素との行列乗算を計算するときに中間結果及び最終結果を記憶する21ビット浮動小数点フォーマットを使用すると、オーバーフローエラー又はアンダーフローエラーが防止される。ビット深度が32ビットより小さい結果を使用すると、メモリ使用の効率が向上する。様々な実施形態では、21ビットのビット深度を有するフォーマット500は、メモリ使用量と正確さの両方を最適化するために使用される。いくつかの実施形態では、フォーマット500は構成可能バイアスをサポートする。構成可能バイアスは、21ビットのデータサイズを依然として維持しつつ、精度を向上させるために、大きな範囲を可能にする。いくつかの実施形態では、構成可能バイアスは、行列処理装置命令によって指定され、かつ/又はレジスタ(図示せず)に記憶される。
図示の例では、21ビット浮動小数点フォーマット500は、符号ビット501の単一ビット、指数503の7ビット、及び仮数505の13ビットを含む。符号ビット501、指数503、及び仮数505は、合計21ビットを占め、それを使用して、浮動小数点数を表すことができる。いくつかの実施形態では、構成可能バイアスは、指数をバイアスするために使用される。例えば、フォーマット500の7ビット指数503により、指数503が128個の異なる値(すなわち、0以上、127以下の値)を有することができる。バイアスなしの7ビット(又は0に設定された構成可能バイアスと同等)を使用して、指数503は、それぞれ値0及び127を有する指数フィールドに対応する、値2~2127を有する指数を表すことができる。
様々な実施形態では、フォーマット500は、図3のノードエンジン300及び行列処理装置313などのノードエンジン用の行列処理装置の、図3の出力アキュムレータ329及び331などの1つ又は複数のアキュムレータによって使用される。いくつかの実施形態では、レジスタ(図示せず)を使用して、特定のアキュムレータに浮動小数点数を記憶するために使用される構成可能バイアスの設定を記憶する。いくつかの実施形態では、(例えば、指数及び仮数フィールドのためのビットの異なる割当てを用いて)複数の21ビットフォーマットが使用されてもよく、特定のフォーマットは行列処理装置命令によって指定される。構成可能バイアスの値は、行列処理装置命令を使用して指定されても、かつ/又はレジスタに記憶されてもよい。
図5は、図3の出力アキュムレータ329及び331などの行列処理装置用のアキュムレータによって使用され得る21ビット浮動小数点フォーマットを示しているが、代替のビット深度を有するフォーマットを使用してもよい。例えば、精度の低下を防止するための要件などの動作要件に応じて、27ビット浮動小数点フォーマットを使用して、特定の16ビット浮動小数点演算に対する演算をサポートするときに、量子化結果の精度の低下を防止してもよい。一例として、27ビット浮動小数点フォーマットは、符号ビットの単一ビット、指数の9ビット、及び仮数の17ビットを含んでもよい。27ビット浮動小数点フォーマットを使用して、16ビット浮動小数点オペランドに対する乗算演算を蓄積してもよい。いくつかの実施形態では、16ビット浮動小数点オペランドは、符号ビットに単一ビット、指数に8ビット、仮数に7ビットで表される。
図6は、行列計算を実行するための処理の一実施形態を示す流れ図である。図6の処理は、図2のノードエンジン225、又は図3のノードエンジン300などの1つ又は複数のノードエンジンによって行列計算を実行するために、図2の訓練プラットフォーム223などの訓練プラットフォームによって使用される。いくつかの実施形態では、訓練プラットフォームは、1つ又は複数の行列計算演算を受け取り、異なるノードエンジンにわたって演算を並列化する。各ノードエンジンはまた、異なる行列処理装置にわたってその演算を並列化してもよい。結果は、必要に応じて、1つ又は複数のノードエンジンで組み合わされて、機械学習モデルの重みの行列などの結果を決定してもよい。いくつかの実施形態では、図6の処理は、図1のステップ105の一部として実行される。
601において、計算命令が受信される。いくつかの実施形態では、計算命令は、図2の訓練プラットフォーム223などの訓練プラットフォームによって受信される。訓練プラットフォームは、計算命令を処理し、異なるノードエンジンへの作業の必要な分割及び配置を実行する。例えば、フィルタを用いて画像の畳み込みを要求する計算命令は、機械学習訓練処理を開始する訓練プラットフォームのサーバにおいて受信される。いくつかの実施形態では、命令は、関与する演算及びオペランドを含む計算命令を実行するために、必要なパラメータを含んでもよい。例えば、命令は、入力オペランドのサイズ(例えば、各入力行列のサイズ)、各入力行列の開始アドレス、ストライドパラメータ、パディングパラメータ、並びに/あるいは行列、ベクトル、及び/又は後処理コマンドを含むことができる。例えば、計算命令は、画像データサイズ(例えば、96×96、1920×1080など)及びビット深度(例えば、8ビット、16ビットなど)、並びにフィルタサイズ及びビット深度などを記述してもよい。多くのシナリオでは、行列計算の行列は、行列処理装置内に収まるものより大きくてもよく、そのため、追加の処理を実行して、計算を細分化し、その結果、計算を、異なるノードエンジン又は行列処理装置によって実行することができる。
603において、行列演算及びオペランドが決定される。601において受信した計算命令の1つ又は複数の行列が、行列処理装置の入力行列よりも大きい場合、601の計算命令は小さな構成要素演算に分割される。603において、小さな構成要素演算に対応する行列演算及びオペランドが、決定され、それは、元の行列オペランドを小さな行列にスライスすること、セグメント化すること、又は分割すること、及び小さい行列に対して行列演算を実行することを含んでもよい。小さい行列に対する行列演算の結果を組み合わせて、601において受信した計算命令を完了してもよい。異なるノードエンジン及び行列処理装置を割り当てて、計算命令の異なる構成要素を実行してもよい。いくつかの実施形態では、8ビット浮動小数点フォーマットへの変換のために、行列オペランドの要素を、変換しても、又は対象としてもよい。図4のフォーマット400又はフォーマット410などの8ビット浮動小数点フォーマットは、行列処理装置の処理及び性能帯域幅並びに電力効率を高めるために、ノードエンジンによって使用される。いくつかの実施形態では、対応する浮動小数点フォーマットの構成可能バイアスが選択されるか、又は選択されことになる。例えば、勾配降下演算を実行するために、高精度仮数を有するフォーマットが選択される。
様々な実施形態において、大きな行列は、行列処理装置の適切な寸法に制限されたサイズを有する小さな2次元行列にスライスされる。いくつかの実施形態では、スライスされた行列は、元の行列を参照する要素へのアドレスを有する小さな行列である。スライスされた行列は、処理のためにベクトルに変換されてもよい。いくつかの実施形態では、行列の異なるスライスは、前のスライスと重複してもよい。様々な実施形態において、行列は、読取りバッファサイズの倍数に対応する境界においてのみスライスされてもよい。例えば、各読取りバッファのサイズが8バイトである場合、スライスされた行列の各行は、8の倍数を有するアドレスで開始しなければならない。行列が計算アレイ内に収まる場合、スライシングは必要ない(すなわち、使用される行列スライスは単に元の行列である。)。
605において、行列演算が配置されて、実行される。例えば、603において決定された行列演算及びオペランドに対応する行列演算は、1つ又は複数のノードエンジン、及びノードエンジンの1つ又は複数の行列処理装置に配置される。様々な実施形態において、行列演算は、8ビット要素行列を使用して、1つ又は複数の行列処理装置によって実行される。行列結果の要素の値は、21ビット、27ビット、又は別の適切な浮動小数点フォーマットに蓄積される。様々な実施形態において、8ビット、16ビット、及び32ビット浮動小数点フォーマットを含むいくつかのフォーマットのうちの1つにおいて、行列結果を行列処理装置から移動することができる。様々な実施形態において、各ノードエンジンは、複数の行列処理装置を利用することによって、複数の行列演算を並列に実行することができる。
いくつかの実施形態では、行列オペランドへの参照は、ノードエンジンへの動作と共に配置される。このようにして、ノードエンジンは、スライスされた行列の対応する要素をロードするために、データ読取りを実行することができる。いくつかの実施形態では、ノードエンジンは、メモリ及び/又はレジスタにロードするためにスライスされた行列を線形化し、次いで入力行列を行列処理装置に送信することができる。いくつかの実施形態では、ノードエンジンの制御ユニットは、スライスされた行列オペランド(行列オペランドの指定されたストライド、パディング、及び他のパラメータをアドレス指定することを含む)のロードと、行列処理装置の動作とを含む動作のスケジューリング、発行、及び同期を調整する。行列演算が行列処理装置に発行されると、行列処理装置は、行列演算を完了するために、特定の数のクロックサイクルを必要とする。いくつかの実施形態では、行列処理装置は、図7及び/又は図8の処理を使用して行列演算を実行する。
607において、後処理が実行される。いくつかの実施形態では、後処理はノードエンジンによって実行されてもよく、行列演算の完了後に実行される追加のベクトル演算を含んでもよい。ノードエンジンのベクトル処理装置又はベクトル計算ユニットなど、後処理装置によって、後処理動作を実行することができる。いくつかの実施形態では、ベクトルの各要素に対する、算術演算、スケーリング、正規化、及び/又は正規化線形ユニット(ReLU)関数などの活性化関数の適用など、ベクトル後処理は、複雑な演算を実行することを含む。いくつかの実施形態では、ベクトルの要素を、必要な正確さに応じて、8ビット、16ビット、又は32ビットの要素に変換/フォーマットすることができる。様々な実施形態において、各ノードエンジンによる配置された行列演算の結果は、訓練プラットフォームサーバに送り返される、又は訓練プラットフォームサーバによってリダイレクトされ、さらなる処理に使用されてもよい。例えば、605において配置され、かつ実行された行列演算の結果は、組み合わされ、追加のベクトル又は行列演算のオペランドとして利用されてもよい。607において後処理が開始された後、処理は601にループバックして、追加の計算命令を受信する。いくつかの実施形態では、追加の計算命令のために処理が601にループバックする前に、後処理が完了している必要はない。
図7は、行列計算を実行するための処理の一実施形態を示す流れ図である。図7の処理は、行列計算を実行するために、図3のノードエンジン300の行列処理装置313及び351~357などの行列処理装置によって使用される。いくつかの実施形態では、ノードエンジンの各行列処理装置は、図7の処理を並行して実行することができる。例えば、行列処理装置313及び351~357はそれぞれ、異なる行列引数に対して並行して、図7の処理を実行するが、それぞれは、それぞれの動作の完了を交互にする処理について、異なるステップにあってもよい。いくつかの実施形態では、この処理は、データ行列及び重み行列を使用して畳み込みを実行するために利用される。いくつかのシナリオでは、入力行列は、大きな行列のスライスである。様々な実施形態において、図7の処理は、制御ユニットを介して行列計算命令によって開始されてもよい。命令は、行列計算結果を記憶するために、2つの行列オペランド(例えば、データ及び重み行列のメモリ又はレジスタの位置)、構成可能バイアス、浮動小数点フォーマット、及び指示されたアキュムレータを指定してもよい。いくつかの実施形態では、指示されたアキュムレータは、行列計算が開始される前にゼロにされる。いくつかの実施形態では、指示されたアキュムレータは、図3の出力アキュムレータ329又は331である。いくつかの実施形態では、図7の処理は、図6の605で実行される。
701において、データ入力行列が受け取られる。例えば、訓練センサデータに対応するデータ入力行列の要素は線形化され、行列処理装置のデータ入力アレイに記憶される。いくつかの実施形態では、データ入力行列は、図3の行列処理装置313のデータ入力アレイ321など、データ入力アレイに記憶される。各データ入力アレイは、行列計算ユニットによって処理される対応する行列処理装置について、線形化行列全体を記憶することができる。したがって、2つの8×8行列を乗算し得る行列処理装置は、入力8×8データ行列の64個すべての要素を記憶し得るデータ入力アレイを使用する。例えば、いくつかの実施形態では、各データ入力アレイは、64バイトであり、各要素を8ビット浮動小数点数として記憶する。浮動小数点数のフォーマットは、図4のフォーマット400又は410を使用し、構成可能バイアスを含んでもよい。構成可能バイアスは、行列命令によって、及び/又はレジスタによって指定されてもよい。受け取られたデータ入力行列は、レジスタから、又はSRAMなどのメモリから受け取られてもよい。いくつかの実施形態では、データ入力行列全体を行列処理装置にロードするために、1つ又は複数の読取りが発行されるが、行列全体は一度に利用可能ではない。例えば、スライスされた行列の場合、いくつかの行(又は列)のデータは、そのデータが利用可能になる前に、追加の遅延を必要とする場合がある。したがって、データ入力アレイのデータは、断片的に到着する可能性がある。いくつかの実施形態では、単一の読取りは、データ入力行列全体をロードするために十分である。いくつかの実施形態では、データ入力行列は勾配入力行列である。
703において、重み入力行列が受け取られる。例えば、フィルタの機械学習重みに対応する重み入力行列の要素は、線形化され、行列処理装置の重み入力アレイに記憶される。いくつかの実施形態では、重み入力行列は、図3の行列処理装置313の重み入力アレイ323など、重み入力アレイに記憶される。各重み入力アレイは、行列計算ユニットによって処理される対応する行列処理装置について、線形化行列全体を記憶することができる。したがって、2つの8×8行列を乗算し得る行列処理装置は、入力8×8重み行列の64個すべての要素を記憶し得る重み入力アレイを使用する。例えば、いくつかの実施形態では、各重み入力アレイは、64バイトであり、各要素を8ビット浮動小数点数として記憶する。浮動小数点数のフォーマットは、図4のフォーマット400又は410を使用し、構成可能バイアスを含んでもよい。構成可能バイアスは、行列命令によって、及び/又はレジスタによって指定されてもよい。受け取られた重み入力行列は、レジスタから、又はSRAMなどのメモリから受け取られてもよい。いくつかの実施形態では、重み入力行列全体を行列処理装置にロードするために、1つ又は複数の読取りが発行されるが、行列全体は一度に利用可能ではない。例えば、スライスされた行列の場合、いくつかの行(又は列)の重みデータは、その重みデータが利用可能になる前に、追加の遅延を必要とする場合がある。したがって、重み入力アレイの重みデータは、断片的に到着する可能性がある。いくつかの実施形態では、単一の読取りは、重み入力行列全体をロードするために十分である。いくつかの実施形態では、重み入力行列は勾配入力行列である。
705において、ベクトル引数の対が行列計算ユニットにロードされる。各入力行列から、行に対応するベクトル、及び列に対応するベクトルが、図3の行列計算ユニット325などの行列計算ユニットに、入力引数としてロードされる。ロード処理の一部として、列ベクトルは、行列計算ユニット全体に複製され、行ベクトルは、行列計算ユニット全体に複製される。例えば、重み入力行列の列に対応するベクトル全体が計算ユニットにロードされる。列ベクトルの各要素は、行全体にわたって複製される。したがって、8×8行列計算ユニットの各列は同じ8要素列ベクトルを受け取り、行列計算ユニットの行の各セルにロードされる値は同じである。同様に、データ入力行列の行に対応するベクトル全体が計算ユニットにロードされ、行ベクトルの各要素は列全体に複製される。したがって、8×8行列計算ユニットの各行は同じ8要素列ベクトルを受け取り、行列計算ユニットの列の各セルにロードされる値は同じである。8×8行列計算ユニットの場合、入力行列要素の1/8がロードされる。705において、各入力行列からのベクトルのアンロードされた対は、行列計算ユニットにロードされる。ステップ705を通る後続の各ループは、入力された重み行列及びデータ行列から次の利用可能な列及び行をロードする。したがって、8×8行列は、ロードを完了するために少なくとも8サイクルを必要とする一方で、4×4行列は、ロードを完了するために少なくとも4サイクルを必要とする。
707において、ロードされたベクトルの値が乗算される。行列計算ユニットの各計算セル(図3の計算セル327など)について、行列乗算は、対応する計算セルにロードされた要素を使用して実行される。様々な実施形態において、乗算は、2つの8ビット浮動小数点値に対して実行され、高ビット浮動小数点値として記憶され、オーバーフローを防止し、正確さを維持する。いくつかの実施形態では、高ビット浮動小数点フォーマットは、図5の21ビット浮動小数点フォーマットである。いくつかの実施形態では、量子化結果の精度の低下をさらに低減するために、高ビット浮動小数点フォーマットは27ビット浮動小数点フォーマットである。8×8行列計算ユニットの場合、64個の計算セルの各々は行列乗算を実行する。
709において、乗算結果は、指示されたアキュムレータに蓄積される。例えば、707における各計算ユニットの乗算結果はそれぞれ、行列処理装置のアキュムレータのうちの1つに蓄積される。いくつかの実施形態では、行列処理装置は、図3の2つの出力アキュムレータ329及び331などの2つ以上のアキュムレータを含む。これは、行列処理装置が異なる行列演算の演算をインターリーブし得るので有益である。いくつかの実施形態では、各計算セルは、その計算セルに対応するアキュムレータ内の要素の現在の値を、セルの行列乗算の結果に加算するアキュムレータを含む。様々な実施形態では、アキュムレータは、行列の各要素の蓄積結果を記憶するようにサイズ設定される。したがって、8×8行列計算ユニットの各アキュムレータは、少なくとも64個の要素を有する。いくつかの実施形態では、707における乗算の結果と同様に、アキュムレータの要素は、行列処理装置への入力よりも高ビット浮動小数点値を使用して、オーバーフローを防止し、正確さを維持する。いくつかの実施形態では、高ビット浮動小数点フォーマットは、図5の21ビット浮動小数点フォーマット、又は別の高ビット浮動小数点フォーマットである。いくつかの実施形態では、8×8行列計算ユニットのアキュムレータは、64個の要素が、それぞれ21ビット浮動小数点数を記憶し得るので、168バイトである。
711において、行列演算のために残っている追加のベクトルがあるか否かを決定する。例えば、2つの行列を乗算するために、重み入力行列から最大1つの列と、データ入力行列から1つの行が、クロックサイクルごとにロードされる。行列乗算全体を完了するためには、すべての列及びすべての行をロードする必要がある。8×8行列は、両方の入力行列を行列計算ユニットに完全にロードするために、少なくとも8サイクルを必要とする。同様に、4×4行列は、両方の入力行列を行列計算ユニットに完全にロードするために、少なくとも4サイクルを必要とする。ロードされるべき追加のベクトルが残っている場合、処理は705に戻る。追加のベクトルがロードされないままである(両方の入力行列全体がロードされている)場合、行列乗算は完了し、処理は713に進む。
713において、行列結果は、指示されたアキュムレータから出力アレイにロードされる。行列計算が完了したので、行列結果は、指示されたアキュムレータに記憶される。いくつかの実施形態では、行列の要素は、指示されたアキュムレータに21ビット浮動小数点値として記憶される。したがって、8×8行列の場合、アキュムレータは、64個の値を記憶し、サイズは168バイトである。いくつかの実施形態では、アキュムレータから、図3の出力アレイ315などの出力アレイに結果を移動させるために、複数の移動動作が必要である。いくつかの実施形態では、出力アレイ及び出力アレイへのバスは64バイト幅である。アキュムレータの結果は、21ビット浮動小数点値から、2つの64バイト構成要素に記憶され得る16ビット浮動小数点値に変換される。例として、8×8の結果行列を使用した場合、行列処理装置のアキュムレータからの結果を移動させるために、2つの移動動作が必要である。例えば、移動高動作は、アキュムレータの高ビット(行列の32個の要素に対応する)を、16ビット浮動小数点値として64ビット出力アレイに移動するために使用される。出力アレイ内で移動されると、32個の要素を、図3の後処理装置レジスタファイル307のレジスタのうちの1つなどのレジスタに記憶するか、又はメモリに移動することができる。続いて、移動低動作は、アキュムレータの低ビット(行列の残りの32個の要素に対応する)を、16ビット浮動小数点値として64ビット出力アレイに移動するために使用される。出力アレイに入ると、残りの32個の要素もレジスタに記憶することができる。様々な実施形態では、行列結果を行列処理装置から移動させるために、2つ以上の動作が必要である。21ビット浮動小数点値を16ビット浮動小数点値に変換することによって、2つの移動動作だけが必要とされる。いくつかの実施形態では、値を、8ビット、16ビット、又は32ビットの浮動小数点値として移動することができる。説明した例では、値は、図3の後処理装置317などの後処理装置による後の処理に関する16ビット値として移動される。いくつかの実施形態では、後処理装置はベクトル計算エンジンである。様々な実施形態において、出力アレイは、ノードエンジンの各行列処理装置のアキュムレータに接続され、異なる行列処理装置から移動の結果(例えば、高及び低移動命令)を受信するマルチプレクサとして機能する。
図8は、複数のインターリーブ行列計算を実行するための処理の一実施形態を示す流れ図である。図8の処理は、図3のノードエンジン300の行列処理装置313及び351~357などの行列処理装置によって使用され、2つの行列乗算演算などの複数の行列計算をインターリーブする。インターリーブ行列計算の各々は、複数の中間行列乗算を使用して実装されてもよく、中間乗算の結果は、大きな行列計算を計算するために使用される。処理帯域幅及び効率を改善するために、各中間行列乗算の結果は、行列処理装置に記憶され、代替の行列演算をインターリーブするときにクリアされない。異なる行列演算を区別してもよく、それぞれが重複しない行列オペランドを有する。
いくつかの実施形態では、ノードエンジンの各行列処理装置は、一度に2つ以上の行列演算を処理することができ、1つの行列演算は、行列処理装置の各出力アキュムレータに対応する。いくつかの実施形態では、複数の行列演算をインターリーブする能力により、極めて大きな行列に対する行列乗算演算を実行することができる。その大きな行列は、行列処理装置の入力アレイに適合する小さな行列にスライスされ、小さな行列の行列乗算の結果は組み合わされる。様々な実施形態において、複数の行列演算をインターリーブする能力は、例えば、メモリ読取りの完了を待つ間に、行列計算ユニットを利用することによって、行列処理装置の帯域幅及び性能を増加させる。したがって、(例えば、メモリ読取りのレイテンシに起因して)関連する行列演算の第1のセットで保留している行列演算の入力オペランドが利用可能ではないが、関連する行列演算の第2のセットで保留している行列演算の入力オペランドが利用可能である場合、関連する行列演算の第2のセットは、行列計算ユニットを利用することができる。複数のアキュムレータを利用することによって、行列計算ユニットは、関連する行列演算の特定のセットに専用のアキュムレータに中間結果を記憶することによって、複数の行列計算を切り替えることができる。いくつかの実施形態では、データ入力アレイは、図3のデータ入力アレイ321であり、重み入力アレイは、図3の重み入力アレイ323であり、複数のアキュムレータは、図3の出力アキュムレータ329及び331である。図3の行列処理装置313に関して、2つのアキュムレータを示しているが、追加のアキュムレータを含めて、追加の行列演算をインターリーブしてもよい。
図8の処理は、2つの行列乗算演算のインターリーブをサポートするために、複数の重み入力アレイオペランド、複数のデータ入力アレイオペランド、及び複数の出力アキュムレータを利用する図7の処理の特殊な変形である。図7に関して説明したように、図8の処理は、行列計算ユニットへの列ベクトルのロード、行列計算ユニットへの行ベクトルのロード、計算セルによるオペランドの乗算、及び指示されたアキュムレータへの乗算結果の蓄積を含む、図7のステップを同様に実装するが、2つのインターリーブされた行列演算の中間結果を混在又はワイプしないように注意する。いくつかの実施形態では、図8の処理は、図6の605において実行される。
801において、行列処理装置が追加の行列演算命令を受信し得るか否かを決定する。図8の例では、行列処理装置は、2つの行列演算をインターリーブすることができる。実行中の処理に現在2つの行列演算が存在するか否かを決定する。行列処理装置が追加の行列演算命令を受信し得る場合、処理は803に進む。例えば、行列処理装置が、単一の行列演算のみを処理している最中である、又はアイドル状態であり、いかなる行列演算も処理していないということから、行列処理装置は、追加の行列演算命令を受信することができる。行列処理装置が追加の行列演算命令を受信できない場合、行列処理装置が新規の行列演算命令を受信するために利用可能になるまで、処理は801にループバックする。例えば、行列処理装置は、現在、2つの行列演算を処理している最中であると、現在の演算のうちの少なくとも1つが完了するまで、別の演算を受信することができない。いくつかの実施形態では、行列処理装置が追加の命令を受信する準備ができていることを知らせるために、準備完了信号が制御ユニットに発行される。
803において、行列処理装置は、行列命令を受信し、関連する行列演算の読取り要求を発行する。例えば、行列処理装置は、2つの入力行列に対応する2つのオペランドを有する行列乗算命令を受信する。行列オペランドの値に対して、読取りが発行される。値は、レジスタ及び/又はメモリから読み取られてもよい。例えば、行列引数は、メモリ内のレジスタ及び/又はアドレスを指定してもよい。いくつかの実施形態では、メモリ読取りは、データを利用可能にするために複数のクロックサイクルを必要とする可能性があるので、メモリ読取りは行列計算をストールする可能性がある。いくつかの実施形態では、行列がメモリに順次記憶されないので、複数のメモリ読取りが発行され得る。これは、大きな行列が小さな行列オペランドにスライスされた結果であり得る。
いくつかの実施形態では、受信された命令が、行列結果を記憶する特定のアキュムレータを指定する。複数の行列演算をインターリーブするために、各演算はそれ自体のアキュムレータを利用する。指示されたアキュムレータは、中間行列結果及び最終行列結果を記憶するために使用される。いくつかの実施形態では、指示されたアキュムレータは、入力オペランドのために使用されるフォーマットよりも高ビット浮動小数点フォーマットを使用して中間結果を記憶する。高ビットフォーマットは、結果が量子化されるときの精度の低下を最小限に抑える。
様々な実施形態において、行列オペランドに対応するデータが利用可能である場合、値は受信され、行列処理装置のために準備される。いくつかの実施形態では、行列オペランドは行列処理装置にとって大きすぎ、複数の中間行列演算が、行列命令を完了するために実行される。イベントデータが利用できない場合、行列計算ユニットはストールし、アイドル状態になる可能性がある。アイドル状態のままではなく、第2の演算のためのデータが利用可能である限り、第2の行列演算を実行してもよい。
803において、処理は801と805の両方に進む。処理は、801にループバックして、新規の命令をフェッチし、同時に805に進んで803において受信した命令を実行する。様々な実施形態において、新規の命令のフェッチは、現在の行列演算の処理と並行して行われる。いくつかの実施形態では、801及び805への2つの処理分岐は、パイプラインベースの手法を使用して実施される。
805において、データが現在の行列演算のために準備できているか否かを決定する。例えば、現在の行列演算の行列オペランドからロードされる要素は、行列計算ユニットの計算セルにロードするために利用可能でなければならない。いくつかの実施形態では、行列計算ユニットにロードされるデータは、行列計算ユニットの入力アレイに関してサイズ設定された行列オペランドのスライスである。重み入力アレイのために、要素の保留列が準備できていなければならない。データ入力アレイのために、要素の保留行が準備できていなければならない。現在の行列演算の重み列及びデータ行の要素が利用可能である場合、処理は807に進む。現在の行列演算の保留要素が利用できない場合、処理は813に進む。例えば、保留要素は、メモリ読取り及び/又はキャッシュミスによるレイテンシのために、利用できない場合がある。データが利用可能になるのを待つ間のストールの代わりに、行列計算ユニットは代替の行列演算のために潜在的に利用されてもよい。
807において、現在の行列演算の重み列及びデータ行からの値が対応する計算セルにロードされ、値に対して計算演算が実行され、計算結果が指示されたアキュムレータに蓄積される。いくつかの実施形態では、その計算演算は、2つの異なる行列からの要素を乗算することに対応する乗算演算である。いくつかの実施形態では、807における処理は、図7のステップ701,703,705,707,709及び/又は711に関して説明される。例えば、値は、構成可能バイアスを有する8ビット浮動小数点値としてロードされる。乗算及び蓄積などの計算の結果は、21ビット浮動小数点フォーマットとして第1のアキュムレータに記憶される。一部のシナリオでは、とりわけ、アキュムレータのクリア、浮動小数点フォーマットの決定、及び/又は浮動小数点フォーマットの構成可能バイアスの決定など、行列演算に関連する追加の構成が、807において実行される。
809において、現在の行列演算のための行列命令が完了したか否かを決定する。行列命令が完了した場合、処理は811に進む。行列命令が完了していない場合、処理は805に進み、そこでは、現在の行列演算のための追加データが行列計算ユニットによってロードされ、かつ処理される準備ができているか否かを決定する。いくつかの実施形態では、809における処理は、図7のステップ711に関して説明される。
いくつかの代替の実施形態(図示せず)では、行列命令が完了していない場合、処理は813に進み、そこでは、代替の行列演算が保留中であるか否か、及び保留中の代替の行列演算のデータが行列計算ユニットによってロードされ、かつ処理される準備ができているか否かを決定する。この代替の実施形態では、現在の行列演算を完了する代わりに、データが利用可能である限り、2つの同時の行列演算がある限り、行列計算ユニットは、2つの異なる行列演算間で連続的に交互に往復する。
811において、指示されたアキュムレータに記憶された行列結果は、出力アレイにロードされる。いくつかの実施形態では、21ビット又は27ビット浮動小数点フォーマットなどの高ビット深度浮動小数点フォーマットを使用して結果の行列を記憶するので、行列処理装置から結果を移動するには、複数の移動命令が必要になる場合がある。いくつかの実施形態では、最初に行列要素を16ビット浮動小数点値に変換することによって、行列結果は、出力アレイを介して2つの64バイトレジスタに移動される。いくつかの実施形態では、811における処理は、図7のステップ713に関して説明される。処理はステップ805にループバックし、そこでは、行列処理装置は、行列演算を開始する準備ができている、又は保留中の場合、代替の行列演算を進める準備ができている。
いくつかの代替の実施形態(点線で示す)では、処理は813に進み、そこでは、代替の行列演算が保留中である否か、及び保留中の代替の行列演算のデータが行列計算ユニットによってロードされ、かつ処理される準備ができているか否かを決定する。この代替の実施形態では、現在の行列命令が完了すると、完了を保留している代替の行列演算があった場合に、行列計算ユニットは、代替の行列演算に切り替える。
813において、代替の行列演算が保留中であるか否か、及び保留中の代替の行列演算のためのデータが行列計算ユニットによってロードされ、かつ処理される準備ができているか否かを決定する。例えば、第1の行列演算を処理している間に、803において第2の行列演算が受け取られた場合、完了を保留している第2の行列演算は、その対応する行列引数に対して読取りを発行することになる。保留中の第2の代替の行列演算があるか否か、及びそのデータが行列計算ユニットにロードされる準備ができているか否かを決定する。代替の行列演算のオペランドデータが利用可能である場合、処理は815に進む。いくつかの実施形態では、オペランドデータは、行列計算ユニットの入力アレイに対してサイズ設定された大きなオペランド行列のスライスである。重み入力アレイのために、要素の保留列が準備できていなければならない。データ入力アレイのために、要素の保留行が準備できていなければならない。保留中の代替の行列演算がない、又は代替の行列演算の保留要素が利用可能でない場合、処理は805に進む。例えば、保留要素は、メモリ読取り及び/又はキャッシュミスによるレイテンシのために利用できない場合がある。データが利用可能になるのを待つ間のストールの代わりに、現在の行列演算に対応するデータの利用可能性が再びチェックされる。利用可能なデータを有する第1の行列演算は、処理のために、そのデータを行列計算ユニットにロードする。
815において、行列計算ユニットを含む行列処理装置は、完了を保留している代替の行列演算に対して処理を実行するように切り替えられる。ここで、代替の行列演算は、現在の行列演算として指示され、以前の現在の行列演算は、代替の行列演算として指示される。第1の行列演算はストールしている可能性がある(又はいくつかの実施形態では、完了している可能性がある)ので、行列計算ユニットはここで、完了を保留していた第2の行列演算を実施する。様々な実施形態において、対応する出力アキュムレータは、必要に応じて、以前の中間結果のソースとして、並びに中間結果及び最終結果を蓄積するための宛先として指示される。処理は807に進み、そこでは、新規に指示された現在の行列演算に対して、計算を進行する。
前述の実施形態は、理解を明確にするために、一定程度詳細に説明しているが、本発明は提供した詳細に限定されない。本発明を実施する多くの代替方法がある。開示した実施形態は例示的なものであり、限定的なものではない。

Claims (40)

  1. 1つ又は複数の処理要素を含む行列計算ユニットと、
    前記行列計算ユニットに行列処理装置命令を提供するように構成された制御ユニットとを備え、
    前記行列処理装置命令が、指定されたバイアスを用いてバイアスされた指数を用いてフォーマットされた浮動小数点オペランドを指定する、マイクロ処理装置システム。
  2. 前記浮動小数点オペランドが行列である、請求項1に記載のシステム。
  3. 前記行列の各要素が、8ビット浮動小数点フォーマットを使用する、請求項2に記載のシステム。
  4. 前記8ビット浮動小数点フォーマットが、符号ビットに1ビット、指数フィールドに4ビット、仮数フィールドに3ビットを割り当てる、請求項3に記載のシステム。
  5. 前記8ビット浮動小数点フォーマットが、符号ビットに1ビット、指数フィールドに5ビット、仮数フィールドに2ビットを割り当てる、請求項3に記載のシステム。
  6. 前記行列処理装置命令が、浮動小数点フォーマットのグループからの前記浮動小数点オペランドに関する浮動小数点数フォーマットを指定する、請求項2に記載のシステム。
  7. 前記浮動小数点フォーマットのグループの各浮動小数点フォーマットが、浮動小数点数を表すために同じ合計ビット数を利用し、前記浮動小数点数の仮数フィールドのために異なるビット数を利用する、請求項6に記載のシステム。
  8. 前記指定されたバイアスが、レジスタ引数を使用して構成される、請求項1から7のいずれか一項に記載のシステム。
  9. 前記指定されたバイアスが、所定の浮動小数点指数バイアスの非連続セットから選択される、請求項1から7のいずれか一項に記載のシステム。
  10. 前記指数の構成可能バイアスが、前記行列処理装置命令を介して再構成可能である、請求項1から7のいずれか一項に記載のシステム。
  11. 前記1つ又は複数の処理要素の各々が、浮動小数点乗算器と、アキュムレータとを含む、請求項1から10のいずれか一項に記載のシステム。
  12. 前記1つ又は複数の処理要素の各処理要素が、他の前記処理要素と並列に浮動小数点乗算演算を実行するように構成される、請求項1から11のいずれか一項に記載のシステム。
  13. 前記行列処理装置命令が、前記行列計算ユニットの中間結果を記憶する指示されたアキュムレータを指定する、請求項1から12のいずれか一項に記載のシステム。
  14. 指定されたバイアスを用いてバイアスされた指数を用いてフォーマットされた浮動小数点オペランドを指定する行列処理装置命令を受信するように構成される行列処理装置と、
    後処理装置と、
    前記後処理装置に後処理命令を提供し、かつ前記行列処理装置に前記行列処理装置命令を提供するように構成される制御ユニットと、
    後処理レジスタファイルと、を備え、
    前記後処理命令が、前記後処理レジスタファイルに記憶されたオペランドを指定する、マイクロ処理装置システム。
  15. 前記後処理装置が、ベクトル計算ユニットである、請求項14に記載のシステム。
  16. 前記オペランドが、ベクトルオペランドであり、前記後処理命令が、前記オペランドの各ベクトル要素のデータサイズを指定する、請求項14から15のいずれか一項に記載のシステム。
  17. 制御ユニットから行列処理装置命令を受信することであって、該行列処理装置命令が、指定されたバイアスを用いてバイアスされた指数を用いてフォーマットされた浮動小数点オペランドを指定する、受信するステップと、
    前記浮動小数点オペランドのデータ値に対して1つ又は複数の読取りを発行するステップと、
    前記浮動小数点オペランドの前記データ値を受け取るステップと、
    1つ又は複数の受け取ったデータ値を行列計算ユニットにロードするステップと、
    を含む、方法。
  18. 前記浮動小数点オペランドが行列である、請求項17に記載の方法。
  19. 制御ユニットから行列処理装置命令を受信するステップであって、該行列処理装置命令が、第1の浮動小数点オペランド及び第2の浮動小数点オペランドを指定する、受信するステップと、
    前記第1の浮動小数点オペランドの前半を第1の処理要素及び第2の処理要素にロードするステップと、
    前記第1の浮動小数点オペランドの後半を第3の処理要素及び第4の処理要素にロードするステップと、
    前記第2の浮動小数点オペランドの前半を前記第1の処理要素及び前記第3の処理要素にロードするステップと、
    前記第2の浮動小数点オペランドの後半を前記第2の処理要素及び前記第4の処理要素にロードするステップと、
    前記第1、第2、第3、及び第4の処理要素の各々に対応する第1、第2、第3、及び第4の浮動小数点乗算結果を決定するステップと、
    前記第1、第2、第3、及び第4の浮動小数点乗算結果を出力アキュムレータに記憶するステップと、
    を含む、方法。
  20. ベクトル計算ユニットを使用して、前記第1、第2、第3、及び第4の浮動小数点乗算結果を合算することをさらに含む、請求項19に記載の方法。
  21. 複数の処理要素を含む行列計算ユニットと、
    前記行列計算ユニットに行列処理装置命令を提供するように構成された制御ユニットと、を備え、
    前記行列処理装置命令が、第1の浮動小数点表現フォーマットを使用してフォーマットされた浮動小数点オペランドを指定し、
    前記行列計算ユニットが、前記浮動小数点オペランドを使用して計算された中間結果値を蓄積し、
    前記中間結果値が、第2の浮動小数点表現フォーマットである、マイクロ処理装置システム。
  22. 前記第1の浮動小数点表現フォーマットが、8ビット浮動小数点フォーマットである、請求項21に記載のシステム。
  23. 前記第2の浮動小数点表現フォーマットが、21ビット浮動小数点フォーマットである、請求項21に記載のシステム。
  24. 前記第2の浮動小数点表現フォーマットが、符号ビットに1ビット、指数フィールドに7ビット、仮数フィールドに13ビットを割り当てる、請求項23に記載のシステム。
  25. 前記第2の浮動小数点表現フォーマットが、浮動小数点数を記憶するために、前記第1の浮動小数点表現フォーマットよりも多くのビット数を利用する、請求項21に記載のシステム。
  26. 前記多くのビット数が、オーバーフローエラーの発生を防止し、かつアンダーフローエラーの発生を防止する、請求項25に記載のシステム。
  27. 前記行列計算ユニットが、前記蓄積した中間結果値を第3の浮動小数点表現フォーマットでフォーマットされた出力として出力する、請求項21から26のいずれか一項に記載のシステム。
  28. 前記第3の浮動小数点表現フォーマットが、16ビット浮動小数点フォーマットである、請求項27に記載のシステム。
  29. 前記行列計算ユニットが、2つの行列オペランドを受け取るように構成され、前記浮動小数点オペランドが、前記2つの行列オペランドのうちの1つを表す、請求項21から28のいずれか一項に記載のシステム。
  30. 前記2つの行列オペランドのうちの少なくとも一方が、レジスタ値又はメモリアドレス位置を使用して指定される、請求項29に記載のシステム。
  31. 前記2つの行列オペランドが、線形化行列としてフォーマットされる、請求項29に記載のシステム。
  32. 前記2つの行列オペランドのデータ値が、前記第1の浮動小数点表現フォーマットを使用して、行列処理装置の重み入力アレイ及びデータ入力アレイに記憶される、請求項29に記載のシステム。
  33. 前記複数の処理要素の各々が、複数の浮動小数点アキュムレータを含む、請求項21から32のいずれか一項に記載のシステム。
  34. 前記行列処理装置命令が、前記行列計算ユニットの中間結果を記憶するために指示されたアキュムレータを指定する、請求項21から33のいずれか一項に記載のシステム。
  35. 第1の命令が、前記行列処理装置命令の行列結果の第1の部分を取り出すために使用され、第2の命令が、前記行列処理装置命令の前記行列結果の第2の部分を取り出すために使用され、前記行列結果が、前記第2の浮動小数点表現フォーマットを使用する、請求項21から34のいずれか一項に記載のシステム。
  36. 前記行列結果の前記取り出された第1の部分、及び前記行列結果の前記取り出された第2の部分が、第3の浮動小数点表現フォーマットを使用する、請求項35に記載のシステム。
  37. 前記複数の処理要素の各々が、浮動小数点乗算器及びアキュムレータを含み、他の前記処理要素と並列に浮動小数点乗算演算を実行するように構成される、請求項21から36のいずれか一項に記載のシステム。
  38. 制御ユニットから行列処理装置命令を受信するステップであって、該行列処理装置命令が、第1の浮動小数点行列オペランド及び第2の第1の浮動小数点行列オペランドを指定し、前記第1及び第2の浮動小数点行列オペランドが、第1の浮動小数点表現フォーマットを使用してフォーマットされる、受信するステップと、
    前記第1及び第2の浮動小数点行列オペランドのデータ値を受信するステップと、
    前記第1の浮動小数点行列オペランドの前記データ値をデータ入力アレイに記憶するステップと、
    前記第2の浮動小数点行列オペランドの前記データ値を重み入力アレイに記憶するステップと、
    前記第1の浮動小数点行列オペランドからの単一の行、及び前記第2の浮動小数点行列オペランドからの単一の列を選択するステップと、
    前記行列処理装置の行列計算ユニットの各行において前記選択した単一の行を複製するステップと、
    前記行列計算ユニットの各列において前記選択した単一の列を複製するステップと、
    を含む、方法。
  39. 前記行列計算ユニットの複数の処理要素の各々において中間結果値を蓄積するステップをさらに含み、前記中間結果値が、前記単一の行の要素、及び前記単一の列の要素を使用して計算される、請求項38に記載の方法。
  40. 第1の浮動小数点表現フォーマットを使用してフォーマットされた浮動小数点オペランドを指定する行列処理装置命令を受信し、かつ第2の浮動小数点表現フォーマットを使用して行列結果を蓄積するように構成された、行列処理装置と、
    第3の浮動小数点表現フォーマットを使用して前記行列結果を記憶するように構成された出力アレイと、
    前記第3の浮動小数点表現フォーマットを使用して第2の浮動小数点オペランドを受け取るように構成された後処理装置と、
    前記後処理装置に後処理命令を提供し、かつ前記行列処理装置に前記行列処理装置命令を提供するように構成された制御ユニットと、
    後処理レジスタファイルであって、前記後処理命令が、前記後処理レジスタファイルに記憶された後処理装置オペランドを指定する、後処理レジスタファイルと、
    を備える、マイクロ処理装置システム。
JP2021565039A 2019-05-03 2020-03-02 指定したバイアスを用いた浮動小数点演算を用いた行列乗算命令のためのシステム及び方法 Active JP7430203B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US16/403,083 US11556615B2 (en) 2019-05-03 2019-05-03 Data path for scalable matrix node engine with mixed data formats
US16/403,083 2019-05-03
US16/421,225 2019-05-23
US16/421,225 US11227029B2 (en) 2019-05-03 2019-05-23 Scalable matrix node engine with configurable data formats
PCT/US2020/020622 WO2020226732A1 (en) 2019-05-03 2020-03-02 System and method for matrix multiplication instruction with floating point operand with a specified bias

Publications (2)

Publication Number Publication Date
JP2022531403A true JP2022531403A (ja) 2022-07-06
JP7430203B2 JP7430203B2 (ja) 2024-02-09

Family

ID=73016418

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021565039A Active JP7430203B2 (ja) 2019-05-03 2020-03-02 指定したバイアスを用いた浮動小数点演算を用いた行列乗算命令のためのシステム及び方法

Country Status (5)

Country Link
US (3) US11556615B2 (ja)
EP (2) EP3963445B1 (ja)
JP (1) JP7430203B2 (ja)
CN (1) CN113785271A (ja)
WO (1) WO2020226732A1 (ja)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10678244B2 (en) 2017-03-23 2020-06-09 Tesla, Inc. Data synthesis for autonomous control systems
US10671349B2 (en) 2017-07-24 2020-06-02 Tesla, Inc. Accelerated mathematical engine
US11409692B2 (en) 2017-07-24 2022-08-09 Tesla, Inc. Vector computational unit
US11893393B2 (en) 2017-07-24 2024-02-06 Tesla, Inc. Computational array microprocessor system with hardware arbiter managing memory requests
US11157441B2 (en) 2017-07-24 2021-10-26 Tesla, Inc. Computational array microprocessor system using non-consecutive data formatting
US11561791B2 (en) 2018-02-01 2023-01-24 Tesla, Inc. Vector computational unit receiving data elements in parallel from a last row of a computational array
US11215999B2 (en) 2018-06-20 2022-01-04 Tesla, Inc. Data pipeline and deep learning system for autonomous driving
US11361457B2 (en) 2018-07-20 2022-06-14 Tesla, Inc. Annotation cross-labeling for autonomous control systems
US11636333B2 (en) 2018-07-26 2023-04-25 Tesla, Inc. Optimizing neural network structures for embedded systems
US11562231B2 (en) 2018-09-03 2023-01-24 Tesla, Inc. Neural networks for embedded devices
SG11202103493QA (en) 2018-10-11 2021-05-28 Tesla Inc Systems and methods for training machine models with augmented data
US11196678B2 (en) 2018-10-25 2021-12-07 Tesla, Inc. QOS manager for system on a chip communications
US11349903B2 (en) * 2018-10-30 2022-05-31 Toyota Motor North America, Inc. Vehicle data offloading systems and methods
US11816585B2 (en) 2018-12-03 2023-11-14 Tesla, Inc. Machine learning models operating at different frequencies for autonomous vehicles
US11537811B2 (en) 2018-12-04 2022-12-27 Tesla, Inc. Enhanced object detection for autonomous vehicles based on field view
US11610117B2 (en) 2018-12-27 2023-03-21 Tesla, Inc. System and method for adapting a neural network model on a hardware platform
US10997461B2 (en) 2019-02-01 2021-05-04 Tesla, Inc. Generating ground truth for machine learning from time series elements
US11567514B2 (en) 2019-02-11 2023-01-31 Tesla, Inc. Autonomous and user controlled vehicle summon to a target
US10956755B2 (en) 2019-02-19 2021-03-23 Tesla, Inc. Estimating object properties using visual image data
US11556615B2 (en) 2019-05-03 2023-01-17 Tesla, Inc. Data path for scalable matrix node engine with mixed data formats
US11138292B1 (en) * 2019-05-16 2021-10-05 Facebook, Inc. Circuit and method for computing depthwise convolution
US11586889B1 (en) * 2019-12-13 2023-02-21 Amazon Technologies, Inc. Sensory perception accelerator
US11574100B2 (en) * 2020-06-19 2023-02-07 Micron Technology, Inc. Integrated sensor device with deep learning accelerator and random access memory
US11417373B2 (en) * 2020-12-09 2022-08-16 Micron Technology, Inc. Neuromorphic computing devices and methods
US20220206805A1 (en) * 2020-12-26 2022-06-30 Intel Corporation Instructions to convert from fp16 to bf8
KR20230021457A (ko) * 2021-08-05 2023-02-14 현대모비스 주식회사 차량의 장애물 감지 시스템 및 방법
EP4318228A1 (en) * 2022-08-03 2024-02-07 INTEL Corporation 8-bit floating point source arithmetic instructions
CN117151169A (zh) * 2023-10-31 2023-12-01 北京弘微智能技术有限公司 数据处理电路及电子设备

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11511579A (ja) * 1995-09-26 1999-10-05 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 浮動小数点処理装置のためのリザベーションステーション
JP2002094886A (ja) * 2000-09-13 2002-03-29 Hamamatsu Photonics Kk 高速画像処理装置
US20170221176A1 (en) * 2016-01-29 2017-08-03 Fotonation Limited Convolutional neural network
JP2018520404A (ja) * 2015-04-28 2018-07-26 クゥアルコム・インコーポレイテッドQualcomm Incorporated ニューラルネットワークのためのトレーニング基準としてのフィルタ特異性
US20180322382A1 (en) * 2017-05-03 2018-11-08 Intel Corporation Scaling half-precision floating point tensors for training deep neural networks
JP2019164595A (ja) * 2018-03-20 2019-09-26 国立研究開発法人産業技術総合研究所 演算システム

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8280941B2 (en) * 2007-12-19 2012-10-02 HGST Netherlands B.V. Method and system for performing calculations using fixed point microprocessor hardware
CN101986264B (zh) * 2010-11-25 2013-07-31 中国人民解放军国防科学技术大学 用于simd向量微处理器的多功能浮点乘加运算装置
CN107526709A (zh) 2016-06-15 2017-12-29 辉达公司 使用低精度格式的张量处理
US10528321B2 (en) * 2016-12-07 2020-01-07 Microsoft Technology Licensing, Llc Block floating point for neural network implementations
KR102258120B1 (ko) * 2017-05-17 2021-05-28 구글 엘엘씨 하드웨어에서 매트릭스 곱셈을 수행
US20200097799A1 (en) * 2017-06-30 2020-03-26 Intel Corporation Heterogeneous multiplier
US10747501B2 (en) * 2017-08-31 2020-08-18 Qualcomm Incorporated Providing efficient floating-point operations using matrix processors in processor-based systems
KR20190044878A (ko) 2017-10-23 2019-05-02 삼성전자주식회사 뉴럴 네트워크에서 파라미터를 처리하는 방법 및 장치
US11216250B2 (en) * 2017-12-06 2022-01-04 Advanced Micro Devices, Inc. Dynamic, variable bit-width numerical precision on field-programmable gate arrays for machine learning tasks
US10592208B2 (en) 2018-05-07 2020-03-17 International Business Machines Corporation Very low precision floating point representation for deep learning acceleration
US11062202B2 (en) 2018-07-25 2021-07-13 Cerebras Systems Inc. Numerical representation for neural networks
US11556615B2 (en) 2019-05-03 2023-01-17 Tesla, Inc. Data path for scalable matrix node engine with mixed data formats

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11511579A (ja) * 1995-09-26 1999-10-05 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 浮動小数点処理装置のためのリザベーションステーション
JP2002094886A (ja) * 2000-09-13 2002-03-29 Hamamatsu Photonics Kk 高速画像処理装置
JP2018520404A (ja) * 2015-04-28 2018-07-26 クゥアルコム・インコーポレイテッドQualcomm Incorporated ニューラルネットワークのためのトレーニング基準としてのフィルタ特異性
US20170221176A1 (en) * 2016-01-29 2017-08-03 Fotonation Limited Convolutional neural network
US20180322382A1 (en) * 2017-05-03 2018-11-08 Intel Corporation Scaling half-precision floating point tensors for training deep neural networks
JP2019164595A (ja) * 2018-03-20 2019-09-26 国立研究開発法人産業技術総合研究所 演算システム

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
大山 洋介: "ディープラーニングのデータ並列学習における少精度浮動小数点数を用いた通信量の削減", 情報処理学会 研究報告 ハイパフォーマンスコンピューティング(HPC) 2017−HPC−158 [, JPN6023000374, 1 March 2017 (2017-03-01), JP, pages 1 - 10, ISSN: 0004961537 *
岸 裕真 YUMA KISHI: "敵対型生成ネットワークにおける学習の低ビット化の検討 Quantization Optimization for Training of Gene", 電子情報通信学会技術研究報告 VOL.118 NO.165 [ONLINE] IEICE TECHNICAL REPORT, vol. 第118巻, JPN6023000373, 23 July 2018 (2018-07-23), JP, pages 91 - 96, ISSN: 0004961538 *

Also Published As

Publication number Publication date
EP3963445A1 (en) 2022-03-09
US20230177108A1 (en) 2023-06-08
US20200349216A1 (en) 2020-11-05
EP4300357A2 (en) 2024-01-03
JP7430203B2 (ja) 2024-02-09
CN113785271A (zh) 2021-12-10
US11227029B2 (en) 2022-01-18
EP3963445B1 (en) 2023-12-27
WO2020226732A1 (en) 2020-11-12
US20200348909A1 (en) 2020-11-05
US11556615B2 (en) 2023-01-17

Similar Documents

Publication Publication Date Title
JP7430203B2 (ja) 指定したバイアスを用いた浮動小数点演算を用いた行列乗算命令のためのシステム及び方法
US20200380369A1 (en) Training a neural network using selective weight updates
US20210048991A1 (en) Performing matrix operations in neural networks
CN114586043A (zh) 使用强化学习的训练策略搜索
CN111095242A (zh) 向量计算单元
US20220398456A1 (en) Identification of multi-scale features using a neural network
US20210133583A1 (en) Distributed weight update for backpropagation of a neural network
US20220173752A1 (en) Performing cyclic redundancy checks using parallel computing architectures
JP2023507062A (ja) 深層学習のためのマスタ変換アーキテクチャ
CN114556420A (zh) 图像对齐神经网络
CN111047036B (zh) 神经网络处理器、芯片和电子设备
CN114556376A (zh) 在并行计算架构上执行加扰和/或解扰
CN110991619A (zh) 神经网络处理器、芯片和电子设备
CN115701583A (zh) 将处理任务卸载到解耦加速器以提高片上系统中的性能
CN111091181B (zh) 卷积处理单元、神经网络处理器、电子设备及卷积运算方法
CN115039094A (zh) 用于矩阵乘法和归约操作的自动融合的处理器和系统
CN115130667A (zh) 访问张量
CN115701593A (zh) 在片上系统的直接存储器访问系统中使用硬件定序器
CN115701589A (zh) 用于片上系统的可编程视觉加速器的内置自测试
CN111047035B (zh) 神经网络处理器、芯片和电子设备
CN115701597A (zh) 在片上系统中使用解耦查找表加速器来加速表查找
CN115701596A (zh) 在片上系统中以单个周期执行多点表查找

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20211227

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20221214

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230110

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230406

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230711

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20231011

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: 20240109

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20240130

R150 Certificate of patent or registration of utility model

Ref document number: 7430203

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150