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

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

▶ インテル・コーポレーションの特許一覧

特許7467802Webブラウザ環境内で機械学習モデルを処理するための方法および装置
<>
  • 特許-Webブラウザ環境内で機械学習モデルを処理するための方法および装置 図1
  • 特許-Webブラウザ環境内で機械学習モデルを処理するための方法および装置 図2
  • 特許-Webブラウザ環境内で機械学習モデルを処理するための方法および装置 図3
  • 特許-Webブラウザ環境内で機械学習モデルを処理するための方法および装置 図4
  • 特許-Webブラウザ環境内で機械学習モデルを処理するための方法および装置 図5
  • 特許-Webブラウザ環境内で機械学習モデルを処理するための方法および装置 図6
  • 特許-Webブラウザ環境内で機械学習モデルを処理するための方法および装置 図7
  • 特許-Webブラウザ環境内で機械学習モデルを処理するための方法および装置 図8
  • 特許-Webブラウザ環境内で機械学習モデルを処理するための方法および装置 図9
  • 特許-Webブラウザ環境内で機械学習モデルを処理するための方法および装置 図10
  • 特許-Webブラウザ環境内で機械学習モデルを処理するための方法および装置 図11
  • 特許-Webブラウザ環境内で機械学習モデルを処理するための方法および装置 図12
  • 特許-Webブラウザ環境内で機械学習モデルを処理するための方法および装置 図13
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-04-08
(45)【発行日】2024-04-16
(54)【発明の名称】Webブラウザ環境内で機械学習モデルを処理するための方法および装置
(51)【国際特許分類】
   G06N 3/08 20230101AFI20240409BHJP
【FI】
G06N3/08
【請求項の数】 31
(21)【出願番号】P 2022502289
(86)(22)【出願日】2019-09-27
(65)【公表番号】
(43)【公表日】2023-01-24
(86)【国際出願番号】 CN2019108439
(87)【国際公開番号】W WO2021056389
(87)【国際公開日】2021-04-01
【審査請求日】2022-09-22
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】リ、ジアンフイ
(72)【発明者】
【氏名】フ、ニンシン
(72)【発明者】
【氏名】リ、イーシアン
(72)【発明者】
【氏名】ウー、ヨン
(72)【発明者】
【氏名】ルオ、ユアンケ
【審査官】福西 章人
(56)【参考文献】
【文献】特開2003-140909(JP,A)
【文献】特開2003-196108(JP,A)
【文献】ZHA, Sheng et al.,Just-in-Time Dynamic-Batching,arXiv [online],2019年04月16日,pp.1-7,[検索日 2023.09.13]、インターネット:<URL:https://arxiv.org/pdf/1904.07421v1.pdf>
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00-99/00
(57)【特許請求の範囲】
【請求項1】
Webブラウザ内で動作する、機械学習モデルを処理するための装置であって、
機械学習処理が遅延された実行モードを用いて実行されるべき場合に、前記機械学習処理をグラフとして蓄積するためのグラフビルダと、
まだ利用可能でなく且つ前記機械学習処理に関連付けられていないテンソルにアクセスするためのリクエストに応答して、前記テンソルに基づき前記グラフを識別するためのテンソルマネージャと、
前記識別されたグラフに対応する凝縮されたグラフが利用可能であるか否かを判定するためのグラフキャッシュマネージャと、
前記グラフキャッシュマネージャが前記凝縮されたグラフが利用可能ではないと判定することに応答して、前記凝縮されたグラフを生成するためのグラフ凝縮器と、
前記凝縮されたグラフを実行して前記テンソルを生成するためのグラフ実行器であって、前記テンソルマネージャは前記テンソルを、前記テンソルにアクセスするための前記リクエストに対する応答として提供する、グラフ実行器とを備え
前記グラフ実行器は、前記リクエストに関連付けられた情報に基づき、前記機械学習処理が直接実行モードまたは前記遅延された実行モードのどちらで実行されるべきかを判定し、
前記機械学習処理が前記直接実行モードを用いて実行されるべきという判定に応答して、前記グラフ実行器は、前記機械学習処理を実行し、
前記機械学習処理が前記遅延された実行モードを用いて実行されるべきという判定に応答して、前記グラフ実行器は、前記機械学習処理を前記グラフビルダに送信し、前記グラフビルダは、前記グラフ実行器から受信した前記機械学習処理を蓄積して前記グラフを構築し、前記グラフ凝縮器は、前記グラフビルダが構築した前記グラフから前記凝縮されたグラフを生成し、前記凝縮されたグラフをキャッシュする、装置。
【請求項2】
前記グラフビルダは、構築ポリシーに従って前記グラフを構築し、前記構築ポリシーに合致しない機械学習処理を退避させ、前記退避させた機械学習処理を実行のために即座にディスパッチする、請求項1に記載の装置。
【請求項3】
前記凝縮されたグラフの再利用率が閾値より低い場合、前記グラフキャッシュマネージャは、前記グラフ実行器に前記直接実行モードに戻るように通知する、請求項1または2に記載の装置。
【請求項4】
前記グラフ実行器は、前記グラフキャッシュマネージャが前記凝縮されたグラフが利用可能であると判定することに応答して、前記凝縮されたグラフをフェッチする、請求項1から3のいずれか一項に記載の装置。
【請求項5】
前記グラフキャッシュマネージャは、前記識別されたグラフのハッシュに基づきルックアップを実行して、前記凝縮されたグラフが利用可能であるか否かを判定する、請求項1から4のいずれか一項に記載の装置。
【請求項6】
前記テンソルマネージャは、前記テンソルに関連付けられたカウンタを初期化し、前記テンソルを前記応答として前記提供することに応答して、前記テンソルに関連付けられた前記カウンタをデクリメントする、請求項1からのいずれか一項に記載の装置。
【請求項7】
前記テンソルマネージャは、前記テンソルを解放するためのリクエストに応答して、前記テンソルに関連付けられた前記カウンタをデクリメントする、請求項に記載の装置。
【請求項8】
前記テンソルマネージャは、前記凝縮されたグラフを実行して前記テンソルを生成することに応答して、前記テンソルに関連付けられた前記カウンタをインクリメントする、請求項に記載の装置。
【請求項9】
Webブラウザ内で動作する少なくとも1つのプロセッサに、少なくとも、
機械学習処理が遅延された実行モードを用いて実行されるべき場合に、前記機械学習処理をグラフとして蓄積する手順と、
まだ利用可能でなく且つ前記機械学習処理に関連付けられていないテンソルにアクセスするためのリクエストに応答して、前記テンソルに基づき前記グラフを識別する手順と、
前記識別されたグラフに対応する凝縮されたグラフが利用可能であるか否かを判定する手順と、
前記凝縮されたグラフが利用可能ではないと判定することに応答して、前記凝縮されたグラフを生成する手順と、
前記凝縮されたグラフを実行して前記テンソルを生成する手順と、
前記テンソルを、前記テンソルにアクセスするための前記リクエストに対する応答として提供する手順と、を実行させるための、プログラムであって、
前記少なくとも1つのプロセッサに、
前記リクエストに関連付けられた情報に基づき、前記機械学習処理が直接実行モードまたは前記遅延された実行モードのどちらで実行されるべきかを判定する手順と、
前記機械学習処理が前記直接実行モードを用いて実行されるべきという判定に応答して、前記機械学習処理を実行する手順と、
前記機械学習処理が前記遅延された実行モードを用いて実行されるべきという判定に応答して、前記機械学習処理を蓄積して前記グラフを構築し、前記グラフから前記凝縮されたグラフを生成し、前記凝縮されたグラフをキャッシュする手順と、を実行させるための、プログラム。
【請求項10】
前記少なくとも1つのプロセッサに、構築ポリシーに従って前記グラフを構築し、前記構築ポリシーに合致しない機械学習処理を退避させ、前記退避させた機械学習処理を実行のために即座にディスパッチする手順を実行させるための、請求項9に記載のプログラム。
【請求項11】
前記少なくとも1つのプロセッサに、前記凝縮されたグラフの再利用率が閾値より低い場合、前記直接実行モードに戻る手順を実行させるための、請求項9または10に記載のプログラム。
【請求項12】
前記少なくとも1つのプロセッサに、前記凝縮されたグラフが利用可能であると判定することに応答して、前記凝縮されたグラフをフェッチする手順を実行させるための、請求項9から11のいずれか一項に記載のプログラム。
【請求項13】
前記少なくとも1つのプロセッサに、前記識別されたグラフのハッシュに基づきルックアップを実行して、前記凝縮されたグラフが利用可能であるか否かを判定する手順を実行させるための、請求項9から12のいずれか一項に記載のプログラム。
【請求項14】
前記少なくとも1つのプロセッサに、前記テンソルに関連付けられたカウンタを初期化する手順と、
前記テンソルを前記応答として前記提供することに応答して、前記テンソルに関連付けられた前記カウンタをデクリメントする手順と、を実行させるための、請求項から13のいずれか一項に記載のプログラム。
【請求項15】
前記少なくとも1つのプロセッサに、前記テンソルを解放するためのリクエストに応答して、前記テンソルに関連付けられた前記カウンタをデクリメントする手順を実行させるための、請求項14に記載のプログラム。
【請求項16】
前記少なくとも1つのプロセッサに、前記凝縮されたグラフを実行して前記テンソルを生成することに応答して、前記テンソルに関連付けられた前記カウンタをインクリメントする手順を実行させるための、請求項14に記載のプログラム。
【請求項17】
Webブラウザ環境内で動作する、機械学習モデルを処理するための装置であって、
機械学習処理が遅延された実行モードを用いて実行されるべき場合に、前記機械学習処理をグラフとして蓄積するグラフ構築手段と、
まだ利用可能でなく且つ前記機械学習処理に関連付けられていないテンソルにアクセスするためのリクエストに応答して、前記テンソルに基づき前記グラフを識別するための管理手段と、
前記識別されたグラフに対応する凝縮されたグラフが利用可能であるか否かを判定する手段と、
前記判定する手段が、前記凝縮されたグラフが利用可能ではないと判定することに応答して、前記凝縮されたグラフを生成するための凝縮手段と、
前記テンソルを生成すべく前記凝縮されたグラフを実行するグラフ実行手段と、を備え
前記管理手段は前記テンソルを、前記テンソルにアクセスするための前記リクエストに対する応答として提供し、
前記グラフ実行手段は、前記リクエストに関連付けられた情報に基づき、前記機械学習処理が直接実行モードまたは前記遅延された実行モードのどちらで実行されるべきかを判定し、
前記機械学習処理が前記直接実行モードを用いて実行されるべきという判定に応答して、前記グラフ実行手段は、前記機械学習処理を実行し、
前記機械学習処理が前記遅延された実行モードを用いて実行されるべきという判定に応答して、前記グラフ実行手段は、前記機械学習処理を、前記グラフ構築手段に送信し、前記グラフ構築手段は、前記グラフ実行手段から受信した前記機械学習処理を蓄積して前記グラフを構築し、前記凝縮手段は、前記グラフ構築手段が構築した前記グラフから前記凝縮されたグラフを生成し、前記凝縮されたグラフをキャッシュする、装置。
【請求項18】
前記グラフ構築手段は、構築ポリシーに従って前記グラフを構築し、前記構築ポリシーに合致しない機械学習処理を退避させ、前記退避させた機械学習処理を実行のために即座にディスパッチする、請求項17に記載の装置。
【請求項19】
前記凝縮されたグラフの再利用率が閾値より低い場合、前記判定する手段は、前記グラフ実行手段に前記直接実行モードに戻るように通知する、請求項17または18に記載の装置。
【請求項20】
前記判定する手段が、前記凝縮されたグラフが利用可能であると判定することに応答して、前記凝縮されたグラフをフェッチする、請求項17から19のいずれか一項に記載の装置。
【請求項21】
前記判定する手段が、前記識別されたグラフのハッシュに基づきルックアップを実行することにより、前記凝縮されたグラフが利用可能であるか否かを判定する、請求項17から20のいずれか一項に記載の装置。
【請求項22】
前記グラフ実行手段は、前記判定する手段が前記機械学習処理は直接実行モードを用いて実行されるべきであると判定することに応答して、前記機械学習処理を実行する、請求項17から21のいずれか一項に記載の装置。
【請求項23】
Webブラウザ環境内で機械学習モデルを処理する方法であって、
機械学習処理が遅延された実行モードを用いて実行されるべき場合に、前記機械学習処理をグラフとして蓄積する段階と、
まだ利用可能でなく且つ前記機械学習処理に関連付けられていないテンソルにアクセスするためのリクエストに応答して、前記テンソルに基づき前記グラフを識別する段階と、
前記識別されたグラフに対応する凝縮されたグラフが利用可能であるか否かを判定する段階と、
前記凝縮されたグラフが利用可能ではないと判定することに応答して、前記凝縮されたグラフを生成する段階と、
前記テンソルを生成すべく前記凝縮されたグラフを実行する段階と、
前記テンソルを、前記テンソルにアクセスするための前記リクエストに対する応答として提供する段階と、を備え
前記リクエストに関連付けられた情報に基づき、前記機械学習処理が直接実行モードまたは前記遅延された実行モードのどちらで実行されるべきかを判定する段階と、
前記機械学習処理が前記直接実行モードを用いて実行されるべきという判定に応答して、前記機械学習処理を実行する段階と、
前記機械学習処理が前記遅延された実行モードを用いて実行されるべきという判定に応答して、前記機械学習処理を蓄積して前記グラフを構築し、前記グラフから前記凝縮されたグラフを生成し、前記凝縮されたグラフをキャッシュする段階と、をさらに備える、方法。
【請求項24】
構築ポリシーに従って前記グラフを構築し、前記構築ポリシーに合致しない機械学習処理を退避させ、前記退避させた機械学習処理を実行のために即座にディスパッチする段階をさらに備える、請求項23に記載の方法。
【請求項25】
前記凝縮されたグラフの再利用率が閾値より低い場合、前記直接実行モードに戻る、請求項23または24に記載の方法。
【請求項26】
前記凝縮されたグラフが利用可能であると判定することに応答して、前記グラフの前記凝縮されたバージョンをフェッチする段階をさらに備える、請求項23から25のいずれか一項に記載の方法。
【請求項27】
前記識別された凝縮されたグラフが利用可能であるか否かを判定する前記段階が、前記識別されたグラフのハッシュに基づきルックアップを実行する段階を含む、請求項23から26のいずれか一項に記載の方法。
【請求項28】
前記テンソルに関連付けられたカウンタを初期化する段階と、
前記テンソルを前記応答として提供する前記段階に応答して、前記テンソルに関連付けられた前記カウンタをデクリメントする段階と、をさらに備える、請求項23から27のいずれか一項に記載の方法。
【請求項29】
前記テンソルを解放するためのリクエストに応答して、前記テンソルに関連付けられた前記カウンタをデクリメントする段階をさらに備える、請求項28に記載の方法。
【請求項30】
前記テンソルを生成すべく前記凝縮されたグラフを実行する前記段階に応答して、前記テンソルに関連付けられた前記カウンタをインクリメントする段階をさらに備える、請求項28に記載の方法。
【請求項31】
請求項から16のいずれか一項に記載のプログラムを記憶した非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は概して機械学習に関し、より具体的には、Webブラウザ環境内で機械学習モデルを処理するための方法および装置に関する。
【背景技術】
【0002】
コンピューティング業界においては、機械学習(ML)ワークロード、とりわけディープラーニング(DL)モデルを、サーバデバイスではなくエンドユーザエッジデバイスに展開する傾向がある。より最近になって、機械学習ワークロードが、Webブラウザ環境内のエンドユーザエッジデバイスに提供されている。場合によっては、中央処理装置(CPU)からグラフィックプロセッシングユニット(GPU)または他の回路に計算をオフロードすることによって、DL計算が当該エッジデバイスにおいて達成される。
【図面の簡単な説明】
【0003】
図1】Webブラウザ環境内で機械学習タスクを実行するための例示的なアーキテクチャを示す。
【0004】
図2】テンソルデータにアクセスするための処理を実行する例示的なWebNN実装のタイムラインである。
【0005】
図3】動的実行パスを含む例示的な動的計算グラフを示す。
【0006】
図4】例示的な遅延された実行戦略を示す。
【0007】
図5図1のWebNNコントローラの例示的な実装を表わすブロック図である。
【0008】
図6図5の例示的なグラフ実行器を実装すべく実行されてよい例示的な機械可読命令を表わすフローチャートである。
【0009】
図7図5の例示的なテンソルマネージャを実装すべく実行されてよい例示的な機械可読命令を表わすフローチャートである。
【0010】
図8】凝縮されたグラフの投機的実行を提供すべく実装されてよい例示的な機械可読命令を表わすフローチャートである。
【0011】
図9】キャッシュされたグラフを実行すべく実装されてよい例示的な機械可読命令を表わすフローチャートである。
【0012】
図10】グラフの入力テンソル、隠れテンソルおよび出力テンソルを表わすブロック図である。
【0013】
図11】テンソル、処理およびグラフのライフサイクルを追跡するためのカウンタ値を表わすテーブルである。
【0014】
図12】凝縮されたグラフの入力テンソルおよび出力テンソルを表わすブロック図である。
【0015】
図13図1および/または図5のWebNNコントローラを実装するための図6、7、8および/または9の命令を実行するよう構造化された例示的なプロセッサプラットフォームのブロック図である。
【0016】
図面は縮尺通りではない。概して、同一の部材または類似の部材を参照すべく、図面および添付の記述された説明を通して同一の参照番号が用いられる。
【0017】
本明細書において、別個に参照されてよい複数の要素またはコンポーネントを識別するとき、「第1」、「第2」、「第3」等の記述子が用いられる。別途の指定がない限り、あるいは、これらの用いられる文脈に基づき別途理解されない限り、かかる説明は、優先順位、リスト内の物理的順序若しくは配置、または時間における順序の意味に帰属される意図はなく、開示される例を理解しやすいように、複数の要素またはコンポーネントを別個に参照するためのラベルとして用いられるに過ぎない。いくつかの例において、「第1」という記述子は、詳細な説明においてある要素を言及するために用いられてよい一方、同一の要素が、特許請求の範囲において、「第2」または「第3」等の異なる記述子を用いて言及されてよい。このような例においては、かかる記述子は、複数の要素またはコンポーネントを言及しやすくするために用いられているに過ぎないことを理解されたい。
【発明を実施するための形態】
【0018】
DL(ディープラーニング)アプリケーションが、イメージ認識、自然言語処理および戦略ゲームアプリケーションにおいてますます重要となり、広く適用されている。そのグローバルリーチ、規模の経済およびクロスプラットフォームの性質のおかげで、Webプラットフォームは、多くのウェブ開発者にとって最大規模アプリケーション開発プラットフォームとなっている。Webブラウザ内でDLアプリケーションを展開するという増大しつつあるニーズに対処すべく、TensorFlow.jsおよびONNX.js等のJavaScript(登録商標)(JS)ベースのDLフレームワークが出現しており、新しいWeb規格であるWebニューラルネットワークAPI(WebNN)が、すべての主要なブラウザベンダからのサポートにより、WebコミュニティグループのW3C機械学習に生み出されつつある。
【0019】
図1は、Webブラウザ環境内で機械学習タスクを実行するための例示的なアーキテクチャの図である。JavaScript(登録商標)ベースのディープラーニングフレームワーク(例えば、TensorFlow.jsを含む)は一般に、使いやすさおよび柔軟性の両方を提供すべく階層化設計を用いる。図1に図示の通り、レイヤアプリケーションプログラミングインタフェース(API)115は、開発者がディープニューラルネットワーク(DNN)処理の静的計算グラフを表わすJavaScript(登録商標)命令110を記述できるようにする。静的計算グラフは、事前定義された処理を編成する。さらに下のレベルのオペレーションAPI(Ops API)120は、コアデータ構造体(例えば、テンソル)および当該データ構造体に対し実行されるべき計算(例えば、畳み込み演算)を表わすDNN処理のセットを提供する。レイヤAPI 115によって構築された静的計算グラフはす処理API 120を用いて、各レイヤの処理を実行することにより、当該計算を遂行する。処理API 120は、Eagerモードで処理を実行する。Eagerモードでは、ある処理が呼び出されたとき、機械学習処理の計算(例えば、実行)が即座に行われる。その下で、処理API 120が、異なるweb API実装をサポートする1または複数の異なるコントローラを用いるように構造化される。バックエンド 122(例えば、コントローラおよび/またはそれらの各インタフェースのうちの1または複数)は、処理API120の命令で処理を実行する。図1に示される例において、処理API 120は、WebGL/WebGPUインタフェース125、WebAssemblyインタフェース127およびWebNNインタフェース130を用いて、それぞれWebGL/WebGPUコントローラ135、WebAssemblyコントローラ137およびWebNNコントローラ140とのやり取りを可能にする。
【0020】
いくつかの例において、異なるコントローラが異なる目的のために、および/または、異なるハードウェア上での実行のために構造化される。WebAssemblyコントローラ137は、Webブラウザ内で直接実行されるC/C++コンパイル済みバイトコードをサポートする。例示的なWebGL/WebGPUコントローラ135は、GPUの並列実行ユニットへのシェーディング言語アクセスを提供する。このようにして、例示的なWebAssemblyコントローラ137および例示的なWebGL/WebGPUコントローラ135は、特定のハードウェアデバイス(例えば、モバイルデバイス、デスクトップコンピュータ、タブレットコンピュータ等)のために汎用コンピューティングプリミティブを呈する。JavaScript(登録商標)ベースのフレームワークのWebAssemblyまたはWebGL/WebGPUのバックエンドが用いられる場合、Webブラウザ(例えば、ユーザアプリケーション)は、機械学習処理の知識を有しない。
【0021】
コントローラ127および137はEagerモードで動作するので、従って、機械学習処理の実行結果を実行しおよび戻すことにより、当該機械学習処理の実行のあらゆるリクエストに即座に応答することを試みる。上記の通り、グラフは、実行されるべき処理の順序付けられたセットを形成する複数の異なる機械学習処理を伴ってよい。第1の機械学習処理からの出力(例えば、テンソル)は通常、第2の機械学習処理への入力として提供される。しかしながら、前のアーキテクチャにおいては、処理APIが実行されるべき次の処理を判定できるように、第1の処理からの出力はコントローラ127、137によって処理APIまで戻され、その出力(例えば、テンソル)は次にコントローラ127、137へと戻され、後続の処理への入力として用いられる。このような態様における出力(例えば、テンソル)データを行きつ戻りつ渡すことには、大きな通信オーバヘッドが含まれる。
【0022】
本明細書に開示する通り、WebNNコントローラ140が、遅延された態様での機械学習処理の実行を可能にする。遅延された態様で処理される場合、WebNNコントローラ140は、入力および/または出力の構造を認識できるようになり、ある処理から次の処理へと内部的に機械学習処理の結果(例えば、テンソル)を渡すことができ、その際、WebNNコントローラ140は、最終処理が完了するおよび/または最終テンソルがリクエストされるまで、かかる結果をWebNNコントローラ140の外部へ提供する必要はない。また、リクエストされると、このような内部テンソルデータを提供できる応力も提供される。
【0023】
本明細書に開示される例において、例示的なWebNNコントローラ140は、テンソル、畳み込み、プーリング、全結合、活性化等といった機械学習プリミティブを呈示する。このようにして、WebNNコントローラ140は、処理の実行時に機械学習プリミティブを呼び出し可能である。Webブラウザ内での素朴な(ナイーブ)WebNN実装は故にWebNN DNNプリミティブを、ネイティブDNNプリミティブにマッピングしてよく、即座にネイティブ実行を呼び出してよい。以下に、WebNNコントローラ140を実装する例示的なアプローチが、図5に関しさらに詳細に開示される。
【0024】
図2は、図1のWebNNコントローラ140によって計算されるテンソルデータにアクセスするための処理を実行する例示的なWebNN実装のタイムライン200である。図2の例示的なタイムライン200は、JavaScript(登録商標)スレッド205およびWebNNスレッド210を表わす。例示的なJavaScript(登録商標)スレッド205は、単一のスレッドとして実装される。その結果、JavaScript(登録商標)スレッドは、ページレイアウトおよびイベント処理等の、Webブラウザによって実行されるべき他のタスクと共有される。結果的に、JavaScript(登録商標)機能を長時間実行することで、ページングの低速化またはユーザイベント処理の遅延を引き起こす可能性がある。向上されたユーザインタフェースおよび/またはユーザ体験を提供すべく、本明細書に開示されるJavaScript(登録商標)ベースのDLフレームワークは、一部の処理をWebNNスレッド210に渡すことで、処理の非同期的実行を実行する。例示的なJavaScript(登録商標)スレッド205は、二次元畳み込み(Conv2D)処理210、事前ベイジアンネットワーク(Pre‐BN)処理220、正規化線形ユニット(RELU)処理230、アイドル時間240およびTensor.dataデータ取得処理250を含む。例示的なWebNNスレッド210は、Conv2D処理212、事前BN処理222、ReLU処理232およびTensor.dataデータ取得処理252を含む。
【0025】
Conv2D 212等の処理は意図的に非同期であり、そのデータがまだ計算されていない可能性のあるテンソルを戻す。当該処理は、WebNNコントローラ140により非同期的に実行されるべく、処理API 120によってWebNNスレッド210にディスパッチされる。このようにして、例示的なWebNNスレッド210は、JavaScriptスレッド205を実行するハードウェアとは別個のハードウェアによって実行されてよい(例えば、別のCPUコア、別個のGPU、別個のアクセラレータ等)。その結果、JavaScript(登録商標)スレッド205は、他のタスクを処理すべく解放される。その後、ユーザコード(例えば、JavaScript(登録商標)命令110)がテンソルを支援するデータを取得する(例えば、Tensor.data250を取得する)必要がある場合、JavaScript(登録商標)ベースのスレッド205は、WebNNスレッド210に対し(例えば、WebNNコントローラ140に対し)当該データをリクエストする。JavaScript(登録商標)ベースのスレッド205は、実行の完了を待機してよく、当該データをユーザコード(例えば、ブラウザ内に表示されるWebページ)に戻してよい。
【0026】
図3は、動的実行パスを含む例示的な動的計算グラフ300を示す。図3の例示的なグラフ300は、第1のノード305、第2のノード310、第3のノード312、第4のノード320、第5のノード322、第6のノード324および第7のノード326を含む。本明細書に開示される例において、1つのノードは、実行されるべき機械学習処理を表わす。例示的な実行パス330は、第1のノード305、第3のノード312および第6のノード324を含む実行のパスを示す。既存の直接実行アプローチでは、各ノードはシーケンスで実行され、前のノードの処理の完了後にパス内の次のノードが選択される。しかしながら、このようなアプローチでは、動的計算グラフの性能を改善する機会を逸する。例えば、動的計算グラフのためのクロス反復の変更(例えば、ある反復から次の反復の間にグラフ内の異なるパスが選択される可能性)は、重要でない可能性がある。しばしば、グラフを通る選択されたパスは、経時的に変更されない。故に、グラフの少なくとも一部が動的に凝縮され、重複機能/命令を再度実行することなく、凝縮の結果が将来の反復で再利用される場合、グラフの実行の性能が改善されてよい。
【0027】
図4は、例示的な遅延実行戦略400を示す。第1のフェーズ410において、動的実行パス330沿いのノードが識別される(例えば、第1のノード305、第3のノード312および第6のノード324)。第2のフェーズ420において、ノード422、424、426、428の可能な組み合わせが識別される。凝縮(例えば、最適化)のために、動的実行パス330を表わすノードの組み合わせ(例えば、組み合わせ426)が選択される。第3のフェーズ430において、選択されたノード426の組み合わせの凝縮されたバージョン432が実行される。
【0028】
このように、遅延された評価および動的最適化技術が組み合わされる。遅延された評価は、凝縮(例えば、最適化)の機会を可能にする。というのは、遅延された実行は、遅延された実行がトリガされる前に、機械学習処理の蓄積およびそれらへの凝縮(例えば、最適化)の適用を可能にするからである。動的最適化は、グラフを動的に構築および凝縮し、将来の利用のために凝縮された(例えば最適化された)グラフをキャッシュする。本明細書に開示される例示的なアプローチは、ディスパッチされた機械学習処理を受信し、且つ、実行を凝縮する(例えば、最適化する)WebNN処理実行インタフェースにおいて動作する。
【0029】
図5は、図1のWebNNコントローラ140の例示的な実装を表わすブロック図である。図5に示された例の例示的なWebNNコントローラ140は、テンソルマネージャ510、テンソルメモリ515、グラフ実行器520、グラフビルダ530、グラフ凝縮器540、グラフキャッシュマネージャ550およびグラフキャッシュ555を含む。
【0030】
例示的なテンソルマネージャ510は、テンソルへのアクセス、テンソルの作成およびテンソルデータにアクセスすべく、ユーザによるテンソルの解放(および/またはユーザのリクエスト時に実行されるアプリケーション)を可能にするアプリケーションプログラミングインタフェース(API)を実装する。例示的なテンソルマネージャ510は、テンソルのライフサイクルを維持し(例えば、テンソルデータの格納を管理する)、テンソルを遅延された機械学習処理に関連付ける。
【0031】
いくつかの例において、テンソルマネージャ510は、テンソルを管理する手段を実装する。図5に示された例の例示的なテンソルマネージャ510は、例えばハードウェアプロセッサ等のロジック回路によって実装される。しかしながら、追加的にまたは代替的に、任意の他のタイプの回路が用いられてテンソルマネージャ510を実装してよく、例えば、1または複数のアナログ若しくはデジタル回路、ロジック回路、プログラマブルプロセッサ、特定用途向け集積回路(ASIC)、プログラマブルロジックデバイス(PLD)、フィールドプログラマブルロジックデバイス(FPLD)、デジタル信号プロセッサ(DSP)、粗視化低精度アーキテクチャ(CGRA)、イメージ信号プロセッサ(ISP)等が挙げられる。
【0032】
図5に示された例の例示的なテンソルメモリ515は、テンソルマネージャ510の命令で、テンソルデータおよび/またはオブジェクトを格納する。本明細書で用いられるテンソルとは、データおよび当該データの説明を含むデータオブジェクトである。テンソルの説明には、形状および/またはテンソルデータを記述する他のメタデータ等の情報が含まれる。テンソルは、メモリ(例えば、テンソルメモリ515)によって支援される。本明細書に開示される例において、テンソルデータは、テンソルマネージャ510を介してのみアクセス可能である。いくつかの例において、テンソルオブジェクトは、第2の処理の出力テンソルとして再利用されて、テンソルを支援するメモリリソースの再利用を可能にしてよい。このようないくつかの例においては、例示的なテンソルマネージャ510は、元のテンソルを解放し、再利用されるテンソルのために新しいテンソルを作成する。
【0033】
図5に示された例の例示的なテンソルメモリ515は、データを格納するための任意のメモリ、記憶デバイス、および/または、記憶ディスクにより実装され、例えばフラッシュメモリ、磁気媒体、光学媒体、ソリッドステートメモリ、ハードドライブ、サムドライブ等である。さらに、例示的なテンソルメモリ515内に格納されるデータは、例えば、バイナリデータ、カンマ区切りデータ、タブ区切りデータ、構造化クエリ言語(SQL)構造体等の任意のデータフォーマットであってよい。示される例においては、テンソルメモリ515は単一のデバイスとして示される一方で、本明細書で説明される例示的なテンソルメモリ515および/または任意の他のデータ記憶デバイスは、任意の数および/またはタイプのメモリで実装されてよい。
【0034】
例示的なグラフ実行器520は、テンソル入力および出力を持つ1または複数の機械学習処理を受け取り、実行する。このような機械学習処理は、機械学習処理を実行するためのリクエストに関連付けられた情報に基づき、直接実行モードで、または、遅延された実行モードで実行されてよい。例示的なグラフ実行器520は、機械学習処理が、直接実行モードまたは遅延された実行モードのどちらで実行されるかを判定する。直接実行モード下での実行時、例示的なグラフ実行器520は、提供された機械学習処理を直接に実行する。いくつかの例において、機械学習処理を実行するための受信されたリクエストは、複数の機械学習処理を参照してよい。遅延された評価モード下での実行時、グラフ実行器520は、機械学習処理を即座に実行する代わりに、グラフを構築するために機械学習処理を例示的なグラフビルダ530に送信する。例示的なグラフビルダ530は、機械学習処理を蓄積して、シーケンス(グラフで表される)を形成する。
【0035】
当該シーケンスの実行は、後でトリガされてよい。例示的なグラフ実行器520は、グラフの処理(例えば、WebNNインタフェース130を介してリクエストされるような)またはグラフの凝縮された(例えば最適化された)バージョン(例えば、グラフビルダ530によって構築されるような、および/または、グラフ凝縮器540によって修正されるような)を実行する。
【0036】
いくつかの例において、グラフ実行器520は、機械学習処理を実行する手段を実装する。図5に示された例の例示的なグラフ実行器520は、例えばハードウェアプロセッサ等のロジック回路によって実装される。しかしながら、追加的にまたは代替的に、例えば、1または複数のアナログ若しくはデジタル回路、ロジック回路、プログラマブルプロセッサ、ASIC、PLD、FPLD、プログラマブルコントローラ、GPU、DSP、CGRA、ISP等の任意の他のタイプの回路が用いられてよい。
【0037】
例示的なグラフビルダ530は、リクエストされた機械学習(ML)処理を表わすグラフを構築し、当該グラフのライフサイクルを維持する。本明細書に開示される例において、グラフは有向非巡回グラフ(DAG)である。しかしながら、追加的または代替的に、任意の他のタイプのグラフが用いられてよい。本明細書で用いられるグラフは、概念的に、複数の機械学習処理ノードを単一のエンティティに凝縮させる。グラフ機械学習処理の入力テンソルの集まりは、グラフの入力テンソルであるとみなされる。出力テンソルである機械学習処理の集まりは、グラフの出力テンソルであるとみなされる。グラフまたは対応する凝縮された(例えば、最適化された)グラフが実行されるべきときに、出力テンソルが具現化されるであろう。例示的なグラフビルダ530は、構築ポリシーに従い、処理シーケンスからのグラフの構築の仕方を決定する。
【0038】
例示的なグラフビルダ530によって実装される単純な例示的な構築ポリシーは、2、3の処理で構成される1シーケンスにおける融合パターンを探してよく、当該シーケンス内の処理が融合パターンにマッチングしない場合、例示的なグラフビルダ530は当該シーケンス内の第1の処理を退避させ、凝縮/最適化を続行すべく新しい処理を受け付ける。退避処理は、実行のために即座にディスパッチされる。いくつかの例において、高度な構築ポリシーが用いられて、シーケンス内のいくつかの処理を即時実行する必要があるまで、閾値(例えば、最大)量の処理を保持する。いくつかの例において、ユーザコードはテンソルの内部データへのアクセスをリクエストし、アクセスは当該リクエストを遂行すべく即座に計算される必要がある。いくつかの他の例においては、処理シーケンスがサイズ制限(例えば、処理閾値)まで増大する。トポロジ実行の2つの反復の間、例示的なグラフ実行器520は同一の処理シーケンスを確認する可能性が最も高く、グラフポリシーはグラフを構築すべく同一の処理サブシーケンスを選択する。
【0039】
いくつかの例において、グラフビルダ530は、蓄積の手段を実装する。図5に示された例の例示的なグラフビルダ530は、例えばハードウェアプロセッサ等のロジック回路によって実装される。しかしながら、追加的にまたは代替的に、例えば、1または複数のアナログ若しくはデジタル回路、ロジック回路、プログラマブルプロセッサ、ASIC、PLD、FPLD、プログラマブルコントローラ、GPU、DSP、CGRA、ISP等の任意の他のタイプの回路が用いられてよい。
【0040】
例示的なグラフ凝縮器540は、グラフ内のいくつかの機械学習処理を融合する、および、修正された(例えば最適化された)グラフの作成といった最適化を実行する。いくつかの例において、グラフ凝縮器540は機械学習処理をコンパイルして、バイナリ(例えば、最適化されたバイナリ実行可能ファイル)を生成する。グラフ凝縮器540は、例示的なグラフキャッシュマネージャ550を介して、グラフキャッシュ555内に凝縮されたグラフを格納する。
【0041】
いくつかの例において、グラフ凝縮器540は、凝縮の手段を実装する。図5に示された例の例示的なグラフ凝縮器540は、例えばハードウェアプロセッサ等のロジック回路によって実装される。しかしながら、追加的にまたは代替的に、例えば、1または複数のアナログ若しくはデジタル回路、ロジック回路、プログラマブルプロセッサ、ASIC、PLD、FPLD、プログラマブルコントローラ、GPU、DSP、CGRA、ISP等の任意の他のタイプの回路が用いられてよい。
【0042】
例示的なグラフキャッシュマネージャ550は、凝縮されたグラフをキャッシュし、凝縮された(例えば最適化された)グラフのライフサイクルを管理する。例示的なグラフキャッシュマネージャ550は、グラフキャッシュ555において、次の反復で実行されるグラフのためのグラフ凝縮作業を節約する。典型的な訓練または推論プロセスにおいて、機械学習フレームワークはグラフを反復し、あらゆるノードを多数の反復において実行する。その結果、多くの場合にグラフ全体は同一のままである。グラフが入力データにより動的に変更される場合であっても、当該変更は、多数の反復において繰り返し実行される一定の動的パターンに従う。異なる動的実行パターンは、異なる凝縮されたグラフを生じさせてよい。ひとたび凝縮された(例えば最適化された)グラフが作成されると、凝縮されたグラフはキャッシュされ(例えば、グラフキャッシュ555内に)、ワークロードの最後まで再利用される。グラフキャッシュ555のサイズが制限値に到達した場合、グラフキャッシュマネージャ550キャッシュは、1または複数のグラフ(例えば、最も頻度が低く用いられるグラフ)を削除すべく、ガーベジコレクションを実行してよい。いくつかの例において、グラフキャッシュ555のサイズは、ここに格納されているグラフ(例えば、凝縮されていない、および/または、凝縮されたグラフ)の数で測定される。しかしながら、追加的にまたは代替的に、グラフキャッシュ555のサイズを表わすための任意の他のアプローチが用いられてよい。
【0043】
いくつかの例において、凝縮されたグラフの全体再利用率が閾値率より低い場合、例示的なグラフキャッシュマネージャ550は、例示的なグラフ実行器520に直接実行モードに戻るように通知してよい。
【0044】
いくつかの例において、グラフキャッシュマネージャ550は、グラフキャッシュを管理する手段を実装する。図5に示された例の例示的なグラフキャッシュマネージャ550は、例えばハードウェアプロセッサ等のロジック回路によって実装される。しかしながら、追加的にまたは代替的に、例えば、1または複数のアナログ若しくはデジタル回路、ロジック回路、プログラマブルプロセッサ、ASIC、PLD、FPLD、プログラマブルコントローラ、GPU、DSP、CGRA、ISP等の任意の他のタイプの回路が用いられてよい。
【0045】
上記の通り、例示的なグラフキャッシュ555は、グラフ実行器520によって実行されるためのグラフ(例えば、凝縮されていないグラフおよび/または凝縮されたグラフ)を格納する。故に、各グラフにつき、グラフキャッシュ555内にキャッシュされた対応する凝縮された(例えば最適化された)グラフが存在してよい。本明細書に開示される例において、グラフキャッシュ555はハッシュテーブルとして編成され、各グラフ自体が、グラフの凝縮された(例えば最適化された)バージョンを取得するためのキーである。取得速度を上げるために、機械学習処理のメタデータおよび各グラフの入力/出力テンソルからハッシュコードが計算される。凝縮されたグラフのグラフキャッシュ555への保存時に、ハッシュコードがショートカットキーとして用いられ、グラフも完全キーとして保存される。この結果、完全キーは、凝縮されたグラフを一意に識別する。同一のグラフが次の反復で実行されるとき、そのハッシュコードが用いられて、対応するハッシュバケットを探す。その後、凝縮されたグラフを取得する前に、グラフが保存されたグラフと比較するために用いられる。このようにして、グラフ実行器520は、入力テンソルおよび出力テンソルをバインドした後、グラフを完全キーとして用いて、凝縮された(例えば、最適化された)グラフを取得し、実行してよい。
【0046】
図5に示された例の例示的なグラフキャッシュ555は、データを格納するための任意のメモリ、記憶デバイス、および/または、記憶ディスクにより実装され、例えばフラッシュメモリ、磁気媒体、光学媒体、ソリッドステートメモリ、ハードドライブ、サムドライブ等である。さらに、例示的なグラフキャッシュ555内に格納されるデータは、例えば、バイナリデータ、カンマ区切りデータ、タブ区切りデータ、構造化クエリ言語(SQL)構造体等の任意のデータフォーマットであってよい。示される例においては、グラフキャッシュ555は単一のデバイスとして示される一方で、本明細書で説明される例示的なグラフキャッシュ555および/または任意の他のデータ記憶デバイスは、任意の数および/またはタイプのメモリで実装されてよい。
【0047】
図1の例示的なWebNNコントローラ140を実装する例示的な態様が図5に図示されている一方で、図4に図示された要素、プロセスおよび/またはデバイスのうちの1または複数が、任意の他のやり方で組み合わせられ、分割され、再配置され、省略され、除去され、および/または実装されてよい。さらに、例示的なテンソルマネージャ510、例示的なグラフ実行器520、例示的なグラフビルダ530、例示的なグラフ凝縮器540、例示的なグラフキャッシュマネージャ550および/または、より一般的には図5の例示的なWebNNコントローラ140は、ハードウェア、ソフトウェア、ファームウェア、並びに/または、ハードウェア、ソフトウェアおよび/またはファームウェアの任意の組み合わせで実装されてよい。故に、例えば、任意の例示的なテンソルマネージャ510、例示的なグラフ実行器520、例示的なグラフビルダ530、例示的なグラフ凝縮器540、例示的なグラフキャッシュマネージャ550、および/または、より一般的には図5の例示的なWebNNコントローラ140は、1または複数のアナログ若しくはデジタル回路、ロジック回路、プログラマブルプロセッサ、プログラマブルコントローラ、グラフィックプロセッシングユニット(GPU)、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、プログラマブルロジックデバイス(PLD)、および/または、フィールドプログラマブルロジックデバイス(FPLD)で実装されることができる。純粋にソフトウェアおよび/またはファームウェアの実装をカバーする本特許の装置クレームまたはシステムクレームを読むとき、例示的なテンソルマネージャ510、例示的なグラフ実行器520、例示的なグラフビルダ530、例示的なグラフ凝縮器540、例示的なグラフキャッシュマネージャ550、および/または、より一般的には図5の例示的なWebNNコントローラ140のうちの少なくとも1つは、ソフトウェアおよび/またはファームウェアを含め、メモリ、デジタル多用途ディスク(DVD)、コンパクトディスク(CD)、ブルーレイディスク等のような非一時的コンピュータ可読記憶デバイスまたは記憶ディスクを含むように本明細書で明示的に定義される。さらにまた、図1の例示的なWebNNコントローラ140は、図5に示されるものに加えてまたは代えて、1または複数の要素、プロセスおよび/またはデバイスを含んでよく、並びに/または、図示された要素、プロセスおよびデバイスのうち任意のものまたは全部のうちの1つより多いものを含んでよい。本明細書で用いられる、「通信して(in communication)」という文言はその変形例を含め、直接的な通信および/または1または複数の介在コンポーネントを通した間接的な通信を包含し、且つ、直接的な物理的(例えば、配線)通信および/または絶え間ない通信を必要とせず、むしろ追加的に定期的な間隔、スケジューリングされた間隔、非周期的間隔、および/または、ワンタイムイベントにおける選択的通信を含む。
【0048】
図5の例示的なWebNNコントローラ140を実装するための例示的なハードウェアロジック、機械可読命令、ハードウェア実装されたステートマシン、および/または、任意のこれらの組み合わせを表わすフローチャートが図6、7、8および/または9に図示されている。機械可読命令は、図13に関連して後述される例示的なプロセッサプラットフォーム1300に図示されたプロセッサ1312等のコンピュータプロセッサにより実行されるための1または複数の実行可能プログラムまたは実行可能プログラムの部分であってよい。プログラムは、CD-ROM、フロッピーディスク、ハードドライブ、DVD、ブルーレイディスク、またはプロセッサ1312に関連付けられたメモリ等の非一時的コンピュータ可読記憶媒体上に格納されたソフトウェアで具現化されてよいが、代替的に、プログラム全体および/またはプログラムの一部がプロセッサ1312以外のデバイスによって実行されてよく、および/または、ファームウェアまたは専用ハードウェアで具現化されてよい。さらに、例示的なプログラムが図6、7、8および/または9に図示されたフローチャートに関して説明されているが、代替的に、例示的なWebNNコントローラ140を実装する多くの他の方法が用いられてよい。例えば、ブロックの実行順序は変更されてよく、および/または、説明されたブロックの一部は変更され、除去され、または組み合わされてよい。追加的にまたは代替的に、ブロックのいずれかまたは全部が、ソフトウェアまたはファームウェアを実行せずに、対応する処理を実行するよう構造化された1または複数のハードウェア回路(例えば、ディスクリート回路並びに/または集積されたアナログおよび/またはデジタル回路、FPGA、ASIC、比較器、演算増幅器(opアンプ)、ロジック回路等)によって実装されてよい。
【0049】
本明細書に説明された機械可読命令は、圧縮フォーマット、暗号化フォーマット、フラグメンテーションフォーマット、コンパイルフォーマット、実行可能なフォーマット、パッケージフォーマット等のうちの1または複数で格納されてよい。本明細書に説明された機械可読命令は、機械実行可能命令を作成、製造および/または生成するよう用いられてよいデータ(例えば、命令の一部、コード、コード表現等)として格納されてよい。例えば、機械可読命令は、フラグメンテーションされ、1または複数の記憶デバイスおよび/またはコンピューティングデバイス(例えば、サーバ)に格納されてよい。機械可読命令は、機械可読命令をコンピューティングデバイスおよび/または他の機械によって直接読み取り可能、解釈可能および/または実行可能にすべく、インストール、修正、適合、更新、結合、補足、構成、復号化、圧縮解除、解凍、分散、再割り当て、コンパイル等のうちの1または複数を必要としてよい。例えば、機械可読命令は、複数の部分に格納されてよく、当該部分は別個のコンピューティングデバイス上に個々に圧縮され、暗号化されおよび格納され、当該部分は復号化、圧縮解除および結合されると、本明細書で説明されるようなプログラムを実装する実行可能命令のセットを形成する。
【0050】
別の例においては、機械可読命令は、機械可読命令がコンピュータに読み取られてよいが、特定のコンピューティングデバイスまたは他のデバイス上で命令を実行すべく、ライブラリ、(例えばダイナミックリンクライブラリ(DLL))、ソフトウェア開発キット(SDK)、アプリケーションプログラミングインタフェース(API)等の追加を必要とする状態で格納されてよい。別の例においては、機械可読命令および/または対応するプログラムが全体的にまたは部分的に実行可能になる前に、機械可読命令は構成(例えば、格納された設定、データ入力、記録されたネットワークアドレス等)される必要があってよい。故に、開示される機械可読命令および/または対応するプログラムは、機械可読命令および/またはプログラムの格納時または静止時若しくは移動時の特定のフォーマットまたは状態に関わらず、このような機械可読命令および/またはプログラムを包含する意図である。
【0051】
本明細書に説明された機械可読命令は、任意の過去、現在または将来の命令言語、スクリプト言語、プログラミング言語等により表されてよい。例えば、機械可読命令は、以下の言語、すなわち、C、C++、Java(登録商標)、C#、Perl、Python、JavaScript(登録商標)、ハイパーテキストマークアップ言語(HTML)、構造化クエリ言語(SQL)、Swift等のうちのいずれかを用いて表されてよい。
【0052】
上記の通り、図6、7、8および/または9の例示的なプロセスは、ハードディスクドライブ、フラッシュメモリ、リードオンリメモリ、コンパクトディスク、デジタル多用途ディスク、キャッシュ、ランダムアクセスメモリ、および/または、情報が任意の期間(例えば、延長された期間、永続的、短い間、一時的なバッファリングの間、および/または情報のキャッシュの間)格納される任意の他の記憶デバイス若しくは記憶ディスク等の非一時的コンピュータおよび/または機械可読媒体上に格納された実行可能命令(例えば、コンピュータおよび/または機械可読命令)を用いて実装されてよい。本明細書で用いられる非一時的コンピュータ可読媒体という用語は、任意のタイプのコンピュータ可読記憶デバイスおよび/または記憶ディスクを含め、および、伝搬信号を除外し、および、送信媒体を除外するよう明示的に定義される。
【0053】
「含む(including)」および「備える(comprising)」(およびそれらのすべての形態および時制)は本明細書においてオープンエンド用語として用いられる。故に、請求項が「含む(include)」または「備える(comprise)」(例えば、comprises、includes、comprising、including、having等)の任意の形態を、プレアンブルとして、またはあらゆる種類の請求項の記載内で用いるときは常に、対応する請求項または記載の範囲外とならずに、追加の要素、用語等が存在し得ることを理解されたい。本明細書で「少なくとも(at least)」という文言が、例えば請求項のプレアンブルにおいて移行句として用いられる場合、「備える(comprising)」および「含む(including)という用語がオープンエンドであるのと同様にこれはオープンエンドである。「および/または(and/or)」という用語が例えば、A、B、および/またはC等の形態で用いられる場合、例えば、(1)Aのみ、(2)Bのみ、(3)Cのみ、(4)AとB、(5)AとC、(6)BとC、および(7)AとBとCといったように、A、B、Cの任意の組み合わせまたはサブセットを指す。本明細書で「AおよびBのうちの少なくとも1つ(at least one of A and B)」という文言が構造、コンポーネント、項目、オブジェクトおよび/または物を説明する文脈で用いられる場合、(1)少なくとも1つのA、(2)少なくとも1つのB、および(3)少なくとも1つのAおよび少なくとも1つのBのうちの任意のものを含む実装を指す意図である。同様に、本明細書で「AまたはBのうちの少なくとも1つ(at least one of A or B)」という文言が構造、コンポーネント、項目、オブジェクトおよび/または物を説明する文脈で用いられる場合、(1)少なくとも1つのA、(2)少なくとも1つのB、および(3)少なくとも1つのAおよび少なくとも1つのBのうちの任意のものを含む実装を指す意図である。本明細書で「AおよびBのうちの少なくとも1つ(at least one of A and B)」という文言が、プロセス、命令、アクション、アクティビティおよび/またはステップの実施または実行を説明する文脈で用いられる場合、(1)少なくとも1つのA、(2)少なくとも1つのB、および(3)少なくとも1つのAおよび少なくとも1つのBのうちの任意のものを含む実装を指す意図である。同様に、本明細書で「AまたはBのうちの少なくとも1つ(at least one of A or B)」という文言がプロセス、命令、アクション、アクティビティおよび/またはステップの実施または実行を説明する文脈で用いられる場合、(1)少なくとも1つのA、(2)少なくとも1つのB、および(3)少なくとも1つのAおよび少なくとも1つのBのうちの任意のものを含む実装を指す意図である。
【0054】
本明細書で用いられる、単一の言及(例えば、「1つの(a)」、「1つの(an)」、「第1(first)」、第2(second)」等)は、複数を除外しない。本明細書で用いられる「1つの(a)」または「1つの(an)」という用語は、そのエンティティの1または複数を指す。本明細書において「1つの(a)」(または「1つの(an)」、「1または複数(one or more)」および「少なくとも1つ(at least one)」という用語は交換可能に用いられてよい。さらに、個々に列挙されているが、複数の手段、要素または方法アクションは、例えば単一のユニットまたはプロセッサによって実装されてよい。追加的に、異なる実施例または異なる請求項内に個々の特徴が含まれてよいものの、これらは可能性として組み合わされて、異なる実施例または異なる請求項内にこれらが含まれることは、特徴の組み合わせが実現可能ではない、および/または、有利ではないことを示唆するものではない。
【0055】
図6は、図5の例示的なグラフ実行器520を実装すべく実行されてよい例示的な機械可読命令600を表わすフローチャートである。上記の通り、例示的なグラフ実行器520は、実行APIを供給し、遅延された評価をオーケストレーションする中核コンポーネントである。グラフ実行器520が機械学習処理を実行するためのリクエストを受信したとき、図5の例示的なプロセス500が開始する。(ブロック610)例示的なグラフ実行器520は、機械学習処理が直接実行モードまたは遅延された実行モードのどちらで実行されるべきかを判定する。(ブロック620)直接実行モード下で実行される(例えば、ブロック620がDIRECTの結果を戻す)場合、例示的なグラフ実行器520は、一度に1つの機械学習処理を取得し、それを直接実行する。(ブロック630)いくつかの例において、機械学習処理を実行するための受信されたリクエストは、複数の機械学習処理を参照してよい。遅延された評価モード下で実行(例えば、ブロック620がDELAYEDの結果を戻す)される場合、機械学習処理を実行する代わりに、グラフ実行器520は、グラフを構築するために、機械学習処理を例示的なグラフビルダ530に送信する。例示的なグラフビルダ530は、機械学習処理を蓄積して、シーケンスを形成する。(ブロック640)
【0056】
その後、図6の例示的なプロセス600は終了する。以下に、図7、8および/または9に関して説明される通り、ユーザが例示的なテンソルマネージャ510 APIを介してテンソルデータにアクセスするとき、遅延された実行がトリガされて、グラフの構築および/または凝縮を生じさせる。
【0057】
図7は、例示的なテンソルマネージャ510を実装するために実行されてよい例示的な機械可読命令700を表わすフローチャートである。上記の通り、例示的なテンソルマネージャ510は、テンソルのライフサイクルを管理する。本明細書に開示される例において、各テンソルは、テンソルメモリ515内のテンソルと関連付けて格納された参照カウンタに関連付けられる。テンソルが作成される(例えば、メモリがテンソルメモリ515内のテンソルに割り当てられる)とき、テンソルに関連付けられた参照カウンタが1に初期化される(ブロック720を参照)。テンソルが機械学習処理の入力テンソルとして用いられるとき(例えば、グラフの実行中、ブロック740を参照)、ML処理はその参照を保持し、故に、テンソルに関連付けられた参照カウンタを1だけ増大させる。
【0058】
テンソルマネージャ510がテンソル処理リクエストを受信したとき、図7の示された例の例示的なプロセス700が開始する。(ブロック705)。本明細書に開示される例において、テンソル処理リクエストは、テンソルが作成されること(ブロック710)、テンソルがアクセスされること(ブロック725)、またはテンソルが解放されること(ブロック760)をリクエストしてよい。
【0059】
リクエストされた処理がテンソルを作成することである(例えば、ブロック710がYESの結果を戻す)場合、例示的なテンソルマネージャ510は、テンソルメモリ515内にテンソルを作成する。(ブロック715)。例示的なテンソルマネージャ510は、テンソルに関連付けられたカウンタを値1に初期化する。(ブロック720)。いくつかの例において、テンソルに関連付けられたカウンタは、1以外の値(例えば、ゼロ)に初期化されてよい。
【0060】
その後、例示的なテンソルマネージャ510は、テンソルメモリ管理処理を実行する。(ブロック780)。本明細書に開示される例において、テンソルに関連付けられたカウンタが閾値(例えばゼロ)以下である場合、テンソルによって用いられるメモリはクリアされ、他のテンソルおよび/またはデータに対し利用可能にされる。いくつかの例において、テンソルオブジェクトは、第2の処理の出力テンソルとして再利用されてよい。このようなアプローチは、テンソルを支援するメモリリソースの再利用を可能にする。このような例においては、例示的なテンソルマネージャ510は元のテンソルを解放し、再利用されるテンソルのための新しいテンソルを作成する。
【0061】
リクエストされた処理が、テンソルにアクセスすることである(例えば、ブロック725がYESの結果を戻す)場合、例示的なテンソルマネージャ730は、リクエストされたテンソルが利用可能かどうかを判定する。(ブロック730)テンソルが利用可能でない(例えば、ブロック730がNOの結果を戻す)場合、例示的なテンソルマネージャ510は、テンソルに関連付けられたグラフを識別する。(ブロック735)。例示的なテンソルマネージャ740は、グラフをグラフ実行器740に実行のために渡す。(ブロック740)。グラフ処理を実行するための例示的なアプローチについては、以下に図8に関して説明される。リクエストされたテンソルを生成すべくグラフを実行すると、例示的なテンソルマネージャ510はテンソル値を戻す。(ブロック745)。
【0062】
ブロック730に戻り、いくつかの例においては、遅延された実行の結果(例えば、ブロック730がYESの結果を戻す場合)、テンソルは既に計算済みであってよい。これに該当する場合、例示的なテンソルマネージャ510は、テンソル値を戻す。(ブロック745)。その後、例示的なテンソルマネージャ510は、テンソルに関連付けられた参照カウンタをデクリメントする。(ブロック750)。その後、例示的なテンソルマネージャ510は、テンソルメモリ管理を実行する。(ブロック780)。上記の通り、本明細書に開示される例において、テンソルに関連付けられたカウンタが閾値(例えばゼロ)以下である場合に、テンソルによって用いられるメモリがクリアされ、他のテンソルおよび/またはデータに対し利用可能にされる。
【0063】
図5に関し上記された通り、いくつかの例において、直接実行モードで機械学習モデルを実行すべく、機械学習処理がグラフ実行器520に提供されてよい。このような例においては、ML処理がグラフ実行器520によって即座に実行され、ML処理は入力テンソルへの参照を解放する(例えば、テンソルに関連付けられたカウンタをデクリメントする)。その結果、テンソルは直接実行モード下で迅速に解放される。対照的に、本明細書で遅延された処理と称される評価が遅延されるML処理については、テンソルマネージャ510は、入力テンソルへの参照をはるかにより長い間保持し(例えば、その出力テンソルが具現化されるまで)、これは本明細書で成熟された処理と称される。
【0064】
リクエストされた処理がテンソルを作成することである(例えば、ブロック760がYESの結果を戻す)場合、例示的なテンソルマネージャ510は、テンソルに関連付けられたカウンタをデクリメントする。(ブロック765)。テンソルが解放され、且つ遅延された処理により参照されない場合にのみ、テンソルは安全に削除され得る。その出力テンソルが削除されたとき、処理は古くなってよい。テンソルが解放される場合において、例示的なグラフ実行器520が遅延された評価モード下で実行されているときは、テンソルは削除されなくてよい。カウンタをデクリメントした後、例示的なテンソルマネージャ510は次に、テンソルメモリ管理を実行する。(ブロック780)上記の通り、本明細書に開示される例において、テンソルに関連付けられたカウンタが閾値(例えばゼロ)以下である場合、テンソルによって用いられるメモリはクリアされ、他のテンソルおよび/またはデータに対し利用可能にされる。その後、図7の例示的なプロセス700は終了するが、後続のテンソル処理リクエストを受信すると、繰り返されてよい。
【0065】
図8は、凝縮されたグラフの投機的実行を提供すべく実装されてよい例示的な機械可読命令800を表わすフローチャートである。いくつかの例において、例示的なグラフ実行器520は、複数の反復にわたり同一の凝縮されたグラフを実行する。図8は、凝縮されたグラフの投機的実行を用いる例示的な実装を表わす。グラフから別のテンソルが後で必要となる場合に、投機的実行を実行することは、完全なグラフが実行されることを可能にし、そのテンソルをより迅速に提供できるようにする。例示的なテンソルマネージャ510は、リクエストされた処理がキャッシュされたグラフに関連付けられているか否かを判定する。(ブロック805)。処理がキャッシュされたグラフに関連付けられていない場合、この投機的実行モードを用いて、例示的なグラフビルダ530は、前の実行反復によって構築されたグラフをキャッシュする。例示的なグラフ実行器520が例示的なグラフビルダ530に新しい処理を送信すると(例えば、グラフを構築する前に)、例示的なグラフビルダ530は、当該処理をキャッシュされたグラフに対し検査し、処理がキャッシュされたグラフにヒットするか(例えば、そこに含まれるか)を判定する。(ブロック810)。
【0066】
例示的なグラフビルダ530が、キャッシュされたグラフがヒットしたと判定した(例えば、ブロック815がYESの結果を戻す)場合、例示的なグラフビルダは、入力された処理のすべてがヒットしたか否かを判定する。(ブロック825)。例示的なグラフビルダ530が、キャッシュされたグラフの入力された処理のすべてがヒットした(例えば、実行されるべき)ことを検出した(例えば、ブロック825がYESの結果を戻す)場合、例示的なグラフビルダ530は、例示的なグラフ実行器520をトリガして、キャッシュされたグラフを完全キーとして用いて、凝縮された(例えば、最適化された)グラフを実行させる。(ブロック830)。これは、ターゲットテンソルへのアクセス時に、例示的なテンソルマネージャ510によってトリガされるものに先行して、凝縮された(例えば、最適化された)グラフの実行をトリガする。例示的なグラフ実行器520は、別のCPUコアまたはGPU等のoff‐CPUデバイスを活用することにより、凝縮されたグラフを非同期的に実行する。凝縮されたグラフの実行の完了を待機することなく、例示的なグラフ実行器520は、新しい処理を受け入れること、および、例示的なグラフビルダ530への送信を続けることができる。その後、例示的なグラフ実行器520は、グラフの構築(ブロック807)をトリガして、追加的に受信した機械学習処理に基づき、グラフが再構築されることを可能にする。
【0067】
例示的なグラフビルダ530は、その構築ポリシーに従い、処理シーケンスからのグラフをどのように構築(例えば、有向非巡回グラフ、これはDAGと称されることもある)するかを決定する。例示的な構築ポリシーは、2、3の処理で構成されるシーケンス内の融合パターンを探してよい。例えば、シーケンス内の処理が融合パターンにマッチングしない場合、例示的なグラフビルダ530は、シーケンス内の第1の処理を再試行してよく、新しい処理を受け入れてピープホール最適化を継続してよい。その後、退避処理が実行のために即座にディスパッチされてよい。いくつかの例において、高度な構築ポリシーは、シーケンス内のいくつかの処理を即時に実行する必要があるまで、最大量の処理を保持し得る。いくつかの例において、ユーザコードはテンソルの内部データへのアクセスをリクエストしてよく、テンソルがその後、即座に計算される必要がある。いくつかの他の例において、処理シーケンスは閾値サイズ制限まで増大する。トポロジ実行の2つの反復の間、例示的なグラフ実行器520は同一の処理シーケンスを確認する可能性が最も高く、グラフポリシーはグラフを構築すべく同一の処理サブシーケンスを選択した。
【0068】
処理がキャッシュされたグラフにミスする(例えば、ブロック815がNOの結果を戻す)場合、例示的なグラフビルダ530は、キャッシュされたグラフを削除する(ブロック840)。例示的なグラフビルダ530は、キャッシュされたグラフの実行がトリガされたか否かを判定する。(ブロック845)。実行がトリガされていた(例えば、ブロック845がYESの結果を戻す)場合、例示的なグラフビルダ530は、例示的なグラフ実行器520に対し、凝縮された(例えば、最適化された)グラフの非同期的実行をキャンセルするよう通知する。(ブロック850)。そうでない場合(例えば、ブロック845がNOの結果を戻す場合)、例示的なグラフビルダ530は、例示的なテンソルマネージャ510がターゲットテンソルアクセス時に最終的にグラフをフェッチするまで、例示的なグラフ実行器520により送信された新しい処理を検査し続ける。例示的なテンソルマネージャ510は、例示的なグラフ実行器520をトリガしてグラフを実行させる。例示的なグラフ実行器520は、例示的なグラフビルダ530によりトリガされた非同期的グラフ実行とグラフをチェックする。それらが同一である場合、例示的なグラフ実行器520は、前の非同期的グラフ実行の完了を待機する。
【0069】
図9は、キャッシュされたグラフを実行するよう実装されてよい例示的な機械可読命令900を表わすフローチャートである。図9の例示的なプロセス900は、例示的なグラフ実行器キャッシュマネージャ550が、グラフキャッシュ555から、実行のためのグラフをフェッチするとき開始する。(ブロック910)。
【0070】
例示的なテンソルマネージャ510は、グラフの任意の入力テンソルのカウンタをインクリメントする。(ブロック920)。例示的なグラフ実行器520はグラフを調査して、動的情報を収集し(ブロック930)、その後グラフの凝縮されたバージョンが利用可能か否かの判定を試行する。(ブロック940)。本明細書に開示される例において、グラフを完全キーとして用いて、グラフの凝縮されたバージョンが利用可能か否かの判定を試行する。取得が成功しない場合(例えば、ブロック940がNOの結果を戻す)、例示的なグラフ凝縮器540は、凝縮された(例えば、最適化された)グラフを生成する。(ブロック950)。凝縮されたグラフを生成すべく、例示的なグラフ凝縮器540は、より効率的な計算を用いるべく、複数の処理を1つに融合させる、処理を並べ替える、および/または、機械学習処理を変換するのうち少なくとも1つを行う。いくつかの例において、例示的なグラフ凝縮器540は、機械学習処理をコンパイルし、バイナリ(例えば、最適化されたバイナリ)を生成する。例示的なグラフ実行器520は、初期のプロファイリングステージを凝縮された実行ステージへ切り替えるときを決定する。例示的なグラフキャッシュマネージャ550は、グラフキャッシュ555内に例示的な凝縮されたグラフを格納する。(ブロック960)。
【0071】
ブロック940に戻り、凝縮されたグラフが利用可能な場合(例えば、ブロック940がYESの結果を戻す)、例示的なグラフキャッシュマネージャ550は凝縮されたグラフをフェッチする。(ブロック970)。その後、例示的なグラフ実行器520は、凝縮されたグラフを実行し、それらの戻された値で出力テンソルを具現化する。(ブロック980)。その後、図9の例示的なプロセス900は終了するが、キャッシュされたグラフを実行すべく繰り返されてよい。
【0072】
図10は、グラフの入力テンソル、隠れテンソル、および出力テンソルを表わすブロック図1000である。図10の示される例において、グラフ1010は、第1の処理1050、第2の処理1060、第3の処理1070、および第4の処理1080を含む。処理1050、1060、1070、1080は、例えばドロップアウト処理、畳み込み処理、バッチ正規化処理、正規化線形ユニット活性化関数(ReLu)等を含む様々な機械学習処理を表わす。
【0073】
いくつかの例において、ある処理からもたらされるテンソルの一部が、ユーザコードに提供(例えば、具現化)される。いくつかの他の例において、このようなテンソルは、ユーザコードに提供される必要はない。いくつかのこのような例において、不要なテンソルの具現化は、大きな計算コストを伴う。故に、グラフの外部で(例えば、ユーザコードによって)用いられない出力テンソルについては、グラフは、テンソルデータをオンザフライで生成および使用すべく凝縮され得るが、それらを具現化することは決してない(例えば、決してこれらのテンソルをユーザコードに提供しない)。本明細書に開示される例において、このような中間テンソルは、隠れテンソルと称される。例示的なグラフ実行器520は、出力テンソルの使用率を追跡し、その初期プロファイル実行において隠れテンソルを認識する。グラフが実行された後、出力テンソルが使用前に解放される場合、テンソルは隠れテンソルとしてマークされる。この初期の動的情報を用いて、グラフのいくつかのテンソルは削除される。
【0074】
本明細書に開示される例において、グラフは遅延された機械学習処理の動的実行パスを表わすので、そのグラフは一時的である。しかしながら、対応する凝縮されたグラフが構築された後、グラフは即座に解放できない。というのは、隠れテンソルが任意の後の時点でアクセスされ得るからである。実装に応じ、隠れテンソルは、即座に、または、各反復の終了時に解放されてよいが、隠れテンソルはメモリリークを回避すべく最終的に解放される必要がある。すべてのその隠れテンソルが解放されるとき、すべての処理は、成熟となるまたは古くなるのいずれかであり、グラフは入力テンソルへの参照を保持していない。このとき、グラフおよび任意の隠れテンソルは、削除しても安全である(図7のブロック780で実行されるテンソル管理の一部として削除される)。
【0075】
図11は、テンソル、処理およびグラフのライフサイクルを追跡するためのカウンタ値を表わすテーブル1100である。例示的なテーブル1100は、グラフの実行に関連して生じてよい異なるイベント1130、1135、1140、1145を表わすイベント列1101を含む。テーブル1100は、入力テンソル1102、1104、1106、1108、出力テンソル1110、隠れテンソル1112、1114、1116、処理1118、1120、1122、1124およびグラフ1126を参照する列を含む。
【0076】
図11の第1の入力テンソル列1102は、図10のテンソルIN#1 1015のカウンタ値に対応する。図11の第2の入力テンソル列1104は、図10のテンソルIN#2 1020のカウンタ値に対応する。図11の第3の入力テンソル列1106は、図10のテンソルIN#3 1025のカウンタ値に対応する。図11の第4の入力テンソル列1108は、図10のテンソルIN#4 1030のカウンタ値に対応する。図11の出力テンソル列1110は、図10の出力テンソルOUT#1 1040のカウンタ値に対応する。図11の第1の隠れテンソル列1112は、図10の隠れテンソルHID#1 1055のカウンタ値に対応する。図11の第2の隠れテンソル列1114は、図10の隠れテンソルHID#2 1065のカウンタ値に対応する。図11の第3の隠れテンソル列1116は、図10の隠れテンソルHID#3 1075のカウンタ値に対応する。図11の第1の処理列1118は、図10の第1の処理1050のカウンタ値に対応する。図11の第2の処理列1120は、図10の第2の処理1060のカウンタ値に対応する。図11の第3の処理列1122は、図10の第3の処理1070のカウンタ値に対応する。図11の第4の処理列1124は、図10の第4の処理1080のカウンタ値に対応する。図11のグラフ列1126は、図10のグラフ1010のカウンタ値に対応する。
【0077】
図11の示される例において、グラフ1126が最初に作成されるとき(イベント1130)、すべての処理は遅延され、すべての処理は、入力テンソルおよび隠れテンソルへの参照を保持する。評価がトリガされるとき(イベント1135)、処理4 1124は成熟となり、HID#3 1116への参照を解放する。HID#3 1116が解放されるとき(イベント1140)、HID#3 1116の参照カウントはゼロに下げられ、故に削除され得る。故に、第3の処理1122は古くなり、第3の処理1122はHID#2 1114への参照を解放する。HID#1 1112が解放されるとき(イベント1145)、第2の処理1120が依然としてHID#1 1112を使用しているので、HID#1 1112は生存(alive)のまま保持されるため、その参照カウントは依然として1である。HID#2 1114が解放されるとき(イベント1150)、HID#2 1114の削除が処理2 1120を作成し、HID#1 1112への参照がゼロにされる。HID#1 1112の削除により第1の処理1118が古くなり、従って、最終的にグラフ1126におけるいかなる処理も遅延された処理ではなくなり、グラフ1126の削除は安全である。
【0078】
いくつかの例において、初期においては隠れテンソルはグラフ内でのみアクセスされるが、グラフの動的性質に起因して隠れテンソルはグラフの外部でアクセスされる。このような一例において、グラフ実行器520はグラフを解析して、隠れテンソルを具現化するために必要とされるすべての処理を識別し、且つ、それらを実行する。その後、隠れテンソルはグラフの出力テンソルの集まりの中に含められる。その後、新しいグラフが再凝縮され(例えば、再最適化され)て、隠れテンソルを含む出力テンソルを生成する。
【0079】
図12は、凝縮されたグラフのための入力テンソルおよび出力テンソルを表わすブロック図1200である。図12の示される例において、凝縮されたグラフ1210は、第1の処理1250および第2の処理1255を含む。本明細書に開示される例において、第1の処理1250は、図10の第1の処理1050に対応する。図12の第2の処理1255は、図10の第2の処理1060、第3の処理1070および第4の処理1080の凝縮されたバージョンに対応する。例示的な凝縮されたグラフ1210は、第1の入力テンソル1215、第2の入力テンソル1220、第3の入力テンソル1225および第4の入力テンソル1230を受信する。第2の処理1255は、出力テンソル1240を出力する。上記の通り、例示的なグラフ凝縮器540は、グラフ(例えば、図10のグラフ1010)をコンパイルおよび/または凝縮(例えば、最適化)して、凝縮されたグラフ(例えば、図12の凝縮されたグラフ1210)を生成する。例示的なグラフ凝縮器540は、より効率的な計算を用いるべく、複数の計算を1つに融合し、計算を並べ替え、および/または、機械学習処理を変換してよい。また、例示的なグラフ凝縮器は機械学習処理をコンパイルしてよく、および凝縮された(例えば、最適化された)バイナリを生成してよい。本明細書に開示される例において、例示的なグラフ実行器520は、初期のプロファイリングステージを凝縮された実行ステージへ切り替えるときを決定する。
【0080】
図13は、図1および/または図5のWebNNコントローラ140を実装するための図6、7、8および/または9の命令を実行するように構造化された例示的なプロセッサプラットフォーム1300のブロック図である。プロセッサプラットフォーム1300は、例えば、サーバ、パーソナルコンピュータ、ワークステーション、自己学習機械(例えば、ニューラルネットワーク)、モバイルデバイス(例えば、携帯電話、スマートフォン、iPad(登録商標)等のタブレット)、携帯情報端末(PDA)、インターネット家電、DVDプレーヤ、CDプレーヤ、デジタルビデオレコーダ、ブルーレイプレーヤ、ゲームコンソール、パーソナルビデオレコーダ、セットトップボックス、ヘッドセット若しくは他のウェアラブルデバイス、または任意の他のタイプのコンピューティングデバイスであってよい。
【0081】
示された例のプロセッサプラットフォーム1300は、プロセッサ1312を含む。示された例のプロセッサ1312は、ハードウェアである。例えば、プロセッサ1312は、1または複数の集積回路、ロジック回路、マイクロプロセッサ、GPU、DSP、または任意の所望のファミリー若しくは製造者からのコントローラで実装されてよい。ハードウェアプロセッサは、半導体ベース(例えば、シリコンベース)のデバイスであってよい。この例において、プロセッサは、例示的なテンソルマネージャ510、例示的なグラフ実行器520、例示的なグラフビルダ530、例示的なグラフ凝縮器540および例示的なグラフキャッシュマネージャ550を実装する。
【0082】
示された例のプロセッサ1312は、ローカルメモリ1313(例えば、キャッシュ)を含む。示された例のプロセッサ1312は、バス1318を介して、揮発性メモリ1314および不揮発性メモリ1316を含むメインメモリと通信する。揮発性メモリ1314は、シンクロナスダイナミックランダムアクセスメモリ(SDRAM)、ダイナミックランダムアクセスメモリ(DRAM)、RAMBUS(登録商標)ダイナミックランダムアクセスメモリ(RDRAM(登録商標))および/または任意の他のタイプのランダムアクセスメモリデバイスで実装されてよい。不揮発性メモリ1316は、フラッシュメモリおよび/または任意の他の所望のタイプのメモリデバイスで実装されてよい。メインメモリ1314、1316へのアクセスは、メモリコントローラにより制御される。
【0083】
示された例のプロセッサプラットフォーム1300はまた、インタフェース回路1320も含む。インタフェース回路1320は、イーサネット(登録商標)インタフェース、ユニバーサルシリアルバス(USB)、Bluetooth(登録商標)インタフェース、近距離通信(NFC)インタフェースおよび/またはPCIエクスプレスインタフェース等の任意のタイプのインタフェース規格で実装されてよい。
【0084】
示される例において、1または複数の入力デバイス1322は、インタフェース回路1320に接続される。入力デバイス1322は、ユーザがデータおよび/またはコマンドをプロセッサ1312に入力することを許容する。入力デバイスは、例えば、オーディオセンサ、マイク、カメラ(スチルまたはビデオ)、キーボード、ボタン、マウス、タッチスクリーン、トラックパッド、トラックボール、等電点および/または音声認識システムで実装されてよい。
【0085】
1または複数の出力デバイス1324もまた、示された例のインタフェース回路1320に接続される。出力デバイス1324は、例えば、ディスプレイデバイス(例えば、発光ダイオード(LED))、有機発光ダイオード(OLED)、液晶ディスプレイ(LCD)、ブラウン管ディスプレイ(CRT)、インプレーススイッチング(in‐place switching:IPS)ディスプレイ、タッチスクリーン等)、触覚出力デバイス、プリンタおよび/またはスピーカで実装されてよい。故に、示された例のインタフェース回路1320は通常、グラフィックドライバカード、グラフィックドライバチップおよび/またはグラフィックドライバプロセッサを含む。
【0086】
示された例のインタフェース回路1320はまた、送信機、受信機、トランシーバ、モデム、住居用ゲートウェイ、無線アクセスポイント、および/または、ネットワーク1326を介した外部マシン(例えば、任意の種類のコンピューティングデバイス)とのデータ交換を容易にするためのネットワークインタフェース等の通信デバイスも含む。通信は、例えば、イーサネット(登録商標)接続、デジタル加入者線(DSL)接続、電話回線接続、同軸ケーブルシステム、衛星システム、見通し内無線システム、セルラ電話システム等を介したものであってよい。
【0087】
示された例のプロセッサプラットフォーム1300はまた、ソフトウェアおよび/またはデータを格納するための1または複数の大容量記憶デバイス1328も含む。このような大容量記憶デバイス1328の例には、フロッピーディスクドライブ、ハードドライブディスク、コンパクトディスクドライブ、ブルーレイディスクドライブ、リダンダントアレイオブインディペンデントディスク(RAID)システム、およびデジタル多用途ディスク(DVD)ドライブが含まれる。
【0088】
図6、7、8および/または9の機械実行可能命令1332は大容量記憶デバイス1328内に、揮発性メモリ1314内に、不揮発性メモリ1316内に、および/または、CD若しくはDVD等の除去可能な非一時的コンピュータ可読記憶媒体に格納されてよい。図13の示される例において、大容量記憶デバイス1328は、例示的なグラフキャッシュ555および例示的なテンソルメモリ515を実装する。
【0089】
上記の内容から、ブラウザ内で機械学習ワークロードが凝縮された態様で実行されることを可能にすることにより、コンピューティングデバイスの使用効率を改善する例示的な方法、装置および製品が開示されていることが理解されよう。
【0090】
パーソナルコンピュータ(PC)コンシューマのWebベースアクティビティは、PC使用シナリオの大部分を形成する。本明細書に開示された例示的なアプローチは、Webベース環境内での機械学習ワークロードの、よりリソース効率の良い態様での実行を可能にする。本明細書で開示されるように、機械学習ワークロードにより提供される内部テンソルへの完全なアクセス可能性を依然として可能にしつつ、機械学習ワークロードはより迅速に実行され得る。従って開示された方法、装置および製品は、コンピュータの機能における1または複数の改善を対象とする。
【0091】
例が本明細書において開示される。Webブラウザ環境内での機械学習モデルを処理するためのさらなる例示的な方法、装置、システムおよび製品は以下を含む。
【0092】
例1は、Webブラウザ内で機械学習モデルを処理するための装置であって、
機械学習処理が遅延された実行モードを用いて実行されるべき場合に、前記機械学習処理をグラフとして蓄積するためのグラフビルダと、まだ利用可能でなく且つ前記機械学習処理に関連付けられていないテンソルにアクセスするためのリクエストに応答して、前記テンソルに基づき前記グラフを識別するためのテンソルマネージャと、前記識別されたグラフに対応する凝縮されたグラフが利用可能であるか否かを判定するためのグラフキャッシュマネージャと、前記グラフキャッシュマネージャが前記凝縮されたグラフが利用可能ではないと判定することに応答して、前記凝縮されたグラフを生成するためのグラフ凝縮器と、前記凝縮されたグラフを実行して前記テンソルを生成するためのグラフ実行器であって、前記テンソルマネージャは前記テンソルを、前記テンソルにアクセスするための前記リクエストに対する応答として提供する、グラフ実行器とを備える装置を含む。
【0093】
例2は、前記グラフ実行器は、前記グラフキャッシュマネージャが前記凝縮されたグラフが利用可能であると判定することに応答して、前記凝縮されたグラフをフェッチする、例1に係る装置を含む。
【0094】
例3は、前記グラフキャッシュマネージャは、前記識別されたグラフのハッシュに基づきルックアップを実行して、前記凝縮されたグラフが利用可能であるか否かを判定する、例1に係る装置を含む。
【0095】
例4は、前記グラフ実行器は、前記機械学習処理が直接実行モードを用いて実行されるべきであるという判定に応答して、前記機械学習処理を実行する、例1の装置を含む。
【0096】
例5は、前記テンソルマネージャは、前記テンソルに関連付けられたカウンタを初期化し、前記テンソルを前記応答として前記提供することに応答して、前記テンソルに関連付けられた前記カウンタをデクリメントする、例1の装置を含む。
【0097】
例6は、前記テンソルマネージャは、前記テンソルを解放するためのリクエストに応答して、前記テンソルに関連付けられた前記カウンタをデクリメントする、例5の装置を含む。
【0098】
例7は、前記テンソルマネージャは、前記凝縮されたグラフを実行して前記テンソルを生成することに応答して、前記テンソルに関連付けられた前記カウンタをインクリメントする、例5の装置を含む。
【0099】
例8は、命令を備える少なくとも1つの非一時的コンピュータ可読媒体であって、前記命令が実行されると、前記命令は少なくとも1つのプロセッサに、少なくとも、機械学習処理が遅延された実行モードを用いて実行されるべき場合に、前記機械学習処理をグラフとして蓄積する手順と、まだ利用可能でなく且つ前記機械学習処理に関連付けられていないテンソルにアクセスするためのリクエストに応答して、前記テンソルに基づき前記グラフを識別する手順と、前記識別されたグラフに対応する凝縮されたグラフが利用可能であるか否かを判定する手順と、前記凝縮されたグラフが利用可能ではないと判定することに応答して、前記凝縮されたグラフを生成する手順と、前記凝縮されたグラフを実行して前記テンソルを生成する手順と、前記テンソルを、前記テンソルにアクセスするための前記リクエストに対する応答として提供する手順と、を実行させる、少なくとも1つの非一時的コンピュータ可読媒体を含む。
【0100】
例9は、前記命令が実行されると、前記命令は前記少なくとも1つのプロセッサに、前記凝縮されたグラフが利用可能であると判定することに応答して、前記凝縮されたグラフをフェッチする手順を実行させる、例8の少なくとも1つのコンピュータ可読媒体を含む。
【0101】
例10は、前記命令が実行されると、前記命令は前記少なくとも1つのプロセッサに、前記識別されたグラフのハッシュに基づきルックアップを実行して、前記凝縮されたグラフが利用可能であるか否かを判定する手順を実行させる、例8の少なくとも1つのコンピュータ可読媒体を含む。
【0102】
例11は、前記命令が実行されると、前記命令は前記少なくとも1つのプロセッサに、前記機械学習処理が直接実行モードを用いて実行されるべきであるという判定に応答して、前記機械学習処理を実行する手順を実行させる、例8の少なくとも1つのコンピュータ可読媒体を含む。
【0103】
例12は、前記命令が実行されると、前記命令は前記少なくとも1つのプロセッサに、前記テンソルに関連付けられたカウンタを初期化する手順と、前記テンソルを前記応答として前記提供することに応答して、前記テンソルに関連付けられた前記カウンタをデクリメントする手順と、を実行させる、例8の少なくとも1つのコンピュータ可読媒体を含む。
【0104】
例13は、前記命令が実行されると、前記命令は前記少なくとも1つのプロセッサに、前記テンソルを解放するためのリクエストに応答して、前記テンソルに関連付けられた前記カウンタをデクリメントする手順を実行させる、例12に記載の少なくとも1つのコンピュータ可読媒体を含む。
【0105】
例14は、前記命令が実行されると、前記命令は前記少なくとも1つのプロセッサに、前記凝縮されたグラフを実行して前記テンソルを生成することに応答して、前記テンソルに関連付けられた前記カウンタをインクリメントする手順を実行させる、例12に記載の少なくとも1つのコンピュータ可読媒体を含む。
【0106】
例15は、Webブラウザ環境内で機械学習モデルを処理するための装置であって、機械学習処理が遅延された実行モードを用いて実行されるべき場合に、前記機械学習処理をグラフとして蓄積する手段と、まだ利用可能でなく且つ前記機械学習処理に関連付けられていないテンソルにアクセスするためのリクエストに応答して、前記テンソルに基づき前記グラフを識別するための管理手段と、前記識別されたグラフに対応する凝縮されたグラフが利用可能であるか否かを判定する手段と、前記判定する手段が、前記凝縮されたグラフが利用可能ではないと判定することに応答して、前記凝縮されたグラフを生成するための凝縮手段と、前記テンソルを生成すべく前記凝縮されたグラフを実行する手段であって、前記管理手段は前記テンソルを、前記テンソルにアクセスするための前記リクエストに対する応答として提供する、手段と、を備える、装置を含む。
【0107】
例16は、前記判定する手段が、前記凝縮されたグラフが利用可能であると判定することに応答して、前記凝縮されたグラフをフェッチする、例15の装置を含む。
【0108】
例17は、前記判定する手段が、前記識別されたグラフのハッシュに基づきルックアップを実行することにより、前記凝縮されたグラフが利用可能であるか否かを判定する、例15の装置を含む。
【0109】
例18は、前記実行する手段は、前記判定する手段が前記機械学習処理は直接実行モードを用いて実行されるべきであると判定することに応答して、前記機械学習処理を実行する、例15の装置を含む。
【0110】
例19は、前記管理する手段は、さらに、前記テンソルに関連付けられたカウンタを初期化し、前記テンソルを前記応答として前記提供することに応答して、前記テンソルに関連付けられた前記カウンタをデクリメントする、例15の装置を含む。
【0111】
例20は、前記管理する手段は、前記テンソルを解放するためのリクエストに応答して、前記テンソルに関連付けられた前記カウンタをデクリメントする、例19の装置を含む。
【0112】
例21は、前記管理する手段は、前記実行する手段が前記凝縮されたグラフを実行して前記テンソルを生成することに応答して、前記テンソルに関連付けられた前記カウンタをインクリメントする、例19の装置を含む。
【0113】
例22は、Webブラウザ環境内で機械学習モデルを処理する方法であって、機械学習処理が遅延された実行モードを用いて実行されるべき場合に、前記機械学習処理をグラフとして蓄積する段階と、まだ利用可能でなく且つ前記機械学習処理に関連付けられていないテンソルにアクセスするためのリクエストに応答して、前記テンソルに基づき前記グラフを識別する段階と、前記識別されたグラフに対応する凝縮されたグラフが利用可能であるか否かを判定する段階と、前記凝縮されたグラフが利用可能ではないと判定することに応答して、前記凝縮されたグラフを生成する段階と、前記テンソルを生成すべく前記凝縮されたグラフを実行する段階と、前記テンソルを、前記テンソルにアクセスするための前記リクエストに対する応答として提供する段階と、を備える、方法を含む。
【0114】
例23は、前記凝縮されたグラフが利用可能であると判定することに応答して、前記グラフの前記凝縮されたバージョンをフェッチする段階をさらに備える、例22の方法を含む。
【0115】
例24は、前記識別された凝縮されたグラフが利用可能であるか否かを判定する前記段階が、前記識別されたグラフのハッシュに基づきルックアップを実行する段階を含む、例22の方法を含む。
【0116】
例25は、前記機械学習処理が直接実行モードを用いて実行されるべきであると判定することに応答して、前記機械学習処理を実行する段階をさらに備える、例22の方法を含む。
【0117】
例26は、前記テンソルに関連付けられたカウンタを初期化する段階と、前記テンソルを前記応答として提供する前記段階に応答して、前記テンソルに関連付けられた前記カウンタをデクリメントする段階と、をさらに備える、例22の方法を含む。
【0118】
例27は、前記テンソルを解放するためのリクエストに応答して、前記テンソルに関連付けられた前記カウンタをデクリメントする段階をさらに備える、例26の方法を含む。
【0119】
例28は、前記テンソルを生成すべく前記凝縮されたグラフを実行する前記段階に応答して、前記テンソルに関連付けられた前記カウンタをインクリメントする段階をさらに備える、例26の方法を含む。
【0120】
具体的な例示的方法、装置および製品が本明細書において開示されたが、この特許の及ぶ範囲はこのように限定されることはない。むしろ逆に、この特許は、この特許に係る特許請求の範囲に公平に属するすべての方法、装置および製品に及ぶ。
【0121】
以下の特許請求の範囲は、ここでこの参照によりこの詳細な説明に組み込まれ、各請求項は本開示の別個の実施形態として独立している。
[他の可能性のある請求項]
[項目1]
Webブラウザ内で機械学習モデルを処理するための装置であって、
機械学習処理が遅延された実行モードを用いて実行されるべき場合に、前記機械学習処理をグラフとして蓄積するためのグラフビルダと、
まだ利用可能でなく且つ前記機械学習処理に関連付けられていないテンソルにアクセスするためのリクエストに応答して、前記テンソルに基づき前記グラフを識別するためのテンソルマネージャと、
前記識別されたグラフに対応する凝縮されたグラフが利用可能であるか否かを判定するためのグラフキャッシュマネージャと、
前記グラフキャッシュマネージャが前記凝縮されたグラフが利用可能ではないと判定することに応答して、前記凝縮されたグラフを生成するためのグラフ凝縮器と、
前記凝縮されたグラフを実行して前記テンソルを生成するためのグラフ実行器であって、前記テンソルマネージャは前記テンソルを、前記テンソルにアクセスするための前記リクエストに対する応答として提供する、グラフ実行器とを備える、装置。
[項目2]
前記グラフ実行器は、前記グラフキャッシュマネージャが前記凝縮されたグラフが利用可能であると判定することに応答して、前記凝縮されたグラフをフェッチする、項目1に記載の装置。
[項目3]
前記グラフキャッシュマネージャは、前記識別されたグラフのハッシュに基づきルックアップを実行して、前記凝縮されたグラフが利用可能であるか否かを判定する、項目1に記載の装置。
[項目4]
前記グラフ実行器は、前記機械学習処理が直接実行モードを用いて実行されるべきであるという判定に応答して、前記機械学習処理を実行する、項目1に記載の装置。
[項目5]
前記テンソルマネージャは、前記テンソルに関連付けられたカウンタを初期化し、前記テンソルを前記応答として前記提供することに応答して、前記テンソルに関連付けられた前記カウンタをデクリメントする、項目1に記載の装置。
[項目6]
前記テンソルマネージャは、前記テンソルを解放するためのリクエストに応答して、前記テンソルに関連付けられた前記カウンタをデクリメントする、項目5に記載の装置。
[項目7]
前記テンソルマネージャは、前記凝縮されたグラフを実行して前記テンソルを生成することに応答して、前記テンソルに関連付けられた前記カウンタをインクリメントする、項目5に記載の装置。
[項目8]
命令を備える少なくとも1つの非一時的コンピュータ可読媒体であって、前記命令が実行されると、前記命令は少なくとも1つのプロセッサに、少なくとも、
機械学習処理が遅延された実行モードを用いて実行されるべき場合に、前記機械学習処理をグラフとして蓄積する手順と、
まだ利用可能でなく且つ前記機械学習処理に関連付けられていないテンソルにアクセスするためのリクエストに応答して、前記テンソルに基づき前記グラフを識別する手順と、
前記識別されたグラフに対応する凝縮されたグラフが利用可能であるか否かを判定する手順と、
前記凝縮されたグラフが利用可能ではないと判定することに応答して、前記凝縮されたグラフを生成する手順と、
前記凝縮されたグラフを実行して前記テンソルを生成する手順と、
前記テンソルを、前記テンソルにアクセスするための前記リクエストに対する応答として提供する手順と、を実行させる、少なくとも1つの非一時的コンピュータ可読媒体。
[項目9]
前記命令が実行されると、前記命令は前記少なくとも1つのプロセッサに、前記凝縮されたグラフが利用可能であると判定することに応答して、前記凝縮されたグラフをフェッチする手順を実行させる、項目8に記載の少なくとも1つの非一時的コンピュータ可読媒体。
[項目10]
前記命令が実行されると、前記命令は前記少なくとも1つのプロセッサに、前記識別されたグラフのハッシュに基づきルックアップを実行して、前記凝縮されたグラフが利用可能であるか否かを判定する手順を実行させる、項目8に記載の少なくとも1つの非一時的コンピュータ可読媒体。
[項目11]
前記命令が実行されると、前記命令は前記少なくとも1つのプロセッサに、前記機械学習処理が直接実行モードを用いて実行されるべきであるという判定に応答して、前記機械学習処理を実行する手順を実行させる、項目8に記載の少なくとも1つの非一時的コンピュータ可読媒体。
[項目12]
前記命令が実行されると、前記命令は前記少なくとも1つのプロセッサに、前記テンソルに関連付けられたカウンタを初期化する手順と、
前記テンソルを前記応答として前記提供することに応答して、前記テンソルに関連付けられた前記カウンタをデクリメントする手順と、を実行させる、項目8に記載の少なくとも1つの非一時的コンピュータ可読媒体。
[項目13]
前記命令が実行されると、前記命令は前記少なくとも1つのプロセッサに、前記テンソルを解放するためのリクエストに応答して、前記テンソルに関連付けられた前記カウンタをデクリメントする手順を実行させる、項目12に記載の少なくとも1つの非一時的コンピュータ可読媒体。
[項目14]
前記命令が実行されると、前記命令は前記少なくとも1つのプロセッサに、前記凝縮されたグラフを実行して前記テンソルを生成することに応答して、前記テンソルに関連付けられた前記カウンタをインクリメントする手順を実行させる、項目12に記載の少なくとも1つの非一時的コンピュータ可読媒体。
[項目15]
Webブラウザ環境内で機械学習モデルを処理するための装置であって、
機械学習処理が遅延された実行モードを用いて実行されるべき場合に、前記機械学習処理をグラフとして蓄積する手段と、
まだ利用可能でなく且つ前記機械学習処理に関連付けられていないテンソルにアクセスするためのリクエストに応答して、前記テンソルに基づき前記グラフを識別するための管理手段と、
前記識別されたグラフに対応する凝縮されたグラフが利用可能であるか否かを判定する手段と、
前記判定する手段が、前記凝縮されたグラフが利用可能ではないと判定することに応答して、前記凝縮されたグラフを生成するための凝縮手段と、
前記テンソルを生成すべく前記凝縮されたグラフを実行する手段であって、前記管理手段は前記テンソルを、前記テンソルにアクセスするための前記リクエストに対する応答として提供する、手段と、を備える、装置。
[項目16]
前記判定する手段が、前記凝縮されたグラフが利用可能であると判定することに応答して、前記凝縮されたグラフをフェッチする、項目15に記載の装置。
[項目17]
前記判定する手段が、前記識別されたグラフのハッシュに基づきルックアップを実行することにより、前記凝縮されたグラフが利用可能であるか否かを判定する、項目15に記載の装置。
[項目18]
前記実行する手段は、前記判定する手段が前記機械学習処理は直接実行モードを用いて実行されるべきであると判定することに応答して、前記機械学習処理を実行する、項目15に記載の装置。
[項目19]
前記管理する手段は、さらに、前記テンソルに関連付けられたカウンタを初期化し、前記テンソルを前記応答として前記提供することに応答して、前記テンソルに関連付けられた前記カウンタをデクリメントする、項目15に記載の装置。
[項目20]
前記管理する手段は、前記テンソルを解放するためのリクエストに応答して、前記テンソルに関連付けられた前記カウンタをデクリメントする、項目19に記載の装置。
[項目21]
前記管理する手段は、前記実行する手段が前記凝縮されたグラフを実行して前記テンソルを生成することに応答して、前記テンソルに関連付けられた前記カウンタをインクリメントする、項目19に記載の装置。
[項目22]
Webブラウザ環境内で機械学習モデルを処理する方法であって、
機械学習処理が遅延された実行モードを用いて実行されるべき場合に、前記機械学習処理をグラフとして蓄積する段階と、
まだ利用可能でなく且つ前記機械学習処理に関連付けられていないテンソルにアクセスするためのリクエストに応答して、前記テンソルに基づき前記グラフを識別する段階と、
前記識別されたグラフに対応する凝縮されたグラフが利用可能であるか否かを判定する段階と、
前記凝縮されたグラフが利用可能ではないと判定することに応答して、前記凝縮されたグラフを生成する段階と、
前記テンソルを生成すべく前記凝縮されたグラフを実行する段階と、
前記テンソルを、前記テンソルにアクセスするための前記リクエストに対する応答として提供する段階と、を備える、方法。
[項目23]
前記凝縮されたグラフが利用可能であると判定することに応答して、前記グラフの前記凝縮されたバージョンをフェッチする段階をさらに備える、項目22に記載の方法。
[項目24]
前記識別された凝縮されたグラフが利用可能であるか否かを判定する前記段階が、前記識別されたグラフのハッシュに基づきルックアップを実行する段階を含む、項目22に記載の方法。
[項目25]
前記機械学習処理が直接実行モードを用いて実行されるべきであると判定することに応答して、前記機械学習処理を実行する段階をさらに備える、項目22に記載の方法。
[項目26]
前記テンソルに関連付けられたカウンタを初期化する段階と、
前記テンソルを前記応答として提供する前記段階に応答して、前記テンソルに関連付けられた前記カウンタをデクリメントする段階と、をさらに備える、項目22に記載の方法。
[項目27]
前記テンソルを解放するためのリクエストに応答して、前記テンソルに関連付けられた前記カウンタをデクリメントする段階をさらに備える、項目26に記載の方法。
[項目28]
前記テンソルを生成すべく前記凝縮されたグラフを実行する前記段階に応答して、前記テンソルに関連付けられた前記カウンタをインクリメントする段階をさらに備える、項目26に記載の方法。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13