(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-11
(45)【発行日】2024-11-19
(54)【発明の名称】大規模並列ニューラル推論エンジン用のマルチモード低精度内積計算回路
(51)【国際特許分類】
G06N 3/063 20230101AFI20241112BHJP
G06F 17/16 20060101ALI20241112BHJP
【FI】
G06N3/063
G06F17/16 M
(21)【出願番号】P 2022520842
(86)(22)【出願日】2020-10-05
(86)【国際出願番号】 EP2020077802
(87)【国際公開番号】W WO2021073918
(87)【国際公開日】2021-04-22
【審査請求日】2023-03-24
(32)【優先日】2019-10-15
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】澤田 潤
(72)【発明者】
【氏名】アップスワミー、ラシナクマール
(72)【発明者】
【氏名】アコプヤン、フィリップ
(72)【発明者】
【氏名】アーサー、ジョン
(72)【発明者】
【氏名】キャシディ、アンドリュー
(72)【発明者】
【氏名】ダッタ、パラブ
(72)【発明者】
【氏名】エッサー、スティーブ
(72)【発明者】
【氏名】フリックナー、マイロン
(72)【発明者】
【氏名】モダ、ダルメンドラ
(72)【発明者】
【氏名】ナヤク、タパン クマール
(72)【発明者】
【氏名】オルテガ オテロ、カルロス
【審査官】福西 章人
(56)【参考文献】
【文献】特開平04-280387(JP,A)
【文献】特表2000-510268(JP,A)
【文献】米国特許出願公開第2019/0026078(US,A1)
【文献】特開平09-179723(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00-99/00
G06F 18/00-18/40
G06F 17/16
(57)【特許請求の範囲】
【請求項1】
ニューラル・アクティベーションを
固定小数点計算する方法であって、
複数の入力アクティベーションを含む入力アクティベーション・テンソルを受け取ることと、
複数の重みを含む重みテンソルを受け取ることと、
前記複数の重みの各々を複数のブース・コーディングされた重みへとブース・リコーディングすることであって、各ブース・コーディングされた値は、ある位取りを有する、前記ブース・リコーディングすることと、
入力アクティベーションごとに複数の結果が算出されるように、前記入力アクティベーション・テンソルに前記ブース・コーディングされた重みを乗算することであって、前記複数の結果の各々が前記ブース・コーディングされた重みの前記位取りに対応している、前記乗算することと、
位取りごとに1つの複数の部分和が算出されるように、前記ブース・コーディングされた重みの位取りごとに前記対応する結果を合計することと、
前記複数の部分和の各々をシフトすることを含む、前記複数の部分和の和からニューラル・アクティベーションを計算することと、を含む、方法。
【請求項2】
前記入力アクティベーション・テンソルは1次元である、請求項1に記載の方法。
【請求項3】
前記重みテンソルは2次元である、請求項1に記載の方法。
【請求項4】
前記ニューラル・アクティベーションを計算することは、前記複数の部分和の各々をその対応する位取りに従ってシフトすることを含む、請求項1に記載の方法。
【請求項5】
ニューラル・アクティベーションを計算する方法であって、
複数の入力アクティベーションを含む入力アクティベーション・テンソルを受け取ることと、
複数の重みを含む重みテンソルを受け取ることと、
前記複数の重みの各々を複数のブース・コーディングされた重みへとブース・リコーディングすることであって、各ブース・コーディングされた値は、ある位取りを有する、前記ブース・リコーディングすることと、
入力アクティベーションごとに複数の結果が算出されるように、前記入力アクティベーション・テンソルに前記ブース・コーディングされた重みを乗算することであって、前記複数の結果の各々が前記ブース・コーディングされた重みの前記位取りに対応している、前記乗算することと、
位取りごとに1つの複数の部分和が算出されるように、前記ブース・コーディングされた重みの位取りごとに前記対応する結果を合計することと、
前記複数の部分和の和からニューラル・アクティベーションを計算することと、を含み、
前記ニューラル・アクティベーションを計算することは、前記複数の部分和の各々を前記入力アクティベーションの精度に従ってシフトすることを含む
、方法。
【請求項6】
前記ニューラル・アクティベーションを計算することは、前記複数の部分和の前記和に非線形活性化関数を適用することを含む、請求項1に記載の方法。
【請求項7】
前記対応する結果を合計することは、複数の桁上げ保存加算器を適用することを含む、請求項1に記載の方法。
【請求項8】
ニューラル・アクティベーションを
固定小数点計算する方法であって、
複数の入力アクティベーションを含む入力アクティベーション・テンソルを受け取ることと、
複数の重みを含む重みテンソルを受け取ることと、
前記複数の入力アクティベーションの各々を複数のブース・コーディングされた入力アクティベーションへとブース・リコーディングすることであって、各ブース・コーディングされた値は、ある位取りを有する、前記ブース・リコーディングすることと、
重みごとに複数の結果が算出されるように、前記重みテンソルに前記ブース・コーディングされた入力アクティベーションを乗算することであって、前記複数の結果の各々が前記ブース・コーディングされた入力アクティベーションの前記位取りに対応している、前記乗算することと、
位取りごとに1つの複数の部分和が算出されるように、前記ブース・コーディングされた入力アクティベーションの位取りごとに前記対応する結果を合計することと、
前記複数の部分和の各々をシフトすることを含む、前記複数の部分和の和からニューラル・アクティベーションを計算することと、を含む、方法。
【請求項9】
前記入力アクティベーション・テンソルは1次元である、請求項8に記載の方法。
【請求項10】
前記重みテンソルは2次元である、請求項8に記載の方法。
【請求項11】
前記ニューラル・アクティベーションを計算することは、前記複数の部分和の各々をその対応する位取りに従ってシフトすることを含む、請求項8に記載の方法。
【請求項12】
ニューラル・アクティベーションを計算する方法であって、
複数の入力アクティベーションを含む入力アクティベーション・テンソルを受け取ることと、
複数の重みを含む重みテンソルを受け取ることと、
前記複数の入力アクティベーションの各々を複数のブース・コーディングされた入力アクティベーションへとブース・リコーディングすることであって、各ブース・コーディングされた値は、ある位取りを有する、前記ブース・リコーディングすることと、
重みごとに複数の結果が算出されるように、前記重みテンソルに前記ブース・コーディングされた入力アクティベーションを乗算することであって、前記複数の結果の各々が前記ブース・コーディングされた入力アクティベーションの前記位取りに対応している、前記乗算することと、
位取りごとに1つの複数の部分和が算出されるように、前記ブース・コーディングされた入力アクティベーションの位取りごとに前記対応する結果を合計することと、
前記複数の部分和の和からニューラル・アクティベーションを計算することと、を含み、
前記ニューラル・アクティベーションを計算することは、前記複数の部分和の各々を前記入力アクティベーションの精度に従ってシフトすることを含む
、方法。
【請求項13】
前記ニューラル・アクティベーションを計算することは、前記複数の部分和の前記和に非線形活性化関数を適用することを含む、請求項8に記載の方法。
【請求項14】
前記対応する結果を合計することは、複数の桁上げ保存加算器を適用することを含む、請求項8に記載の方法。
【請求項15】
ニューラル・アクティベーションを
固定小数点計算するためのニューラル推論チップであって、
複数の入力アクティベーションを含む入力アクティベーション・テンソルを受け取ることと、
複数の重みを含む重みテンソルを受け取ることと、
前記複数の重みの各々を複数のブース・コーディングされた重みへとブース・リコーディングすることであって、各ブース・コーディングされた値は、ある位取りを有する、前記ブース・リコーディングすることと、
入力アクティベーションごとに複数の結果が算出されるように、前記入力アクティベーション・テンソルに前記ブース・コーディングされた重みを乗算することであって、前記複数の結果の各々が前記ブース・コーディングされた重みの前記位取りに対応している、前記乗算することと、
位取りごとに1つの複数の部分和が算出されるように、前記ブース・コーディングされた重みの位取りごとに前記対応する結果を合計することと、
前記複数の部分和の各々をシフトすることを含む、前記複数の部分和の和からニューラル・アクティベーションを計算することと、を行うように適合されている、ニューラル推論チップ。
【請求項16】
前記ニューラル・アクティベーションを計算することは、前記複数の部分和の各々をその対応する位取りに従ってシフトすることを含む、請求項15に記載のニューラル推論チップ。
【請求項17】
ニューラル・アクティベーションを計算するためのニューラル推論チップであって、
複数の入力アクティベーションを含む入力アクティベーション・テンソルを受け取ることと、
複数の重みを含む重みテンソルを受け取ることと、
前記複数の重みの各々を複数のブース・コーディングされた重みへとブース・リコーディングすることであって、各ブース・コーディングされた値は、ある位取りを有する、前記ブース・リコーディングすることと、
入力アクティベーションごとに複数の結果が算出されるように、前記入力アクティベーション・テンソルに前記ブース・コーディングされた重みを乗算することであって、前記複数の結果の各々が前記ブース・コーディングされた重みの前記位取りに対応している、前記乗算することと、
位取りごとに1つの複数の部分和が算出されるように、前記ブース・コーディングされた重みの位取りごとに前記対応する結果を合計することと、
前記複数の部分和の和からニューラル・アクティベーションを計算することと、を行うように適合され、
前記ニューラル・アクティベーションを計算することは、前記複数の部分和の各々を前記入力アクティベーションの精度に従ってシフトすることを含む
、ニューラル推論チップ。
【請求項18】
前記ニューラル・アクティベーションを計算することは、前記複数の部分和の前記和に非線形活性化関数を適用することを含む、請求項15に記載のニューラル推論チップ。
【請求項19】
前記対応する結果を合計することは、複数の桁上げ保存加算器を適用することを含む、請求項15に記載のニューラル推論チップ。
【請求項20】
ニューラル・アクティベーションを
固定小数点計算するためのニューラル推論チップであって、
複数の入力アクティベーションを含む入力アクティベーション・テンソルを受け取ることと、
複数の重みを含む重みテンソルを受け取ることと、
前記複数の入力アクティベーションの各々を複数のブース・コーディングされた入力アクティベーションへとブース・リコーディングすることであって、各ブース・コーディングされた値は、ある位取りを有する、前記ブース・リコーディングすることと、
重みごとに複数の結果が算出されるように、前記重みテンソルに前記ブース・コーディングされた入力アクティベーションを乗算することであって、前記複数の結果の各々が前記ブース・コーディングされた入力アクティベーションの前記位取りに対応している、前記乗算することと、
位取りごとに1つの複数の部分和が算出されるように、前記ブース・コーディングされた入力アクティベーションの位取りごとに前記対応する結果を合計することと、
前記複数の部分和の各々をシフトすることを含む、前記複数の部分和の和からニューラル・アクティベーションを計算することと、を行うように適合されている、ニューラル推論チップ。
【発明の詳細な説明】
【技術分野】
【0001】
本開示の実施形態はニューラル・ネットワーク処理に関し、より詳細には、大規模並列ニューラル推論エンジン用のマルチモード低精度内積計算回路に関する。
【発明の概要】
【0002】
本開示の実施形態によれば、ニューラル・アクティベーションを計算するためのニューラル推論チップが提供される。様々な実施形態において、ニューラル推論チップは、複数の入力アクティベーションを含む入力アクティベーション・テンソルを受け取ることと、複数の重みを含む重みテンソルを受け取ることと、複数の重みの各々を複数のブース・コーディングされた重みへとブース・リコーディングすることであって、各ブース・コーディングされた値は位取り(order)を有する、ブース・リコーディングすることと、入力アクティベーションごとに複数の結果が算出されるように、入力アクティベーション・テンソルにブース・コーディングされた重みを乗算することであって、複数の結果の各々がブース・コーディングされた重みの位取りに対応している、乗算することと、位取りごとに1つの複数の部分和が算出されるように、ブース・コーディングされた重みの位取りごとに対応する結果を合計することと、複数の部分和の和からニューラル・アクティベーションを計算することと、を行うように適合されている。
【0003】
いくつかの実施形態では、入力アクティベーション・テンソルは1次元である。いくつかの実施形態では、重みテンソルは2次元である。
【0004】
いくつかの実施形態では、ニューラル・アクティベーションを計算することは、複数の部分和の各々をその対応する位取りに従ってシフトすることを含む。いくつかの実施形態では、ニューラル・アクティベーションを計算することは、複数の部分和の各々を入力アクティベーションの精度に従ってシフトすることを含む。いくつかの実施形態では、ニューラル・アクティベーションを計算することは、複数の部分和の和に非線形活性化関数を適用することを含む。いくつかの実施形態では、前記対応する結果を合計することは、複数の桁上げ保存加算器(carry-save adder)を適用することを含む。
【0005】
本開示の実施形態によれば、ニューラル・アクティベーションを計算するためのニューラル推論チップが提供される。様々な実施形態において、ニューラル推論チップは、複数の入力アクティベーションを含む入力アクティベーション・テンソルを受け取ることと、複数の重みを含む重みテンソルを受け取ることと、複数の入力アクティベーションの各々を複数のブース・コーディングされた入力アクティベーションへとブース・リコーディングすることであって、各ブース・コーディングされた値は、ある位取りを有する、ブース・リコーディングすることと、重みごとに複数の結果が算出されるように、重みテンソルにブース・コーディングされた入力アクティベーションを乗算することであって、複数の結果の各々がブース・コーディングされた入力アクティベーションの位取りに対応している、乗算することと、位取りごとに1つの複数の部分和が算出されるように、ブース・コーディングされた入力アクティベーションの位取りごとに対応する結果を合計することと、複数の部分和の和からニューラル・アクティベーションを計算することと、を行うように適合されている。
【0006】
いくつかの実施形態では、入力アクティベーション・テンソルは1次元である。いくつかの実施形態では、重みテンソルは2次元である。
【0007】
いくつかの実施形態では、ニューラル・アクティベーションを計算することは、複数の部分和の各々をその対応する位取りに従ってシフトすることを含む。いくつかの実施形態では、ニューラル・アクティベーションを計算することは、複数の部分和の各々を入力アクティベーションの精度に従ってシフトすることを含む。いくつかの実施形態では、ニューラル・アクティベーションを計算することは、複数の部分和の和に非線形活性化関数を適用することを含む。いくつかの実施形態では、前記対応する結果を合計することは、複数の桁上げ保存加算器を適用することを含む。
【0008】
本開示の実施形態によれば、ニューラル・アクティベーションを計算する方法およびニューラル・アクティベーションを計算するためのコンピュータ・プログラム製品が提供される。複数の入力アクティベーションを含む入力アクティベーション・テンソルが受け取られる。複数の重みを含む重みテンソルが受け取られる。複数の重みの各々が複数のブース・コーディングされた重みへとブース・リコーディングされ、各ブース・コーディングされた値は、ある位取りを有する。入力アクティベーションごとに複数の結果が算出されるように、入力アクティベーション・テンソルにブース・コーディングされた重みが乗算され、複数の結果の各々は、ブース・コーディングされた重みの位取りに対応している。位取りごとに1つの複数の部分和が算出されるように、ブース・コーディングされた重みの位取りごとに対応する結果が合計される。複数の部分和の和からニューラル・アクティベーションが計算される。
【0009】
いくつかの実施形態では、入力アクティベーション・テンソルは1次元である。いくつかの実施形態では、重みテンソルは2次元である。
【0010】
いくつかの実施形態では、ニューラル・アクティベーションを計算することは、複数の部分和の各々をその対応する位取りに従ってシフトすることを含む。いくつかの実施形態では、ニューラル・アクティベーションを計算することは、複数の部分和の各々を入力アクティベーションの精度に従ってシフトすることを含む。いくつかの実施形態では、ニューラル・アクティベーションを計算することは、複数の部分和の和に非線形活性化関数を適用することを含む。いくつかの実施形態では、前記対応する結果を合計することは、複数の桁上げ保存加算器を適用することを含む。
【0011】
本開示の実施形態によれば、ニューラル・アクティベーションを計算する方法およびニューラル・アクティベーションを計算するためのコンピュータ・プログラム製品が提供される。複数の入力アクティベーションを含む入力アクティベーション・テンソルが受け取られる。複数の重みを含む重みテンソルが受け取られる。複数の入力アクティベーションの各々が複数のブース・コーディングされた入力アクティベーションへとブース・リコーディングされ、各ブース・コーディングされた値は、ある位取りを有する。重みごとに複数の結果が算出されるように、重みテンソルにブース・コーディングされた入力アクティベーションが乗算され、複数の結果の各々は、ブース・コーディングされた入力アクティベーションの位取りに対応している。位取りごとに1つの複数の部分和が算出されるように、ブース・コーディングされた入力アクティベーションの位取りごとに対応する結果が合計される。複数の部分和の和からニューラル・アクティベーションが計算される。
【0012】
いくつかの実施形態では、入力アクティベーション・テンソルは1次元である。いくつかの実施形態では、重みテンソルは2次元である。
【0013】
いくつかの実施形態では、ニューラル・アクティベーションを計算することは、複数の部分和の各々をその対応する位取りに従ってシフトすることを含む。いくつかの実施形態では、ニューラル・アクティベーションを計算することは、複数の部分和の各々を入力アクティベーションの精度に従ってシフトすることを含む。いくつかの実施形態では、ニューラル・アクティベーションを計算することは、複数の部分和の和に非線形活性化関数を適用することを含む。いくつかの実施形態では、前記対応する結果を合計することは、複数の桁上げ保存加算器を適用することを含む。
【図面の簡単な説明】
【0014】
【
図1】本開示の実施形態に係るニューラル・コアを示す図である。
【
図2】本開示の実施形態に係る例示的な推論処理ユニット(IPU)を示す図である。
【
図3】本開示の実施形態に係るマルチコア推論処理ユニット(IPU)を示す図である。
【
図4】本開示の実施形態に係る例示的なブース・リコーディングを示す図である。
【
図5】本開示の実施形態に係る例示的なブース・リコーディング乗算器を示す図である。
【
図6】本開示の実施形態に係る例示的なブース・リコーディング乗算器を示す図である。
【
図7】本開示の実施形態に係る内積を計算するための例示的な方法を示す図である。
【
図8】本開示の実施形態に係る内積を計算するための例示的な方法を示す図である。
【
図9】本開示の実施形態に係る内積を計算するための方法を示す図である。
【
図10】本開示の実施形態に係る複数精度入力データ・フォーマットを示す図である。
【
図11A】本開示の実施形態に係る様々な精度における部分和生成を示す図である。
【
図11B】本開示の実施形態に係る様々な精度における部分和生成を示す図である。
【
図11C】本開示の実施形態に係る様々な精度における部分和生成を示す図である。
【
図12】本開示の実施形態に係る4ビット内積を計算するための方法を示す図である。
【
図13】本開示の実施形態に係る4ビット内積を計算するための方法を示す図である。
【
図14】本開示の実施形態に係る内積を計算する可変精度の方法を示す図である。
【
図15】本開示の実施形態に係るニューラル・アクティベーションを計算するための方法を示す図である。
【
図16】本開示の実施形態に係るコンピューティング・ノードを描いた図である。
【発明を実施するための形態】
【0015】
人工ニューロンは、その出力がその入力の線形結合の非線形関数となる数学的関数である。一方の出力が他方への入力である場合、その2つのニューロンは結合されている。重みとは、あるニューロンの出力と別のニューロンの入力の間の結合強度を符号化するスカラ値である。
【0016】
ニューロンは、その入力の重み付き和に非線形活性化関数を適用することによって、アクティベーションと呼ばれるその出力を計算する。重み付き和とは、各入力と対応する重みとを乗算しその積を累算することによって計算される中間結果である。部分和とは、入力のサブセットの重み付き和である。1つまたは複数の部分和を累算することによって、全ての入力の重み付き和が段階的に計算され得る。
【0017】
ニューラル・ネットワークとは、1つまたは複数のニューロンの集合である。ニューラル・ネットワークは多くの場合、層と呼ばれるニューロンの組へと分割されている。層とは、全てが同じ層から入力を受け取り全てが同じ層へと出力を送り、典型的には同様の機能を実行する1つまたは複数のニューロンの、集合である。入力層とは、ニューラル・ネットワークの外部のソースから入力を受け取る層である。出力層とは、ニューラル・ネットワークの外部のターゲットへと出力を送る層である。他の全ての層は中間処理層である。多層ニューラル・ネットワークとは、2つ以上の層を有するニューラル・ネットワークである。ディープ・ニューラル・ネットワークとは、多数の層を有する多層ニューラル・ネットワークである。
【0018】
テンソルとは数値の多次元のアレイである。テンソル・ブロックとは、テンソル中の要素の連続的なサブアレイである。
【0019】
各ニューラル・ネットワーク層は、パラメータ・テンソルV、重みテンソルW、入力データ・テンソルX、出力データ・テンソルY、および中間データ・テンソルZと関連付けられている。パラメータ・テンソルは、層中のニューロン活性化関数σを制御する全てのパラメータを包含する。重みテンソルは、入力を層に結合する全ての重みを包含する。入力データ・テンソルは、層が入力として消費する全てのデータを包含する。出力データ・テンソルは、層が出力として計算する全てのデータを包含する。中間データ・テンソルは、層が中間計算値として生成する任意のデータ、例えば部分和を包含する。
【0020】
ある層についてのデータ・テンソル(入力、出力、および中間)は3次元であってもよく、この場合、最初の2つの次元を空間位置を符号化するものとして解釈することができ、3番目の次元を異なる特徴を符号化するものとして解釈することができる。例えば、データ・テンソルがカラー画像を表す場合、最初の2つの次元は画像中の垂直座標および水平座標を符号化し、3番目の次元は各位置における色を符号化する。入力データ・テンソルXのあらゆる要素を別個の重みによってあらゆるニューロンに結合することができ、この場合、重みテンソルWは一般に、入力データ・テンソルの3つの次元(入力行a、入力列b、入力特徴c)を出力データ・テンソルの3つの次元(出力行i、出力列j、出力特徴k)と連結した、6つの次元を有する。中間データ・テンソルZは、出力データ・テンソルYと同じ形状を有する。パラメータ・テンソルVは、出力データ・テンソルの3つの次元を、活性化関数σのパラメータのインデックスとなる追加の次元oと連結する。いくつかの実施形態では、活性化関数σは追加のパラメータを必要とせず、この場合追加の次元は必要ない。しかしながら、いくつかの実施形態では、活性化関数σは少なくとも1つの追加のパラメータを必要とし、これは次元o内に現れる。
【0021】
ある層の出力データ・テンソルYの要素は式1のように計算でき、式中、ニューロン活性化関数σは活性化関数のパラメータのベクトルV[i,j,k,:]によって構成されており、重み付き和Z[i,j,k]は式2のように計算できる。
Y[i,j,k]=σ(V[i,j,k,:];Z[i,j,k])
式1
【数1】
【0022】
表記を簡単にするために、式2中の重み付き和を出力と呼ぶ場合があるが、これは線形活性化関数Y[i,j,k]=σ(Z[i,j,k])=Z[i,j,k]を用いることと等価であり、異なる活性化関数が使用されるときに一般性を失うことなく同じ説明が当てはまるものと理解される。
【0023】
様々な実施形態において、上記したような出力データ・テンソルの計算は、より小さい問題へと分解される。次いで各問題を、1つもしくは複数のニューラル・コア上で、または従来のマルチコア・システムの1つもしくは複数のコア上で並列に、解くことができる。
【0024】
ニューラル・ネットワークが並列構造であることが、上記から明らかであろう。所与の層中のニューロンは、1つもしくは複数の層または他の入力から、要素xiを有する入力Xを受け取る。各ニューロンは、入力および要素wiを有する重みWに基づいて、その状態y∈Yを計算する。様々な実施形態において、入力の重み付き和はバイアスbによって調整され、次いでその結果が非線形処理(nonlinearity)F(・)に渡される。例えば、単一のニューロンのアクティベーションは、y=F(b+Σxiwi)として表現できる。
【0025】
所与の層中の全てのニューロンが同じ層から入力を受け取りそれらの出力を独立して計算するので、ニューロンのアクティベーションを並列に計算することができる。全体的なニューラル・ネットワークのこの態様によって、並列分散型コアにおいて計算を行うことで全体的な計算が加速される。更に、各コア内で、ベクトル演算を並列に計算することができる。回帰的入力がある場合、例えばある層がそれ自体に戻るように投影される場合ですら、全てのニューロンがやはり同時に更新される。実際には、回帰的な接続は、その層への次の入力と揃うように遅延される。
【0026】
ここで
図1を参照すると、本開示の実施形態に係るニューラル・コアが描かれている。ニューラル・コア100は、出力テンソルの1つのブロックを計算する、タイル化可能な計算ユニットである。ニューラル・コア100は、M個の入力およびN個の出力を有する。様々な実施形態において、M=Nである。出力テンソル・ブロックを計算するために、ニューラル・コアは、M×1の入力テンソル・ブロック101をM×Nの重みテンソル・ブロック102と乗算し、その積を累算して重み付き和を得、これが1×Nの中間テンソル・ブロック103に格納される。O×Nのパラメータ・テンソル・ブロックは、中間テンソル・ブロック103に適用されて1×Nの出力テンソル・ブロック105を生成するN個のニューロン活性化関数の各々を規定する、O個のパラメータを包含する。
【0027】
複数のニューラル・コアをニューラル・コアのアレイ中でタイル化することができる。いくつかの実施形態では、アレイは2次元である。
【0028】
ニューラル・ネットワーク・モデルとは、ニューロン間の結合のグラフならびにあらゆるニューロンについての重みおよび活性化関数のパラメータを含む、ニューラル・ネットワークが行う計算の全体を集合的に規定する定数のセットである。訓練とは、所望の機能を実行するようにニューラル・ネットワーク・モデルを修正するプロセスである。推論とは、ニューラル・ネットワーク・モデルを修正することなく、ニューラル・ネットワークを入力に適用して出力を生成するプロセスである。
【0029】
推論処理ユニットは、ニューラル・ネットワーク推論を実行するプロセッサの一範疇である。ニューラル推論チップは、推論処理ユニットの具体的な物理的実例である。
【0030】
図2を参照すると、本開示の実施形態に係る例示的な推論処理ユニット(IPU)が示されている。IPU200は、ニューラル・ネットワーク・モデル用のメモリ201を含む。上記したように、ニューラル・ネットワーク・モデルは、計算されるべきニューラル・ネットワーク用のシナプス重みを含み得る。IPU200は、一時的であってもよいアクティベーション・メモリ202を含む。アクティベーション・メモリ202は入力領域および出力領域へと分割されてもよく、処理されることになるニューロン・アクティベーションを格納する。IPU200は、モデル・メモリ201からニューラル・ネットワーク・モデルをロードされる、ニューラル計算ユニット203を含む。各計算ステップの前に、アクティベーション・メモリ202から入力アクティベーションが提供される。ニューラル計算ユニット203からの出力がアクティベーション・メモリ202に書き戻されて、同じまたは別のニューラル計算ユニット上で処理される。
【0031】
様々な実施形態において、IPU200にはマイクロエンジン204が含まれている。そのような実施形態では、IPUにおける全ての操作はマイクロエンジンによって指示される。以下に記載するように、様々な実施形態において、中央マイクロエンジンまたは分散させたマイクロエンジンあるいはその両方が提供され得る。大域マイクロエンジンをチップ・マイクロエンジンと呼ぶ場合があり、一方、局所マイクロエンジンをコア・マイクロエンジンまたは局所制御部と呼ぶ場合がある。様々な実施形態において、マイクロエンジンは、1つまたは複数のマイクロエンジン、マイクロ制御部、状態機械、CPU、または他の制御部を備える。
【0032】
図3を参照すると、本開示の実施形態に係るマルチコア推論処理ユニット(IPU)が示されている。IPU300は、ニューラル・ネットワーク・モデル用のメモリ301と命令とを含む。いくつかの実施形態では、メモリ301は、重み部分311および命令部分312へと分割される。上記したように、ニューラル・ネットワーク・モデルは、計算されるべきニューラル・ネットワーク用のシナプス重みを含み得る。IPU300は、一時的であってもよいアクティベーション・メモリ302を含む。アクティベーション・メモリ302は入力領域および出力領域へと分割されてもよく、処理されることになるニューロン・アクティベーションを格納する。
【0033】
IPU300は、ニューラル・コア303のアレイ306を含む。各コア303は、モデル・メモリ301からニューラル・ネットワーク・モデルをロードされベクトル計算を実行するように動作可能な、計算ユニット333を含む。各コアはまた、局所アクティベーション・メモリ332を含む。各計算ステップの前に、局所アクティベーション・メモリ332から入力アクティベーションが提供される。計算ユニット333からの出力がアクティベーション・メモリ332に書き戻されて、同じまたは別の計算ユニット上で処理される。
【0034】
IPU300は、1つまたは複数のネットワーク・オン・チップ(NoC)305を含む。いくつかの実施形態では、部分和NoC351はコア303同士を相互接続し、それらの間で部分和を伝達する。いくつかの実施形態では、重みおよび命令をコア303に分配するために、別個のパラメータ分配NoC352によって、コア303をメモリ301に接続する。様々な構成のNoC351および352が本開示に従って使用するのに適していることが諒解されるであろう。例えば、ブロードキャスト・ネットワーク、行ブロードキャスト・ネットワーク、ツリー・ネットワーク、および交換ネットワークが使用され得る。
【0035】
様々な実施形態において、IPU300には大域マイクロエンジン304が含まれている。様々な実施形態において、各コア303には局所コア制御部334が含まれている。そのような実施形態では、操作の指示は、大域マイクロエンジン(チップ・マイクロエンジン)と局所コア制御部(コア・マイクロエンジン)の間で共有される。特に、311において、大域マイクロエンジン304によって、モデル・メモリ301から各コア303上のニューラル計算ユニット333に、計算命令がロードされる。312において、大域マイクロエンジン304によって、モデル・メモリ301から各コア303上のニューラル計算ユニット333に、パラメータ(例えばニューラル・ネットワーク重み/シナプス重み)がロードされる。313において、局所コア制御部334によって、局所アクティベーション・メモリ332から各コア303のニューラル計算ユニット333に、ニューラル・ネットワーク・アクティベーション・データがロードされる。上で指摘したように、アクティベーションはモデルによって規定される特定のニューラル・ネットワークのニューロンに提供され、同じもしくは別のニューラル計算ユニットから、またはシステムの外部から生じ得る。314において、ニューラル計算ユニット333は、局所コア制御部334の指示に従って、出力されるニューロン・アクティベーションを生成するための計算を行う。特に、計算は、入力アクティベーションに入力シナプス重みを適用することを含む。そのような計算を行うために、インシリコの樹状突起およびベクトル乗算ユニットを含む、様々な方法が利用可能であることが諒解されるであろう。315において、局所コア制御部334の指示に従って、局所アクティベーション・メモリ332に計算の結果が格納される。上記したように、各コアのニューラル計算ユニットの効率的な使用を実現するために、これらの段をパイプライン化することができる。所与のニューラル・ネットワークの要件に従って、入力および出力が局所アクティベーション・メモリ332から大域アクティベーション・メモリ302へと伝送され得ることも諒解されるであろう。
【0036】
このようにして、本開示は、推論処理ユニット(IPU)における操作のランタイム制御を実現する。いくつかの実施形態では、マイクロエンジンは中央化されている(単一のマイクロエンジン)。いくつかの実施形態では、IPU計算は分散される(コアのアレイによって実行される)。いくつかの実施形態では、操作のランタイム制御は階層的であり、中央マイクロエンジンと分散させたマイクロエンジンの両方が関与する。
【0037】
1つのマイクロエンジンまたは複数のマイクロエンジンが、IPUにおける全ての操作の実行を指示する。マイクロエンジンの各命令は、いくつかの下位操作(例えば、アドレス生成、ロード、計算、格納、等)に対応している。分散型の場合、コア・マイクロコードはコア・マイクロエンジン(例えば334)上で実行される。コア・マイクロコードは、1回の完全なテンソル操作を実行するための命令を含む。例えば、重みテンソルとデータ・テンソルの間の畳み込みである。シングル・コアの文脈では、コア・マイクロコードは、ローカルに格納されたデータ・テンソル(および部分和)のサブセットに対して、1回のテンソル操作を実行するための命令を含む。チップ・マイクロコードは、チップ・マイクロエンジン(例えば304)上で実行される。マイクロコードは、ニューラル・ネットワークにおける全てのテンソル操作を実行するための命令を含む。
【0038】
様々な実施形態において、シナプス統合の計算を加速するために、ベクトル-行列乗算器が使用される。上で概説したように、アクティベーション・ベクトルXに重み行列Wが乗算される。この中間結果はPS=XWとして与えられる。PSの各列は、PSj=Σxiwijとして計算することができる。この式において、アクティベーションxiおよび重みwijは例えば、低精度固定小数点計算において2ビット、4ビット、または8ビットであり得る。例示的な実装形態では、乗算xiwijが実行され、全ての積の合計が行われる。
【0039】
この計算に適した例示的な乗算器を、以下のように実装できる。生成された部分和にブース・リコーディングが適用されて、nビット乗算器用のn/2個の部分和が生成される。次いで桁上げ保存加算器によって部分和が圧縮され、部分和の数がn/2から2に削減される。最終的な2つの部分和を積に加算するために、完全な桁上げ伝搬加算器(carry-propagate adder)(またはその変形)が使用される。これらのステップにおいて、桁上げ伝搬加算器は複雑な回路構成を必要とする。n要素のベクトルXとn×m要素の行列Wのベクトル-乗法乗算の場合、n×m個の桁上げ伝搬加算器が必要になる。回路スペースを削減するために、Σxiwijの計算ごとに桁上げ伝搬加算器を1つしか使用しないことが望ましい。一般に、回路実装は、Σxiwijにおける計算の位取りを変えることによって最適化され得る。
【0040】
また更に、複数精度、例えば2ビット、4ビット、8ビット、またはより多くの精度をサポートするように、ベクトル-行列乗算器を修正することが望ましい。また、これら複数精度の計算の間で回路構成を可能な限り再利用することも望ましい。第1に乗算し、第2に合計する手法では、各乗算器は複数精度の乗算をサポートしなければならない。回路構成の操作の位取りを変えることによって、複数精度の操作のために同じデータ・パスを再利用することができる。
【0041】
様々な実施形態において、固定小数点内積計算Σxiwijが以下によって実行される:ブース・リコーディングされた部分和の生成、同じ位取りのブース・リコーディングされた部分和の部分和削減、および最終的な解答となる全ての部分和の合計。
【0042】
この場合、個々の乗算器の値は生成されない。そうではなく、各乗算器の計算が内積計算全体にわたって分配される。異なる精度で計算するとき、合計ステップにおいて部分和に対して異なる量のシフトが実行される。したがって、必要な複数精度の回路構成の量は最小限である。
【0043】
図4を参照すると、例示的なブース・リコーディングが示されている。部分和を生成するために、乗算器によってブース・リコーディングが使用され得る。テーブル・ルック・アップによって値がリコーディングされる。この例では、表1に基数2のブース・リコーディング・テーブルが示されている。
【0044】
【0045】
ブース・リコーディングの手順を示すために、基数4のブース・リコーディングを使用してAにBを乗算することを考える。最初に、ブース・リコーディング・テーブル(例えば表1)で、1つおきのビットから始まり一部が重なっている、乗数Bの3ビットについてチェックする。ビットB[1:-1]、B[3:1]、B[5:3]、等を使用する。B[-1]はBの最下位ビットの右側に加えられた追加のビットであり、これは0である。部分和ベクトルは、Bの対応する位置のブース・リコーディングに応じてAから生成される。部分和ベクトルは、ブース・リコーディングごとに2ビットシフトされる。この結果、{B1,B0,B-1}の部分和はビット位置0から始まるが、{B3,B2,B1}の部分和はビット位置2から始まる。部分和ベクトルの数は、桁上げ保存加算器を使用して2にまで圧縮される。最後に、桁上げ伝搬加算器(またはその変形)を使用して、圧縮された2つの部分和ベクトルが積に加算される。
【0046】
図5を参照すると、8ビットのブース・リコーディング乗算器が示されている。この例では、被乗数A(501)と乗数B(502)の乗算が実行される。Bは8ビットの2進数B[7:0]であると想定される。B[-1]=0がB[0]の右側に加算される。部分和503…506を計算するために、ブース・テーブル・ルックアップを行う:i=0,2,4,6に対して、Booth(B[i+1:i-1])。Booth(B[i+1:i-1])=2ならば、A*Booth(B[i+1:i-1])=A<<1である。Booth(B[i+1:i-1])=1ならば、A*Booth(B[i+1:i-1])=Aである。Booth(B[i+1:i-1])=0ならば、A*Booth(B[i+1:i-1])=0である。Booth(B[i+1:i-1])=-1ならば、A*Booth(B[i+1:i-1])=-Aである。Booth(B[i+1:i-1])=-2ならば、A*Booth(B[i+1:i-1])=-A<<1である。部分和A*Booth(B[i+1:i-1])は、加算前に左にiビットシフトされる。
【0047】
例えば、i=0の場合の部分和503は、AおよびBの位置と整列される。部分和504、505、および506は、それぞれ左に2ビット、4ビット、および6ビットシフトされる。この結果、これらの部分和503~506は位置が互いにずれており、異なる位取りのものであると言われる。
【0048】
いずれの場合も、0、A、または-Aのいずれかを選択すること、および任意選択的に左に1ビットシフトすることによって、値Aから部分和A*Booth(B[i+1:i-1])=Aを計算することができる。最後に、4つの部分和503…506を加算して、積A*B507を得る。
【0049】
図6を参照すると、ブース・リコーディング乗算器の例が示されている。この例は19*71の二値計算を示す。[B1:B-1]におけるビット110からのブース・リコーディングされた値は表1によれば-1であるので、1番目の部分和603は111111111101101であるが、これは被乗数00010011(601)の2の補数に符号拡張を行ったものである。[B3:B1]における011の2番目のブース・リコーディングが2であるので、2番目の部分和000100110(604)は被乗数を左に1ビットシフトしたものである。[B5:B3]における000の3番目のブース・リコーディング値が0であるので、3番目の部分和605は000000000である。[B7:B5]における010のブース・リコーディングが1であるので、最後の部分和606は000010011である。これらの部分和は2ビット離れた位置にある、すなわち、部分和604は部分和603の2ビット左に位置し、部分和605は部分和603の4ビット左にあり、部分和606は部分和603の6ビット左に位置する。最後に、全ての部分和を加算すると、正しい積607、19*71=1349が二値フォーマットで生成される。
【0050】
図7を参照すると、内積を計算するための例示的な方法が示されている。この例では、乗算器は全てのiについてA
i*B
iを計算し、次いでそれらを足し合わせて、ΣA
i*B
iを算出する。このように、内積は、各A
i*B
iの乗算結果を最初に計算し、次いでそれらを足し合わせることによって得られる。
【0051】
図8を参照すると、内積を計算するための例示的な方法が示されている。この例では、個々のA
i*B
iの積を計算する代わりに、同じ位取りの部分和の合計が計算され、次いでそれらが足し合わされる。特に、各A
i*B
i801…804について、上記したように部分和811…814、821…824、831…834、および841…844が計算される。この例では、B
i[1:-1]、B
i[3:1]、B
i[5:3]、B
i[7:5]に対応する、4つの部分和が計算される。加算器805によって同じ位取りの部分和が個別に合計されて、和806…809が算出される。例えば、部分和811、821、831、および841は同じ位取りのものであり、加算器805によって足し合わされると和806が生成される。それとは別に、部分和812、822、832、および842は同じ位取りのものであり、加算されて和807が生成される。部分和813、823、833、および843が加算されて、和808が算出される。部分和814、824、834、および844が加算されて、和809が算出される。最後に、和806…809を2ビット離れるようにシフトし、足し合わせて、最終結果ΣA
i*B
i810が算出される。
【0052】
図9を参照すると、内積を計算する方法が示されている。特に、示されているように、同じ位取りの部分和の合計を使用して、内積ΣA
0*B
0が計算される。901において、全ての被乗数B
iがブース・リコーディングされる。902において、A
iとB
iのリコーディングされた値とから、部分和が生成される。903において、異なる乗算器からの同じ位取りを有する全ての部分和の合計が、個別に計算される。904において、部分和の合計が適切にシフトされて加算される。
【0053】
この手法では、同じ位取りの全ての部分和が整列され、初期の合計プロセスがより効率的である。大きなベクトルと行列の低精度ニューラル・ベクトル-行列乗算では、各乗算が有する位取りの異なる部分和の数は少ない。しかしながら、異なる乗算からの同じ位取りの多数の部分和が存在する。したがって、多くの部分和の削減は、より効率的な実装につながることになる。例えば、8ビット精度を有する32×32行列は、乗算ごとに4つの部分和を有する。しかしながら、各内積計算では、同じ位取りの32個の部分和を全て加算する必要がある。
【0054】
この手法の別の利点は、複数精度モード用の計算回路を共有できることである。
図10を参照すると、複数精度の入力データ・フォーマットが示されている。このような実施形態では、同じベクトルまたは行列が異なる精度で解釈される。例えば、16ビットのデータが、2要素8ビットのベクトル、4要素4ビットのベクトル、または8要素2ビットのベクトルとして使用され得る。
図10に示すように、8ビット・モード・アクティベーション(1001)、4ビット・モード・アクティベーション(1002)、または2ビット・モード・アクティベーション(1003)を提供するために、8ビットが使用され得る。同様に、8ビット・モード重み(1004)、4ビット・モード重み(1005)、または2ビット・モード重み(1006)を提供するために、8ビットが使用され得る。このことは、8ビットのデータが、8ビットが1つ、4ビットが2つ、または2ビットが4つであるものとしていかに解釈され得るかを示す。
【0055】
上記した内積回路は、複数精度の内積生成をサポートするために使用され得る。ブース・リコーディングおよび部分和生成回路は、入力データを幾分修正する必要がある。回路が同じ位取りの全ての部分和を加算するためには、修正は必要ない。最終的な合計回路は、異なる量を有する同じ位取りの部分和の合計をシフトし、次いでそれらを足し合わせる必要がある。
【0056】
図11A~
図11Cを参照すると、8ビット(
図11A)、4ビット(
図11B)、および2ビット(
図11C)のモードについて、部分和生成が比較されている。これは部分和がどのように生成されるかを示している。8ビット・モードと比較すると、部分和生成器に入力される被乗数は、4ビットA’
iまたは2ビットA’’
iである。ブース・エンコーダに入力される被乗数は、ほぼ同一のビットである(B
0[7:5]=B’
1[3:1]およびB
0[7:6]=B’’
3[1:0]であるため)。B’
i[-1]およびB’’
i[-1]だけは0であると想定しなければならない。
【0057】
図11Aは、8ビット乗算器がどのように8ビット積1117を計算するかを示す。8ビット乗算器の場合の部分和1113…1116は、最初にB
0のブース・リコーディングを計算することによって、および次いで、場合によってはシフトを伴って、0、A
0、または-A
0を選ぶことよって、生成される。
【0058】
図11Bでは、2元4ビット乗算器が、A’
0*B’
0+A’
1*B’
1を生成する。最初にB’
0がブース・リコーディングされ、部分和1123…1124を生成するために使用される。これらの部分和は、場合によっては左に1ビットのシフトを伴って0、A’
0、または-A’
0のいずれかを選択することによって、生成される必要がある。同様に、B’
1はブース・リコーディングされ、場合によっては1ビットのシフトを伴って0、A’
1、または-A’
1のいずれかを選択することによって、部分和1125…1126を生成するために使用されることになる。8ビット乗算器とは異なり、A’
0およびB’
0からの部分和1123…1124はA’
1およびB’
1から生成された部分和1125…1126と整列されるが、その理由は、それらがいずれも、B’0[1:-1]およびB’1[1:-1]である、1~-1の位置におけるブース・リコーディングから生成されるからである。最後に、全ての部分和1123…1126が足し合わされて、4ビット内積1127が生成される。
【0059】
図11Cでは、4元2ビット乗算器が、内積A’’
0*B’’
0+A’’
1*B’’
1+A’’
2*B’’
2+A’’
3*B’’
3を計算する。部分和1133は、B’’
0を最初にブース・リコーディングし、0、A’’
0、または-A’’
0のいずれかを選択することによって、A’’
0およびB’’
0から生成される。同様に、部分和1134は、A’’
1およびB’’
1から生成され、部分和1135はA’’
2およびB’’
2から生成され、部分和1136はA’’
3およびB’’
3から生成される。全ての部分和1133…1136が整列されるが、その理由は、それらが同じビット位置のブース・レコーディング(recording)値から生成されるからである。部分和1133…1136が足し合わされて、2ビット内積1137が生成される。
【0060】
8ビット・モードと比較すると、部分和生成器に入力される被乗数は、4ビットA’iまたは2ビットA’’iである。ブース・エンコーダに入力される被乗数は、ほぼ同一のビットである(B0[7:5]=B’1[3:1]およびB0[7:6]=B’’3[1:0]であるため)。B’i[-1]およびB’’i[-1]だけは0であると想定しなければならない。ブース・リコーディング論理は、この論理が被乗数を選択しシフトすることができるので、共有可能である。
【0061】
図12を参照すると、4ビット内積を計算するための方法が示されている。この実施形態では、部分和を最初に加えるために同じ手法が採用される。この場合、部分和合計回路は、
図8に示すような8ビット内積計算と同じである。特に、8ビット・モードに関して記載したような回路を使用して、各乗算器からの1番目の部分和(例えば1201)が集められて、和1205が計算される。同様に、2番目の部分和(例えば1202)が加算されて和1206が生成され、3番目の部分和(例えば1203)が加算されて和1207が生成され、4番目の部分和(例えば1204)が加算されて和1208が生成される。4ビット・モード計算に対応できるように、最終合計の前に和1205…1208の各々に異なるシフト量が適用されて、結果1209が算出される。
【0062】
各部分和計算について、1番目の部分和1201と2番目の部分和1202は異なる位取りのものであり、したがって、部分和1202は部分和1201と比較して左に2ビットシフトされる。しかしながら、3番目の部分和1203は部分和1201と同じ位取りを有し、これら2つの部分和は最終加算の前に整列される。同様に、4番目の部分和1204は2番目の部分和1202と整列されるが、部分和1203と比較して左に2ビットシフトされる。和1206は、部分和の和1205と比較して左に2ビットシフトされる。しかしながら、3番目の和1207は和1205と同じ位取りを有し、これら2つの和は最終加算の前に整列される。同様に、4番目の和1208は2番目の和1206と整列されるが、和1207と比較して左に2ビットシフトされている。4ビット・モード用のシフト制御は8ビット・モードとは異なり、各乗算器においてではなく、結果1209を計算するための最終加算の前に1度だけ実施すればよい。
【0063】
図13を参照すると、2ビット内積を計算するための方法が示されている。
図12の4ビット内積計算と同様に、2ビット計算は、部分和を足し合わせるために、(
図8におけるような)8ビット・モードと同じデータ・パスを使用する。ただし、最終合計は、シフトを全く行わずに部分和の和を加算することによって得られる。
【0064】
同じ位取りの部分和を最初に足し合わせる手法を採用することによって、例えば8ビット、4ビット、および2ビットのモードを提供する、複数精度用のデータ・パスを共有することができる。ブース・リコーダおよび部分和生成器は、様々な精度構成間で幾分修正された入力を採用する。同じ位取りの部分和の合計回路は同一である。最終合計は、精度に応じてシフトの量を異ならせて行う必要がある。このことにより、他のものよりもコンパクトな設計につながる。8ビット構成と比較すると、積和演算に関して4ビット・モードではサイクルあたりの計算量が2倍になり、2ビット・モードでは積和演算の回数が4倍になる。
【0065】
図14を参照すると、同じ位取りの部分和の合計を使用して可変精度の内積を計算する方法が示されている。1401において、全ての被乗数B
iがブース・リコーディングされる。1402において、A
iとB
iのリコーディングされた値とから、部分和が生成される。1403において、同じ位取りを有する全ての部分和の合計が行われる。1404において、部分和の合計はそれらの精度に従ってシフトされる。1405において、部分和が加算されて結果に到達する。
【0066】
図15を参照すると、ニューラル・アクティベーションを計算するための方法が示されている。1501において、複数の入力アクティベーションを含む入力アクティベーション・テンソルが受け取られる。1502において、複数の重みを含む重みテンソルが受け取られる。1503において、複数の重みの各々が複数のブース・コーディングされた重みへとブース・リコーディングされ、各ブース・コーディングされた値はある位取りを有する。1504において、入力アクティベーション・テンソルにブース・コーディングされた重みが乗算され、入力アクティベーションごとに複数の結果が算出され、複数の結果の各々は、ブース・コーディングされた重みの位取りに対応している。1505において、ブース・コーディングされた重みの位取りごとに対応する結果が合計されて、位取りごとに1つの複数の部分和が算出される。1506において、複数の部分和の和からニューラル・アクティベーションが計算される。
【0067】
上記したように、本開示の様々な実施形態は、乗算ベクトルの各要素をブース・リコーディングすることによって2つのベクトルの内積を計算するためのチップを含む。被乗数ベクトルの要素およびリコーディングされた乗算値を使用して部分和が生成される。同じ位取りの全ての部分和が加算される。同じ位取りの部分和の合計はシフトを伴って加算される。いくつかの実施形態では、桁上げ保存加算器のツリーを使用して部分和加算が実行される。様々な実施形態において、ベクトル乗算器の複数のインスタンスが組み合わされて、ベクトル-行列乗算器が形成される。様々な実施形態において、複数のインスタンスが組み合わされて、行列-行列乗算器が形成される。
【0068】
様々な実施形態において、複数の精度が、乗算ベクトルの要素を精度に従って最初にブース・リコーディングすることによってサポートされる。部分和はその後その精度に従って生成され得る。同じ位取りの全ての部分和が加算される。部分和の和は精度に従ってシフトされ、次いでそれらが足し合わされる。
【0069】
ここで
図16を参照すると、計算ノードの例の概略図が示されている。計算ノード10は好適な計算ノードの一例に過ぎず、本明細書に記載する実施形態の使用または機能性の範囲に関してどのような限定を示唆することも意図していない。いずれにせよ、計算ノード10は実装され得る、または本明細書で上記した機能性のいずれかを実行できる、あるいはその両方である。
【0070】
計算ノード10には、多数の他の汎用もしくは専用計算システム環境または構成と共に動作できる、コンピュータ・システム/サーバ12が存在する。コンピュータ・システム/サーバ12との使用に好適であり得る、よく知られた計算システム、環境、または構成あるいはその組合せの例としては、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、携帯型デバイスまたはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサ・ベースのシステム、セット・トップ・ボックス、プログラム可能消費者向け電子機器、ネットワークPC、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、および上記システムまたはデバイスのいずれかを含む分散型クラウド・コンピューティング環境、などが挙げられるが、これらに限定されない。
【0071】
コンピュータ・システム/サーバ12は、プログラム・モジュールなどの、コンピュータ・システムによって実行されるコンピュータ・システム実行可能命令の一般的な文脈で説明され得る。一般に、プログラム・モジュールは、特定のタスクを実行するかまたは特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造などを含み得る。コンピュータ・システム/サーバ12は、通信ネットワークを介してリンクされているリモート処理デバイスによってタスクが実行される、分散型クラウド・コンピューティング環境において実施されてもよい。分散型クラウド・コンピューティング環境では、プログラム・モジュールを、メモリ・ストレージ・デバイスを含むローカルおよびリモートの両方のコンピュータ・システム・ストレージ媒体内に配置することができる。
【0072】
図16に示すように、計算ノード10中のコンピュータ・システム/サーバ12は、汎用コンピューティング・デバイスの形態で示されている。コンピュータ・システム/サーバ12のコンポーネントは、1つまたは複数のプロセッサまたは処理ユニット16、システム・メモリ28、およびシステム・メモリ28を含む様々なシステム・コンポーネントをプロセッサ16に連結するバス18を含み得るが、これらに限定されない。
【0073】
バス18は、メモリ・バスまたはメモリ・コントローラ、周辺バス、アクセラレイティッド・グラフィックス・ポート、および様々なバス・アーキテクチャのうちのいずれかを使用するプロセッサまたはローカル・バスを含む、いくつかのタイプのバス構造のいずれかのうちの1つまたは複数を表している。例として、限定するものではないが、そのようなアーキテクチャとしては、業界標準アーキテクチャ(ISA)バス、マイクロ・チャネル・アーキテクチャ(MCA)バス、エンハンストISA(EISA)バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション(Video Electronics Standards Association;VESA)ローカル・バス、周辺装置相互接続(Peripheral Component Interconnects;PCI)バス、周辺装置相互接続エキスプレス(Peripheral Component Interconnect Express;PCIe)、およびアドバンスト・マイクロコントローラ・バス・アーキテクチャ(Advanced Microcontroller Bus Architecture;AMBA)が挙げられる。
【0074】
様々な実施形態では、1つまたは複数の推論処理ユニット(図示せず)がバス18に連結される。そのような実施形態では、IPUはバス18を介してメモリ28からデータを受信し得るか、またはメモリ28にデータを書き込み得る。同様に、IPUは本明細書に記載するように、バス18を介して他のコンポーネントと相互作用し得る。
【0075】
コンピュータ・システム/サーバ12は通常、様々なコンピュータ・システム可読媒体を含む。そのような媒体は、コンピュータ・システム/サーバ12がアクセス可能な任意の利用可能な媒体であってよく、これには、揮発性媒体および不揮発性媒体、取り外し可能媒体および取り外し不可能媒体の両方が含まれる。
【0076】
システム・メモリ28は、ランダム・アクセス・メモリ(RAM)30またはキャッシュ・メモリ32あるいはその両方などの、揮発性メモリの形態のコンピュータ・システム可読媒体を含み得る。コンピュータ・システム/サーバ12は、他の取り外し可能/取り外し不可能な揮発性/不揮発性コンピュータ・システム・ストレージ媒体を更に含み得る。単なる例として、取り外し不可能な不揮発性磁気媒体(図示しないが典型的には「ハード・ドライブ」と呼ばれる)に対する読取りおよび書込みを行うための、ストレージ・システム34が提供され得る。図示されていないが、取り外し可能な不揮発性磁気ディスク(例えば、「フロッピー(R)・ディスク」)に対する読取りおよび書込みを行うための磁気ディスク・ドライブ、ならびに、CD-ROM、DVD-ROM、または他の光学媒体などの取り外し可能な不揮発性光ディスクに対する読取りまたは書込みを行うための光ディスク・ドライブが提供され得る。そのような例では、各々が1つまたは複数のデータ媒体インターフェースによってバス18に接続され得る。以下で更に描写し記載するように、メモリ28は、本開示の実施形態の機能を実行するように構成されている1組の(例えば少なくとも1つの)プログラム・モジュールを有する、少なくとも1つのプログラム製品を含み得る。
【0077】
1組の(少なくとも1つの)プログラム・モジュール42を有するプログラム/ユーティリティ40は、限定ではなく例としてメモリ28に格納され得るが、オペレーティング・システム、1つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データにも格納され得る。オペレーティング・システム、1つもしくは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データの各々、またはこれらの何らかの組合せは、ネットワーキング環境の実装を含み得る。プログラム・モジュール42は一般に、本明細書に記載する実施形態の機能または方法論あるいはその組合せを実行する。
【0078】
コンピュータ・システム/サーバ12はまた、キーボード、ポインティング・デバイス、ディスプレイ24、等などの1つもしくは複数の外部デバイス14、ユーザとコンピュータ・システム/サーバ12の対話を可能にする1つもしくは複数のデバイス、またはコンピュータ・システム/サーバ12と1つもしくは複数の他のコンピューティング・デバイスとの通信を可能にする任意のデバイス(例えば、ネットワーク・カード、モデム、等)、あるいはそれらの組合せとも通信し得る。そのような通信は、入力/出力(I/O)インターフェース22を介して行うことができる。また更に、コンピュータ・システム/サーバ12は、ネットワーク・アダプタ20を介して、ローカル・エリア・ネットワーク(LAN)、一般的なワイド・エリア・ネットワーク(WAN)、または公共ネットワーク(例えばインターネット)、あるいはその組合せなどの、1つまたは複数のネットワークと通信し得る。描かれているように、ネットワーク・アダプタ20は、バス18を介してコンピュータ・システム/サーバ12のその他のコンポーネントと通信する。示されていないが、他のハードウェア・コンポーネントまたはソフトウェア・コンポーネントあるいはその両方を、コンピュータ・システム/サーバ12と組み合わせて使用してもよいことが理解されるべきである。例としては以下が挙げられるが、これらに限定されない:マイクロコード、デバイス・ドライバ、冗長な処理ユニット、外部ディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システム、等。
【0079】
本開示は、システム、方法、またはコンピュータ・プログラム製品あるいはそれらの組合せとして具現化され得る。コンピュータ・プログラム製品は、プロセッサに本開示の態様を実行させるためのコンピュータ可読プログラム命令を有する、コンピュータ可読記憶媒体を含んでもよい。
【0080】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用される命令を保持および記憶できる有形のデバイスであり得る。コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、または以上の任意の好適な組合せであり得るが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストには、以下、すなわち、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読取り専用メモリ(ROM)、消去可能プログラマブル読取り専用メモリ(EPROMもしくはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読取り専用メモリ(CD-ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリ・スティック、フロッピー(R)・ディスク、命令が記録されているパンチ・カードもしくは溝の中の隆起構造などの機械的に符号化されたデバイス、および以上の任意の好適な組合せが含まれる。本明細書において使用されるコンピュータ可読記憶媒体は、電波もしくは他の自由に伝播する電磁波、導波路もしくは他の伝送媒体を通じて伝播する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、または配線を介して伝送される電気信号などの、一過性の信号そのものであると解釈されるべきではない。
【0081】
本明細書に記載するコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、あるいは、ネットワーク、例えば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくはワイヤレス・ネットワーク、またはその組合せを経由して外部のコンピュータまたは外部ストレージ・デバイスに、ダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはそれらの組合せを備え得る。各コンピューティング/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースが、ネットワークからコンピュータ可読プログラム命令を受信し、それらのコンピュータ可読プログラム命令を、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体に記憶されるように転送する。
【0082】
本開示の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、マシン命令、マシン依存型命令、マイクロコード、ファームウェア命令、状態設定データ、または、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語もしくは類似のプログラミング言語などの従来の手続き型プログラミング言語を含む、1つもしくは複数のプログラミング言語の任意の組合せで書かれた、ソース・コードもしくはオブジェクト・コードのいずれか、であり得る。コンピュータ可読プログラム命令は、専らユーザのコンピュータ上で、スタンド・アロン・ソフトウェア・パッケージとして部分的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上でかつ部分的に遠隔のコンピュータ上で、または専ら遠隔のコンピュータもしくはサーバ上で、実行することができる。後者のシナリオでは、遠隔のコンピュータを、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む任意の種類のネットワークを介して使用者のコンピュータに接続してもよく、または、外部のコンピュータへの接続を(例えば、インターネット・サービス・プロバイダを利用してインターネットを介して)行ってもよい。いくつかの実施形態では、例えばプログラマブル・ロジック回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA)を含む電子回路は、本開示の態様を行うために、コンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行して電子回路を個人化することができる。
【0083】
本明細書には、本開示の実施形態に係る方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して、本開示の態様が記載されている。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方におけるブロックの組合せを、コンピュータ可読プログラム命令によって実施できることが理解されるであろう。
【0084】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能データ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令はまた、命令が保存されたコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作の態様を実施する命令を含んだ製品を備えるように、コンピュータ可読記憶媒体に保存され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはそれらの組合せに特定の方式で機能するように指示できるものであってもよい。
【0085】
コンピュータ可読プログラム命令はまた、コンピュータ、他のプログラム可能装置、または他のデバイスで実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作を実施するように、コンピュータによって実行されるプロセスを作り出すべく、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードされ、コンピュータ、他のプログラム可能装置、または他のデバイス上で一連の動作ステップを実行させるものであってもよい。
【0086】
図中のフローチャートおよびブロック図には、本開示の様々な実施形態に係るシステム、方法、およびコンピュータ・プログラム製品の、可能な実装形態のアーキテクチャ、機能性、および動作が説明されている。この関連において、フローチャートまたはブロック図内の各ブロックは、指定された論理機能を実施するための1つまたは複数の実行可能命令を備える、モジュール、セグメント、または命令の一部分を表すことができる。いくつかの代替的実装形態では、ブロック内に記された機能は、図に記されたものとは異なる順序で実行され得る。例えば、連続して示される2つのブロックは、実際には実質的に並行して実行されてもよく、またはこれらのブロックは時には、関わる機能に応じて逆の順序で実行され得る。また、ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組合せは、指定された機能もしくは動作を行う、または専用ハードウェアとコンピュータ命令の組合せを実行する、専用ハードウェア・ベースのシステムによって実施され得ることも、留意されるであろう。
【0087】
本開示の様々な実施形態の説明を例示の目的で提示してきたが、それらは網羅的であることも開示される実施形態に限定されることも意図していない。当業者には記載される実施形態の範囲および思想から逸脱することなく多くの修正および変更が明らかであろう。本明細書で用いられる専門用語は、実施形態の原理、実際の用途、もしくは市場で見られる技術に対する技術的な改善を最もよく説明するように、または、他の当業者が本明細書において開示される実施形態を理解できるように、選択された。