(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-06-13
(45)【発行日】2022-06-21
(54)【発明の名称】不必要なデータ移動を回避するためのリシェイプおよびブロードキャストの最適化
(51)【国際特許分類】
G06F 8/41 20180101AFI20220614BHJP
【FI】
G06F8/41 130
(21)【出願番号】P 2021565088
(86)(22)【出願日】2020-04-30
(86)【国際出願番号】 US2020030752
(87)【国際公開番号】W WO2020227015
(87)【国際公開日】2020-11-12
【審査請求日】2021-12-21
(32)【優先日】2019-05-03
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】100108453
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100110364
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】ブレイク・アラン・ヘクトマン
【審査官】石川 亮
(56)【参考文献】
【文献】特開2006-18828(JP,A)
【文献】@Vengineer,最新テクノロジ・マニアの挑戦…AIサクサク用TensorFlow XLA AOTコンパイラ探訪 初めてのGoogleソースコード! AI用コンパイラの可能性を探る,Interface 2017年9月号,日本,CQ出版株式会社,2017年,第43巻, 第9号,pp.138-147,ISSN 0387-9569
【文献】LI Mingzhen et al.,The Deep Learning Compiler: A Comprehensive Survey,arXiv.org [online],2020年02月06日,pp.1-36,[2022年4月26日検索], インターネット<URL : https://arxiv.org/abs/2002.03794v1>
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/41
G06F 8/60
G06N 20/00
(57)【特許請求の範囲】
【請求項1】
1つまたは複数のコンピュータによって実施される方法であって、
計算オペレーショングラフ内のテンソルに対するオリジナルオペレーションパターンを検出するステップであって、
前記オリジナルオペレーションパターンが、最終出力テンソルを返し、入力として入力テンソルを受け取り、
前記オリジナルオペレーションパターンが、オリジナルリシェイプオペレーションを含み、前記オリジナルリシェイプオペレーションが、(i)オリジナルテンソルを返し、(ii)より少ないメモリを使用するように変換されることが可能である、ステップと、
前記オリジナルオペレーションパターンを、前記オリジナルテンソルよりも小さなテンソルを返す1つまたは複数のリシェイプオペレーションを有する新たなオペレーションパターンに変換するステップと、
ターゲットハードウェアプラットフォームに専用の、前記新たなオペレーションパターンによって表される計算を実装した、実行可能コードを生成するステップと
を含む、方法。
【請求項2】
前記生成されたコードを、実行のため前記ターゲットハードウェアプラットフォームにデプロイするステップ
をさらに含む、請求項1に記載の方法。
【請求項3】
前記オリジナルリシェイプオペレーションが、前記ターゲットハードウェアプラットフォーム上のベクトル命令またはベクトルメモリのアライメント要件を満足させるためにデータの移動を必要とする、
請求項1または2に記載の方法。
【請求項4】
前記オリジナルオペレーションパターンを変換するステップが、
前記オリジナルオペレーションパターンによって返される前記最終出力テンソルの最終出力次元を決定するステップと、
前記入力テンソルの、前記最終出力テンソル内になく前記オリジナルリシェイプオペレーションによるリシェイプに影響を及ぼしもしない次元に沿って縮約して、第1の中間結果テンソルを返すステップと、
前記第1の中間結果テンソルをリシェイプして、第2の中間結果テンソルを返すステップと、
前記第2の中間結果テンソルを、前記オリジナルオペレーションパターンからの前記最終出力テンソルの次元内にない任意の次元に沿って縮約するステップと
を含む、請求項1から3のいずれか一項に記載の方法。
【請求項5】
命令が符号化された1つまたは複数の非一時的コンピュータ可読記憶媒体であって、前記命令が、1つまたは複数のコンピュータによって実行されると、前記1つまたは複数のコンピュータに、
計算オペレーショングラフ内のテンソルに対するオリジナルオペレーションパターンを検出することであって、
前記オリジナルオペレーションパターンが、最終出力テンソルを返し、入力として入力テンソルを受け取り、
前記オリジナルオペレーションパターンが、オリジナルリシェイプオペレーションを含み、前記オリジナルリシェイプオペレーションが、(i)オリジナルテンソルを返し、(ii)より少ないメモリを使用するように変換されることが可能である、検出することと、
前記オリジナルオペレーションパターンを、前記オリジナルテンソルよりも小さなテンソルを返す1つまたは複数のリシェイプオペレーションを有する新たなオペレーションパターンに変換することと、
ターゲットハードウェアプラットフォームに専用の、前記新たなオペレーションパターンによって表される計算を実装した、実行可能コードを生成することと
を含むアクションを実施させる、1つまたは複数の非一時的コンピュータ可読記憶媒体。
【請求項6】
前記アクションが、
前記生成されたコードを、実行のため前記ターゲットハードウェアプラットフォームにデプロイすること
をさらに含む、請求項5に記載の非一時的コンピュータ可読記憶媒体。
【請求項7】
前記オリジナルリシェイプオペレーションが、前記ターゲットハードウェアプラットフォーム上のベクトル命令またはベクトルメモリのアライメント要件を満足させるためにデータの移動を必要とする、
請求項5または6に記載の非一時的コンピュータ可読記憶媒体。
【請求項8】
前記オリジナルオペレーションパターンを変換することが、
前記オリジナルオペレーションパターンによって返される前記最終出力テンソルの最終出力次元を決定することと、
前記入力テンソルの、前記最終出力テンソル内になく前記オリジナルリシェイプオペレーションによるリシェイプに影響を及ぼしもしない次元に沿って縮約して、第1の中間結果テンソルを返すことと、
前記第1の中間結果テンソルをリシェイプして、第2の中間結果テンソルを返すことと、
前記第2の中間結果テンソルを、前記オリジナルオペレーションパターンからの前記最終出力テンソルの次元内にない任意の次元に沿って縮約することと
を含む、請求項5から7のいずれか一項に記載の非一時的コンピュータ可読記憶媒体。
【請求項9】
システムであって、
1つまたは複数のコンピュータと、命令が格納された1つまたは複数の記憶デバイスと
を備え、前記命令が、前記1つまたは複数のコンピュータによって実行されると、前記1つまたは複数のコンピュータに、
計算オペレーショングラフ内のテンソルに対するオリジナルオペレーションパターンを検出することであって、
前記オリジナルオペレーションパターンが、最終出力テンソルを返し、入力として入力テンソルを受け取り、
前記オリジナルオペレーションパターンが、オリジナルリシェイプオペレーションを含み、前記オリジナルリシェイプオペレーションが、(i)オリジナルテンソルを返し、(ii)より少ないメモリを使用するように変換されることが可能である、検出することと、
前記オリジナルオペレーションパターンを、前記オリジナルテンソルよりも小さなテンソルを返す1つまたは複数のリシェイプオペレーションを有する新たなオペレーションパターンに変換することと、
ターゲットハードウェアプラットフォームに専用の、前記新たなオペレーションパターンによって表される計算を実装した、実行可能コードを生成することと
を含むアクションを実施させるように動作可能である、システム。
【請求項10】
前記アクションが、
前記生成されたコードを、実行のため前記ターゲットハードウェアプラットフォームにデプロイすること
さらに含む、請求項9に記載のシステム。
【請求項11】
前記オリジナルリシェイプオペレーションが、前記ターゲットハードウェアプラットフォーム上のベクトル命令またはベクトルメモリのアライメント要件を満足させるためにデータの移動を必要とする、
請求項9または10に記載のシステム。
【請求項12】
前記オリジナルオペレーションパターンを変換することが、
前記オリジナルオペレーションパターンによって返される前記最終出力テンソルの最終出力次元を決定することと、
前記入力テンソルの、前記最終出力テンソル内になく前記オリジナルリシェイプオペレーションによるリシェイプに影響を及ぼしもしない次元に沿って縮約して、第1の中間結果テンソルを返すことと、
前記第1の中間結果テンソルをリシェイプして、第2の中間結果テンソルを返すことと、
前記第2の中間結果テンソルを、前記オリジナルオペレーションパターンからの前記最終出力テンソルの次元内にない任意の次元に沿って縮約することと
を含む、請求項9から11のいずれか一項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
TensorFlowライブラリを使用して、機械学習モデル、例えば再帰ニューラルネットワーク(「RNN」)モデル、畳み込みニューラルネットワーク(「CNN」)モデル、フィードフォワードニューラルネットワークモデル、およびランダムフォレストモデルを作成することができる。(TensorFlowについては、Abadiら、TensorFlow: A system for Large-Scale Design and Implementation (OSDI '16)、265~283頁、2016年11月2~4日に記載されている。ソフトウェアは、https://tensorflow.orgから入手可能である。)
【0002】
TensorFlowライブラリを使用して、機械学習モデルをTensorFlowグラフとして表すことができる。TensorFlowグラフ内の各ノードは、オペレーションを表す。TensorFlowグラフ内の各エッジは有向であり、エッジが接続されているノードに入るまたはそのノードから出るデータのフローを表す。データは、0以上の次元のテンソルの形式をとり、テンソルにおいて、各要素は同じデータタイプ、例えば32ビット整数、二倍長浮動小数点、または文字列を有する。テンソルは、外見上、角括弧対「[]」内のベクトルによって表される。例えば、3つの要素からなる、ベクトルとも呼ばれる1次元(1D)テンソルであれば、[1, 2, 3]と表される。0次元テンソルはスカラーである。2次元(2D)テンソルであれば、[[1, 2, 3], [4, 5, 6]]と表される。このテンソルの階数、すなわちテンソルの各要素を一意に選択するために必要な次元数またはインデックス数は、2である。このテンソルの形状は[2, 3]である。2は、第0次元内の要素数、すなわち2つのベクトル(1Dテンソル)[1, 2, 3]および[4, 5, 6]のことであり、3は、第1次元内の要素数であり、すなわちベクトル[1, 2, 3]および[4, 5, 6]はそれぞれ3つの要素を有するということである。テンソルの形状は、それ自体が1Dテンソルである。多くのプログラミングの文脈において慣例であるように、次元のナンバリングは0から開始する。
【0003】
本明細書では、例は、TensorFlowグラフを構築および実行するためのPython APIを使用して表現される。TensorFlowモジュールは、次のようにロードすることができる。
import tensorflow as tf
【0004】
TensorFlowのオペレーションには、シェイプオペレーション、リシェイプオペレーション、ブロードキャストオペレーション、および縮約オペレーションが含まれる。これらについては下で、本明細書にとって重要ではないパラメータおよび態様を説明から割愛して、説明する。
【0005】
シェイプオペレーションは、実行されると、入力テンソルの形状、すなわち次元を、1Dテンソルとして返す。以下の例
X = tf.constant([[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]])
tf.shape(X)
では、シェイプオペレーションは、テンソルXの次元を表すテンソル[2, 2, 3]を返す。
【0006】
リシェイプオペレーションは、実行されると、入力テンソルと同じ要素値を有するテンソルを同じ順序で、ただし形状テンソル入力によって定義される形状で返す。以下の例
X = tf.constant([[[1, 1], [2, 2]], [[3, 3], [4, 4]]])
tf.reshape(X, [2, 4])
では、リシェイプオペレーションは、入力パラメータとして、テンソルX、および所望の形状を表す1次元テンソル[2, 4]を受け取る。リシェイプオペレーションは、入力テンソルXと同じ要素を有し、かつ所望の形状、すなわち[2, 4]を有するテンソル[[1, 1, 2, 2], [3, 3, 4, 4]]を返す。リシェイプオペレーションへの所望の形状の入力は、入力テンソルが有するよりも多くの、またはそれよりも少ない次元を有することができる。
【0007】
ブロードキャストオペレーションには、broadcast_toが含まれる。ブロードキャストは、算術オペレーションにとって互換性のある形状を有するアレイを作成するプロセスである。2つの形状は、それらの形状の対応する各次元対について、次元が等しいかまたはそれらのうちの一方が1である場合、互換性がある。テンソルが、ある形状にブロードキャストされるとき、オペレーションは末尾の次元から開始し、前方に進む。
【0008】
したがって、broadcast_toオペレーションは、実行されると、要求された指定の形状に達するまで入力テンソルが必要な回数だけ複製されたテンソルを返す。以下の例
V = tf.constant([7, 8])
tf.broadcast_to(V, [2, 3])
では、broadcast_toオペレーションは、入力として、テンソルV、および所望の形状を指定するテンソル[2, 3]を受け取る。broadcast_toオペレーションは、所望の形状を有するテンソル[[7, 7, 7], [8, 8, 8]]を返す。
【0009】
縮約オペレーションには、reduce_all、reduce_any、reduce_sum、およびreduce_meanが含まれる。縮約オペレーションは、一般に入力テンソルよりも小さな階数および入力テンソルよりも少数の要素を有する出力テンソルを返す。
【0010】
縮約オペレーションは、入力テンソルおよび軸テンソルを受け取る。軸テンソルの要素は、入力テンソルの形状の次元を識別する。縮約オペレーションは、入力テンソルを、軸テンソルによって指定された次元に沿って縮約する。例えば、
X = tf.constant([[1, 1, 1], [1, 1, 1]])
において、Xの形状は[2, 3]であり、すなわちXは、2つの行および3つの列を有するテンソル
1 1 1
1 1 1
である。
【0011】
特定の縮約オペレーションreduce_sumを一例として挙げると、軸テンソルがXの行、すなわち第0次元を識別する[0]である場合、オペレーション
tf.reduce_sum(x, [0])
は、実行されると、第0次元(行)に沿ってテンソルを縮約し、行同士を加算[1, 1, 1] + [1, 1, 1]して、[2, 2, 2]を返す。
tf.reduce_sum(x, [1])
が実行されると、縮約は第1次元(列)に沿い、列同士を加算[1, 1] + [1, 1] + [1, 1]して、[3, 3]を返す。
tf.reduce_sum(x, [0, 1])
が実行されると、縮約は両次元に沿い、加算して、スカラー(0Dテンソル)6を返す。
【0012】
縮約オペレーションによって返されるテンソルの形状は、入力テンソルの次元から軸テンソルによって指定されたインデックスを除いたものである。
【0013】
他の縮約オペレーションは、その要素の値が他のオペレーションによって計算されるテンソルを返す。例えば、reduce_allオペレーションは論理積を計算し、reduce_anyオペレーションは論理和を計算し、reduce_meanオペレーションは平均を計算し、以下同様である。
【0014】
いくつかのシナリオでは、ユーザはコンパイラ、例えばJust-in-Time(「JIT」)コンパイラを使用して、TensorFlowグラフを、XLAコンパイラに入力するためのグラフにコンパイルする。(JITコンパイラについては、https://www.tensorflow.org/xla/jitに記載されている)。XLAへの入力言語は、「HLO IR」または単にHLO(High Level Optimizer)と呼ばれている。XLAコンパイラは、HLOで定義されたグラフ、すなわち計算を受け取り、それらをさまざまなアーキテクチャの機械語命令にコンパイルして、ターゲット依存の最適化を実施し、ターゲット依存のコードを生成する。
【0015】
HLOグラフ内のノードは、オペレーションを表す。グラフ内の各エッジは有向であり、エッジが接続されているノードに入るまたはそのノードから出るデータのフローを表す。このデータは、テンソルの形式をとる。HLOグラフ内に表されたオペレーションは、HLOグラフの生成元であるTensorFlowフローにおけるオペレーションに対応する。具体的には、HLOグラフは、リシェイプオペレーション、縮約オペレーション、およびブロードキャストオペレーションを含むことができる。
【0016】
XLAコンパイラによって生成されたバイナリは、ハードウェア上にデプロイされ、そのハードウェアの特定のプロセッサによって実行される。一部のプロセッサは、ベクトルに作用する命令を実施する。プロセッサが、テンソルデータに作用するベクトル命令を実施するためには、テンソルは、ベクトル命令による作用を受けるテンソルのベクトルがそれぞれ、そのプロセッサについて指定されたベクトル境界上にアライメントされるように格納されなければならない。
【0017】
例えば、リシェイプオペレーションが、入力パラメータとして、テンソル[1, 2, 3, 4, 5, 6, 7, 8, 9]、および形状[3, 3]を指定するテンソルを受け取る場合、結果として得られるテンソル[[1, 2, 3], [4, 5, 6], [7, 8, 9]]には3つのベクトル[1, 2, 3]、[4, 5, 6]、および[7, 8, 9]があり、それらのベクトルが、ハードウェアの特定のプロセッサによって要求されるベクトル境界上にたまたまアライメントされていない場合、それらはベクトル境界上にアライメントされるように移動されなければならない。そのようなベクトル境界アライメント操作は、計算コストがかかることがある。
【先行技術文献】
【非特許文献】
【0018】
【文献】Abadiら、TensorFlow: A system for Large-Scale Design and Implementation (OSDI '16)、265~283頁、2016年11月2~4日
【文献】https://www.tensorflow.org/xla/jit
【文献】https://arxiv.org/pdf/1803.08494.pdf
【文献】https://arxiv.org/pdf/1705.08741.pdf
【発明の概要】
【課題を解決するための手段】
【0019】
本明細書では、XLAコンパイラにおいて実施されることの可能な、リシェイプオペレーションを含む特定のオペレーションシーケンスによるメモリの負担を低減させるための最適化技法について説明する。
【0020】
これらの最適化は、グループ正規化(https://arxiv.org/pdf/1803.08494.pdf)およびゴーストバッチ正規化(https://arxiv.org/pdf/1705.08741.pdf)のような機械学習技法を実装したオペレーションシーケンスにおいて特に有用である。そのような機械学習技法の直接的な実装では、入力テンソルがより多数の次元にリシェイプされる。次いで、リシェイプによって変更されたいくつかの次元およびリシェイプによって変更されていない他の次元にわたって、縮約が実施される。縮約およびリシェイプの派生物がブロードキャストであり、それがオリジナルの形状にリシェイプし戻される。ブロードキャストは、リシェイプによって変更されたいくつかの次元およびリシェイプによって変更されていないいくつかの次元にも行われる。リシェイプオペレーションは、線形アドレス空間を有するプラットフォーム上のデータには何もしない。しかし、ベクトルメモリを有するプラットフォーム上では、リシェイプにより一般に、ベクトルメモリに対する形状アライメントが変わり、データの移動が必要になる。本明細書では、ベクトルメモリに対するアライメントを得るために移動させる必要のあるテンソルのサイズを低減させる最適化について説明する。この最適化は、リシェイプオペレーションの回数および/またはオペレーションシーケンス内の中間テンソルを表すために使用されるベクトルの数を低減させるように働き、それにより、プロセッサによって実施される必要のあるベクトル境界アライメント操作の回数を低減させることができる。
【図面の簡単な説明】
【0021】
【
図1】リシェイプオペレーションを含むオペレーションパターンであって、リシェイプオペレーションのサイズを最小限に抑えるように変換されることの可能なオペレーションパターンを検出するコンパイラ変換を実施する、例示的プロセスを示すフローチャートである。
【
図2】変換の例示的プロセスを示すフローチャートである。
【発明を実施するための形態】
【0022】
さまざまな図面中の同様の参照番号および名称は、同様の要素を示す。
【0023】
図1は、リシェイプオペレーションを含むオペレーションパターンであって、リシェイプオペレーションのサイズを最小限に抑えるように変換されることの可能なオペレーションパターンを検出するコンパイラ変換を実施する、例示的プロセス100を示すフローチャートである。コンパイラ変換については、XLAコンパイラに即して、また計算グラフ内のリシェイプオペレーション、縮約オペレーション、およびブロードキャストオペレーションのパターンに即して説明する。コンパイラおよびプロセスは、1つまたは複数の位置にある1つまたは複数のコンピュータからなるシステム上に実装することができ、そのシステムによって実施されることが可能である。
【0024】
プロセスは、リシェイプオペレーションを含むオペレーションパターンであって、変換されることの可能なオペレーションパターンを検出する(102)。このパターンは、XLAグラフ内のオペレーションパターンとすることができる。1つのそのようなパターンが、リシェイプにおいて変更されない1つまたは複数の次元が縮約されるときのreduce(reshape(X))である。このパターンでは、リシェイプオペレーションが、入力テンソルXに対して実施され、縮約オペレーションへの入力となるテンソルを返す。
【0025】
プロセスは、これらのオペレーションを、より小さなサイズのリシェイプを有するオペレーションパターンに変換する(104)。例えば、上述のreduce(reshape(X))パターンに当てはまるオペレーションが、reduce(reshape(reduce(X)))オペレーションパターンに変換される。この変換はさらなる縮約を追加することにより計算量を増大させるが、この変換にはリシェイプの合計サイズを低減させるという重要な利点があり、というのも、どちらの計算にも1つのリシェイプがあり、後者のリシェイプは、次元が縮約されており、その結果として、オリジナルよりも要素の数が真に少ないためである。プロセスは、さらなるパターンが検出されなくなるまで検出および変換をし続け、さらなるパターンが検出されなくなった時点で、コンパイラが、ターゲットハードウェアに専用の、変換されたパターンを含む計算を実装した、コードを生成する(106)。次いで、コンパイラまたはTensorFlowインフラストラクチャの他の要素は、生成されたコードを、実行できるようにターゲットハードウェアにデプロイする(108)。
【0026】
最適化することの可能な、例示的なブロードキャストバージョンの別のパターンが、テンソルXの入力形状が最も外側のリシェイプによって返されるテンソルの出力形状と同じであるときのreshape(add(reshape(X), broadcast(Y))である。このオペレーションパターンは、add(X, broadcast( reshape( broadcast(Y))))に変換され、こちらのほうが、合計のリシェイプが少なく、かつリシェイプのサイズが小さく、というのも、リシェイプの出力が、余分な次元をそれが有しているので、より大きな形状にブロードキャストされるためである。このようにして、オペレーション全体を実施するのに必要なベクトル境界アライメント操作の回数が低減される。
【0027】
この変換は、任意の部分計算(subcomputation)に適用することができ、この部分計算は、以下のパターン
reshape(
f(
g(reshape(G)),
h(reshape(H)),..,
a(broadcast(A)),
b(broadcast(B)
)
),
に一致するものであり、このパターンは最適化によって、
f(
g(G),
h(H),...,
a( broadcast( reshape(broadcast(A))),
b( broadcast( reshape(broadcast(B)))
)
に変換される。小文字f、g、h、a、およびbは、グラフ内の数学的オペレーションである。彼の変換のパターンは、深さ優先のグラフ探索法を使用して見いだすことができる。いくつかの実装形態では、話を簡単にするために、探索は後行順、すなわちプロデューサがコンシューマより前にあるトポロジカルソートであり、グラフをその場で変換する。探索によって一致する部分木が見いだされると、その部分木が複製され、オリジナルの部分木ルートのユーザが新たな部分木ルートと置き換えられる。他のコンパイラパスが、複製されたコードおよびデッドコードを解決する。計算グラフ内のパターンを求めてグラフを探索する他の方法を使用することもできる。
【0028】
reduce(reshape(X))およびreshape(f(reshape(X),broadcast(Y))という形式からの、これら2つのパターン変換を用いて、グループ正規化および仮想バッチ正規化ならびにそれらの派生物を、より小さなリシェイプおよび結果として生じるより少ない所要メモリ量で行うことができる。
【0029】
例えば、グループ正規化の一実装形態は、必然的に
reduce(reshape(画像,[B,H,W,C/G,G]),[1,2,3])
と表現される。上記の画像入力の形状は、入力内の画像バッチのバッチサイズ、画像の高さ、画像の幅、および画像のチャネルの各次元を有する[B,H,W,C]である。グループの数はGグループである。この表現がこの形式で実行される場合、ある特定のハードウェアプラットフォーム上の大きな中間テンソル、および低速のリシェイプがこの表現により生じる。上記の変換はこの計算を、以下の形式
reduce(reshape(reduce(画像,[1,2]),[B,C/G,G]),[1])
に変換することにより改善する。変換プロセスについて説明する目的でこれを
Y = reshape(X, [B, H, W, C/G, G])
Z = reduce(Y, [1, 2, 3])
と表す。
【0030】
縮約オペレーションは、[B, H, W, C/G, G]という形状のテンソルYを、軸テンソル[1, 2, 3]によって指定された次元上で縮約し、テンソルZを返す。軸テンソル[1, 2, 3]は、縮約オペレーションがそれに沿って縮約する、テンソルYの次元[H, W, C/G]を表す。縮約オペレーションは、形状[B, G]をもつテンソルZを返す。
【0031】
オリジナルパターンのパラメータが、変換パターンへの適切な入力にどのようにマッピングされるかについて、下で説明する。
【0032】
議論を目的として、reduce(reshape(reduce(X, [1, 2]), [B, C/G, G]), [1])変換を
W = reduce(X, [1, 2])
Y2 = reshape(W, [B, C/G, G])
Z2 = reduce(Y2, [1])
と表す。
【0033】
図2は、変換の例示的プロセス200を示すフローチャートである。これについては、今しがた説明した例示的パターンに即して説明する。このプロセス200は、上で
図1を参照して説明した変換(104)の一例示的実装形態である。
【0034】
プロセスは、オリジナルオペレーションパターンによって返されるテンソルの最終出力次元を決定する(202)。最終出力次元は、Xの形状を最終出力形状と比較することによって決定される。この例では、オリジナルパターン例は、[B, H, W, C]という形状のテンソルXを受け取り、[B, G]という形状のテンソルを返す。
【0035】
プロセスは、入力テンソルの、最終出力内になくオリジナルパターンのリシェイプオペレーションによるリシェイプに影響を及ぼしもしない次元に沿って縮約する(204)。この例では、オリジナルパターン
Y = reshape(X, [B, H, W, C/G, G])
Z = reduce(Y, [1, 2, 3])
から、コンパイラは、テンソルXの第0および第3のインデックス、すなわちBおよびCがそれぞれ、最終出力内にあること、および最終出力に影響を及ぼすことを、リシェイプオペレーションへの軸テンソル入力から決定する。したがって、Xは、Xの第1次元および第2次元、すなわちH次元およびW次元に沿って縮約される。
W = reduce(X, [1, 2])
【0036】
プロセスは、縮約オペレーションの出力テンソルをリシェイプする(206)。縮約オペレーション、この例ではWの出力テンソルは、オリジナルパターンではあるが最終出力内にないかまたは変換されない次元を除いた形状に、リシェイプされる。オリジナルパターンにおいて、第3次元、すなわちCは、Gで除算され、第4次元、すなわちGは追加されている。第0次元、すなわちBは、最終出力内にある。したがって、この変換におけるリシェイプオペレーションは、縮約後のテンソルを[B, C/G, G]にリシェイプする。
Y2 = reshape(W, [B, C/G, G])
【0037】
プロセスは、リシェイプオペレーションの出力テンソルを、オリジナルパターンの出力テンソル内にない任意の次元に沿って縮約する(208)。この例では、オリジナルパターンは、[B, G]という形状のテンソルを出力する。したがって、この変換におけるリシェイプオペレーションの出力の第1のインデックスが縮約され、縮約オペレーションは、[B, G]という形状のテンソルを返す。
Z2 = reduce(Y2, [1])
【0038】
同じルールが、reshape(演算子( reshape(X), broadcast(Y)))という形式のオリジナルパターンの、演算子(X, broadcast( reshape( broadcast(Y))))という形式への変換にも適用される。
【0039】
本明細書において説明した本主題ならびにアクションおよび動作の実施形態は、デジタル電子回路として、有形に具現化されたコンピュータソフトウェアもしくはコンピュータファームウェアとして、本明細書において開示した構造およびそれらの構造的等価物を含むコンピュータハードウェアとして、またはそれらのうちの1つもしくは複数のものの組合せとして、実装することができる。本明細書において説明した本主題の実施形態は、データ処理装置によって実行するかまたはデータ処理装置の動作を制御するためにコンピュータプログラムキャリア上に符号化された、1つまたは複数のコンピュータプログラム、例えばコンピュータプログラム命令の1つまたは複数のモジュールとして、実装することができる。キャリアは、有形の非一時的コンピュータ記憶媒体とすることができる。その代わりにまたはそれに加えて、キャリアは、情報をデータ処理装置によって実行する目的で適切なレシーバ装置に送信できるように符号化するために生成される、人工的に生成された伝搬信号、例えば機械により生成された電気信号、光信号、または電磁信号とすることもできる。コンピュータ記憶媒体は、機械可読記憶デバイス、機械可読記憶基板、ランダムアクセスもしくはシリアルアクセスのメモリデバイス、またはそれらのうちの1つもしくは複数のものの組合せとすることもでき、あるいはその一部とすることもできる。コンピュータ記憶媒体は、伝搬信号ではない。
【0040】
「データ処理装置」という用語は、例として1つのプログラマブルプロセッサ、1つのコンピュータ、または複数のプロセッサもしくはコンピュータを含む、データを処理するためのあらゆる種類の装置、デバイス、および機械を包含するものである。データ処理装置は、専用論理回路、例えばFPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)、またはGPU(グラフィック処理装置)を含むことができる。装置は、ハードウェアに加えて、コンピュータプログラムのための実行環境を作り出すコード、例えばプロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらのうちの1つもしくは複数のものの組合せを構成するコードを含むこともできる。
【0041】
プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリ、モジュール、ソフトウェアモジュール、エンジン、スクリプト、またはコードとも呼ばれるかまたは記載されることのあるコンピュータプログラムは、コンパイル型言語もしくはインタープリタ型言語、または宣言型言語もしくは手続き型言語を含む、任意の形態のプログラミング言語で記述することができ、またそれは、スタンドアロンプログラムとして、あるいはモジュール、コンポーネント、エンジン、サブルーチン、またはデータ通信ネットワークによって相互接続された1つもしくは複数の位置にある1つもしくは複数のコンピュータを含んでよいコンピューティング環境において実行するのに適した他のユニットとして、を含む、任意の形態でデプロイすることができる。
【0042】
コンピュータプログラムは、その必要はないが、ファイルシステム内のファイルに対応してよい。コンピュータプログラムは、他のプログラムもしくはデータを保持するファイルの一部分、例えばマークアップ言語ドキュメント内に格納された1つもしくは複数のスクリプト内に、当該のプログラムに専用の単一のファイル内に、または複数の連係されたファイル、例えばコードの1つもしくは複数のモジュール、サブプログラム、もしくは一部分を格納したファイル内に、格納することができる。
【0043】
本明細書において説明したプロセスおよび論理フローは、入力データに作用し出力を生成することによって動作を実施するための1つまたは複数のコンピュータプログラムを実行する、1つまたは複数のコンピュータによって実施されることが可能である。プロセスおよび論理フローは、専用論理回路、例えばFPGA、ASIC、もしくはGPUによって、または専用論理回路とプログラムされた1つもしくは複数のコンピュータとの組合せによって、実施されることも可能である。
【0044】
コンピュータプログラムの実行に適したコンピュータは、汎用マイクロプロセッサもしくは専用マイクロプロセッサもしくはその両方、または他の任意の種類の中央処理装置に基づくことができる。一般に、中央処理装置は、読出し専用メモリまたはランダムアクセスメモリまたはその両方から、命令およびデータを受領する。コンピュータの不可欠な要素が、命令を実行するための中央処理装置、ならびに命令およびデータを格納するための1つまたは複数のメモリデバイスである。中央処理装置およびメモリは、専用論理回路によって補完されるかまたは専用論理回路に組み込むことが可能である。
【0045】
一般に、コンピュータはまた、1つまたは複数の大容量記憶デバイスを含むか、またはそこからデータを受信するように、もしくはそこにデータを転送するように動作可能に結合される。大容量記憶デバイスは、例えば、磁気ディスク、光磁気ディスク、もしくは光ディスク、またはソリッドステートドライブとすることができる。しかし、コンピュータはそのようなデバイスを有している必要はない。さらに、コンピュータは別のデバイスに、例えばほんの数例を挙げると、モバイル電話、パーソナルデジタルアシスタント(PDA)、モバイルオーディオプレーヤもしくはモバイルビデオプレーヤ、ゲーム機、グローバルポジショニングシステム(GPS)レシーバ、またはポータブル記憶デバイス、例えばユニバーサルシリアルバス(USB)フラッシュドライブに、埋め込むことができる。
【0046】
ユーザとの対話を可能にするために、本明細書において説明した本主題の実施形態は、ユーザに情報を表示するためのディスプレイデバイス、例えばLCD(液晶ディスプレイ)モニタと、ユーザがそれによってコンピュータに入力することのできる入力デバイス、例えばキーボードおよびポインティングデバイス、例えばマウス、トラックボール、またはタッチパッドとを有するコンピュータ上に実装するか、またはそのコンピュータと通信するように構成することができる。他の種類のデバイスを使用して、ユーザとの対話を可能にすることもでき、例えば、ユーザに提供されるフィードバックは、任意の形態の感覚フィードバック、例えば視覚フィードバック、聴覚フィードバック、または触覚フィードバックとすることができ、ユーザからの入力は、音響入力、音声入力、または触覚入力を含む、任意の形態で受領されることが可能である。加えて、コンピュータはユーザと、ユーザによって使用されているデバイスにドキュメントを送出し、そこからドキュメントを受信することによって、例えば、ユーザのデバイス上のウェブブラウザに、そのウェブブラウザから受信した要求に応答してウェブページを送出することによって、またはユーザデバイス、例えばスマートフォンもしくは電子タブレット上で実行されているアプリと対話することによって、対話することができる。また、コンピュータはユーザと、メッセージングアプリケーションを実行しているパーソナルデバイス、例えばスマートフォンに、テキストメッセージまたは他の形態のメッセージを送出し、ユーザから返信として応答メッセージを受信することによって、対話することができる。
【0047】
本明細書では、システム、装置、およびコンピュータプログラムコンポーネントに関連して、「~ように構成される」という用語を使用している。1つまたは複数のコンピュータからなるシステムが、特定の動作またはアクションを実施するように構成されることは、システムが、動作の際にそのシステムにその動作またはアクションを実施させるソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せを、システム上にインストールされる、ということを意味する。1つまたは複数のコンピュータプログラムが、特定の動作またはアクションを実施するように構成されることは、データ処理装置によって実行されるとその装置にその動作またはアクションを実施させる命令を、その1つまたは複数のプログラムが含む、ということを意味する。専用論理回路が、特定の動作またはアクションを実施するように構成されることは、その動作またはアクションを実施する電子論理回路を、その回路が有する、ということを意味する。
【0048】
本明細書は、実装形態の多くの具体的詳細を含んでいるが、これらは、特許請求の範囲自体によって定められる、特許請求されるものの範囲に対する限定と解釈するのではなく、特定の発明の特定の実施形態に特有であり得る特徴についての説明と解釈されたい。本明細書において別々の実施形態の文脈の中で説明されるある特定の特徴は、単一の実施形態において組み合わせて実装することもできる。反対に、単一の実施形態の文脈の中で説明されるさまざまな特徴は、複数の実施形態において別々に、または任意の適切な部分組合せで、実装することもできる。さらに、特徴については上で、ある特定の組合せで作用するものと説明されていることがあり、さらにはそのようなものとして最初に特許請求されていることすらあるが、特許請求された組合せからの1つまたは複数の特徴を、場合によっては、その組合せから削除することができ、請求項は、部分組合せまたは部分組合せの変形を対象としてよい。
【0049】
同様に、動作については、特定の順序で図面に描かれ特許請求の範囲に記載されているが、これは、望ましい結果を得るために、そのような動作が図示の特定の順序で、もしくは順番に実施されること、または図示の全ての動作が実施されることを要求するものと理解すべきではない。ある特定の状況下では、マルチタスキングおよび並列処理が有利となることがある。さらに、上述した実施形態におけるさまざまなシステムモジュールおよびシステムコンポーネントの分離は、全ての実施形態においてそのような分離を要求するものと理解すべきではなく、説明したプログラムコンポーネントとシステムは一般に、単一のソフトウェア製品に一緒に統合するか、または複数のソフトウェア製品にパッケージ化できることを理解されたい。
【0050】
以上、本主題の特定の実施形態について説明してきた。他の実施形態が、添付の特許請求の範囲に記載の範囲に含まれる。例えば、特許請求の範囲に記載されたアクションは、異なる順序で実施してもなお、望ましい結果を得ることができる。一例として、添付の図中に描かれたプロセスは、望ましい結果を得るために、図示の特定の順序、または順番を必ずしも必要とするとは限らない。場合によっては、マルチタスキングおよび並列処理が有利となることがある。
【符号の説明】
【0051】
100 例示的プロセス
200 例示的プロセス