IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ グーグル インコーポレイテッドの特許一覧

<>
  • 特開-埋め込み層計算の加速化 図1
  • 特開-埋め込み層計算の加速化 図2
  • 特開-埋め込み層計算の加速化 図3
  • 特開-埋め込み層計算の加速化 図4A
  • 特開-埋め込み層計算の加速化 図4B
  • 特開-埋め込み層計算の加速化 図4C
  • 特開-埋め込み層計算の加速化 図4D
  • 特開-埋め込み層計算の加速化 図5
  • 特開-埋め込み層計算の加速化 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023162181
(43)【公開日】2023-11-08
(54)【発明の名称】埋め込み層計算の加速化
(51)【国際特許分類】
   G06N 3/08 20230101AFI20231031BHJP
   G06T 1/20 20060101ALI20231031BHJP
   G06T 1/40 20060101ALI20231031BHJP
【FI】
G06N3/08
G06T1/20 B
G06T1/40
【審査請求】有
【請求項の数】12
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2023125258
(22)【出願日】2023-08-01
(62)【分割の表示】P 2022511014の分割
【原出願日】2020-09-30
(31)【優先権主張番号】62/909,667
(32)【優先日】2019-10-02
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ナガラジャン,ラフル
(72)【発明者】
【氏名】ナイ,リーフォン
(72)【発明者】
【氏名】クリアン,ジョージ
(72)【発明者】
【氏名】ハリハラン,ヘマ
(57)【要約】      (修正有)
【課題】ニューラルネットワーク計算を実行するための、コンピュータ読取可能媒体を含む方法、システム及び装置を提供する。
【解決手段】ハードウェア回路上でニューラルネットワークを実行するシステムにおいて、ニューラルネットワーク層の出力を生成するための例示的なプロセスは、ニューラルネットワーク層への入力のバッチを受信するホストを含む。入力の各々は、アドレスによって識別される記憶場所に格納されており、1つまたは複数の入力について、アドレスのリスト内の1つまたは複数の重複アドレスを識別し、各重複アドレスについて、アドレスのリスト内の重複アドレスを識別する固有の識別子を生成し、固有の識別子に対応するアドレスによって識別される記憶場所から第1の入力を取得し、取得した第1の入力から層の出力を生成する。
【選択図】図6
【特許請求の範囲】
【請求項1】
ハードウェア回路上でニューラルネットワークを実行するように構成されたシステムを使用してニューラルネットワーク計算を実行するための方法であって、
ホストが、ニューラルネットワーク層への入力のバッチを受信するステップを備え、前記入力のバッチ内の各入力は、アドレスによって識別される記憶場所に格納されており、前記方法はさらに、
前記入力のバッチ内の1つまたは複数の入力について、アドレスのリスト内の1つまたは複数の重複アドレスを識別するステップと、
各重複アドレスについて、前記アドレスのリスト内の前記重複アドレスを識別する固有の識別子を生成するステップと、
前記入力のバッチについて、前記固有の識別子に対応するアドレスによって識別される記憶場所から第1の入力を取得するステップと、
前記取得された第1の入力から前記ニューラルネットワーク層の埋め込み出力を生成するステップとを備える、方法。
【請求項2】
前記ニューラルネットワーク層は、前記ニューラルネットワークの埋め込み層であり、前記埋め込み出力は、埋め込み特徴ベクトルを備え、前記方法はさらに、
前記システムの散布回路が、前記埋め込み層への前記入力のバッチ内の特定の入力についての重複アドレスに対する前記固有の識別子の逆マッピングを決定するステップと、
前記特定の入力についての前記重複アドレスに対する前記固有の識別子の前記逆マッピングに基づいて、1つまたは複数の埋め込み特徴ベクトルを前記埋め込み層の出力として生成するステップとを備える、請求項1に記載の方法。
【請求項3】
1つまたは複数の固有の識別子に基づいて、前記入力のバッチについて、フィルタリングされたアドレスリストを生成するステップと、
前記フィルタリングされたアドレスリストに含まれるアドレスについて、複数のプロセッサの各プロセッサの間でのアドレスのパーティショニングを決定するステップとをさらに備え、
前記第1の入力を取得するステップは、アドレスの各パーティションについて、前記アドレスのパーティションから入力を検索するように割り当てられたそれぞれのプロセッサを使用して、前記アドレスのパーティション内のアドレスによって識別される記憶場所から第1の入力を取得するステップを備える、請求項2に記載の方法。
【請求項4】
前記逆マッピングに基づいて前記ニューラルネットワーク層の前記埋め込み出力を生成するステップは、
前記重複アドレスを含む前記アドレスのリストを解析して、重複アドレスについて生成された、固有の識別子に対応する埋め込み特徴ベクトルを、前記ニューラルネットワーク層への前記入力のバッチ内の前記特定の入力に逆向きにマッピングするステップを備える、請求項2に記載の方法。
【請求項5】
要求元プロセッサが、固有の識別子に対応する第1の入力のアドレスと前記第1の入力の要求とをリモートプロセッサに提供するステップと、
前記要求元プロセッサが、前記リモートプロセッサに割り当てられたデータシャードの記憶場所に格納された前記第1の入力を前記リモートプロセッサから受信するステップと、
1つまたは複数の削減演算を実行して、前記データシャードから得られた第1の入力から前記ニューラルネットワーク層の前記埋め込み出力を生成するステップとをさらに備える、請求項2に記載の方法。
【請求項6】
前記アドレスのリストは、入力特徴の複数のセットを備える入力特徴のサンプルを形成する入力のバッチについてのものであり、前記固有の識別子を生成するステップは、
前記入力特徴のサンプルにおける入力特徴のそれぞれのセットにわたって、各重複アドレスについて前記固有の識別子を生成するステップを備える、請求項2に記載の方法。
【請求項7】
重複アドレスに対する前記固有の識別子の前記逆マッピングを決定するステップは、
前記入力特徴の複数のセットにわたって、特定の入力についての重複アドレスに対する前記固有の識別子の前記逆マッピングを決定するステップを備える、請求項6に記載の方法。
【請求項8】
重複アドレスは、ニューラルネットワーク層への入力を格納する記憶場所の特定のアドレスであり、
前記特定のアドレスは、前記複数のプロセッサの各プロセッサの対応するデータシャードの間で共通しており、
前記特定のアドレスは、(i)前記入力特徴のセットまたは(ii)前記入力特徴のサンプルの間で重複している、請求項6に記載の方法。
【請求項9】
アドレスの各パーティションは、多次元疎テンソルのベクトル要素に対応する活性化値またはゲイン値のデータシャードに割り当てられ、
活性化値またはゲイン値の各データシャードは、対応する重みベクトルを乗算して前記ニューラルネットワーク計算を実行するために特定のプロセッサに割り当てられる、請求項2に記載の方法。
【請求項10】
前記ニューラルネットワーク層の前記埋め込み出力を生成するステップは、
前記リモートプロセッサコアに割り当てられたデータシャードの記憶場所にわたって格納された複数の入力をリモートプロセッサから要求元プロセッサに提供するステップと、
ルックアップを実行して、対応する重みベクトルを取得するステップとを備え、前記対応する重みベクトルは、前記複数の入力のうちの1つの入力を乗算して後続のニューラルネットワーク層について部分活性化値を生成するためにそれぞれの重み値を含む、請求項1に記載の方法。
【請求項11】
前記複数の入力の一部は、非重複アドレスによって識別される記憶場所から受信され、または
前記複数の入力の一部は、前記元のリスト内の、重複アドレスが存在しないアドレスによって識別される記憶場所から受信される、請求項10に記載の方法。
【請求項12】
ハードウェア回路上でニューラルネットワークを実行してニューラルネットワーク計算を実行するように構成されたシステムであって、
1つまたは複数の処理装置と、
動作を実行させるように前記1つまたは複数の処理装置によって実行可能な命令を格納するための1つまたは複数の非一時的な機械読取可能記憶装置とを備え、前記動作は、
ホストが、ニューラルネットワーク層への入力のバッチを受信するステップを備え、前記入力のバッチ内の各入力は、アドレスによって識別される記憶場所に格納されており、前記動作はさらに、
前記入力のバッチ内の1つまたは複数の入力について、アドレスのリスト内の1つまたは複数の重複アドレスを識別するステップと、
各重複アドレスについて、前記アドレスのリスト内の前記重複アドレスを識別する固有の識別子を生成するステップと、
前記入力のバッチについて、前記固有の識別子に対応するアドレスによって識別される記憶場所から第1の入力を取得するステップと、
前記取得された第1の入力から前記ニューラルネットワーク層の埋め込み出力を生成するステップとを備える、システム。
【請求項13】
前記ニューラルネットワーク層は、前記ニューラルネットワークの埋め込み層であり、前記埋め込み出力は、埋め込み特徴ベクトルを備え、前記動作はさらに、
前記システムの散布回路が、前記埋め込み層への前記入力のバッチ内の特定の入力についての重複アドレスに対する前記固有の識別子の逆マッピングを決定するステップと、
前記特定の入力についての前記重複アドレスに対する前記固有の識別子の前記逆マッピングに基づいて、1つまたは複数の埋め込み特徴ベクトルを前記埋め込み層の出力として生成するステップとを備える、請求項12に記載のシステム。
【請求項14】
1つまたは複数の固有の識別子に基づいて、前記入力のバッチについて、フィルタリングされたアドレスリストを生成するステップと、
前記フィルタリングされたアドレスリストに含まれるアドレスについて、複数のプロセッサの各プロセッサの間でのアドレスのパーティショニングを決定するステップとをさらに備え、
前記第1の入力を取得するステップは、アドレスの各パーティションについて、前記アドレスのパーティションから入力を検索するように割り当てられたそれぞれのプロセッサを使用して、前記アドレスのパーティション内のアドレスによって識別される記憶場所から第1の入力を取得するステップを備える、請求項13に記載のシステム。
【請求項15】
前記逆マッピングに基づいて前記ニューラルネットワーク層の前記埋め込み出力を生成するステップは、
前記重複アドレスを含む前記アドレスのリストを解析して、重複アドレスについて生成された、固有の識別子に対応する埋め込み特徴ベクトルを、前記ニューラルネットワーク層への前記入力のバッチ内の前記特定の入力に逆向きにマッピングするステップを備える、請求項13に記載のシステム。
【請求項16】
要求元プロセッサが、固有の識別子に対応する第1の入力のアドレスと前記第1の入力の要求とをリモートプロセッサに提供するステップと、
前記要求元プロセッサが、前記リモートプロセッサに割り当てられたデータシャードの記憶場所に格納された前記第1の入力を前記リモートプロセッサから受信するステップと、
1つまたは複数の削減演算を実行して、前記データシャードから得られた第1の入力から前記ニューラルネットワーク層の前記埋め込み出力を生成するステップとをさらに備える、請求項13に記載のシステム。
【請求項17】
前記アドレスのリストは、入力特徴の複数のセットを備える入力特徴のサンプルを形成する入力のバッチについてのものであり、前記固有の識別子を生成するステップは、
前記入力特徴のサンプルにおける入力特徴のそれぞれのセットにわたって、各重複アドレスについて前記固有の識別子を生成するステップを備える、請求項13に記載のシステム。
【請求項18】
重複アドレスに対する前記固有の識別子の前記逆マッピングを決定するステップは、
前記入力特徴の複数のセットにわたって、特定の入力についての重複アドレスに対する前記固有の識別子の前記逆マッピングを決定するステップを備える、請求項17に記載のシステム。
【請求項19】
重複アドレスは、ニューラルネットワーク層への入力を格納する記憶場所の特定のアドレスであり、
前記特定のアドレスは、前記複数のプロセッサの各プロセッサの対応するデータシャードの間で共通しており、
前記特定のアドレスは、(i)前記入力特徴のセットまたは(ii)前記入力特徴のサンプルの間で重複している、請求項17に記載のシステム。
【請求項20】
アドレスの各パーティションは、多次元疎テンソルのベクトル要素に対応する活性化値またはゲイン値のデータシャードに割り当てられ、
活性化値またはゲイン値の各データシャードは、対応する重みベクトルを乗算して前記ニューラルネットワーク計算を実行するために特定のプロセッサに割り当てられる、請求項13に記載のシステム。
【請求項21】
前記ニューラルネットワーク層の前記埋め込み出力を生成するステップは、
前記リモートプロセッサコアに割り当てられたデータシャードの記憶場所にわたって格納された複数の入力をリモートプロセッサから要求元プロセッサに提供するステップと、
ルックアップを実行して、対応する重みベクトルを取得するステップとを備え、前記対応する重みベクトルは、前記複数の入力のうちの1つの入力を乗算して後続のニューラルネットワーク層について部分活性化値を生成するためにそれぞれの重み値を含む、請求項12に記載のシステム。
【請求項22】
ハードウェア回路上でニューラルネットワークを実行してニューラルネットワーク計算を実行するために使用され、動作を実行させるように1つまたは複数の処理装置によって実行可能な命令を格納するための1つまたは複数の非一時的な機械読取可能記憶装置であって、前記動作は、
ホストが、ニューラルネットワーク層への入力のバッチを受信するステップを備え、前記入力のバッチ内の各入力は、アドレスによって識別される記憶場所に格納されており、前記動作はさらに、
前記入力のバッチ内の1つまたは複数の入力について、アドレスのリスト内の1つまたは複数の重複アドレスを識別するステップと、
各重複アドレスについて、前記アドレスのリスト内の前記重複アドレスを識別する固有の識別子を生成するステップと、
前記入力のバッチについて、前記固有の識別子に対応するアドレスによって識別される記憶場所から第1の入力を取得するステップと、
前記取得された第1の入力から前記ニューラルネットワーク層の埋め込み出力を生成するステップとを備える、1つまたは複数の非一時的な機械読取可能記憶装置。
【発明の詳細な説明】
【背景技術】
【0001】
関連出願の相互参照
本願は、2019年10月2日に出願された米国仮出願番号第62/909,667号の利益を主張し、米国仮出願番号第62/909,667号は、全文が引用によって本明細書に援用される。
【0002】
背景
本明細書は、一般に、回路を使用してニューラルネットワーク計算を実行することに関する。
【0003】
ニューラルネットワークは、ノードの1つまたは複数の層を利用して、受信した入力について出力(たとえば、分類)を生成する機械学習モデルである。ニューラルネットワークの中には、出力層に加えて1つまたは複数の隠れ層を含んでいるものもある。各隠れ層の出力は、ネットワーク内の1つまたは複数の他の層(たとえば、ネットワークの他の隠れ層または出力層)への入力として使用される。ネットワークの層のうちのいくつかは、パラメータのそれぞれのセットの現在値に従って、受信した入力から出力を生成する。
【0004】
いくつかのニューラルネットワークは、畳み込みニューラルネットワーク(CNN)(たとえば、画像処理のためのもの)または回帰型ニューラルネットワーク(RNN)(たとえば、音声および言語処理のためのもの)である。これらのニューラルネットワークの各々は、畳み込みニューラルネットワーク層または回帰型ニューラルネットワーク層のそれぞれのセットを含む。ニューラルネットワーク層は、入力を処理して、ニューラルネットワークを訓練するためのベクトルのセットを生成するために、カーネルの関連付けられたセットと、埋め込み層とを有し得る。カーネルは、重みのテンソル(すなわち、多次元配列)として表すことができる。一例として、埋め込み層は、ニューラルネットワーク層によって生成された入力(画像画素データの入力など)または活性化値のセットを処理することができる。これらの入力のセットまたは活性化値のセットもテンソルとして表すことができる。
【発明の概要】
【0005】
概要
本文献には、人工ニューラルネットワークの埋め込み層の計算を加速させるための技術が記載されている。この技術は、アドレスのリストに対して重複排除演算を実行するように構成された回路を含むコンピューティングシステム(大規模分散システムなど)において使用することができる。重複排除演算は、ニューラルネットワークの埋め込み層での入力の処理中(埋め込み層の例示的なフォワードパス計算中など)に分散システム上の負荷不均衡を減少させるために実行される。
【0006】
本明細書には、ハードウェア回路上でニューラルネットワークを実行するように構成されたシステムを使用してニューラルネットワーク計算を実行するための、コンピュータ読取可能媒体を含む方法、システムおよび装置が記載されている。上記システムは、ニューラルネットワーク層への入力のバッチを受信するホストを含む。上記入力の各々は、アドレスによって識別される記憶場所に格納されている。上記システムは、1つまたは複数の入力について、アドレスのリスト内の1つまたは複数の重複アドレスを識別する。上記システムは、各重複アドレスについて、上記アドレスのリスト内の上記重複アドレスを識別する固有の識別子を生成する。上記システムは、(i)上記固有の識別子に対応するアドレスによって識別される記憶場所から第1の入力を取得し、(ii)上記取得された第1
の入力から上記層の出力を生成する。
【0007】
本明細書に記載されている主題の一局面は、ハードウェア回路上でニューラルネットワークを実行するように構成されたシステムを使用してニューラルネットワーク計算を実行するための方法で具体化することができる。上記方法は、ホストが、ニューラルネットワーク層への入力のバッチを受信するステップを含み、上記入力のバッチ内の各入力は、アドレスによって識別される記憶場所に格納されており、上記方法はさらに、上記入力のバッチ内の1つまたは複数の入力について、アドレスのリスト内の1つまたは複数の重複アドレスを識別するステップを含む。上記方法は、各重複アドレスについて、上記アドレスのリスト内の上記重複アドレスを識別する固有の識別子を生成するステップと、上記入力のバッチについて、上記固有の識別子に対応するアドレスによって識別される記憶場所から第1の入力を取得するステップと、上記取得された第1の入力から上記ニューラルネットワーク層の埋め込み出力を生成するステップとを含む。
【0008】
これらのおよび他の実現例の各々は、任意に、以下の特徴のうちの1つまたは複数を含み得る。たとえば、いくつかの実現例において、上記ニューラルネットワーク層は、上記ニューラルネットワークの埋め込み層であり、上記埋め込み出力は、埋め込み特徴ベクトルを含み、上記方法はさらに、上記システムの散布回路が、上記埋め込み層への上記入力のバッチ内の特定の入力についての重複アドレスに対する上記固有の識別子の逆マッピングを決定するステップと、上記特定の入力についての上記重複アドレスに対する上記固有の識別子の上記逆マッピングに基づいて、1つまたは複数の埋め込み特徴ベクトルを上記埋め込み層の出力として生成するステップとを含む。
【0009】
いくつかの実現例において、上記方法は、1つまたは複数の固有の識別子に基づいて、上記入力のバッチについて、フィルタリングされたアドレスリストを生成するステップと、上記フィルタリングされたアドレスリストに含まれるアドレスについて、複数のプロセッサの各プロセッサの間でのアドレスのパーティショニングを決定するステップとをさらに含み、上記第1の入力を取得するステップは、アドレスの各パーティションについて、上記アドレスのパーティションから入力を検索するように割り当てられたそれぞれのプロセッサを使用して、上記アドレスのパーティション内のアドレスによって識別される記憶場所から第1の入力を取得するステップを含む。
【0010】
いくつかの実現例において、上記逆マッピングに基づいて上記ニューラルネットワーク層の上記埋め込み出力を生成するステップは、上記重複アドレスを含む上記アドレスのリストを解析して、重複アドレスについて生成された、固有の識別子に対応する埋め込み特徴ベクトルを、上記ニューラルネットワーク層への上記入力のバッチ内の上記特定の入力に逆向きにマッピングするステップを含む。
【0011】
上記方法は、要求元プロセッサが、固有の識別子に対応する第1の入力のアドレスと上記第1の入力の要求とをリモートプロセッサに提供するステップと、上記要求元プロセッサが、上記リモートプロセッサに割り当てられたデータシャードの記憶場所に格納された上記第1の入力を上記リモートプロセッサから受信するステップと、1つまたは複数の削減演算を実行して、上記データシャードから得られた第1の入力から上記ニューラルネットワーク層の上記埋め込み出力を生成するステップとをさらに含み得る。
【0012】
いくつかの実現例において、上記アドレスのリストは、入力特徴の複数のセットを含む入力特徴のサンプルを形成する入力のバッチについてのものであり、上記固有の識別子を生成するステップは、上記入力特徴のサンプルにおける入力特徴のそれぞれのセットにわたって、各重複アドレスについて上記固有の識別子を生成するステップを含む。いくつかの実現例において、重複アドレスに対する上記固有の識別子の上記逆マッピングを決定す
るステップは、上記入力特徴の複数のセットにわたって、特定の入力についての重複アドレスに対する上記固有の識別子の上記逆マッピングを決定するステップを含む。
【0013】
いくつかの例において、アドレスの各パーティションは、多次元疎テンソルのベクトル要素に対応する活性化値またはゲイン値のデータシャードに割り当てられ、活性化値またはゲイン値の各データシャードは、対応する重みベクトルを乗算して上記ニューラルネットワーク計算を実行するために特定のプロセッサに割り当てられる。いくつかの実現例において、重複アドレスは、ニューラルネットワーク層への入力を格納する記憶場所の特定のアドレスであり、上記特定のアドレスは、上記複数のプロセッサの各プロセッサの対応するデータシャードの間で共通しており、上記特定のアドレスは、(i)上記入力特徴のセットまたは(ii)上記入力特徴のサンプルの間で重複している。
【0014】
上記ニューラルネットワーク層の上記埋め込み出力を生成するステップは、上記リモートプロセッサコアに割り当てられたデータシャードの記憶場所にわたって格納された複数の入力をリモートプロセッサから要求元プロセッサに提供するステップと、ルックアップを実行して、対応する重みベクトルを取得するステップとを含み得て、上記対応する重みベクトルは、上記複数の入力のうちの1つの入力を乗算して後続のニューラルネットワーク層について部分活性化値を生成するためにそれぞれの重み値を含む。いくつかの実現例において、上記複数の入力の一部は、非重複アドレスによって識別される記憶場所から受信され、または、上記複数の入力の一部は、上記元のリスト内の、重複アドレスが存在しないアドレスによって識別される記憶場所から受信される。
【0015】
このおよび他の局面の他の実現例は、コンピュータ記憶装置上に符号化された、方法のアクションを実行するように構成された対応するシステム、装置およびコンピュータプログラムを含む。1つまたは複数のコンピュータのシステムは、動作時にシステムにアクションを実行させる、システムにインストールされたソフトウェア、ファームウェア、ハードウェアまたはそれらの組み合わせによってそのように構成され得る。1つまたは複数のコンピュータプログラムは、データ処理装置によって実行されると装置にアクションを実行させる命令を有することによってそのように構成され得る。
【0016】
本明細書に記載されている主題は、以下の利点のうちの1つまたは複数を実現するように特定の実施形態において実現することができる。コンピューティングシステムは、入力の複数のバッチのために埋め込み層プロセスを加速させるための処理スキームを実現するのに使用可能な回路を含む。この回路および処理スキームを使用して、ニューラルネットワークの埋め込み層への入力を検索するのに使用されるアドレスリスト内の重複アドレスを除去することによって、マルチコア処理ユニット(たとえば、プロセッサの分散システム)上の負荷不均衡を減少または緩和させることができる。
【0017】
複数の重複アドレスを有することは、ニューラルネットワークのために埋め込みを計算または更新する際に特に問題になる可能性がある。たとえば、入力のバッチ内のサンプルは、ニューラルネットワークの埋め込み層の特徴空間などに埋め込まれる必要がある可変数の特徴を含み得る。各特徴(または、入力)値は、埋め込み(たとえば、ニューラルネットワークの埋め込みテーブルに格納されるニューラルネットワークの訓練可能な重みを表す値のベクトル)を有する。サンプル(または、バッチ)内の各値は埋め込みを有するが、バッチ内の異なるサンプル(さらには、同一のサンプル内の異なる特徴)が同一の特徴値を含む場合がある。一部の例では、サンプル内の同一の特徴でさえ同一の特徴値を含む場合がある。
【0018】
たとえば、埋め込みを計算または更新する際、同一の埋め込みテーブルであるがサンプルもしくはバッチ内の異なる特徴に対して、または入力の異なるサンプルもしくはバッチ
内のさまざまな特徴に対して、同一の特徴値をフェッチする必要があり得る。埋め込みを計算または更新する際に(たとえば、メモリ内の同一のアドレスから)同一の入力値を複数回フェッチする必要があるので、アドレスの重複発生を除去する方法は、分散システム上の計算負荷を減少させて、ニューラルネットワークの埋め込み層の計算を向上または加速させるのを手助けすることができる。
【0019】
重複排除のための技術は、埋め込み層での処理のために入力の所与のバッチの特定のデータ要素を検索するように割り当てられた分散システムの別々のリモートプロセッサにリスト内のアドレスがブロードキャストされる前に、ソースまたは要求元プロセッサにおいて実行されることができる。本文献に記載されている技術を使用して、バッチ内の入力について検索されたデータ要素からニューラルネットワーク層の埋め込み出力をより効率的に計算することができる。たとえば、埋め込み出力を生成するプロセスは、バッチ内の1つまたは複数の入力について埋め込みを検索して、このバッチ内の関連する入力特徴についてこの埋め込みに対して削減を実行することを含み得る。
【0020】
従前のシステムに比べて、本明細書に記載されている技術を使用して、計算の量を減少させるまたは最小化することができ、これらの計算は、埋め込みデータを検索して、削減を実行して、埋め込み値の削減ベクトルを返すために実行される。埋め込み層出力を生成する際、この技術は、入力のバッチについて削減埋め込み値を処理する要求元プロセッサと、バッチ内の入力に対応する埋め込みを検索するリモートプロセッサとの間で計算負荷のバランスをとる改良された方法を提供する。
【0021】
本明細書に記載されている主題の1つまたは複数の実現例の詳細が添付の図面および以下の説明に記載されている。主題の他の可能な特徴、局面および利点は、説明、図面および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【0022】
図1】例示的なコンピューティングシステムのブロック図である。
図2】例示的なマルチコア処理ユニットを含む例示的な回路のブロック図である。
図3】例示的なホストがアドレスのセットを例示的なマルチコア処理ユニットのプロセッサにブロードキャストすることを示す図である。
図4A】例示的なマルチコア処理ユニットの2つまたはそれ以上のプロセッサを含む処理スキームの一例に関連付けられた図である。
図4B】例示的なマルチコア処理ユニットの2つまたはそれ以上のプロセッサを含む処理スキームの一例に関連付けられた図である。
図4C】例示的なマルチコア処理ユニットの2つまたはそれ以上のプロセッサを含む処理スキームの一例に関連付けられた図である。
図4D】例示的なマルチコア処理ユニットの2つまたはそれ以上のプロセッサを含む処理スキームの一例に関連付けられた図である。
図5】例示的なマルチコア処理ユニットの例示的なプロセッサを示す図である。
図6】ニューラルネットワーク層の出力を生成するための例示的なプロセスを示すフロー図である。
【発明を実施するための形態】
【0023】
さまざまな図面における同様の参照番号および名称は、同様の要素を示す。
詳細な説明
本明細書には、分散コンピューティングシステム内のプロセッサ負荷不均衡に起因して発生し得る処理遅延を緩和するために埋め込み層計算を加速させるための技術が記載されている。たとえば、これらの遅延は、多層ニューラルネットワークの埋め込み層の出力を生成するためのプロセッサ計算中に発生し得る。具体的には、分散システムの特定のプロ
セッサまたはコアが、埋め込みを生成するために相当数のルックアップおよび計算演算(たとえば、検索された値の削減または連結)を実行しなければならない場合に、この特定のプロセッサは、負荷不均衡に対応する処理遅延を受ける可能性がある。
【0024】
この不均衡は、入力値についてデータをルックアップまたは検索する要求を送信するソースプロセッサと、ルックアップを実行してデータを検索するリモートプロセッサとの間の不均衡であり得る。このデータは、埋め込みテーブルの埋め込み(たとえば、重み)であり得て、リモートプロセッサは、この埋め込みについてのデータまたは重み値を返す要求を処理するようにタスクを課され得る。たとえば、埋め込み層のフォワードパス計算演算では、リモートプロセッサは、リモートプロセッサに、メモリに格納されたデータを検索するためのアドレスをルックアップさせて、検索されたデータを使用して計算を実行させる、ソースからの要求を処理する。従前の分散アーキテクチャでは、リモートプロセッサは、要求において指定されたアドレスの最低限の重複排除を実行していた。
【0025】
たとえば、従前のシステムでは、リモートプロセッサは、1つまたは複数の重複アドレスを受信して、これらの重複アドレスを含む全ての受信したアドレスについて入力に対応するデータ検索および関連付けられた削減演算を実行していた。しかし、いくつかの従前のシステムによって使用されるアーキテクチャおよび処理スキームは、特に1つまたは複数のリモートプロセッサにおける計算負荷がソースプロセッサにおける計算負荷とバランスがとれない場合、または2つもしくはそれ以上のリモートプロセッサ間でバランスがとれない場合に、負荷不均衡問題をこうむりやすい。これらの負荷不均衡は、埋め込み層の出力を生成するための計算演算を立ち往生させる、または実質的に遅延させる可能性がある。
【0026】
一般に、ニューラルネットワークの埋め込み層は、埋め込み層に対応する特徴/埋め込み空間に特徴を埋め込むために使用される。特徴は、分析または予測の実行対象である独立したユニットによって共有される属性または特性であり得る。たとえば、これらの独立したユニットは、画像および他のドキュメントなどのアイテムの一部を形成する語彙の中の単語群または画像画素であり得る。埋め込み層の埋め込みを訓練するためのアルゴリズムは、ニューラルネットワークプロセッサによって実行されて、特徴を埋め込みベクトルにマッピングすることができる。いくつかの実現例では、埋め込みテーブルの埋め込みは、埋め込みが使用されるニューラルネットワークの他の層と一緒に学習される。このタイプの学習は、勾配を逆伝播して埋め込みテーブルを更新することによって行われる。
【0027】
他の実現例では、埋め込みは、埋め込みが使用されるニューラルネットワークの他の層とは別に(埋め込みが予め訓練される場合など)学習されてもよい。たとえば、埋め込み空間における幾何学的に近い埋め込みベクトルに対する同様の入力のマッピングまたは配置を決定するように個別の入力特徴についての情報を処理することによって埋め込みを計算するために、ニューラルネットワークプロセッサによってアルゴリズムが使用され得る。場合によっては、埋め込みを計算するプロセスは、生の入力データからの特徴検出に必要な表現をシステムが自動的に発見することを可能にする特徴学習または特徴エンジニアリングのための技術を表すことができる。
【0028】
いくつかの実現例において、所与の「入力」は、1つまたは複数のタイプの1つまたは複数の特徴を有し得て、埋め込み層は、それらのタイプの各々についてそれぞれの埋め込みを生成する。たとえば、入力は、いくつかの異なる特徴タイプを有する検索クエリについての入力であり得る。これらの特徴タイプは、ユーザもしくはユーザデバイスの特性(たとえば、位置、好み、デバイスタイプなど)、クエリトークン、以前に送信されたクエリ、または検索クエリの属性に対応し得る他の関連するタイプを含み得る。所与の入力について2つ以上の特徴を有するいずれの特徴タイプでも、コンピューティングシステムは
、それらの特徴の各々について個々の埋め込みを検索するように動作可能である。また、このシステムは、たとえば埋め込み値の平均値を計算することによって、検索された埋め込みを組み合わせて、当該特徴タイプについて最終的な埋め込みを生成するように動作可能である。
【0029】
上記の文脈に基づいて、本明細書には、リモートプロセッサに割り当てられたメモリの一部でのルックアップのためにアドレスのリストをリモートプロセッサに送信する前にソースプロセッサにおいてアドレスの重複排除を実行するように構成された特別目的ハードウェア回路を実現するための技術が記載されている。このハードウェア回路は、元のアドレスリストを解析して1つまたは複数の「重複」アドレスを除去するように構成された識別子(ID)散布回路(「散布回路」)を含む。この散布回路は、各リモートプロセッサに属しているアドレスを運ぶ前に重複アドレスをフィルタリングするように構成される。
【0030】
たとえば、ハードウェア回路を含むシステムは、システムの特定のリモートプロセッサに割り当てられたデータシャードに属しているアドレスを散布回路に運ばせるための命令を生成することができる。次いで、システムは、これらのアドレスを、これらのアドレスに格納された入力(特徴)に対応する埋め込みベクトルを格納するデータシャードに割り当てられた特定のリモートプロセッサに送信する。これらの埋め込みベクトルは、データシャードにわたって格納された埋め込みテーブルの重み値または埋め込みの一部であり得る。場合によっては、埋め込みテーブルの埋め込みベクトルは、コンピューティングシステムの複数のリモートプロセッサ(プロセッサノードまたはコア)の間で分割可能である。システムホストは、アドレスまたはベクトルインデックスのセットをリモートプロセッサのサブセットに送信して、このセット内のアドレスに格納された特定の特徴にマッピングされる重みのベクトル(埋め込みベクトルなど)を検索することに関連付けられた演算を実行するように動作可能である。いくつかの例において、リモートプロセッサは、重みベクトルをシステムホストに提供するまたは返す前に、1つまたは複数のルックアップおよび計算演算を実行する。
【0031】
ハードウェア回路は、メタデータ(ハッシュキーなど)をアドレスに追加することによってアドレスを強化または修正するように構成された逆マッパを含む。このメタデータを使用して、重複アドレスのフィルタリングの前に、検索または計算されたデータ(たとえば、収集されたベクトル)の特定のセットを対応する元のアドレスに逆マッピングする。場合によっては、この回路は、リモートコアから受信されたデータに対してスパース削減演算を実行して密行列を形成するように構成され得る。
【0032】
たとえば、この回路は、重複排除前に元のアドレス場所リスト内の各アドレスを見まわって、逆マッパによって生成されたメタデータタグを使用して、特定の入力アドレスに対応するベクトル出力を収集し、収集されたベクトルに対して削減演算を実行するように改良される。これらの技術は、入力のバッチ内の1つまたは複数の入力に対応する重み値(たとえば、パラメータ)を保持するメモリの特定の部分にマッピングされるリモートプロセッサの代わりに、入力の複数のバッチの処理を所有する特定の一次プロセッサによって、プロセッサの分散システムにおける計算を実行することを可能にする。
【0033】
図1は、例示的なコンピューティングシステム100のブロック図であり、コンピューティングシステム100は、埋め込み層演算を実行して、ニューラルネットワークを訓練するための埋め込みのセットを生成するための、システム100のメモリに格納されたデータ要素を検索するように構成される。場合によっては、ニューラルネットワークを訓練することは、ニューラルネットワークの埋め込みを表す出力ベクトルに基づいて1つまたは複数の学習ターゲットを決定することを含み得る。たとえば、埋め込み出力は、所与の出力次元(64次元、256次元など)についてフロート/パラメータのベクトルを含む
1つまたは複数の出力特徴セットに対応し得る。
【0034】
埋め込み出力は、システム100のニューラルネットワークが特定の計算機能(画像または音声認識など)を実行するように訓練される場合に生成される。いくつかの実現例において、ニューラルネットワークを訓練することは、以前に(ニューラルネットワークを訓練する事前のフェーズ中などに)ニューラルネットワークの埋め込みテーブルに格納された埋め込みのセットを更新することを含む。言い換えれば、ニューラルネットワークの埋め込みは、予め訓練され得る。たとえば、ニューラルネットワークの埋め込み層の埋め込みは、埋め込みが使用されるニューラルネットワークと一緒に訓練されなくてもよい。したがって、本明細書に記載されている技術は、予め訓練されたニューラルネットワークの埋め込みを更新するのに使用することができ、従前のアプローチ(埋め込みを予め訓練するのに使用されていたかもしれないアプローチなど)よりも効率を向上させる。
【0035】
コンピューティングシステム100は、ホスト102と、マルチコア処理ユニット104と、データシャード106a~106kとを含み、kは、1よりも大きな整数である。一般に、ホスト102は、処理ユニット(プロセッサ、複数のプロセッサ、または複数のプロセッサコアなど)であり得る。したがって、ホスト102は、1つまたは複数のプロセッサを含み得て、ターゲット密行列にアクセスするための命令を生成または処理して、命令110をマルチコア処理ユニット104に送信してターゲット密行列を生成するように動作可能である。以下でより詳細に説明するように、埋め込み層演算を実行することは、1つまたは複数の行列から疎要素を変換して密行列を生成することを含み得る。
【0036】
マルチコア処理ユニット104は、データシャード106a~106kのうちの1つまたは複数から対応する要素108a~108nにアクセスし、nは、1よりも大きな整数である。マルチコア処理ユニット104は、対応する要素108a~108nを使用してターゲット密行列112を生成して、さらなる処理のためにターゲット密行列112をホスト102に提供する。要素108a~108nは、異なるサイズを有する二次元行列であり得て、マルチコア処理ユニット104は、要素108a~108nの各々をベクトルに変換して、n個のベクトルを単一のベクトルに連結することによって、ターゲット密行列112を生成し得る。
【0037】
一般に、埋め込みの文脈において、疎要素に対応する「疎」情報は、特徴値を識別するワンホットベクトルであり得る。たとえば、所与の特徴について5つの可能な値(たとえば、A,B,C,D,E)がある場合、疎ベクトルは、特徴値「A」を(1,0,0,0,0)として識別し、埋め込み層は、(1,0,0,0,0)を特徴値「A」の密埋め込みベクトルにマッピングするであろう。いくつかの実現例において、埋め込みを学習するための埋め込み層の訓練中、要素108a~108nは、ベクトル(特徴値「B」または「C」の埋め込みベクトルなど)に変換される埋め込みテーブルの重み値であり得る。これらの重み値は、少なくとも埋め込みベクトルに対する特徴のマッピングに基づいて埋め込みを計算するように訓練アルゴリズムを実行するマルチコア処理ユニット104のニューラルネットワークプロセッサを使用して変換され得る。
【0038】
ホスト102は、ターゲット密行列を更新するための命令を処理して、更新された密行列をマルチコア処理ユニット104に送信することができる。たとえば、ターゲット密行列は、予め訓練されたニューラルネットワークの埋め込みに対応し得る。したがって、ホスト102は、予め訓練されたニューラルネットワークの埋め込みを更新するための命令を処理して、更新された密行列を生成することができる。たとえば、埋め込みを更新するようにニューラルネットワークを訓練する後続の反復中に、バックワードパスを実行し、埋め込みベクトルに対する入力特徴の新たなマッピングを決定してこの新たなマッピングに基づいて更新された密行列を生成することによって、埋め込みを更新し得る。いくつか
の実現例において、マルチコア処理ユニット104は、更新された密行列を対応する疎要素に変換して、データシャード106a~106kに格納された1つまたは複数の疎要素(たとえば、重み)をそれに従って更新するように動作可能である。
【0039】
上記のように、ホスト102は、コンピューティングシステム100内での実行のための命令を処理するように構成される。いくつかの実現例では、ホスト102は、マルチコア処理ユニット104によって生成されたターゲット密行列112を処理するように構成される。いくつかの他の実現例では、ホスト102は、ターゲット密行列112を生成するようにマルチコア処理ユニット104に要求するように構成され得て、別の処理ユニットがターゲット密行列112を処理するように構成され得る。
【0040】
マルチコア処理ユニット104の各プロセッサは、システム100のメモリに格納されたデータ要素を検索するように構成される。このメモリは、要素108a~108nを含むデータを格納する複数のデータシャード106a~106kを含み得る。このデータは、重みの行列構造のパラメータまたはカーネルに対応する入力、活性化値、ゲイン値または重み値を含み得る。いくつかの実現例では、データシャード106a~106kは、1つまたは複数の揮発性メモリユニットであってもよい。いくつかの他の実現例では、データシャード106a~106kは、1つまたは複数の不揮発性メモリユニットであってもよい。また、データシャード106a~106kは、別の形態のコンピュータ読取可能媒体(ストレージエリアネットワークまたは他の構成におけるデバイスなど)であってもよい。データシャード106a~106kは、電気接続、光接続またはワイヤレス接続を使用してマルチコア処理ユニット104に結合され得る。いくつかの実現例において、データシャード106a~106kは、マルチコア処理ユニット104の一部であり得て、プロセッサインメモリ(PIM)アーキテクチャに基づき得る。
【0041】
マルチコア処理ユニット104は、疎要素に基づいて密行列を求めるように構成される。いくつかの実現例において、マルチコア処理ユニット104は、密行列に基づいて疎要素の場所を判断するように構成され得る。マルチコア処理ユニット104は、複数の相互接続されたプロセッサまたはプロセッサコアを含む。たとえば、マルチコア処理ユニット104は、複数の相互接続されたプロセッサコアを含む分散処理システムであり得る。一般に、「プロセッサ」および「プロセッサコア」という用語は、マルチコア処理ユニット104の個別の相互接続された処理リソースを説明するために同義で使用することができる。
【0042】
図2は、マルチコア処理ユニット104を含む例示的な特別目的ハードウェア回路200のブロック図である。一般に、コンピューティングシステム100は、回路200(後述)のうちの1つまたは複数を使用して実現することができる。図2の実現例において、マルチコア処理ユニット104は、プロセッサ0~15を含む相互接続されたプロセッサのセットを有する。マルチコア処理ユニット104のプロセッサ0~15の各々は、以下でより詳細に説明するように、データシャード106a~106kのうちの1つまたは複数に割り当てられて、プロセッサに割り当てられたデータシャードの記憶場所に格納されたデータ(たとえば、特徴値および重み)を取得することができる。マルチコア処理ユニット104の各プロセッサは、ホスト102またはマルチコア処理ユニット104内の別のプロセッサからの要求において受信されたアドレスによって識別される記憶場所からデータをフェッチまたは検索するように動作可能である。
【0043】
これらのプロセッサは、協働して、埋め込みテーブルにマッピングされるデータ要素を検索する。これらのデータ要素は、埋め込み層演算(ニューラルネットワークの埋め込みを表す出力ベクトル(たとえば、密ベクトル)を生成するための計算など)を実行するように検索される。いくつかの実現例において、埋め込み出力は、オブジェクト(語彙の中
の用語または単語など)間の関係を定義するのに使用することができる数値(たとえば、浮動小数点値)の密ベクトルに対する入力のバッチ内の個別の入力のマッピングである。所与のバッチ内の1つの入力では、埋め込みはベクトルであり得るが、入力のバッチ全体では、埋め込みは行列(たとえば、ベクトルの集合体)であり得る。いくつかの実現例において、埋め込み値のベクトルは、訓練中にニューラルネットワークによって学習される訓練可能な重みに対応する。学習された重みは、埋め込みテーブルに格納された密ベクトルを調べることによって1つまたは複数の単語を符号化することができ、密ベクトルは、特定の単語に対応する。複数の密ベクトルは、たとえば言語処理のために単語のシーケンスを認識することに関連する特定のタスクまたは機能を実行するようにニューラルネットワークを訓練するのに使用される密行列に対応し得る。
【0044】
いくつかの例において、埋め込み層計算は、一般にニューラルネットワークの訓練フェーズ中に使用される大規模データルックアップ問題である。たとえば、訓練中、重み値の大きなテーブルは、多次元テンソルのさまざまな次元(多次元テンソルのx次元、y次元またはz次元など)にわたってシャード化またはパーティション化され得る。具体的には、重み値のテーブルは、データシャードを含むメモリ内のそれぞれの場所に個々の重み値が格納されるようにデータシャード106a~106kにわたってシャード化され得る。
【0045】
さらに、データシャード106a~106kのうちの1つまたは複数は、マルチコア処理ユニット104内の特定のプロセッサ0~15にパーティション化され得る。テーブルの各シャードまたはパーティションは、マルチコア処理ユニット104の特定のプロセッサまたはプロセッサコアに割り当てられるデータシャード106kに対応する。いくつかの例では、各プロセッサコアは、それぞれのニューラルネットワークプロセッサである。他の例では、各プロセッサコアは、単一のニューラルネットワークプロセッサのそれぞれのコアである。一般に、コンピューティングシステム100は、システムの所望の構成に基づいて、複数のプロセッサまたは複数のプロセッサコアを含み得る。
【0046】
再び図2およびハードウェア回路200を参照して、回路は、識別子(ID)散布回路202(「散布回路202」)を含み、散布回路202は、ハッシュ生成部204と、逆マッパ206とを含む。ハッシュ生成部204および逆マッパ206の各々については以下で説明する。
【0047】
散布回路202は、ホスト102によって受信され得る元のアドレスリストを処理するように構成される。元のアドレスリストは、システム100のメモリ(データシャード106a~106kを含むメモリなど)内の記憶場所を識別する。図2において、散布回路202は、ホスト102およびマルチコア処理ユニット104の外部にあるものとして、またはホスト102およびマルチコア処理ユニット104とは別のものとして示されている。しかし、いくつかの実現例では、散布回路202は、ホスト102の一部として(たとえば、散布ユニットまたはコンピューティングモジュールまたはホスト102のサブ回路として)含まれてもよい。
【0048】
同様に、いくつかの実現例では、散布回路202は、マルチコア処理ユニット104内のプロセッサの一部としてマルチコア処理ユニット104に含まれてもよい。たとえば、散布回路202は、マルチコア処理ユニット104のソース/一次プロセッサ(たとえば、プロセッサ0)に含まれてもよい。このソースプロセッサは、1つまたは複数の要求を生成し、これらの要求をマルチコア処理ユニット104内の複数の他のプロセッサ(たとえば、プロセッサ1~15)に提供して、それらのプロセッサに割り当てられたデータシャード106a~106kの記憶場所からデータ要素を検索するように、ホスト102によってタスクを課され得る。
【0049】
散布回路202は、ホスト102と通信して、元のアドレスリストを受信する。たとえば、ホスト102は、システムによって実行される機械学習演算を管理するシステム100の外部ソースまたはコントローラなどからニューラルネットワーク層への入力のバッチを受信する。たとえば、この機械学習演算は、ニューラルネットワークが画像/映像内の特定のオブジェクトをどのように認識するかまたは音声ストリーム内の特定の単語シーケンスをどのように検出するかを学習することができるように画像または音声データを処理するようにニューラルネットワークを訓練するためのものであり得る。
【0050】
ホスト102は、入力の1つまたは複数のバッチを受信する。いくつかの実現例において、ホスト102は、1つまたは複数のサンプルに対応する入力の複数のバッチを受信する。たとえば、入力の複数のバッチの第1のセットは、1つのサンプル210-1に対応し得るのに対して、入力の複数のバッチの第2のセットは、別のサンプル210-2に対応し得る。各サンプル210-1,210-2は、オブジェクト(たとえば、画像または音声ストリーム)の特徴のセットに対応する入力を含み得る。たとえば、サンプル210-1および210-2の各々は、同一の画像の異なる領域に対応する特徴、または複数の異なる画像の異なる領域に対応する特徴について、それぞれのバッチ入力を含み得る。
【0051】
入力のバッチ内の各入力は、記憶場所に格納され、この場所は、ホスト102から散布回路202によって受信された元のアドレスリスト内のアドレス(たとえば、[99],[736],[37],[99]など)によって識別され得る。いくつかの実現例において、入力の各々は、データシャード106a~106kにわたってシャード化されて、プロセッサ0~15にわたってパーティション化される埋め込みテーブルのデータまたは疎要素として格納され得る重みの対応するセットを有する。いくつかの実現例において、入力のバッチ内の個々の特徴の埋め込みは、分散された態様で(たとえば、システム100のさまざまなデータシャードにわたって)格納される。
【0052】
たとえば、これらの特徴は、複数のプロセッサノードまたはコア(0~15)に分散させることができ、各ノードは、埋め込みのシャードを格納する場所のメモリアドレスを割り当てられる。以下でより詳細に説明するように、ホスト102(たとえば、ソースプロセッサ)は、データ要素を検索して密行列を生成するように処理するために、アドレスの1つまたは複数のサブセットを含む要求をプロセッサ0~15(たとえば、リモートプロセッサ)のうちの1つまたは複数に提供する。
【0053】
上記のように、いくつかの従前のシステムでは、重複アドレスを受信するリモートプロセッサは、重複アドレスを含む受信したアドレスについて取得されたデータに対して、データ検索、算術演算(たとえば、乗算)および関連付けられた削減演算を実行していた。これは、特にリモートプロセッサにおける計算負荷が要求元またはソースプロセッサにおける計算負荷とバランスがとれない場合に負荷不均衡問題を生じさせていた。
【0054】
散布回路202は、元のアドレスリストを解析して1つまたは複数の「重複」アドレスを除去するように構成される。ホスト102によって受信されたアドレスリストは、バッチ内の入力特徴に対応する1つまたは複数の重複アドレスを含む。たとえば、システム100において受信された元のアドレスリストは、入力のバッチについてアドレス[26],[96],[99],[1],[7],[312],[99]および[912]を含み得る。この例では、元のアドレスリストは、リスト内の重複アドレスとしてアドレス[99]を含む。散布回路202は、各リモートプロセッサに属しているアドレスを運んで、運ばれたアドレスに対応するデータ要素を検索するための要求をリモートプロセッサに提供する前に、この重複アドレスをフィルタリングするように構成される。
【0055】
散布回路202は、入力のバッチ内の各入力について、アドレスのリスト内の1つまた
は複数の重複アドレスを識別する。たとえば、単一の埋め込みテーブルは、複数の特徴によって参照されることができる。そのため、複数の異なる特徴にわたって重複アドレスが存在し得る。たとえば、埋め込みテーブルTは、特徴F1およびF2によって参照されることができる。この例では、アドレス(たとえば、[99])は、(1つまたは複数のサンプルにおける)F1の入力内および(1つまたは複数のサンプルにおける)F2の入力内で繰り返され得る。
【0056】
散布回路202は、プロセッサ0~15のうちの1つまたは複数での処理のために、重複アドレスを除去して固有のアドレス(識別子)をマルチコア処理ユニット104に提供することによって、元のアドレスに対して重複排除を実行するように構成される。各々の重複アドレスについて、散布回路202は、元のアドレスリスト内の重複アドレスを固有に識別するのに使用される識別子を生成する。次いで、散布回路202は、元のアドレスリストをフィルタリングして、元のアドレスリスト内の重複アドレスを示す特定の識別子に基づいて、フィルタリングされたアドレスリストを生成し、これにより、フィルタリングされたアドレスリストは、非重複アドレスに対応する固有の識別子のみを含む。
【0057】
より具体的には、元のリスト内の各アドレスについて、散布回路202は、ハッシュ生成部204を使用して、ハッシュIDに対応する識別子を生成する。システム100のメモリは、さまざまなメモリオフセット(たとえば、オフセット0、オフセット1など)についてアドレス値(たとえば、[99])を有し得る。ハッシュ生成部204は、このアドレス値、このアドレス値のメモリオフセット、または各々の組み合わせに基づいて、ハッシュIDを生成することができる。たとえば、アドレス値(たとえば、[99])に基づいて生成されたハッシュIDの部分は、リスト内の当該アドレスの重複発生のために繰り返すが、メモリオフセットに基づいて、またはアドレス値とメモリオフセットとの組み合わせに基づいて生成されたハッシュIDの第2の部分では異なっているであろう。いくつかの例において、散布回路202は、ハッシュIDのそれぞれの第1の部分を元のリスト内のアドレスに、このアドレスの接頭辞として付加することができる。散布回路202は、アドレスリストを回帰的にスキャンして、付加された接頭辞の繰り返し発生を識別して、当該繰り返し発生に基づいて当該特定のアドレスを除去することができる。
【0058】
いくつかの実現例において、付加された接頭辞またはハッシュIDの第1の部分は、元のリスト内のアドレスを強化してフィルタリングされたアドレスリストを生成するために散布回路202によって使用されるメタデータタグの一例である。散布回路202は、ハッシュ生成部204によって生成された固有の識別子に基づいて、入力のバッチについて、フィルタリングされたアドレスリストを生成する。フィルタリングされたアドレスリストは、データシャード106の記憶場所の固有の識別子またはアドレス(たとえば、非重複アドレス)のみを含む。次いで、フィルタリングされたアドレスリストは、プロセッサ0~15が重複アドレスの複数発生ではなく固有のアドレスのみを受信するようにマルチコア処理ユニット104に提供される。
【0059】
散布回路202は、逆マッパ206を使用して逆マップを生成し、この逆マップを使用して、収集されたベクトルを元のリスト内の特定のアドレスに逆向きにマッピングする。逆マッパ206は、1つまたは複数のメタデータタグをアドレスまたは入力のバッチに追加して逆マッピングを可能にするように構成される。たとえば、逆マッパ206は、メタデータをアドレスに追加することによって元のリスト内のアドレスを強化または修正することができる。このメタデータは、アドレスのメモリオフセットを指定するハッシュIDまたは注釈を含むメタデータタグであり得る。メタデータは、重複アドレスのフィルタリングの前に、検索または計算されたデータ(たとえば、収集されたベクトル)の特定のセットを対応する元のアドレスに逆マッピングするように逆マッパ206によって使用される。
【0060】
このように、回路200は、重複排除の前に、元のアドレス場所リスト内の各アドレスを見まわって、逆マッパ206によって生成されたメタデータタグを使用して、特定の入力アドレスに対応するベクトル出力を収集するように動作可能な特別目的ハードウェアを提供する。以下でより詳細に説明するように、回路200は、収集されたベクトルに対して削減演算を実行して密行列を生成するように動作可能である。たとえば、マルチコア処理ユニット104のホスト102または例示的なソースプロセッサは、リモートコアから受信されたデータ要素の削減を実行して密行列を形成するように構成された例示的なスパース削減回路を含み得る。このことについては、図5を参照して以下でより詳細に説明する。
【0061】
図3は、ホスト102がアドレスのセットをマルチコア処理ユニット104のプロセッサ0,4,8および12の各々にブロードキャストすることを示す図である。図3に示されるように、ホスト102は、入力のバッチについて固有の識別子またはアドレスをマルチコア処理ユニット104のプロセッサに送信する。いくつかの実現例において、ホスト102は、サンプル210-1およびサンプル210-1の各々に対応する入力のそれぞれのバッチについて固有の識別子を送信することができる。たとえば、ホスト102は、バッチ302の入力についてのアドレス[0,26,96,99]をプロセッサ12に送信し、バッチ304の入力についてのアドレス[2,9,17,736]をプロセッサ0に送信することができる。図2に示されるように、バッチ302の入力についてのアドレスは、サンプル210-1のためのものであるのに対して、バッチ304の入力についてのアドレスは、サンプル210-2のためのものである。
【0062】
いくつかの実現例において、ホスト102は、入力のさまざまなバッチをマルチコア処理ユニット104内のさまざまなプロセッサおよびプロセッサのさまざまな列群に提供するように動作可能である。たとえば、ホスト102は、シーケンシャルな態様で、または並列に、入力のさまざまなバッチをさまざまなプロセッサに送信することができる。同様に、ホスト102は、シーケンシャルな態様で、または並列に、入力のさまざまなバッチをプロセッサのさまざまな列群に送信することができる。
【0063】
図4A図4Dの各々は、少なくともマルチコア処理ユニット104のホスト102および2つまたはそれ以上のプロセッサを使用してシステム100において実現可能な処理スキーム402の一例に関連付けられたそれぞれの図である。
【0064】
上記のように、プロセッサ0~15は、協働して、埋め込みテーブル(複数の疎要素を含む疎埋め込みテーブルなど)にマッピングされるデータ要素を検索する。これらのデータ要素は、リモートプロセッサがソース(または、要求元)プロセッサによって提供された要求を処理したことに応答して検索される。場合によっては、これらのデータ要素は、入力(ゲイン値または活性化値など)に重みベクトルを乗算したことに応答して、埋め込み層演算(ニューラルネットワークの埋め込みを表す出力ベクトル(たとえば、密ベクトル)を生成するための計算、または、部分活性化値を生成するための計算など)を実行して、部分活性化値を得るように検索される。
【0065】
また、上記のように、埋め込みテーブルは、メモリ内のそれぞれの場所に個々の重み値が格納されるようにデータシャード106a~106kにわたってシャード化される重み値のテーブルであり得る。データシャード106a~106kは、埋め込みテーブルの重み値が、マルチコア処理ユニット104の特定のプロセッサ0~15に割り当てられたデータシャードに対応するように、マルチコア処理ユニット104内の特定のプロセッサ0~15にパーティション化され得る。
【0066】
後述するように(および、図5を参照して)、データ要素を検索するためにソースプロセッサからリモートプロセッサに提供される要求は、データシャードの記憶場所を識別するアドレス(たとえば、[912])を含み得る。この記憶場所は、入力(ゲイン値または活性化値など)についてのデータを格納している。要求は、入力(ホスト102において受信された入力のバッチ内の複数の入力のうちの1つなど)を表すデータ要素をリモートプロセッサに検索させるように提供される。いくつかの実現例において、要求は、リモートプロセッサに、ルックアップ演算を実行させて、入力のバッチ内の特定の入力に対応する特定のまたは固有の重みを検索するように提供される。
【0067】
図4Aの例では、ブロック402は、少なくともプロセッサ0~3が協働して、埋め込みテーブルの一部にマッピングされるデータ要素を検索する例示的な処理スキームを示す。この例では、プロセッサ0は、それぞれの要求をプロセッサ1、プロセッサ2およびプロセッサ3の各々に送信するソース(または、要求元)プロセッサであり得る。より具体的には、プロセッサ0はソースプロセッサであり、プロセッサ1、プロセッサ2およびプロセッサ3の各々は、プロセッサ0に対するリモートプロセッサである。
【0068】
場合によっては、プロセッサ0,1,2および3は、サブセット404を形成する。このサブセット404では、プロセッサ0、プロセッサ1、プロセッサ2およびプロセッサ3の各々は、サブセット404内の他のプロセッサに対するソースプロセッサであり得て、他のプロセッサは、サブセット404内のソースプロセッサから要求を受信して処理するリモートプロセッサである。場合によっては、サブセット404内のソースおよびリモートプロセッサは、依然として、マルチコア処理ユニット104内の別のプロセッサから、またはホスト102から要求を受信して処理し得て、この別のプロセッサまたはホスト102は、サブセットに含まれない一次ソースプロセッサであり得る。
【0069】
ブロック402に示される例示的なスキームは、ニューラルネットワーク層の出力(埋め込みニューラルネットワーク層の埋め込み出力またはニューラルネットワークの第1の隠れ層の出力など)を生成するためにシステム100において実行される処理技術の一部であり得る。この処理技術は、1つまたは複数のリモートプロセッサが、複数の入力および対応するルックアップ値を含むデータ要素を要求元プロセッサに提供することを含む。これらのデータ要素は、リモートプロセッサに割り当てられたデータシャードの記憶場所にわたって格納される。
【0070】
いくつかの実現例において、データ要素は、リモートプロセッサの各々がルックアップを実行して、複数の入力のうちの特定の入力に乗算するためのそれぞれの重み値を含む重みベクトルを取得したことに応答して、ソースプロセッサに提供される。たとえば、リモートプロセッサは、ソースプロセッサによって受信されたアドレスリスト内の対応するアドレスに格納された活性化値を乗算されるカーネル行列の重みを保持するメモリの一部を割り当てられ得る。入力と重み値とを乗算して、たとえば後続のニューラルネットワーク層についての部分活性化値を生成する(少なくとも図4Dを参照して後述する)。この処理技術をさらに説明するために、例示的な演算について説明する。
【0071】
入力の複数のバッチを処理するためのシステム100における例示的な演算中に、複数のアドレスの元のリストが、ホスト102によって、または別のソースプロセッサ(マルチコア処理ユニット104のプロセッサ0など)によって受信される。リスト内の複数のアドレスの中にはアドレス[912]が含まれ得る。アドレス[912]は、所与のバッチまたはサンプルについて、受信したリスト内で2回以上発生し得る。具体的には、アドレス[912]は、(i)入力特徴のセットまたは(ii)入力特徴のサンプルの中で重複している複数のアドレスのうちの1つであり得る。いくつかの実現例において、バッチまたはサンプル内でのアドレス[912]の各重複発生は、所与のデータシャードにおけ
る特定のメモリオフセットについてのものであり得る。
【0072】
アドレス[912]は、所与の語彙の中の単語(「車」という単語など)の識別子(たとえば、ワンホット識別子)である入力/特徴値を格納するメモリ内の場所であり得る。たとえば、埋め込みテーブルは、単語のワンホット識別子を埋め込みにマッピングし得る。より具体的には、アドレス[912]は、所与のサンプルの特徴値内および/または入力の所与のバッチ内で複数回発生する入力特徴のインスタンスを格納することができる。アドレス[912]の各発生は、埋め込み(たとえば、メモリ内の埋め込みテーブルに格納された訓練可能な重み値の特定の重みまたはベクトル)を有する特徴であり得る。
【0073】
システム100は、元のリストに対して重複排除を実行して、アドレス[912]の複数回の重複発生を除去して、固有のアドレスのみを含むフィルタリングされたアドレスリストを生成することができる。逆マッパ206は、メタデータタグをバッチまたはサンプル内のアドレス[912]の特定の発生に付加して、収集されたベクトル(たとえば、重みのベクトル)を元のリスト内のアドレス[912]の当該特定の発生に逆向きにマッピングすることができる。以下でより詳細に説明するように、例示的なソースプロセッサは、この逆マッピングを使用して、(i)アドレス[912]のこの特定の発生に格納された入力値と(ii)リモートプロセッサから受信された収集されたベクトルとの間で計算(乗算など)をローカルに実行することができる。
【0074】
一般に、アドレス[912]は、プロセッサ0に割り当てられた、特定の入力値を格納するデータシャードの記憶場所を識別することができる。いくつかの実現例において、プロセッサ0に割り当てられたデータシャードにおけるアドレス[912]も、入力の複数のバッチの各バッチにおいて100回繰り返し得るが、処理ユニット104の他のプロセッサに割り当てられたさまざまなデータシャードを参照する。たとえば、アドレス[912]は、マルチコア処理ユニット104内のプロセッサのうちの1つまたは複数に割り当てられるそれぞれのデータシャードの間で共通している特定のアドレスであり得る。
【0075】
例示的なソースプロセッサ(たとえば、ホスト102またはプロセッサ0)は、16回のメモリルックアップ、すなわちシステム100のマルチコア処理ユニット104内の各プロセッサについて1回のメモリルックアップを実行し得るが、削減または行列乗算に関連する計算を実行しない。図4A(および、後述する図4C)の例において、プロセッサ3は、そのそれぞれの入力値(たとえば、活性化値またはゲイン)、および、特定のバッチ内のアドレス[912]の複数回の重複発生について生成され得る固有のアドレスに対応する重み値のみをプロセッサ0に送信し得る。
【0076】
図4Bの例では、リモートプロセッサ104nは、要求元プロセッサからの命令に基づいてそれ自体のルックアップ値をローカルに削減するように構成される。いくつかの実現例において、マルチコア処理ユニット104内のプロセッサの各々は、特定のデータシャード106a~106kに格納されたデータ要素をルックアップしてローカルに削減するように割り当てられたニューラルネットワークプロセッサチップを表し得る。それぞれのリモートプロセッサは、ホスト102によって提供された命令に基づいて、またはそれぞれのリモートプロセッサを含むサブセット内の要求元/ソースプロセッサから直接受信された命令に基づいて、埋め込みテーブルのデータ要素をルックアップしてローカルに削減するように構成される。
【0077】
たとえば、プロセッサ3は、プロセッサ0、プロセッサ1およびプロセッサ2を含むプロセッサのサブセット内のそれぞれのリモートプロセッサであり得る。この例では、プロセッサ0は、プロセッサ3を含むサブセット内の要求元プロセッサであり得て、プロセッサ3は、少なくともプロセッサ0に対するリモートプロセッサである。このように、プロ
セッサ3は、データ要素(アドレス[912]に格納された入力についての固有の重み値など)をルックアップしてローカルに削減して、例示的な重みベクトル[f2]を生成するように構成される。
【0078】
図4Cの例では、ソースまたは要求元プロセッサ(たとえば、プロセッサ0)は、各リモートプロセッサにおいてローカルに削減されたデータ要素を受信して、それらのデータ値に対して1つまたは複数の演算を実行する。いくつかの実現例において、要求元プロセッサは、受信した値に対して追加の削減演算を実行するように構成される。たとえば、アドレス[912]に格納された入力および対応するルックアップデータがプロセッサ3によって検索されてローカルに削減されて、ベクトル[f2]の値を生成する場合、システム100は、入力が割り当てられる対応するサンプルまたは入力のバッチに対する入力の削減を判断するように動作可能である。
【0079】
たとえば、サブセット404の要求元プロセッサ0を使用して、システム100は、入力[912]をサンプル210-1については5回削減しなければならず、サンプル210-2については2回削減しなければならないと判断することができる。さらに、要求元プロセッサ0は、サブセット404内の各リモートプロセッサから受信された全てのデータ値に対して削減を実行するように構成される。たとえば、要求元プロセッサ0は、リモートプロセッサ1、リモートプロセッサ2およびリモートプロセッサ3からそれぞれ受信された重みベクトル[f2]、重みベクトル[g1]および重みベクトル[f1]の各々をローカルに削減するように構成される。いくつかの実現例において、要求元プロセッサ0は、それ自体のデータ要素(アドレス[1],[7],[2],[9]および[17]に格納された入力の固有の重み値など)をルックアップして、これらの特徴にわたってルックアップ値をローカルに削減して、例示的な重みベクトル[f0]および[g0]を生成するように構成される。要求元プロセッサは、それ自体のルックアップ値およびサブセット404内のリモートプロセッサの各々から受信されたデータ値にわたって削減を実行することができる。
【0080】
図4Cの例では、サブセット406およびサブセット408の各々を使用して、上記の処理スキーム402と同様または同一の処理スキームを実行し得る。たとえば、サブセット406では、プロセッサ7は、データ要素(アドレス[37]に格納された入力の固有の重み値など)をルックアップしてローカルに削減して、例示的な重みベクトル[e1]を生成するように構成される。サブセット406では、ソースまたは要求元プロセッサ(たとえば、プロセッサ4)は、リモートプロセッサ7においてローカルに削減されたベクトル[e1]についてのデータ要素を受信して、それらのデータ値に対して1つまたは複数の演算を実行する。次いで、プロセッサ4は、バッチまたはサンプル内のさまざまな入力値について検索された埋め込みにわたって実行された1つまたは複数の連結または削減演算に基づいて、例示的な重みベクトル[d0]および[e0]を生成し得る。
【0081】
いくつかの実現例では、プロセッサ1~15の各々は、そのそれぞれの入力値(たとえば、活性化値またはゲイン)、および、特定のバッチ内のアドレス[912]の複数回の重複発生について生成された固有のアドレスに対応する重み値をプロセッサ0に送信し得る。他の実現例では、プロセッサ0~15の各々は、処理のためにそれぞれのバッチを割り当てられ得て、各々は、それぞれのバッチ内のアドレス[912]の100回の繰り返しに対してそれぞれの計算を実行する。
【0082】
図4A図4Dを参照して説明した処理技術は、入力のバッチ内の1つまたは複数の入力に対応する重み値(たとえば、パラメータ)を保持するメモリの特定の部分にマッピングされるリモートプロセッサの代わりに、入力の複数のバッチの処理を所有する特定の一次プロセッサによって、プロセッサの分散システムにおける計算を実行することを可能に
することができる。これらの技術も、システム100の負荷均衡およびスケーラビリティの向上につながる。
【0083】
図4Dの例では、プロセッサ12は、システム100の例示的な分散処理システムの処理ノードを表し得る。いくつかの実現例において、プロセッサ12は、入力の複数のバッチの処理を所有する一次プロセッサであり得る。プロセッサ12は、マルチコア処理ユニット104内のそれぞれの要求元プロセッサ104nによって削減されたベクトル出力(たとえば、密ベクトル)の各々を受信するように構成される。より具体的には、プロセッサ12は、それぞれのリモートプロセッサによってローカルに削減された各出力行列のデータ要素に対応するベクトル出力(ニューラルネットワークの埋め込みを表す)を受信することができる。
【0084】
プロセッサ12は、入力(ゲイン値または活性化値など)に重みベクトルの重み値を乗算したことに応答して、部分活性化値を生成するための計算を実行して、部分活性化値を得るように構成される。たとえば、プロセッサ12は、入力と重みベクトル[a]および[b]の重み値との間の乗算に基づいて部分活性化値の1つまたは複数のセットを生成するように構成される。
【0085】
図5は、マルチコア処理ユニット104の例示的なプロセッサ104nを示し、nは、1よりも大きな整数である。たとえば、プロセッサ104nは、図2を参照して上記したプロセッサ0~15のうちのいずれか1つであり得る。一般に、プロセッサ104nは、1つまたは複数のデータシャード530に格納されたデータ(たとえば、疎要素)をフェッチまたは検索するための要求542をノードネットワーク520から受信するように構成される。
【0086】
たとえば、ソースプロセッサ502は、疎要素を使用して密行列が生成されるように、ノードネットワーク520において要求542をプロセッサ104nに送信する。ノードネットワーク520は、二次元メッシュネットワークであり得る。いくつかの実現例において、データをフェッチするための要求542は、フェッチされた疎要素を密行列に変換するための命令を含む。上記のように、フェッチされた疎要素を密行列に変換するためのこの要求は、埋め込みを学習するための埋め込み層の訓練中に実行され得る。たとえば、フェッチされた要素は、少なくとも埋め込みベクトルに対する入力特徴のマッピングに基づいて埋め込みベクトルに変換される埋め込みテーブルの重み値であり得る。ソースプロセッサ502は、要求542をプロセッサ104nにブロードキャストし得る。ブロードキャストされた要求542のルーティングは、ホスト102が要求を1つまたは複数のプロセッサ104nに提供することを参照する図2の説明と同様であり得る。いくつかの実現例において、ソースプロセッサ502は、マルチコア処理ユニット104に含まれるホスト102または別のプロセッサ104nであり得る。
【0087】
一般に、プロセッサ104nは、1つまたは複数のデータシャード530に格納されたデータ要素をフェッチするための要求542を受信し、プロセッサ104nが要求542によって示されるデータを格納するメモリ内の場所のアドレスにアクセスするように割り当てられるか否かを判断するように構成される。いくつかの実現例において、プロセッサ104nは、ルックアップテーブルを使用することによって、プロセッサ104nが要求542によって示されるデータ要素にアクセスするように割り当てられるか否かを判断し得る。たとえば、特定の要求されたデータ要素のアドレス(たとえば、ルックアップテーブルNo.5のメモリオフセット1におけるアドレス[99])がルックアップテーブルに含まれる場合、プロセッサ104nは、データ検索ユニットに特定の要求されたデータ要素を検索させるための信号をプロセッサの例示的なデータ検索ユニットに送信し得る。いくつかの実現例において、プロセッサ104nは、受信した要求542をノードネット
ワーク520上の別のプロセッサ104nにブロードキャストするように構成され得る。
【0088】
プロセッサ104nは、要求542を処理したことに応答して、プロセッサ104nに割り当てられた特定のデータシャード530から1つまたは複数の要求されたデータ要素を検索するように構成される。いくつかの実現例において、プロセッサ104nは、ベクトルプロセッサ、ベクトル処理ユニット(VPU)、アレイ処理ユニット、または、ベクトル要素のアレイおよび行列を処理するための任意の好適なデータコンピューティングリソースである。いくつかの実現例において、マルチコア処理ユニット104に含まれるプロセッサ104nの各々は、データ要素を格納するのに使用されるアドレスおよび対応する記憶場所に基づいて、データシャード530に格納された、たとえば埋め込みテーブルの特定のデータ要素に割り当てられ得る。
【0089】
いくつかの実現例において、ソースプロセッサ502は、プロセッサ104nのうちの1つまたは複数を使用して検索および処理される入力の複数のバッチに対応するデータ要素について1つまたは複数の要求542を生成し得る。場合によっては、入力の各バッチは、要求されたデータ要素のサブセットについてそれぞれの要求542に関連付けられ得る。各プロセッサ104nは、その割り当てられたデータシャード530から、割り当てられたデータ要素を独立して検索するように構成される。いくつかの実現例において、プロセッサ104nは、以下でより詳細に説明するように、さらなる処理のために、検索されたデータがプロセッサの1つまたは複数のユニットに転送されるようにする。
【0090】
図5に示されるように、プロセッサ104nは、スパース削減ユニット506と、連結ユニット508と、圧縮/復元ユニット510とを含む。プロセッサ104nは、検索されたデータ要素をスパース削減ユニット506に転送することができる。スパース削減ユニット506は、検索されたデータ要素の次元を削減するように構成される。たとえば、プロセッサ104nは、100×1の次元を有するベクトル要素を生成し得る。スパース削減ユニット506は、100×kの次元を有するフェッチされたデータ要素を受信して、このフェッチされたデータ要素346の次元を論理演算、算術演算またはそれら両方の組み合わせによって100×1に削減することによってスパース削減要素548を生成するように動作可能である。スパース削減ユニット506は、スパース削減要素548を連結ユニット508に出力するように構成される。
【0091】
連結ユニット508は、スパース削減要素548を並べ替えて連結して、連結された要素550を生成するように構成される。たとえば、プロセッサ104nは、ニューラルネットワーク層への入力と重み値の対応するセットとを含むデータ要素(たとえば、データベーステーブルNo.1の疎要素No.1~No.100)にアクセスするように構成され得る。プロセッサ104nは、検索された疎要素No.5(たとえば、第2の重み値)を返す前に、検索された疎要素No.10(たとえば、第1の重み値)をスパース削減ユニット506に返すように動作可能である。連結ユニット508は、後に受信した疎要素No.5を、以前に受信した疎要素No.10の前に順序付けるように並べ替えて、疎要素No.1~No.100を連結された要素550として連結するように構成される。
【0092】
圧縮/復元ユニット510は、連結された要素550を圧縮して、ノードネットワーク520のための密行列552を生成するように構成される。たとえば、圧縮/復元ユニット510は、連結された要素550の中のゼロ値を圧縮して、ノードネットワーク520の帯域幅を向上させるように動作可能である。場合によっては、入力と重みとの間の算術演算(ゼロ値を有する入力と重み値との間の乗算であって、乗算の結果として複数のゼロを有する連結された要素550の行列を生じさせるものなど)に応答して複数のゼロ値が生成され得る。圧縮/復元ユニット510は、この行列を圧縮して、ノードネットワーク520のための例示的な密行列552を生成することができる。
【0093】
いくつかの実現例において、圧縮/復元ユニット510は、受信した密行列を復元し得る。たとえば、第1のプロセッサ104n(たとえば、図2におけるプロセッサ9)は、ノードネットワーク520を介して、隣接する第2のプロセッサ104n(たとえば、図2におけるプロセッサ10)から密行列を受信し得る。隣接する第2のプロセッサ104nは、受信した密行列を復元し得て、この復元された密行列と連結された要素550とを連結して、更新された連結された要素を形成し得て、この更新された連結された要素は、圧縮された後、ノードネットワーク520に出力され得る。
【0094】
図6は、ニューラルネットワーク層の出力を生成するための例示的なプロセス600を示すフロー図である。プロセス600は、上記のシステム100を使用して実現または実行することができる。プロセス600の説明は、システム100の上記のコンピューティングリソースを参照することができる。いくつかの実現例において、プロセス600のステップまたはアクションは、本文献に記載されているデバイスおよびリソースの1つまたは複数のプロセッサによって実行可能なプログラムされたファームウェアまたはソフトウェア命令によって可能にされる。
【0095】
ここでプロセス600を参照して、システム100のホストは、ニューラルネットワーク層への入力のバッチを受信する(602)。たとえば、ホスト102は、マルチコア処理ユニット104による処理のために入力の1つまたは複数のバッチを受信することができる。入力の1つまたは複数のバッチ内の各入力は、アドレスによって識別される記憶場所に格納されている。入力の少なくとも1つのバッチについて、システム100の回路は、入力のバッチ内の各入力について、アドレスのリスト内の1つまたは複数の重複アドレスを識別する(604)。たとえば、散布回路202は、アドレスのリストをスキャンして、入力のバッチ内の各入力について、アドレスのリスト内の1つまたは複数の重複アドレスを識別するように動作可能である。
【0096】
識別された各重複アドレスについて、回路は、アドレスのリスト内の重複アドレスを識別する固有の識別子を生成する(606)。たとえば、散布回路202は、各重複アドレスについてそれぞれの固有の識別子を生成して、特定のアドレスをアドレスのリスト内で重複しているとして識別するように動作可能である。アドレスのリストは、入力特徴の複数のセットを含む入力特徴のサンプルを形成する入力のバッチについてのものであり得る。システム100の回路は、入力特徴のサンプル内の入力特徴のそれぞれのセットにわたって各重複アドレスについて固有の識別子を生成するように動作可能である。
【0097】
システム100は、回路によって生成された1つまたは複数の固有の識別子に基づいて、入力のバッチについて、フィルタリングされたアドレスリストを生成する(608)。たとえば、ホスト102は、散布回路202と相互作用して各重複アドレスについて対応する固有の識別子を受信し、少なくとも散布回路202によって生成された1つまたは複数の固有の識別子に基づいて、入力のバッチについて、フィルタリングされたアドレスリストを生成する。
【0098】
システム100は、入力のバッチについて、フィルタリングされたアドレスリストに基づいて固有の識別子に対応するアドレスによって識別される記憶場所から第1の入力を取得する(610)。たとえば、フィルタリングされたアドレスリストに基づいて、システム100は、対応するデータシャードに割り当てられた特定のプロセッサを使用して、固有の識別子に対応するアドレスによって識別されるデータシャードの記憶場所から第1の入力を取得することができる。
【0099】
第1の入力を取得するために、システム100、要求元プロセッサは、リモートプロセ
ッサによる処理のために、第1の入力を取得するための要求をリモートプロセッサに提供することができる。この要求は、固有の識別子に対応する第1の入力についてのアドレスを含み得る。場合によっては、この要求とアドレスとは、別々に送信されてもよいが、同時にまたは並行して送信されてもよい。場合によっては、この要求とアドレスとは、シーケンシャルに、すなわち一方が他方に先行するように送信されてもよい。
【0100】
要求元プロセッサは、リモートプロセッサが要求を処理したことに応答して、リモートプロセッサに割り当てられたデータシャードの記憶場所に格納された第1の入力をリモートプロセッサから受信する。いくつかの実現例において、以下でより詳細に説明するように、要求元プロセッサは、1つまたは複数の削減演算を実行して、データシャードから取得された第1の入力からニューラルネットワーク層の出力を生成するように動作可能である。
【0101】
システム100は、マルチコア処理ユニット104内の複数のプロセッサの各プロセッサ間でのフィルタリングされたリスト内のアドレスのパーティション化を判断することができる。たとえば、システム100は、アドレス[26]に関連付けられたデータ要素が、プロセッサ13に割り当てられたデータシャードにパーティション化され、アドレス[96]および[99]に関連付けられたデータ要素が、プロセッサ15に割り当てられたデータシャードにパーティション化されると判断する、または、アドレス[912]に関連付けられたデータ要素が、プロセッサ3に割り当てられたデータシャードにパーティション化されると判断することができる。
【0102】
このように、アドレスの各パーティションについて、システムは、それぞれのプロセッサに割り当てられたデータシャードから入力および他の対応するデータ要素(たとえば、重み値)を検索するように割り当てられたそれぞれのプロセッサを使用して、アドレスのパーティション内のアドレスによって識別される記憶場所から第1の入力を取得することができる。たとえば、アドレスの各パーティションは、多次元疎テンソルのベクトル要素に対応する活性化値またはゲイン値のデータシャードに割り当てられることができる。いくつかの実現例において、活性化値またはゲイン値の各データシャードは、対応する重みベクトルを乗算してニューラルネットワーク計算を実行するために特定のプロセッサに割り当てられる。
【0103】
システム100は、取得された第1の入力からニューラルネットワーク層の出力(たとえば、埋め込み出力)を生成する(612)。いくつかの実現例において、ニューラルネットワーク層は、ニューラルネットワークの埋め込み層であり、埋め込み出力は、埋め込み特徴ベクトルを含む。散布回路202は、埋め込み層への入力のバッチ内の特定の入力についての重複アドレスに対する固有の識別子の逆マッピングを決定するように構成される。いくつかの実現例において、重複アドレスに対する固有の識別子の逆マッピングは、入力特徴の複数のセットにわたって特定の入力について決定される。
【0104】
システム100は、特定の入力についての重複アドレスに対する固有の識別子の逆マッピングに基づいて、1つまたは複数のベクトル(たとえば、埋め込み特徴ベクトル)を埋め込み層の出力として生成するように動作可能である。たとえば、逆マッピングに基づいてニューラルネットワーク層の出力(たとえば、埋め込み出力)を生成することは、重複アドレスを含むアドレスのリストを解析して、重複アドレスについて生成された、固有の識別子に対応する埋め込み特徴ベクトルをニューラルネットワーク層への入力のバッチ内の特定の入力に逆向きにマッピングすることを含み得る。
【0105】
いくつかの例において、埋め込み層の出力を生成することは、埋め込み値の疎テーブルに関連付けられたデータを処理したことに応答して、1つまたは複数の密行列を生成する
ことを含み得る。テーブルに関連付けられたデータは、行列の形式で表すことができる。システム100のプロセッサおよびコンピューティングリソースを使用して、行列乗算を含む線形代数アルゴリズムに基づいてデータを操作することができる。行列は、一次元ベクトルであってもよく、または多次元行列であってもよい。行列は、データ構造(データベーステーブルまたは変数など)によって表されてもよい。埋め込みテーブルは、たとえば行および列次元でシャード化されて、マルチコア処理ユニット104を形成する複数のプロセッサの中の特定のプロセッサにマッピングされたメモリの一部に格納され得る。
【0106】
主題の実施形態および本明細書に記載されている機能動作は、デジタル電子回路で実現されてもよく、有形に具体化されたコンピュータソフトウェアもしくはファームウェアで実現されてもよく、コンピュータハードウェア(本明細書に開示されている構造およびそれらの構造的等価物を含む)で実現されてもよく、またはそれらのうちの1つもしくは複数の組み合わせで実現されてもよい。本明細書に記載されている主題の実施形態は、1つまたは複数のコンピュータプログラムとして、すなわちデータ処理装置による実行またはデータ処理装置の動作の制御のために有形の非一時的なプログラムキャリア上に符号化されたコンピュータプログラム命令の1つまたは複数のモジュールとして実現することができる。
【0107】
代替的にまたは加えて、プログラム命令は、情報を符号化して好適な受信機装置に送信してデータ処理装置によって実行するように生成された、人為的に生成された伝播信号(たとえば、マシンによって生成された電気信号、光信号または電磁信号)上に符号化され得る。コンピュータ記憶媒体は、機械読取可能記憶装置、機械読取可能記憶基板、ランダムもしくはシリアルアクセスメモリデバイス、またはそれらのうちの1つもしくは複数の組み合わせであり得る。
【0108】
「コンピューティングシステム」という用語は、データを処理するための全ての種類の装置、デバイスおよびマシンを包含し、一例として、プログラマブルプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む。装置は、特別目的論理回路(たとえば、FPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路))を含み得る。また、装置は、ハードウェアに加えて、対象のコンピュータプログラムのための実行環境を作成するコード(たとえば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらのうちの1つもしくは複数の組み合わせを構成するコード)も含み得る。
【0109】
コンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、モジュール、ソフトウェアモジュール、スクリプト、もしくはコードと称されてもよく、またはそのようなものとして説明されてもよい)は、任意の形式のプログラミング言語(コンパイル型もしくはインタプリタ型言語、または宣言型もしくは手続き型言語を含む)で書くことができ、任意の形式で(スタンドアロンのプログラムとして、または、コンピューティング環境での使用に適したモジュール、コンポーネント、サブルーチンもしくは他のユニットとして、など)デプロイすることができる。
【0110】
コンピュータプログラムは、ファイルシステムにおけるファイルに対応し得るが、必ずしもそうでなくてもよい。プログラムは、他のプログラムもしくはデータを保持するファイルの一部(たとえば、マークアップ言語ドキュメントに格納された1つもしくは複数のスクリプト)に格納されてもよく、対象のプログラムに専用の単一のファイルに格納されてもよく、または複数の連携したファイル(たとえば、1つもしくは複数のモジュール、サブプログラム、もしくはコードの一部を格納するファイル)に格納されてもよい。コンピュータプログラムは、1つのコンピュータで実行されるようにデプロイされてもよく、または、一箇所に位置しているかもしくは複数箇所に分散されて通信ネットワークによっ
て相互接続されている複数のコンピュータで実行されるようにデプロイされてもよい。
【0111】
本明細書に記載されているプロセスおよび論理フローは、入力データに対して動作して出力を生成することによって機能を実行するように1つまたは複数のコンピュータプログラムを実行する1つまたは複数のプログラマブルコンピュータによって実行することができる。これらのプロセスおよび論理フローも、特別目的論理回路(たとえば、FPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)またはGPGPU(汎用グラフィックス処理ユニット))によって実行することができ、装置も、特別目的論理回路として実現することができる。
【0112】
コンピュータプログラムの実行に適したコンピュータは、一例として、汎用マイクロプロセッサもしくは特別目的マイクロプロセッサもしくはそれら両方、またはその他の種類の中央処理装置を含み、それらに基づき得る。一般に、中央処理装置は、リードオンリメモリまたはランダムアクセスメモリまたはそれら両方から命令およびデータを受信する。コンピュータのいくつかの要素は、命令を実施または実行するための中央処理装置と、命令およびデータを格納するための1つまたは複数のメモリデバイスとである。一般に、コンピュータは、データを格納するための1つもしくは複数のマスストレージデバイス(たとえば、磁気ディスク、光磁気ディスクもしくは光ディスク)も含み、または、これらの1つもしくは複数のマスストレージデバイスとの間でデータを受信したり、送信したり、送受信したりするように作動的に結合されている。しかし、コンピュータは、このようなデバイスを有していなくてもよい。さらに、コンピュータは、別のデバイス(たとえば、いくつか例を挙げると、携帯電話、パーソナルデジタルアシスタント(PDA)、モバイルオーディオもしくはビデオプレーヤ、ゲーム機、グローバルポジショニングシステム(GPS)受信機、または携帯型ストレージデバイス(たとえば、ユニバーサルシリアルバス(USB)フラッシュドライブ))に組み込むことができる。
【0113】
コンピュータプログラム命令およびデータを格納するのに適したコンピュータ読取可能媒体は、全ての形態の不揮発性メモリ、媒体およびメモリデバイス(一例として、半導体メモリデバイス(たとえば、EPROM、EEPROMおよびフラッシュメモリデバイス)、磁気ディスク(たとえば、内部ハードディスクまたはリムーバブルディスク)、光磁気ディスク、ならびにCD ROMおよびDVD-ROMディスクを含む)を含む。プロセッサおよびメモリは、特別目的論理回路によって補完されることができ、または特別目的論理回路に組み入れられることができる。
【0114】
ユーザとのインタラクションを提供するために、本明細書に記載されている主題の実施形態は、ユーザに情報を表示するためのディスプレイデバイス(たとえば、LCD(液晶ディスプレイ)モニタ)と、ユーザがコンピュータに入力を提供することができるキーボードおよびポインティングデバイス(たとえば、マウスまたはトラックボール)とを有するコンピュータ上で実現可能である。ユーザとのインタラクションを提供するために他の種類のデバイスも使用することができる。たとえば、ユーザに提供されるフィードバックは、任意の形式の感覚フィードバック(たとえば、視覚フィードバック、聴覚フィードバックまたは触覚フィードバック)であり得て、ユーザからの入力は、任意の形式(音響入力、音声入力または触覚入力を含む)で受信することができる。また、コンピュータは、ユーザによって使用されるデバイスとの間でドキュメントを送受信することによって(たとえば、ユーザのクライアントデバイス上のウェブブラウザから要求を受信したことに応答してウェブブラウザにウェブページを送信することによって)ユーザと相互作用することができる。
【0115】
本明細書に記載されている主題の実施形態は、たとえばデータサーバとしてバックエンドコンポーネントを含むコンピューティングシステムで実現されてもよく、または、ミド
ルウェアコンポーネント(たとえば、アプリケーションサーバ)を含むコンピューティングシステムで実現されてもよく、または、フロントエンドコンポーネント(たとえば、ユーザが本明細書に記載されている主題の実現例と相互作用することができるグラフィカルユーザインターフェイスもしくはウェブブラウザを有するクライアントコンピュータ)を含むコンピューティングシステムで実現されてもよく、または、1つもしくは複数のこのようなバックエンドコンポーネント、ミドルウェアコンポーネントもしくはフロントエンドコンポーネントの任意の組み合わせを含むコンピューティングシステムで実現されてもよい。システムのこれらのコンポーネントは、デジタルデータ通信の任意の形式または媒体(たとえば、通信ネットワーク)によって相互接続されることができる。通信ネットワークの例としては、ローカルエリアネットワーク(「LAN」)およびワイドエリアネットワーク(「WAN」)(たとえば、インターネット)が挙げられる。
【0116】
コンピューティングシステムは、クライアントとサーバとを含み得る。クライアントおよびサーバは、一般に、互いに遠く離れており、一般に通信ネットワークを介して相互作用する。クライアントおよびサーバの関係は、それぞれのコンピュータで実行される、互いにクライアント-サーバ関係を有するコンピュータプログラムによって生じる。
【0117】
本明細書は多くの具体的な実現例の詳細を含んでいるが、これらは、発明または特許請求の範囲の範囲を限定するものとして解釈されるべきではなく、特定の発明の特定の実施形態に特有の特徴を説明するものとして解釈されるべきである。別々の実施形態の文脈で本明細書に記載されている特定の特徴は、単一の実施形態において組み合わせて実現することも可能である。逆に、単一の実施形態の文脈で記載されているさまざまな特徴は、複数の実施形態において別々にまたは任意の好適な部分的組み合わせで実現することも可能である。さらに、特徴は、特定の組み合わせで動作するものとして上記され、最初にそのように記載されているかもしれないが、記載されている組み合わせの中の1つまたは複数の特徴は、場合によってはこの組み合わせから除外されてもよく、記載されている組み合わせは、部分的組み合わせまたは部分的組み合わせの変形例を対象としてもよい。
【0118】
同様に、動作は特定の順序で図面に示されているが、これは、望ましい結果を達成するために、示されている特定の順序でまたはシーケンシャルな順序でこのような動作を実行しなければならないように理解されるべきではなく、または全ての示されている動作を実行しなければならないように理解されるべきではない。特定の状況では、マルチタスキングおよび並列処理が有利な場合がある。さらに、上記の実施形態におけるさまざまなシステムモジュールおよびコンポーネントの分離は、全ての実施形態においてこのような分離を必要とするように理解されるべきではなく、記載されているプログラムコンポーネントおよびシステムは、一般に、単一のソフトウェア製品に一体化したり複数のソフトウェア製品にパッケージングしたりすることができる、ということが理解されるべきである。
【0119】
主題の特定の実施形態について説明してきた。他の実施形態は、以下の特許請求の範囲の範囲内である。たとえば、特許請求の範囲に記載されている動作は、異なる順序で実行されても所望の結果を達成することができる。一例として、添付の図面に示されているプロセスは、所望の結果を達成するために、示されている特定の順序またはシーケンシャルな順序を必ずしも必要としない。特定の実現例において、マルチタスキングおよび並列処理が有利な場合がある。
図1
図2
図3
図4A
図4B
図4C
図4D
図5
図6
【手続補正書】
【提出日】2023-09-29
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
方法であって、
第1のプロセッサからの要求において、メモリ内の場所のアドレスのセットを識別するステップと、
前記第1のプロセッサが、前記アドレスのセットに対して重複排除演算を実行するステップとを備え、前記重複排除演算を実行するステップは、
前記アドレスのセット内の重複アドレスを識別することと、
前記重複アドレスにマッピングされる固有の識別子を生成することと、
前記固有の識別子に基づいて前記セットから前記重複アドレスをフィルタリングすることと、によってなされ、前記方法はさらに、
第2のプロセッサが、前記固有の識別子に対応する前記メモリ内の場所からデータを検索するステップと、
前記第2のプロセッサを使用して前記データを処理することに応答して出力を生成するステップとを備える、方法。
【請求項2】
前記データは、i)入力特徴のセットと、ii)ニューラルネットワーク層の訓練可能な重みを表す値のベクトルとを含み、
前記固有の識別子は、入力特徴の特徴値を前記セットに格納する記憶場所の重複アドレスのためのものである、請求項1に記載の方法。
【請求項3】
前記アドレスのセット内の重複アドレスを識別することは、
前記入力特徴のセットにおいて、同一の特徴値を有する2つまたはそれ以上の入力特徴を識別することを含む、請求項2に記載の方法。
【請求項4】
前記値のベクトルは、前記メモリの複数のデータシャードにわたって格納される埋め込みテーブルの埋め込みである、請求項2に記載の方法。
【請求項5】
前記ニューラルネットワーク層は、人工ニューラルネットワークの埋め込み層であり、前記第2のプロセッサを使用して前記データを処理することは、
前記データの前記特徴値を前記埋め込み層への入力として提供することと、
前記ニューラルネットワークの前記埋め込み層において前記データを処理することとを含む、請求項4に記載の方法。
【請求項6】
前記出力を生成するステップは、1つまたは複数の埋め込み特徴ベクトルを前記埋め込み層の出力として生成するステップを含む、請求項5に記載の方法。
【請求項7】
前記固有の識別子を生成することは、
前記重複アドレスのうちの1つのメモリオフセットに基づいてハッシュIDを生成することと、
前記ハッシュIDに基づいて前記固有の識別子を生成することとを含む、請求項1~6のいずれか1項に記載の方法。
【請求項8】
前記方法は、前記第1のプロセッサと前記第2のプロセッサとを含む分散されたプロセッサのセットを含む集積回路を使用して実行される、請求項1~7のいずれか1項に記載の方法。
【請求項9】
前記重複排除演算を実行するステップは、
前記第1のプロセッサと前記第2のプロセッサとの間の負荷不均衡を緩和するために前記アドレスのセット内のアドレスの重複発生を除去するステップを含む、請求項8に記載の方法。
【請求項10】
前記重複排除演算を実行するステップは、
少なくとも前記分散されたプロセッサのセットの前記第2のプロセッサの全体的な計算負荷を減少させるために前記アドレスのセット内のアドレスの重複発生を除去するステップを含む、請求項8に記載の方法。
【請求項11】
第1のプロセッサと第2のプロセッサに請求項1~10のいずれか1項に記載の方法を実行させる、プログラム。
【請求項12】
システムであって、
複数のプロセッサと、
動作を実行させるように前記複数のプロセッサのうちの1つ以上によって実行可能な命令を格納するための非一時的な機械読取可能媒体とを備え、前記動作は、
第1のプロセッサからの要求において、メモリ内の場所のアドレスのセットを識別することと、
前記第1のプロセッサが、前記アドレスのセットに対して重複排除演算を実行することとを含み、前記重複排除演算を実行することは、
前記アドレスのセット内の重複アドレスを識別することと、
前記重複アドレスにマッピングされる固有の識別子を生成することと、
前記固有の識別子に基づいて前記セットから前記重複アドレスをフィルタリングすることと、によってなされ、前記動作はさらに、
第2のプロセッサが、前記重複アドレスが前記セットからフィルタリングされた後に、前記固有の識別子を使用して、前記アドレスのセット内のアドレスによって識別される記憶場所からデータを検索することと、
前記第2のプロセッサを使用して前記データを処理することに応答して出力を生成することとを含む、システム。
【外国語明細書】