(57)【要約】【課題】ジョブの実行を迅速に開始可能にすること。【解決手段】演算部１ｂは、ジョブの投入時に、投入時よりも前の実行済ジョブの情報、実行済ジョブの実行終了コード、投入対象ジョブとその他の投入済ジョブの情報、および、直前のイベントの発生時から投入時までの時間差に基づいて、イベントの発生後に投入されるジョブの投入までの時間と当該ジョブの所要ノード数とを機械学習機構Ｎ１により学習する。演算部１ｂは、イベントが発生すると、機械学習機構Ｎ１による学習結果を用いて、次のジョブの投入までの時間と次のジョブの所要ノード数とを予測し、予測に応じて計算ノード１２，１３，１４，・・・それぞれの起動状態を制御する。【選択図】図１
2018026050.tif 000002
【特許請求の範囲】
【請求項１】
複数のジョブを実行する複数のノードと、
ジョブの投入時に、前記投入時よりも前の実行済ジョブの情報、前記実行済ジョブの実行終了コード、投入対象ジョブと投入済ジョブの情報、および、直前のイベントの発生時から前記投入時までの時間差に基づいて、前記イベントの発生後に投入されるジョブの投入までの時間と当該ジョブの所要ノード数とを機械学習機構により学習し、
前記イベントが発生すると、前記機械学習機構による学習結果を用いて、次のジョブの投入までの時間と前記次のジョブの所要ノード数とを予測し、予測に応じて前記複数のノードそれぞれの起動状態を制御する、演算部と、
を有する並列処理装置。
【請求項２】
前記演算部は、前記機械学習機構による学習の際、前記実行済ジョブの情報、前記実行済ジョブの実行終了コード、および、前記投入済ジョブの情報を前記機械学習機構の入力側教師データとし、前記投入対象ジョブの実行に用いられるノードの数、および、前記時間差を出力側教師データとする、請求項１記載の並列処理装置。
【請求項３】
前記演算部は、更に、前記イベントの発生時刻の情報を前記入力側教師データとする、請求項２記載の並列処理装置。
【請求項４】
前記イベントは、ユーザのログインであり、
前記演算部は、前記ユーザのログイン時に、前記ログイン時よりも前の実行済ジョブの情報、当該実行済ジョブの実行終了コード、および、現在の投入済ジョブの情報を前記機械学習機構に入力し、前記次のジョブの投入までの時間と前記次のジョブの所要ノード数とを計算する、請求項１乃至３の何れか１項に記載の並列処理装置。
【請求項５】
前記イベントは、何れかのジョブの終了であり、
前記演算部は、当該ジョブの終了時に、前記終了時よりも前の実行済ジョブの情報、当該実行済ジョブの実行終了コード、および、現在の投入済ジョブの情報を前記機械学習機構に入力し、前記次のジョブの投入までの時間と前記次のジョブの所要ノード数とを計算する、請求項１乃至３の何れか１項に記載の並列処理装置。
【請求項６】
前記演算部は、ユーザによるジョブの投入を受け付けると、前記ユーザにより要求されたジョブの実行の履歴および前記ユーザのログインの履歴を用いて前記機械学習機構による学習を行い、学習結果をユーザ毎に記憶部に格納する、請求項１乃至５の何れか１項に記載の並列処理装置。
【請求項７】
前記演算部は、予測した前記次のジョブの投入までの時間と現在時刻とから前記次のジョブの投入が予測される予測時刻を求め、前記所要ノード数と現在起動済の計算ノードの数に応じて、電源オフまたはサスペンド状態である計算ノードのうち前記予測時刻までに起動させる計算ノードの数を決定し、決定した数の計算ノードの起動の所要時間と前記予測時刻とに基づいて、起動対象の計算ノードの起動を開始する時刻を計算する、請求項１乃至６の何れか１項に記載の並列処理装置。
【請求項８】
コンピュータに、
複数のジョブを実行する複数のノードに対するジョブの投入時に、前記投入時よりも前の実行済ジョブの情報、前記実行済ジョブの実行終了コード、投入対象ジョブと投入済ジョブの情報、および、直前のイベントの発生時から前記投入時までの時間差に基づいて、前記イベントの発生後に投入されるジョブの投入までの時間と当該ジョブの所要ノード数とを機械学習機構により学習し、
前記イベントが発生すると、前記機械学習機構による学習結果を用いて、次のジョブの投入までの時間と前記次のジョブの所要ノード数とを予測する、
処理を実行させるジョブ管理プログラム。
【請求項９】
コンピュータが、
複数のジョブを実行する複数のノードに対するジョブの投入時に、前記投入時よりも前の実行済ジョブの情報、前記実行済ジョブの実行終了コード、投入対象ジョブと投入済ジョブの情報、および、直前のイベントの発生時から前記投入時までの時間差に基づいて、前記イベントの発生後に投入されるジョブの投入までの時間と当該ジョブの所要ノード数とを機械学習機構により学習し、
前記イベントが発生すると、前記機械学習機構による学習結果を用いて、次のジョブの投入までの時間と前記次のジョブの所要ノード数とを予測する、
ジョブ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は並列処理装置、ジョブ管理プログラムおよびジョブ管理方法に関する。
【背景技術】
【０００２】
複数の計算ノードを並列に用いて処理を実行する並列処理装置が利用されている。計算ノードは、情報処理を実行する処理単位である。計算ノードは、例えば、ＣＰＵ（Central Processing Unit）やＲＡＭ（Random Access Memory）などを備える。並列処理装置は、多数の計算ノードを含み得る。このため、すべての計算ノードで処理（ジョブ）を実行中とは限らず、使用されていない計算ノードも存在する。そこで、使用されていない一部の計算ノードを電源オフまたはサスペンド状態として、省電力化を図ることが考えられている。
【０００３】
例えば、ニューラルネットワークと呼ばれる機械学習機能を用いて、電子装置の省電力化を図る提案がある。この提案では、ニューラルネットワークは、ＯＳ（Operating System）のカーネルにより実行される動作を認識するようにトレーニングされる。その後、例えば、オーディオ再生機能がＳＤ（Secure Digital）カードに格納された歌のファイルについて実行されるとき、ニューラルネットワークはカーネルにより実行される命令パターンに基づいてこの機能の実行を認識する。そして、ニューラルネットワークは、オーディオ再生機能に使用されないＷｉＦｉ（Wireless Fidelity，登録商標）やＧｆｘ（Graphics）サブシステムの電力を低減または切断させるコマンドを、電力管理システムに送る。
【０００４】
また、ＨＰＣ（High Performance Computing）システムにおいて、エネルギー保存モードで実行されるときに性能を失わない（または、受け容れ可能な性能損失をもつ）ジョブを同定し、当該ジョブに対して性能を維持しつつ、エネルギーを節約する提案もある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１１−２１０２６５号公報
【特許文献２】特開２０１５−１１８７０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
省電力化のために一部の計算ノードの電源切断やサスペンドを行うと、その副作用として、計算を行いたいタイミングなどに直ちに計算ノードを使用できなくなるという問題がある。計算機システムでは、ユーザが所望のタイミングでジョブを投入する運用が多い。このため、いつ、どのようなジョブが投入されるか不明なことが一般的である。そこで、例えば、ユーザがジョブを実行したいタイミングで計算ノードを電源オンする運用も考えられる。しかし、計算ノードの電源オン開始からジョブ受付可能状態になるまでには時間を要し、ジョブの実行開始が遅延してしまう。この問題は、ジョブスループットの低下や計算ノードの使用効率の低下の要因にもなる。
【０００７】
１つの側面では、本発明は、ジョブの実行を迅速に開始可能にすることを目的とする。
【課題を解決するための手段】
【０００８】
１つの態様では、並列処理装置が提供される。この並列処理装置は、複数のノードと演算部とを有する。複数のノードは、複数のジョブを実行する。演算部は、ジョブの投入時に、投入時よりも前の実行済ジョブの情報、実行済ジョブの実行終了コード、投入対象ジョブと投入済ジョブの情報、および、直前のイベントの発生時から投入時までの時間差に基づいて、当該イベントの発生後に投入されるジョブの投入までの時間と当該ジョブの所要ノード数とを機械学習機構により学習し、当該イベントが発生すると、機械学習機構による学習結果を用いて、次のジョブの投入までの時間と次のジョブの所要ノード数とを予測し、予測に応じて複数のノードそれぞれの起動状態を制御する。
【発明の効果】
【０００９】
１つの側面では、ジョブの実行を迅速に開始可能にする。
【図面の簡単な説明】
【００１０】
【図１】第１の実施の形態の並列処理装置を示す図である。
【図２】第２の実施の形態の計算システムの例を示す図である。
【図３】管理ノードのハードウェア例を示す図である。
【図４】ファイルサーバのハードウェア例を示す図である。
【図５】管理ノードの機能例を示す図である。
【図６】ニューラルネットワークの例を示す図である。
【図７】計算ノードの電源投入およびジョブ実行の例を示す図である。
【図８】管理ノードの処理例を示すフローチャートである。
【図９】学習の例を示すフローチャートである。
【図１０】学習の例（続き）を示すフローチャートである。
【図１１】計算ノード需要予測の例を示すフローチャートである。
【図１２】再通電操作の例を示すフローチャートである。
【図１３】計算ノードの起動例を示す図である。
【発明を実施するための形態】
【００１１】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の並列処理装置を示す図である。並列処理装置１０は、管理ノード１１および計算ノード１２，１３，１４，・・・を有する。また、並列処理装置１０は、ネットワーク１５を有する。管理ノード１１および計算ノード１２，１３，１４，・・・は、ネットワーク１５に接続されている。ネットワーク１５は、並列処理装置１０の内部ネットワークである。管理ノード１１は、計算ノード１２，１３，１４，・・・に実行させるジョブを管理するノードである。計算ノード１２，１３，１４，・・・は、ジョブを並列に実行する計算処理用のノードである。並列処理装置１０は、計算ノード１２，１３，１４，・・・の一部を用いて、１つのジョブを実行することもできるし、他の一部を用いて別のジョブを並行して実行することもできる。
【００１２】
ここで、計算ノード１２，１３，１４，・・・は、全てが常時電源オンになっているわけではない。一部の計算ノードが電源オンであり、他の一部の計算ノードが電源オフであることもある。例えば、並列処理装置１０は、前回のジョブ実行から所定時間ジョブ実行に用いられていない計算ノードを電源オフ（またはサスペンド）にし、省電力化を図る。
【００１３】
管理ノード１１は、記憶部１１ａと演算部１１ｂとを有する。記憶部１１ａは、ＲＡＭなどの揮発性の記憶装置でもよいし、フラッシュメモリなどの不揮発性の記憶装置でもよい。演算部１１ｂは、例えば、プロセッサである。プロセッサは、ＣＰＵやＤＳＰ（Digital Signal Processor）であってもよく、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの集積回路を含んでもよい。プロセッサは、例えば、ＲＡＭに記憶されたプログラムを実行する。また、「プロセッサ」は、２以上のプロセッサの集合（マルチプロセッサ）であってもよい。また、計算ノード１２，１３，１４，・・・も、管理ノード１１と同様に、記憶部（例えば、ＲＡＭ）や演算部（例えば、ＣＰＵなどのプロセッサ）を備えている。管理ノード１１や計算ノード１２，１３，１４，・・・それぞれは、「コンピュータ」と呼ばれてもよい。
【００１４】
記憶部１１ａは、演算部１１ｂによる制御に用いられる情報を記憶する。記憶部１１ａは、並列処理装置１０におけるイベントログを記憶する。イベントログは、ユーザのログイン履歴およびジョブ履歴を含む。ログイン履歴は、ユーザの識別情報およびログインした時刻およびログアウトした時刻の情報を含む。ジョブ履歴は、ジョブの識別情報、ジョブの実行を依頼したユーザ、ジョブの投入／実行開始／実行完了などのログ種別、ジョブの投入／実行開始／実行完了の時刻、および、ジョブの実行終了コードなどの情報を含む。ジョブの識別情報は、ジョブとして実行される目的プログラムのハッシュ値でもよい。また、記憶部１１ａは、演算部１１ｂによるジョブの実行状況の学習データや、演算部１１ｂによる計算ノードの起動スケジュールなどを記憶する。
【００１５】
演算部１１ｂは、ジョブの実行状況の学習、学習結果による計算ノードの需要予測、および、需要予測に応じた各計算ノードの起動状態の制御を行う。ここで、演算部１１ｂは、機械学習機構を用いてジョブの実行状況を学習する。演算部１１ｂは、機械学習機構の一例として、ニューラルネットワークＮ１を用いてジョブの実行状況を学習する。ニューラルネットワークＮ１は、脳に存在する神経細胞（ニューロン）による信号伝達の仕組みを模した学習機能である。ニューラルネットワークは、ニューラルネットと呼ばれることもある。
【００１６】
演算部１１ｂは、ニューラルネットワークＮ１に関する情報を記憶部１１ａに格納する。ニューラルネットワークＮ１は、入力層と隠れ層と出力層とを有する。入力層は、入力に対応する複数の要素が属する層である。隠れ層は、入力層と出力層との間の層であり、１または複数存在する。隠れ層には入力層からの入力データに対する所定の関数（後述の結合定数を含む）による演算結果が要素として属する（当該演算結果は出力層の入力となる）。出力層は、ニューラルネットワークＮ１の出力に対応する複数の要素が属する層である。
【００１７】
ニューラルネットワークＮ１による学習では、異なる層に属する要素間の結合定数を決定する。具体的には、演算部１１ｂは、入力層の各要素と隠れ層の各要素との結合定数Ｗ１１，Ｗ１２，・・・，Ｗ１ｉ、および、隠れ層の各要素と出力層の各要素との結合定数Ｗ２１，Ｗ２２，・・・，Ｗ２ｊを、教師付き学習により決定し、記憶部１１ａに格納する。ここで、ｉは、整数であり、入力層から隠れ層へ変換する関数に含まれる、入力層の各データ要素に対する結合定数の数である。ｊは、整数であり、隠れ層から出力層へ変換する関数に含まれる、隠れ層の各データ要素に対する結合定数の数である。
【００１８】
演算部１１ｂは、計算ノード１２，１３，１４，・・・（一部の計算ノードでもよい）に対するジョブの投入時に、当該投入時よりも前の実行済ジョブの情報、実行済ジョブの実行終了コード、および、投入対象ジョブとその他の投入済ジョブの情報を取得する。ここで、実行済ジョブの情報は、例えば、当該投入時から遡って所定数分の実行済ジョブの識別情報である。実行済ジョブの情報は、当該投入時から遡った所定期間内の実行済ジョブの識別情報でもよい。実行済ジョブの実行終了コードは、当該所定数分（または所定期間内）の実行済ジョブの終了コードである。その他の投入済ジョブの情報は、例えば、投入対象ジョブのジョブ投入時に投入済である他のジョブの識別情報である。投入対象ジョブの情報は、投入対象ジョブで利用される計算ノードの数である。実行済ジョブの情報、実行済ジョブの実行終了コード、その他の投入済ジョブの情報は、ユーザの仕事の手順に従ったジョブの投入順番（ジョブの種類とその依存関係）を認識するための情報となる。なお、実行済ジョブの実行終了コードは、ジョブの実行結果によって仕事の流れが変わり、投入するジョブが変ることを認識するための情報となる。また、当該ジョブの投入時に、演算部１１ｂは、直前のイベントの発生時から当該投入時までの時間差を取得する。着目するイベントとしては、例えば、ユーザのログインやジョブの実行終了が考えられる。例えば、演算部１１ｂは、記憶部１１ａに記憶されたイベントログを参照して、これらの情報を取得できる。また、演算部１１ｂは、投入対象ジョブの投入指示を受け付けたときに、投入対象ジョブで利用する計算ノードの数の指示を受け付けることもある。この場合、演算部１１ｂは、当該指示の内容から投入対象ジョブで利用される計算ノードの数を得ることができる。
【００１９】
演算部１１ｂは、取得した各種の情報に基づいて、該当のイベントの発生後に投入されるジョブの投入までの時間と当該ジョブの所要ノード数とをニューラルネットワークＮ１により学習する。入力側の教師データ（入力層の各要素に相当）は、例えば、実行済ジョブの識別情報、実行済ジョブの実行終了コード、および、その他の投入済ジョブの識別情報である。入力側の教師データは、直前のイベントの発生時刻を示す情報を更に含んでもよい。出力側の教師データ（出力層の各要素に相当）は、当該イベントの発生時から今回の投入時までの時間差、および、今回の投入対象ジョブで所要される計算ノード数（所要ノード数）である。
【００２０】
図１のステップＳ１は、ジョブＡ，Ｂ，Ｃ，Ｄ，Ｅと順に実行され、時刻ＴａにおいてジョブＦが投入された場合を例示している。図１の例では、紙面に向かって右側が正の時間方向である。また、ジョブが投入されたタイミングを黒色の四角形で表し、ジョブの実行が完了されたタイミングを黒色の丸で表している。ここで、ジョブの投入とは利用者がジョブの実行を依頼したタイミングであり、ＨＰＣシステムでは一般に、計算ノードなど資源の空き具合により、実行の開始が待たされることがある。このため、必ずしも投入したタイミングでジョブが実行されるとは限らない。つまり、黒色の四角形と黒色の丸を結ぶ線分は該当のジョブの実行が待たされていた期間と実行されていた期間である。黒色の四角形からある時刻に対して延びる矢印は、黒色の四角形で示される時刻から矢印の先の時刻まで、該当のジョブが実行を待たされているか実行されており、矢印の先の時刻において該当の時刻が実行待ちか実行中であることを表す。
【００２１】
ジョブＦの投入は、並列処理装置１０における１つのイベントといえる。この場合、演算部１１ｂは上記の学習を行う。時刻Ｔａにおいて、ジョブＡ，Ｂ，Ｃ，Ｄは実行完了している。このため、ジョブＡ，Ｂ，Ｃ，Ｄは、時刻Ｔａにおける実行済ジョブである。ジョブＥは、時刻Ｔａにおいて実行待ちもしくは実行中である。このため、ジョブＥは、時刻Ｔａにおける投入済ジョブである。
【００２２】
演算部１１ｂは、時刻Ｔａ（ジョブＦの投入時）よりも前の所定数（例えば４つ）の実行済ジョブＡ，Ｂ，Ｃ，Ｄそれぞれの識別情報、および、実行済ジョブＡ，Ｂ，Ｃ，Ｄそれぞれの直近の実行終了コードをイベントログから取得する。また、演算部１１ｂは、時刻Ｔａにおける投入済ジョブＥの識別情報をイベントログから取得する。演算部１１ｂは、ジョブＦの投入時の指示内容からジョブＦで利用する計算ノードの数を取得する。更に、演算部１１ｂは、ジョブＦ投入の直前のイベントの発生時刻Ｔｘをイベントログから取得する。直前のイベントは、ジョブＤの実行終了であり、時刻Ｔｘは、ジョブＤの実行終了時刻である。演算部１１ｂは、時刻Ｔａと時刻Ｔｘとの時間差Δｔ１を取得する。
【００２３】
演算部１１ｂは、実行済ジョブＡ，Ｂ，Ｃ，Ｄそれぞれの識別情報、および、実行済ジョブＡ，Ｂ，Ｃ，Ｄそれぞれの実行終了コード、および、投入済ジョブＥの識別情報を、ニューラルネットワークＮ１の入力側の教師データとする。また、演算部１１ｂは、ジョブＦの所要ノード数、および、時間差Δｔ１を出力側の教師データとする。そして、演算部１１ｂは、例えばバックプロパゲーション法などの教師付き学習法により、ニューラルネットワークＮ１の結合定数Ｗ１１，Ｗ１２，・・・，Ｗ１ｉおよびＷ２１，Ｗ２２，・・・，Ｗ２ｊを更新する。演算部１１ｂは、上記の学習を繰り返し実行することで、各結合定数を実際のジョブの実行状況に適合させていく。
【００２４】
その後、演算部１１ｂは、ニューラルネットワークＮ１による学習結果を用いて、あるイベントの発生（例えば、ユーザのログインやジョブの実行終了など）に対して、次のジョブが投入されるまでの時間と、当該次のジョブの所要ノード数を予測する。
【００２５】
図１のステップＳ２は、時刻ＴｂでジョブＤの実行が終了した場合の、演算部１１ｂによる計算ノードの需要予測を例示している。時刻Ｔｂにおいて、ジョブＡ，Ｂ，Ｃ，Ｄは実行完了している。このため、ジョブＡ，Ｂ，Ｃ，Ｄは、時刻Ｔｂにおける実行済ジョブである。ジョブＥは、時刻Ｔｂにおいて実行待ちもしくは実行中である。このため、ジョブＥは、時刻Ｔｂにおける投入済ジョブである。
【００２６】
演算部１１ｂは、時刻Ｔｂ以前の所定数（例えば４つ）の実行済ジョブＡ，Ｂ，Ｃ，Ｄそれぞれの識別情報、および、実行済ジョブそれぞれの直近の実行終了コードをイベントログから取得する。また、演算部１１ｂは、時刻Ｔｂにおける投入済ジョブＥの識別情報をイベントログから取得する。演算部１１ｂは、ニューラルネットワークＮ１に取得した各情報を入力し、出力層の各要素の値を計算することで、次のジョブが投入される時刻（次ジョブの投入予測時刻）Ｔｄと、次のジョブの所要ノード数とを予測する。図１の時刻Ｔｄにおいて示した白色の四角形は、次のジョブの投入予測時刻であることを示す。
【００２７】
そして、演算部１１ｂは、こうしてニューラルネットワークＮ１による学習結果を用いて予測した次のジョブの投入予測時刻Ｔｄおよび所要ノード数に基づいて、各計算ノードの起動状態を制御する。
【００２８】
具体的には、まず、演算部１１ｂは、次のジョブの所要ノード数に対し、電源オフにより不足している計算ノード（不足ノード）の数を求める。そして、演算部１１ｂは、投入予測時刻Ｔｄに間に合うように、不足ノードの起動予定時刻Ｔｃを決定する。演算部１１ｂは、起動予定時刻Ｔｃの決定に、不足ノードの起動に要する時間（起動所要時間）Δｔ２を考慮する。例えば、消費電力の制約（消費電力の上限）から一度に同時に電源オン開始できる計算ノードの数をＮとし、不足ノードの数をＭとする。また、１つの計算ノードの起動に要する時間をτとする。すると、例えば、起動所要時間Δｔ２＝ＲＯＵＮＤＵＰ（Ｍ／Ｎ）×τである。ここで、ＲＯＵＮＤＵＰ関数は、小数点以下を切り上げる関数である。
【００２９】
演算部１１ｂは、例えば、投入予測時刻Ｔｄよりも起動所要時間Δｔ２だけ早い時刻を、不足ノードの起動予定時刻Ｔｃとする。あるいは、演算部１１ｂは、投入予測時刻ＴｄよりもΔｔ２＋α（αは所定時間）だけ早い時刻を、不足ノードの起動予定時刻Ｔｃとしてもよい。演算部１１ｂは、不足ノードの起動スケジュールを記憶部１１ａに格納する。そして、演算部１１ｂは、起動予定時刻Ｔｃに達すると、不足ノードに対応する計算ノードを電源オンにし、次のジョブの投入に備える。
【００３０】
なお、並列処理装置１０を利用するユーザが複数存在する場合、演算部１１ｂは、ユーザ毎に、計算ノードの需要の学習および予測を行ってもよい。その場合、演算部１１ｂは、ニューラルネットワークＮ１をユーザ毎に用意し、該当のユーザのログインや該当のユーザによって依頼されたジョブに絞って、計算ノードの需要の学習や予測を行う。
【００３１】
こうして、並列処理装置１０は、次のジョブの実行を迅速に開始可能にする。
ここで、省電力化のために一部の計算ノードの電源切断やサスペンドを行うと、その副作用として、計算を行いたいタイミングなどに直ちに計算ノードを使用できなくなるという問題がある。並列処理装置１０では、ユーザが所望のタイミングでジョブを投入する運用が多い。このため、いつ、どのようなジョブが投入されるか不明なことが多い。例えば、ユーザがジョブを実行したいタイミングで一部の計算ノードを電源オンする運用も考えられる。しかし、計算ノードの電源オン開始から電源オン完了までには時間を要し、ジョブの実行開始が遅延してしまう。この問題は、ジョブスループットの低下や計算ノードの使用効率の低下の要因にもなる。
【００３２】
そこで、並列処理装置１０は、ジョブ投入時、ニューラルネットワークＮ１を用いてジョブの実行状況を学習する。具体的には、管理ノード１１は、直近に終了したジョブの識別情報、および、当該ジョブの終了コードとその他の投入済のジョブの識別情報を入力側教師データとする。また、管理ノード１１は、前回のジョブ終了などのイベントから今回のジョブ投入までの時間差（相対時間）、および、今回のジョブの所要ノード数を出力側教師データとする。ログインおよび過去のジョブの実行状況や、その実行終了コードおよび現在のジョブの実行状況が、今回のジョブ投入に関連していると考えられるからである。
【００３３】
管理ノード１１は、こうして学習した結果を利用して、次のジョブの所要ノード数と、投入タイミングとをおおよそ予測できる。このため、管理ノード１１は、計算ノードの電源オフにより、所要ノード数が不足していても、予測した投入タイミングにおいて、所要ノード数分の計算ノードをジョブ受付可能な状況か、それに近い状況（ブート途中）にすることができる。例えば、管理ノード１１は、ユーザのログイン後、該当のユーザのジョブの実行に必要な計算ノードの数を予測し、ジョブの投入前に必要な計算ノードを予め起動しておける。また、例えば、ジョブの終了後、終了したジョブに応じて、次のジョブの実行に必要な計算ノード数と、次のジョブが投入される時刻を予測し、計算ノードの電源管理に利用でき、次のジョブの投入前に必要な計算ノードを予め起動しておける。
【００３４】
こうして、並列処理装置１０は、次のジョブの実行を迅速に開始可能にできる。その結果、並列処理装置１０は、空き計算ノードを電源オフ（またはサスペンド）にして消費電力を低減しつつ、ジョブスループットや資源利用効率の低下を抑えることができる。
【００３５】
［第２の実施の形態］
図２は、第２の実施の形態の計算システムの例を示す図である。第２の実施の形態の計算システムは、多数（例えば数万〜１０万程度）の計算ノードを有し、複数の計算ノードを用いてジョブを並列実行する。また、当該計算システムは、他の複数の計算ノードを用いて他のジョブを並列実行することもできる。
【００３６】
第２の実施の形態の計算システムは、管理ノード１００および計算ノード２００，２００ａ，２００ｂ，２００ｃ，２００ｄ，２００ｅ，２００ｆ，２００ｇ，２００ｈ，・・・を有する。ここで、以下では、計算ノード２００，２００ａ，２００ｂ，２００ｃ，２００ｄ，２００ｅ，２００ｆ，２００ｇ，２００ｈ，・・・それぞれの計算ノードを指して、各計算ノードと称することがある。
【００３７】
管理ノード１００および各計算ノードは、インタコネクトと呼ばれる計算システム内部の相互接続網に接続されている。相互接続網の形態は問わず、メッシュやトーラスなどと呼ばれる直接網であってもよい。また、管理ノード１００およびファイルサーバ３００および各計算ノードは、計算システム内部の管理用のネットワークにも接続されている。
【００３８】
管理ノード１００は、ネットワーク２０に接続されている。ファイルサーバ３００もネットワーク２０に接続されていてもよい。ネットワーク２０は、計算システムが設けられたデータセンタ内のローカルネットワークでもよいし、データセンタ外の広域ネットワークでもよい。
【００３９】
管理ノード１００は、ユーザによる計算システムへのログインや各計算ノードによるジョブの実行を管理するサーバコンピュータである。例えば、管理ノード１００は、ネットワーク２０に接続されたクライアントコンピュータ（図２では図示を省略）からユーザのログインを受け付ける。ユーザは、管理ノード１００において実行対象のジョブの情報（ジョブ情報）の入力を行える。ジョブ情報は、各計算ノードに実行させるジョブの内容やジョブを実行させる計算ノードの数の情報などを含む。ユーザは管理ノード上のジョブ管理システムにジョブを投入する。ジョブ投入時、ユーザはジョブとして実行するプログラムのパスと引数、ならびに実行に必要な計算ノード数など実行に必要な資源の情報を指定しなくてはならない。
【００４０】
管理ノード１００のジョブ管理システムは、投入されたジョブをどの計算ノードで実行するかをスケジューリングし（ジョブスケジューリング）、スケジュールした計算ノードでジョブの実行が可能になったら（当該計算ノードにおける他のジョブの実行が終了するなど）、当該計算ノード（一部の計算ノード）にジョブを実行させる。また、管理ノード１００は、各計算ノードの電源状態の管理も行う。例えば、実行中のジョブ群が必要とする計算ノードの総数がシステム全体の計算ノード数を下回る場合や、計算システム内部のネットワーク（インタコネクト）として、メッシュ型やトーラス型などを採用するシステムの場合、空きノードのネットワーク形状とジョブが要求するネットワーク形状が合わず、空いていても使用できない計算ノードが発生した場合などである（フラグメンテーション）。そこで、管理ノード１００は、このような空きノードの電源を停止したり、サスペンド状態にしたりして、省電力化を図る。なお、ユーザによるログインを受け付けるノード（ログインノード）を管理ノード１００とは別個に設けてもよい。
【００４１】
計算ノード２００は、管理ノード１００から投入されたジョブを実行するサーバコンピュータである。
ファイルサーバ３００は、各種データを記憶するサーバコンピュータである。例えば、サーバ３００は、計算ノード２００に実行させるプログラムを計算ノード２００に配信することができる。
【００４２】
ここで、第２の実施の形態の計算システムは、複数のユーザによって利用される。当該計算システムでは、ユーザが所望のタイミングでジョブを投入することが多い。このため、いつ、どのようなジョブが投入されるか不明である。そこで、管理ノード１００は、ジョブの実行状況を基に、計算ノードの需要を学習し、また、学習結果を用いて計算ノードの需要を予測することで、省電力化を図りながらジョブの実行開始を迅速化する機能を提供する。
【００４３】
第２の実施の形態の計算システムは、第１の実施の形態の並列処理装置１０の一例である。管理ノード１００は、第１の実施の形態の管理ノード１１の一例である。
図３は、管理ノードのハードウェア例を示す図である。管理ノード１００は、プロセッサ１０１、ＲＡＭ１０２、インタコネクトアダプタ１０３、Ｉ／Ｏ（Input / Output）バスアダプタ１０４、ディスクアダプタ１０５およびネットワークアダプタ１０６を有する。
【００４４】
プロセッサ１０１は、管理ノード１００の情報処理を制御する演算装置である。プロセッサ１０１は、複数のプロセッシング要素を含むマルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵである。プロセッサ１０１は、ＣＰＵに対して、ＤＳＰ、ＡＳＩＣおよびＦＰＧＡなどを組み合わせたものでもよい。
【００４５】
ＲＡＭ１０２は、管理ノード１００の主記憶装置である。ＲＡＭ１０２は、プロセッサ１０１に実行させるＯＳのプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ１０２は、プロセッサ１０１による処理に用いる各種データを記憶する。
【００４６】
インタコネクトアダプタ１０３は、インタコネクトに接続する通信インタフェースである。例えば、インタコネクトアダプタ１０３は、インタコネクトに属するインタコネクトルータ３０に接続されている。
【００４７】
Ｉ／Ｏバスアダプタ１０４は、ディスクアダプタ１０５およびネットワークアダプタ１０６を接続するための接続インタフェースである。
インタコネクトアダプタ１０３は、Ｉ／Ｏバスアダプタ１０４に接続される場合もある。
【００４８】
ディスクアダプタ１０５は、ディスク装置４０に接続されている。ディスク装置４０は、管理ノード１００の補助記憶装置である。ディスク装置４０はＨＤＤ（Hard Disk Drive）と呼ばれてもよい。ディスク装置４０は、ＯＳのプログラム、アプリケーションプログラム、および、各種データを記憶する。管理ノード１００は、補助記憶装置として、フラッシュメモリやＳＳＤなどの他の記憶装置を管理ノード１００の内部または外部に備えてもよい。
【００４９】
ネットワークアダプタ１０６は、ネットワーク２０に接続する通信インタフェースである。管理ノード１００は、計算システム内の管理用のネットワークに接続する通信インタフェースも備える（図示を省略している）。
【００５０】
ここで、各計算ノードも、管理ノード１００と同様のハードウェアにより実現される。
図４は、ファイルサーバのハードウェア例を示す図である。ファイルサーバ３００は、プロセッサ３０１、ＲＡＭ３０２、ＨＤＤ３０３、画像信号処理部３０４、入力信号処理部３０５、媒体リーダ３０６および通信インタフェース３０７を有する。各ユニットがファイルサーバ３００のバスに接続されている。また、ファイルサーバ３００は管理ノードと同様にインタコネクトアダプタ１０３（図４では図示を省略している）を持つ場合がある。
【００５１】
プロセッサ３０１は、サーバ３００の全体を制御する。プロセッサ３０１は、複数のプロセッシング要素を含むマルチプロセッサであってもよい。プロセッサ３０１は、例えばＣＰＵ、ＤＳＰ、ＡＳＩＣまたはＦＰＧＡなどである。また、プロセッサ３０１は、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどのうちの２以上の要素の組み合わせであってもよい。
【００５２】
ＲＡＭ３０２は、サーバ３００の主記憶装置である。ＲＡＭ３０２は、プロセッサ３０１に実行させるＯＳのプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ３０２は、プロセッサ３０１による処理に用いる各種データを記憶する。
【００５３】
ＨＤＤ３０３は、サーバ３００の補助記憶装置である。ＨＤＤ３０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。サーバ３００は、フラッシュメモリやＳＳＤなどの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
【００５４】
画像信号処理部３０４は、プロセッサ３０１からの命令に従って、サーバ３００に接続されたディスプレイ５１に画像を出力する。ディスプレイ５１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、有機ＥＬ（Electro-Luminescence）ディスプレイなど各種のディスプレイを用いることができる。
【００５５】
入力信号処理部３０５は、サーバ３００に接続された入力デバイス５２から入力信号を取得し、プロセッサ３０１に出力する。入力デバイス５２としては、マウスやタッチパネルなどのポインティングデバイスやキーボードなどの各種の入力デバイスを用いることができる。サーバ３００には、複数の種類の入力デバイスが接続されてもよい。
【００５６】
媒体リーダ３０６は、記録媒体５３に記録されたプログラムやデータを読み取る装置である。記録媒体５３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。また、記録媒体５３として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することもできる。媒体リーダ３０６は、例えば、プロセッサ３０１からの命令に従って、記録媒体５３から読み取ったプログラムやデータをＲＡＭ３０２またはＨＤＤ３０３に格納する。
【００５７】
通信インタフェース３０７は、ネットワーク２０を介して他の装置と通信を行う。
図５は、管理ノードの機能例を示す図である。管理ノード１００は、記憶部１１０、ログイン処理部１２０、ジョブ管理部１３０、予測部１４０、ジョブスケジューラ１５０、ジョブ実行管理部１６０およびノード管理部１７０を有する。記憶部１１０は、ＲＡＭ１０２やディスク装置４０に確保された記憶領域を用いて実現される。ログイン処理部１２０、ジョブ管理部１３０、予測部１４０、ジョブスケジューラ１５０、ジョブ実行管理部１６０およびノード管理部１７０は、ＲＡＭ１０２に記憶されたプログラムをプロセッサ１０１が実行することで実現される。
【００５８】
記憶部１１０は、管理ノード１００の各部の処理に用いられる情報を記憶する。具体的には、記憶部１１０は、管理ノード１００で発生したユーザのログイン、ジョブの投入、実行開始、および、実行終了などのイベントに関するログを記憶する。また、記憶部１１０は、管理ノード１００による計算ノードの需要の学習や予測に用いられる情報や、計算ノードの起動状態を制御するためのスケジュールの情報などを記憶する。
【００５９】
ログイン処理部１２０は、ユーザＩＤ（IDentifier）およびパスワードを受け付け、記憶部１１０に予め登録されたユーザＩＤおよびパスワードと照合することで、ユーザのログイン処理を行う。ログイン処理部１２０は、ログインに成功すると、ユーザＩＤを含むログイン情報を予測部１４０に通知する。また、ログイン処理部１２０は、ログイン履歴を記憶部１１０に格納する。ログイン履歴は、ログインしたユーザＩＤやログイン時刻の情報を含む。
【００６０】
更に、ログイン処理部１２０は、ユーザがログインしたことを予測部１４０に通知する。
ジョブ管理部１３０は、ログインしたユーザによるジョブ投入を受け付ける。ジョブ管理部１３０は、ログインしたユーザからのジョブ投入を受け付けたとき、ジョブが投入されたことを予測部１４０に通知する。ジョブ管理部１３０は、投入されたジョブのスケジューリングをジョブスケジューラ１５０に依頼する。ジョブ管理部１３０は、ジョブスケジューラ１５０のスケジューリング結果で指定される計算ノードを用いてジョブの実行を開始するよう、ジョブ実行管理部１６０に依頼する。ジョブ管理部１３０は、計算ノードでジョブを実行させる。ジョブ実行管理部１６０からジョブの実行を終了した旨の通知を受け付けると、ジョブが終了したことを予測部１４０に通知する。
【００６１】
ジョブ管理部１３０は、ジョブ投入、ジョブ実行開始およびジョブ終了などのジョブ履歴を記憶部１１０に格納する。ジョブ履歴は、該当のジョブＩＤ、時刻、ジョブ実行に用いられた計算ノード数、処理を依頼したユーザのユーザＩＤ、ジョブの実行結果として出力される終了コードを含む。
【００６２】
予測部１４０は、ジョブ管理部１３０からジョブ投入の通知を受け付けると、現在のジョブの実行状況に応じて、ユーザ毎に計算ノードの需要を学習する。予測部１４０は、ニューラルネットワークによる教師付き学習を行う。予測部１４０は、ニューラルネットワークによる学習結果を、ユーザＩＤに対応付けて記憶部１１０に格納する。
【００６３】
また、予測部１４０は、ログイン処理部１２０からのログイン情報、もしくはジョブ管理部１３０からのジョブ終了情報を受け付けると、記憶部１１０に記憶されたニューラルネットワークによる学習結果を用いて、次のジョブの投入までの予測時間、および、次のジョブの所要ノード数を予測する。予測部１４０は、現在時刻に次のジョブの投入までの予測時間を加えた時間を、次のジョブの投入予測時刻とする。予測部１４０は、次のジョブの所要ノード数および投入予測時刻の予測結果をノード管理部１７０に通知する。
【００６４】
ジョブスケジューラ１５０は、投入されたジョブのスケジューリングの依頼をジョブ管理部１３０から受け付けると、ジョブのスケジューリングを実行し、スケジューリング結果をジョブ管理部１３０に応答する。ジョブスケジューラ１５０は、計算ノードの利用スケジュールの情報をノード管理部１７０へ提供する機能も担う。
【００６５】
ジョブ実行管理部１６０は、ジョブ管理部１３０から指示された計算ノードを用いたジョブの実行を管理する。例えば、ジョブ実行管理部１６０は、指定されたジョブのアプリケーションのパスなど、実行に必要な情報を記憶部１１０から取得して該当の計算ノードに配置し、ジョブ実行のコマンドを当該計算ノードに送信することで、各計算ノードによるジョブ実行を開始させる。ジョブ実行管理部１６０は、各計算ノードからジョブ実行の終了を示すジョブ終了情報（前述の終了コードを含む）を受け付けると、ジョブ管理部１３０にジョブ終了情報を通知する。
【００６６】
ノード管理部１７０は、各計算ノードの電源オン／オフ状態やサスペンド状態などの電源状態を管理する。ノード管理部１７０は、予測部１４０による予測結果として、次のジョブの所要ノード数および投入予測時刻を取得する。ノード管理部１７０は、ジョブスケジューラ１５０から計算ノードの利用スケジュールの情報を取得し、投入予測時刻における全てのジョブで所要される計算ノード数を計算する。ノード管理部１７０は、現在電源オン状態にある計算ノードの数を考慮し、投入予測時刻において計算ノードが不足するか否かを判定する。不足する場合、ノード管理部１７０は、電源オフやサスペンド状態にある計算ノードへの再通電を行うと決定する。そして、ノード管理部１７０は、計算ノードの起動やサスペンド解除に要する時間を投入予測時刻から差し引いた時刻に、不足分の計算ノードの起動を開始する。差し引いた時刻が、現時刻よりも過去になる場合、ノード管理部１７０は、不足分の計算ノードの起動を直ちに開始する。
【００６７】
また、ノード管理部１７０は、所定の条件の元、各計算ノードを電源オンから電源オフへ、または、電源オンからサスペンド状態へ切り替え、省電力化を図ることもある。例えば、ノード管理部１７０は、所定期間演算処理に用いられていない計算ノードを電源オンから電源オフ（またはサスペンド状態）へ切り替えてもよい。
【００６８】
図６は、ニューラルネットワークの例を示す図である。ニューラルネットワークＮ１１の情報は、記憶部１１０に格納される。ニューラルネットワークＮ１１は、３つの層を有し、予測部１４０による教師付き機械学習に用いられる。第１の層は入力層である。第２の層は隠れ層である。第３の層は出力層である。ただし、予測部１４０は、入力層と出力層との間に複数の隠れ層をもつ３層以上のニューラルネットワークを使用してもよい。ニューラルネットワークＮ１１を用いた学習には、入力側教師データＩ１，Ｉ２，Ｉ３，Ｉ４、および、出力側教師データＯ１，Ｏ２が用いられる。
【００６９】
入力側教師データＩ１は、ログイン時またはジョブ終了時の時刻情報であり、時刻に関する複数のデータ要素を含む（予測を行う際には、ログイン時またはジョブ終了時は現時刻を表すことになる）。具体的には、入力側教師データＩ１は、年間の週番号、月間の週番号、曜日番号、月、日、時、分および日タイプ（通常日（祝日でない日）、または、祝日を表す）の情報を含む。ここで、時刻に関する情報を一般的な時刻表現とすると周期性を検出し難い。例えば、「年」情報は周期性を表現し難い。また、「月」、「日」、「時」などの情報は周期的であるが、ニューラルネットワークでは、５９分と０分が連続していることを認識できない。そこで、時間を表す各情報の最大値と最小値とを２πで正規化し、ｓｉｎ関数とｃｏｓ関数とに代入した２つの値で表現する。この場合、入力側教師データＩ１には、合計で８種類のデータ要素が含まれることになる。
【００７０】
入力側教師データＩ２は、イベントの種別が、ログインまたはジョブ終了であるか、ジョブ終了であればどのジョブであるかを識別する情報である。ここで、例えば、計算システムにおいて通常用いられるジョブＩＤは、一時的な値であることもある。そこで、予測部１４０は、恒久的にジョブを区別できる識別子を生成する。例えば、予測部１４０は、ジョブとして実行される目的プログラムのハッシュ値をジョブの識別子として利用することが考えられる。なお、ハッシュ値（ジョブの識別子）の値レンジが、ニューラルネットワークＮ１１の１ユニット（１つのデータ要素）にとって広過ぎることもある。その場合、１つのハッシュ値に対し、複数の入力ユニットを設け、桁毎などに分けて入力してもよい。また、ログインのイベントには特別な値を予め設ける（例えば、“０”とする）。
【００７１】
入力側教師データＩ３は、該当ユーザの直近で実行を終了した複数個のジョブの識別子（終了ジョブ識別子Ｊｐと称する）と、当該ジョブの終了コードである。ただし、入力側教師データＩ３は、１つのジョブの識別子と、当該ジョブの終了コードでもよい。ここで、ジョブ終了が最も早かったジョブの終了ジョブ識別子をＪｐ（１）とする。例えば、入力側教師データＩ３は、ｍ（ｍは１以上の整数）個の終了ジョブ識別子と、ｍ個の終了ジョブ識別子それぞれに対応する終了コードを含む。ｍの値は、例えば、記憶部１１０に予め設定されている。図６において、終了ジョブ識別子Ｊｐ（１）は、１つ目の終了ジョブ識別子である（ｍ個の終了ジョブのうちジョブ終了が最も早かったジョブに相当）。終了ジョブ識別子Ｊｐ（ｍ）は、ｍ個目の終了ジョブ識別子である（ｍ個の終了ジョブのうちジョブ終了が最も遅かったジョブに相当）。予測部１４０は、終了ジョブ識別子の入力がない入力ユニットには“０”を入力する。
【００７２】
予測部１４０は、入力側教師データＩ３に相当する情報を、記憶部１１０に記憶されたジョブ履歴から収集できる。ニューラルネットワークＮ１１は、複数個の情報を入力するための複数の入力ユニットをもつ。また、入力ユニットには昇順のユニット番号が付与される。例えば、予測部１４０は、ユニット番号の昇順に、ジョブ終了が早かった順で情報を各入力ユニットに割り当てる（ただし、逆順でもよい）。また、予測部１４０は、各ジョブの終了コードを、ジョブの識別子と同じ順番で、各入力ユニットに割り当てる。
【００７３】
入力側教師データＩ４は、該当ユーザの現在投入済であるジョブの識別子（投入済ジョブ識別子Ｊｅと称する）である。ここで、ジョブ識別子とは、一時的なジョブＩＤではなく、入力情報Ｉ２で説明したようなハッシュ値などの恒久的に固定された値である。ニューラルネットワークＮ１１には、複数のジョブが実行されていることを考慮して、複数の入力ユニットを用意する（ただし、１つでもよい）。予測部１４０は、入力ユニット数よりも投入済ジョブ数が少ない場合には、余りの入力ユニットには“０”を入力する。予測部１４０は、入力ユニットのユニット番号の昇順に、投入時刻が早かった順で投入済ジョブ識別子を入力する。例えば、入力側教師データＩ４は、ｎ（ｎは１以上の整数）個の投入済ジョブ識別子を含む。ｎの値は、例えば、記憶部１１０に予め設定されている。図６において、投入済ジョブ識別子Ｊｅ（１）は、１つ目の投入済ジョブ識別子である（ｎ個の投入済ジョブのうちジョブ投入が最も早かったジョブに相当）。投入済ジョブ識別子Ｊｅ（ｎ）は、ｎ個目の投入済ジョブ識別子である（ｎ個の投入済ジョブのうちジョブ投入が最も遅かったジョブに相当）。
【００７４】
出力側教師データＯ１は、実際に投入されたジョブで用いられた計算ノード数である。予測部１４０は、当該計算ノード数をジョブ管理部１３０やジョブ履歴から取得できる。
出力側教師データＯ２は、投入されたジョブの直前のイベント（該当ユーザのログインまたは該当ユーザのジョブ終了）の発生時刻と、今回投入されたジョブの投入時刻との時間差（相対時間）である。予測部１４０は、ログイン履歴およびジョブ履歴を参照して、直前のイベントが該当ユーザのログインかジョブ終了かを判断し、当該イベントの発生時刻を得ることができる。
【００７５】
ここで、ニューラルネットワークＮ１１の入力層は、全部でｉ個のデータ要素（入力ユニット）を持つものとする。ニューラルネットワークＮ１１の隠れ層は、全部でｈ個のデータ要素を含む。隠れ層の各データ要素は、入力層の各データ要素を入力とした所定の関数の出力である。隠れ層における各関数は、入力層の各データ要素に対する結合定数（重みと称してもよい）を含む。例えば、入力層を記号“ｉ”で、隠れ層を記号“ｈ”でそれぞれ示す。すると、隠れ層の０番目のデータ要素に対する入力層の０番目のデータ要素の結合定数を“Ｗｉ0ｈ0”と表せる。また、隠れ層の０番目のデータ要素に対する入力層の１番目のデータ要素の結合定数を“Ｗｉ1ｈ0”と表せる。隠れ層のｈ番目のデータ要素に対する入力層のｉ番目のデータ要素の結合定数を“Ｗｉiｈh”と表せる。
【００７６】
また、ニューラルネットワークＮ１１の出力層は、２個のデータ要素（出力ユニット）を含む。出力層のデータ要素は、隠れ層の各データ要素を入力とした所定の関数の出力である。出力層における各関数は、隠れ層の各データ要素に対する結合定数（重み）を含む。例えば、出力層を記号“ｏ”で示す。すると、出力層の０番目のデータ要素に対する隠れ層の０番目のデータ要素の結合定数を“Ｗｈ0ｏ0”と表せる。出力層の１番目のデータ要素に対する隠れ層の１番目のデータ要素の結合定数を“Ｗｈ1ｏ1”と表せる。出力層の０番目のデータ要素に対する隠れ層のｈ番目のデータ要素の結合定数を“Ｗｈhｏ0”と表せる。出力層の１番目のデータ要素に対する隠れ層のｈ番目のデータ要素の結合定数を“Ｗｈhｏ1”と表せる。予測部１４０は、教師付き学習により、上記の各結合定数を更新していくことで、計算ノードの需要予測の精度を向上させる。
【００７７】
ニューラルネットワークＮ１１の情報（例えば、層間のデータ要素の変換に用いられる関数および結合定数など）は、記憶部１１０に記憶される。また、ニューラルネットワークＮ１１は、第２の実施の形態の計算システムを利用するユーザ毎に設けられる。すなわち、予測部１４０は、あるユーザによるジョブの投入を受け付けると、該当のユーザにより要求されたジョブの実行の履歴（ジョブ履歴）およびユーザのログインの履歴（ログイン履歴）を用いてニューラルネットワークＮ１１による学習を行う。予測部１４０は、ニューラルネットワークＮ１１による学習結果をユーザ毎に記憶部１１０に格納する。
【００７８】
図７は、計算ノードの電源投入およびジョブ実行の例を示す図である。図７の例では、縦横に並べた四角形によって計算ノードを表している。図７の例では、縦方向に８個、横方向に８個の四角形を図示しており、８×８＝６４個の計算ノードを表している。また、図７では、管理ノード１００の機能のうち、記憶部１１０、ジョブスケジューラ１５０およびジョブ実行管理部１６０の図示を省略している。なお、図７の例では、あるユーザが管理ノード１００に対してログインする場合を例示する。
【００７９】
まず、最初の段階では、６×５＝３０個の計算ノードが既存ジョブを実行中であり、残りの３４個の計算ノードが省電力目的の電源オフ状態となっている（サスペンド状態でもよい）。
【００８０】
２番目の段階では、あるユーザが管理ノード１００に対してログインを行う。すると、ログイン処理部１２０は、ログイン情報を予測部１４０に通知する。予測部１４０は、ニューラルネットワークＮ１１による学習結果を用いて、ログイン後から該当のユーザによる次のジョブの投入までの時間（投入予測時間）と、次のジョブの所要ノード数とを予測する。また、予測部１４０は、現時刻と投入予測時間とを基に、次のジョブの投入予測時刻を求める。ノード管理部１７０は、予測部１４０による予測結果に基づいて、当該予測時刻における不足ノードの数を求める。そして、ノード管理部１７０は、投入予測時刻を基に、不足ノード分の計算ノードの起動所要時間を考慮して、不足ノード分の計算ノードの起動時刻を決定する。ノード管理部１７０は、決定した起動時刻に達すると、不足ノード分の計算ノードを電源オンにする。図７の例では、次のジョブの所要ノード数が２１個であり、不足ノードの数が２１個である。この場合、ノード管理部１７０は、例えば、２１個の計算ノードを含む計算ノード群Ｇ１を電源オフから電源オンに切り替える。
【００８１】
３番目の段階では、先にログインしたユーザが管理ノード１００に対してジョブを投入する。ジョブ管理部１３０は、（ジョブ実行管理部１６０を介して）計算ノード群Ｇ１を用いて当該ジョブの実行を開始させる。このように、管理ノード１００は、不足していた計算ノードを予め起動させておき、当該ジョブの所要ノード数分の計算ノードを、ユーザによるジョブ投入後に直ちに利用できるように準備する。
【００８２】
次に、管理ノード１００による処理手順を具体的に説明する。
図８は、管理ノードの処理例を示すフローチャートである。以下、図８に示す処理をステップ番号に沿って説明する。
【００８３】
（Ｓ１１）予測部１４０は、ログイン、ジョブ終了またはジョブ投入の何れの通知を受け付けたかを判定する。ジョブ投入の通知を受け付けた場合、処理をステップＳ１２に進める。ログインまたはジョブ終了の通知を受け付けた場合、処理をステップＳ１３に進める。ここで、前述のように、ジョブ投入の通知およびジョブ終了の通知は、ジョブ管理部１３０により生成される。ログインの通知は、ログイン処理部１２０により生成される。
【００８４】
（Ｓ１２）予測部１４０は、ニューラルネットワークＮ１１を用いた教師付き学習を行う。処理の詳細は後述される。そして、処理を終了する。
（Ｓ１３）予測部１４０は、ニューラルネットワークＮ１１による学習結果を用いて、計算ノードの需要予測を行う。処理の詳細は後述される。
【００８５】
（Ｓ１４）ノード管理部１７０は、不足ノード分の計算ノードに対する再通電操作を行う。処理の詳細は後述される。そして、処理を終了する。
なお、予測部１４０は、ステップＳ１２またはステップＳ１４の実行後、次の通知を受け付けるまで待機する。次の通知を受け付けると、再度ステップＳ１１を開始する。
【００８６】
図９は、学習の例を示すフローチャートである。以下、図９に示す処理をステップ番号に沿って説明する。以下に示す手順は、図８のステップＳ１２に相当する。
（Ｓ２１）予測部１４０は、記憶部１１０に記憶されたログイン履歴およびジョブ履歴を参照して、今回のジョブを依頼したユーザに対する、今回のジョブ投入の直前のイベントを判定する。直前のイベントがジョブ終了である場合、処理をステップＳ２２に進める。直前のイベントがログインである場合、処理をステップＳ２３に進める。なお、予測部１４０は、ログイン履歴およびジョブ履歴に含まれるイベントのうち、ログインまたはジョブ終了のイベントのみに着目してステップＳ２１の判定を行う（例えば、ジョブ実行開始などの他のイベントを無視して直前のイベントを判断する）。
【００８７】
（Ｓ２２）予測部１４０は、今回投入されたジョブのジョブ識別子を生成する。具体的には、予測部１４０は、該当のジョブの目的プログラムを所定のハッシュ関数に代入してハッシュ値を求め、求めたハッシュ値をジョブ識別子とする。そして、処理をステップＳ２４に進める。なお、予測部１４０は、ユーザによって指定されたジョブＩＤとジョブ識別子との対応関係の情報を記憶部１１０に格納してもよい（ジョブ履歴に記録されるジョブＩＤに対してジョブ識別子を特定できるようにするため）。あるいは、ジョブ管理部１３０は、予測部１４０と同じ方法により求めたジョブ識別子を各ジョブの識別情報として、ジョブ履歴に記録してもよい。
【００８８】
（Ｓ２３）予測部１４０は、ジョブ識別子を０とする（ジョブ識別子＝０）。そして、処理をステップＳ２４に進める。
（Ｓ２４）予測部１４０は、ステップＳ２１で判定した直前のイベントの時刻情報を２πで正規化し、ｓｉｎ，ｃｏｓ値を計算する。
【００８９】
（Ｓ２５）予測部１４０は、該当ユーザの過去ｍ個分の終了ジョブ識別子と終了コードとを記憶部１１０に記憶されたジョブ履歴から取得する。予測部１４０は、該当ユーザについて、現時刻に対して直近のｍ個分の終了ジョブ識別子と終了コードとを取得する。
【００９０】
（Ｓ２６）予測部１４０は、該当ユーザのｎ個分の投入済ジョブ識別子をジョブ管理部１３０から取得する。
（Ｓ２７）予測部１４０は、ステップＳ２４〜Ｓ２６で取得した各ジョブに関する情報をニューラルネットワークＮ１１の入力側教師データとする。そして、処理をステップＳ２８に進める。
【００９１】
図１０は、学習の例（続き）を示すフローチャートである。以下、図１０に示す処理をステップ番号に沿って説明する。
（Ｓ２８）予測部１４０は、今回投入されたジョブの所要ノード数をジョブ管理部１３０から取得する。
【００９２】
（Ｓ２９）予測部１４０は、記憶部１１０に記憶されたログイン履歴およびジョブ履歴を参照して、今回のジョブを依頼したユーザに対する、今回のジョブ投入の直前のイベントを判定する。直前のイベントがジョブ終了である場合、処理をステップＳ３０に進める。直前のイベントがログインである場合、処理をステップＳ３１に進める。なお、ステップＳ２９の判定結果は、ステップＳ２１と同じになる。予測部１４０は、ログイン履歴およびジョブ履歴に含まれるイベントのうち、ログインまたはジョブ終了のイベントのみに着目してステップＳ２９の判定を行う（例えば、ジョブ実行開始などの他のイベントを無視して直前のイベントを判断する）。
【００９３】
（Ｓ３０）予測部１４０は、直前のジョブの終了時刻から現時刻までの時間差を計算する。そして、処理をステップＳ３２に進める。なお、予測部１４０は、直前のジョブの終了時刻を、記憶部１１０に記憶されたジョブ履歴から取得できる。
【００９４】
（Ｓ３１）予測部１４０は、該当ユーザのログイン時刻から現時刻までの時間差を計算する。なお、予測部１４０は、該当ユーザのログイン時刻を、記憶部１１０に記憶されたログイン履歴から取得できる。そして、処理をステップＳ３２に進める。
【００９５】
（Ｓ３２）予測部１４０は、ステップＳ２８〜Ｓ３１で取得した所要ノード数および時間差を、ニューラルネットワークＮ１１の出力側教師データとする。
（Ｓ３３）予測部１４０は、ニューラルネットワークＮ１１による教師付き学習計算を実行する。例えば、予測部１４０は、誤差逆伝搬法（バックプロパゲーション）を用いて、ニューラルネットワークＮ１１に含まれる各結合定数を更新する。予測部１４０は、学習結果（更新後の各結合定数）を、ユーザＩＤに対応付けて記憶部１１０に格納する。
【００９６】
なお、上記の例では、予測部１４０は、ジョブ投入のたびに学習を実行する。ただし、ジョブ投入のたびではなく、学習用の教師データをある程度ためてから学習を実行してもよい。
【００９７】
図１１は、計算ノード需要予測の例を示すフローチャートである。以下、図１１に示す処理をステップ番号に沿って説明する。以下に示す手順は、図８のステップＳ１３に相当する。
【００９８】
（Ｓ４１）予測部１４０は、現時刻情報を２πで正規化し、ｓｉｎ、ｃｏｓ値を計算する。
（Ｓ４２）予測部１４０は、今回受け付けた通知がログインまたはジョブ終了の何れかであるかを判定する。ジョブ終了の場合、処理をステップＳ４３に進める。ログインの場合、処理をステップＳ４４に進める。
【００９９】
（Ｓ４３）予測部１４０は、今回終了したジョブのジョブ識別子を生成する。具体的には、予測部１４０は、該当のジョブの目的プログラムを所定のハッシュ関数に代入してハッシュ値を求め、求めたハッシュ値をジョブ識別子とする。ステップＳ４３で用いられるハッシュ関数は、ステップＳ２２で用いられるハッシュ関数と同じである。そして、処理をステップＳ４５に進める。
【０１００】
（Ｓ４４）予測部１４０は、ジョブ識別子を０とする（ジョブ識別子＝０）。そして、処理をステップＳ４５に進める。
（Ｓ４５）予測部１４０は、該当ユーザの過去ｍ個分の終了ジョブ識別子と終了コードとを記憶部１１０に記憶されたジョブ履歴から取得する。予測部１４０は、該当ユーザについて、現時刻に対して直近のｍ個分の終了ジョブ識別子と終了コードとを取得する。
【０１０１】
（Ｓ４６）予測部１４０は、該当ユーザのｎ個分の投入済ジョブ識別子をジョブ管理部１３０から取得する。
（Ｓ４７）予測部１４０は、ステップＳ４１〜Ｓ４６で取得した情報をニューラルネットワークＮ１１の入力データとして、該当のユーザによる次のジョブの所要ノード数および投入までの時間の予測値を計算する。予測部１４０は、現在時刻に投入までの時間の予測を加えた時刻を、次のジョブの投入予測時刻とする。なお、予測部１４０は、該当ユーザのユーザＩＤに基づいて、該当ユーザに対応するニューラルネットワークＮ１１の学習結果の情報を記憶部１１０から取得し、ステップＳ４７の予測に用いることができる。
【０１０２】
ニューラルネットワークＮ１１では、図９，１０の学習の手順が繰り返されることにより、図１１による計算ノードの需要予測の精度が向上していく。
図１２は、再通電操作の例を示すフローチャートである。以下、図１２に示す処理をステップ番号に沿って説明する。以下に示す手順は、図８のステップＳ１４に相当する。
【０１０３】
（Ｓ５１）ノード管理部１７０は、ステップＳ４７で予測された時刻（投入予測時刻）に既にスケジュールしてあるジョブに必要なノード数（計算ノードの数のスケジュール値）をジョブスケジューラ１５０から取得する。
【０１０４】
（Ｓ５２）ノード管理部１７０は、スケジュール値と、予測値（投入予測時刻における次ジョブの所要ノード数の予測値）との合計が、現在通電中の計算ノードの数以上であるか否かを判定する。スケジュール値と予測値との合計が、現在通電中の計算ノードの数以上である場合、処理をステップＳ５３に進める。スケジュール値と予測値との合計が、現在通電中の計算ノードよりも少ない場合、処理を終了する。スケジュール値と予測値との合計が、現在通電中の計算ノードの数よりも少ない場合、現在通電中の計算ノードにより、予測された時刻において所要される計算ノード数を確保できることになる。
【０１０５】
（Ｓ５３）ノード管理部１７０は、投入予測時刻に不足する計算ノードの数を計算する。具体的には、ノード管理部１７０は、スケジュール値と予測値との合計から、現在通電中のノード数を引いた値を、不足する計算ノードの数とする。
【０１０６】
（Ｓ５４）ノード管理部１７０は、現時点で電源切断中またはサスペンド中の計算ノードの数が不足分（ステップＳ５３で計算した不足する計算ノードの数）以上であるか否かを判定する。電源切断中またはサスペンド中の計算ノードの数が不足分以上の場合、処理をステップＳ５５に進める。電源切断中またはサスペンド中の計算ノードの数が不足分よりも少ない場合、処理を終了する。電源切断中またはサスペンド中の計算ノードの数が不足分よりも少ない場合、次のジョブが投入予測時刻に投入されても、現状では次のジョブの実行を投入予測時刻の直後に開始することはできないことになる（所要ノード数に対して計算ノード数が不足するため）。
【０１０７】
（Ｓ５５）ノード管理部１７０は、必要となる時刻（投入予測時刻）から再通電の所要時間を差し引いた時刻を計算する。例えば、ノード管理部１７０は、電源切断中またはサスペンド中の計算ノードについて、不足分の数の計算ノードの再通電の所要時間を求める。例えば、消費電力の制約（計算ノードの電源オンには比較的多くの電力を消費するため、多数の計算ノードを同時に起動させると消費電力上限を上回る可能性がある）から一度に同時に電源オン開始できる計算ノードの数をＮとし、不足ノードの数をＭとする。また、１つの計算ノードの電源切断から起動に要する時間をτとする（サスペンド中からの復帰の場合は、τを１つの計算ノードの当該復帰に要する時間とする）。すると、例えば、再通電の所要時間は、ＲＯＵＮＤＵＰ（Ｍ／Ｎ）×τである。ノード管理部１７０は、こうして求めた再通電の所要時間を、投入予測時刻から引いた時刻を求める。
【０１０８】
（Ｓ５６）ノード管理部１７０は、ステップＳ５５の計算結果が負（すなわち、現時刻よりも前の時刻）であるか否かを判定する。ステップＳ５５の計算結果が負ではない場合、処理をステップＳ５７に進める。ステップＳ５５の計算結果が負である場合、処理をステップＳ５８に進める。
【０１０９】
（Ｓ５７）ノード管理部１７０は、ステップＳ５３で計算した不足ノード数分の計算ノードを、ステップＳ５５で計算した時刻に再通電する。そして、処理を終了する。
（Ｓ５８）ノード管理部１７０は、ステップＳ５３で計算した不足ノード数分の計算ノードを、直ちに再通電する。そして、処理を終了する。
【０１１０】
図１３は、計算ノードの起動例を示す図である。図１３（Ａ）は、管理ノード１００の予測に応じた計算ノードの起動例を示している。図１３（Ｂ）は、管理ノード１００の予測を用いずに、必要時に電源投入を行う比較例を示している。
【０１１１】
図１３（Ａ）で示すように、管理ノード１００は、ユーザのログインまたはジョブ終了を検出すると、該当のユーザによる次のジョブの投入予測時刻および所要ノード数の予測を行う。そして、管理ノード１００は、予測した投入予測時刻から計算ノードの起動所要時間を考慮した時間だけ差し引いた時刻に、不足ノード分の計算ノードの電源投入を行う。すると、続くシステム起動の期間内に不足ノード分の計算ノードの起動が完了する。システム起動が完了すると、起動した各計算ノードは、順次ジョブ受付可能状態に遷移する。管理ノード１００は、こうして投機的に計算ノードを電源オンにすることで、投入予測時刻の前に、予測した所要ノード数分の計算ノードをジョブ受付可能状態とする。その後、該当のユーザによりジョブが投入されると、管理ノード１００は、起動済の計算ノード群を用いて直ちにジョブの実行を開始できる。
【０１１２】
一方、図１３（Ｂ）で示すように、ジョブ実行のために必要なタイミングで計算ノードの電源投入を行うことも考えられる。しかし、この場合、システム起動やジョブ受付可能状態への遷移に伴う期間（遅延時間ΔＴとする）の間、該当の計算ノードを用いたジョブ実行を開始することができない。すなわち、図１３（Ｂ）のケースでは、図１３（Ａ）のケースよりも、ジョブの実行開始までの時間が、遅延時間ΔＴだけ遅れることになる。
【０１１３】
逆に、管理ノード１００を用いることで、比較例（図１３（Ｂ））よりも、遅延時間ΔＴの分、ジョブの実行開始を早めることができる。こうして、第２の実施の形態の計算システムでは、ジョブの実行を迅速に開始可能にすることができる。
【０１１４】
ここで、図１３（Ｂ）で例示したように、省電力化のために一部の計算ノードの電源切断やサスペンドを行うと、その副作用として、計算を行いたいタイミングなどに直ちに計算ノードを使用できなくなるという問題がある。第２の実施の形態の計算システムでは、ユーザが所望のタイミングでジョブを投入する運用が多い。このため、いつ、どのようなジョブが投入されるか不明である。例えば、ユーザがジョブを実行したいタイミングで一部の計算ノードを電源オンする運用も考えられる。しかし、計算ノードの電源オン開始から電源オン完了までには時間を要し、ジョブの実行開始が遅延してしまう。この問題は、ジョブスループットの低下や計算ノードの使用効率の低下の要因にもなる。
【０１１５】
また、電源オン時やサスペンドからの復帰時には、通常時よりも消費電力が大きい。このため、再通電および電源切断を繰り返し行っていると、計算システムにおける消費電力が過大になるおそれもある。そこで、計算ノードの需要予測を行って計算ノードの電源オン／オフを制御することが考えられる。ところが、前述のように計算システムに対して、いつ、どのようなジョブが投入されるかが不明なことがある。
【０１１６】
需要予測にとって、「どのような」とは、ジョブの処理内容ではなく「所要ノード数」である。未投入のジョブに対して、電源切断している計算ノードが必要になるか否か、必要になるとしたら「いつ」、「何台」必要になるかを正確に予測することは容易ではない。第２の実施の形態の計算システムでは、ユーザは、管理ノード１１に対するログインを行った上で、ジョブ投入コマンドを入力し、ジョブ実行を依頼する。この場合、ログインしてから初めて投入するジョブが特定のジョブであったり、投入するジョブに順番が存在したり、特定の周期があるジョブを投入するなど、ジョブ投入に傾向がある場合がある。
【０１１７】
この傾向を検出できれば、次に「いつ」、「どのような」ジョブが投入されるかを予想でき、計算ノードの需要を予測できる可能性はある。しかし、ログインやジョブ投入のタイミングなどはユーザの自由である。このため、ユーザ毎に傾向が異なり、また、同一ユーザでも複数の傾向をもち、状況によって選択している場合などがある。すなわち、ユーザの傾向を網羅的にパターン化して需要予測を行おうとすると、様々な条件の組み合わせを考慮する必要があり、このような予測プログラムを開発することは困難である。
【０１１８】
そこで、管理ノード１００は、様々な条件の組み合わせをプログラミングするのではなく、各ユーザのログイン履歴やジョブ履歴から、傾向の要因となる情報を抽出して、機械学習により学習させ、その補間機能および汎化機能により予測を行う。これにより、次のジョブの必要とする計算ノード数と投入タイミングとをおおよそ予測でき、計算ノードの電源を切断していても、必要なタイミングで計算ノードをジョブ受付可能な状態か、それに近い状態（例えば、ブート途中の状態）にすることができる。このため、次のジョブを迅速に実行開始できる。また、その結果、空き計算ノードの消費電力を低減しつつ、ジョブスループットや資源利用効率の低下を抑えることができる。
【０１１９】
第２の実施の形態の例では、機械学習機構としてニューラルネットワークを用いるものとした。ただし、教師付き学習機能および汎化機能をもつ他の機械学習機構を用いることも考えられる。このような機械学習機構の例として、サポートベクタマシン（ＳＶＭ：Support Vector Machine）が挙げられる。
【０１２０】
更に、第２の実施の形態の例では、計算ノードの再通電を行う時刻の判定をノード管理部１７０により行うものとした。一方、当該判定のために、ジョブの投入状態、待ち状態、実行状態、および、計算ノードの保守スケジュールなどを総合的に判断することが求められ、非常に複雑化することも考えられる。一方、ジョブスケジューラ１５０は、元々これらの状況を判断して、ジョブのスケジューリングを行っており、同じ判断機能をノード管理部１７０にもたせることは好ましいとはいえない。そこで、予測した計算ノード数をジョブ実行要件とする仮想的ジョブのジョブスクリプトを作成してジョブスケジューラ１５０により事前スケジューリングさせることが考えられる。その場合、ノード管理部１７０は、ジョブスケジューラ１５０によるスケジューリング結果にしたがって計算ノードの再通電を行える。
【０１２１】
なお、第１の実施の形態の情報処理は、演算部１１ｂにプログラムを実行させることで実現できる。また、第２の実施の形態の情報処理は、プロセッサ１０１にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体５３に記録できる。ここで、管理ノード１００は、プロセッサ１０１とＲＡＭ１０２とを有するコンピュータを含むと考えてもよい。
【０１２２】
例えば、プログラムを記録した記録媒体５３を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータ（例えば、ファイルサーバ３００）に格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体５３に記録されたプログラムまたは他のコンピュータから受信したプログラムを、ＲＡＭ１０２やディスク装置４０などの記憶装置に格納し（インストールし）、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【０１２３】
１０  並列処理装置
１１  管理ノード
１１ａ  記憶部
１１ｂ  演算部
１２，１３，１４  計算ノード
１５  ネットワーク
Ｎ１  ニューラルネットワーク
【図１】
2018026050.tif 000003
【図２】
2018026050.tif 000004
【図３】
2018026050.tif 000005
【図４】
2018026050.tif 000006
【図５】
2018026050.tif 000007
【図６】
2018026050.tif 000008
【図７】
2018026050.tif 000009
【図８】
2018026050.tif 000010
【図９】
2018026050.tif 000011
【図１０】
2018026050.tif 000012
【図１１】
2018026050.tif 000013
【図１２】
2018026050.tif 000014
【図１３】
2018026050.tif 000015