(57)【要約】機械学習による高解像度ビデオ及びセキュリティのためのシステム、装置及び方法が開示される。システムは、ニューラルネットワークのソースコード表現を受信するように構成されている。一実施形態では、ソースコード表現は有向非巡回グラフ（ＤＡＧ）である。システムは、ソースコード表現が１つ以上のパターンのオカレンスを含むか否かを、２つ以上の隣接する層を含むパターンの各々を用いて判別する。また、システムは、パターン毎に、検出されたパターンを置換するための結合層を特定する。１つ以上のパターンのオカレンスがソースコード表現で検出される場合に、システムは、各パターンを、対応する結合層に置換する。さらに、システムは、ニューラルネットワークの最適化された表現を生成する。最適化された表現は、検出されたパターンの置換を含む。最適化された表現は、ニューラルネットワークの実行可能なバージョンを生成するために利用することができる。【選択図】図５
2020518068.tif 000002
【特許請求の範囲】
【請求項１】
メモリと、
前記メモリに接続されたプロセッサと、を備えるシステムであって、
ニューラルネットワークのソースコード表現を受信することと、
前記ソースコード表現内の２つ以上の隣接する層が第１パターンと一致することを判別することと、
前記ソースコード表現内の前記２つ以上の隣接する層を単一の結合層に置換することと、
前記ニューラルネットワークの最適化された表現を生成することであって、前記最適化された表現は前記単一の結合層を含む、ことと、
を行うように構成されている、
システム。
【請求項２】
前記システムは、
１つ以上のパターンの指標を受信することと、
パターン毎に、対応する結合層を受信することと、
前記ソースコード表現が前記１つ以上のパターンのオカレンスを含むか否かを判別することと、
前記１つ以上のパターンのオカレンスを、対応する結合層に置換することと、
を行うように構成されている、
請求項１のシステム。
【請求項３】
前記ソースコード表現は有向非巡回グラフ（ＤＡＧ）である、
請求項２のシステム。
【請求項４】
前記１つ以上のパターンの各々は、前記ＤＡＧ内の２つ以上の隣接するノードを含む、
請求項３のシステム。
【請求項５】
前記システムは、
前記ニューラルネットワークによって処理されている入力データセットのサイズの指標を受信することと、
前記ソースコード表現内で第２パターンを検出することであって、前記第２パターンは２つ以上の隣接する層を含む、ことと、
前記第２パターンを任意に置換するための第２結合層を特定することと、
前記入力データセットのサイズに基づいて、前記第２結合層のメモリ使用率を計算することと、
前記メモリ使用率が閾値未満であると判別したことに応じて、前記ソースコード表現内の前記第２パターンを前記第２結合層に置換することと、
前記メモリ使用率が前記閾値以上であると判別したことに応じて、前記ソースコード表現内の前記第２パターンを維持することと、
を行うように構成されている、
請求項１のシステム。
【請求項６】
前記単一の結合層の動作を実行するために単一のカーネルが呼び出される、
請求項１のシステム。
【請求項７】
前記最適化された表現を利用して、前記ニューラルネットワークの実行可能なバージョンを生成する、
請求項１のシステム。
【請求項８】
ニューラルネットワークのソースコード表現を受信することと、
前記ソースコード表現内の２つ以上の隣接する層が第１パターンと一致することを判別することと、
前記ソースコード表現内の前記２つ以上の隣接する層を単一の結合層に置換することと、
前記ニューラルネットワークの最適化された表現を生成することであって、前記最適化された表現は前記単一の結合層を含む、ことと、を含む、
方法。
【請求項９】
１つ以上のパターンの指標を受信することと、
パターン毎に、対応する結合層を受信することと、
前記ソースコード表現が前記１つ以上のパターンのオカレンスを含むか否かを判別することと、
前記１つ以上のパターンのオカレンスを、対応する結合層に置換することと、をさらに含む、
請求項８の方法。
【請求項１０】
前記ソースコード表現は有向非巡回グラフ（ＤＡＧ）である、
請求項９の方法。
【請求項１１】
前記１つ以上のパターンの各々は、前記ＤＡＧ内の２つ以上の隣接するノードを含む、
請求項１０の方法。
【請求項１２】
前記ニューラルネットワークによって処理されている入力データセットのサイズの指標を受信することと、
前記ソースコード表現内で第２パターンを検出することであって、前記第２パターンは２つ以上の隣接する層を含む、ことと、
前記第２パターンを任意に置換するための第２結合層を特定することと、
前記入力データセットのサイズに基づいて、前記第２結合層のメモリ使用率を計算することと、
前記メモリ使用率が閾値未満であると判別したことに応じて、前記ソースコード表現内の前記第２パターンを前記第２結合層に置換することと、
前記メモリ使用率が前記閾値以上であると判別したことに応じて、前記ソースコード表現内の前記第２パターンを維持することと、をさらに含む、
請求項８の方法。
【請求項１３】
前記単一の結合層の動作を実行するために単一のカーネルが呼び出される、
請求項８の方法。
【請求項１４】
前記最適化された表現を利用して、前記ニューラルネットワークの実行可能なバージョンを生成する、
請求項８の方法。
【請求項１５】
プログラム命令を記憶するコンピュータ可読記憶媒体であって、
前記プログラム命令は、
ニューラルネットワークのソースコード表現を受信することと、
前記ソースコード表現内の２つ以上の隣接する層が第１パターンと一致することを判別することと、
前記ソースコード表現内の前記２つ以上の隣接する層を単一の結合層に置換することと、
前記ニューラルネットワークの最適化された表現を生成することであって、前記最適化された表現は前記単一の結合層を含む、ことと、
をプロセッサに実行させる、
コンピュータ可読記憶媒体。
【請求項１６】
前記プログラム命令は、
１つ以上のパターンの指標を受信することと、
パターン毎に、対応する結合層を受信することと、
前記ソースコード表現が前記１つ以上のパターンのオカレンスを含むか否かを判別することと、
前記１つ以上のパターンのオカレンスを、対応する結合層に置換することと、
をプロセッサに実行させる、
請求項１５のコンピュータ可読記憶媒体。
【請求項１７】
前記ソースコード表現は有向非巡回グラフ（ＤＡＧ）である、
請求項１６のコンピュータ可読記憶媒体。
【請求項１８】
前記１つ以上のパターンの各々は、前記ＤＡＧ内の２つ以上の隣接するノードを含む、
請求項１７のコンピュータ可読記憶媒体。
【請求項１９】
前記プログラム命令は、
前記ニューラルネットワークによって処理されている入力データセットのサイズの指標を受信することと、
前記ソースコード表現内で第２パターンを検出することであって、前記第２パターンは２つ以上の隣接する層を含む、ことと、
前記第２パターンを任意に置換するための第２結合層を特定することと、
前記入力データセットのサイズに基づいて、前記第２結合層のメモリ使用率を計算することと、
前記メモリ使用率が閾値未満であると判別したことに応じて、前記ソースコード表現内の前記第２パターンを前記第２結合層に置換することと、
前記メモリ使用率が前記閾値以上であると判別したことに応じて、前記ソースコード表現内の前記第２パターンを維持することと、
をプロセッサに実行させる、
請求項１５のコンピュータ可読記憶媒体。
【請求項２０】
前記単一の結合層の動作を実行するために単一のカーネルが呼び出される、
請求項１５のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
（関連技術の説明）
ニューラルネットワークは、益々多くのタイプのアプリケーションで使用されている。例えば、ニューラルネットワークは、パターン認識及び分類の分野において使用されている。ニューラルネットワークは、各々が受容野を有し、集合的に入力空間を構成するニューロンの集合を含むことができる。多層型ニューラルネットワークでは、第１層のニューロン（又は、計算ユニット）の出力が第２層のニューロンの入力となり、第２層のニューロンの出力が第３層のニューロンの入力となり、以下同様である。ニューラルネットワークは、機能の階層を認識するようにトレーニングすることができる。したがって、ニューラルネットワークは、物体認識及び他のアプリケーションにおいて益々使用されるようになっている。
【０００２】
ニューラルネットワークでは、計算を、１つ以上の計算チェーン内に構成することができる処理ノードの集団に分散させることができる。これらの多層アーキテクチャを一度に１層ずつトレーニングすることができ、バックプロパゲーションを使用して微調整することができる。ニューラルネットワークは、並列処理アーキテクチャを含む様々なタイプのコンピューティングデバイスに実装することができる。並列処理アーキテクチャによって、ニューラルネットワークをより効率的に実装することができる。しかし、処理ハードウェアの近年の改良にも関わらず、ニューラルネットワークの実装は、依然として長い処理時間、高い消費電力及び他の非効率性に悩まされている。
【０００３】
本明細書に記載される方法及びメカニズムの利点は、添付の図面と併せて以下の説明を参照することによって、より良く理解することができる。
【図面の簡単な説明】
【０００４】
【図１】ニューラルネットワークを実装するためのコンピューティングシステムの一実施形態のブロック図である。
【図２】有向非巡回グラフ（ＤＡＧ）の一部を最適化する一実施形態のブロック図である。
【図３】ニューラルネットワーク有向非巡回グラフ（ＤＡＧ）を最適化するためのシステムの一実施形態のブロック図である。
【図４】結合動作の一実施形態の図である。
【図５】ニューラルネットワークの層を組み合わせる方法の一実施形態を示す一般化されたフロー図である。
【図６】ニューラルネットワークを最適化する方法の別の実施形態を示す一般化されたフロー図である。
【図７】ニューラルネットワークの表現において検出されたパターンを置換するか否かを決定する方法の一実施形態を示す一般化されたフロー図である。
【発明を実施するための形態】
【０００５】
以下の説明では、本明細書に提示される方法及びメカニズムの十分な理解を提供するために、多くの具体的な詳細が示されている。しかしながら、当業者は、様々な実施形態がこれらの具体的な詳細無しに実施され得ることを認識すべきである。いくつかの例では、周知の構造、コンポーネント、信号、コンピュータプログラム命令及び技術は、本明細書に記載されるアプローチを不明瞭にすることを避けるために、詳細に示されていない。説明を簡単且つ明確にするために、図に示される要素が必ずしも縮尺通りに描かれていないことが理解されるであろう。例えば、いくつかの要素の寸法は、他の要素と比較して誇張されている場合がある。
【０００６】
本明細書において、ソースコード表現を最適化するためのシステム、装置及び方法が開示される。一実施形態では、システムは、メモリに接続された少なくとも１つのプロセッサを含む。一実施形態では、システムは、ニューラルネットワークのソースコード表現を受信するように構成されている。一実施形態では、ソースコード表現は有向非巡回グラフ（ＤＡＧ）である。システムは、ソースコード表現内の２つ以上の隣接する層が第１パターンと一致することを判別した場合に、ソースコード表現内の２つ以上の隣接する層を単一の結合層に置換する。また、システムは、ニューラルネットワークの最適化された表現を生成し、最適化された表現は、単一の結合層を含む。最適化された表現は、ニューラルネットワークの実行可能なバージョンを生成するために利用することができる。ニューラルネットワークの実行可能なバージョンがターゲットマシンに実装されると、単一の結合層を単一のカーネルコールで呼び出すことができる。
【０００７】
一実施形態では、システムは、ソースコード表現内で検索される１つ以上のパターンの指標を受信するように構成されている。各パターンは、２つ以上の隣接する層の識別情報（identification）を含む。また、システムは、パターン毎に、検出されたパターンを置換するための対応する結合層を受信する。次に、システムは、ソースコード表現が１つ以上のパターンのオカレンス（occurrences）を含むか否かを判別する。次いで、システムは、１つ以上のパターンのオカレンスを、対応する結合層に置換する。
【０００８】
別の実施形態では、システムは、ニューラルネットワークによって処理されている入力データセットのサイズの指標を受信する。システムは、ニューラルネットワークのソースコード表現内で第２パターンを検出すると、第２パターンを任意に置換するのに用いられる第２結合層を特定する。次に、システムは、入力データセットのサイズに基づいて、第２結合層のメモリ使用率（memory utilization）を計算する。次いで、システムは、メモリ使用率がプログラム可能な閾値未満か否かを判別する。システムは、メモリ使用率が閾値未満であると判別したことに応じて、ソースコード表現内の第２パターンを第２結合層に置換する。或いは、システムは、メモリ使用率が閾値以上であると判別したことに応じて、ソースコード表現内の第２パターンを維持する。
【０００９】
ここで図１を参照すると、ニューラルネットワークを実装するコンピューティングシステム１００の一実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム１００は、メモリ１５０に接続されたシステムオンチップ（ＳｏＣ）１０５を含む。また、ＳｏＣ１０５は、集積回路（ＩＣ）とも呼ばれる。一実施形態では、ＳｏＣ１０５は、中央処理ユニット（ＣＰＵ）１６５の処理ユニット１７５Ａ〜１７５Ｎと、入出力（Ｉ／Ｏ）インタフェース１５５と、キャッシュ１６０Ａ〜１６０Ｂと、ファブリック１２０と、グラフィックス処理ユニット（ＧＰＵ）１３０と、ローカルメモリ１１０と、メモリコントローラ１４０と、を含む。また、ＳｏＣ１０５は、図を不明瞭にすることを避けるために、図１に示されていない他のコンポーネントを含むことができる。処理ユニット１７５Ａ〜１７５Ｎは、任意の数及びタイプの処理ユニットを表す。一実施形態では、処理ユニット１７５Ａ〜１７５Ｎは、ＣＰＵコアである。別の実施形態では、１つ以上の処理ユニット１７５Ａ〜１７５Ｎは、他のタイプの処理ユニット（例えば、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタル信号プロセッサ（ＤＳＰ））である。ＣＰＵ１６５の処理ユニット１７５Ａ〜１７５Ｎは、キャッシュ１６０Ａ〜１６０Ｂ及びファブリック１２０に接続されている。
【００１０】
一実施形態では、処理ユニット１７５Ａ〜１７５Ｎは、特定の命令セットアーキテクチャ（ＩＳＡ）の命令を実行するように構成されている。各処理ユニット１７５Ａ〜１７５Ｎは、１つ以上の実行ユニット、キャッシュメモリ、スケジューラ、分岐予測回路等を含む。一実施形態では、処理ユニット１７５Ａ〜１７５Ｎは、オペレーティングシステム等のシステム１００の主制御ソフトウェアを実行するように構成されている。概して、使用中に処理ユニット１７５Ａ〜１７５Ｎによって実行されるソフトウェアは、システム１００の所望の機能を実現するためにシステム１００の他のコンポーネントを制御することができる。また、処理ユニット１７５Ａ〜１７５Ｎは、アプリケーションプログラム等の他のソフトウェアを実行することができる。
【００１１】
ＧＰＵ１３０は、グラフィックス又は汎用処理に使用される任意の数及びタイプの計算ユニットを表す、計算ユニット１４５Ａ〜１４５Ｎを少なくとも含む。各計算ユニット１４５Ａ〜１４５Ｎは、任意の数の実行ユニットを含み、計算ユニット当たりの実行ユニットの数は、実施形態によって異なる。ＧＰＵ１３０は、ローカルメモリ１１０及びファブリック１２０に接続されている。一実施形態では、ローカルメモリ１１０は、高帯域幅メモリ（ＨＢＭ）を使用して実装される。
【００１２】
一実施形態では、ＧＰＵ１３０は、複数の計算ユニット１４５Ａ〜１４５Ｎ上にニューラルネットワークを実装するように構成されており、ニューラルネットワークの異なる計算が、複数の計算ユニット１４５Ａ〜１４５Ｎの異なる計算ユニットに伝達される。一実施形態では、ニューラルネットワークは、ＧＰＵ１３０上に実装される前に最適化される。最適化は、ニューラルネットワークの複数の層を単一の結合層に組み合わせることを含み、単一の結合層は、ＧＰＵ１３０上の単一のライブラリコールによって呼び出すことができる。一実施形態では、オプティマイザ（図示省略）は、ニューラルネットワークの有向非巡回グラフ（ＤＡＧ）表現内のパターンを検索し、パターンをより効率的な動作に置換するように構成されている。本明細書において、「パターン」という用語は、データ構造又はソースコード表現（例えば、ＤＡＧ）内の複数の連続する層の所定のシーケンスとして定義されている。「層」という用語は、ニューラルネットワークの前のステージによって生成された（又は、提供された）データに対して実行される動作又は動作のセットとして定義されている。ニューラルネットワークの第１層は、入力データセット（例えば、画像）上で動作する。
【００１３】
オプティマイザは、ニューラルネットワークのソースコード表現内の１つ以上の所定のパターンを検索するように構成されている。オプティマイザは、ニューラルネットワークのソースコード表現内で所定のパターンを検出すると、所定のパターンを単一のライブラリコールに置換することができる。例えば、第１パターンは、畳み込み層とそれに続く活性化層として定義することができる。オプティマイザは、ソースコード表現において第１パターンを検出すると、第１パターンを、畳み込み層と活性化層との結合動作を実行する単一のライブラリコールに置換することができる。多くの場合、単一のライブラリコールは、畳み込み層に対する第１ライブラリコールと、活性化層に対する第２ライブラリコールとを実行するよりも効率的に実行することができる。他のパターンも、一緒に結合され、単一のライブラリコールによって実行され得る、隣接するニューラルネットワークの層に対して定義することができる。例えば、第２パターンは、畳み込み層とそれに続くプーリング層として定義することができ、第３パターンは、畳み込み層とそれに続く畳み込み層として定義することができる。ソースコード表現全体を分析し、検出されたパターンを対応するライブラリコールに置換した後に、オプティマイザは、ニューラルネットワークの実行可能なバージョンを生成するために使用される、ニューラルネットワークの最適化されたソースコード表現を出力する。次に、ニューラルネットワークの実行可能なバージョンが、システム１００のＧＰＵ１３０上に実装される。
【００１４】
Ｉ／Ｏインタフェース１５５は、ファブリック１２０に接続されており、任意の数及びタイプのインタフェース（例えば、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）バス、ＰＣＩ‐Ｅｘｔｅｎｄｅｄ（ＰＣＩ‐Ｘ）、ＰＣＩＥ（ＰＣＩ  Ｅｘｐｒｅｓｓ）バス、ギガビットＥｔｈｅｒｎｅｔ（登録商標）（ＧＢＥ）バス、ユニバーサルシリアルバス（ＵＳＢ））を表している。様々なタイプの周辺機器を、Ｉ／Ｏインタフェース１５５に接続することができる。かかる周辺機器には、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティック又は他のタイプのゲームコントローラ、メディア記録デバイス、外部記憶デバイス、ネットワークインタフェースカード等が含まれるが、これらに限定されない。
【００１５】
ＳｏＣ１０５は、１つ以上のメモリモジュールを含むメモリ１５０に接続されている。各メモリモジュールは、それに搭載された１つ以上のメモリデバイスを含む。いくつかの実施形態では、メモリ１５０は、ＳｏＣ１０５も搭載されたマザーボード、又は、他のキャリアに搭載された１つ以上のメモリデバイスを含む。一実施形態では、メモリ１５０は、動作中にＳｏＣ１０５と共に用いられるランダムアクセスメモリ（ＲＡＭ）を実装するために使用される。実装されるＲＡＭは、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、抵抗変化型ＲＡＭ（ＲｅＲＡＭ）、相変化ＲＡＭ（ＰＣＲＡＭ）、又は、他の任意の揮発性若しくは不揮発性ＲＡＭであってもよい。メモリ１５０を実装するのに使用されるＤＲＡＭのタイプには、ダブルデータレート（ＤＤＲ）ＤＲＡＭ、ＤＤＲ２  ＤＲＡＭ、ＤＤＲ３  ＤＲＡＭ等が含まれるが、これらに限定されない。図１には明確に示していないが、ＳｏＣ１０５は、処理ユニット１７５Ａ〜１７５Ｎ及び／又は計算ユニット１４５Ａ〜１４５Ｎの内部にある１つ以上のキャッシュメモリを含むことができる。いくつかの実施形態では、ＳｏＣ１０５は、処理ユニット１７５Ａ〜１７５Ｎによって利用されるキャッシュ１６０Ａ〜１６０Ｂを含む。一実施形態では、キャッシュ１６０Ａ〜１６０Ｂは、キャッシュコントローラを含むキャッシュサブシステムの一部である。
【００１６】
本明細書において様々な構造の隣に表示される「Ｎ」という文字は、その構造の任意の数の要素（例えば、１つの処理ユニットを含む、ＣＰＵ１６５内の任意の数の処理ユニット１７５Ａ〜１７５Ｎ）を全体的に示しているのを意味することに留意されたい。また、文字「Ｎ」を使用する図１内の異なる符号（例えば、計算ユニット１４５Ａ〜１４５Ｎ）は、同じ数の異なる要素が提供されることを意図していない（例えば、ＣＰＵ１６５内の処理ユニット１７５Ａ〜１７５Ｎの数は、ＧＰＵ１３０の計算ユニット１４５Ａ〜１４５Ｎの数と異なっていてもよい）。
【００１７】
様々な実施形態では、コンピューティングシステム１００は、コンピュータ、ラップトップ、モバイルデバイス、サーバ、又は、他の様々なタイプのコンピューティングシステム若しくはデバイスであってもよい。コンピューティングシステム１００及び／又はＳｏＣ１０５のコンポーネントの数は、実施形態毎に異なっていてもよいことに留意されたい。各コンポーネント／サブコンポーネントの数は、図１に示す数より多くてもよいし、少なくてもよい。また、コンピューティングシステム１００及び／又はＳｏＣ１０５は、図１に示されていない他のコンポーネントを含むことができることに留意されたい。また、他の実施形態では、コンピューティングシステム１００及びＳｏＣ１０５は、図１に示されている以外の他の方法で構成することができる。
【００１８】
次に図２を参照すると、有向非巡回グラフ（ＤＡＧ）２０５の一部を最適化する一実施形態のブロック図が示されている。ＤＡＧ２０５は、ニューラルネットワークの構造を表している。ＤＡＧ２０５全体の一部のみが図２に示されている。オプティマイザ（例えば、図３のオプティマイザ３１５）は、ＤＡＧ２０５を受信し、ＤＡＧ２０５の分析を実行して、結合可能な隣接層の１つ以上のパターン（例えば、パターン２３０）をＤＡＧ２０５が含むか否かを判別するように構成されている。
【００１９】
層２１０，２１５，２２０，２２５は、任意のタイプの層を表している。例えば、ＤＡＧ２０５に含まれ得る層としては、畳み込み層、プーリング層、活性化層、サブサンプリング層、正規化層、及び／又は、他の層が挙げられるが、これらに限定されない。ターゲットコンピューティングシステム（例えば、図１のシステム１００）によって実行される場合、各層２１０〜２２５は、別個のカーネルを呼び出すことによって実装される。したがって、ターゲットコンピューティングシステムは、ＤＡＧ２０５の４つの層２１０〜２２５を呼び出すために、４つのカーネルコールを実装する。
【００２０】
この説明のために、層２１５から層２２０、層２２０から層２２５への接続は、オプティマイザによって検索されている所定のパターン２３０と一致すると想定する。したがって、オプティマイザは、検出されたパターン２３０の層を単一の層２４５に置換することができる。層２４５は、単一のカーネルにおいて層２１５，２２０，２２５の動作を組み合わせる。したがって、オプティマイザからの出力は、最適化されたＤＡＧ２４０である。図２に示す最適化されたＤＡＧ２４０の一部は、２つのカーネルコールを有するコンピューティングシステムに実装され得る２つの別個の層を含む。これは、４つのカーネルコールを用いて実装され得るＤＡＧ２０５よりも改善されている。
【００２１】
次に図３を参照すると、ニューラルネットワーク有向非巡回グラフ（ＤＡＧ）３１０を最適化するためのシステム３００の一実施形態のブロック図が示されている。一実施形態では、ニューラルネットワークの構造は、ＤＡＧ３１０として表されている。ニューラルネットワークＤＡＧの一部の例を図２に示す。ニューラルネットワークＤＡＧ内では、ノードはネットワークの層を表しており、エッジは層間のデータ転送を表している。
【００２２】
ニューラルネットワークＤＡＧ３１０は、オプティマイザ３１５への入力として設けられる。さらに、オプティマイザ３１５に設けられた他の入力は、入力データサイズ３２０と、ターゲットマシンパラメータ３２５と、最適化基準３３０と、パターン３３５と、結合層３４０と、を含む。他の実施形態では、オプティマイザ３１５は、これらの入力のサブセットを受信し、及び／又は、他の入力を受信することができる。入力データサイズ３２０は、ニューラルネットワークＤＡＧ３１０が表すニューラルネットワークによって処理される入力データセットのサイズの指標を含む。いくつかの実施形態では、入力データセットのサイズが不明であってもよく、これらの実施形態では入力データサイズ３２０を省略することができる。ターゲットマシンパラメータ３２５は、ニューラルネットワークを実装するターゲットマシンの仕様（例えば、メモリ容量、計算ユニットの数）を含む。場合によっては、ターゲットマシンが不明であってもよく、これらの実施形態ではターゲットマシンパラメータ３２５を省略することができる。
【００２３】
最適化基準３３０は、ニューラルネットワークを実装する際に満たすことが望ましい１つ以上の基準又は目標（例えば、パフォーマンス目標、電力目標）を含む。パターン３３５は、ニューラルネットワークＤＡＧ３１０内で見つけられた場合に、単一の結合層に置換することができる層の１つ以上のパターンを含む。オプティマイザ３１５に提供されたパターン３３５毎に、検出されたパターン３３５を置換するのに使用可能な結合層３４０が提供される。オプティマイザ３１５は、これらの入力を使用してニューラルネットワークＤＡＧ３１０を分析及び変更し、最適化されたニューラルネットワークＤＡＧ３４５を生成する。一実施形態では、オプティマイザ３１５が最適化されたニューラルネットワークＤＡＧ３４５を生成する場合に、ニューラルネットワークＤＡＧ３１０内で見つけられた任意のパターンを、対応する結合層３４０に置換することができる。実施形態に応じて、オプティマイザ３１５を、ハードウェア及び／又はソフトウェアの任意の適切な組み合わせを使用して実装することができる。一実施形態では、オプティマイザ３１５は、ツール（例えば、コンパイラ、又は、グラフ構造を分析する機能を含むコンパイラの様なツール等）である。別の実施形態では、オプティマイザ３１５は、最適化されたニューラルネットワークＤＡＧ３４５を別個のコンパイラに伝達する。
【００２４】
一実施形態では、オプティマイザ３１５は、最適化されたニューラルネットワークＤＡＧ３４５の複数の異なるバージョンを生成するために、ニューラルネットワークＤＡＧ３１０上でグラフカバリング技術を実行することができる。オプティマイザ３１５は、最適化されたニューラルネットワークＤＡＧ３４５の何れのバージョンが最も低コストであるかを決定するために、異なるバージョンの各々のコスト推定値を生成するように構成されている。コスト推定値は、オプティマイザ３１５に提供された異なる最適化基準３３０に基づいて生成されてもよい。したがって、オプティマイザ３１５は、最適化されたニューラルネットワークＤＡＧ３４５として生成される最終解のために、コストが最も低いバージョンを利用することができる。
【００２５】
次に図４を参照すると、結合動作の一実施形態の図が示されている。動作４００が図４の左側に示されており、動作４００は、畳み込み動作４０５と活性化動作４１０とを含む。各動作の開始時にデータがＧＰＵにコピーされ、各動作の終了時に結果がホストにコピーされる。畳み込み動作４０５及び活性化動作４１０は、より効率的な実装を生成するために組み合わせることができる動作の例である。
【００２６】
動作４２０が図４の右側に示されており、動作４２０は、畳み込み動作と活性化動作とを組み合わせた単一のカーネルを含む。したがって、動作４２０は、動作４００と比較して、２つ少ないデータコピーと１つ少ないＧＰＵカーネル呼び出しとを用いて実行することができる。一実施形態では、オプティマイザ（例えば、図３のオプティマイザ３１５）は、動作４００を動作４２０に変換するように構成されている。オプティマイザは、単一のカーネル呼び出しに結合され得る動作（例えば、畳み込みとそれに続く活性化）を検索するように構成されている。他の実施形態では、他の動作を一緒に結合することができる。例えば、畳み込み動作とそれに続くプーリング動作とを、単一のカーネルに結合することができる。さらに、場合によっては、２つ以上の畳み込み動作を単一のカーネルに結合することができる。
【００２７】
次に図５を参照すると、ニューラルネットワークの層を結合する方法５００の一実施形態が示されている。説明のために、この実施形態におけるステップ及び図６〜図７のステップを順番に示している。しかしながら、記載された方法の様々な実施形態では、記載された要素のうち１つ以上の要素が、同時に実行されてもよいし、図示された順序とは異なる順序で実行されてもよいし、完全に省略されてもよいことに留意されたい。必要に応じて、他の追加の要素が実行されてもよい。本明細書に記載される様々なシステム又は装置は、方法５００を実施するように構成されている。
【００２８】
コンピューティングシステムは、ニューラルネットワークのソースコード表現を受信する（ブロック５０５）。一実施形態では、ソースコード表現は有向非巡回グラフ（ＤＡＧ）である。次に、システムは、ソースコード表現内の２つ以上の隣接する層が第１パターンと一致することを判別する（ブロック５１０）。ソースコード表現がＤＡＧである場合に、２つ以上の隣接する層は、ＤＡＧ内の２つ以上の隣接するノードに対応する。次に、システムは、ソースコード表現内の２つ以上の隣接する層を単一の結合層に置換する（ブロック５１５）。次いで、システムは、ニューラルネットワークの最適化された表現を生成し、この最適化された表現は、単一の結合層を含む（ブロック５２０）。そして、最適化された表現を用いて、ニューラルネットワークの実行可能なバージョンを生成する（ブロック５２５）。次に、ニューラルネットワークの実行可能なバージョンを、並列プロセッサ（例えば、ＧＰＵ）に実装する（ブロック５３０）。ブロック５３０の後に、方法５００は終了する。
【００２９】
次に図６を参照すると、ニューラルネットワークを最適化する方法６００の一実施形態が示されている。オプティマイザは、１つ以上のパターンの指標を受信する（ブロック６０５）。一実施形態では、オプティマイザは、様々なタイプのコンピューティングシステムの何れかで実行可能なプログラム命令を含む。コンピューティングシステムのタイプは、実施形態毎に変えることができる。オプティマイザは、パターン毎に、パターンの代わりに使用される対応する結合層を受信する（ブロック６１０）。次に、オプティマイザは、ニューラルネットワークのソースコード表現が１つ以上のパターンのオカレンスを含むか否かを判別する（ブロック６１５）。そして、オプティマイザは、１つ以上のパターンのオカレンスを、対応する結合層に置換する（ブロック６２０）。ブロック６２０の後に、方法６００は終了する。
【００３０】
次に図７を参照すると、ニューラルネットワーク表現等のグラフ内で検出されたパターンを置換するか否かを判別する方法７００の一実施形態が示されている。コンピューティングシステム上で実行されるオプティマイザは、ニューラルネットワーク表現を受信するか、そうでなければアクセスする（ブロック７０５）。一実施形態では、表現はＤＡＧである。また、オプティマイザは、ニューラルネットワークによって処理されている入力データセットのサイズの指標を受信する（ブロック７１０）か、そうでなければ決定し、ニューラルネットワークを実装するのに使用されるターゲットデバイスの仕様を受信する（ブロック７１５）か、そうでなければ決定する。様々な実施形態では、仕様は、ターゲットデバイスの様々な計算ユニットに利用可能なメモリ量を含むか、そうでなければ示すことができる。次に、オプティマイザは、ターゲットデバイスの仕様に基づいて、メモリ使用率閾値を計算する（ブロック７２０）。
【００３１】
次に、オプティマイザは、ニューラルネットワーク表現においてパターンを検索する（ブロック７２５）。オプティマイザは、表現の一部において所定のパターンを検出すると（条件ブロック７３０：Ｙｅｓ）、入力データセットのサイズに基づいて、所定のパターンを置換し得る結合カーネルのメモリ使用率を計算する（ブロック７３５）。一実施形態では、メモリ使用率は、第２結合層の全ての動作によって使用されるメモリの合計として計算される。オプティマイザは、表現の一部において所定のパターンを検出しない場合（条件ブロック７３０：Ｎｏ）、ブロック７２５に戻り、当該パターンについて表現の他の部分を検索する。
【００３２】
オプティマイザは、計算されたメモリ使用率がプログラム可能な閾値未満であると判別した場合（条件ブロック７４０：Ｙｅｓ）、表現内の所定のパターンを結合カーネルに置換する（ブロック７４５）。一実施形態では、ブロック７２０において計算されたメモリ使用率閾値は、条件ブロック７４０においてプログラム可能な閾値として利用される。オプティマイザは、計算されたメモリ使用率がプログラム可能な閾値以上であると判別した場合（条件ブロック７４０：Ｎｏ）、表現内の第１パターンを維持する（ブロック７５０）。ブロック７４５，７５０の後に、方法７００はブロック７２５に戻り、表現の他の部分におけるパターンの検索を継続する。表現全体が既に検索済みである場合に、方法７００は終了する。
【００３３】
様々な実施形態では、ソフトウェアアプリケーションのプログラム命令を使用して、上述した方法及び／又はメカニズムが実施される。プログラム命令は、例えばＣ言語等の高水準プログラミング言語でハードウェアの挙動を記述する。或いは、Ｖｅｒｉｌｏｇ等のハードウェア設計言語（ＨＤＬ）が使用される。プログラム命令は、非一時的なコンピュータ可読記憶媒体に記憶される。複数のタイプの記憶媒体が利用可能である。記憶媒体は、使用中にコンピューティングシステムによってアクセス可能であり、プログラム命令及び付随するデータを、プログラム実行のためにコンピューティングシステムに提供する。コンピューティングシステムは、少なくとも１つ以上のメモリと、プログラム命令を実行するように構成された１つ以上のプロセッサと、を含む。
【００３４】
上述した実施形態は、実施の非限定的な例に過ぎないことを強調する。上記の開示が十分に理解されれば、多くの変形及び修正が当業者に明らかになるであろう。以下の特許請求の範囲が、かかる変形及び修正を全て包含するように解釈されることを意図している。
【図１】
2020518068.tif 000003
【図２】
2020518068.tif 000004
【図３】
2020518068.tif 000005
【図４】
2020518068.tif 000006
【図５】
2020518068.tif 000007
【図６】
2020518068.tif 000008
【図７】
2020518068.tif 000009
【国際調査報告】
2020518068.tif 000010
2020518068.tif 000011