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

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

▶ アプライド マテリアルズ インコーポレイテッドの特許一覧

特表2024-522107ニューラルネットワーク中の動的活性化スパーシティ
<>
  • 特表-ニューラルネットワーク中の動的活性化スパーシティ 図1
  • 特表-ニューラルネットワーク中の動的活性化スパーシティ 図2
  • 特表-ニューラルネットワーク中の動的活性化スパーシティ 図3
  • 特表-ニューラルネットワーク中の動的活性化スパーシティ 図4
  • 特表-ニューラルネットワーク中の動的活性化スパーシティ 図5
  • 特表-ニューラルネットワーク中の動的活性化スパーシティ 図6
  • 特表-ニューラルネットワーク中の動的活性化スパーシティ 図7
  • 特表-ニューラルネットワーク中の動的活性化スパーシティ 図8
  • 特表-ニューラルネットワーク中の動的活性化スパーシティ 図9
  • 特表-ニューラルネットワーク中の動的活性化スパーシティ 図10
  • 特表-ニューラルネットワーク中の動的活性化スパーシティ 図11
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-06-11
(54)【発明の名称】ニューラルネットワーク中の動的活性化スパーシティ
(51)【国際特許分類】
   G06N 3/0495 20230101AFI20240604BHJP
【FI】
G06N3/0495
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2023573163
(86)(22)【出願日】2022-05-24
(85)【翻訳文提出日】2024-01-22
(86)【国際出願番号】 US2022030790
(87)【国際公開番号】W WO2022251265
(87)【国際公開日】2022-12-01
(31)【優先権主張番号】17/330,096
(32)【優先日】2021-05-25
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.iOS
2.MIDI
(71)【出願人】
【識別番号】390040660
【氏名又は名称】アプライド マテリアルズ インコーポレイテッド
【氏名又は名称原語表記】APPLIED MATERIALS,INCORPORATED
【住所又は居所原語表記】3050 Bowers Avenue Santa Clara CA 95054 U.S.A.
(74)【代理人】
【識別番号】110002077
【氏名又は名称】園田・小林弁理士法人
(72)【発明者】
【氏名】スリ, タミッシュ
(72)【発明者】
【氏名】ジュアング, ボル-チャウ
(72)【発明者】
【氏名】シー, ナサニエル
(72)【発明者】
【氏名】シャイフ, ビラル シャーフィ
(72)【発明者】
【氏名】ザーマン, ナヴィード
(72)【発明者】
【氏名】シャック, マイロン
(72)【発明者】
【氏名】ダンガヤッチ, サチン
(72)【発明者】
【氏名】ハンマンテ, ウダイクマール ディリプラオ
(57)【要約】
ニューラルネットワーク層の出力についてスパーシティを誘起する方法が、ニューラルネットワークの層から出力を受信することと、出力を複数の区分に区分することと、0値を有するものとして扱われ得る、複数の区分中の第1の区分を識別することと、複数の区分中の残りの第2の区分の間で第1の区分のロケーションを識別する符号化を生成することと、符号化および第2の区分をニューラルネットワーク中の後続の層に送ることとを含み得る。
【選択図】図7
【特許請求の範囲】
【請求項1】
ニューラルネットワーク層の出力についてスパーシティを誘起する方法であって、前記方法が、
ニューラルネットワークの層から出力を受信することと、
前記出力を複数の区分に区分することと、
0値を有するものとして扱われ得る、前記複数の区分中の第1の区分を識別することと、
前記複数の区分中の残りの第2の区分の間で前記第1の区分の位置を識別するエンコーディングを生成することと、
前記エンコーディングおよび前記第2の区分を前記ニューラルネットワーク中の後続の層に送ることと
を含む、方法。
【請求項2】
前記ニューラルネットワーク中の前記後続の層において前記第2の区分を受信することと、
前記エンコーディングに基づいて、前記第2の区分を配置することと
をさらに含む、請求項1に記載の方法。
【請求項3】
前記後続の層が乗算演算を実施し、それにより、前記第1の区分が0乗算演算として廃棄され得る、請求項2に記載の方法。
【請求項4】
前記出力が前記層からの出力の3次元配列を含み、出力の前記配列が前記ニューラルネットワーク中の異なるチャネルについての次元を含む、請求項1に記載の方法。
【請求項5】
前記複数の区分が出力の前記配列の3次元区分を含む、請求項4に記載の方法。
【請求項6】
前記第1の区分が前記複数の区分中で連続しない、請求項1に記載の方法。
【請求項7】
0値を有するものとして扱われ得る、前記複数の区分中の前記第1の区分を識別することが、
設計環境から基準を受信することと、
前記基準を前記複数の区分の各々に適用することと
を含む、請求項1に記載の方法。
【請求項8】
前記基準は、区分中の値についての合計を計算し、前記合計がしきい値よりも小さい場合、前記区分中の前記値を0に設定する相対マグニチュード関数を含む、請求項7に記載の方法。
【請求項9】
前記基準が、ランタイム関数として前記設計環境から送られる、請求項7に記載の方法。
【請求項10】
前記基準が、前記ニューラルネットワークを表すグラフの一部としてエンコードされる、請求項7に記載の方法。
【請求項11】
ニューラルネットワークの層を実装し、前記層からの出力を生成するように構成された計算ノードと、
処理を実行するように構成された区分回路であって、前記処理が、
ニューラルネットワークの前記層から出力を受信することと、
前記出力を複数の区分に区分することと、
0値を有するものとして扱われ得る、前記複数の区分中の第1の区分を識別することと、
前記複数の区分中の残りの第2の区分の間で前記第1の区分の位置を識別するエンコーディングを生成することと
を含む、区分回路と、
前記ニューラルネットワーク中の後続の層のために前記エンコーディングおよび前記第2の区分を記憶するように構成されたメモリと
を備える、
ニューラルネットワークアクセラレータ。
【請求項12】
複数のチップレットをさらに備え、前記算出ノードが前記複数のチップレット中の第1のチップレット上で実装され、前記後続の層が、前記複数のチップレット中の第2のチップレット上で実装される、請求項11に記載のニューラルネットワークアクセラレータ。
【請求項13】
処理を実行するように構成されたシーケンサ回路をさらに備え、前記処理が、
前記ニューラルネットワーク中の前記後続の層において前記第2の区分を受信することと、
前記エンコーディングに基づいて、前記第2の区分を配置することと
を含む、請求項11に記載のニューラルネットワークアクセラレータ。
【請求項14】
前記ニューラルネットワークの前記層が、畳み込みコアを実行することを含む、請求項11に記載のニューラルネットワークアクセラレータ。
【請求項15】
前記メモリが、オンチップスタティックランダムアクセスメモリ(SRAM)を備える、請求項11に記載のニューラルネットワークアクセラレータ。
【請求項16】
前記区分回路が、前記ニューラルネットワークをトレーニングするときに使用されない、請求項11に記載のニューラルネットワークアクセラレータ。
【請求項17】
前記複数の区分中の区分の数が、前記ニューラルネットワークのトレーニング中に決定される、請求項11に記載のニューラルネットワークアクセラレータ。
【請求項18】
0値を有するものとして扱われ得る、前記複数の区分中の前記第1の区分を識別することが、
設計環境から基準を受信することと、
前記基準を前記複数の区分の各々に適用することと
を含む、請求項11に記載のニューラルネットワークアクセラレータ。
【請求項19】
前記出力が前記層からの出力の3次元配列を含み、出力の前記配列が前記ニューラルネットワーク中の異なるチャネルについての次元を含み、前記複数の区分が出力の前記配列の3次元区分を含む、請求項11に記載のニューラルネットワークアクセラレータ。
【請求項20】
ニューラルネットワーク層の出力についてスパーシティを誘起する方法であって、前記方法が、
ニューラルネットワークの層から出力を受信することと、
前記出力を複数の区分に区分することであって、前記複数の区分の各々が複数の前記出力を含む、前記出力を複数の区分に区分することと、
第1の区分中の値が0に設定され得ることを示す基準を満たす、前記複数の区分中の前記第1の区分を識別することと、
前記複数の区分中の残りの第2の区分の間で前記第1の区分の位置を識別するエンコーディングを生成することと、
前記エンコーディングおよび前記第2の区分を前記ニューラルネットワーク中の後続の層に送り、前記第1の区分を廃棄することと、
前記ニューラルネットワーク中の前記後続の層において前記第2の区分を受信することと、
前記エンコーディングに基づいて、0値とともに前記第2の区分を配置することと、
前記ニューラルネットワーク中の前記後続の層を実行することと
を含む、方法。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本出願は、その内容全体がすべての目的のために参照により本明細書に組み込まれる、2021年5月25日に出願され、「DYNAMIC ACTIVATION SPARSITY IN NEURAL NETWORKS」と題する米国非仮出願第17/330,096号の利益および優先権を主張する。
【0002】
本開示は、一般に、メモリボトルネックを低減するために、ニューラルネットワーク算出中にスパーシティを誘起することについて説明する。詳細には、本開示は、層出力を区分し、区分ごとにスパーシティを誘起するための方法およびシステムについて説明する。
【背景技術】
【0003】
ニューラルネットワークは、一般に、入力データのセット中の基礎をなす関係を特定する一連のシーケンシャルな処理として定義され得る。ニューラルネットワークは、人間の心(mind)が働く様をモデル化するやり方で、情報を処理する。したがって、ニューラルネットワーク内の中間段階は、ニューロンと呼ばれる計算要素を使用し得る。ニューロン間の接続は、生体システム中のシナプスのように働いて、ニューロン層間の中間計算を伝達する。各ニューロンの出力は、異なるシナプス入力を組み合わせる異なるタイプの関数を使用して算出され得る。シナプスは、各ニューロンの入力において重み付けされ得、これらの重みは、トレーニングプロセスを使用して設定され得る。ニューラルネットワークは、ネットワーク自体のデータ構造内に記憶された入力と出力との間の確率重み付けされた関連付けを形成するために、知られている結果とともに例示的なデータを処理することによってトレーニングされる。トレーニングは、トレーニングデータを使用する教師あり学習環境において行われることがあり、またはトレーニングは、使用中に受信された入力データを使用する教師なしでも行い得る。
【0004】
コンピュータハードウェアは、ニューラルネットワーク関数を通して入力データの処理を最適化するように設計されている。たとえば、ニューラルネットワークコンパイラが、ニューラルネットワークのコードベースの定義を受信し、ハードウェアニューラルネットワークアクセラレータ中の1つまたは複数の計算ノードのための命令を生成し得る。アクセラレータ上の計算ノードは、ニューラルネットワーク演算を効率的に並列に処理する個々のチップレットまたは他の計算ブロックを含み得る。ニューラルネットワークの各層からの出力は、中間結果が受信された後に、一時バッファまたはオンチップメモリに記憶され、次いで、ニューラルネットワーク中の後続の層に渡され得る。しかしながら、現代のニューラルネットワークの計算需要および入力サイズが増加し続けるにつれて、層間のメモリストレージが急速に深刻なボトルネックになりつつあり、並列処理の需要は、管理することが困難になりつつある。したがって、この技術において、改善が必要とされる。
【発明の概要】
【0005】
いくつかの実施形態では、ニューラルネットワーク層の出力についてスパーシティを誘起する方法が、ニューラルネットワークの層から出力を受信することと、出力を複数の区分に区分することと、0値を有するものとして扱われ得る、複数の区分中の第1の区分を識別することと、複数の区分中の残りの第2の区分の間で第1の区分のロケーションを識別する符号化を生成することと、符号化および第2の区分をニューラルネットワーク中の後続の層に送ることとを含み得る。
【0006】
いくつかの実施形態では、ニューラルネットワークアクセラレータは、ニューラルネットワークの層を実装し、層からの出力を生成するように構成された計算ノードと、処理を実行するように構成された区分回路であって、処理が、ニューラルネットワークの層から出力を受信することと、出力を複数の区分に区分することと、0値を有するものとして扱われ得る、複数の区分中の第1の区分を識別することと、複数の区分中の残りの第2の区分の間で第1の区分のロケーションを識別する符号化を生成することとを含む、区分回路とを含み得る。ニューラルネットワークアクセラレータは、ニューラルネットワーク中の後続の層のために符号化および第2の区分を記憶するように構成されたメモリをも含み得る。
【0007】
いくつかの実施形態では、ニューラルネットワーク層の出力についてスパーシティを誘起する方法は、ニューラルネットワークの層から出力を受信することと、出力を複数の区分に区分することであって、複数の区分の各々が複数の出力を含む、出力を複数の区分に区分することとを含み得る。本方法は、第1の区分中の値が0に設定され得ることを示す基準を満たす、複数の区分中の第1の区分を識別することと、複数の区分中の残りの第2の区分の間で第1の区分のロケーションを識別する符号化を生成することと、符号化および第2の区分をニューラルネットワーク中の後続の層に送り、第1の区分を廃棄することと、ニューラルネットワーク中の後続の層において第2の区分を受信することと、符号化に基づいて、0値とともに第2の区分を配置することと、ニューラルネットワーク中の後続の層を実行することとをも含み得る。
【0008】
任意の実施形態では、以下の特徴のいずれかおよびすべてが、任意の組合せで、限定なしに実施され得る。本方法/処理は、ニューラルネットワーク中の後続の層において第2の区分を受信することと、符号化に基づいて、第2の区分を配置することとをも含み得る。後続の層は乗算演算を実施し得、それにより、第1の区分は0乗算演算(multiply-by-zero operation)として廃棄され得る。出力は層からの出力の3次元アレイを含み得、出力のアレイはニューラルネットワーク中の異なるチャネルについての次元を含む。複数の区分は出力のアレイの3次元区分を含み得る。第1の区分は複数の区分中で連続する必要がない。0値を有するものとして扱われ得る、複数の区分中の第1の区分を識別することは、設計環境から規準を受信することと、規準を複数の区分の各々に適用することとを含み得る。基準は、区分中の値についての合計を計算し、合計がしきい値よりも小さい場合、区分中の値を0に設定する相対マグニチュード関数を含み得る。基準は、ランタイム関数として設計環境から送られ得る。基準は、ニューラルネットワークを表すグラフの一部として符号化され得る。ニューラルネットワークアクセラレータは、複数のチップレットをも含み得、計算ノードは複数のチップレット中の第1のチップレット上で実装され得、後続の層は、複数のチップレット中の第2のチップレット上で実装され得る。ニューラルネットワークアクセラレータは、処理を実行するように構成されたシーケンサ回路をも含み得、処理が、ニューラルネットワーク中の後続の層において第2の区分を受信することと、符号化に基づいて、第2の区分を配置することとを含む。ニューラルネットワークの層は、畳み込みコアを実行することを含み得る。メモリは、オンチップスタティックランダムアクセスメモリ(SRAM)を含み得る。区分回路は、ニューラルネットワークをトレーニングするときに使用される必要がない。複数の区分中の区分の数は、ニューラルネットワークのトレーニング中に決定され得る。0値を有するものとして扱われ得る、複数の区分中の第1の区分を識別することは、設計環境から基準を受信することと、基準を複数の区分の各々に適用することとを含み得る。出力は層からの出力の3次元アレイを含み得、出力のアレイはニューラルネットワーク中の異なるチャネルについての次元を含み得、複数の区分は出力のアレイの3次元区分を含み得る。
【0009】
様々な実施形態の性質および利点のさらなる理解は、本明細書の残りの部分および図面を参照することによって実現され得、図面において、同様の参照番号が、同様の構成要素を指すためにいくつかの図面全体にわたって使用される。いくつかの事例では、複数の同様の構成要素のうちの1つを示すために、サブラベルが参照番号に関連付けられる。既存のサブラベルへの指定なしに参照番号への参照が行われるとき、すべてのそのような複数の同様の構成要素を指すことが意図されている。
【図面の簡単な説明】
【0010】
図1】異なるニューラルネットワークアーキテクチャまたはモデルについての計算スケーリングのグラフを示す図である。
図2】例示的なニューラルネットワーク中の各チャネルについての活性化密度分布のチャートを示す図である。
図3】いくつかの実施形態による、活性化スパーシティを最適に活用するための組み合わせられたアルゴリズム-ハードウェアアプローチの図である。
図4】いくつかの実施形態による、一般的なニューラルネットワークアクセラレータを示す図である。
図5】いくつかの実施形態による、スパーシティを誘起する改善されたニューラルネットワークアクセラレータを示す図である。
図6】いくつかの実施形態による、畳み込み演算のフィルタが、区分回路によって区分され得る多次元出力アレイをどのように生成し得るかの一例を示す図である。
図7】出力テンソルが、任意の次元においてどのように区分され得るかを示す図である。
図8】いくつかの実施形態による、区分誘起スパーシティが、出力活性化マップ中で見つけられたランダムスパーシティにわたって提供する改善を示す図である。
図9】いくつかの実施形態による、マルチタイルまたはAIチップレットアーキテクチャを示す図である。
図10】いくつかの実施形態による、ニューラルネットワーク層の出力についてスパーシティを誘起するための方法のフローチャートである。
図11】様々な実施形態が実装され得る、例示的なコンピュータシステムを示す図である。
【発明を実施するための形態】
【0011】
人工知能(AI)は、よりユビキタスになり続けている。AIの使用がより普及するにつれて、AIは、以前は複雑すぎると考えられていた新しい使用事例を可能にしている。多くの異なる分野(discipline)にわたるAIの、この増加する採用が、AIハードウェアとAIソフトウェアの両方から必要とされる性能要件を推進している。たとえば、新しいアルゴリズムは、コンピュータビジョン(CV)および自然言語処理(NLP)からのより複雑な使用事例を解決し続けており、計算能力およびメモリストレージの増大についての需要が、従来のプロセススケーリングのみでサポートされ得るものを越えて伸びている。AIシステムの効率に対する将来の改善は、ハードウェア、ソフトウェア、トレーニングなどに対する革新のみではなく、おそらく、技術スタックの異なるレベルに互いに影響を及ぼす革新を生じることになる。
【0012】
図1は、異なるニューラルネットワークアーキテクチャまたはモデルについての計算スケーリングのグラフ100を示す。このグラフ100は、近年における、異なるCVおよびNLPニューラルネットワークモデルについての算出増大を要約している。CV、NLP、および/または音声認識についての計算要件の増大が、ムーアの法則から得られる計算能力の自然増大を急速に追い越していることに留意されたい。この不一致は、計算要件がさらにより速いレートで増大しているトランスフォーマベースニューラルネットワークを考慮するとき、さらにより顕著になる。図1において表される絶対浮動小数点演算(FLOPS)メトリックは、特に、ニューラルネットワークトレーニングに関係するが、全体的な計算スケーリングの傾向は、ニューラルネットワークによって実行されるトレーニング計算と推論計算の両方について同じである。図1に示されている性能スケーリングの需要は、データセンタまたはクラウドプラットフォーム上で実行される計算と比較して、限られた計算能力をもつスマートエッジデバイスを使用するとき、さらにより顕著になる。
【0013】
旧来のコンピューティングおよびメモリスケーリングでは、将来におけるAI需要の増大および導入をサポートすることができないことになることは、明白である。ニューラルネットワークアルゴリズムからハードウェア実装形態まで、AIスタックの異なる部分について継続的な取り組みがあるが、これらの取り組みの大部分は本質的に静的である。既存の最適化の取り組みは、しばしば、量子化またはプルーニング(枝刈り)など、パラメータベースのモデル圧縮アプローチを中心とする。代替的に、最適化の取り組みは、知識の蒸留または低ランク因数分解など、アルゴリズムレベルのみに焦点を当ててきた。これらの個別の方法は、個々に、メモリおよびコンピュータの使用量の低減を与えるが、最適化のコースレベルとこれらの改善を特定の入力データセットまたはモデルに限定する精度のトレードオフのため、全体的な効率は制限される。
【0014】
性能需要は、モデルが、より多くの内部層と、サイズが上方にスケーリングし続ける入力テンソルとを伴ってより深くなるにつれて、悪化する。たとえば、ResNet-152モデルは152個の内部層を含み得、入力テンソルは高解像度画像を含み得、入力は、複数のカメラストリームなどの複数のソースからパッチされる可能性がある。これらの大きいデータセットの場合、活性化メモリサイズが、主なボトルネックになり、ニューラルネットワークのための重みおよびパラメータを記憶するパラメータメモリサイズさえ超えている。本明細書で使用される、パラメータメモリは、ニューラルネットワーク自体についての重みおよびパラメータのストレージを指すが、活性化メモリは、ニューラルネットワークを通って流れるテンソルの動的入出力を指す。量子化、重みプルーニングなど、従来のモデル圧縮技法は、活性化メモリでなく、パラメータメモリのみに焦点を当てており、したがってこのボトルネックを未解決のままにしている。
【0015】
活性化メモリボトルネックを解決するのための一般的なソリューションは、現在、ニューラルネットワーク技術において見つけられていない。詳細には、たいていのニューラルネットワークは、各層の一部として何らかの形態の非線形性(たとえば、ReLU、Sigmoid、Tanhなど)を使用するので、各層からの活性化出力は、自然発生レベルのスパーシティを有することになる。すなわち、これらの活性化関数は、それらの活性化関数が実行されたとき、負値などの多くの値を0にさせる傾向がある。しかしながら、このスパーシティは、動的である。ニューラルネットワーク中のパラメータ重みにおけるスパーシティとは異なり、このスパーシティは各入力テンソルに関して異なり、そのようなスパーシティのロケーションを設計時において予測するのを不可能にする。これは、動的活性化スパーシティを活用することをハードウェアにおいて極めて難しくし、従来のハードウェアアクセラレータはこのタイプの最適化をサポートしない。
【0016】
図2は、例示的なニューラルネットワーク中の各チャネルについての活性化密度分布のチャート200を示す。チャート200中のデータは、畳み込みアーキテクチャに基づく、普及している画像分類ニューラルネットワークである、VGG-16から取得されている。Y軸上の各チャネルが、一意のニューラルネットワーク層を表し、チャート200上の各ドットが、チャネルごとの密度を表す。活性化分布は、ニューラルネットワーク中のほとんどの層にわたるチャネルについて、極めて不規則であり、不均一であることが観測され得る。すなわち、異なるチャネルにおけるスパーシティは、予測不可能であり、実行時の入力に大きく依存する。さらに、チャート200は、本明細書では「テールワーカー」効果と呼ばれる、スパーシティの不均一な動的分布から生じる別の課題を明らかにする。詳細には、テールワーカー効果は、最も遅いまたは「テール」ワーカーまでの全体的な速度を制限する。これは、たいていのハードウェアアクセラレータが、ニューラルネットワーク層を、並列処理要素上で並列に実行される複数のより小さいカーネルに分割またはスプリットするので、性能を改善するために活性化スパーシティを活用することに対する制限された利点を生じる。
【0017】
同様に、活性化出力におけるスパーシティの予測不可能な分布は、0値を削除することによって実現され得るメモリ節約を制限する。詳細には、スパース0値が活性化マップから削除される場合、削除される要素のそれぞれのエンコーディングは、依然として保存される必要がある。すなわち、どの0要素が削除されたかを指定するエンコーディングは、出力の元のセットが後続の層への入力として再構成され得るように、保存されなければならない。これは、メモリ節約が、少なくとも50%のスパーシティがなければ、達成される可能性が低いことになることを意味し、このしきい値を下回る活性化テンソルが、実際に、メモリ使用量および帯域幅の増加を生じ得る。
【0018】
本明細書で説明される実施形態は、ニューラルネットワーク中で動的活性化スパーシティを活用するための、汎用アーキテクチャフレームワークと総合的なアルゴリズム-ハードウェアへのアプローチとを提案する。このアーキテクチャは、活性化特徴マップ中に、「構造化されたスパーシティ」(たとえば、層の出力)を導入および誘起し、ここで、スパーシティの構造は、層出力において区分を作成することによって、アーキテクチャの基本的な実行単位に合わせて調整される。たとえば、SIMD演算、VLIW演算、シストリックアレイ演算、畳み込みエンジン演算、MAC演算などを含む、各実行ユニットは、調整された区分タイプおよびサイズを有し得る。これらの異なる処理の各々は、スパーシティを誘起し、区分全体を0に設定するために使用される、個々の基準をも有し得る。アルゴリズムおよびフレームワークレベルにおける対応する実行ユニットの基本的な構成に合わせたこの構造を使用することで、コンピュータの使用量と、メモリ容量と、相互接続帯域幅とを最適化するためにターゲットにすべき最適設計点を生成し得る。
【0019】
スパース区分は、活性化層間で、メモリに記憶される必要がない。メモリ節約に加えて、スパース活性化を伴う計算処理も除去され得る。たとえば、乗算する計算ノードへの入力、および特定の重みによる入力テンソルは、入力テンソル全体が0に設定されたときに除去され得、したがって、この計算処理は、後続の層において完全にスキップされ得る。これは、ニューラルネットワークのかなりの計算量の低減を生じることがある。さらに、ムーアの法則の遅れ、およびAIの増大する算出ニーズをサポートするための異種チップレットベースのソリューションの採用により、活性化スパーシティを活用するこれらの実施形態は、パッケージ上の相互接続における帯域幅圧力を緩和することができる。これは、パッケージ上の相互接続およびこれらの設計に固有の密度の低下があっても、チップレットベースアーキテクチャ上でAIの作業負荷を、ほぼモノリシックのようなスケーリングとすることが可能になる。
【0020】
図3は、いくつかの実施形態による、活性化スパーシティを最適に活用するためのアルゴリズム-ハードウェアの組み合わせアプローチの図300を示す。アーキテクチャには、深層学習フレームワーク302が含み得る。深層学習フレームワークは、ユーザが深層学習モデルを容易に構築することを可能にする、ユーザインターフェースおよびライブラリ/ツールを含み得る。深層学習フレームワーク302の例は、TensorFlow(登録商標)、PyTorch(登録商標)、Keras(登録商標)、Sonnet(登録商標)、および/または他の市販のツールを含み得る。深層学習フレームワークは、特定のアプリケーション向けの新しいニューラルネットワークを開発するための、事前トレーニングされたモデル、ユーザ定義されたモデル、および/またはサンプルデータセットから引き出し得る。
【0021】
いくつかの実施形態は、本明細書では「PartitionDropout」と呼ばれるカスタムライブラリ304を追加し得、カスタムライブラリ304は、深層学習フレームワーク302と統合し得る。PartitionDropoutドロップアウトライブラリは、事前トレーニングされたモデルとともに使用され得るか、またはモデルが、設計に追加されたPartitionDropoutとともにトレーニングされ得る。ライブラリ304は、ニューラルネットワーク設計者が、設計プロセス中に、最適区分サイズ、計算、メモリ容量、および/または帯域幅低減トレードオフを評価することを可能にする。
【0022】
PartitionDropoutライブラリは、様々な層の活性化マップにスパーシティを誘起するために、AIハードウェア中に追加のハードウェア要素を構成するためのコードを追加するために使用され得る。たとえば、このライブラリ304は、ユーザが、層からの出力について、様々なサイズおよび形状の区分を指定することを可能にし得る。さらに、ライブラリ304は、ニューラルネットワーク設計者が、0値を有するものとして扱われ得る、層出力における区分を決定または識別する基準または関数を指定することを可能にし得る。これらの2つのパラメータ(すなわち、区分するスキームおよび基準)は、実験的に設定されるかまたはニューラルネットワーク設計者によって選定され得る。
【0023】
たとえば、いくつかの実施形態は、可能な区分サイズおよび構造のリストを使用してニューラルネットワークでサンプルデータを処理し得る。得られたシミュレートされた出力は、次いで、他の区分サイズ/構造を使用したシミュレートされた結果と比較した、精度とのトレードオフとして、帯域幅、算出、および/またはメモリ節約に関して特徴づけられ得る。次いで、最適区分サイズ/構造が、シミュレートされた結果から選択され得る。同様に、使用される基準は、精度と得られたハードウェア効率との間のトレードオフにおける最適変曲点を識別するために、異なるしきい値を使用してシミュレートされ得る。たとえば、マグニチュードベースの基準が、区分中の値についての合計を計算し、合計がしきい値よりも小さい場合、区分中のすべての値を0に設定し得る。このしきい値は、最適値を見つけるために、シミュレーション中に上/下に調整され得る。
【0024】
ネットワークごとのメタデータまたは層ごとのメタデータは基礎をなすハードウェアと、そのハードウェアが上記で説明された深層学習フレームワークで設計された方式を実装するために、通信される必要があり得る。たとえば、選択された基準およびしきい値は、区分サイズまたは構造とともに、深層学習フレームワーク302からハードウェア310に通信される必要があり得る。アーキテクチャ300は、この通信を提供するためのいくつかの異なる方法を提供する。いくつかの実施形態では、コンパイラは、区分および/または基準を、ハードウェア310に送信されるニューラルネットワークグラフ306に組み込み得る。コンパイルされたニューラルネットワークグラフ306は、計算層が実行した後にPartitionDropout層の処理を実行するための命令を含み得る。たとえば、ニューラルネットワーク中の層の計算処理の後に実行される区分回路が、コンパイラによってニューラルネットワークの一部として扱われ得、スパーシティを誘起するために、区分を生成し、基準を実行するための命令が、ニューラルネットワークグラフ306の一部として実装され得る。代替的に、いくつかの実施形態は、PartitionDropout命令セットアーキテクチャ(ISA)を含む、ニューラルネットワークランタイムを送り得る。ニューラルネットワークランタイム308が、AIアクセラレータまたは他のハードウェア中の区分回路を別々にプログラムするために、ハードウェア310に送られ得る。
【0025】
最終的に、ハードウェア310は、上記で説明されたPartitionDropout区分および/または基準をとともにグラフを実行し得る。たとえば、ハードウェア310は、マルチタイルまたはAIチップレットソリューションを含み得、ここで、ニューラルネットワークまたは層が、異なるAIタイルまたはチップレットにわたって分布される。以下で説明されるように、ハードウェア310は、深層学習フレームワーク302において指定された基準および/または区分関数を実装する回路を含み得る。これらの区分回路は、ハードウェア310中の計算ノードによって実装される任意のおよび/またはすべての層の後に含まれ得る。
【0026】
図4は、いくつかの実施形態による、一般的なニューラルネットワークアクセラレータ400を示す。アーキテクチャは、オンチップSRAM404および/またはオフチップメモリ402を含み得る。これらのメモリは入出力テンソルを、それらがニューラルネットワークの様々な層を通って伝搬したとき、記憶し得る。実行ユニット406が、ニューラルネットワークの1つまたは複数の層の処理のうちの1つまたは複数を実行し得る。この例では、実行ユニット406は、前の計算ノードから、またはニューラルネットワークへの入力から入力テンソルを受信する内部入力バッファ408を含み得る。入力バッファ408は、部分的な空間次元とチャネル次元とを持つフィルタと、およびいくつかのケースを含み得る。入力バッファ408は、テンソルを、入力バッファ408から受信された入力テンソルに対して1つまたは複数の演算を実行する計算コアまたは計算ノード410に提供し得る。たとえば、計算ノード410は、畳み込み演算を実行し得、浮動小数点積和(FMA)エンジンを使用して実装され得る。計算ノード410の出力は、出力バッファ412に渡され得る。出力バッファは、計算ノード410からの畳み込み結果を累積し得る。計算ノード410によって生成された部分和は、出力バッファ412からオンチップSRAM404中に、さらにオフチップメモリ402上に波及し得る。
【0027】
図5は、いくつかの実施形態による、スパーシティを誘起する改善されたニューラルネットワークアクセラレータ500を示す。このニューラルネットワークアクセラレータ500は、図4のニューラルネットワークアクセラレータ400について上記で説明された構成要素を含み得る。しかしながら、このニューラルネットワークアクセラレータ500は、スパース区分が削除されたとき、入力をシーケンスするように構成されたシーケンサ回路502とともに、計算ノード410の出力においてスパーシティを生成するように構成された区分回路504をも含み得る。区分回路504およびシーケンサ回路502は、上記で説明されたように、ニューラルネットワークグラフを使用して、および/または深層学習フレームワークによって提供されるランタイムからのメタデータを使用してプログラムされ得る。
【0028】
区分回路は、ニューラルネットワークの層から出力を受信し得る。この層は、計算ノード410によって実装され得、活性化関数、畳み込み関数など、異なる数学関数を実行し得る。計算ノード410からの出力は、出力バッファ412において受信および/または累積され得る。区分回路504は、次いで、いくつかのアクションを実行し得る。最初に、区分回路504は、出力を複数の異なる区分に区分し得る。区分構造/サイズは、深層学習フレームワークにおいて決定され、上記で説明された区分回路504に渡され得る。活性化マップテンソルがどのように区分され得るかの例が、以下で提供される。出力を複数の区分に区分することは、必ずしも実際の値またはメモリ要素が移動または変更されることを必要とするとは限らないことに留意されたい。代わりに、区分回路504は、所定の区分サイズ/構造に従って、区分を値のグループとして識別し得、基準を実行するか、またはさもなければ、各区分を単一のエンティティとして一緒にハンドリングし得る。
【0029】
区分回路はまた、0値を有するものとして扱われ得る、複数の区分中の区分を識別し得る。この演算は、いくつかの異なるやり方で行われ得る。いくつかの実施形態では、深層学習フレームワークから受信された基準は、各区分に対して実行され得る。基準の目的は、区分が全体として、区分が0値のみを有するものとして扱われ得る十分に小さい値を含むかどうかを決定することであり得る。たとえば、2×2×6区分中の値が、0.1よりも小さい全合計を有する場合、その区分中の値のすべてが、0として扱われ得る。本開示は、使用され得る基準のタイプを制限しないことに留意されたい。基準の一例は、各区分中の値を合計し、合計された値をしきい値と比較し、合計がしきい値を下回る場合、区分を0値として扱う、基準である。他の実施形態は、異なる基準を使用し得る。また、基準は、単独で、または基準のセットとして他の基準とともに実行され得ることに留意されたい。したがって、単一の基準を参照する場合は、複数の基準を任意の組合せで区分上で実行することもできる。
【0030】
0値を有するものとして区分を扱うことは、実際の0値(たとえば、0.0)を区分内の記憶場所の各々に書き込むことを含み得る。この処理は、計算ノード410の出力として以前に記憶された値を、上書きし得る。これは、精度が多少損なわれる可能性があるロスの多い手順かもしれない。しかしながら、ニューラルネットワークの処理は、中間層における精度の小さい損失は許容することができる。この処理はまた、活性化関数、または他の関数が個々のメモリロケーション上で1つずつ実行されるものとも区別できる。ある単一の値をしきい値と比較し、その値を0に設定する代わりに、この演算は、区分全体の値を0に設定する(またはそれらの値を0として扱う)。したがって、単一のロケーション中の比較的大きい非0値が、区分についての基準がそのように規定する場合、区分中で0に設定され得る。
【0031】
いくつかの実施形態では、0値を有するものとして区分を扱うことは、実際の0値を、区分のストレージロケーションに書き込むことを必要としない。代わりに、区分は、0値を有するものとして扱われ得る。たとえば、区分は、廃棄され得、後続の層に、またはオンチップSRAM404層に渡されないことがある。実際の0値が区分のメモリロケーションに書き込まれるか否かにかかわらず、これらの区分は、出力をメモリに記憶するときに廃棄され得る。たとえば、区分をメモリに記憶するとき、区分回路504は、全体的な出力アレイにおいて、0値を有するものとして扱われる区分のロケーションを識別するエンコーディングを生成し得る。たとえば、2進列が、各区分に関連する単一のビットで生成され得る。0値は、区分が0値を有するものとして扱われるべきであることを示し得、1値は、区分が、メモリに記憶される非0値を有するものとして扱われるべきであることを示し得る。区分のすべてをメモリに記憶する代わりに、0値を有するものとして扱われる区分(「第1の区分」)の第1のセットが廃棄され得、非0値を有する区分(「第2の区分」)の第2のセットが、メモリに記憶され得る。このエンコーディングは、多大なメモリ節約を生成し、極めて大きい出力テンソルから生じるメモリボトルネックを低減し得る。たとえば、25個の区分に分割された3D出力アレイが、たとえば、それらの区分うちの10個においてスパーシティを誘起し得る。値で満ちた25個の区分を記憶する代わりに、区分回路504は、出力をエンコーディングする25ビット文字列をもつ15個の区分を記憶するだけでよい。
【0032】
いくつかの実施形態は、各層において40%の平均スパーシティを誘起した。上記で説明されたように、このスパーシティが区分中で誘起されたとき、これは活性化メモリ中で40%の節約を生じる。オンチップメモリリソースに関する制約をもつエッジデバイスでは、この低減は、非チップ及びオフチップメモリ帯域幅における性能節約に直接つながり得る。これは、各処理についてのメモリ転送の数を最小限に抑えることによって、メモリアクセス時間を改善し、ニューラルネットワークの全体的な処理速度を改善する。
【0033】
区分回路504は、エンコーディングと、非0値を有する区分の第2のセットとをメモリ(たとえば、オンチップSRAM404)に送り得る。代替的に、区分回路504は、ニューラルネットワーク中の後続の層または計算ノードの別の入力バッファ408に出力を直接送り得る。
【0034】
後続の層が区分回路504からエンコードされたテンソルを受信したとき、シーケンサ回路502はテンソルをデコードして、処理に適切なロケーションに第2の区分セットを提供し得る。スパースフォーマットされたテンソルが読み取られ得、シーケンサ回路502中の制御ロジックが、この実行ユニットまたは他の実行ユニットに送られるべき異なる区分を選択することができる。たとえば、シーケンサ回路502は、エンコーディングを読み取り、必要に応じて、0値で満ちた区分を入力テンソルに挿入し得る。シーケンサ回路502は、テンソルを、非ゼロ値が入力テンソルの、期待される場所に期待される順序で現れるように、期待されるサイズに再アセンブルし得る。
【0035】
メモリ帯域幅を節約することに加えて、この区分により、ニューラルネットワークアクセラレータ500によって実行される計算処理のうちのいくつかが排除され得る。いくつかの実施形態では、個々の区分は、異なる実行ユニット406に送られ得る。ある処理が、0値に設定された区分を受信する場合、またはさもなければ、0値を有するものとして扱われるべきである場合、その処理は、場合によっては削除され得る。たとえば、計算ノードにおける演算が乗算演算を含む場合、0区分によりその演算の出力が0になることを引き起こし得る。したがって、演算を実際に実行する代わりに、0出力が、乗算演算を実行することなしにゼロ出力を生成され得、対応する計算ステージを削除され得る。不連続テンソルの場合、エンコーディングにおける入力テンソル構造に基づいてそれぞれの出力バッファが、選択され得る。シーケンサ回路502内のこの制御ロジックは、この処理を実行し得る。
【0036】
図6は、いくつかの実施形態による、畳み込み演算のフィルタが、区分回路によって区分され得る多次元出力配列をどのように生成し得るかの一例を示す。活性化関数の入力テンソル602は、複数の入力チャネルCを伴うH×W(高さ×幅)の空間次元を有し、したがって、3次元入力配列を生じ得る。空間畳み込みは、複数のフィルタ604を使用する活性化関数によって実行され得る。それらのフィルタの各々は、入力テンソル602と同じ数のチャネルCを備えた次元R×Sを有し得る。活性化関数は、畳み込み演算中にK個の異なるフィルタを適用し得る。得られた出力テンソル606は、K個のフィルタ604の各々に対するP×Qの2次元配列として特徴づけられ得る。
【0037】
図7は、出力テンソル606が、任意の次元においてどのように区分され得るかを示す。区分は、出力テンソル606を空間次元とチャネル次元の両方にスプリットし、2D区分または3D区分を生じ得ることに留意されたい。図7に示されている区分は例として提供されるにすぎず、限定するものではないことに留意されたい。区分の構造やサイズは任意とされ得る。異なる区分が設計されるとき、ニューラルネットワークアクセラレータ中の異なる計算ノード間の通信パターンが変化することになることにも留意されたい。たとえば、区分が変化するとき、いくつかの区分がニューラルネットワーク中でブロックとして送られるべきであるロケーションも、ニューラルネットワークの個々の設計に基づいて変化し得る。このルーティング情報はまた、区分が正確なロケーションにルーティングされるように、深層学習フレームワークからニューラルネットワークアクセラレータのハードウェア構成要素に提供され得る。
【0038】
基準を適用し、出力テンソル606中の様々な区分上でスパーシティを誘起した後に、区分回路は、出力テンソル606中の18個の区分を、4つの非スパース区分702に低減し得る。メタデータ704は、元の出力テンソル606が表され/再作成され得るように、エンコーディングを記憶し得、非スパース区分702は、正しい算出ノードに送られ得る。メタデータ704中のエンコーディングはまた、いくつかの後続層処理のために必要とされる場合、スパース区分を生成するために使用され得る。
【0039】
図8は、いくつかの実施形態による、出力活性化マップ中で見られるランダムなスパーシティよりも、区分誘起スパーシティがもたらす改善を示す。いくつかの正則化技法(たとえば、L1/L2、ドロップアウトなど)または修正された活性化関数(たとえば、FATReLU)は活性化スパーシティを増加させることが示されているが、これらの関数によって誘起されるスパーシティは、これらの標準的なドロップアウト技法を使用する活性化マップ802によって示されているように、依然として、本質的にランダムであり、システムレベルアーキテクチャによって利用されるのが困難である。本明細書で導入される新しい中間層(区分回路およびシーケンサ回路)は、活性化マップのある割合が完全にスパースであることを強いるために使用され得る構造化されたドロップアウト技法を提供する。この新しい層は、決定論的であるように設計され、トレーニングおよび/または推論中に適用される。たとえば、上記で説明されたマグニチュードベースの基準では、活性化マップは、区分ドロップアウト技法を使用する活性化マップ804によって示されているように、最初に、空間次元および/またはチャネル次元にわたってカットした連続区分のグリッドに分割され得、それらの区分の各々は、0値を有するものとして扱われ、活性化マグニチュードのランクに基づいて、その全体がドロップされるかまたは保持され得る。これは、場合によっては精度を低減し得るが、これは、必ずしもそうであるとは限らない。いくつかの場合には、区分誘発スパーシティは、標準的なスパーシティを使用する活性化マップ802と比較して、より良い検証精度を取得することが示されている。これは、区分されたドロップアウトが、上記で説明されたハードウェアアクセラレーションを有効にすることに加えて、より効果的な正則化を提供することを示す。
【0040】
図9は、いくつかの実施形態による、マルチタイルまたはAIチップレットアーキテクチャを示す。メモリ使用量を低減することおよびコンピューティング使用量を低減することに加えて、ニューラルネットワークアクセラレータのためのPartitionDropoutアーキテクチャはまた、複数のAIダイ、タイル、またはチップレットにわたってスケーリングするとき、相互接続帯域幅に対してかなりの節約を生じることができる。チップレットは、大きいモノリシックダイに固有のスケーリングおよびコストの問題を解決するが、それらは、一般に、モノリシックダイと同じレベルの相互接続密度および電力効率を与えず、したがって、AIアクセラレータなどのコヒーレントブロックを分解すると、モノリシックソリューションと比較してより低いコンピュートスケーリングを生じ得る。しかしながら、本明細書で説明されるアーキテクチャは、複数のAIダイ、タイル、またはチップレット間の相互接続に対する帯域幅圧力を緩和する。これはまた、多くの異なるAIチップレットにわたるAIコンピューティングのスケーリングの性能および電力効率を改善する。
【0041】
図9は、2Dメッシュトポロジーにおいて構成された、複数のAIタイル、チップレット、またはダイを使用する1つのそのような例を示す。この例では、各垂直列は、図6図7において上記で説明されたK次元にわたってスプリットし得る。たとえば、タイル(0,0)がK=0~15についてのフィルタを含み得、タイル(0,1)がフィルタK=16~31を含み得、以下同様である。アーキテクチャにおける各水平行が、C次元にわたってスプリットし、したがって、HCW0~63が行0中のすべての列についてブロードキャストされ得、HCW64~127が行1中の列のすべてについてブロードキャストされ得、以下同様である。これは、単一の列の各行が、それぞれのK個のスプリットを伴う部分和を作り出すことを生じ得る。これらは、すべて、単一の列内で低減されて、様々な列の間でスプリットされる部分出力テンソルPKQを低減し得る。したがって、列の各々の出力が、総出力テンソルの一部分を表し、これは、連結されて、完全な出力を形成し得る。
【0042】
図9中でノードとして表される各AIタイル、ダイ、またはチップレットは、図5中のニューラルネットワークアクセラレータアーキテクチャ500を使用するために実装され得る。したがって、各ノードの出力は、区分が、0値を有するものとして扱われ、また、タイル間の相互接続を通って伝搬することでドロップアウトするため、低減され得る。これは、入力次元および出力次元の両方において、かなりの相互接続帯域幅節約を生じる。
【0043】
図10は、いくつかの実施形態による、ニューラルネットワーク層の出力についてスパーシティを誘起するための方法のフローチャート1000を示す。この方法は、上記の図5に示されているニューラルネットワークアクセラレータ500によって実行され得る。さらに、区分サイズ/構造と、使用される基準と、ニューラルネットワークアクセラレータを実装する異なるノード間のルーティングとは、図3において説明された深層学習環境またはフレームワークにおいてプログラムされ得る。
【0044】
方法は、ニューラルネットワークの層から出力を受信すること(1002)を含み得る。出力は、ニューラルネットワークの計算層間に追加された層によって受信され得る。この追加の層は、上記で説明された区分回路および/または順序付け回路を使用して、実装され得る。層からの出力は、直接、計算ノードから、ならびに/あるいは計算ノードからの値を受信および/または累積する出力バッファから、受信され得る。
【0045】
方法は、出力を複数の区分に区分すること(1004)をも含み得る。区分の任意のタイプ、サイズ、構造、またはトポロジーが使用され得る。区分は、深層学習フレームワークで定義され、ニューラルネットワークグラフ内のエンコーディングとして、または追加の層をプログラムするランタイムメタデータとして、ニューラルネットワークアクセラレータに渡され得る。区分は、空間次元および/またはチャネル次元にわたって行われ得、2Dおよび/または3D区分を生じ得る。
【0046】
方法は、さらに、0値を有するものとして扱われ得る、複数の区分中の第1の区分を識別すること(1006)を含み得る。第1の区分は、各区分に対して、全体として、基準を実行することによって識別され得る。たとえば、基準は、マグニチュードベースであり得、区分中のすべての値が、全体として、0として扱われるべきであるかどうかを決定するために、区分内の値の合計をしきい値と比較し得る。値を0として扱うことは、テンソル中の実際の値を0に設定すること、あるいは0として扱われる区分は、記憶されるかまたは後続の層に伝搬されるのではなく、廃棄されたり、ドロップアウトされたりする。
【0047】
方法は、複数の区分中の残りの第2の区分の中の第1の区分のロケーションを識別するエンコーディングを生成すること(1008)をさらに含み得る。エンコーディングは、0値を有するものとして扱われるべきである第1の区分と、出力テンソル中のそれらの相対ロケーションとを、非0値を有するものとして扱われる第2の区分とともに識別し得る。エンコーディングは、第2の区分とともに記憶され、および/あるいはニューラルネットワーク中の後続の層または算出ノードに渡され得る。方法は、次いで、符号化および第2の区分をニューラルネットワーク中の後続の層に送ること(1010)をも含み得る。
【0048】
図10に示されている特定のステップが、様々な実施形態に従って、ニューラルネットワーク層の出力についてスパーシティを誘起する特定の方法を提供することを諒解されたい。他の一連のステップも、代替実施形態に従って実施され得る。たとえば、代替実施形態は、上記で概説されたステップを異なる順序で実施し得る。その上、図10に示されている個々のステップは、個々のステップに適するように様々なシーケンスで実施され得る複数のサブステップを含み得る。さらに、特定の適用例に応じて、追加のステップが追加または除去され得る。多くの変形形態、変更形態、および代替形態も、本開示の範囲内に入る。
【0049】
本明細書で説明される方法の各々は、コンピュータシステムによって実装され得る。たとえば、深層学習フレームワークは、コンピューティングシステム上で実行され得る。これらの方法の各ステップは、コンピュータシステムによって自動的に実行され得、および/またはユーザに関与する入力/出力とともに提供され得る。たとえば、ユーザは、方法における各ステップのための入力を提供し得、これらの入力の各々は、そのような入力を要求する特定の出力に応答したものであり得、出力は、コンピュータシステムによって生成される。各入力は、対応する要求する出力に応答して受信され得る。さらに、入力は、ユーザから、データストリームとして別のコンピュータシステムから受信され、メモリロケーションから取り出され、ネットワーク上で取り出され、ウェブサービスから要求される、などであり得る。同様に、出力は、ユーザに、データストリームとして別のコンピュータシステムに提供され、メモリロケーション中に保存され、ネットワーク上で送られ、ウェブサービスに提供される、などであり得る。要するに、本明細書で説明される方法の各ステップは、コンピュータシステムによって実施され得、コンピュータシステムへのおよびコンピュータシステムからの、任意の数の入力、出力、および/または要求に関与し得、これは、ユーザに関与するかまたは関与しないことがある。ユーザに関与しないステップは、人間の介入なしのコンピュータシステムによって自動的に実施されると言われ得る。したがって、本開示に照らして、本明細書で説明される各方法の各ステップは、ユーザへのおよびユーザからの入力および出力を含むように変更され得るか、または任意の決定がプロセッサによって行われる人間介入なしのコンピュータシステムによって自動的に行われ得ることが、理解されよう。さらに、本明細書で説明される方法の各々のいくつかの実施形態は、有形ソフトウェア製品を形成するために、有形、非一時的ストレージ媒体に記憶された命令のセットとして実装され得る。
【0050】
図11は、様々な実施形態が実装され得る、例示的なコンピュータシステム1100を示す。システム1100は、上記で説明されたコンピュータシステムのいずれかを実装するために使用され得る。図に示されているように、コンピュータシステム1100は、バスサブシステム1102を介していくつかの周辺サブシステムと通信する処理ユニット1104を含む。これらの周辺サブシステムは、処理加速ユニット1106と、I/Oサブシステム1108と、ストレージサブシステム1118と、通信サブシステム1124とを含み得る。ストレージサブシステム1118は、有形コンピュータ可読ストレージ媒体1122とシステムメモリ1110とを含む。
【0051】
バスサブシステム1102は、コンピュータシステム1100の様々な構成要素およびサブシステムに、意図されるように互いと通信させるための機構を提供する。バスサブシステム1102は単一のバスとして概略的に示されているが、バスサブシステムの代替実施形態は複数のバスを利用し得る。バスサブシステム1102は、メモリバスまたはメモリコントローラと、周辺バスと、様々なバスアーキテクチャのうちのいずれかを使用するローカルバスとを含む、いくつかのタイプのバス構造のうちのいずれかであり得る。たとえば、そのようなアーキテクチャは、インダストリ スタンダード アーキテクチャ(ISA)バス、マイクロチャネルアーキテクチャ(MCA)バス、拡張ISA(EISA)バス、ビデオエレクトロニクス規格協会(VESA)ローカルバス、および、ペリフェラル コンポーネント インターコネクト(PCI)バスが含まれ、これらは、IEEE P1386.1規格に合わせて製造されたメザニンバスとして実装され得る。
【0052】
1つまたは複数の集積回路(たとえば、従来のマイクロプロセッサまたはマイクロコントローラ)として実装され得る処理ユニット1104は、コンピュータシステム1100の処理を制御する。1つまたは複数のプロセッサが、処理ユニット1104中に含まれ得る。これらのプロセッサは、シングルコアまたはマルチコアプロセッサを含み得る。いくつかの実施形態では、処理ユニット1104は、各処理ユニット中に含まれるシングルまたはマルチコアプロセッサをもつ1つまたは複数の独立処理ユニット1132および/または1134として実装され得る。他の実施形態では、処理ユニット1104はまた、シングルチップに2つのデュアルコアプロセッサを統合することによって形成されるクワッドコア処理ユニットとして実装され得る。
【0053】
様々な実施形態では、処理ユニット1104は、プログラムコードに応答して様々なプログラムを実行することができ、複数の同時に実行するプログラムまたはプロセスを維持することができる。所与の時間において、実行されるべきプログラムコードの一部または全部が、(1つまたは複数の)プロセッサ1104に、および/またはストレージサブシステム1118に、常駐し得る。好適なプログラミングを通して、(1つまたは複数の)プロセッサ1104は、上記で説明された様々な機能を提供することができる。コンピュータシステム1100は、デジタルシグナルプロセッサ(DSP)、専用プロセッサなどを含むことができる、処理加速ユニット1106をさらに含み得る。
【0054】
I/Oサブシステム1108は、ユーザインターフェース入力デバイスとユーザインターフェース出力デバイスとを含み得る。ユーザインターフェース入力デバイスは、キーボード、マウスまたはトラックボールなどのポインティングデバイス、タッチパッド、またはディスプレイに組み込まれたタッチスクリーン、スクロールホイール、クリックホイール、ダイヤル、ボタン、スイッチ、キーパッド、ボイスコマンド認識システムをもつオーディオ入力デバイス、マイクロフォン、および他のタイプの入力デバイスを含み得る。ユーザインターフェース入力デバイスは、たとえば、ユーザが、ジェスチャーと話されたコマンドとを使用してナチュラルユーザインターフェースを通して、Microsoft Xbox(登録商標) 360ゲームコントローラなどの入力デバイスを制御し、その入力デバイスと対話することを可能にする、Microsoft Kinect(登録商標)動きセンサなどの動き感知および/またはジェスチャー認識デバイスを含み得る。ユーザインターフェース入力デバイスは、ユーザから目の活動(たとえば、写真を撮るおよび/またはメニュー選択を行う間の「まばたき」)を検出し、目のジェスチャーを入力デバイス(たとえば、Google Glass(登録商標))への入力として変換する、Google Glass(登録商標)まばたき検出器などの目ジェスチャー認識デバイスをも含み得る。さらに、ユーザインターフェース入力デバイスは、ユーザがボイスコマンドを通してボイス認識システム(たとえば、Siri(登録商標)ナビゲータ)と対話することを可能にする、ボイス認識感知デバイスを含み得る。
【0055】
ユーザインターフェース入力デバイスは、限定はしないが、3次元(3D)マウス、ジョイスティックまたはポインティングスティック、ゲームパッドおよびグラフィックタブレット、ならびに、スピーカーなどのオーディオ/視覚デバイス、デジタルカメラ、デジタルカムコーダ、携帯用メディアプレーヤ、ウェブカム、画像スキャナ、指紋スキャナ、バーコードリーダー3Dスキャナ、3Dプリンタ、レーザ測距器、ならびに視線追跡デバイスをも含み得る。さらに、ユーザインターフェース入力デバイスは、たとえば、コンピュータ断層撮影装置、磁気共鳴画像装置、位置放射トモグラフィ装置、医療用超音波診断装置など、医療用画像入力装置を含み得る。ユーザインターフェース入力デバイスは、たとえば、MIDIキーボード、デジタル楽器など、オーディオ入力デバイスをも含み得る。
【0056】
ユーザインターフェース出力デバイスは、ディスプレイサブシステム、インジケータライト、または、オーディオ出力デバイスなどの非視覚ディスプレイなどを含み得る。ディスプレイサブシステムは、陰極線管(CRT)、液晶ディスプレイ(LCD)またはプラズマディスプレイを使用するものなどのフラットパネルデバイス、投影デバイス、タッチスクリーンなどであり得る。概して、「出力デバイス」という用語の使用は、コンピュータシステム1100からユーザまたは他のコンピュータに情報を出力するための、すべての考えられるタイプのデバイスおよび機構を含むものとする。たとえば、ユーザインターフェース出力デバイスは、限定はしないが、モニタ、プリンタ、スピーカー、ヘッドフォン、自動車ナビゲーションシステム、プロッタ、ボイス出力デバイス、およびモデムなど、テキスト、グラフィックス、およびオーディオ/ビデオ情報を視覚的に伝達する、様々なディスプレイデバイスを含み得る。
【0057】
コンピュータシステム1100は、現在システムメモリ1110内に現在配置されているように示されている、ソフトウェア要素を備えるストレージサブシステム1118を、備え得る。システムメモリ1110は、処理ユニット1104上でロード可能であり、実行可能であるプログラム命令、ならびにこれらのプログラムの実行中に生成されるデータを記憶し得る。
【0058】
コンピュータシステム1100の構成およびタイプに応じて、システムメモリ1110は、(ランダムアクセスメモリ(RAM)などの)揮発性および/または(読取り専用メモリ(ROM)、フラッシュメモリなどの)不揮発性であり得る。RAMは、一般に、処理ユニット1104に直ちにアクセス可能である、および/または、処理ユニット1104によって現在動作させられ、実行されている、データおよび/またはプログラムモジュールを含んでいる。いくつかの実装形態では、システムメモリ1110は、スタティックランダムアクセスメモリ(SRAM)またはダイナミックランダムアクセスメモリ(DRAM)など、複数の異なるタイプのメモリを含み得る。いくつかの実装形態では、起動中など、コンピュータシステム1100内の要素間で情報を転送するのを助ける基本ルーチンを含んでいる、基本入出力システム(BIOS)が、一般にROMに記憶され得る。限定ではなく例として、システムメモリ1110はまた、クライアントアプリケーション、ウェブブラウザ、中間ティアアプリケーション、リレーショナルデータベース管理システム(RDBMS)などを含み得る、アプリケーションプログラム1112と、プログラムデータ1114と、オペレーティングシステム1116とを示す。例として、オペレーティングシステム1116は、様々なバージョンのMicrosoft Windows(登録商標)、Apple Macintosh(登録商標)、および/またはLinuxオペレーティングシステム、様々な市販のUNIX(登録商標)またはUNIXのようなオペレーティングシステム(限定はしないが、様々なGNU/Linuxオペレーティングシステム、Google Chrome(登録商標) OSなどを含む)、ならびに/あるいはiOS、Windows(登録商標) Phone、Android(登録商標) OS、BlackBerry(登録商標) 10 OS、およびPalm(登録商標) OSオペレーティングシステムなど、モバイルオペレーティングシステムを含み得る。
【0059】
ストレージサブシステム1118はまた、いくつかの実施形態の機能を提供する基本プログラミングおよびデータ構築物を記憶するための、有形コンピュータ可読ストレージ媒体を提供し得る。プロセッサによって実行されたとき、上記で説明された機能を提供する、ソフトウェア(プログラム、コードモジュール、命令)は、ストレージサブシステム1118に記憶され得る。これらのソフトウェアモジュールまたは命令は、処理ユニット1104によって実行され得る。ストレージサブシステム1118は、いくつかの実施形態に従って使用されるデータを記憶するためのリポジトリをも提供し得る。
【0060】
ストレージサブシステム1100は、コンピュータ可読ストレージ媒体1122にさらに接続され得る、コンピュータ可読ストレージ媒体リーダー1120をも含み得る。システムメモリ1110とともに、および随意に、システムメモリ1110と組み合わせて、コンピュータ可読ストレージ媒体1122は、リモート、ローカル、固定、および/またはリムーバブルストレージデバイスに加えて、コンピュータ可読情報を一時的におよび/またはより永続的に含んでいる、記憶する、送信する、および取り出すための、ストレージ媒体を包括的に表し得る。
【0061】
コードまたはコードの部分を含んでいるコンピュータ可読ストレージ媒体1122はまた、限定はしないが、情報のストレージおよび/または送信のための任意の方法または技術において実装された、揮発性および不揮発性、リムーバブルおよび非リムーバブル媒体など、ストレージ媒体および通信媒体を含む、任意の適切な媒体を含むことができる。これは、RAM、ROM、電子的消去可能プログラマブルROM(EEPROM)、フラッシュメモリまたは他のメモリ技術、CD-ROM、デジタル多用途ディスク(DVD)、または他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気ストレージデバイスなど、有形コンピュータ可読ストレージ媒体、あるいは他の有形コンピュータ可読媒体を含むことができる。これは、データ信号、データ送信、または所望の情報を送信するために使用され得、コンピューティングシステム1100によってアクセスされ得る、任意の他の媒体など、非有形コンピュータ可読媒体をも含むことができる。
【0062】
例として、コンピュータ可読ストレージ媒体1122は、非リムーバブル不揮発性磁気媒体から読み取るかまたは非リムーバブル不揮発性磁気媒体に書き込むハードディスクドライブと、リムーバブル不揮発性磁気ディスクから読み取るかまたはリムーバブル不揮発性磁気ディスクに書き込む磁気ディスクドライブと、CD ROM、DVD、およびBlu-Ray(登録商標)ディスク、または他の光媒体など、リムーバブル不揮発性光ディスクから読み取るかまたはリムーバブル不揮発性光ディスクに書き込む光ディスクドライブとを含み得る。コンピュータ可読ストレージ媒体1122は、限定はしないが、Zip(登録商標)ドライブ、フラッシュメモリカード、ユニバーサルシリアルバス(USB)フラッシュドライブ、セキュアデジタル(SD)カード、DVDディスク、デジタルビデオテープなどを含み得る。コンピュータ可読ストレージ媒体1122は、フラッシュメモリベースソリッドステートドライブ(SSD)、エンタープライズフラッシュドライブ、ソリッドステートROMなど、不揮発性メモリに基づくSSD、ソリッドステートRAM、ダイナミックRAM、スタティックRAM、DRAMベースSSD、磁気抵抗RAM(MRAM)SSDなど、揮発性メモリに基づくSSD、およびDRAMベースSSDとフラッシュメモリベースSSDとの組合せを使用するハイブリッドSSDをも含み得る。ディスクドライブおよびそれらの関連するコンピュータ可読媒体は、コンピュータシステム1100のための、コンピュータ可読命令、データ構造、プログラムモジュール、および他のデータの、不揮発性ストレージを提供し得る。
【0063】
通信サブシステム1124は、他のコンピュータシステムおよびネットワークへのインターフェースを提供する。通信サブシステム1124は、コンピュータシステム1100からの他のシステムからデータを受信するための、およびコンピュータシステム1100からの他のシステムにデータを送信するための、インターフェースとして働く。たとえば、通信サブシステム1124は、コンピュータシステム1100が、インターネットを介して1つまたは複数のデバイスに接続することを可能にし得る。いくつかの実施形態では、通信サブシステム1124は、(たとえば、セルラー電話技術、3G、4G、またはEDGE(世界規模向け拡張データレート)などの高度データネットワーク技術、WiFi(IEEE802.11ファミリー規格)、または他のモバイル通信技術、またはそれらの任意の組合せを使用する)ワイヤレスボイスおよび/またはデータネットワークにアクセスするための高周波(RF)トランシーバ構成要素、全地球測位システム(GPS)受信機構成要素、ならびに/あるいは他の構成要素を含むことができる。いくつかの実施形態では、通信サブシステム1124は、ワイヤレスインターフェースに加えてまたはワイヤレスインターフェースの代わりにワイヤードネットワーク接続性(たとえば、イーサネット)を提供することができる。
【0064】
いくつかの実施形態では、通信サブシステム1124はまた、コンピュータシステム1100を使用し得る1人または複数のユーザのために、構造化されたおよび/または構造化されていないデータフィード1126、イベントストリーム1128、イベント更新1130などの形態で、入力通信を受信し得る。
【0065】
例として、通信サブシステム1124は、1つまたは複数のサードパーティ情報ソースからのTwitter(登録商標)フィード、Facebook(登録商標)更新、Rich Site Summary(RSS)フィードなどのウェブフィード、および/またはリアルタイム更新など、データフィード1126を、ソーシャルネットワークおよび/または他の通信サービスのユーザからリアルタイムで受信するように構成され得る。
【0066】
さらに、通信サブシステム1124はまた、連続データストリームの形態のデータを受信するように構成され得、そのデータは、リアルタイムイベントのイベントストリーム1128、および/またはイベント更新1130を含み得、それらは、本質的に明示的終わりなしに連続または無限であり得る。連続データを生成するアプリケーションの例は、たとえば、センサデータアプリケーション、金融ティッカー、ネットワーク性能測定ツール(たとえばネットワーク監視およびトラフィック管理アプリケーション)、クリックストリーム分析ツール、自動車交通監視などを含み得る。
【0067】
通信サブシステム1124はまた、コンピュータシステム1100に結合された1つまたは複数のストリーミングデータソースコンピュータと通信していることがある1つまたは複数のデータベースに、構造化されたおよび/または構造化されていないデータフィード1126、イベントストリーム1128、イベント更新1130などを出力するように構成され得る。
【0068】
コンピュータシステム1100は、ハンドヘルド携帯用デバイス(たとえば、iPhone(登録商標)セルラーフォン、iPad(登録商標)コンピューティングタブレット、PDA)、ウェアラブルデバイス(たとえば、Google Glass(登録商標)ヘッドマウントディスプレイ)、PC、ワークステーション、メインフレーム、キオスク、サーバラック、または任意の他のデータ処理システムを含む、様々なタイプのうちの1つであり得る。
【0069】
コンピュータおよびネットワークの絶え間なく変化する性質により、図に示されているコンピュータシステム1100の説明は、特定の例としてのものにすぎない。図に示されているシステムよりも多いまたは少ない構成要素を有する多くの他の構成が可能である。たとえば、カスタマイズされたハードウェアも使用され得、および/あるいは特定の要素が、ハードウェア、ファームウェア、(アプレットを含む)ソフトウェア、または組合せで実装され得る。さらに、ネットワーク入出力デバイスなど、他のコンピューティングデバイスへの接続が、採用され得る。本明細書で提供される開示および教示に基づいて、様々な実施形態を実装するための他のやり方および/または方法が明らかであろう。
【0070】
上記の説明では、説明の目的で、様々な実施形態の完全な理解を提供するために、多数の具体的な詳細が記載された。ただし、いくつかの実施形態がこれらの具体的な詳細のうちのいくつかなしに実践され得ることは明らかであろう。他の事例では、よく知られている構造およびデバイスが、ブロック図の形式で示されている。
【0071】
上記の説明は、例示的な実施形態を提供するにすぎず、本開示の範囲、適用可能性、または構成を限定するものではない。むしろ、様々な実施形態の上記の説明は、少なくとも1つの実施形態を実装するための可能な開示を提供する。添付の特許請求の範囲に記載のいくつかの実施形態の趣旨および範囲から逸脱することなく、様々な変更が要素の機能および配置において行われ得ることを理解されたい。
【0072】
実施形態の完全な理解を提供するために、上記の説明において具体的な詳細が与えられた。ただし、実施形態がこれらの具体的な詳細なしに実践され得ることを理解されよう。たとえば、回路、システム、ネットワーク、プロセス、および他の構成要素は、不要な詳細で実施形態を不明瞭にしないために、ブロック図の形式の構成要素として示されていることがある。他の事例では、よく知られている回路、プロセス、アルゴリズム、構造、および技法が、実施形態を不明瞭にすることを回避するために、不要な詳細なしに示されていることがある。
【0073】
また、個々の実施形態は、フローチャート、流れ図、データフロー図、構造図、またはブロック図として示されている、プロセスとして説明されていることがあることに留意されたい。フローチャートは動作を連続したプロセスとして説明していることがあるが、動作の多くは、並列にまた同時に実施され得る。さらに、動作の順序は並べ替えられ得る。プロセスは、その動作が完了したとき終了するが、図中に含まれない追加のステップを有し得る。プロセスは、方法、関数、プロシージャ、サブルーチン、サブプログラムなどに対応し得る。プロセスが関数に対応するとき、その終了は、呼出し関数またはメイン関数への関数のリターンに対応することができる。
【0074】
「コンピュータ可読媒体」という用語は、限定はしないが、携帯用または固定ストレージデバイス、光ストレージデバイス、ワイヤレスチャネル、ならびに(1つまたは複数の)命令および/またはデータを記憶するか、含んでいるか、または搬送することが可能な様々な他の媒体を含む。コードセグメントまたは機械実行可能命令は、プロシージャ、関数、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、クラス、あるいは命令、データ構造、またはプログラム文の任意の組合せを表し得る。コードセグメントは、情報、データ、引数、パラメータ、またはメモリコンテンツを渡すおよび/または受信することによって別のコードセグメントまたはハードウェア回路に結合され得る。情報、引数、パラメータ、データなどは、メモリ共有、メッセージパッシング、トークンパッシング、ネットワーク伝送などを含む任意の好適な手段を介して、渡されるか、フォワーディングされるか、または送信され得る。
【0075】
さらに、実施形態は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、またはそれらの任意の組合せによって実装され得る。ソフトウェア、ファームウェア、ミドルウェアまたはマイクロコードで実装されるとき、必要なタスクを実施するためのプログラムコードまたはコードセグメントは、機械可読媒体に記憶され得る。(1つまたは複数の)プロセッサは、必要なタスクを実施し得る。
【0076】
上記の明細書では、特徴が、その特定の実施形態を参照しながら説明されたが、すべての実施形態がそれに限定されるとは限らないことを認識されたい。いくつかの実施形態の様々な特徴および態様が、個々にまたは一緒に使用され得る。さらに、実施形態は、本明細書のより広い趣旨および範囲から逸脱することなく、本明細書で説明されるもの以外の、任意の数の環境および適用例において利用され得る。したがって、本明細書および図面は、限定的ではなく例示的なものと見なされるべきである。
【0077】
さらに、説明の目的で、方法が、特定の順序で説明された。代替実施形態では、方法は、説明されたものとは異なる順序で実施され得ることを諒解されたい。また、上記で説明された方法が、ハードウェア構成要素によって実施され得るか、あるいは、汎用もしくは専用プロセッサまたは命令によりプログラムされた論理回路など、機械にその方法を実施させるために使用され得る、機械実行可能命令のシーケンスで具現され得ることを諒解されたい。これらの機械実行可能命令は、CD-ROMまたは他のタイプの光ディスク、フロッピーディスケット、ROM、RAM、EPROM、EEPROM、磁気または光学カード、フラッシュメモリ、あるいは電子命令を記憶するのに好適な他のタイプの機械可読媒体など、1つまたは複数の機械可読媒体に記憶され得る。代替的に、方法は、ハードウェアとソフトウェアとの組合せによって実施され得る。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
【国際調査報告】