(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023127069
(43)【公開日】2023-09-13
(54)【発明の名称】情報処理装置およびメモリアクセス制御方法
(51)【国際特許分類】
G06F 15/167 20060101AFI20230906BHJP
G06N 20/00 20190101ALI20230906BHJP
【FI】
G06F15/167 610B
G06N20/00
【審査請求】未請求
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2022030617
(22)【出願日】2022-03-01
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】飯澤 健
【テーマコード(参考)】
5B045
【Fターム(参考)】
5B045BB29
5B045BB35
5B045DD03
5B045EE03
(57)【要約】
【課題】複数の深層学習で使用するデータを共有メモリに読み書きする場合、共有メモリから計算ユニットへのデータの転送が間に合わずに逆伝播処理が遅れる頻度を低減し、深層学習の実行効率の低下を抑制する。
【解決手段】情報処理装置は、深層学習をそれぞれ実行する複数の計算ユニットと、複数の計算ユニットにより共有される共有メモリと、順伝播処理で生成されるデータの共有メモリへの書き込み要求と、逆伝播処理に使用されるデータの共有メモリからの読み出し要求と、逆伝播処理の開始時刻とを保持するアクセス情報保持部と、アクセス情報保持部に保持された情報に基づいて、逆伝播処理の開始時刻までに共有メモリからデータが転送されるように、計算ユニットと共有メモリとの間でのデータ転送をスケジューリングし、スケジューリング結果に基づいて共有メモリにアクセスするスケジューリング部と、を有する。
【選択図】
図6
【特許請求の範囲】
【請求項1】
深層学習をそれぞれ実行する複数の計算ユニットと、
前記複数の計算ユニットにより共有される共有メモリと、
前記複数の計算ユニットによる順伝播処理でそれぞれ生成されるデータを前記共有メモリに書き込む書き込み要求と、前記複数の計算ユニットによる逆伝播処理にそれぞれ使用される前記データを前記共有メモリから読み出す読み出し要求と、前記逆伝播処理の開始時刻とを前記複数の計算ユニット毎に保持するアクセス情報保持部と、
前記アクセス情報保持部に保持された前記書き込み要求、前記読み出し要求および前記逆伝播処理の開始時刻に基づいて、前記逆伝播処理の開始時刻までに前記共有メモリから逆伝播処理を実行する計算ユニットに前記データが転送されるように、複数の計算ユニットと前記共有メモリとの間でのデータ転送をスケジューリングし、スケジューリング結果に基づいて前記共有メモリにアクセスするスケジューリング部と、
を有する情報処理装置。
【請求項2】
前記複数の計算ユニットに含まれ、順伝播処理で生成される前記データと前記共有メモリから転送される前記データとを保持する複数の個別メモリを有し、
前記スケジューリング部は、前記書き込み要求と前記読み出し要求とが前記アクセス情報保持部に保持され、前記読み出し要求の要求元の計算ユニットの個別メモリの空き容量が第1閾値以上の場合、前記読み出し要求に対応するデータ転送を前記書き込み要求に対応するデータ転送より優先して実行する
請求項1に記載の情報処理装置。
【請求項3】
前記スケジューリング部は、前記書き込み要求と、要求元の計算ユニットが互いに異なる複数の前記読み出し要求が前記アクセス情報保持部に保持され、前記複数の読み出し要求の前記要求元の計算ユニットの前記個別メモリの空き容量が前記第1閾値以上の場合、前記アクセス情報保持部に保持された前記逆伝播処理の開始時刻が早いものから読み出し要求に対応するデータ転送を実行する
請求項2に記載の情報処理装置。
【請求項4】
前記複数の個別メモリの空き容量の管理に使用される空き容量保持部を有し、
前記スケジューリング部は、前記書き込み要求に対応するデータ転送を実行した場合、データ転送元の計算ユニットに対応して前記空き容量保持部に保持された空き容量の値を減らし、前記読み出し要求に対応するデータ転送を実行した場合、データ転送先の計算ユニットに対応して前記空き容量保持部に保持された空き容量の値を増やす
請求項3に記載の情報処理装置。
【請求項5】
前記アクセス情報保持部は、前記共有メモリからの前記データの読み出しを開始する読み出し時刻を前記複数の計算ユニット毎に保持し、
前記スケジューリング部は、前記読み出し要求と、要求元の計算ユニットが互いに異なる複数の前記書き込み要求が前記アクセス情報保持部に保持され、前記複数の書き込み要求の前記要求元の計算ユニットの前記個別メモリの空き容量が前記第1閾値未満の場合、前記アクセス情報保持部に保持された前記読み出し時刻が遅いものから書き込み要求に対応するデータ転送を実行する
請求項2ないし請求項4のいずれか1項に記載の情報処理装置。
【請求項6】
前記スケジューリング部は、前記アクセス情報保持部に保持された前記読み出し時刻に、前記読み出し要求に対応するデータ転送が開始されない場合、前記アクセス情報保持部に保持された読み出し時刻を遅らせる
請求項5に記載の情報処理装置。
【請求項7】
前記スケジューリング部は、前記アクセス情報保持部に保持された前記逆伝播処理の開始時刻に、逆伝播処理が開始されない場合、前記アクセス情報保持部に保持された前記逆伝播処理の開始時刻を遅らせる
請求項1ないし請求項6のいずれか1項に記載の情報処理装置。
【請求項8】
前記アクセス情報保持部に保持される情報は、深層学習を実行する前に前記複数の計算ユニットが実行するプロファイラにより取得された順伝播処理および逆伝播処理の情報に基づいて計算され、前記アクセス情報保持部に格納される
請求項1ないし請求項7のいずれか1項に記載の情報処理装置。
【請求項9】
深層学習をそれぞれ実行する複数の計算ユニットと、前記複数の計算ユニットにより共有される共有メモリと、前記複数の計算ユニットによる順伝播処理でそれぞれ生成されるデータを前記共有メモリに書き込む書き込み要求と、前記複数の計算ユニットによる逆伝播処理にそれぞれ使用される前記データを前記共有メモリから読み出す読み出し要求と、前記逆伝播処理の開始時刻とを前記複数の計算ユニット毎に保持するアクセス情報保持部と、を有する情報処理装置のメモリアクセス制御方法であって、
前記情報処理装置が有するスケジューリング部が、
前記アクセス情報保持部に保持された前記書き込み要求、前記読み出し要求および前記逆伝播処理の開始時刻に基づいて、前記逆伝播処理の開始時刻までに前記共有メモリから逆伝播処理を実行する計算ユニットに前記データが転送されるように、複数の計算ユニットと前記共有メモリとの間でのデータ転送をスケジューリングし、
スケジューリング結果に基づいて前記共有メモリにアクセスする
メモリアクセス制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置およびメモリアクセス制御方法に関する。
【背景技術】
【0002】
複数の計算機に共有される共有キャッシュと共有メモリとを有し、計算機のメモリアクセスの履歴に基づいて共有メモリから共有キャッシュにデータを予め転送することで、アクセス性能を向上するシステムが知られている(例えば、特許文献1、2参照)。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開平6-324942号公報
【特許文献2】特開2005-157711号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
ところで、誤差逆伝播法によるディープニューラルネットワークの訓練では、訓練を実行するワークロードは、順伝播処理で算出した各レイヤの学習データを使用して逆伝播処理を実行することで各レイヤで使用する重みを更新する。例えば、ディープニューラルネットワークの訓練において、順伝播処理で生成した学習データを外部メモリに退避し、逆伝播処理の実行時に外部メモリから学習データを読み出す場合がある。
【0005】
例えば、複数のワークロードにより複数のディープニューラルネットワークの訓練が並列に実行され、複数の学習データが共有メモリに保持される場合、共有メモリのアクセスが競合する場合がある。共有メモリのアクセスの競合により、逆伝播処理で使用する学習データが逆伝播処理の開始時までに共有メモリから転送されない場合、逆伝播処理の開始が遅れ、訓練時間が長くなってしまう。通常、ディープニューラルネットワークの訓練では、多数個の入力データを複数回使用して順伝播処理と逆伝播処理とが繰り返し実行される。これにより、逆伝播処理の開始の遅れ時間が積算され、訓練時間はさらに長くなる。
【0006】
1つの側面では、本発明は、複数の深層学習で使用するデータを共有メモリに読み書きする場合に、共有メモリから計算ユニットへのデータの転送が間に合わずに逆伝播処理が遅れる頻度を低減し、深層学習の実行効率の低下を抑制することを目的とする。
【課題を解決するための手段】
【0007】
一つの観点によれば、情報処理装置は、深層学習をそれぞれ実行する複数の計算ユニットと、前記複数の計算ユニットにより共有される共有メモリと、前記複数の計算ユニットによる順伝播処理でそれぞれ生成されるデータを前記共有メモリに書き込む書き込み要求と、前記複数の計算ユニットによる逆伝播処理にそれぞれ使用される前記データを前記共有メモリから読み出す読み出し要求と、前記逆伝播処理の開始時刻とを前記複数の計算ユニット毎に保持するアクセス情報保持部と、前記アクセス情報保持部に保持された前記書き込み要求、前記読み出し要求および前記逆伝播処理の開始時刻に基づいて、前記逆伝播処理の開始時刻までに前記共有メモリから逆伝播処理を実行する計算ユニットに前記データが転送されるように、複数の計算ユニットと前記共有メモリとの間でのデータ転送をスケジューリングし、スケジューリング結果に基づいて前記共有メモリにアクセスするスケジューリング部と、を有する。
【発明の効果】
【0008】
複数の深層学習で使用するデータを共有メモリに読み書きする場合に、共有メモリから計算ユニットへのデータの転送が間に合わずに逆伝播処理が遅れる頻度を低減し、深層学習の実行効率の低下を抑制することができる。
【図面の簡単な説明】
【0009】
【
図1】一実施形態における情報処理装置の一例を示すブロック図である。
【
図2】
図1の情報処理装置のアドレス空間の一例を示す説明図である。
【
図3】
図2のリクエストキューの一例を示す説明図である。
【
図4】
図2の空き容量管理テーブルの一例を示す説明図である。
【
図5】
図3の逆伝播処理の開始時刻およびプリフェッチ開始時刻の計算方法の一例を示す説明図である。
【
図6】
図1の情報処理装置によるDNNの訓練の一例を示す説明図である。
【
図7】
図1の各ワークロードがDNNの訓練の前に実行する処理の一例を示すフロー図である。
【
図8】
図1の各ワークロードが実行する順伝播処理の動作の一例を示すフロー図である。
【
図9】
図1の各ワークロードが実行する逆伝播処理の動作の一例を示すフロー図である。
【
図10】
図1のスケジューラの動作の一例を示すフロー図である。
【
図11】
図10のステップS60の動作の一例を示すフロー図である。
【発明を実施するための形態】
【0010】
以下、図面を参照して、実施形態が説明される。
【0011】
図1は、一実施形態における情報処理装置の一例を示す。
図1に示す情報処理装置100は、例えば、深層学習を実行可能なサーバである。情報処理装置100は、CPU(Central Processing Unit)10、CPUメモリ20、n個のGPU(Graphics Processing Unit)30(301、302、303、...、30n)およびn個のGPUメモリ40(401、402、403、...、40n)を有する。また、情報処理装置100は、ストレージ50および入出力I/F(インタフェース)部60を有する。
【0012】
CPU10は、情報処理装置100の全体を制御するとともに、プログラムを実行することでスケジューラ12およびデバイスアロケータ14として機能する。スケジューラ12は、スケジューリング部の一例である。スケジューラ12は、後述するワークロードWLが深層学習を実行する場合に、スケジューリングポリシに基づいて各GPUメモリ40とCPUメモリ20とのデータ転送の順序等を決定し、決定した順序にしたがってデータ転送を実行する。スケジューラ12の動作の例は、
図10から
図12で説明される。
【0013】
デバイスアロケータ14は、ワークロードWL毎に、ワークロードWLで使用するCPUメモリ20の領域を割り当てる。デバイスアロケータ14による割り当てについては、後述する。なお、スケジューラ12およびデバイスアロケータ14を実現するプログラムは、CPUメモリ20に格納され、CPU10より実行される。
【0014】
CPUメモリ20は、CPU10に接続され、各GPU30からもアクセス可能な共有メモリである。例えば、CPUメモリ20には、リクエストキュー22および空き容量管理テーブル24の領域が割り当てられる。リクエストキュー22の例は、
図3に示され、空き容量管理テーブル24の例は、
図4に示される。リクエストキュー22は、アクセス情報保持部の一例であり、空き容量管理テーブル24は、空き容量保持部の一例である。
【0015】
特に限定されないが、CPUメモリ20は、例えば、DRAM(Dynamic Random Access Memory)等のメモリモジュールでもよい。なお、CPUメモリ20の代わりに、CXL(Compute Express Link)規格に対応するCXLメモリ等が入出力I/F部60に接続されてもよい。この場合、入出力I/F部60は、PCIe(Peripheral Component Interconnect express)ポートを含む。
【0016】
複数のGPU30の各々は、ディープニューラルネットワークの訓練を実行可能である。以下では、ディープニューラルネットワークは、DNNとも称され、ディープニューラルネットワークの訓練は、深層学習とも称される。末尾の数値が同じGPU30およびGPUメモリ40は、互いに接続され、深層学習を実行するワークロードWL(WL1、WL2、WL3)として動作可能である。ワークロードWLは、深層学習を実行する計算ユニットの一例である。なお、複数のGPU30と複数のGPUメモリ40とにより1つの計算ユニットが構築されてもよく、1つのGPU30と1つのGPUメモリ40とにより複数の計算ユニットが構築されてもよい。
【0017】
各GPU30は、バスBUSを介してCPU10に接続され、CPU10を介してCPUメモリ20にアクセス可能である。GPUメモリ40には、例えば、深層学習で使用する訓練データ(画像データ等の入力データ)および重み等のパラメータと、
図2に示すプロファイラ26およびワークロード実行プログラム28とが保持される。特に限定されないがGPUメモリ40は、SRAM(Static Random Access Memory)でもよい。GPUメモリ40は、個別メモリの一例である。
【0018】
各ワークロードWL(GPU30)は、ワークロード処理プログラムを実行することで、深層学習の順伝播処理と逆伝播処理とを実行する。ワークロードWLは、深層学習の順伝播処理において、ディープニューラルネットワークのレイヤ毎に重みW(
図6)を使用して特徴マップを生成する。また、各ワークロードWLは、深層学習の逆伝播処理において、順伝播処理で生成した特徴マップを使用してレイヤ毎に誤差情報を生成し、生成した誤差情報により重みWを更新する。特徴マップは、順伝播処理および逆伝播処理で使用されるデータの一例である。
【0019】
各ワークロードWLは、順伝播処理で生成した特徴マップをGPUメモリ40に格納する。GPUメモリ40に格納された特徴マップは、リクエストキュー22に保持された情報に基づいて、スケジューラ12によりGPUメモリ40からCPUメモリ20に転送される。CPUメモリ20が保持する特徴マップは、リクエストキュー22に保持された情報に基づいて、スケジューラ12により逆伝播処理の実行前にCPUメモリ20からGPUメモリ40に転送される。
【0020】
以下では、GPUメモリ40からCPUメモリ20への特徴マップの転送(書き込み)は、オフロードとも称される。CPUメモリ20からGPUメモリ40への特徴マップの転送(読み出し)は、プリフェッチとも称される。
【0021】
各ワークロードWLは、特徴マップをGPUメモリ40からCPUメモリ20にオフロードするオフロード要求を、順伝播処理のレイヤ毎にリクエストキュー22に格納する。各ワークロードWLは、特徴マップをCPUメモリ20からGPUメモリ40にプリフェッチするプリフェッチ要求を逆伝播処理のレイヤ毎にリクエストキュー22に格納する。例えば、各ワークロードWLがオフロード要求およびプリフェッチ要求をリクエストキューに格納するタイミングは、各レイヤの深層学習を開始する前である。
【0022】
ストレージ50は、例えば、バスBUSに接続される。ストレージ50は、深層学習に使用する画像データおよび各種プログラム(スケジューラ12、デバイスアロケータ14、プロファイラ26およびワークロード実行プログラム28等)を展開可能に保持する。なお、各種プログラムは、入出力I/F部60に接続される図示しない記録媒体に格納され、記録媒体からストレージ50にダウンロードされ、CPUメモリ20またはGPUメモリ40に展開されてもよい。入出力I/F部60は、例えば、バスBUSに接続される。
【0023】
この実施形態では、順伝播処理および逆伝播処理の計算は、GPU30により実行され、GPUメモリ40とCPUメモリ20との間のデータ転送は、CPU10(スケジューラ12)により実行される。このため、順伝播処理および逆伝播処理の計算とデータ転送とは、並列に実行することができる。したがって、順伝播処理および逆伝播処理の計算のバックグラウンドでオフロードとプリフェッチとを実行することができれば、データ転送によりワークロードWLによる深層学習の処理時間が延びることを抑止することができる。
【0024】
例えば、各ワークロードWLの順伝播処理および逆伝播処理において、CPUメモリ20にアクセスするメモリアクセス時間を隠蔽するための平均メモリアクセス性能b(w)は、式(1)により算出される。
b(w)=(DTo+DTp)/CAL …(1)
【0025】
式(1)において、符号DToは、CPUメモリ20にオフロードする特徴マップの合計データサイズを示し、符号DTpは、CPUメモリ20からプリフェッチする特徴マップの合計データサイズを示す。特徴マップの合計データサイズDTo、DTpは、互いに等しくてもよい。式(1)において、符号CALは、各ワークロードWLの順伝播処理および逆伝播処理の合計計算時間を示す。合計データサイズDTo、DTpおよび合計計算時間CALは、深層学習の仕様として、情報処理装置100の外部からデバイスアロケータ14に入力される。
【0026】
なお、実際には、特徴マップのサイズ、オフロードおよびプリフェッチに掛かる時間、およびワークロードWLによる計算時間は、レイヤ毎に異なるので、オフロードおよびプリフェッチに掛かる時間を隠蔽できないレイヤも存在し得る。しかしながら、ここでは簡単化のため、ディープニューラルネットワークの全てのレイヤの各々で生成される特徴マップのサイズは、互いに同じであるとし、各レイヤの計算時間は、互いに同じであるとする。
【0027】
デバイスアロケータ14は、平均メモリアクセス性能b(w)が、CPU10とCPUメモリ20との間のバンド幅Bを超えないように、ワークロードWL毎に特徴マップをオフロードするCPUメモリ20の領域を割り当てる。例えば、デバイスアロケータ14は、バンド幅Bを、並列に実行されるワークロードWLの数mで除したB/mを各ワークロードWLに割り当てるバンド幅とする。バンド幅B/mは、スケジューラ12が特徴マップをオフロードし、特徴マップをプリフェッチするときの転送性能を示す。
【0028】
デバイスアロケータ14は、ワークロードWL毎にCPUメモリ20に割り当てた領域を深層学習の仕様として情報処理装置100の外部に通知してもよい。各ワークロードWLは、深層学習の仕様に基づいて、
図3に示すリクエストキュー22にメモリアドレス等の情報を設定する。
【0029】
図2は、
図1の情報処理装置100のアドレス空間の一例を示す。情報処理装置100のアドレス空間は、CPU10および各GPU20により共通にアクセスされる集約アドレス空間である。アドレス空間には、各GPU30で使用されるGPUメモリ領域、管理領域、データ領域およびCPU10が実行するプログラムが格納されるプログラム領域が割り当てられる。GPUメモリ領域は、各GPUメモリ40に属する。管理領域、データ領域およびプログラム領域は、CPUメモリ20に属する。
【0030】
GPUメモリ領域には、GPU30毎に、特徴マップおよび重み等の各種データと、プロファイル結果と、ワークロードWLを実行するワークロード処理プログラムと、データ領域から転送される図示しないプロファイラ等とが格納される。プロファイル結果は、GPU30が実行するプロファイラ26により得られる。
【0031】
管理領域には、リクエストキュー22および空き容量管理テーブル24が格納される。データ領域には、GPUメモリ40からオフロードされる特徴マップを保持するオフロード領域と、プロファイラ26およびワークロード処理プログラム28とが格納される。プログラム領域には、CPU10により実行されるスケジューラ12およびデバイスアロケータ14等が格納される。
【0032】
プロファイラ26は、深層学習を実行する前に、各GPU30が仮に実行するワークロードWLとともに実行され、ワークロードWLに関する情報を取得する。例えば、仮のワークロードWLは、イテレーションを数十回実行する。なお、ディープニューラルネットワークの訓練は、例えば、同一サイズのデータセットに対する数百万回のイテレーションを含む場合がある。そして、数十回のイテレーションによってもワークロードWLの挙動をプロファイルすることが可能である。
【0033】
プロファイリングにより得られる情報は、読み出し時間TINPUT、順伝播処理におけるレイヤiの計算時間TF(i)、逆伝播処理におけるレイヤiの計算時間TB(i)、およびレイヤiの特徴マップのサイズs(i)を含む。読み出し時間TINPUTは、訓練データ(入力データ)をストレージ50等からGPUメモリ40に転送するために掛かる時間である。なお、特徴マップは、順伝播処理および逆伝播処理において、入力レイヤを除くレイヤiに入力され、レイヤiの計算に使用される。
【0034】
図3は、
図2のリクエストキュー22の一例を示す。リクエストキュー22は、オフロード要求またはプリフェッチ要求が格納される複数のエントリを有する。各エントリは、ワークロードWLおよびレイヤLの識別子と、要求種別と、読み出しアドレスと、書き込みアドレスと、転送サイズと、逆伝播処理の開始時刻と、プリフェッチ開始時刻とを、レイヤ毎に保持する領域を有する。
【0035】
読み出しアドレス、書き込みアドレスおよび転送サイズの数値の前に付す符号"0x"は、数値が16進数であることを示す。例えば、逆伝播処理の開始時刻およびプリフェッチ開始時刻は、深層学習に使用する訓練データのストレージ50からの転送開始時刻に対する経過時間であり、時:分:秒で示される。オフロード要求では、読み出しアドレスは、GPUメモリ40のアドレスを示し、書き込みアドレスは、CPUメモリ20のアドレスを示す。プリフェッチ要求では、読み出しアドレスは、CPUメモリ20のアドレスを示し、書き込みアドレスは、GPUメモリ40のアドレスを示す。例えば、転送サイズの単位は、メガバイトである。
【0036】
例えば、各ワークロードWLは、レイヤLの計算が終了する毎に、オフロード要求の情報およびプリフェッチ要求の情報を、自ワークロードWLおよびレイヤLの識別子とともにエントリのいずれかに格納する。各ワークロードWLは、オフロード要求の情報とともに、プリフェッチ開始時刻をエントリに格納する。各ワークロードWLは、プリフェッチ要求の情報とともに、逆伝播処理の開始時刻をエントリに格納する。なお、各ワークロードWLは、リクエストキュー22に格納するオフロードの情報およびプリフェッチの情報を、深層学習を開始する前に計算する。
【0037】
オフロード要求での書き込みアドレスおよびプリフェッチ要求での読み出しアドレスは、各ワークロードWLが、デバイスアロケータ14によりワークロードWL毎に割り当てられたCPUメモリ20のメモリ領域のアドレス範囲に応じて計算する。転送サイズ、逆伝播処理の開始時刻およびプリフェッチ開始時刻は、各ワークロードWLが、各ワークロードWLで実行されるプロファイラ26により取得される情報に基づいて計算する。逆伝播処理の開始時刻およびプリフェッチ開始時刻の計算方法については、
図5で説明される。
【0038】
プリフェッチ開始時刻は、逆伝播処理を開始するためにCPUメモリ20からGPUメモリ40に特徴マップの転送を開始する時刻であり、ワークロードWLのレイヤL毎に設定される。各ワークロードWLは、プロファイリング結果に基づいて、プリフェッチの完了時刻と逆伝播処理の開始時刻とが一致するようにリクエストキュー22に格納するプリフェッチ開始時刻を決定する。GPUメモリ40の使用量を抑えるために、プリフェッチは、逆伝播処理の開始時刻の直前に完了することが好ましい。スケジューラ12は、リクエストキューに保持されたプリフェッチ開始時刻に基づいて、プリフェッチの開始時刻を決定する。
【0039】
図1のスケジューラ12は、リクエストキュー22のエントリのいずれかにオフロード要求の情報が格納された場合、オフロード要求を検出する。スケジューラ12は、リクエストキュー22のエントリのいずれかにプリフェッチ要求の情報が格納された場合、プリフェッチ要求を検出する。
【0040】
図4は、
図2の空き容量管理テーブル24の一例を示す。空き容量管理テーブル24は、ワークロードWL毎に、GPUメモリ40の空き容量を保持する領域を有する。各ワークロードWLは、順伝播処理または逆伝播処理によりワークデータを生成した場合、対応する空き容量の領域を、データの生成サイズだけ減少させる。各ワークロードWLは、順伝播処理または逆伝播処理の終了等によりワークデータを消去した場合、対応する空き容量の領域を、データの消去サイズだけ増加させる。
【0041】
スケジューラ12は、オフロード要求に基づいてGPUメモリ40からCPUメモリ20に特徴マップを転送した場合、対応する空き容量の領域を、転送サイズだけ増加させる。スケジューラ12は、プリフェッチ要求に基づいてCPUメモリ20からGPUメモリ40に特徴マップを転送した場合、対応する空き容量の領域を、転送サイズだけ減少させる。
【0042】
図5は、逆伝播処理の開始時刻およびプリフェッチ開始時刻の計算方法の一例を示す。
図5は、ディープニューラルネットワークが4個のレイヤL1-L4を有する例を示す。また、
図5では、GPUメモリ40の記載が省略される。
【0043】
順伝播処理では、レイヤL1-L4の計算が順に実行され、各レイヤL1-L4において特徴マップが生成される。符号S(1)、S(2)、S(3)は、レイヤL1、L2、L3が生成する特徴マップのサイズを示す。
【0044】
レイヤL1-L3が生成する特徴マップは、図示しないGPUメモリ40からCPUメモリ20にオフロードされる。レイヤL4が生成する特徴マップは、誤差関数の計算に使用される。符号TF(1)-TF(4)は、レイヤL1-L4の順伝播処理での計算時間をそれぞれ示す。
【0045】
逆伝播処理では、レイヤL4-L2の重みの更新処理が順に実行される。レイヤL4では、誤差関数の計算結果と、レイヤL3の順伝播処理で生成された特徴マップとを使用して誤差情報が生成され、生成された誤差情報がレイヤL3に出力される。レイヤL3では、レイヤL4からの誤差情報と、レイヤL2の順伝播処理で生成された特徴マップとを使用して誤差情報が生成され、生成された誤差情報がレイヤL2に出力される。
【0046】
レイヤL2では、レイヤL3からの誤差情報と、レイヤL1の順伝播処理で生成された特徴マップとを使用して誤差情報が生成される。そして、誤差情報に基づいてレイヤL4-L2の重みが更新される。符号TB(4)-TB(1)は、レイヤL4-L1の逆伝播処理での計算時間をそれぞれ示す。符号tB(4)-tB(1)は、レイヤL4-L1の逆伝播処理の開始時刻をそれぞれ示す。符号tp(3)は、レイヤL3の逆伝播処理に使用する特徴マップ(レイヤL2の順伝播処理で生成)のプリフェッチ開始時刻を示す。
【0047】
図5では、一例としてレイヤL3の逆伝播処理の開始時刻t
B(3)と、レイヤL3の逆伝播処理に使用する特徴マップのプリフェッチ開始時刻t
p(3)とを計算する計算式がそれぞれ示される。
【0048】
各ワークロードWLにおいて、各レイヤLiの逆伝播処理の開始時刻t
B(i)は、式(2)により計算される(iは、1、2、3、4のいずれか)。
【数1】
【0049】
式(2)の右辺の第1項は、上述したように、訓練データのストレージ50等からGPUメモリ40への転送時間を示す。式(2)の右辺の第2項は、レイヤL1-L4の順伝播処理の計算時間の総和を示す。式(2)の右辺の第3項は、レイヤL4-Liの逆伝播処理の計算時間の総和を示す。なお、誤差関数の計算時間は、各レイヤLの計算時間に対して十分に短く、無視できるため、式(2)では省略している。
【0050】
各ワークロードWLにおいて、各レイヤLiの逆伝播処理に使用する特徴マップのプリフェッチ開始時刻tp(i)は、式(3)により計算される。式(3)の"B/m"は、上述したように、各ワークロードWLに割り当てられるバンド幅を示し、CPUメモリ20のバンド幅BをワークロードWLの数mで除することで計算される。
tp(i)=tB(i)-s(i-1)/(B/m) …(3)
【0051】
図6は、
図1の情報処理装置によるDNNの訓練の一例を示す。
図6は、ディープニューラルネットワークがN個のレイヤL1-LNを有する例を示す。ワークロードWLは、レイヤL1の順伝播処理において、訓練データと重みW1を使用して特徴マップを生成し、生成した特徴マップをレイヤL2に出力する。ワークロードWLは、レイヤL2からレイヤLNの各々の順伝播処理において、重みW2から重みWNをそれぞれ使用してレイヤL2からレイヤLNで特徴マップを生成し、生成した特徴マップを次段のレイヤLに出力する。レイヤL1からレイヤLNの各々で生成され、GPUメモリ40に格納された特徴マップは、スケジューラ12によりCPUメモリ20にオフロードされる。
【0052】
ワークロードWLは、レイヤLNの逆伝播処理において、誤差関数により生成された誤差情報とCPUメモリ20からプリフェッチされるレイヤLNの順伝播処理で生成された特徴マップとを使用して誤差情報を生成し、生成した誤差情報をレイヤLN-1に出力する。ワークロードWLは、レイヤLiの逆伝播処理において、1つ前のレイヤLi+1により生成された誤差情報とCPUメモリ20からプリフェッチされるレイヤLiの順伝播処理で生成された特徴マップとを使用して誤差情報を生成する。ここで、レイヤLiは、レイヤLN-1からレイヤL2のいずれかである。そして、誤差情報を使用してレイヤLNからレイヤL2の重みWが更新される。
【0053】
図7は、
図1の各ワークロードWLがDNNの訓練の前に実行する処理の一例を示す。
図7に示す処理は、各ワークロードWLがワークロード処理プログラム28を実行することにより実現される。
【0054】
まず、ステップS10において、ワークロードWLは、プロファイラ26を動作させながら順伝播処理および逆伝播処理を、例えば、数十イテレーション実行する。そして、ワークロードWLは、各レイヤiの読み出し時間TINPUT、順伝播処理での計算時間TF(i)、逆伝播処理での計算時間TB(i)および特徴マップのサイズs(i)を取得する。
【0055】
次に、ステップS12において、ワークロードWLは、上述した式(2)を使用して、各レイヤLiの逆伝播処理の開始時刻tB(i)を計算する。次に、ステップS14において、ワークロードWLは、上述した式(3)を使用して、各レイヤLiの逆伝播処理に使用する特徴マップのプリフェッチ開始時刻tp(i)を計算する。
【0056】
次に、ステップS16において、ワークロードWLは、各レイヤLiのオフロードおよびプリフェッチで使用する読み出しアドレス、書き込みアドレスおよび転送サイズを計算し、
図7に示す処理を終了する。
【0057】
各ワークロードWLが計算したレイヤLi毎の逆伝播処理の開始時刻tB(i)、プリフェッチ開始時刻tp(i)、読み出しアドレス、書き込みアドレスおよび転送サイズは、順伝播処理の実行前にリクエストキュー22に格納される。これにより、スケジューラ12は、深層学習の実行時に近い状態の情報が保持されたリクエストキュー22を使用して、オフロードおよびプリフェッチの動作を適切に制御することができる。
【0058】
図8は、
図1の各ワークロードWLが実行する順伝播処理の動作の一例を示す。
図8に示す処理は、各ワークロードWLがワークロード処理プログラム28を実行することにより実現される。
【0059】
まず、ステップS20において、ワークロードWLは、訓練データをレイヤL1に供給する。次に、ステップS22において、ワークロードWLは、着目するレイヤLにおいて、訓練データまたは前段のレイヤLからの特徴マップと、重みとを使用して特徴マップを計算する。
【0060】
次に、ステップS24において、ワークロードWLは、計算した特徴マップを、次のレイヤLに転送し、GPUメモリ40に格納する。次に、ステップS26において、ワークロードWLは、計算中のレイヤLが最終レイヤLであるか否かを判定する。ワークロードWLは、最終レイヤLである場合、処理をステップS30に移行し、最終レイヤLでない場合、処理をステップS28に移行する。
【0061】
ステップS28において、ワークロードWLは、レイヤ番号を+1して更新し、処理をステップS22に戻す。ステップS30において、ワークロードWLは、順伝播処理を終了し、最終レイヤLの計算により生成した特徴マップを誤差関数に入力し、誤差情報を計算させ、
図8に示す処理を終了する。
【0062】
なお、ステップS30の処理は、順伝播処理ではないが、便宜上、
図8の処理に含めている。また、
図8には示していないが、ワークロードWLは、順伝播処理において、ワークデータを生成してGPUメモリ40に格納した場合、およびワークデータをGPUメモリ40から消去した場合、空き容量管理テーブル24に保持されている空き容量を更新する。
【0063】
図9は、
図1の各ワークロードWLが実行する逆伝播処理の動作の一例を示す。
図9に示す処理は、各ワークロードWLがワークロード処理プログラム28を実行することにより実現される。
【0064】
まず、ステップS40において、ワークロードWLは、処理対象のレイヤLを最終レイヤLに設定する。次に、ステップS42において、ワークロードWLは、誤差関数が生成した誤差情報または1つ前(番号が1つ大きい)レイヤLが生成した誤差情報と、GPUメモリ40からプリフェッチされる特徴マップとを処理対象のレイヤLに入力する。GPUメモリ40からプリフェッチされる特徴マップは、処理対象のレイヤLが順伝播処理時に生成した特徴マップである。
【0065】
次に、ステップS44において、ワークロードWLは、処理対象のレイヤLにおいて、特徴マップと誤差情報とを使用して誤差情報を計算する。次に、ステップS46において、ワークロードWLは、レイヤ番号を-1して更新する。次に、ステップS48において、ワークロードWLは、更新したレイヤ番号がレイヤL1を示すか否かを判定する。ワークロードWLは、レイヤ番号がレイヤL1を示す場合、
図9に示す処理を終了し、レイヤ番号がレイヤL1以外を示す場合、処理をステップS42に戻す。
【0066】
なお、
図9には示していないが、ワークロードWLは、逆伝播処理において、ワークデータを生成してGPUメモリ40に格納した場合、およびワークデータをGPUメモリ40から消去した場合、空き容量管理テーブル24に保持されている空き容量を更新する。
【0067】
図10から
図12は、
図1のスケジューラ12の動作の一例を示す。
図10から
図12に示す処理は、CPU10がスケジューラ12のプログラムを実行することにより実現される。
図10から
図12に示す処理は、情報処理装置100のメモリアクセス制御方法の一例を示す。
【0068】
なお、1つのワークロードWLにおいて、番号が相対的に大きいレイヤLのオフロードは、番号が相対的に小さいレイヤLのオフロードより先に実行されない。同様に、1つのワークロードWLにおいて、番号が相対的に小さいレイヤLのプリフェッチは、番号が相対的に大きいレイヤLのプリフェッチより先に実行されない。
【0069】
まず、ステップS50において、スケジューラ12は、
図3のリクエストキュー22を参照する。次に、ステップS52において、スケジューラ12は、空き容量管理テーブル24を参照する。
【0070】
次に、ステップS54において、スケジューラ12は、リクエストキュー22にオフロード要求またはプリフェッチ要求が格納されている場合、ステップS60を実施し、オフロード要求およびプリフェッチ要求が格納されていない場合、ステップS50に戻る。ステップS60の処理の例は、
図11および
図12に示される。
【0071】
ステップS60の後、ステップS90において、スケジューラ12は、空き容量管理テーブル24を更新する。
【0072】
次に、ステップS92において、スケジューラ12は、リクエストキュー22を更新し、処理をステップS50に戻す。例えば、リクエストキュー22に保持されたプリフェッチ開始時刻に、対応するプリフェッチが開始されない場合、スケジューラ12は、リクエストキュー22に保持されたプリフェッチ開始時刻を遅らせることでリクエストキュー22を更新する。また、リクエストキュー22に保持された逆伝播処理の開始時刻に逆伝播処理が開始されない開示されない場合、リクエストキュー22に保持された逆伝播処理の開始時刻を遅らせることでリクエストキュー22を更新する。
【0073】
ディープニューラルネットワークの訓練の実行状態に合わせてリクエストキュー22を更新することで、スケジューラ12は、オフロードおよびプリフェッチを実行するか否かを適切に判断することができる。また、スケジューラ12は、オフロードおよびプリフェッチのどちらを優先させるかを適切に判断することができる。
【0074】
図11は、
図10のステップS60の動作の一例を示す。まず、ステップS62において、スケジューラ12は、リクエストキュー22にオフロード要求が格納されている場合、ステップS64に移行し、リクエストキュー22にオフロード要求が格納されていない場合、ステップS68に移行する。
【0075】
ステップS64において、スケジューラ12は、リクエストキュー22にプリフェッチ要求が格納されている場合、
図12のステップS72に移行し、リクエストキュー22にプリフェッチ要求が格納されていない場合、ステップS66に移行する。ステップS66において、スケジューラ12は、オフロード要求に対応して、GPUメモリ40からCPUメモリ20に特徴マップを転送するオフロードを実行し、処理を
図10のステップS90に移行する。なお、スケジューラ12は、リクエストキュー22に複数のオフロード要求が格納されている場合、例えば、逆伝播処理の開始時刻またはプリフェッチ開始時刻が早いワークロードWLから順にオフロードを実行してもよい。
【0076】
ステップS68において、スケジューラ12は、リクエストキュー22にプリフェッチ要求が格納されている場合、
図12のステップS70に移行し、リクエストキュー22にプリフェッチ要求が格納されていない場合、処理を
図10のステップS90に移行する。
【0077】
ステップS70において、スケジューラ12は、プリフェッチ要求に対応して、CPUメモリ20からGPUメモリ40に特徴マップを転送するプリフェッチを実行し、処理を
図10のステップS90に移行する。なお、スケジューラ12は、リクエストキュー22に要求元のワークロードWLが互いに異なる複数のプリフェッチ要求が格納されている場合、逆伝播処理の開始時刻が早いものから順にプリフェッチを実行してもよい。
【0078】
図12のステップS72において、スケジューラ12は、
図4の空き容量管理テーブル24において、オフロードまたはプリフェッチの対象のワークロードWLに対応するGPUメモリ40の空き容量が第1閾値以上であるか否かを判定する。スケジューラ12は、空き容量が第1閾値以上の場合、処理をステップS74に移行し、空き容量が第1閾値未満の場合、処理をステップS78に移行する。特に限定されないが、例えば、第1閾値は、GPUメモリ40の記憶容量に対する比率で表され、70%から80%程度である。
【0079】
ステップS74において、スケジューラ12は、プリフェッチ要求に対応して、プリフェッチをオフロードより優先的に実行する。また、スケジューラ12は、リクエストキュー22に要求元のワークロードWLが互いに異なる複数のプリフェッチ要求が格納されている場合、逆伝播処理の開始時刻が早いものから順にプリフェッチを実行する。これにより、GPUメモリ40の記憶容量に余裕を持たせつつ、プリフェッチの完了タイミングがプリフェッチにより転送される特徴マップを使用する逆伝播処理の開始タイミングに間に合わない可能性を低くすることができる。この結果、逆伝播の処理時間が長くなることを抑制することができ、ディープニューラルネットワークの訓練効率の低下を抑制することができる。
【0080】
これに対して、プリフェッチの完了タイミングがプリフェッチにより転送される特徴マップを使用する逆伝播処理の開始タイミングに間に合わない場合、ワークロードWLを実行するGPU30にアイドル時間が発生するおそれがある。アイドル時間が発生した場合、当該GPU30による深層学習の実行時間が長くなってしまい、訓練効率が低下する。
【0081】
次に、ステップS76において、スケジューラ12は、オフロードを実行し、処理を
図10のステップS90に移行する。なお、優先順が下げられたオフロードの遅れによりGPU30のアイドル時間が発生する可能性は、プリフェッチの遅れによりGPU30にアイドル時間が発生する可能性よりも低い。
【0082】
ステップS78において、スケジューラ12は、オフロード要求に対応して、オフロードをプリフェッチより優先的に実行する。スケジューラ12は、リクエストキュー22に複数のオフロード要求が格納されている場合、プリフェッチ開始時刻が遅いものから順にオフロードを実行する。
【0083】
例えば、特徴マップがオフロードされる前に逆伝播処理に使用される場合、当該特徴マップは、CPUメモリ20にオフロードされることなく、GPUメモリ40から削除することができる。したがって、プリフェッチ開始時刻が遅いものから順にオフロードを実行することで、特徴マップをCPUメモリ20にオフロードしなくてよい頻度を向上することが可能になる。この結果、CPUメモリ20のバンド幅Bの使用量を低減することが可能になり、情報処理装置100の消費電力を低減することが可能になる。
【0084】
次に、ステップS80において、スケジューラ12は、プリフェッチを実行し、処理を
図10のステップS90に移行する。
【0085】
以上、この実施形態では、スケジューラ12は、リクエストキュー22に保持された情報に基づいて、逆伝播処理の開始時刻までにCPUメモリ20からのプリフェッチが完了するようにデータ転送をスケジューリングする。これにより、複数のワークロードWLでの深層学習で使用するデータを共有メモリに読み書きする場合に、プリフェッチが間に合わないことにより逆伝播処理が遅れる頻度を低減し、深層学習の実行効率の低下を抑制することができる。
【0086】
スケジューラ12は、オフロード要求とプリフェッチ要求とがリクエストキュー22に保持され、プリフェッチ要求の要求元のワークロードWLのGPUメモリ40の空き容量が第1閾値以上の場合、プリフェッチをオフロードより優先して実行する。これにより、GPUメモリ40の記憶容量に余裕を持たせつつ、CPUメモリ20からの特徴マップのプリフェッチを、逆伝播処理の開始時刻に対して余裕を持って実行することができる。したがって、逆伝播処理に使用する特徴マップのプリフェッチの完了が逆伝播処理の開始時刻に間に合わない可能性を低くすることができる。この結果、逆伝播の処理時間が長くなることを抑制することができ、ディープニューラルネットワークの訓練効率の低下を抑制することができる。
【0087】
スケジューラ12は、オフロード要求と複数のプリフェッチ要求とがリクエストキュー22に保持され、プリフェッチの要求元のGPUメモリ40の空き容量が第1閾値以上の場合、逆伝播処理の開始時刻が早いものから順にプリフェッチを実行する。例えば、複数のプリフェッチ要求は、要求元のワークロードWLが互いに異なる。これにより、プリフェッチの完了が逆伝播処理の開始に間に合わない可能性を低くすることができる。この結果、逆伝播の処理時間が長くなることを抑制することができる。
【0088】
スケジューラ12は、オフロードの実行時に空き容量管理テーブル24に保持された空き容量の値を減らし、プリフェッチの実行時に空き容量管理テーブル24に保持された空き容量の値を増やす。これにより、スケジューラ12は、空き容量管理テーブル24を参照することで、各GPUメモリ40の空き容量が第1閾値以上か否かを判定することができる。この結果、スケジューラ12は、例えば、空き容量をその都度計算する場合に比べて、オフロードとプリフェチとのどちらを優先するかを容易に判断することができる。
【0089】
スケジューラ12は、複数のオフロード要求がリクエストキュー22に保持され、複数のオフロード要求の要求元のGPUメモリ40の空き容量が第1閾値未満の場合、プリフェッチ開始時刻が遅いものから順にオフロードを実行する。例えば、複数のオフロード要求は、要求元のワークロードWLが互いに異なる。これにより、特徴マップをCPUメモリ20にオフロードしなくてよい頻度を向上することが可能になる。この結果、CPUメモリ20のバンド幅Bの使用量を低減することが可能になり、情報処理装置100の消費電力を低減することが可能になる。
【0090】
スケジューラ12は、リクエストキュー22に保持されたプリフェッチ開始時刻にプリフェッチが開始されない場合、リクエストキュー22に保持されたプリフェッチ開始時刻を遅らせる。また、スケジューラ12は、リクエストキュー22に保持された逆伝播処理の開始時刻に逆伝播処理が開始されない場合、リクエストキュー22に保持された逆伝播処理の開始時刻を遅らせる。ディープニューラルネットワークの訓練の実行状態に合わせてリクエストキュー22を更新することで、スケジューラ12は、オフロードおよびプリフェッチを実行するか否かを適切に判断することができる。また、スケジューラ12は、オフロードおよびプリフェッチのどちらを優先させるかを適切に判断することができる。
【0091】
複数のワークロードWLが深層学習を実行する前に、プロファイラ26によりリクエストキュー22に保持する情報が決定され、決定された情報は、順伝播処理の実行前にリクエストキュー22に格納される。これにより、スケジューラ12は、深層学習の実行時の近い状態の情報が保持されたリクエストキュー22を使用して、オフロードおよびプリフェッチの動作を適切に制御することができる。
【0092】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【0093】
10 CPU
12 スケジューラ
14 デバイスアロケータ
20 CPUメモリ
22 リクエストキュー
24 空き容量管理テーブル
30(301、302、303、30n) GPU
40(401、402、403、40n) GPUメモリ
50 ストレージ
60 入出力I/F
100 情報処理装置
BUS バス
L レイヤ
s(i) 特徴マップのサイズ
TINPUT 読み出し時間
tB(i) 逆伝播処理の開始時刻
TB(i) 逆伝播処理の計算時間
TF(i) 順伝播処理の計算時間
tp(i) プリフェッチ開始時刻
W 重み
WL ワークロード