(58)【調査した分野】(Int.Cl.,DB名)
【発明の概要】
【0004】
本出願の実施例は、演算の処理速度を高まれる計算装置と計算方法を提供する。
【0005】
第1の態様によれば、本出願の実施例は、計算装置を提供する、前記計算装置は機械学習計算を実行するために用いられ、前記計算装置は、演算ユニット、制御ユニット、および変換ユニットを備え、
前記制御ユニットは、第1の入力データおよび計算命令を取得するために用いられ、前記計算命令を解析して、データ変換命令および/または1つ以上の演算命令を得て、前記データ変換命令は、操作ドメインおよび操作コードを含み、当該操作コードは、前記データタイプ変換命令の機能を示すために用いられ、前記データタイプ変換命令の操作ドメインには、小数点位置、第1の入力データのデータタイプを示すためのフラグビット、およびデータタイプの変換モード識別子が含まれており、前記データ変換命令の操作コードと操作ドメインおよび前記第1の入力データを前記変換ユニットに送信し、前記複数の演算命令を演算ユニットに送信し、
前記変換ユニットは、前記データ変換命令の操作コードおよび操作ドメインに応じて前記第1の入力データを第2の入力データに変換するために用いられ、前記第2の入力データは固定小数点データであり、前記第2の入力データを演算ユニットに送信し、
前記演算ユニットは、前記複数の演算命令に応じて前記第2の入力データに対して演算を行い、前記計算命令の計算結果を得るために用いられる。
【0006】
ある可能な実施例では、機前記機械学習計算は、人工ニューラルネットワーク演算を含み、前記第1の入力データは、入力ニューロンデータおよび重みデータを含み、前記計算結果は、出力ニューロンデータである。
【0007】
ある可能な実施例では、前記演算ユニットは、マスター処理回路と複数のスレーブ処理回路とを備え、
前記マスター処理回路は、第2入力データに対して前処理を実行し、複数のスレーブ処理回路間でデータおよび複数の前記演算命令を送信するために用いられる。
【0008】
前記複数のスレーブ処理回路は、前記マスター処理回路から送信される第2の入力データおよび前記複数の演算命令に従い、中間演算を行い複数の中間結果を得て、複数の中間結果を前記マスター処理回路に送信するために用いられ、
前記マスター処理回路は、前記複数の中間結果に対して後続の処理を実行して、前記計算命令の計算結果を得るために用いられる。
【0009】
ある可能な実施例では、前記計算装置は、メモリユニットおよびダイレクトメモリアクセスDMAユニットをさらに備え、前記メモリユニットは、レジスタおよびキャッシュの任意の組み合わせを備え、
前記キャッシュは、前記第1の入力データを格納するために用いられ、
前記レジスタは、前記第1の入力データのうちのスカラーデータを格納するために用いられ、
前記キャッシュには、ステージングキャッシュが含まれる。
【0010】
ある可能な実施例では、前記制御ユニットは、命令キャッシュユニットと、命令キャッシュユニットと、ストレージキューユニットとを備え、
前記命令キャッシュユニットは、人工ニューラルネットワーク演算に関連する計算命令を格納するために用いられ、
前記命令処理ユニットは、前記計算命令を解析して前記データ変換命令および前記複数の演算命令を得て、前記データ変換命令を解析して前記データ変換命令の操作コードおよび操作ドメインを得るために用いられ、
前記ストレージキューユニットは、命令キューを格納するために用いられ、当該命令キューは、キューの順序で実行される予定の複数の演算命令または計算命令を含む。
【0011】
ある可能な実施例では、前記演算ユニットは、
依存関係処理ユニットをさらに備え、前記依存関係処理ユニットは、第1の演算命令と前記第1の演算命令の前の第0の演算命令が関連しているかどうかを確定するために用いられ、前記第1の演算命令が前記第0の演算命令に関連している場合、前記第1の演算命令を前記命令キャッシュユニットにキャッシングし、前記第0の演算命令の実行が完了した後、前記第1の演算命令を前記命令キャッシュユニットから抽出し前記演算ユニットに送信し、
前記第1の演算命令と前記第1の演算命令の前の第0の演算命令が関連しているかどうかを確定することは、
前記第1の演算命令に従い、前記第1の演算命令における必要なデータの第1のメモリアドレス範囲を抽出し、前記第0の演算命令に従い、前記第0の演算命令における必要なデータの第0のメモリアドレス範囲を抽出し、前記第1のメモリアドレス範囲と前記第0のメモリアドレス範囲が重なる領域を有する場合、前記第1の演算命令と前記第0の演算命令が関連していると確定し、前記第1のメモリアドレス範囲と前記第0のメモリアドレス範囲が重なる領域を有しない場合、前記第1の演算命令と前記第0の演算命令が関連していないと確定することを含む。
【0012】
ある可能な実施例では、前記第1の入力データが固定小数点データである場合、前記演算ユニットはさらに、
前記第1の入力データの小数点の位置に従って1つ以上の中間結果の小数点の位置を導出するために用いられる導出ユニットを含み、ここ、前記1つ以上の中間結果は前記第1の入力データに従って演算されて得る。
【0013】
ある可能な実施例では、前記演算ユニットはさらに、
前記1つ以上の中間結果をキャッシングするために用いられるデータキャッシュユニットを含む。
【0014】
ある可能な実施例では、前記演算ユニットは、ツリーモジュールを備え、前記ツリーモジュールは、ルートポートおよび複数のブランチポートを備え、前記ツリーモジュールのルートポートは前記マスター処理回路に接続され、前記ツリーモジュールの複数のブランチポートはそれぞれ複数のスレーブ処理回路の1つに接続され、
前記ツリーモジュールは、前記マスター処理回路と前記複数のスレーブ処理回路の間でデータおよび演算命令を転送するために用いられる。
【0015】
前記演算ユニットは、分岐処理回路をさらに備え、
前記マスター処理回路は、具体的に、前記入力ニューロンがブロードキャストデータであり、重みが配信データであると確定し、1つの配信データを複数のデータブロックに割り当て、前記複数のデータブロックのうち少なくとも1つのデータブロック、ブロードキャストデータおよび複数の演算命令のうち少なくとも1つの演算命令を前記分岐処理回路に送信するために用いられ、
前記分岐処理回路は、マスター処理回路と前記複数のスレーブ処理回路との間でデータブロック、ブロードキャストデータ、および演算命令を転送するために用いられ、
前記複数のスレーブ処理回路は、中間命令を取得するために、演算命令に従って受信したデータブロックおよびブロードキャストデータに対して演算を実行し中間結果を得て、中間結果を分岐処理回路に送信するために用いられ、
前記マスター処理回路はさらに、前記分岐処理回路によって送信された中間結果に対して後続の処理を実行して、前記演算命令の結果を得て、前記計算命令の結果を前記制御ユニットに送信するために用いられる。
【0016】
ある可能な実施例では、前記演算ユニットは、マスター処理回路と複数のスレーブ処理回路とを備え、
前記複数のスレーブ処理回路は、アレイに配置され、各スレーブ処理回路は、隣接する他のスレーブ処理回路に接続され、前記マスター処理回路は、前記複数のスレーブ処理回路のうちのK個のスレーブ処理回路と接続し、前記K個のスレーブ処理回路は、第1行のn個のスレーブ処理回路、第m行の第n個のスレーブ処理回路、および第1列のm個のスレーブ処理回路であり、
前記K個のスレーブ処理回路は、前記マスター処理回路と複数のスレーブ処理回路との間でデータおよび命令を転送するために用いられ、
前記マスター処理回路はさらに、前記入力ニューロンがブロードキャストデータであり、重みが配信データであると確定し、1つの配信データを複数のデータブロックに割り当て、前記複数のデータブロックのうち少なくとも1つのデータブロックと複数の演算命令のうち少なくとも1つの演算命令を前記K個のスレーブ処理回路に送信するために用いられ、
前記K個のスレーブ処理回路は、前記マスター処理回路と前記複数のスレーブ処理回路との間のデータを変換するために用いられ、
前記複数のスレーブ処理回路は、前記演算命令に従って受信したデータブロックに対して演算を実行し中間結果を得て、演算結果を前記K個のスレーブ処理回路に送信するために用いられ、
前記マスター処理回路は、前記K個のスレーブ処理回路から送信した中間結果を処理して当該計算命令の結果を得て、当該計算命令の結果を前記制御ユニットに送信するために用いられる。
【0017】
ある可能な実施例では、前記マスター処理回路は、具体的に、複数の処理回路によって送信された中間結果を組み合わせて並べ替え、当該計算命令の結果を得るために用いられ、
または、前記マスター処理回路は、具体的に、複数の処理回路の送信した中間結果を組み合わせて並べ替え、活性化処理した後に当該計算命令の結果を得るために用いられる。
【0018】
ある可能な実施例では、前記マスター処理回路は、活性化処理回路および加算処理回路の1つまたは任意の組み合わせを備え、
前記活性化処理回路は、マスター処理回路内においてデータの活性化演算を実行するために用いられ、
前記加算処理回路は、加算演算または累積演算を実行するために用いられる。
【0019】
ある可能な実施例では、前記スレーブ処理回路は、
受信されたデータブロックに対して乗算演算を実行して乗算結果を得るために用いられる乗算処理回路を備える。
【0020】
ある可能な実施例では、前記スレーブ処理回路がさらに、
当該乗算結果に対して累積演算を実行し中間結果を得るために用いられる累積処理回路を備える。
【0021】
ある可能な実施例では、前記ツリーモデルは多進木構造であり、前記nは2以上の整数である。
【0022】
さらに、ある可能な実施例では、前記制御ユニットは、第1の入力データと計算命令とを取得する前に、前記第1の入力データの小数点位置および固定小数点データのビット幅を決定するために用いられる。前記固定小数点データのビット幅は前記第1の入力データが変換された固定小数点データのビット幅である。
【0023】
さらに、前記演算ユニットは、前記第1の入力データの小数点位置を初期化し、前記第1の入力データの小数点位置を調整するために用いられる。
【0024】
ある可能な実施例では、前記演算ユニットは、以下を含む前記第1入力データの小数点位置を初期化する。
【0025】
前記第1の入力データの絶対値の最大値に従って前記第1の入力データの小数点位置を初期化する、または;
前記第1の入力データの絶対値の最小値に従って前記第1の入力データの小数点位置を初期化する、または;
前記第1の入力データにおける異なるデータタイプの間の関係に従って前記第1の入力データの小数点位置を初期化する、または;
経験的定数に従って前記第1の入力データの小数点位置を初期化する。
【0026】
ある可能な実施例では、前記演算ユニットは、前記第1の入力データの絶対値の最大値に従って以下を含む前記第1の入力データの小数点位置を初期化する。
【0027】
前記演算ユニットは、第1の予設式および前記第1の入力データの絶対値の最大値に従って前記第1の入力データの小数点位置を初期化する。
【0029】
ある可能な実施例では、前記第1の入力データの絶対値の最大値は、データカタイプに従って取得された絶対値の最大値を含む、または、
前記第1の入力データの絶対値の最大値には、層やデータタイプに従って取得された絶対値の最大値が含まれる、または、
前記第1の入力データの絶対値の最大値には、層やデータタイプやグループに従って取得された絶対値の最大値が含まれる。
【0030】
ある可能な実施例では、前記演算ユニットは、前記第1の入力データの絶対値の最小値に従って以下を含む前記第1の入力データの小数点位置を初期化する。
【0031】
前記演算ユニットは、第2の予設式および前記第1の入力データの絶対値の最小値に従って前記第1の入力データの小数点位置を初期化する。
【0033】
ある可能な実施例では、前記第1の入力データの絶対値の最小値は、データカタイプに従って取得された絶対値の最小値を含む、または、
前記第1の入力データの絶対値の最小値には、層やデータタイプに従って取得された絶対値の最小値が含まれる、または、
前記第1の入力データの絶対値の最小値には、層やデータタイプやグループに従って取得された絶対値の最小値が含まれる。
【0034】
ある可能な実施例では、前記演算ユニットは、前記第1の入力データの絶対値のうちに異なるデータタイプの間の関係に従って以下を含む前記第1の入力データの小数点位置を初期化する。
【0037】
ある可能な実施例では、前記演算ユニットは、以下を含む前記第1の入力データの小数点位置を調整する。
【0038】
前記第1の入力データのうちに絶対値の最大値に従って前記第1の入力データの小数点位置をシングルステップで上方調整する、または;
前記第1の入力データのうちに絶対値の最大値に従って前記第1の入力データの小数点位置をステップバイステップで上方調整する、または;
前記第1の入力データの分布に従って前記第1の入力データの小数点位置をシングルステップで上方調整する、または;
前記第1の入力データの分布に従って前記第1入力データの小数点位置をステップバイステップで上方調整する、または;
前記第1の入力データのうちに絶対値の最大値に従って前記第1の入力データの小数点位置を下方調整する。
【0039】
第2の態様によれば、本出願の実施例は、機械学習計算を実行する方法提供する、当該方法においては、
第1の入力データと計算命令を取得することと、
前記計算命令を解析して、データ変換命令および複数の演算命令を得て、前記データ変換命令は操作ドメインおよび操作コードを含み、該当操作コードは前記データタイプ変換命令の機能を指示する。前記データタイプ変換命令の操作ドメインは小数点位置を含み、第1入力データのデータタイプのフラグビット、およびデータタイプの変換モードを指示するために用いられ、
前記データ変換命令に従って、前記第1の入力データを固定小数点データである第2の入力データに変換することと、
前記複数の演算命令に従って、前記第2の入力データに対して計算を実行して、計算命令の結果を得ることとを、含む。
【0040】
ある可能な実施例では、前記機械学習計算は、人工ニューラルネットワーク演算を含み、前記第1の入力データは、入力ニューロンおよび重みを含み、前記計算結果は、出力ニューロンである。
【0041】
ある可能な実施例では、前記データ変換命令に従って前記第1の入力データを第2の入力データに変換することは、
前記データ変換命令を解析して、前記小数点位置、前記第1の入力データのデータタイプを示すためのフラグビット、およびデータタイプの変換モードを得ることと、
前記第1の入力データのデータタイプフラグビットに従って前記第1の入力データのデータタイプを確定することと、
前記小数点位置と前記データタイプの変換方式に従って、前記第1の入力データを前記第1の入力データのデータタイプと異なる第2の入力データに変換することとを、含む。
【0042】
ある可能な実施例では、前記第1の入力データおよび前記第2の入力データが両方とも固定小数点データである場合、前記第1の入力データの小数点位置と前記第2の入力データの小数点位置とが異なる。
【0043】
ある可能な実施例では、前記第1の入力データは固定小数点データである場合、前記方法はさらに、
前記第1の入力データの小数点位置に従って、1つ以上の中間結果の小数点位置を導出し、前記1つ以上の中間結果は前記第1の入力データに従って演算され得る。
【0044】
さらに、前記方法には、第1の入力データと計算命令とを取得する前に、前記第1の入力データの小数点位置および固定小数点データのビット幅を決定するために用いられる。前記固定小数点データのビット幅は前記第1の入力データが変換された固定小数点データのビット幅である。
【0045】
前記第1入力データの小数点位置を初期化し、前記第1入力データの小数点位置を調整する。
【0046】
ある可能な実施例では、前記初期化は、以下を含む前記第1入力データの小数点位置を初期化する。
【0047】
前記第1の入力データの絶対値の最大値に従って前記第1の入力データの小数点位置を初期化する、または;
前記第1の入力データの絶対値の最小値に従って前記第1の入力データの小数点位置を初期化する、または;
前記第1の入力データにおける異なるデータタイプの間の関係に従って前記第1の入力データの小数点位置を初期化する、または;
経験的定数に従って前記第1の入力データの小数点位置を初期化する。
【0048】
ある可能な実施例では、前記第1の入力データの絶対値の最大値に従って以下を含む前記第1の入力データの小数点位置を初期化する。
【0049】
第1予設式および前記第1の入力データの絶対値の最大値に従って前記第1の入力データの小数点位置を初期化する。
【0051】
ある可能な実施例では、前記第1の入力データの絶対値の最大値は、データカタイプに従って取得された絶対値の最大値を含む、または、
前記第1の入力データの絶対値の最大値には、層やデータタイプに従って取得された絶対値の最大値が含まれる、または、
前記第1の入力データの絶対値の最大値には、層やデータタイプやグループに従って取得された絶対値の最大値が含まれる。
【0052】
ある可能な実施例では、前記第1の入力データの絶対値の最小値に従って以下を含む前記第1の入力データの小数点位置を初期化する。
【0053】
第2の予設式および前記第1の入力データの絶対値の最小値に従って前記第1の入力データの小数点位置を初期化する。
【0055】
ある可能な実施例では、前記第1の入力データの絶対値の最小値は、データカタイプに従って取得された絶対値の最小値を含む、または、
前記第1の入力データの絶対値の最小値には、層やデータタイプに従って取得された絶対値の最小値が含まれる、または、
前記第1の入力データの絶対値の最小値には、層やデータタイプやグループに従って取得された絶対値の最小値が含まれる。
【0056】
ある可能な実施例では、前記第1の入力データの絶対値のうちに異なるデータタイプの間の関係に従って以下を含む前記第1の入力データの小数点位置を初期化する。
【0059】
ある可能な実施例では、以下を含む前記第1の入力データの小数点位置を調整する。
【0060】
前記第1の入力データのうちに絶対値の最大値に従って前記第1の入力データの小数点位置をシングルステップで上方調整する、または;
前記第1の入力データのうちに絶対値の最大値に従って前記第1の入力データの小数点位置をステップバイステップで上方調整する、または;
前記第1の入力データの分布に従って前記第1の入力データの小数点位置をシングルステップで上方調整する、または;
前記第1の入力データの分布に従って前記第1入力データの小数点位置をステップバイステップで上方調整する、または;
前記第1の入力データのうちに絶対値の最大値に従って前記第1の入力データの小数点位置を下方調整する。
【0061】
第3の態様によれば、本出願の実施例は、機械学習演算装置を提供し、前記機械学習演算装置は、第1態様に記載の1つまたは複数の計算装置を備え、前記機械学習演算装置は、他の処理装置から演算予定のデータおよび制御情報を取得し、指定される機械学習演算を実行し、I/Oインターフェイスを介して他の処理装置に実行結果を送信するために用いられ、
前記機械学習計算装置が複数の前記計算装置を備える場合、前記複数の前記計算装置の間は特定の構造を介して接続されデータが伝送されてもよく、
ここで、複数の前記計算装置は、より大規模な機械学習の演算をサポートするように高速な周辺機器相互接続バスPCIEバスによって相互接続されデータが伝送され、複数の前記計算装置は同じ制御システムを共有するか、またはそれぞれの制御システムを有し、複数の前記計算装置は、メモリを共有するか、またはそれぞれのメモリを有し、複数の前記計算装置の相互接続方式は、任意の相互接続トポロジである。
【0062】
第4の態様によれば、本出願の実施例は、複合処理装置を提供し、前記複合処理装置は、第3態様に記載の機械学習演算装置と、相互接続共通インターフェースと、他の処理装置とを備え、前記機械学習計算装置は、他の処理装置とインタラクションをして、ユーザが指定する計算操作を共同で完成させる。前記組合せ処理装置は記憶装置をさらに備え、当該記憶装置は、前記機械学習演算装置と前記他の処理装置とにそれぞれ接続され、前記機械学習演算装置および前記他の処理装置のデータを格納するために用いられる。
【0063】
第5の態様によれば、本出願の実施例は、ニューラルネットワークチップを提供し、前記ニューラルネットワークチップは、第1の態様請求項17に記載の機械学習演算装置、第3の態様に記載の機械学習計算装置、または第5の態様に記載の複合処理装置を備える。
【0064】
第6の態様によれば、本出願の実施例は、ニューラルネットワークチップパッケージ構造を提供し、当該ニューラルネットワークチップパッケージ構造は、前記第5の態様で記載されているニューラルネットワークチップを含む。
【0065】
第7の態様によれば、本発明の実施例は、ボードカードを提供し、前記ボードカードは、記憶装置、インターフェース装置、制御装置、および第5の態様に記載のニューラルネットワークチップを備え、
前記ニューラルネットワークチップは、前記記憶装置、前記制御装置、および前記インターフェース装置にそれぞれ接続され、
前記記憶装置は、データを格納するために用いられ、
前記インターフェイス装置は、前記チップと外部機器と間でのデータ伝送を実現するために用いられ、
前記制御装置は、前記チップのステータスをモニタリングするために用いられる。
【0066】
さらに、前記記憶装置は、複数のグループのメモリセルを備え、各グループの前記メモリセルは、バスによって前記チップに接続され、前記メモリセルは、DDR SDRAMであり、
前記チップは、各前記メモリセルに対するデータ伝送およびデータ記憶を制御するDDRコントローラを備え、
前記インターフェイス装置は、標準のPCIEインターフェイスである。
【0067】
第8の態様によれば、本発明の実施例は、電子機器を提供し、当該電子機器は、前記第5の態様に記載のニューラルネットワークチップと、前記第6の態様に記載のニューラルネットワークチップパッケージ構造と、前記第7の態様に記載のボードカードとを備える。
【0068】
いくつかの実施例では、前記電子機器は、データ処理装置と、ロボットと、コンピューターと、プリンターと、スキャナーと、タブレットと、スマートターミナルと、携帯電話と、運転レコーダーと、ナビゲーターと、センサーと、ウェブカメラと、サーバーと、クラウドサーバーと、カメラと、ビデオカメラと、プロジェクターと、時計と、ヘッドフォンと、モバイルストレージと、ウェアラブルと、乗り物と、家電製品と、および/または医療機器とを含む。
【0069】
いくつかの実施例では、前記乗り物は、飛行機と、船と、および/または車両とを含む。前記家電製品は、テレビと、エアコンと、電子レンジと、冷蔵庫と、炊飯器と、加湿器と、洗濯機と、電灯と、ガスコンロと、レンジフードとを含む。前記医療機器は、核磁気共鳴装置と、B超音波診断装置と、および/または心電計とを含む。
【0070】
本出願の実施例の解決策において、当該計算装置は、メモリユニットから計算命令を抽出し、当該計算命令を解析してデータ変換命令と、および/または1つまたは複数の演算命令とを取得し、データ変換命令と、複数の演算命令と、および第1の入力データを演算ユニットに送信する制御ユニットと、データ変換命令に従って第1の入力データを固定小数点データで表される第2の入力データに変換し、複数の演算命令に従って第2の入力データを計算して計算命令の結果を取得する演算ユニットとを備えることはわかりやすい。本発明の実施例は、機械学習計算に関与するデータを固定点データを使用して表し、これにより、トレーニング演算の処理速度および処理効率を向上することができる。
【発明を実施するための形態】
【0072】
以下、添付図面を参照しながら、本発明の実施例について明確に説明する。尚、以下の実施例は、本発明を具体化した一例であって、本発明の技術的範囲を限定する性格を有さない。本出願の範囲から逸脱することなく本出願の実施例に基づいて当業者によって得られる他のすべての実施例も、本出願の範囲である。
【0073】
本出願における図面、明細書および請求範囲における用語「第1」、「第2」、「第3」、および「第4」などは、異なる対象を区別するために使用され、特定の順序を説明することではない。さらに、用語「含む」と、「備える」およびその他の変形は、非排他的な包含を網羅することを意図している。例えば、一連のステップまたはユニットを含むプロセス、方法、システム、製品、またはデバイスは、リストされたステップまたはユニットに限定されず、オプションでリストされていないステップまたはユニットも含む。
【0074】
本明細書における「実施例」とは、実施例に関連して説明される特定の特徴、構造、または特性が、本出願の少なくとも1つの実施例に含まれ得ることを意味する。本明細書の各所でのフレーズの出現は、必ず同じ実施例を指しているわけではなく、または相互排他的な代替実施例ではない。当業者は、本明細書に記載されている実施例を他の実施例と組み合わせることができることを、明示的および暗黙的に理解できる。
【0075】
本出願の実施例よれば、データタイプを提供し、当該データタイプは調整係数を含み、当該調整係数は、当該データタイプの値の範囲と精度を示す。
【0076】
そのうち、前記調整係数には、第1スケーリング係数と第2スケーリング係数(必要に応じて)が含まれる。当該第1スケーリング係数はデータタイプの精度を示しつつ、当該第2スケーリング係数はデータタイプの値の範囲を調整する。
【0077】
必要に応じて、前記第1スケーリング係数は、2
−m、8
−m、10
−m、2、3、6、9、10、2
m、8
m、10
mまたは他の値とする。
【0078】
具体的には、前記第1スケーリング係数は小数点位置であってもよい。例えば、二進法で示す入力データINA1の小数点位置右m位にシフトすると、入力データINB1(INB1=INA1*2
m)得る。つまり、入力データINB1は、入力データINA1に対して2
m倍に拡大される。もう一つの例は、十進法で示す入力データINA2の小数点位置左n位にシフトすると、入力データINB2得る。つまり、入力データINB2は、入力データINA2に対して10
n倍に縮小される。mとnはどちらも整数である。
【0079】
必要に応じて、前記第2スケーリング係数は、2、8、10、16または他の値とする。
【0080】
例えば、前記入力データに対応するデータタイプの値の範囲は8
−15−8
16として、演算を実行の際に、得た演算結果が入力データに対応するデータタイプの値の範囲のうちに最大値よりも大きい場合には、当該データタイプの値の範囲にデータタイプの第2スケーリング係数(即ち、8)を掛けて、新たな値の範囲8
−14−8
17を得る。一方、得た演算結果が入力データに対応するデータタイプの値の範囲のうちに最小値よりも小さい場合には、当該データタイプの値の範囲にデータタイプの第2スケーリング係数(即ち、8)を除算して、新たな値の範囲8
−16−8
15を得る。
【0081】
あらゆるデータタイプ(浮動小数点数、離散データなど)に対して、スケーリング係数により、データの大きさと精度を調整できることになる。
【0082】
説明すべき、本出願の明細書で言及される小数点位置はすべてが前記第1スケーリング係数であってもよく、これについてはここでは説明しない。
【0083】
以下、
図1を参照しながら、固定小数点データのデータ構造について説明する。
図1は、本出願の一実施例に関与する固定小数点データのデータ構造を示す図を提供する。当該固定小数点データは、Xビットを占有する符号付き固定小数点データがあり、Xビット固定小数点データと呼ばれる場合がある。そのうち、当該Xビット固定小数点データは1ビットの符号ビットと、Mビットの整数ビットと、Nビットの小数点以下ビットとを含む(X−1=M+N)。符号なし固定小数点データの場合、Xビット固定小数点データは、Mビットの整数ビットと、Nビットの小数点以下ビットとのみを含む(X=M+N)。
【0084】
32ビット浮動小数点データ表示型と比較すると、本出願で採用した短ビット固定小数点データ表示型は、占有ビット数が少ないが、さらにネットワークモデルの中に同じレイヤーと、同じタイプのデータ(例えば、第1畳み込み層の全ての畳み込みカーネル、入力ニューロン、またはオフセットデータ)に対して、ほかに固定小数点データの小数点位置を記録するためのフラグビットであるPoint Locationが設けれる、このように、入力データの分布に応じて上記フラグビットの大きさを調整することにより、固定小数点データ精度と表現できる範囲を調整することができる。
【0085】
例えば、浮動小数点数68.6875は、小数点位置が5の符号付き16ビット固定小数点データに変換される。そのうち、小数点位置が5の符号付き16ビット固定小数点データの場合、整数部は10ビットを占有し、小数部は5ビットを占有し、符号ビットは1ビットを占有する。前記変換ユニットは、
図2に示すように、浮動小数点数68.6875を0000010010010110の符号付き16ビット固定小数点データに変換する。
【0091】
まず、本出願で使用される計算装置について説明する。
図3を参照して、制御ユニット11と、演算ユニット12、変換ユニット13を備える計算装置が提供され、そのうち、制御ユニット11と、演算ユニット12とは互いに接続され、変換ユニット13と、制御ユニット11と演算ユニット12と両方に接続される。
【0092】
ある可能な実施例では、制御ユニット11は、第1の入力データと計算命令とを取得するために用いられる。
【0093】
一実施例では、第1の入力データは機械学習データである。さらに、機械学習データには、入力ニューロンデータ、ウエートデータが含まれる。出力ニューロンデータは、最終出力結果または中間データである。
【0094】
代替案として、第1の入力データと計算命令と取得する方法は具体的にデータ入出力ユニットにより、当該データ入出力ユニット具体的には1つまたは複数のデータI/OインターフェースまたはデータI/Oピンであってもよい。
【0095】
前記計算命令には、これらに限定されないが、フォワード演算命令、リバーストレーニング命令、または他のニューラルネットワーク演算命令など、例えば畳み込み演算命令であるが、前記演算命令の特定の表現形式を限定しない。
【0096】
さらに、前記制御ユニット11は、前記計算命令を解析してデータ変換命令および/または1つまたは複数の動作命令を取得するようにさらに構成され、そのうちの、前記データ変換命令は操作ドメインおよび操作コードを含み、当該操作コードは前記データタイプ変換命令の機能を指示する。前記データタイプ変換命令の操作ドメインは小数点位置を含み、第1の入力データのデータタイプのフラグビット、およびデータタイプの変換モード識別子を指示するために用いられる。
【0097】
前記データ変換命令の動作領域がメモリ空間のアドレスである場合に、前記制御ユニット11は、アドレスに対応するメモリ空間に応じて、第1の入力データのデータタイプを示す小数点位置を取得し、第1の入力データのデータタイプのフラグビット、およびデータタイプの変換モード識別子を指示するために用いられる。
【0098】
前記制御部11は、前記データ変換命令の操作コードおよび操作ドメインと、第1の入力データとを変換ユニット13に送信する。複数の前記演算命令を演算ユニット12に送信する。
【0099】
前記変換ユニット13は、前記データ変換命令の操作コードおよび操作ドメインに従って前記第1の入力データを第2の入力データに変換するために用いられ、当該第2の入力データは固定小数点データであり、前記第2の入力データを演算ユニット12に送信する。
【0100】
演算ユニット12は、複数の演算命令に従って第2の入力データに対する演算を行い、前記計算命令の計算結果を取得するために用いられる。
【0101】
ある可能な実施例では、本出願による技術的解決策は、操作ユニット12をマスターマルチスレーブ構造として設定し、フォワード演算の計算命令について、その計算命令に従ってデータを分割することができる。これにより、複数のスレーブ処理回路102は、計算量の多い部分で並列演算を行うことができ、計算速度が向上し、計算時間が節約され、消費電力がさらに削減される。
図3Aに示すように、前記演算ユニット12は、マスター処理回路101と複数のスレーブ処理回路102とを備えている。
【0102】
前記マスター処理回路101は、第2の入力データに対して前処理を実行し、複数のスレーブ処理回路102間でデータおよび複数の前記演算命令を送信するために用いられる。
【0103】
複数のスレーブ処理回路102は、前記マスター処理回路101によって送信された第2の入力データおよび複数の演算命令に従って中間演算を実行して複数の中間結果を取得し、その複数の中間結果をマスター処理回路に送信するために用いられる。
マスター処理回路101は、前記複数の中間結果に対して後続の処理を実行して、計算命令の計算結果を取得するために用いられる。
【0104】
一実施例では、機械学習動作は、深層学習動作(すなわち、人工ニューラルネットワーク動作)を含み、機械学習データ(すなわち、第1の入力データ)は、入力ニューロンおよびウエート(すなわち、ニューラルネットワークモデルデータ)を含む。出力ニューロンは、前記計算命令の計算結果または中間結果である。以下、ディープラーニング演算を例とするが、ディープラーニング演算に限定されない。
【0105】
必要に応じて、前記計算装置は、メモリユニット10とダイレクトメモリアクセス(DMA)ユニット50をさらに含むことであってもよい。当該メモリユニット10は、レジスタ、キャッシュ、または両方の組み合わせであり、具体的には、前記キャッシュは前記計算命令を格納し、前記レジスタ201は第1の入力データおよびスカラーを格納する。そのうち、第1の入力データには、入力ニューロンと、ウエートと、出力ニューロンとが含まれる。
【0106】
前記キャッシュ202はステージングキャッシュである。
【0107】
DMAユニット50は、メモリユニット10からデータを読み出すまたは記憶するために用いられる。
【0108】
ある可能な実施例では、前記レジスタ201は、演算命令と、第1の入力データと、小数点位置と、第1の入力データのデータタイプを示すためのフラグビットと、データタイプの変換モード識別子とを格納する。前記制御ユニット11は、レジスタ201から演算命令と、第1の入力データと、小数点位置と、第1の入力データのデータタイプを示すためのフラグビットと、およびデータタイプの変換モード識別子とを直接に取得するために用いられる。第1の入力データと、小数点位置と、第1の入力データのデータタイプを示すためのフラグビットと、およびデータタイプの変換モード識別子と前記変換ユニット13に送信するために用いられる。前記演算命令は演算ユニット12に送信する。
【0109】
前記変換ユニット13は、前記小数点位置と、第1の入力データのデータタイプを示すためのフラグビットと、データタイプの変換モード識別子とに従って、前記第1の入力データを第2の入力データに変換し、その第2の入力データを前記演算ユニット12に送信する。
【0110】
演算ユニット12は、前記演算命令に従って第2の入力データに対する演算を行い、計算結果を取得する。
【0111】
必要に応じて、制御ユニット11は、命令キャッシュユニット110と、命令処理ユニット111と、ストレージキューユニット113とを含む。
【0112】
前記命令キャッシュユニット110は、人工ニューラルネットワーク演算に関する計算命令を格納するために用いられる。
【0113】
前記命令処理ユニット111は、前記計算命令を解析して、前記データ変換命令および複数の前記演算命令を取得し、前記データ変換命令を解析して前記データ変換命令の操作コードおよび操作ドメインを取得するために用いられる。
【0114】
前記ストレージキューユニット113、命令キューを記憶するために用いられ、当該命令キューは、キューの順序で実行される複数の演算命令または計算命令を含む。
【0115】
例えば、あるオプションの技術的解決策では、マスター処理回路101は、一つの制御部を含むことがあってもよく、当該制御部はメイン命令処理ユニットを含むことができ、当該メイン命令処理ユニットは具体的に命令をマイクロ命令にデコードする。無論、他の代替形態では、スレーブ処理回路102も、もう一つの制御部を含むことがあってもよく、当該制御部は、サブ命令処理ユニットを含み、当該サブ命令処理ユニットは具体的に命令を受信して実行する。前記マイクロ命令は命令の次の命令であり、当該マイクロ命令は命令を分割またはデコードすることで取得でき、さらに各部品、各ユニットまたは各処理回路の制御信号にデコードできる。
【0116】
他の方法として、当該計算命令の構造は、以下の表1に示すとおりである。
【表1】
上記の表の省略記号は、複数のレジスターまたは即値を含めることが示していることであってもよい。
【0117】
他の代替案では、当該計算命令には、1つまたは複数の操作ドメインおよび一つの操作コードが含まれることであってもい。当該計算命令には、ニューラルネットワークの演算命令を含めることであってもい。ニューラルネットワーク演算命令を例にとると、表1に示すように、レジスター番号0と、レジスター番号1と、レジスター番号2と、レジスター番号3と、レジスター番号4とは操作ドメインであってもい。そのうち、各レジスター番号0と、レジスター番号1と、レジスター番号2と、レジスター番号3と、レジスター番号4は、1つまたは複数のレジスターの番号であってもよい。
【表2】
【0118】
前記レジスターはオフチップメモリであってもよいが、無論、実際のアプリケーションでは、前記レジスターはオンチップメモリであってもよい。それらはデータを格納するためのメモリであって、当該データはn次元データであり、nは1以上の整数でる。例えば、n=1の場合は、それは1次元データであるベクトルであり、n=2の場合は、それは2次元データであるマトリックスであり,n=3の場合は、それは3次元データである多次元テンソルである。
【0119】
必要に応じて、制御ユニット11はさらに以下を含むことであってもよい。
【0120】
依存処理ユニット112は、複数の演算命令がある場合に、第1演算命令と前記第1演算命令の前の第0演算命令との間に依存関係があるか否かを判定する。前記第1演算命令と前記第0演算命令との間に依存関係があると判定する場合に、前記第1演算命令は命令キャッシュユニット110にキャッシュされ、前記第0演算命令の実行が完了した後、前記命令キャッシュユニット110から前記第1演算命令が抽出されて、演算ユニットに送信する。
【0121】
前記第1演算命令と前記第1演算命令の前の第0演算命令との間に依存関係があるか否かを判定することは、前記第1演算命令に従って前記第1演算命令に必要なのデータ(例えば、マトリックス)から抽出した第1メモリアドレス範囲と、前記第0の演算命令に従って前記第0の演算命令に必要なのマトリックスから抽出した第0メモリアドレス範囲と、その第1メモリアドレス範囲と第0メモリアドレス範囲とは重なる範囲がある場合に、前記第1演算命令と前記第0演算命令との間に依存関係があると判定する。一方、その第1メモリアドレス範囲と第0メモリアドレス範囲とは重なる範囲がない場合に、前記第1演算命令と前記第0演算命令との間に依存関係がないと判定する。
【0122】
他の代替実施例では、
図3Bに示すように、前記演算ユニット12は、マスター処理回路101、複数のスレーブ処理回路102、および複数の分岐処理回路103を含む。
【0123】
マスター処理回路101は、具体的に、前記入力ニューロンがブロードキャストデータであり、重みが分布データであると判定し、1つの分布データを複数の前記データブロックに分配するために用いられ、分岐処理回路103に複数のデータブロックのうちの少なくとも1つと、ブロードキャストデータと、複数の演算命令のうちの少なくとも1つとを送信する。
【0124】
前記分岐処理回路103は、前記マスター処理回路101と複数のスレーブ処理回路102との間でデータブロックと、ブロードキャストデータと、および演算命令とを転送するために用いられる。
【0125】
複数の前記スレーブ処理回路102は、当該演算命令に従って受信したデータブロックおよびブロードキャストデータに対して演算を実行して中間結果を取得し、その中間処理結果を分岐処理回路103に送信するために用いられる。
【0126】
前記マスター処理回路101は、さらに前記分岐処理回路103から送信された中間結果に対して後続処理を実行して、前記演算命令の結果を取得し、前記計算命令の果を制御ユニット11に送信するために用いられる。
【0127】
他の代替実施例では、
図3Aに示すように、演算ユニット12は、一つのマスター処理回路101と複数のスレーブ処理回路102とを備えていてもよい。
図3Cに示すように、複数のスレーブ処理回路102がアレイ状に配置され;各スレーブ処理回路102は隣接する他のスレーブ処理回路102に接続され、マスター処理回路101は複数のスレーブ処理回路102のうちにK個のスレーブ処理回路102を接続する。前記K個のスレーブ処理回路102は、第1行のn個のスレーブ処理回路102と、第m行のn個のスレーブ処理回路102と、および第1列のm個のスレーブ処理回路102とである。述べるべくは、
図3Cに示すK個のスレーブ処理回路102は、第1行のn個のスレーブ処理回路102と、第m行のn個のスレーブ処理回路102と、および第1列のm個のスレーブ処理回路102とのみを含む。すなわち、K個のスレーブ処理回路102は、マスター処理回路101に直接接続されたスレーブ処理回路102である。
【0128】
K個のスレーブ処理回路102は、マスター処理回路101と複数のスレーブ処理回路102との間でデータおよび命令を転送するために用いられる。
【0129】
前記マスター処理回路101は、さらに前記入力ニューロンがブロードキャストデータであり、重みが分布データであると判定し、1つの分布データを複数の前記データブロックに分配するために用いられ、前記K個のスレーブ処理回路102に複数のデータブロックのうちの少なくとも1つと、複数の演算命令のうちの少なくとも1つとを送信する。
【0130】
前記K個のスレーブ処理回路102は、前記マスター処理回路101と複数のスレーブ処理回路102との間でデータを変換するために用いられる。
【0131】
複数の前記スレーブ処理回路102は、前記演算命令に従って受信したデータブロックに対して演算を実行して中間結果を取得し、その演算結果を前記K個のスレーブ処理回路102に送信するために用いられる。
【0132】
前記マスター処理回路101は、前記K個のスレーブ処理回路102から送信された中間結果に対して後続処理を実行して、前記計算命令の結果を取得し、当該計算命令の結果を制御ユニット11に送信するために用いられる。
【0133】
必要に応じて、
図3Dに示されるように、前述の
図3A〜
図3Cのマスター処理回路101は、さらに、活性化処理回路1011および加算処理回路1012の1つまたは両方の組み合わせを含む。
【0134】
活性化処理回路1011は、マスター処理回路101内のデータの活性化演算を実行するために用いられる。
【0135】
加算処理回路1012は、加算演算または累積演算を行うために用いられる。
【0136】
スレーブ処理回路102は、受信データブロックに対して積演算を実行して積結果を得る乗算処理回路と、受信したデータブロックまたは積結果を転送する転送処理回路(オプション)とを含む。累算処理回路は、中間結果を得るために積結果に累算演算を実行するために用いられる。
【0137】
ある可能な実施例では、前記第1の入力データはデータタイプと演算に関する演算命令によって示される演算タイプと一致しないデータであり、前記第2の入力データはデータタイプと演算に関する演算命令によって示される演算タイプと一致するデータであり、前記変換ユニット13は、前記データ変換命令の操作コードと操作ドメインを取得し、当該操作コードは当該データ変換命令の機能を示すために用いられ、操作ドメインは小数点位置とデータタイプの変換モード識別子を含む。前記変換ユニット13は、前記小数点位置と、データタイプの変換モード識別子とに従って、前記第1の入力データを第2の入力データに変換する。
【0138】
具体的には、上記データタイプの変換モード識別子は、上記データタイプの変換方式と毎に対応している。表3を参照しながら、表3は、実行可能なデータタイプの変換モード識別子とデータタイプの変換方式との対応表である。
【表3】
【0139】
表3に示すように、前記データタイプの変換モード識別子が00である場合は、前記データタイプ変換方法は固定小数点データを固定小数点データに変換し、前記データタイプの変換モード識別子が01である場合は、前記データタイプ変換方法は浮動小数点データを浮動小数点データに変換し、前記データタイプの変換モード識別子が10である場合は、前記データタイプ変換方法は固定小数点データを浮動小数点データに変換し、前記データタイプの変換モード識別子が11である場合は、前記データタイプ変換方法は浮動小数点データを固定小数点データに変換する。
【0140】
必要に応じて、上記データタイプの変換モード識別子は、
図4に示すように、データタイプの変換方式と毎に対応していてもよい。
【表4】
【0141】
表4に示すように、前記データタイプの変換モード識別子が0000である場合は、前記データタイプ変換方法は64ビット固定小数点データから64ビット浮動小数点データへの変換し、前記データタイプの変換モード識別子が0001である場合は、前記データタイプ変換方法は32ビット固定小数点データから64ビット浮動小数点データへの変換し、前記データタイプの変換モード識別子が0010である場合は、前記データタイプ変換方法は32ビット固定小数点データから64ビット浮動小数点データへの変換し、前記データタイプの変換モード識別子が0011である場合は、前記データタイプ変換方法は32ビット固定小数点データから32ビット浮動小数点データへの変換し、前記データタイプの変換モード識別子が0100である場合は、前記データタイプ変換方法は16ビット固定小数点データから32ビット浮動小数点データへの変換し、前記データタイプの変換モード識別子が0101である場合は、前記データタイプ変換方法は16ビット固定小数点データから16ビット浮動小数点データへの変換し、前記データタイプの変換モード識別子が0110である場合は、前記データタイプ変換方法は64ビット浮動小数点データから64ビット固定小数点データへの変換し、前記データタイプの変換モード識別子が0111である場合は、前記データタイプ変換方法は32ビット浮動小数点データから64ビット固定小数点データへの変換し、前記データタイプの変換モード識別子が1000である場合は、前記データタイプ変換方法は16ビット浮動小数点データから64ビット固定小数点データへの変換し、前記データタイプの変換モード識別子が1001である場合は、前記データタイプ変換方法は32ビット浮動小数点データから32ビット固定小数点データへの変換し、前記データタイプの変換モード識別子が1010である場合は、前記データタイプ変換方法は16ビット浮動小数点データから32ビット固定小数点データへの変換し、前記データタイプの変換モード識別子が1011である場合は、前記データタイプ変換方法は16ビット浮動小数点データから16ビット固定小数点データへの変換をする。
【0142】
ある可能な実施例では、制御ユニット11は、メモリユニット10から計算命令を取得し、計算命令を解析して1つまたは複数の演算命令を取得する。その演算命令は、可変フォーマット演算命令または固定小数点フォーマット演算命令である。
【0143】
そのうち、前記可変フォーマット演算命令は、操作コードと、操作ドメインとを含む。当該操作コードは、前記可変フォーマット演算命令の機能を示すために用いられる。前記操作ドメインは、第1の入力データの先頭アドレスと、第1の入力データの長さ(必要に応じて)と、出力データの先頭アドレスと、小数点位置と、第1の入力データのデータタイプのフラクビットと、操作モード識別子とを含む。
【0144】
前記演算命令は可変フォーマット演算命令である場合に、制御ユニット11は、前記可変フォーマット演算命令を解析して、前記第1の入力データの先頭アドレスと、第1の入力データの長さ(必要に応じて)と、出力データの先頭アドレスと、小数点位置と、第1の入力データのデータタイプのフラクビットと、操作モード識別子とを取得する。その後、第1の入力データの先頭アドレスと第1の入力データの長さとによって、前記メモリユニット10から第1の入力データを取得する。次に、第1の入力データと、小数点位置と、第1の入力データのデータタイプのフラクビットと、操作モード識別子とが前記変換ユニット13に送信され、前記出力データの先頭アドレスが前記演算ユニット12に送信される。
【0145】
前記変換ユニット13は、前記データタイプのフラクビットと、前記小数点位置と、操作モード識別子を示す操作モードとに従って、前記第1の入力データを第2の入力データに変換して、その第2の入力データを前記演算ユニット12に送信する。
【0146】
前記演算ユニット12のマスター処理回路101およびスレーブ処理回路102は、前記第2の入力データを演算して計算命令の結果を取得し、当該計算命令の結果を前記出力データの先頭アドレスに対応する前記メモリユニット10のアドレスに格納する。
【0147】
そのうち、前記操作モード識別子は、演算ユニット12が操作を実行する際に、演算に関与するデータのタイプを示すために用いられる。当該タイプには、固定小数点データと、浮動小数点データと、整数データと、離散データとが含まれる。
【0148】
ある可能な実施例では、前記メモリユニット10には、前記第1の入力データの先頭アドレスと、第1の入力データの長さと、出力データの先頭アドレスと、小数点位置と、第1の入力データのデータタイプのフラクビットと、操作モード識別子とが格納され、前記制御ユニット11直接に前記メモリユニット10から前記第1の入力データの先頭アドレスと、第1の入力データの長さと、出力データの先頭アドレスと、小数点位置と、第1の入力データのデータタイプのフラクビットと、操作モード識別子とを取得して、前記プロセスに従いてその後の処理を実行する。
【0149】
例えば、前記操作モード識別子は0または1である。当該フラグビットが1である場合は、前記演算ユニット12のメイン処理回路101およびスレーブ処理回路102は、浮動小数点演算であり、すなわち演算に関与するデータタイプは浮動小数点データで演算を実行する。一方、当該フラグビットが0である場合は、前記演算ユニット12のマスター処理回路101およびスレーブ処理回路102は、固定小数点演算であり、すなわち演算に関与するデータタイプは固定小数点データで演算を実行する。
【0150】
前記演算ユニット12は、データフラグビットと操作モード識別子に応じて、入力データの種類と操作モードを決定することであってもよい。
【0151】
具体的には、表5を参照する。表5は,データタイプのフラグビットと操作モード識別子のマッピングテーブルである。
【表5】
【0152】
表5に示すように、前記演算タイプ識別子は0で前記データタイプフラグビットは0の場合は、前記第1の入力データは固定小数点データであり、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は固定小数点演算を行い、データ変換は行われない。前記演算タイプ識別子は0で前記データタイプフラグビットは1の場合は、前記第1の入力データは浮動小数点データであり、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は浮動小数点演算を行い、データ変換は行われない。前記演算タイプ識別子は1で前記データタイプフラグビットは0の場合は、前記第1の入力データは固定小数点データであり、前記変換ユニット13は前記小数点位置によって第1の入力データを浮動小数点データである第2の入力データに変換して、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は第2の入力データに対する演算を行う。前記演算タイプ識別子は1で前記データタイプフラグビットは1の場合は、前記第1の入力データは浮動小数点データであり、前記変換ユニット13は前記小数点位置によって第1の入力データを浮動小数点データである第2の入力データに変換して、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は第2の入力データに対する演算を行う。
【0153】
そのうち、固定小数点データには64ビット固定小数点データと、32ビット固定小数点データと、16ビット固定小数点データが含まれる。浮動小数点データは64ビット浮動小数点データと、32ビット浮動小数点データと、16ビット浮動小数点データ。具体的に前記フラグビットと操作モード識別子のマッピング関係は表6を参照してもよい。
【表6】
【0154】
表6に示すように、前記演算タイプ識別子は0000で前記データタイプフラグビットは0の場合は、前記第1の入力データは64ビット固定小数点データであり、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は64ビット固定小数点演算を行い、データタイプ変換は行われない。前記演算タイプ識別子は0000で前記データタイプフラグビットは1の場合は、前記第1の入力データは64ビット浮動小数点データであり、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は64ビット浮動小数点演算を行い、データタイプ変換は行われない。前記演算タイプ識別子は0001で前記データタイプフラグビットは0の場合は、前記第1の入力データは32ビット固定小数点データであり、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は32ビット浮動小数点演算を行い、データタイプ変換は行われない。前記演算タイプ識別子は0001で前記データタイプフラグビットは1の場合は、前記第1の入力データは32ビット浮動小数点データであり、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は32ビット浮動小数点演算を行い、データタイプ変換は行われない。前記演算タイプ識別子は0010で前記データタイプフラグビットは0の場合は、前記第1の入力データは16ビット固定小数点データであり、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は16ビット固定小数点演算を行い、データタイプ変換は行われない。前記演算タイプ識別子は0010で前記データタイプフラグビットは1の場合は、前記第1の入力データは16ビット浮動小数点データであり、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は16ビット浮動小数点演算を行い、データタイプ変換は行われない。
【0155】
前記演算タイプ識別子は0011で前記データタイプフラグビットは0の場合は、前記第1の入力データは64ビット固定小数点データであり、まず前記変換ユニット13は前記小数点位置によって前記第1の入力データを64ビット浮動小数点データである第2の入力データに変換して、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は64ビット浮動小数点演算を行う。前記演算タイプ識別子は0011で前記データタイプフラグビットは1の場合は、前記第1の入力データは64ビット浮動小数点データであり、まず前記変換ユニット13は前記小数点位置によって前記第1の入力データを64ビット固定小数点データである第2の入力データに変換して、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は64ビット固定小数点演算を行う。
【0156】
前記演算タイプ識別子は0100で前記データタイプフラグビットは0の場合は、前記第1の入力データは32ビット固定小数点データであり、まず前記変換ユニット13は前記小数点位置によって前記第1の入力データを64ビット浮動小数点データである第2の入力データに変換して、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は64ビット浮動小数点演算を行う。前記演算タイプ識別子は0100で前記データタイプフラグビットは1の場合は、前記第1の入力データは32ビット浮動小数点データであり、まず前記変換ユニット13は前記小数点位置によって前記第1の入力データを64ビット固定小数点データである第2の入力データに変換して、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は64ビット固定小数点演算を行う。
【0157】
前記演算タイプ識別子は0101で前記データタイプフラグビットは0の場合は、前記第1の入力データは16ビット固定小数点データであり、まず前記変換ユニット13は前記小数点位置によって前記第1の入力データを64ビット浮動小数点データである第2の入力データに変換して、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は64ビット浮動小数点演算を行う。前記演算タイプ識別子は0101で前記データタイプフラグビットは1の場合は、前記第1の入力データは16ビット浮動小数点データであり、まず前記変換ユニット13は前記小数点位置によって前記第1の入力データを64ビット固定小数点データである第2の入力データに変換して、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は64ビット固定小数点演算を行う。
【0158】
前記演算タイプ識別子は0110で前記データタイプフラグビットは0の場合は、前記第1の入力データは32ビット固定小数点データであり、まず前記変換ユニット13は前記小数点位置によって前記第1の入力データを32ビット浮動小数点データである第2の入力データに変換して、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は32ビット浮動小数点演算を行う。前記演算タイプ識別子は0110で前記データタイプフラグビットは1の場合は、前記第1の入力データは32ビット浮動小数点データであり、まず前記変換ユニット13は前記小数点位置によって前記第1の入力データを32ビット固定小数点データである第2の入力データに変換して、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は32ビット固定小数点演算を行う。
【0159】
前記演算タイプ識別子は0111で前記データタイプフラグビットは0の場合は、前記第1の入力データは16ビット固定小数点データであり、まず前記変換ユニット13は前記小数点位置によって前記第1の入力データを32ビット浮動小数点データである第2の入力データに変換して、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は32ビット浮動小数点演算を行う。前記演算タイプ識別子は0111で前記データタイプフラグビットは1の場合は、前記第1の入力データは16ビット浮動小数点データであり、まず前記変換ユニット13は前記小数点位置によって前記第1の入力データを32ビット固定小数点データである第2の入力データに変換して、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は32ビット固定小数点演算を行う。
【0160】
前記演算タイプ識別子は1000で前記データタイプフラグビットは0の場合は、前記第1の入力データは16ビット固定小数点データであり、まず前記変換ユニット13は前記小数点位置によって前記第1の入力データを16ビット浮動小数点データである第2の入力データに変換して、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は16ビット浮動小数点演算を行う。前記演算タイプ識別子は1000で前記データタイプフラグビットは1の場合は、前記第1の入力データは16ビット浮動小数点データであり、まず前記変換ユニット13は前記小数点位置によって前記第1の入力データを16ビット固定小数点データである第2の入力データに変換して、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は16ビット固定小数点演算を行う。
【0161】
前記演算タイプ識別子は1001で前記データタイプフラグビットは0の場合は、前記第1の入力データは64ビット固定小数点データであり、まず前記変換ユニット13は前記小数点位置によって前記第1の入力データを32ビット浮動小数点データである第2の入力データに変換して、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は32ビット浮動小数点演算を行う。前記演算タイプ識別子は1001で前記データタイプフラグビットは1の場合は、前記第1の入力データは64ビット浮動小数点データであり、まず前記変換ユニット13は前記小数点位置によって前記第1の入力データを32ビット固定小数点データである第2の入力データに変換して、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は32ビット固定小数点演算を行う。
【0162】
前記演算タイプ識別子は1010で前記データタイプフラグビットは0の場合は、前記第1の入力データは64ビット固定小数点データであり、まず前記変換ユニット13は前記小数点位置によって前記第1の入力データを16ビット浮動小数点データである第2の入力データに変換して、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は16ビット浮動小数点演算を行う。前記演算タイプ識別子は1010で前記データタイプフラグビットは1の場合は、前記第1の入力データは64ビット浮動小数点データであり、まず前記変換ユニット13は前記小数点位置によって前記第1の入力データを16ビット固定小数点データである第2の入力データに変換して、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は16ビット固定小数点演算を行う。
【0163】
前記演算タイプ識別子は1011で前記データタイプフラグビットは0の場合は、前記第1の入力データは32ビット固定小数点データであり、まず前記変換ユニット13は前記小数点位置によって前記第1の入力データを16ビット浮動小数点データである第2の入力データに変換して、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は16ビット浮動小数点演算を行う。前記演算タイプ識別子は1011で前記データタイプフラグビットは1の場合は、前記第1の入力データは32ビット浮動小数点データであり、まず前記変換ユニット13は前記小数点位置によって前記第1の入力データを16ビット固定小数点データである第2の入力データに変換して、前記演算ユニット12のマスター処理回路101とスレーブ処理回路102は16ビット固定小数点演算を行う。
【0164】
ある可能な実施例では、前記演算命令は固定フォーマット演算命令であり、その固定フォーマット演算命令は、操作ドメインと、操作コードとを含む。当該操作コードは、前記固定フォーマット演算命令の機能を示すために用いられる。前記操作コードは、第1の入力データの先頭アドレスと、第1の入力データの長さ(必要に応じて)と、出力データの先頭アドレスと、小数点位置とを含む。
【0165】
前記制御ユニット11は、前記第1の入力データの先頭アドレスと、第1の入力データの長さと、出力データの先頭アドレスと、小数点位置とを取得するため、前記固定フォーマット演算命令を取得して解析する。その後、前記制御ユニット11は、前記第1の入力データの先頭アドレスと、第1の入力データの長さとによって、前記メモリユニット10から第1の入力データを取得して、当該第1の入力データと、小数点位置とを前記変換ユニット13に送信し、前記出力データの先頭アドレスを前記演算ユニット12に送信する。前記変換ユニットは前記小数点位置によって前記第1の入力データを第2の入力データに変換して、当該第2の入力データを前記演算ユニット13に送信し、当該演算ユニット12のマスター処理回路101およびスレーブ処理回路102は、前記第2の入力データに対する演算を行い、計算命令の結果を取得し、当該計算命令の結果を前記出力データの先頭アドレスに対応する前記メモリユニット10のアドレスに格納する。
【0166】
ある可能な実施例では、前記計算装置の演算ユニット13は、前記多層ニューラルネットワークモデルのi番目のレイヤーの演算を実行する前に、当該計算装置の制御ユニット11は、配置命令を取得し、当該配置命令は、小数点位置と、演算に関与するデータタイプを含む。当該制御ユニット11は、小数点位置と、演算に関与するデータタイプを取得するため、当該配置命令を解析し、または直接に前記メモリユニット10から前記小数点位置と、演算に関与するデータタイプとを取得する。その後、該制御ユニット11は、前記小数点位置と、演算に関与するデータタイプを取得する後、入力データのデータタイプと演算に関与するデータタイプは一致するか否かを判断する。入力データのデータタイプと演算に関与するデータタイプは一致しない場合に、当該制御ユニット11は、前記入力データと、小数点位置と、演算に関与するデータタイプとを前記変換ユニット13に送信する。当該変換ユニットは、前記小数点位置と、演算に関与するデータタイプとにより、前記入力データのデータタイプを変換し、入力データのデータタイプを演算に関与するデータタイプと一致させる。その後、変換されたデータは、前記演算ユニット12に送信され、当該演算ユニット12のマスター処理回路101およびスレーブ処理回路102は、変換されたデータを演算する。入力データのデータタイプと演算に関与するデータタイプは一致する場合に、当該制御ユニット11は、前記入力データを前記変換ユニット13に送信し、当該演算ユニット12のマスター処理回路101およびスレーブ処理回路102は、変換せずに入力データを直接に演算する。
【0167】
さらに、前記入力データは固定小数点データであり、かつ演算に関与するデータタイプは固定小数点データある場合に、前記制御ユニット11は、入力データの小数点位置と演算に関与するデータの小数点位置とは一致するか否かを判断する。それらは一致しない場合に、前記制御ユニット11は、前記入力データの小数点位置と演算に関与するデータの小数点位置とを前記変換ユニット13に送信する。前記変換ユニット13は、前記入力データをその小数点位置と演算に関与するデータの小数点位置とは一致する固定小数点データに変換してから、変換されたデータを前記演算ユニットに送信する。当該演算ユニット12のマスター処理回路101およびスレーブ処理回路102は、変換されたデータを演算する。
【0168】
換言すれば、前記演算命令は、前記構成命令に置き換えることができる。
【0169】
他の実施例では、当該演算命令は、行列乗法命令、累積命令、活性化命令などの計算命令である。
【0170】
図3Eに示すように、ある可能な実施例では、前記演算ユニットは、ツリーモジュール40を含み、前記ツリーモジュールは、一つのルートポート401および複数のブランチポート404を含む。前記ツリーモジュールのルートポートはマスター処理回路101に接続され、前記ツリーモジュールの複数のブランチポートは、複数のスレーブ処理回路102にそれぞれ接続される。
【0171】
前記ツリーモジュールは送受信機能を有し、
図3Eに示すように、当該ツリーモジュールは送信の機能しており、
図6Aに示すように、当該ツリーモジュールは受信の機能している。
【0172】
前記ツリーモジュールは、前記マスター処理回路101と複数のスレーブ処理回路102との間でデータブロックと、重みと、および演算命令とを転送するために用いられる。
【0173】
必要に応じて、当該ツリーモジュールは計算装置の選択の結果であり、それは少なくとも1つのレイヤーノードを備えてもよく、当該ノードは転送機能を備えたライン構造であり、当該ノード自身は計算機能を備えなくてもよい。ツリーモジュールがゼロ層のレイヤーノードが有する場合に、当該ツリーモジュールは必要がないとなる。
【0174】
必要に応じて、当該ツリーモジュールはn分木構造であり、例えば
図3Fに示すような二分木構造であってもよく、無論、三分木構造であってもよく、そのnは2以上の整数であってもよい。本出願の具体的に実施例は、前記nの特定の値を限定するものではなく、前記レイヤーの数も2であってもよい。スレーブ処理回路102は。最終から2番目のレイヤーのノード以外のレイヤーのノードを接続してもよく、例えば、
図3Fに示すように最終のレイヤーのノードを接続してもよい。
【0175】
必要に応じて、前述演算ユニットは、別個のキャッシュを備えてもよく、
図3Gに示すように、それは、ニューロンキャッシュユニットを備えてもよく、当該ニューロンキャッシュユニット63は、当該スレーブ処理回路102の入力ニューロンベクトルデータと、出力ニューロンデータとをキャッシュする。
【0176】
図3Hに示すように、当該演算ユニットは、重みキャッシュユニット64を備えてもよく、それは当該スレーブ処理回路102の計算プロセスに必要する重みデータをキャッシュするために用いられる。
【0177】
ある可能な実施例では、ニューラルネットワーク演算の全結合演算を例とすると、そのプロセスはy=f(wx+b)として、そのうち、xは入力ニューロン行列であり、wは重み行列であり、bはオフセットスカラーであり、fは活性化関数であり、具体的にはsigmoid関数と、tanh関数と、relu関数と、softmax関数とのいずれかである。ここは、8つのスレーブ処理回路102を備えた二分木構造であるとして、その実現する方法は:
制御ユニット11は、メモリユニット10から入力ニューロン行列xと、重み行列wと、全結合演算命令を取得し、その入力ニューロン行列x、重み行列w、全結合演算命令をマスター処理回路101に送信する。
【0178】
マスター処理回路101は、入力ニューロン行列xを8個のサブ行列に分割し、その8個のサブ行列をツリーモジュールを介して8個のスレーブ処理回路102に分配し、重み行列wを8個のスレーブ処理回路102にブロードキャストする。
【0179】
処理回路102は、並行処理で8個のサブ行列と重み行列wとを乗算演算および累積演算を実行して、8個の中間結果を取得し、その8個の中間結果をマスター処理回路101に送信する。
【0180】
前記マスター処理回路101は、8個の中間結果をソートしてwxの演算結果を取得し、当該演算結果に対してオフセットbの演算を実行し、次に活性化演算を実行して最終結果yを取得し、その最終結果yを制御ユニット11に送信するために用いられ、制御ユニット11は、その最終結果y出力し、またはメモリユニット10に格納する。
【0181】
一実施例では、演算ユニット12は、第1部分の第1または複数の乗算器と、第2部分の1つまたは複数の加算器(より具体的には、第2部分の加算器は加算ツリーを構成してもよい)と、 第3部分の活性化関数ユニットと、および/または第4部分のベクトル処理ユニットを備えるが、これらに限定されない。より具体的には、ベクトル処理ユニットは、ベクトル演算および/またはプーリング演算を処理可能な構成である。第1部分は、入力データ1(in1)と入力データ2(in2)をout=in1*in2のプロセスで乗算し、乗算出力(out)を取得し、第2部分は、入力データ1(in1)を加算器よりに加算し、出力(out)を取得する。より具体的には、第2部分は加算ツリーである場合に、入力データin1が加算ツリーを段階的に加算して出力データ(out)を取得する。そのn1は長さがNのベクトルで、Nは1より大きいであり、そのプロセスは、out=in1[1]+in1[2]+...+in1[N]、および/または入力データ(in1)は加算された後、入力データ(in2)と加算して出力データ(out)を取得し、そのプロセスはout=in1[1]+in1[2]+...+in1[N]+in2で、または入力データ(in1)と入力データ(in2)を加算して、出力データ(out)を取得し、そのプロセスはout=in1+in2である。第3部分は、入力データ(in)を活性化関数(active)により演算して、活性化出力データ(out)を取得し、そのプロセスはout=active(in)であり、活性化関数はsigmoidと、tanhと、reluと、softmaxとなどである。活性化操作に加えて、第三部分は、他の非線形関数を実行しでき、演算(f)により入力データ(in)から出力データ(out)を取得し、そのプロセスはout=f(in)である。ベクトル処理ユニットは、プーリング演算によって入力データ(in)をプーリング操作した出力データ(out)を取得し、そのプロセスはout=pool(in)であり、そのpoolはプーリング操作であり、プーリング操作は、平均値プーリング化、最大値プーリング化、中央値プーリング化を含むが、これらに限定されない。入力データ(in)は、出力データ(out)に関するプーリングコアにおけるデータである。
【0182】
前記演算ユニットに備わる第1部分は、前記入力データ1と入力データ2とを乗算して乗算データを取得するために用いられる。および/または、第2部分は、加算を実行し(より具体的には、それは加算ツリーであり、入力データ1をその加算ツリーによって段階的に加算するために用いられる)、または、前記入力データ1と入力データ2とを加算して出力データを取得する。および/または、第3部分は、活性化関数(active)によって入力データから出力データを取得する。および/または、第4部分は、プーリング演算を実行し、そのプロセスはout=pool(in)であり、そのpoolはプーリング操作であり、プーリング操作は、平均値プーリング化、最大値プーリング化、中央値プーリング化を含むが、これらに限定されない。入力データ(in)は、出力データ(out)に関するプーリングコアにおけるデータである。上記のいくつかの部分の演算は、異なる順序で組み合わされる1つ以上の部分を自由に選択することができ、それにより様々な機能の演算を実現する。計算ユニットは、それを応じて、2レベル、3レベル、または4レベルパイプラインのフローレベルアーキテクチャに構成される。
【0183】
説明すべきは、前記第1の入力データは長桁の非固定小数点データであり、例えば32ビット浮動小数点データであってもよく、標準に対する標準の64ビットまたは16ビット浮動小数点数などであってもよいが、ここは単に32ビットを具体的実施例をとして説明する。前記第2の入力データはは短桁の固定小数点データであり、稍短桁の固定小数点データとも呼ばれ、それは長桁の非固定小数点データである前記第1の入力データよりも少ないビット数で表される固定小数点である。
【0184】
ある可能な実施例では、前記第1の入力データは非固定小数点データであり、前記第2の入力データは固定小数点データであり、当該第1の入力データは、前記第2の入力データが占めるビットの数以上のビットの数を占める。例えば、前記第1の入力データは32ビット浮動小数点数であり、前記第2の入力データは32ビット固定小数点データである。もう一つ、例えば、前記第1の入力データは32ビット浮動小数点数であり、前記第2の入力データは16ビット固定小数点データである。
【0185】
具体的には、異なるネットワークモデルの異なるレイヤーに対して、前記第1の入力データには異なるタイプのデータが含まれる。当該異なるタイプのデータの小数点位置は異なり、すなわち、それに対応する固定小数点データの精度は異なる。全結合層に対して、前記第1の入力データに入力ニューロンと、重みと、オフセットデータとなどのデータが含まれまる。畳み込み層対して、前記第1の入力データに畳み込みカーネルと、入力ニューロンと、オフセットデータとなどのデータが含まれる。
【0186】
例えば、全結合層に対して、前記小数点位置は、入力ニューロンの小数点位置と、重みの小数点位置と、オフセットデータとの小数点位置である。そのうち、入力ニューロンの小数点位置と、重みの小数点位置と、オフセットデータとの小数点位置とは、お互いにすべて同じでもよく、部分的に同じでもよく、すべて異なってもよい。
【0187】
さらに、ある可能な実施例では、前記制御ユニット11は、第1の入力データと計算命令とを取得する前に、前記第1の入力データの小数点位置および固定小数点データのビット幅を決定するために用いられる。前記固定小数点データのビット幅は前記第1の入力データが変換された固定小数点データのビット幅である。
【0188】
さらに、演算ユニット12は、前記第1の入力データの小数点位置を初期化し、前記第1の入力データの小数点位置を調整するために用いられる。
【0189】
そのうち、前記第1の入力データとして固定小数点データのビット幅は、固定小数点データによって表された第1の入力データが占めるビットであり、前記小数点位置は、固定小数点データで表された第1データデータの小数部が占めるビットである。当該小数点位置は、固定小数点データの精度を特徴付けるために用いられる。詳細については、
図2Aの関連する説明を参照する。
【0191】
一実施例では、畳み込み層および全結合層の入力ニューロンと、重みと、出力ニューロンと、入力ニューロン導関数と、出力ニューロン導関数と、重み導関数とはすべて固定小数点データで表される。
【0192】
必要に応じて、前記入力ニューロンが使用する固定小数点データのビット幅は、8、16、32、64または他の値である。さらに、前記入力ニューロンが使用する固定小数点データのビット幅は8である。
【0193】
必要に応じて、前記重みが使用する固定小数点データのビット幅は、8、16、32、64または他の値である。さらに、前記重みが使用する固定小数点データのビット幅は8である。
【0194】
必要に応じて、前記入力ニューロン導関数が使用する固定小数点データのビット幅は、8、16、32、64または他の値である。さらに、前記入力ニューロン導関数が使用する固定小数点データのビット幅は16である。
【0195】
必要に応じて、前記出力ニューロン導関数が使用する固定小数点データのビット幅は、8、16、32、64または他の値である。さらに、前記出力ニューロン導関数が使用する固定小数点データのビット幅は24である。
【0196】
必要に応じて、前記重み導関数が使用する固定小数点データのビット幅は、8、16、32、64または他の値である。さらに、前記重み導関数が使用する固定小数点データのビット幅は24である。
【0197】
一実施形例では、前記多層ネットワークモデル演算に関与するデータのうちより大きい値を有するデータaに対しては、多種な固定小数点表現方法を利用してもよく、具体的には
図2Bの関連する説明を参照する。
【0199】
さらに、前記演算ユニット12は、以下を含む前記第1の入力データの小数点位置を初期化する。
【0200】
前記第1の入力データの絶対値の最大値に従って前記第1の入力データの小数点位置を初期化する、または;
前記第1の入力データの絶対値の最小値に従って前記第1の入力データの小数点位置を初期化する、または;
前記第1の入力データにおける異なるデータタイプの間の関係に従って前記第1の入力データの小数点位置を初期化する、または;
経験的定数に従って前記第1の入力データの小数点位置を初期化する。
【0201】
具体的には、そのうち、前記小数点位置sは、異なるタイプのデータと、異なるニューラルネットワークレイヤーのデータと、異なるエポックにおけるデータにより、初期化および動的に調整する必要がある。
【0202】
以下は、より具体的に第1の入力データの小数点位置sの初期化プロセス、つまり、最初で第1の入力データを変換する際に固定小数点データに使用する小数点位置sを決定することについて説明する。
【0203】
さらに、前記演算ユニット1211は、以下を含む前記第1の入力データの小数点位置sを初期化する。第1の入力データの絶対値の最大値に従って第1の入力データの小数点位置sを初期化する。第1の入力データの絶対値の最小値に従って第1の入力データの小数点位置sを初期化する。第1の入力データにおける異なるデータタイプの間の関係に従って第1の入力データの小数点位置sを初期化する。経験的定数に従って第1の入力データの小数点位置sを初期化する。
【0204】
以下は、前記初期化プロセスについて具体的に説明する。
【0212】
さらに、前記入力ニューロンの小数点位置が初期化された値および出力ニューロンの小数点位置が初期化された値は、どちらも[−8、8]の範囲内で選択可能である。重みの小数点位置が初期化された値は[−17、8]の範囲内で選択する。入力ニューロン導関数の小数点位置が初期化された値および出力ニューロン導関数の小数点位置が初期化された値は、どちらも[−40、−20]の範囲内で選択する。重み導関数の小数点位置が初期化された値は、[−48、−12]の範囲内で選択してもよい。
【0213】
以下、前記演算ユニット12が小数点位置sのデータを動的に調整する方法について具体的に説明する。
【0214】
前記演算ユニット12は、小数点位置sを動的に調整する方法は、sを上方調整すること(sを拡大する)と、sを下方調整すること(sを縮小する)とを含む。具体的には、第1の入力データの絶対値の最大値に従ってシングルステップで上方調整することと、第1の入力データの絶対値の最大値に従ってステップバイステップで上方調整することと、第1の入力データの分布に従ってシングルステップで上方調整することと、第1の入力データの分布に従ってステップバイステップで上方調整することと、第1の入力データの絶対値の最大値に従って下方調整することとを含む。
【0220】
必要に応じて、小数点位置を調整する頻度に対して、何時でも第1の入力データの小数点位置を調整しない。または、n個の第1のトレーニング周期(すなわち、iteration)ごとに調整し、nは定数である。または、n個の第2のトレーニング周期(すなわち、epoch)ごとに調整し、nは定数である。または、n個の第1またはn個の第2のトレーニング周期ごとに第1の入力データの小数点位置を調整し、n個の第1または第2のトレーニング周期ごとに第1の入力データの小数点位置を調整し、その後、n=αnを調整し、そのうちにαは1より大きいである。または、n個の第1または第2のトレーニング周期ごとに第1の入力データの小数点位置を調整し、トレーニングラウンドの回数が増えるとともに、nが徐々に減少する。
【0221】
さらに、入力ニューロンの小数点位置と、重みの小数点位置と、出力ニューロンの小数点位置とは、100個の第1のトレーニング周期ごとに調整される。入力ニューロンの小数点位置と、出力ニューロンの小数点位置とは、20個の第1のトレーニング周期ごとに調整される。
【0222】
説明すべきは、前記第1のトレーニング周期ははバッチでサンプルをトレーニングすることに必要な時間であり、前記第2のトレーニング周期はすべてのトレーニングサンプルのトレーニングを実行することに必要な時間である。
【0223】
ある可能な実施例では、前記制御ユニット11または前記演算ユニット12は、前記プロセスによって前記第1の入力データの小数点位置を取得してから、前記第1の入力データの小数点位置をメモリユニット10のキャッシュ202に格納する。
【0224】
前記計算命令が即値アドレッシング命令である場合に、前記マスター処理ユニット101は当該計算命令の操作ドメインが示す小数点位置に従って、直接に第1の入力データを第2の入力データに変換する。前記計算命令が直接アドレッシング命令または間接アドレッシング命令である場合に、前記マスター処理ユニット101は当該計算命令の操作ドメインが示すメモリ空間に従って、第1の入力データの小数点位置を取得してから、当該小数点位置に従って第1の入力データを第2の入力データに変換する。
【0225】
前記計算装置は、丸めユニットをさらに備え、演算中に第2の入力データに対して加算、乗算、および/または他の演算における演算結果(当該演算結果は、中間演算結果および計算命令の結果を含む)は、その精度は現在の固定点データの精度範囲を超える場合があるため、前記演算キャッシユニットは、前記中間演算結果をキャッシする。演算の終了後、前記丸めユニットは、固定小数点データの精度範囲を超えた演算結果に対して丸め操作を実行し、当該丸められた演算結果を取得してから、前記データ変換ユニットが当該丸められた演算結果を現在の固定小数点データタイプに変換する。
【0226】
具体的には、前記丸めユニットは、前記中間演算結果に対して丸め操作を行い、当該丸め操作は、乱数丸め操作、四捨五入操作、切り上げ操作、切り捨て操作、切り落とし操作のいずれかである。
【0232】
前記丸めユニットが丸められた中間演算結果を取得してから、前記演算ユニット12は、当該丸められた中間演算結果を、前記第1の入力データの小数点位置に基づいて現在の固定小数点データタイプのデータに変換する。
【0233】
ある可能な実施例では、前記演算ユニット12は、前記1つまたは複数の中間結果のうちにデータタイプは浮動小数点データである中間結果に対して切り落とし処理をしない。
【0234】
前記演算ユニット12のスレーブ処理回路102は、前記方法に従って演算を実行して中間結果を取得し、当該演算プロセスには、乗算や除算等演算があるため、それらにより得られた中間結果が演算中のメモリ格納範囲を超える場合があり、メモリ格納範囲を超える中間結果には、通常は切り落とし処理をする。しかし、本出願の演算プロセスに得られた中間結果は切り捨てられず、中間結果の精度低下が大幅に減少し、計算結果の精度を向上させる。
【0235】
ある可能な実施例では、前記演算ユニット12はさらに導出ユニットを備え、当該演算ユニット12が固定小数点演算に関与する入力データの小数点位置を受信すると、当該導出ユニットは、固定小数点演算に関与する入力データの小数点位置従って固定小数点演算プロセスから1つまたは複数の中間結果の小数点位置を導出する。前記演算サブユニットの演算によって取得された中間結果がそれに対する小数点位置で示される範囲を超える場合に、前記導出ユニットは当該中間結果の小数点位置を左にMビットシフトし、それによって当該中間結果の精度が当該中間結果の小数点位置で示される精度範囲内に位置するようにして、当該Mはゼロより大きい整数である。
【0236】
例えば、第1の入力データは、入力データI1および入力データI2を含み、それらそれぞれに対する小数点位置はP1およびP2、かつ、P1>P2であり、前記演算命令が指示する演算タイプは加算演算または減算演算である場合に、つまり、前記演算サブユニットは、I1+ I2またはI1−I2の操作を実行する際に、前記導出ユニットは、前記演算命令が指示する演算プロセスの中間結果の小数点位置はP1であることを導出する。前記演算命令が指示する演算タイプは乗算演算である場合に、つまり、前記演算サブユニットは、I1*I2の操作を実行する際に、前記導出ユニットは、前記演算命令が指示する演算プロセスの中間結果の小数点位置はP1*P2であることを導出する。
【0237】
ある可能な実施例では、前記演算ユニット12は、1つまたは複数の中間結果をキャッシするためのデータキャッシュユニットをさらに備える。
【0238】
ある選択可能な実施例では、前記計算装置は、データ統計ユニットをさらに備え、当該データ統計ユニットは、前記多層ネットワークモデルの各層における同じタイプの入力データを統計し、それによって、前記各層における各タイプの入力データの小数点位置を取得する。
【0239】
当該データ統計ユニットは、外部装置の一部でもよく、前記計算装置は、データ変換を実行する前に、外部装置から演算に関与するデータの小数点位置を取得する。
【0240】
具体的には、前記データ統計ユニットは、
前記多層ネットワークモデルの各層における同じタイプの入力データを取得するための取得サブユニットと、
前記多層ネットワークモデルの各層における同じタイプの入力データが所定の区間内の分布比率を統計して取得するための統計サブユニットと、
前記分布比率に従って前記多層ネットワークモデルの各層における同じタイプの入力データの小数点位置を取得するための分析サブユニットとを備える。
【0243】
ある実行可能な実施例では、演算効率を向上するために、前記取得サブユニットは、ランダムまたはサンプリングで多層ネットワークモデルの各層における同じタイプの入力データからその一部のデータを取得してから、前記方法に従って当該一部のデータの小数点位置を取得してから、当該一部のデータの小数点位置に従って当該タイプの入力データに対してデータ変換(浮動小数点データから固定小数点データへの変換と、固定小数点データから固定小数点データへの変換と、固定小数点データから固定小数点データへの変換とを含む)を実行し、それにより、精度を維持するという前提の下で、計算速度と効率を向上できる。
【0244】
必要に応じて、前記データ統計ユニットは、前記同じタイプのデータまたは同じレイヤーのデータの中央値に従って、当該同じタイプのデータまたは同じレイヤーのデータのビット幅と小数点位置を決定でき、または前記同じタイプのデータまたは同じレイヤーのデータの平均値に従って、当該同じタイプのデータまたは同じレイヤーのデータのビット幅と小数点位置を決定できる。
【0245】
必要に応じて、前記演算ユニットは、前記同じタイプのデータまたは同じレイヤーのデータに従って演算して得られた中間結果が、同じレイヤータイプのデータまたは同じレイヤーデータの小数点位置とビット幅に対する値の範囲を超える場合に、当該前記演算ユニットは中間結果に対して切り落とし処理を実行せず、当該中間結果を当該演算ユニットのデータキャッシュユニットにキャッシュする。
【0246】
具体的には、前記操作ドメインには、入力データの小数点位置と、データタイプの変換モード識別子とが含まれます。前記命令処理ユニットは、当該データ変換命令に対して解析することにより、前記入力データの小数点位置と、データタイプの変換モード識別子とを取得する。前記処理ユニットは、さらにデータ変換ユニットを備え、当該データ変換ユニットは、前記入力データの小数点位置と、データタイプの変換モード識別子とに従って、前記第1の入力データを第2の入力データに変換する。
【0247】
説明すべきは、前記ネットワークモデルには、複数の層、例えば全結合層と、畳み込み層と、プーリング層と、入力層とが含まれる。前記入力データのうちに少なくとも1つは、同じレイヤーに属する入力データは同じ小数点位置を有し、つまり、同じレイヤーに属する入力データは同じ小数点位置を共有またはシェアする。
【0248】
前記入力データには、多種類のタイプのデータ、例えば、入力ニューロンと、重みと、オフセットデータなどが含まれる。前記入力データのうちには、同じレイヤーに属する入力データは同じ小数点位置を有し、つまり、同じレイヤーに属する入力データは同じ小数点位置を共有またはシェアする。
【0249】
例えば、演算命令が指示する演算タイプは固定小数点演算であり、当該演算命令が指示する演算に関与する入力データは浮動小数点データであるため、固定小数点演算の前に、前記データ変換ユニットは、当該入力データを浮動小数点データからは固定小数点データに変換する。また、演算命令が指示する演算タイプは浮動小数点演算であり、当該演算命令が指示する演算に関与する入力データは固定小数点データであるため、浮動小数点演算の前に、前記データ変換ユニットは、当該入力データを固定小数点データからは浮動小数点データに変換する。
【0250】
本出願に係るマクロ命令(例えば、計算命令およびデータ変換命令)については、前記制御ユニット11は、マクロ命令に対して解析することにより、当該マクロ命令の操作ドメインと操作コードを取得する。当該操作ドメインと操作コードに従って当該マクロ命令に対応するマイクロ命令を生成する。または、前記制御ユニット11は、マクロ命令をデコードして、マクロ命令に対応するマイクロ命令を取得する。
【0251】
ある可能な実施例では、メインプロセッサおよびコプロセッサはシステムオンチップ(SOC)に含まれ、当該メインプロセッサは前記計算装置を備える。当該コプロセッサは、前記方法に従って、前記多層ネットワークモデルの各層における同じタイプの入力データの小数点位置を取得し、当該前記多層ネットワークモデルの各層における同じタイプの入力データの小数点位置を前記計算装置に送信する。または、前記計算装置は前記多層ネットワークモデルの各層における同じタイプの入力データの小数点位置を使用する必要がある場合に、前記コプロセッサから前記多層ネットワークモデルの各層における同じタイプの入力データの小数点位置を取得する。
【0252】
ある可能な実施例では、前記すべて第1の入力データは非固定小数点データであり、当該非固定小数点データは長桁浮動小数点データと、短桁浮動小数点データと、整数データと、離散データとを含む。
【0253】
前記第1の入力データのデータタイプは互いに異なる。例えば、前記入力ニューロンと、重みと、オフセットデータとはすべて浮動小数点データである。前記入力ニューロンと、重みと、オフセットデータとの一部は浮動小数点データである。前記入力ニューロンと、重みと、オフセットデータとはすべて整数データである。前記計算装置は、非固定小数点データから固定小数点データへの変換を実現でき、つまり、長整数浮動小数点データと、短桁浮動小数点データと、整数データと、離散データとなどのタイプのデータから固定小数点データへの変換を実現できる。当該固定小数点データは、符号付き固定小数点データまたは符号なし固定小数点データでもよい。
【0254】
ある実現可能な実施例では、前記第1の入力データと第2の入力データはどちらも固定小数点データであり、かつ、第1の入力データと第2の入力データはどちらも符号付き固定小数点データでもよく、どちらも符号なしき固定小数点データでもよく、またはその一方は符号なし固定小数点データであり、もう一方は符号付き固定小数点データでもよい。かつ、第1の入力データの小数点位置と第2の入力データの小数点位置とは異なる。
【0255】
ある可能な実施例では、前記第1の入力データは固定小数点データであり、前記第2の入力データは非固定小数点データである。換言すれば、前記計算装置は、固定小数点データから非固定小数点データへの変換を実現できる。
【0256】
図4は、本発明の実施例による単層ニューラルネットワークの順方向演算のフローチャートである。当該フローチャートは、本発明によって実施される計算装置および命令セットを使用して実現される単層ニューラルネットワークの順方向演算のプロセスを示している。各層について、まずは、入力ニューロンベクトルに対して重み付けされて合計され、当該層の中間結果ベクトルが計算される。当該中間結果ベクトルは、バイアスが加算され、活性化されることにより、出力ニューロンベクトルを取得する出力ニューロンベクトルは、次の層の入力ニューロンベクトルとして使用される。
【0257】
ある具体的なアプリケーションシナリオでは、前記計算装置をトレーニング装置にすることができる。ニューラルネットワークモデルをトレーニングする前に、当該トレーニング装置は、ニューラルネットワークモデルのトレーニングに関与するトレーニングデータを取得し、当該トレーニングデータは非固定小数点データであり、前記方法によって前記トレーニングデータの小数点位置を取得する。前記トレーニング装置は、前記トレーニングデータの小数点位置に従って、当該トレーニングデータを固定小数点データで表されるトレーニンデータに変換する。前記トレーニング装置は、当該固定小数点データで表されるトレーニンデータに従って、順方向ニューラルネットワーク演算することにより、ニューラルネットワーク演算結果を取得する。前記トレーニング装置は、トレーニングデータの小数点位置の表示可能なデータ精度範囲を超えるニューラルネットワーク演算結果に対して乱数丸め操作を実行することにより、丸められたニューラルネットワーク演算結果を取得し、当該ニューラルネットワーク演算結果は、前記トレーニングデータの小数点位置の表示可能なデータ精度範囲にある。前記方法によれば、前記トレーニング装置は、多層ニューラルネットワークの各層のニューラルネットワーク演算結果である出力ニューロンを取得する前記トレーニング装置は、各層の出力ニューロンに従って出力ニューロンの勾配を取得しつつ、当該出力ニューロンの勾配に従って逆方向演算を実行することにより重みの勾配を取得し、当該重みの勾配に従ってニューラルネットワークモデルの重みを更新する。
【0258】
前記トレーニング装置は、前記プロセスを繰り返し実行して、ニューラルネットワークモデルを訓練する目的を達成する。
【0259】
指摘すべきは、順方向演算および逆方向トレーニングを実行する前に、前記計算装置は、順方向演算に関与するデータに対してデータ変換を実行する。逆方向トレーニングに関与するデータに対してデータ変換を実行しない。または、前記計算装置は、順方向演算に関与するデータに対してデータ変換を実行しない。逆方向トレーニングに関与するデータに対してデータ変換を実行する。前記計算装置は、順方向演算に関与するデータおよび逆方向トレーニングに関与するデータどちらもデータ変換を実行する。具体的なデータ変換のプロセスは前記関連な実施例を参照してもよいが、その詳細な説明は繰り返さない。
【0260】
そのうち、前記順方向演算は前記多層ニューラルネットワーク演算を含み、当該記多層ニューラルネットワーク演算は畳み込みなどの演算を含み、当該畳み込み演算は畳み込み演算命令によって実現される。
【0261】
前記畳み込み演算命令は、Cambricon命令セットのうちに一つの命令であり、当該Cambricon命令セットは、命令がオペコードとオペランドで構成されることを特徴としており、命令セットは4種類の命令を含み、それぞれは制御命令(control instructions)と、データ転送命令(data transfer instructions)と、演算命令(computational instructions)と、論理命令(logical instructions)とである。
【0262】
好ましくは、命令セット内の各命令は固定長を有する。例えば、命令セットの各命令の長さは64ビットでもよい。
【0263】
さらに、制御命令は実行プロセスを制御するために使用される。制御命令には、ジャンプ(jump)命令と条件分岐(conditional branch)命令が含まれる。
【0264】
さらに、データ転送命令は、異なるストレージメディア間のデータ転送を実行するためである。データ転送命令には、ロード(load)命令、ストア(store)命令、および移動(move)命令が含まれる。load命令は、データをメインメモリからキャッシュにロードするために使用され、store命令は、データをキャッシからメインメモリに格納するために使用され、move命令は、キャッシュとキャッシュの間またはキャッシュとレジスタの間またはレジスタとレジスタの間にデータを転送するために使用される。データ転送命令は、3つの異なるデータ組織方法を支援し、それはマトリックスと、ベクトルと、スカラーと含む。
【0265】
さらに、演算命令は、ニューラルネットワークの算術演算を実行するために使用される。演算命令には、行列演算命令と、ベクトル演算命令と、スカラー演算命令とが含まれる。
【0266】
さらに、行列演算命令は、ニューラルネットワークの行列演算を実現するために、行列とベクトルの乗算(matrix multiply vector)と、ベクトルと行列の乗算(vector multiply matrix)と、行列とスカラーの乗算(matrix multiply scalar)と、外積(outer product)と、行列と行列の加算(matrix add matrix)と、行列と行列の減算(matrix subtract matrix)とを含む。
【0267】
さらに、ベクトル演算命令は、ニューラルネットワークのベクトル演算を実現するために、ベクトル基本算術(vector elementary arithmetics)と、ベクトル超越関数(vector transcendental functions)と、ドット積(dot product)と、ベクトル乱数ジェネレーター(random vector generator)と、ベクトルの最大/最小(maximum/minimum of a vector)とを含む。そのうち、ベクトル基本算術は、ベクトルの加算と、減算と、乗算と、および除算と(add, subtract, multiply, divide)を含み、ベクトル超越関数は、多項式を係数として使用する多項式を満たさない関数であり、それは、指数関数と、対数関数と、三角関数と、逆三角関数とを含むがそれらに限定されない。
【0268】
さらに、スカラー演算命令は、ニューラルネットワークのスカラー演算を実現するために、スカラー基本算術(scalar elementary arithmetics)と、スカラー超越関数(scalar transcendental functions)とを含む。そのうち、スカラー基本算術は、スカラーの加算と、減算と、乗算と、および除算と(add, subtract, multiply, divide)を含み、スカラー超越関数は、多項式を係数として使用する多項式を満たさない関数であり、それは、指数関数と、対数関数と、三角関数と、逆三角関数とを含むがそれらに限定されない。
【0269】
さらに、論理命令は、ニューラルネットワークの論理演算を実行するために使用される。論理演算には、ベクトル論理演算命令とスカラー論理演算命令が含まれる。
【0270】
さらに、ベクトル論理演算命令には、ベクトル比較(vector compare)と、ベクトル論理演算(vector logical operations)と、およびマージより大きいベクトル(vector greater than merge)とが含まれる。そのうち、ベクトル比較は、より大きいと、より小さいと、等しいと、より大きいか等しいと、より小さいか等しいと、等しくないとを含むがそれらに限定されない。ベクトル論理演算には、論理積と、論理和と、論理否定とが含まれる。
【0271】
さらに、スカラー論理演算命令には、スカラー比較(scalar compare)と、スカラー論理演算(scalar logical operations)とが含まれる。そのうち、スカラー比較は、より大きいと、より小さいと、等しいと、より大きいか等しいと、より小さいか等しいと、等しくないとを含むがそれらに限定されない。スカラー論理演算には、論理積と、論理和と、論理否定とが含まれる。
【0272】
多層ニューラルネットワークに対する実現プロセスは、順方向演算の場合に、上層の人工ニューラルネットワークの実行が完了すると、次の層の演算命令は、演算ユニットにおける算出された出力ニューロンを次の層に対する入力ニューロンとして演算する(または、当該出力ニューロンに対してある操作を実行する後で、次の層に対して入力ニューロンとする)とともに、重みを次の層目に対する重みに置き換える。逆方向演算の場合に、上層の人工ニューラルネットワークに対する逆方向演算が実行完了すると、次の層の演算命令は、算ユニットにおける算出された出力ニューロンの勾配を次の層に対する入力ニューロンの勾配として演算する(または、当該出力ニューロンの勾配に対してある操作を実行する後で、次の層に対して入力ニューロンの勾配とする)とともに、重みを次の層目に対する重みに置き換える。
図5に示すように、
図5の破線の矢印は逆方向演算を示しており、実現の矢印は正方向演算を示している。
【0273】
他の実施例では、当該演算命令は、行列乗法命令、累積命令、活性化命令などの計算命令であり、それは正方向演算命令と方向トレーニング命令とを含む。
【0275】
図3Aに示される計算装置によってニューラルネットワークに対する正方向演算を実行するための方法は、具体的には以下である。
【0276】
前記変換ユニット13は、前記第1の入力データに対してデータタイプ変換を実行した後、制御ユニット11は、命令キャッシュユニット110からニューラルネットワークに対する順方向演算命令と、ニューラルネットワーク演算命令に対応する操作ドメインと、および少なくとも1つの操作コードを抽出し、制御ユニット11は、当該操作ドメインをデータアクセスユニットに送信し、当該少なくとも1つの操作コードを演算ユニット12に送信する。
【0277】
制御ユニット11は、メモリユニット10から当該送信ドメインに対応する重みwとオフセットbとを抽出し(bが0の場合に、オフセットbを抽出する必要はない)、重みwとオフセットbとを演算ユニットのマスター処理回路101に送信し、制御ユニット11は、メモリユニット10から入力データXiを抽出し、当該入力データXiをマスター処理回路101に送信する。
【0278】
マスター処理回路101は、入力データXiをn個のデータブロックに分割する。
【0279】
制御ユニット11の命令処理ユニット111は、当該少なくとも1つの操作コードに従って乗算命令と、オフセット命令と、累積命令とを決定し、乗算命令と、オフセット命令と、累積命令とをマスター処理回路101に送信し、マスター処理回路101は、当該乗算命令と、重みwをブロードキャストで複数のスレーブ処理回路102に送信し、n個のデータブロックは複数のスレーブ処理回路102に分配される(例えば、n個のスレーブ処理回路102を有する場合に、各スレーブ処理回路102毎に一つのデータブロックを送信する)。当該乗算命令に従って、当該重みwと受信されたデータブロックと乗算を実行して中間結果を取得する複数のスレーブ処理回路102は、当該中間結果をマスター処理回路101に送信し、当該マスター処理回路101は、累積命令に従って複数のスレーブ処理回路102から送信された中間結果を累積演算して累積結果を取得してから、オフセット命令に従って当該累積結果にオフセットbを加算して最終結果を取得してから、当該最終結果を制御ユニット11に送信する。
【0280】
また、加算演算と乗算演算の順序を逆にすることができる。
【0281】
説明すべきは、前記計算装置は、ニューラルネットワークに対する逆方向トレーニング命令を実行する方法は、前記計算装置がニューラルネットワークに対する順方向演算命令を実行するプロセスと類似しているため、具体的には前記逆方向トレーニングに関する説明を参照してもよいが、その詳細な説明は繰り返さない。
【0282】
本出願により提供される技術的解決策は、一つだけの命令、すなわちニューラルネットワーク演算命令を介してニューラルネットワークの乗算演算およびオフセット演算を実現でき、ニューラルネットワーク計算の中間結果を保存または抽出する必要がないため、中間データの格納および抽出演算を削減でき、これに対応する操作手順も削減し、ニューラルネットワークの計算効果を向上させるという利点がある。
【0283】
本出願は、さらに機械学習演算装置を開示しており、それは、1つまたは複数の本出願に係る計算装置を含み、他の処理装置から演算待ちのデータと制御情報とを取得して所定の機械学習演算を実行してから、その実行結果をI/Oインターフェースを介して周辺機器に送信する。周辺機器は、例えば、カメラと、モニターと、マウスと、キーボードと、ネットワークカードと、wifiインターフェイスと、サーバーとである。複数の計算装置が含まれている場合に、計算装置は、 より大きな機械学習演算を支援するために 、特定の構造を通じてリンクしつつ、データを転送でき、例えば、PCIEバスを介して相互接続しつつ、データを転送する。この時点で、同じ制御システムを共有したり、個別の制御システムを使用したり、メモリを共有したり、各アクセラレータに独自のメモリを有したりできる。さらに、その相互接続方法は、任意の相互接続トポロジにすることができる。
【0284】
当該機械学習演算装置は互換性が高いため、PCIEインターフェイスを介してさまざまなタイプのサーバーに接続できる。
【0285】
本出願は、前記機械学習演算装置と、相互接続共通インタフェースと、および他の処理装置を含む複合処理装置をさらに開示している。機械学習演算装置は、他の処理装置と交互して、協働してユーザーから指定の操作を実行する。
図6は、複合処理装置の概略図である。
【0286】
他の処理装置は、中央プロセッサCPUと、画像処理用演算プロセッサGPUと、機械学習プロセッサなどの1つまたは複数の汎用/専用プロセッサのプロセッサタイプを含む。他の処理装置に含まれるプロセッサの数は制限されていない。他の処理装置は、機械学習演算装置の外部データと制御との間のインターフェイスとして機能し、データ転送と、その機械学習演算装置の開閉の実現などの基本的な制御を含む。他の処理装置は、機械学習演算装置と協働して演算タスクを仕上げてもよい。
【0287】
相互接続共通インタフェースは、前記機械学習演算装置と他の処理装置との間にデータと制御命令とを転送するために用いられる。当該機械学習演算装置は、他の処理装置から必要な入力データを取得し、機械学習演算装置のオンチップのメモリ装置に書き込む。他の処理装置から制御命令を取得し、機械学習演算装置のオンチップの制御キャッシュ装置に書き込んでもよい。機械学習演算装置のストレージモジュール内のデータを読み取り、他の処理装置に送信してもよい。
【0288】
選択可能に、当該構造は
図7に示す通りであり、記憶装置をさらに含むことができ、記憶装置は前記機械学習演算装置と前記他の処理装置とそれぞれに接続される。記憶装置は、前記機械学習演算装置および前記他の処理装置にデータを格納するために用いられ、計算に必要なデータのうちに当該機械学習演算装置および前記他の処理装置の内部記憶装置完全に格納できないデータに対して特に適している。
【0289】
当該複合処理装置は、携帯電話、ロボット、ドローン、ビデオ監視設備などのSOCオンチップシステムとして使用でき、制御部のコア領域のサイズを効果的に削減し、処理速度を向上させ、全体的な電力消費を削減する。この場合に、当該複合処理装置相互接続共通インタフェースは、設備の特定のコンポーネントに結合される。特定のコンポーネントは、例えば、カメラと、モニターと、マウスと、キーボードと、ネットワークカードと、wifiインターフェイスとである。
【0290】
ある可能な実施例では、n1個のメインプロセッサとn2個のコプロセッサを含む分散システムも請求され、n1は0以上の整数であり、n2は1以上の整数である。当該システムは、多種のトポロジー構造でもよく、
図3Bに示されるトポロジーポロジー構造と、
図3Cに示されるトポロジーポロジー構造と、
図11に示されるトポロジーポロジー構造と、
図12に示されるトポロジーポロジー構造とを含むがこれらに限定されない。
【0291】
当該メインプロセッサは、入力データとその小数点位置と計算命令とをそれぞれ前記複数のコプロセッサに送信する。または、当該メインプロセッサは、前記入力データとその小数点位置と計算命令とを前記複数のコプロセッサのうちに一部のコプロセッサに送信し、当該一部のコプロセッサは、前記入力データとその小数点位置と計算命令とを他のコプロセッサに送信する。前記当該コプロセッサは、前記計算装置を含み、当該計算装置は、前記方法および計算命令に従って入力データに対して演算を実行して、演算結果を取得する。
【0292】
入力データには、入力ニューロンと、重みと、オフセットデータとなどが含まれるが、これらに限定されない。
【0293】
前記コプロセッサーは演算結果をメインプロセッサーに直接送信するか、メインプロセッサーと接続関係のないコプロセッサーがメインプロセッサーと接続関係のあるコプロセッサーに演算結果を送信してから、当該コプロセッサーは受信した演算結果は、前記メインプロセッサに送信される。
【0294】
いくつかの実施例では、前記機械学習演算装置または複合処理装置を含むチップも請求される。
【0295】
いくつかの実施例では、前記チップを含むチップパッケージ構造が請求される。
【0296】
いくつかの実施例では、前記チップパッケージ構造を含むボードが請求される。
【0297】
いくつかの実施例では、前記ボードを含む電子機器が請求される。
図8を参照すると、
図8によると本出願はボードを提供し、前記ボードは、前記チップ389を含む上に、さらに他の支持部品を含んでもよく、当該支持部品は、記憶装置390と、受信装置391と、および制御装置392とを含むがこれらに限定されない。
【0298】
前記記憶装置390は、バスを介して前記チップパッケージ構造におけるチップと接続され、データを格納するために用いられる。前記記憶装置は、複数のセットのメモリセル393を含んでもよい。各セットの前記メモリセルは、バスを介して前記チップに接続されている。各セットの前記メモリセルは、DDR SDRAM(Double Data Rate SDRAM、ダブルデータレート同期ダイナミックランダムアクセスメモリ)であることが分かりやすい。
【0299】
DDRは、クロック周波数を上げずにSDRAMの速度を2倍にすることができる。DDRは、クロックパルスの立ち上がり/立ち下がりの両方を使うことでデータを読み取ることができる。DDRは標準のSDRAMの2倍の速度である。一実施例では、前記記憶装置は、四つのセットの前記メモリセルを含んでもよい。前記メモリセルの各セットは、複数のDDR4メモリチップ(チップ)を含むことができる。ある一実施例では、チップは内部に4つの72ビットDDR4コントローラを含むことができ、そのうち64ビットがデータ送信に使用され、8ビットがECCに使用される。各セットの前記メモリセルは、DDR4−3200メモリチップ使用する場合に、データ伝送について理論的な帯域幅は25600 MB/sに達する可能性があることがわかりやすい。
【0300】
一実施例では、各セットの前記メモリセルは、複数の並列接続で配置されたダブルデータレート同期ダイナミックランダムアクセスメモリを含む。DDRは1つのクロックサイクルでデータを2回転送できる。DDRを制御するためのコントローラーは、前記チップに配置され、各メモリセルのデータ送信とデータストレージとを制御するために用いられる。
【0301】
前記インターフェース装置は、前記チップパッケージ構造内におけるチップに電気的に接続されている。前記インターフェース装置は、前記チップとの外部設備(例えば、サーバーまたはコンピューター)との間のデータ転送を実現するために用いられる。例えば、一実施例では、前記インターフェース装置は、標準のPCIEインターフェースでもよい。例えば、処理待ちのデータは、標準のPCIEインターフェイスを介してサーバーによってチップに転送され、データ転送を実現する。好ましく、PCIE 3.0X16インターフェイスを介して送信する場合に、理論上の帯域幅は16000 MB/sに達することができる。他の実施例では、前記インターフェース装置は他のインターフェースであってもよいが、本出願は前記他のインターフェースの具体的な表現態様を制限せず、前記インターフェースユニットは伝達機能を実現すればよい。また、前記チップの計算結果は、まだ前記インターフェイス装置によって外部設備(サーバーなど)に送信される。
【0302】
前記制御装置は、前記チップに電気的に接続されている。前記制御装置は、前記チップの状態を監視するために用いられる。具体的には、前記チップと前記制御装置はSPIインターフェースを介して電気的に接続でもよい。前記制御装置は、マイクロコントローラーユニット(Micro Controller Unit、MCU)を備えてもよい。例えば、前記チップは、複数の処理チップと、複数の処理コアまたは複数の処理回路とを備えてもよく、複数の負荷を駆動できる。したがって、前記チップは、複数の負荷や軽負荷など、多種な動作状態になることができる。前記制御装置により、前記複数の処理チップと、複数の処理コアまたは複数の処理回路との動作状態に対する制御は、制御デバイスによって実現することができる。
【0303】
電子機器は、データ処理装置と、ロボットと、コンピューターと、プリンターと、スキャナーと、タブレットと、スマートターミナルと、携帯電話と、運転レコーダーと、ナビゲーターと、センサーと、ウェブカメラと、サーバーと、クラウドサーバーと、カメラと、ビデオカメラと、プロジェクターと、時計と、ヘッドフォンと、モバイルストレージと、ウェアラブルと、乗り物と、家電製品と、および/または医療機器とを含む。
【0304】
前記乗り物は、飛行機と、船と、および/または車両とを含む。前記家電製品は、テレビと、エアコンと、電子レンジと、冷蔵庫と、炊飯器と、加湿器と、洗濯機と、電灯と、ガスコンロと、レンジフードとを含む。前記医療機器は、核磁気共鳴装置と、B超音波診断装置と、および/または心電計とを含む。
【0305】
図9を参照すると、
図9は、本発明の実施例による機械学習計算を実行する方法であり、前記方法は以下を含む。
【0306】
S901、計算装置は、第1の入力データおよび計算命令を取得する。
【0307】
そのうち、前記第1の入力データには、入力ニューロンと、ウエートと、出力ニューロンとが含まれる。
【0308】
S902、計算装置は、前記計算命令を解析して、データ変換命令および複数の演算命令を取得する。
【0309】
そのうち、前記データ変換命令は操作ドメインおよび操作コードを含み、該当操作コードは前記データタイプ変換命令の機能を指示する。前記データタイプ変換命令の操作ドメインは小数点位置を含み、第1の入力データのデータタイプのフラグビット、およびデータタイプの変換モードを指示するために用いられる。
【0310】
S903、計算装置は、前記データ変換命令に従って前記第1の入力データを第2の入力データに変換し、当該第2の入力データは固定小数点データである。
【0311】
そのうち、前記データ変換命令に従って前記第1の入力データを第2の入力データに変換し、前記データ変換命令を解析し、前記小数点位置と、前記第1の入力データのデータタイプを示すフラグビット、およびデータタイプの変換モードを取得する。
【0312】
前記第1の入力データのデータタイプのフラグビットに従って前記第1の入力データのデータタイプを決定する。
【0313】
前記小数点位置と前記データタイプの変換方式に従って、前記第1の入力データを前記第1の入力データのデータタイプと異なる第2の入力データに変換することとを、含む。
【0314】
そのうち、前記第1の入力データと前記第2の入力データとは両方とも固定小数点データである場合に、前記第1の入力データの小数点位置と第2の入力データの小数点位置とは一致しない。
【0315】
ある可能な実施例では、前記第1の入力データは固定小数点データである場合、前記方法はさらに、前記第1の入力データの小数点位置に従って、1つ以上の中間結果の小数点位置を導出し、前記1つ以上の中間結果は前記第1の入力データに従って演算され得る。
【0316】
S904、計算装置は、前記複数の演算命令に従って前記第2の入力データに対する演算を行い、前記計算命令の計算結果を取得する。
【0317】
そのうち、前記演算命令は、順方向演算命令および逆方向トレーニング命令を含み、つまり、前記計算装置は、順方向演算命令および逆方向トレーニング命令を実行している際(すなわち当該計算装置は順方向演算命令および/または逆方向トレーニング命令を実行している)に、前記計算装置は、前記
図9に示す実施例に従って、計算に関与するデータを固定小数点データに変換し、固定小数点演算を実行することができる。
【0318】
説明すべきは、前記ステップS901−S904は、具体的に
図1−8に示された実施例に関する説明を参照してもよいが、その詳細な説明は繰り返さない。
【0319】
ある具体的なアプリケーションシナリオでは、前記計算装置は、演算に関与するデータを固定小数点データに変換しつつ、固定小数点データの小数点位置を調整し、具体的なプロセスについては、
図10に参照し、当該
図10に示す方法は以下を含む。
【0320】
S1001、計算装置は、第1の入力データを取得する。
【0321】
そのうち、前記第1の入力データは、多層ネットワークモデルに関与するm層目のデータであり、当該第1の入力データは任意のタイプのデータである。例えば、該当第1の入力データは固定小数点データと、浮動小数点データと、整数データとまたは離散データとのいずれで、mは0より大きい整数である。
【0322】
そのうち、前記多層ネットワークモデルのm層目は線形層であり、当該線形層には畳み込み層と全結合層が含まれるが、これらに限定されない。前記第1の入力データは、入力ニューロンと、重みと、出力ニューロンと、入力ニューロン導関数と、重み導関数と、出力ニューロン導関数を含む。
【0323】
S1002、計算装置は、第1の入力データの小数点位置および固定小数点データのビット幅を決定する。
【0324】
そのうち、前記第1の入力データとして固定小数点データのビット幅は、固定小数点データによって表された第1の入力データが占めるビットであり、前記小数点位置は、固定小数点データで表された第1データデータの小数部が占めるビットである。当該小数点位置は、固定小数点データの精度を特徴付けるために用いられる。具体については、
図2Aの関連する説明を参照する。
【0326】
一実施例では、畳み込み層および全結合層の入力ニューロンと、重みと、出力ニューロンと、入力ニューロン導関数と、出力ニューロン導関数と、重み導関数とはすべて固定小数点データで表される。
【0327】
必要に応じて、前記入力ニューロンが使用する固定小数点データのビット幅は、8、16、32、64または他の値である。さらに、前記入力ニューロンが使用する固定小数点データのビット幅は8である。
【0328】
必要に応じて、前記重みが使用する固定小数点データのビット幅は、8、16、32、64または他の値である。さらに、前記重みが使用する固定小数点データのビット幅は8である。
【0329】
必要に応じて、前記入力ニューロン導関数が使用する固定小数点データのビット幅は、8、16、32、64または他の値である。さらに、前記入力ニューロン導関数が使用する固定小数点データのビット幅は16である。
【0330】
必要に応じて、前記出力ニューロン導関数が使用する固定小数点データのビット幅は、8、16、32、64または他の値である。さらに、前記出力ニューロン導関数が使用する固定小数点データのビット幅は24である。
【0331】
必要に応じて、前記重み導関数が使用する固定小数点データのビット幅は、8、16、32、64または他の値である。さらに、前記重み導関数が使用する固定小数点データのビット幅は24である。
【0332】
一実施形例では、前記多層ネットワークモデル演算に関与するデータのうちより大きい値を有するデータaに対しては、多種な固定小数点表現方法を利用してもよく、具体的には
図2Bの関連する説明を参照する。
【0334】
S903、計算装置は、第1の入力データの小数点位置を初期化し、第1の入力データの小数点位置を調整する。
【0335】
そのうち、前記小数点位置sは、異なるタイプのデータと、異なるニューラルネットワークレイヤーのデータと、異なるエポックにおけるデータにより、初期化および動的に調整する必要がある。
【0336】
以下は、より具体的に第1の入力データの小数点位置sの初期化プロセス、つまり、最初で第1の入力データを変換する際に固定小数点データに使用する小数点位置sを決定することについて説明する。
【0337】
さらに、前記計算装置は、以下を含む前記第1の入力データの小数点位置sを初期化する。第1の入力データの絶対値の最大値に従って第1の入力データの小数点位置sを初期化する。第1の入力データの絶対値の最小値に従って第1の入力データの小数点位置sを初期化する。第1の入力データにおける異なるデータタイプの間の関係に従って第1の入力データの小数点位置sを初期化する。経験的定数に従って第1の入力データの小数点位置sを初期化する。
【0338】
以下は、前記初期化プロセスについて具体的に説明する。
【0340】
場合に、データタイプで検索したり、層やデータタイプで検索したり、層やデータタイプやクループで検索したりすることができる。第1の入力データの絶対値の最大値を決定する方法には以下が含まれる。
【0347】
さらに、前記入力ニューロンの小数点位置が初期化された値および出力ニューロンの小数点位置が初期化された値は、どちらも[−8、8]の範囲内で選択可能である。重みの小数点位置が初期化された値は[−17、8]の範囲内で選択する。入力ニューロン導関数の小数点位置が初期化された値および出力ニューロン導関数の小数点位置が初期化された値は、どちらも[−40、−20]の範囲内で選択する。重み導関数の小数点位置が初期化された値は、[−48、−12]の範囲内で選択してもよい。
【0348】
以下、前記計算装置が小数点位置sのデータを動的に調整する方法について具体的に説明する。
【0349】
前記計算装置は、小数点位置sを動的に調整する方法は、sを上方調整すること(sを拡大する)と、sを下方調整すること(sを縮小する)とを含む。具体的には、第1の入力データの絶対値の最大値に従ってシングルステップで上方調整することと、第1の入力データの絶対値の最大値に従ってステップバイステップで上方調整することと、第1の入力データの分布に従ってシングルステップで上方調整することと、第1の入力データの分布に従ってステップバイステップで上方調整することと、第1の入力データの絶対値の最大値に従って下方調整することとを含む。
【0355】
必要に応じて、小数点位置を調整する頻度に対して、何時でも第1の入力データの小数点位置を調整しない。または、n個の第1のトレーニング周期(すなわち、iteration)ごとに調整し、nは定数である。または、n個の第2のトレーニング周期(すなわち、epoch)ごとに調整し、nは定数である。または、n個の第1のまたはn個の第2のトレーニング周期ごとに第1の入力データの小数点位置を調整し、n個の第1のまたは第2のトレーニング周期ごとに第1の入力データの小数点位置を調整し、その後、n=αnを調整し、そのうちにαは1より大きいである。または、n個の第1のまたは第2のトレーニング周期ごとに第1の入力データの小数点位置を調整し、トレーニングラウンドの回数が増えるとともに、nが徐々に減少する。
【0356】
さらに、入力ニューロンの小数点位置と、重みの小数点位置と、出力ニューロンの小数点位置とは、100個の第1のトレーニング周期ごとに調整される。入力ニューロンの小数点位置と、出力ニューロンの小数点位置とは、20個の第1のトレーニング周期ごとに調整される。
【0357】
説明すべきは、前記第1のトレーニング周期はバッチでサンプルをトレーニングすることに必要な時間であり、前記第2のトレーニング周期はすべてのトレーニングサンプルのトレーニングを実行することに必要な時間である。
【0358】
説明すべきは、前記データの絶対値の平均値または中間値に従って、データの小数点位置を初期化および調整し、具体的に前記データの絶対値の最大値に対する初期化と前記データの小数点位置に対する調整に関する説明を参照してもよいが、その詳細な説明は繰り返さない。
【0359】
前述の方法の実施例では、簡潔さのために、それらはすべて一連の動作の組み合わせとして説明されているが、当業者は、本開示が説明された動作シーケンスによって限定されないことを理解されたい。なぜなら、特定のステップは、本開示に従って他のシーケンスでまたは同時に実行され得るからである。さらに、当業者はまた、本明細書に記載されている実施例は任意の実施例であり、関連する動作およびモジュールは必ずしも本開示によって必要とされないことを理解されたい。
【0360】
上記の実施例では、様々な実施例の説明が異なり、ある実施例で詳述されていない詳細は他の実施例の関連する説明を参照することができる。
【0361】
本明細書で提供されるいくつかの実施例では、開示された装置は他の方法でも実施され得ることを理解されたい。例えば、上述した装置の実施例は単なる例示であり、例えば、ユニットの分割は論理的な機能の分割のみであり、他の分割方法、例えば複数のユニット又は構成要素を組み合わせてもよい。別のシステムに統合するか、または一部の機能を無視したり行わないことができる。さらに、図示または説明した相互結合または直接結合または通信接続は、何らかのインターフェース、デバイスまたはユニットを介した間接結合または通信接続でもよく、電気的またはその他の方法でもよい。
【0362】
前記個別のコンポーネントとして説明されるユニットは、物理的に分離される場合とされない場合があり、ユニットとして表示されるコンポーネントは、物理ユニットである場合とそうでない場合がある。つまり、1箇所に配置されでもよく、複数のネットワークユニットに分散されでもよい。ユニットのいくつかまたはすべては、実施例の解決策の目的を達成するための実際のニーズに従って選択されてもよい。
【0363】
また、本願の各実施例における各機能ユニットは、1つの処理ユニットに統合されてもよく、各ユニットは物理的に別々に存在してもよく、または2つ以上のユニットが1つのユニットに統合されてもよい。前記統合ユニットは、ハードウェアの形またはソフトウェアプログラムモジュールの形で実現できる。
【0364】
前記統合ユニットは、それがソフトウェア機能ユニットの形態で実施され、別個の製品として販売または使用されるときに、コンピュータ可読メモリに格納することができる。そのような理解に基づいて、本質的に本開示の技術的解決策、または関連技術に寄与する技術的解決策の一部、または技術的解決策の全部または一部は、格納されるソフトウェア製品の形で具現化され得る。本開示の様々な実施形態において説明される動作の全部または一部をコンピュータデバイス(パーソナルコンピュータ、サーバ、またはネットワークデバイスなどであってもよい)に実行させるための命令を含む。前記メモリは、ユニバーサルシリアルバス(USB)、読み出し専用メモリ(ROM、Read−Only Memory)、ランダムアクセスメモリ(RAM、,Random Access Memory)、リムーバブルハードディスク、ディスク、コンパクトディスク(CD)のようなプログラムコードを格納することができる様々な媒体を含む。
【0365】
当業者であれば、上述した実施形態の様々な方法の全部または一部を関連ハードウェアに命令するためのプログラムによって達成することができ、そのプログラムをコンピュータ可読メモリに格納することができることを理解するであろう。これは、フラッシュメモリ、読み取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、ディスクまたはコンパクトディスク(CD)などを含み得る。
【0366】
以上、本開示の実施例について詳細に説明したが、具体的な例を用いて本開示の原理および実施例を本明細書に記載した。 当業者であれば、本開示に照らして、特定の実施例および本出願の範囲において説明することになるが、上記の説明は本開示を限定するものとして解釈されるべきではない。