本開示の概要は、プログラム移行のコンピュータ・システムおよび方法の理解を助けるために与えられており、本開示または本発明を限定することを意図したものではない。本開示の様々な態様および特徴は、一部の場合では別々に、または他の場合では本開示の他の態様および特徴と組み合わせて有利に使用され得ることを理解されたい。したがって、異なる効果を実現するために、コンピュータ・システムおよびそれらの動作方法に対して変形および修正が行われ得る。
一態様におけるコンピュータ実装方法は、第1のプロセッサ上で動作させるためにインタラクティブ開発プラットフォームにロードされるコード・フラグメントのコレクションを受信することを含むことができる。この方法はまた、コード・フラグメントのコレクションを特徴付けることに基づいて、第2のプロセッサへの移行のためのコード・フラグメントのコレクション内の候補フラグメントを決定することを含むことができる。この方法はまた、コード・フラグメントのコレクション内の候補フラグメントの位置に基づいて、プログラム・コンテキストを保存するためのコードを注入するためのコード・フラグメントのコレクション内のスポットを識別することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコードを識別されたスポットに注入することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコードが第1のプロセッサ上で動作したことに応答して、また、基準に基づいて、プログラム・コンテキストを第2のプロセッサに移行することを含むことができる。
一態様における方法は、プログラム・フラグメントの特徴に基づいて異なるタイプのコンピュータ・リソースを効率的に利用してプログラムを効率的に動作させることができる。
他の態様では、コンピュータ実装方法は、第1のプロセッサ上で動作させるためにインタラクティブ開発プラットフォームにロードされるコード・フラグメントのコレクションを受信することを含むことができる。この方法はまた、コード・フラグメントのコレクションを特徴付けることに基づいて、第2のプロセッサへの移行のためのコード・フラグメントのコレクション内の候補フラグメントを決定することを含むことができる。この方法はまた、コード・フラグメントのコレクション内の候補フラグメントの位置に基づいて、プログラム・コンテキストを保存するためのコードを注入するためのコード・フラグメントのコレクション内のスポットを識別することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコードを識別されたスポットに注入することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコードが第1のプロセッサ上で動作したことに応答して、また、基準に基づいて、プログラム・コンテキストを第2のプロセッサに移行することを含むことができる。この方法はまた、候補フラグメントを第2のプロセッサに移行することを含むことができる。
さらに他の態様では、コンピュータ実装方法は、第1のプロセッサ上で動作させるためにインタラクティブ開発プラットフォームにロードされるコード・フラグメントのコレクションを受信することを含むことができる。この方法はまた、コード・フラグメントのコレクションを特徴付けることに基づいて、第2のプロセッサへの移行のためのコード・フラグメントのコレクション内の候補フラグメントを決定することを含むことができる。この方法はまた、コード・フラグメントのコレクション内の候補フラグメントの位置に基づいて、プログラム・コンテキストを保存するためのコードを注入するためのコード・フラグメントのコレクション内のスポットを識別することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコードを識別されたスポットに注入することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコードが第1のプロセッサ上で動作したことに応答して、また、基準に基づいて、プログラム・コンテキストを第2のプロセッサに移行することを含むことができる。この方法はまた、候補フラグメントが第2のプロセッサ上で動作したことに応答して生成された更新されたプログラム・コンテキストを第2のプロセッサから受信することを含むことができる。この方法はまた、第1のプロセッサ上でコード・フラグメントのコレクションの動作を継続することを含むことができる。
さらに他の態様では、コンピュータ実装方法は、第1のプロセッサ上で動作させるためにインタラクティブ開発プラットフォームにロードされるコード・フラグメントのコレクションを受信することを含むことができる。この方法はまた、コード・フラグメントのコレクションを特徴付けることに基づいて、第2のプロセッサへの移行のためのコード・フラグメントのコレクション内の候補フラグメントを決定することを含むことができる。この方法はまた、コード・フラグメントのコレクション内の候補フラグメントの位置に基づいて、プログラム・コンテキストを保存するためのコードを注入するためのコード・フラグメントのコレクション内のスポットを識別することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコードを識別されたスポットに注入することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコードが第1のプロセッサ上で動作したことに応答して、また、基準に基づいて、プログラム・コンテキストを第2のプロセッサに移行することを含むことができる。インタラクティブ開発プラットフォームはインタラクティブ・コンピューティング・ノートブックを含むことができる。
またさらに他の態様では、コンピュータ実装方法は、第1のプロセッサ上で動作させるためにインタラクティブ開発プラットフォームにロードされるコード・フラグメントのコレクションを受信することを含むことができる。この方法はまた、コード・フラグメントのコレクションを特徴付けることに基づいて、第2のプロセッサへの移行のためのコード・フラグメントのコレクション内の候補フラグメントを決定することを含むことができる。この方法はまた、コード・フラグメントのコレクション内の候補フラグメントの位置に基づいて、プログラム・コンテキストを保存するためのコードを注入するためのコード・フラグメントのコレクション内のスポットを識別することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコードを識別されたスポットに注入することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコードが第1のプロセッサ上で動作したことに応答して、また、基準に基づいて、プログラム・コンテキストを第2のプロセッサに移行することを含むことができる。コード・フラグメントのコレクションを特徴付けることは、コード・フラグメントのコレクション内の各フラグメントの計算集約度(computational intensiveness)を決定することを含むことができる。
他の態様では、コンピュータ実装方法は、第1のプロセッサ上で動作させるためにインタラクティブ開発プラットフォームにロードされるコード・フラグメントのコレクションを受信することを含むことができる。この方法はまた、コード・フラグメントのコレクションを特徴付けることに基づいて、第2のプロセッサへの移行のためのコード・フラグメントのコレクション内の候補フラグメントを決定することを含むことができる。この方法はまた、コード・フラグメントのコレクション内の候補フラグメントの位置に基づいて、プログラム・コンテキストを保存するためのコードを注入するためのコード・フラグメントのコレクション内のスポットを識別することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコードを識別されたスポットに注入することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコードが第1のプロセッサ上で動作したことに応答して、また、基準に基づいて、プログラム・コンテキストを第2のプロセッサに移行することを含むことができる。コード・フラグメントのコレクションを特徴付けることは、コード・フラグメントのコレクション内の各フラグメントの計算集約度を決定することを含むことができる。計算集約度は、既知の計算集約的なコード・フラグメントを使用することに基づいて決定することができる。
他の態様では、コンピュータ実装方法は、第1のプロセッサ上で動作させるためにインタラクティブ開発プラットフォームにロードされるコード・フラグメントのコレクションを受信することを含むことができる。この方法はまた、コード・フラグメントのコレクションを特徴付けることに基づいて、第2のプロセッサへの移行のためのコード・フラグメントのコレクション内の候補フラグメントを決定することを含むことができる。この方法はまた、コード・フラグメントのコレクション内の候補フラグメントの位置に基づいて、プログラム・コンテキストを保存するためのコードを注入するためのコード・フラグメントのコレクション内のスポットを識別することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコードを識別されたスポットに注入することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコードが第1のプロセッサ上で動作したことに応答して、また、基準に基づいて、プログラム・コンテキストを第2のプロセッサに移行することを含むことができる。コード・フラグメントのコレクションを特徴付けることは、コード・フラグメントのコレクション内の各フラグメントの計算集約度を決定することを含むことができる。計算集約度は、既知の計算集約的なコード・フラグメントを使用することに基づいて決定することができる。計算集約度は、既知の計算集約的なコード・フラグメントに基づいてフラグメントの計算集約度を予測するように機械学習モデルをトレーニングすることに基づいて決定することができる。
さらに他の態様では、コンピュータ実装方法は、第1のプロセッサ上で動作させるためにインタラクティブ開発プラットフォームにロードされるコード・フラグメントのコレクションを受信することを含むことができる。この方法はまた、コード・フラグメントのコレクションを特徴付けることに基づいて、第2のプロセッサへの移行のためのコード・フラグメントのコレクション内の候補フラグメントを決定することを含むことができる。この方法はまた、コード・フラグメントのコレクション内の候補フラグメントの位置に基づいて、プログラム・コンテキストを保存するためのコードを注入するためのコード・フラグメントのコレクション内のスポットを識別することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコードを識別されたスポットに注入することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコードが第1のプロセッサ上で動作したことに応答して、また、基準に基づいて、プログラム・コンテキストを第2のプロセッサに移行することを含むことができる。コード・フラグメントのコレクションを特徴付けることは、コード・フラグメントのコレクション内の各フラグメントの計算集約度を決定することを含むことができる。計算集約度は、コード・フラグメントの動作時間と、コード・フラグメントに関連するインタラクティブなパターンとに基づいて決定することができる。
他の態様では、コンピュータ実装方法は、第1のプロセッサ上で動作させるためにインタラクティブ開発プラットフォームにロードされるコード・フラグメントのコレクションを受信することを含むことができる。この方法はまた、コード・フラグメントのコレクションを特徴付けることに基づいて、第2のプロセッサへの移行のためのコード・フラグメントのコレクション内の候補フラグメントを決定することを含むことができる。この方法はまた、コード・フラグメントのコレクション内の候補フラグメントの位置に基づいて、プログラム・コンテキストを保存するためのコードを注入するためのコード・フラグメントのコレクション内のスポットを識別することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコードを識別されたスポットに注入することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコードが第1のプロセッサ上で動作したことに応答して、また、基準に基づいて、プログラム・コンテキストを第2のプロセッサに移行することを含むことができる。この方法はまた、候補フラグメントを示すインタラクティブなグラフィカル要素をインタラクティブ開発プラットフォームのユーザ・インターフェース・ウィンドウに追加することを含むことができ、インタラクティブなグラフィカル要素は、候補フラグメントを第2のプロセッサ上で動作させるために移行するオプションをユーザに提供する。
他の態様では、コンピュータ実装方法は、第1のプロセッサ上で動作させるためにインタラクティブ開発プラットフォームにロードされるコード・フラグメントのコレクションを受信することを含むことができる。この方法はまた、コード・フラグメントのコレクションを特徴付けることに基づいて、第2のプロセッサへの移行のためのコード・フラグメントのコレクション内の候補フラグメントを決定することを含むことができる。この方法はまた、コード・フラグメントのコレクション内の候補フラグメントの位置に基づいて、プログラム・コンテキストを保存するためのコードを注入するためのコード・フラグメントのコレクション内のスポットを識別することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコードを識別されたスポットに注入することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコードが第1のプロセッサ上で動作したことに応答して、また、基準に基づいて、プログラム・コンテキストを第2のプロセッサに移行することを含むことができる。基準は、プログラム・コンテキストのサイズが閾値を満たすことを含むことができる。
他の態様では、コンピュータ実装方法は、第1のプロセッサ上で動作させるためにインタラクティブ開発プラットフォームにロードされるコード・フラグメントのコレクションを受信することを含むことができる。この方法はまた、コード・フラグメントのコレクションを特徴付けることに基づいて、第2のプロセッサへの移行のためのコード・フラグメントのコレクション内の候補フラグメントを決定することを含むことができる。この方法はまた、コード・フラグメントのコレクション内の候補フラグメントの位置に基づいて、プログラム・コンテキストを保存するためのコードを注入するためのコード・フラグメントのコレクション内のスポットを識別することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコードを識別されたスポットに注入することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコードが第1のプロセッサ上で動作したことに応答して、また、基準に基づいて、プログラム・コンテキストを第2のプロセッサに移行することを含むことができる。第2のプロセッサは、第1のプロセッサよりも高い計算能力を有する。
他の態様では、コンピュータ実装方法は、第1のプロセッサ上で動作させるためにインタラクティブ開発プラットフォームにロードされるコード・フラグメントを受信することを含むことができる。この方法はまた、コード・フラグメントのそれぞれに関連する計算集約度を決定したことに基づいて、コード・フラグメントから第2のプロセッサへの移行のための候補フラグメントを決定することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコード・フラグメント内のスポットを識別することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコンピュータ命令を識別されたスポットに注入することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコンピュータ命令が第1のプロセッサ上で動作したことに応答して、プログラム・コンテキストを移行すること、またはプログラム・コンテキストを生成したコード・フラグメントを移行することのいずれがよりコスト効率が高いかを判定することを含むことができる。この方法はまた、プログラム・コンテキストを移行する方がコスト効率が高いと判定したことに応答して、プログラム・コンテキストを第2のプロセッサに移行することを含むことができる。この方法は、プログラム・コンテキストを生成したコード・フラグメントを移行する方がコスト効率が高いと判定したことに応答して、プログラム・コンテキストを生成したコード・フラグメントを第2のプロセッサに移行することを含むことができる。
他の態様では、コンピュータ実装方法は、第1のプロセッサ上で動作させるためにインタラクティブ開発プラットフォームにロードされるコード・フラグメントを受信することを含むことができる。この方法はまた、コード・フラグメントのそれぞれに関連する計算集約度を決定したことに基づいて、コード・フラグメントから第2のプロセッサへの移行のための候補フラグメントを決定することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコード・フラグメント内のスポットを識別することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコンピュータ命令を識別されたスポットに注入することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコンピュータ命令が第1のプロセッサ上で動作したことに応答して、プログラム・コンテキストを移行すること、またはプログラム・コンテキストを生成したコード・フラグメントを移行することのいずれがよりコスト効率が高いかを判定することを含むことができる。この方法はまた、プログラム・コンテキストを移行する方がコスト効率が高いと判定したことに応答して、プログラム・コンテキストを第2のプロセッサに移行することを含むことができる。この方法は、プログラム・コンテキストを生成したコード・フラグメントを移行する方がコスト効率が高いと判定したことに応答して、プログラム・コンテキストを生成したコード・フラグメントを第2のプロセッサに移行することを含むことができる。プログラム・コンテキストを移行すること、またはプログラム・コンテキストを生成したコード・フラグメントを移行することのいずれがよりコスト効率が高いかは、プログラム・コンテキストのサイズと、プログラム・コンテキストを生成したコード・フラグメントを動作させるための処理時間とに基づいて決定することができる。
他の態様では、コンピュータ実装方法は、第1のプロセッサ上で動作させるためにインタラクティブ開発プラットフォームにロードされるコード・フラグメントを受信することを含むことができる。この方法はまた、コード・フラグメントのそれぞれに関連する計算集約度を決定したことに基づいて、コード・フラグメントから第2のプロセッサへの移行のための候補フラグメントを決定することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコード・フラグメント内のスポットを識別することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコンピュータ命令を識別されたスポットに注入することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコンピュータ命令が第1のプロセッサ上で動作したことに応答して、プログラム・コンテキストを移行すること、またはプログラム・コンテキストを生成したコード・フラグメントを移行することのいずれがよりコスト効率が高いかを判定することを含むことができる。この方法はまた、プログラム・コンテキストを移行する方がコスト効率が高いと判定したことに応答して、プログラム・コンテキストを第2のプロセッサに移行することを含むことができる。この方法は、プログラム・コンテキストを生成したコード・フラグメントを移行する方がコスト効率が高いと判定したことに応答して、プログラム・コンテキストを生成したコード・フラグメントを第2のプロセッサに移行することを含むことができる。複数のコード・フラグメント内のプログラム・コンテキストを保存するための複数のスポットを識別することができ、この方法は、複数のスポットのうちのいずれで作成されたいずれのチェックポイントを移行するかを、チェックポイントのプログラム・コンテキスト・サイズと、チェックポイントを作成したコード・フラグメントの処理時間とに基づいて選ぶことをさらに含むことができる。
他の態様では、コンピュータ実装方法は、第1のプロセッサ上で動作させるためにインタラクティブ開発プラットフォームにロードされるコード・フラグメントを受信することを含むことができる。この方法はまた、コード・フラグメントのそれぞれに関連する計算集約度を決定したことに基づいて、コード・フラグメントから第2のプロセッサへの移行のための候補フラグメントを決定することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコード・フラグメント内のスポットを識別することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコンピュータ命令を識別されたスポットに注入することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコンピュータ命令が第1のプロセッサ上で動作したことに応答して、プログラム・コンテキストを移行すること、またはプログラム・コンテキストを生成したコード・フラグメントを移行することのいずれがよりコスト効率が高いかを判定することを含むことができる。この方法はまた、プログラム・コンテキストを移行する方がコスト効率が高いと判定したことに応答して、プログラム・コンテキストを第2のプロセッサに移行することを含むことができる。この方法は、プログラム・コンテキストを生成したコード・フラグメントを移行する方がコスト効率が高いと判定したことに応答して、プログラム・コンテキストを生成したコード・フラグメントを第2のプロセッサに移行することを含むことができる。この方法はまた、第2のプロセッサが候補フラグメントを動作させるのを待つことと、候補フラグメントを動作させることに関連する更新されたプログラム・コンテキストを受信することと、を含むこともできる。
他の態様では、コンピュータ実装方法は、第1のプロセッサ上で動作させるためにインタラクティブ開発プラットフォームにロードされるコード・フラグメントを受信することを含むことができる。この方法はまた、コード・フラグメントのそれぞれに関連する計算集約度を決定したことに基づいて、コード・フラグメントから第2のプロセッサへの移行のための候補フラグメントを決定することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコード・フラグメント内のスポットを識別することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコンピュータ命令を識別されたスポットに注入することを含むことができる。この方法はまた、プログラム・コンテキストを保存するためのコンピュータ命令が第1のプロセッサ上で動作したことに応答して、プログラム・コンテキストを移行すること、またはプログラム・コンテキストを生成したコード・フラグメントを移行することのいずれがよりコスト効率が高いかを判定することを含むことができる。この方法はまた、プログラム・コンテキストを移行する方がコスト効率が高いと判定したことに応答して、プログラム・コンテキストを第2のプロセッサに移行することを含むことができる。この方法は、プログラム・コンテキストを生成したコード・フラグメントを移行する方がコスト効率が高いと判定したことに応答して、プログラム・コンテキストを生成したコード・フラグメントを第2のプロセッサに移行することを含むことができる。計算集約度は、コード・フラグメントの動作時間と、コード・フラグメントに関連するインタラクティブなパターンとに基づいて決定することができる。
本明細書に記載の1つまたは複数の方法を実施するように構成される少なくとも1つのハードウェア・プロセッサを含むシステムを提供することができる。本明細書に記載の1つまたは複数の方法を実施するためのマシンによって実行可能な命令のプログラムを記憶するコンピュータ可読記憶媒体も提供され得る。
様々な実施形態のさらなる特徴ならびに構造および動作については、添付の図面を参照して以下で詳細に説明する。図面において、同様の参照番号は、同一または機能的に同様の要素を示す。
プログラム実行のコンテキストを異なるコンピューティング環境に転送することは移行と呼ばれ、これにはコンテキストを保存するためのチェックポインティングのステップが使用される。チェックポインティングとは、プログラムのコンテキストをファイルにダンプすることにより、その実行を停止して後で再開できるようにする行為である。チェックポインティングは、たとえば、より高い処理能力またはより多くの専門的なリソースを有するコンピュータでコア・ルーチンを実行できるようにするための、異なるマシンへのプログラムのライブ移行に使用される。ライブ移行のプロセスは、移行が開始される直前にプロセスを停止し、その実行コンテキストをファイルに保存し、そのファイルをネットワーク経由で新しいホスト・コンピュータに転送し、新しいホストで復元し、停止した場所から実行を継続することによって、開始し得る。しかしながら、プロセスの状態によっては、チェックポイントのサイズが非常に大きくなり得、ネットワーク経由の転送が完了するまでに時間がかかり得る。
1つまたは複数の実施形態では、プログラム移行のためのシステムおよび方法を提供することができる。一態様では、システムおよび方法は、たとえば、異なるコンピューティング環境に移行されるコード・フラグメントを識別し、それらのコード・フラグメントをコスト効率の高い方法で移行することによって、コード移行の問題に対処することができる。
システムは、たとえば、1つまたは複数のハードウェア・プロセッサ上で実装されるか、もしくは動作させるか、またはその両方が行われ、あるいは1つまたは複数のハードウェア・プロセッサと結合された、コンピュータ実装コンポーネントを含むことができる。1つまたは複数のハードウェア・プロセッサは、たとえば、本開示で説明するそれぞれのタスクを実施するように構成され得る、プログラマブル・ロジック・デバイス、マイクロコントローラ、メモリ・デバイス、または他のハードウェア・コンポーネント、あるいはそれらの組み合わせなどのコンポーネントを含み得る。結合されたメモリ・デバイスは、1つまたは複数のハードウェア・プロセッサによって実行可能な命令を選択的に記憶するように構成され得る。プロセッサは、中央処理装置(CPU:central processing unit)、グラフィックス・プロセッシング・ユニット(GPU)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、特定用途向け集積回路(ASIC:application specific integrated circuit)、他の適切な処理コンポーネントまたはデバイス、あるいはそれらの1つまたは複数の組み合わせであり得る。プロセッサはメモリ・デバイスに結合され得る。メモリ・デバイスは、ランダム・アクセス・メモリ(RAM:random access memory)、読み取り専用メモリ(ROM:read-only memory)、または他のメモリ・デバイスを含み得、本明細書に記載の方法またはシステムあるいはその両方に関連する様々な機能を実装するためのデータまたはプロセッサ命令あるいはその両方を記憶し得る。プロセッサは、メモリに記憶された、または他のコンピュータ・デバイスもしくは媒体から受け取ったコンピュータ命令を実行し得る。方法は、たとえば、1つまたは複数のプロセッサ上で実装されるまたは動作するコンピュータ実装方法を含むことができる。
一実施形態では、システムまたは方法あるいはその両方は、他のコンピューティング環境へのプログラム・コンテキストの移行を可能にするために、チェックポイントが保存され得るコードまたはプログラムの1つまたは複数の部分を識別することができる。たとえば、システムは、インタラクティブ・コンピューティング・ノートブックまたはドキュメント内のコードの1つまたは複数の部分を識別し得る。そのようなインタラクティブ・コンピューティング・ノートブックの例には、Jupyter NotebookおよびWolfram Notebookを含めることができるが、これらに限定されない。例として、インタラクティブ・コンピューティング・ノートブックまたは同様のものは、コード、モデルの実行、グラフ、追加のドキュメンテーション、たとえば、テキスト、コード、および結果が混在したものであり、コミュニケーションおよび共同制作を促進することができ、たとえばデータ駆動型モデルなどのプログラムを開発するために使用することができる。これらのドキュメントは通常、ユーザのマシンまたはリモート・サーバ上で動作させる。さらに、ドキュメントのセルのフラグメントを複数のプラットフォームまたはマシンで動作させることもできる。一実施形態におけるシステムまたは方法あるいはその両方は、移行されるフラグメントを識別し、コスト効率の高い方法での移行を可能にすることができ、たとえば、コード・パターンの認識およびフラグメントの特徴付けに基づいてプログラム・コンテキストの移行のための(たとえば、専門的なリソースで動作させるための)スイート・スポットを識別することができる。
一実施形態では、コンピュータ・プロセスをリモート・ホストに移行する要求を受信したことに応答して、このシステムまたは方法あるいはその両方は、移行する1つまたは複数のチェックポイントを識別することができる。一実施形態では、このシステムまたは方法あるいはその両方は、どの1つまたは複数のチェックポイントを移行するかを識別するために、以下の側面を考慮し得る。(1)そのチェックポイント・ファイルをリモート・ホストまたは他のプロセッサもしくはマシンに転送するのにかかる時間の推定値(たとえば、これはチェックポイント・ファイル・サイズおよび利用可能なネットワーク帯域幅の関数になり得る)、(2)チェックポイントMから最後のチェックポイントNまで実行をリプレイするためのシステム・リソースの予想消費量、(3)計算コストが高いコード部分(たとえば、関数)を識別するためのソース・コード・パターンの認識、(4)各フラグメントとのユーザ・インタラクティビティの分析、(5)プログラム・コンテキストを移行し、プログラムの一部を再実行するための計算コスト。
一実施形態では、このシステムまたは方法あるいはその両方は、ユーザがプログラム・コンテキストの移行を把握および承認することができるように、移行コストに関するデータを表示または提示するようソース・コード・ドキュメントを変換することもできる。このシステムおよび方法は、たとえば、複数の環境(たとえば、GPUを有する専門的なリソースおよびCPUを有する標準的な環境)で実行することができる、1つまたは複数のプロセッサ上で動作するコンピュータ・タスクの時間およびリソース消費量を削減するという利益または利点を提供することができる。
図1は、一実施形態におけるプログラム・コンテキストの移行のためのシステムのコンポーネントを示す図である。ユーザ102は、たとえばインタラクティブ・コンピューティング・ノートブックまたは他のプログラミング・ツールを使用してコードまたはプログラムを開発する際にユーザ・デバイス104とインタラクションを行うことができる開発者または他のユーザとすることができる。ユーザ・デバイス104は、ユーザ102がインタラクションを行うことができる任意のコンピューティング・デバイス、たとえば、ラップトップ、デスクトップ、モバイル・デバイス、たとえば、スマートフォン、タブレット、または他のデバイス、あるいはそれらの組み合わせとすることができる。コンピューティング・インフラストラクチャ106は、本明細書に記載の機能をホストすることができる、たとえば、プログラム移行のためのソリューションを提供し、ユーザ・プログラムを動作させることができる、コンピューティング・リソースのグループを含むことができる。たとえば、プログラムの1つまたは複数のロードされた部分は、1つのコンピューティング・インフラストラクチャ106上で動作し得、そのプログラムの1つまたは複数の他の部分は、プログラム全体をより効率的に動作させるために、他のコンピューティング・インフラストラクチャに移行され得る。プログラム・コンテキストの移行のためのソリューションまたは方法論、およびユーザ・プログラムは、同じまたは異なるコンピューティング・インフラストラクチャ上で実行することができる。コンピューティング・インフラストラクチャ106は、クラウド環境またはスーパーコンピュータあるいはその両方とすることができる。一実施形態では、コンピューティング・インフラストラクチャ106は、ユーザ・デバイス104を含むこともできる。たとえば、ユーザ・プログラムは、ユーザ・デバイス104またはコンピューティング・インフラストラクチャ106あるいはその両方で動作することができる。
インタラクティブ・コンピューティング・ノートブックまたは他のプログラミング・ツールなどのための、プログラム・コンテキストの移行のためのスイート・スポットを識別するための機能またはモジュールは、フラグメントおよびインタラクティビティ特徴付け器108、チェックポイント・スポット識別器110、コンテキスト移行管理器112、ならびにソース・コード・ドキュメント修正器114を含むことができる。フラグメントおよびインタラクティビティ特徴付け器108は、フラグメントのコード・パターンおよびインタラクティビティのレベルを把握する役割を担うことができる。チェックポイント・スポット識別器110は、プログラム・コンテキストの移行に備えてチェックポイントを保存するための適切なスポットを把握する役割を担うことができる。コンテキスト移行管理器112は、コンテキストを異なるコンピューティング・インフラストラクチャ(または同様のものであるが異なるコンピューティング・リソースを有するもの)に移行する役割を担うことができる。ソース・コード・ドキュメント修正器114は、たとえば、ユーザが異なる環境へのコンテキストの移行を認識および承認することができるように、ユーザのソース・コード・ドキュメントを修正する役割を担うことができる。
このシステムは、インタラクティブ・コンピューティング・ノートブックなどのコード・ドキュメント内のコード・パターンの認識およびフラグメントの特徴付けに基づいて、専門的なリソースなどの他のコンピュータで実行されるプログラムの移行のためのスポットを識別することができる。このシステムは、ソース・コード・パターンを認識して、移行の候補となる1つまたは複数のコード部分(たとえば、関数)、たとえば、計算コストが高い部分または頻繁なインタラクティビティを有する部分を識別することができる。たとえば、このシステムは、抽象構文木、深層学習、および機械学習、たとえば、K近傍法、カーネル回帰、線形回帰、または他の技術、あるいはそれらの組み合わせなどの技術を利用して、専門的なリソースに移行するための候補コード・フラグメントを識別し得る。一実施形態では、候補フラグメントを分類または識別することができる機械学習モデルをトレーニングするための特徴として、既存のコード・ドキュメントからの正規化されたコード実行時間を使用することができる。このシステムはまた、各フラグメントとのユーザ・インタラクティビティ、プログラム・コンテキストを移行し、プログラムの一部を再実行するための計算コストを分析し得る。このシステムはまた、ユーザが移行またはプログラム・コンテキストの移行を実施することを選択できるように、移行コストに関連する情報データまたはメタデータを使用してソース・コード・ドキュメントを変換し得る。
図2は、一実施形態におけるプログラム移行の概観を示す図である。図示したコンポーネントは、ハードウェア・プロセッサなどの1つまたは複数のコンピュータ・プロセッサ上で実装するか、実施するか、または動作させるか、あるいはそれらの組み合わせを行うことができる。この図は、インタラクティブ・コード開発環境またはプラットフォームなどにおけるインタラクティブ・コンピューティングに関するコード・パターンの認識およびフラグメントの特徴付けに基づいて、専門的なリソースなどでプログラムの各部分を実行するための、プログラム・コンテキストの移行のためのスポットの識別を示している。インタラクティブ・ドキュメントまたはプログラミング環境202は、コード行を含むフラグメントまたはセル204、206、208を含むことができる。インタラクティブ・ドキュメント202はコンピュータまたはマシン上で動作し得、フラグメントをロードしてプロセッサ(たとえば、第1のプロセッサと呼ぶ)上で動作させることができる。ユーザ210は、たとえば、コンピュータ・デバイス上のインターフェースまたはユーザ・インターフェース(たとえば、その開発プラットフォームのもの)を介して、コード行をフラグメントまたはセルとしてインタラクティブ・コンピューティング・ノートブックまたは同様のプラットフォームにロードし得る。フラグメント分析器212またはコンピュータ・プロセッサは、ロードされたフラグメント204、206、208の内容を分析して、移行のための1つまたは複数の候補フラグメントを決定する。たとえば、図1の108に示すコンポーネントが、フラグメント分析器212の機能を実施することができる。
一実施形態では、候補フラグメントを選択するために、フラグメント分析器212は、フラグメントの計算集約性(computational intensity)、フラグメントとのユーザ・インタラクティビティ、またはその他のもの、あるいはそれらの組み合わせを考慮し得る。たとえば、特定のコードはより多くの計算を含み得、これには、実行可能な時間または所望の時間内で動作するために、より高い計算能力が必要になり得る。他のフラグメントは、たとえば、繰り返しまたはループなど、ユーザとのより多くのインタラクティビティを含み得、現在のマシン(たとえば、第1のプロセッサ)よりも高い能力またはより多くのリソースを有するマシンで動作させることから恩恵を受け得る。
204、206、208に示すフラグメントは、インタラクティブ・コンピューティング・ノートブックなどのインタラクティブ開発プラットフォームなどにロードされたプログラム内のロードされたフラグメントの例を示している。フラグメント分析器212は、204のフラグメントを分析する。この例示的なフラグメントは、データをロードするまたはデータを処理用に準備するコード行を含む。フラグメント分析器212は、そのようなデータ・ローディングまたはデータ準備処理が、動作させるためにより強力なまたは専門的なマシンを必要としないであろうと判定し、204のフラグメントが現在のマシン(たとえば、第1のプロセッサ)上でローカルに、たとえばCPUで動作させることができると判断し、またはそのように推奨する。フラグメント分析器212はまた、206のフラグメントを分析する。この例示的なフラグメントは、機械学習モデルのトレーニングを実施するコード行を含む。フラグメント分析器212は、機械学習モデルのトレーニング、たとえば、人工ニューラル・ネットワークのトレーニング(たとえば、これには、行列演算またはベクトル演算あるいはその両方、および勾配降下法などの学習方法などを使用した重みの更新を含めることができるが、これらに限定されない)が計算集約的で計算コストが高い可能性があり、より高い能力またはより多くのリソースあるいはその両方を有するマシン、たとえば、GPUもしくはFPGAなどの専門的なプロセッサ、スーパーコンピュータ、または他のマシンで動作させることからから恩恵を受けることができると判定し、206のフラグメントがリモート(または他のマシン)での実行の候補になり得ると判断する。フラグメント分析器212は、このフラグメントを候補としてタグ付けし得る。フラグメント分析器212はさらに、208のフラグメントを分析する。この例示的なフラグメントは、トレーニングされた機械学習モデルを動作させて、たとえば予測を行い、結果もプロットすることを含む。そのようなフラグメントは、試行錯誤ループでの微調整などの繰り返しを含み得る。フラグメント分析器212は、そのようなコードが、より高い計算能力またはより多くのリソースあるいはその両方を有するマシン、たとえば、GPUまたはFPGAなどの専門的なプロセッサ、スーパーコンピュータ、または他のマシンで動作させることから恩恵を受けるであろうと判定する。フラグメント分析器212は、このフラグメントを候補としてタグ付けし得る。
一実施形態では、フラグメント分析器212は、たとえばデータベースまたは他のデータ・ストアに記憶された既存のコードに基づいて、またはこれらを使用して、他のマシンへの移行のための候補フラグメントを決定または選択する。たとえば、データベースは、既存のコードを、計算コストが高いまたは計算集約的なもの、インタラクティブなパターンを有するものなどとして識別またはタグ付けする識別子またはタグと共に記憶し得る。たとえば、データベース214は、モデルのトレーニング、高速フーリエ変換の実施、レイ・トレーシング、またはその他のもの、あるいはそれらの組み合わせのためのコードなど、計算コストが高いと判定された、またはそうであることが分かっているコードまたはコード行を記憶し得る。データベース216は、予測モデルを実行した後にプロットまたは印刷が続くコード、またはその他のもの、あるいはそれらの組み合わせなど、インタラクティブなパターンを有すると判定された、または有することが分かっているコードまたはコード行を記憶し得る。フラグメント分析器212は、データベース214、216内でたとえば204、206、208などの分析中の現在のコードと類似の特徴を有するコードを探し、類似性に基づいて、フラグメントが移行の候補であることを識別し得る。あるコードが他のコードに類似しているか否かは、類似性の閾値に基づいて判定することができる。類似性の判定は、現在のフラグメント内のコード行に関連するメタデータまたは属性を、データベースに記憶されている既存のコードのものと対照または比較することも含むことができる。
他の実施形態では、フラグメントが移行の候補になり得るコードを含むか否かを予測するように機械学習モデルをトレーニングすることができる。たとえば、計算コストが高いと判定された既存のコード(たとえば、これはデータベース214に記憶することができる)の属性は、所与のコードの計算コストが高いか否かを予測または分類するようにニューラル・ネットワーク・モデル、深層学習モデル、または他の機械学習モデル、あるいはそれらの組み合わせをトレーニングする際の特徴として使用することができる。たとえば、現在のコード(または所与のコード)の属性を、そのようなトレーニングされた機械学習モデルを動作させる際の特徴として入力することにより、トレーニングされた機械学習モデルは、所与のコードの計算コストが高いか否かを予測または分類することができる。同様に、インタラクティブなパターンを有すると判定された既存のコード(たとえば、これはデータベース216に記憶することができる)の属性は、所与のコードがインタラクティブなパターンを含むか否かを予測または分類するようにニューラル・ネットワーク・モデル、深層学習モデル、または他の機械学習モデル、あるいはそれらの組み合わせをトレーニングする際の特徴として使用することができる。たとえば、現在のコード(または所与のコード)の属性を、そのようなトレーニングされた機械学習モデルを動作させる際の特徴として入力することにより、トレーニングされた機械学習モデルは、所与のコードがインタラクティブなパターンを有するか否かを予測することができる。他の知られている技術または今後知られるであろう技術を利用して、特定のコード・フラグメントが計算コストが高いコードを含み、またはインタラクティブなパターンを有し、あるいはその両方であるか否かを判定することができる。
1つまたは複数の候補フラグメントを識別したことに基づいて、チェックポイントを保存するためのコードを注入する1つまたは複数の位置を決定することができ、その位置は、たとえば、移行される候補フラグメントの直前とすることができる。例として、図1の110に示すチェックポイント・スポット識別器が、この機能を実施し得る。チェックポインティングによってプログラム実行コンテキストがファイルに保存されるので、そのファイルが移行されるフラグメントと共に転送され、その移行されたフラグメントが移行先のマシン上で動作を継続するようになり得る。
プロセッサは、ロードされたプログラムの1つまたは複数のフラグメントを自動的に修正し得る。たとえば、図1の114に示すソース・コード・ドキュメント修正器が、この機能を実施し得る。たとえば、202に示すインタラクティブ・ドキュメントの1つまたは複数のフラグメントまたはセルは、218ならびに220、222および224に示すように修正することができる。たとえば、プロセッサは、候補フラグメント222の直前で動作するフラグメント220にチェックポイントを保存するためのコードを注入して、移行されるコンポーネントを動作させる前の時点までのプログラムのコンテキストを保存する。
プロセッサは、フラグメント220をさらに修正し、たとえば、チェックポイントのサイズ、そのフラグメントの実行時間、または他の情報、あるいはそれらの組み合わせなどの情報を示すためのコードを注入し得、これはユーザにとって、移行すべきか否か、またはどのフラグメントを移行すべきかを判断または承認する際に有用であり得る。候補フラグメント222、224は、アクティブにすることができるユーザ・インターフェース・アイコンまたは同様のグラフィカル要素226、228を表示するように修正することもできる。グラフィカル要素をアクティブにする(たとえば、グラフィカル・アイコンまたはボタンを押すまたはクリックする)と、フラグメントが他のプロセッサまたはマシン、たとえば、リモート・ホスト230、または他のローカル・マシン(たとえば、第2のプロセッサと呼ぶ)に移行される。図1の112に示すコンテキスト移行管理器が、第1のプロセッサから第2のプロセッサへの移行の機能を実施し得る。リモート・ホスト230は、たとえば、フラグメントが元々にロードされていたマシンよりも高い処理能力またはより多くのリソースを有するスーパーコンピュータまたは他のコンピュータとすることができる。リモート・ホスト230は、たとえばチェックポイントからプログラム・コンテキストを復元し、移行されたフラグメントを実行する。チェックポイントは、移行されたフラグメントを動作させることに基づいて更新することができる。リモート・ホスト230は、更新されたチェックポイントを保存することができる。更新されたチェックポイントをローカル・マシンに返すことができるので、たとえば、ローカル・マシン上で、更新されたチェックポイントを使用して、後続のフラグメントが動作を継続することができる。他の態様では、移行はリモート・マシンへの移行である必要はない。たとえば、フラグメントは、CPUからローカル・マシン上のGPUまたはFPGAなどの特別なプロセッサに移行することができる。
図3は、一実施形態におけるプログラム移行の方法を示す図である。304において、コード・フラグメントのコレクション302がインタラクティブ開発プラットフォームにロードされる。たとえば、ユーザはコード・フラグメントのコレクションをJupyter Notebookなどのインタラクティブ・コンピューティング・ノートブックにロードし得る。一態様では、コード・フラグメントは、単一の連続したコードのブロック(単一の実行セルによって表される)として特徴付けられるか、またはユーザが確立可能ないくつかの基準に従ってより小さい部分(セル)に分割され得る。
一実施形態では、306において、任意のセルを実行するまたは動作させる前に、コード分析器もしくはフラグメント分析器またはコンピュータ・プロセッサは、たとえばプラットフォームにロードされたセルの内容を、計算集約的であることが分かっているコード・フラグメントのデータベース308に照らして検査する。データベース308内で特徴付けられたものと類似したコード・フラグメントを有するセルは、より高い処理能力または他の専門的なリソース、たとえばFPGAまたはGPUなどを有するリモート・ホスト328、あるいは他のプロセッサまたはデバイスで実行するための移行の候補とみなすことができる。312において、フラグメント分析器またはコンピュータ・プロセッサは、移行のための1つまたは複数の候補フラグメントを識別する。フラグメント分析器は、306において、任意の知られている方法または今後知られるであろう方法を利用して、コード・フラグメント間の類似性を決定または計算し得、これには、属性もしくはメタデータの比較、ビットマップの比較、またはその他、あるいはそれらの組み合わせが含まれ得るが、これらに限定されない。類似性は、類似度が類似性閾値を満たすことに基づいて判定することができる。
一実施形態では、データベース308は、過去のまたは既存のコード・フラグメントを含む。たとえば、データベース308は、インタラクティブ・ノートブックまたは同様の開発プラットフォームのパブリック・リポジトリをスキャンし、次のような情報を検索することによって、データを投入することができる。(1)各セルの実行にかかった時間を示すメタデータ、(2)所与のセルがユーザによって実行された回数を示すメタデータ。各セルの実行にかかった時間を示すメタデータは、動作させるのに所定の閾値(たとえば、314に示す)よりも長い時間がかかるコード・フラグメントのパターンを識別するために使用することができる。所与のセルがユーザによって実行された回数を示すメタデータは、「パラメータをチューニングして再度動作させる」種類のループで頻繁に動作し、実行時間が他の閾値(たとえば、316に示す)を超える、コード・フラグメントのパターンを示すことができる。このコンポーネントは、それらのフラグメントとのユーザ・インタラクティビティを評価する。
一実施形態では、この方法は、306などにおけるフラグメント分析のために外部ソースを活用し得る。たとえば、既存のドキュメントを取り出すことができる。ユーザ・ドキュメントは、たとえば抽象構文木(AST:abstract syntax tree)および深層学習などの1つまたは複数の技術を使用して、類似性について既存のドキュメントと比較することができる。類似性インデックスと、たとえばデータセットのサイズおよびリソースの利用可能性に基づいて調整できる類似性の閾値とに基づいて、より近いまたは類似した候補を選択することができる。一実施形態では、ユーザ・ドキュメントのフラグメントの時間は、(i)ASTの特徴をトレーニング・モデルの特徴として使用し、(ii)候補の既存のフラグメントの実行時間を回帰(たとえば、ニューラル・ネット、カーネル回帰、またはその他、あるいはそれらの組み合わせ)のラベルとして使用することによって、推定することができる。この方法は、ユーザとドキュメントとの検出されたインタラクティビティに基づいて、ユーザ・ドキュメント・フラグメントの乗算係数または重みを組み込み得る。
318において、移行のフラグメント候補が識別されると、コンピュータ・プロセッサは、候補フラグメントが実行されるまたは動作する直前にチェックポイントが取得されるように、1つまたは複数のセルにコードを注入する。チェックポインティングは、プロセスの状態、たとえば、ローカル変数およびそれらの値をキャプチャし、その状態(プログラム・コンテキストとも呼ばれる)を保存することを含む。たとえば、状態はチェックポイント・データベース320に保存することができる。一実施形態では、移行用のコードは次のようにして用意することができる。コンピュータ・プロセッサは、データベース320から、注入されるコード、たとえば、状態をチェックポイント・データベース320にコミットするためのコード、およびフラグメント移行を実行するためのコードを取り出し得る。データベース320はまた、フラグメントが実行されるべきリモート・ホスト・アドレスまたは他のプロセッサのアドレスも含み得る。このアドレスも取り出すことができる。データベース320はさらに、コードがどのように注入されるべきか、たとえば、元のコードの前か後か、または元のコードを特定の修正物に置き換えるかについての仕様または指示を含み得る。そのような仕様または指示も取り出すことができる。コード注入は、取り出された情報に従って実施することができる。
322において、コンピュータ・プロセッサまたは移行管理器は、移行のための各フラグメント候補のセルを修飾する。そのような装飾には、(1)リモート・ホストまたは他のプロセッサに転送されるチェックポイントのサイズ、(2)チェックポイントをリモート・ホストに転送するための時間の推定値、(3)そのコード・フラグメントをリモート・ホストまたは他のプロセッサ上で動作させるための時間の推定値、(4)そのコード・フラグメントをローカルで動作させる場合と比較して、リモート・ホスト上で動作させることによって、どれくらい時間が節約されるかという推定値、などが含まれ得るが、これらに限定されない。装飾には、ユーザが移行を許可するか否かをインタラクティブに制御し得るインタラクティブなグラフィカル要素またはアイコン(たとえば、ボタン)も含まれ得、その理由は、たとえば、データ転送およびリモート・リソースの使用に関連するコストが存在し得るためである。
一実施形態では、いくつかの移行の候補を有するプログラムは、チェックポイントが取得される多数のポイントを有し得る。一態様では、プログラムは動作と共にメモリ内により多くのデータを生成する傾向があるので、本当に最初のチェックポイントは、最後のチェックポイントよりもおそらくサイズが小さくなり得る。一実施形態では、322でセル装飾を適用する際に、コンピュータ・プロセッサまたは移行管理器機能によって行われる特定の決定は、ユーザがフラグメントを他の場所で動作させることを選んだ場合に、最後のN個のチェックポイントのうちのいずれをリモート・ホスト(または他のプロセッサ)に移行するかを選ぶことである。一実施形態では、その決定は、各チェックポイントのサイズと、残りのセル(移行されるフラグメントを保持する現在のセルまで)の実行にかかった時間との対比に基づいて行われる。たとえば、セルN-2からチェックポイントをアップロードしてリモート・ホスト上でセルN-1を再計算する方が、N-1ではるかに大きいチェックポイントをアップロードするよりも速い場合がある。たとえば、この場合、セルN-1も移行してリモート・ホストで再度動作させることによって、セルNをリモート・ホストで動作させることができる。
324において、候補フラグメントが移行され、リモート・ホストなどの他のプロセッサ上で実行されるべきか否かが判定される。たとえば、ユーザは、候補フラグメントに関連付けられた装飾(たとえば、グラフィカル要素)をアクティブにして、候補フラグメントが他のプロセッサまたはリモート・ホスト上で動作させるべきであることを示し得る。326において、候補フラグメントが他のプロセッサまたはリモート・ホスト上で動作させるべきであると判定したことに応答して、候補フラグメントは他のプロセッサまたはリモート・ホスト328に移行される。1つまたは複数の基準、たとえば、保存されたチェックポイントを転送する方がコスト効率が高いか否かに基づいて、保存されたチェックポイントも移行され得る。324において、候補フラグメントが他のプロセッサまたはリモート・ホスト上で動作させるべきではないと判定された場合、この方法は戻るかまたは終了し得る。
326において、コンピュータ・プロセッサ上で動作するライブ移行コンポーネントまたは同様の機能が、リモート・ホスト328などの他のプロセッサへの移行を実施する。たとえば、ライブ移行機能を動作させているコンピュータ・プロセッサは、(インタラクティブ・プラットフォームにロードされた)プログラムの実行を一時停止し、データベース320から選択されたチェックポイントおよび候補フラグメントをリモート・ホスト328に移行する。リモート・ホスト328は、候補フラグメントおよびチェックポイント・データを自身のフラグメント・プロセッサ330などにロードし、そのチェックポイントから、そのマシンに移行された候補フラグメント内のコードの最後の行まで実行する。
候補フラグメントがリモート・ホスト328上で動作を完了すると、リモート・ホスト328でキャプチャされたチェックポイント332をチェックポイント・データベース320に転送することができる。たとえば、候補フラグメントには、チェックポイントを保存するためのコードが注入されている場合もある。一実施形態では、移行を開始した元のマシンに信号を送信することができる。たとえば、334において、元のマシンのコンピュータ・プロセッサは、そのチェックポイントを自身のインタラクティブ計算エンジンにロードし、プログラムの実行を再開する。一実施形態では、たとえば、各チェックポイントでの完全なダンプを保存するのではなく、チェックポイント間の増分差分をデータベース320に記憶または保存することができる。このようにして、転送帯域幅およびメモリ・スペースを節約することができる。知られている技術または今後知られるであろう技術を、チェックポイントの保存、またはチェックポイントを記憶する異なる方法、あるいはその両方に利用することができる。
一実施形態では、本明細書に開示する方法論は、インタラクティブ・コンピューティング・ノートブックなどのインタラクティブ・プラットフォームに追加されるアドオン、フック、またはサービスとして実装することができる。一実施形態では、インタラクティブ・プラットフォームは、インターネットなどのネットワーク経由で、ワールド・ワイド・ウェブ(ウェブ)ブラウザなどのブラウザを介してアクセスすることができる。以下にユース・ケースを例として説明する。インタラクティブ・コンピューティング・ノートブックは、コンピュータ・プロセスまたはプログラムを動作させるために利用可能ないくつかの処理マシンを有し得る。例として、インタラクティブ・コンピューティング・ノートブックがプログラムを動作させるために利用可能なリソースとしてCPUおよびGPUが存在する場合を考える。ユーザは、プログラムのフラグメントまたはセルをインタラクティブ・コンピューティング・ノートブックにロードし得る。最初に全てのフラグメントがCPU上で動作するためにロードされる場合を考える。本明細書で開示する方法論は、フラグメントを分析し、どのフラグメントがGPU上で動作すること、たとえば、動作するためにCPUからGPUに移行することから恩恵を受けることになるかを決定することができる。たとえば、この方法論は、コンテキスト認識(context-awareness)に基づいて、特定のフラグメントまたはセルに適したコンピューティング環境(たとえば、この例ではCPUまたはGPU)を決定することができる。次いで、この方法論は、適切な環境へのコード・フラグメントのコンテキスト移行を実施し、そこに計算をシームレスにディスパッチすることができる。
この例示的なユース・ケースでは、ユーザは、インタラクティブ・コンピューティング・ノートブックを使用して、たとえば、1つまたは複数のフラグメントまたはセルとして、コードの記述または開発を開始し得る。セルはまだ動作させておらず、リソースはアイドル状態であり得る。最初のセルが実行を開始し、CPUなどのプロセッサが使用され、その理由は、たとえば、CPUがこのセルを動作させるのに適切なリソースであるとこの方法論が判定したためである。最初のセルが実行を終了する。この方法論は、このセルでCPUが使用された理由の説明をユーザに送信し得る。たとえば、この方法論は、このセルがデータ準備コードを有しており、利用可能なリソースの中で、CPUがこのタイプのタスクを動作させるのに適していることをユーザに提示し得る。この方法論は、次のセルが他のより強力なリソースで動作するのに適している(たとえば、次のセルが機械学習モデルをトレーニングするためのコードを含む)と判定したことに基づいて、CPUからGPUなどの他の利用可能なコンピューティング・リソースへのユーザのセッションのライブ・コンテキスト移行をシームレスに実施し得る。ユーザは次のセルを実行しようとしている。この段階では、GPUはアイドル状態である。この段階では、GPUに関連付けられたマシン上で動作しているカーネルは、たとえば、コード・フラグメントのシームレスなライブ・コンテキスト移行により、CPU上で以前に実行されていたユーザ・セッションを既に有している。ユーザは次のセルを実行する。次のセル、たとえば、機械学習モデルのトレーニングが終了する。この方法論は、このセルが実行されたまたは動作した場所およびその理由の説明を提示し得る。たとえば、GPU上での実行時間などのデータ、セルが機械学習またはトレーニング用のコードを含んでいたという説明を、たとえば、インタラクティブ・コンピューティング・ノートブックのユーザ・インターフェースを介して、ユーザに提供することができる。上記の例示的なユース・ケースは、コード移行におけるソースおよびターゲット・マシンまたはプロセッサの例としてCPUおよびGPUを参照して説明しているが、他のタイプのソースおよびターゲット・マシンも本明細書に開示した方法論に適用可能であり得ることを理解されたい。
図4は、一実施形態におけるプログラム移行のための方法を示すフロー図である。この方法は、コンピュータ・プロセッサ上で実装することも、コンピュータ・プロセッサによって動作させることもできる。402において、コード・フラグメントのコレクションが受信される。たとえば、コード・フラグメントを第1のプロセッサ上で動作させるためにインタラクティブ開発プラットフォームにロードすることができる。インタラクティブ開発プラットフォームの一例は、インタラクティブ・コンピューティング・ノートブックとすることができる。
404において、第2のプロセッサへの移行のためのコード・フラグメントのコレクション内の候補フラグメントが決定される。一実施形態では、第2のプロセッサは、第1のプロセッサよりも高い計算能力またはより多くのリソースを有する。一実施形態では、そのような決定は、コード・フラグメントのコレクションを特徴付けることに基づいて行うことができる。コード・フラグメントのコレクションを特徴付けることは、コード・フラグメントのコレクション内の各フラグメントの計算集約度を決定することを含むことができる。一実施形態では、計算集約度は、既知の計算集約的なコード・フラグメントを使用することに基づいて決定することができる。一実施形態では、計算集約度は、既知の計算集約的なコード・フラグメントに基づいてフラグメントの計算集約度を予測するように機械学習モデルをトレーニングすることに基づいて決定することができる。一実施形態では、計算集約度は、コード・フラグメントの動作時間と、コード・フラグメントに関連するインタラクティブなパターンとに基づいて決定することができる。
406において、コード・フラグメントのコレクション内の候補フラグメントの位置に基づいて、たとえばチェックポインティングなど、プログラム・コンテキストを保存するためのコードを注入するためのコード・フラグメントのコレクション内のスポットが識別される。
408において、プログラム・コンテキストを保存するためのコードが識別されたスポットに注入される。識別されたスポットは、候補フラグメントの直前に動作するフラグメント内、たとえば、そのフラグメントの最後とすることができる。このフラグメントはさらに、たとえば、プログラム・コンテキストのサイズ、フラグメントの実行時間など、フラグメントに関するデータまたはメタデータを提示または表示するように修正することができる。一実施形態では、候補フラグメントを修正することもできる。たとえば、候補フラグメントを示すインタラクティブなグラフィカル要素をインタラクティブ開発プラットフォームのユーザ・インターフェース・ウィンドウに追加することができる。インタラクティブなグラフィカル要素は、候補フラグメントを第2のプロセッサ上で動作させるために移行するオプションをユーザに提供することができる。他の例として、候補フラグメントは、より高速なまたはより強力なプロセッサ上で候補フラグメントを動作させることに関連するデータまたはメタデータ、たとえば、節約または計算効率を提示または表示するように修正することもできる。
410において、プログラム・コンテキストを保存するためのコードが第1のプロセッサ上で動作したことに応答して、また、基準に基づいて、プログラム・コンテキストを第2のプロセッサに移行する。基準は、プログラム・コンテキストのサイズを事前定義されたまたは設定可能な閾値と比較することを含むことができる。たとえば、プログラム・コンテキストが大きい場合、大きいサイズのファイルを他のマシンに転送するのは非効率であり得る。他の基準は、プログラム・コンテキストを生成したフラグメントを動作させるための実行時間または処理時間を含むことができる。たとえば、プログラム・コンテキストを第2のプロセッサに転送するコストが、第2のプロセッサ上でフラグメントを実行してそのプログラム・コンテキストを第2のプロセッサ上で生成するよりもコスト効率が低い場合は、プログラム・コンテキストの代わりにフラグメントを移行することができる。一実施形態では、候補フラグメントは、たとえば、第2のプロセッサがそのフラグメントをまだ有していない場合に、第2のプロセッサに移行することもできる。
一実施形態における方法は、候補フラグメントが第2のプロセッサ上で動作したことに応答して生成された更新されたプログラム・コンテキストを第2のプロセッサから受信することを含むこともできる。一実施形態における方法は、第1のプロセッサ上でコード・フラグメントのコレクションの動作を継続することを含むこともできる。
図5は、一実施形態におけるプログラム移行の方法を示す他のフロー図である。この方法は、コンピュータ・プロセッサ上で実装することも、コンピュータ・プロセッサによって動作させることもできる。502において、第1のプロセッサ上で動作させるためにインタラクティブ開発プラットフォームにロードされるコード・フラグメントが受信される。
504において、コード・フラグメントのそれぞれに関連する計算集約度を決定したことに基づいて、コード・フラグメントから第2のプロセッサへの移行のための候補フラグメントが決定される。複数の候補フラグメントが存在し得る。一実施形態では、計算集約度は、コード・フラグメントの動作時間と、コード・フラグメントに関連するインタラクティブなパターンとに基づいて決定することができる。
506において、プログラム・コンテキストを保存するためのコード・フラグメント内のスポットが識別される。複数のスポットが存在し得る。508において、プログラム・コンテキストを保存するためのコンピュータ命令が、識別されたスポットに注入される。510において、プログラム・コンテキストを保存するためのコンピュータ命令が第1のプロセッサ上で動作したことに応答して、この方法は、プログラム・コンテキストを移行すること、またはプログラム・コンテキストを生成したコード・フラグメントを移行することのいずれがよりコスト効率が高いかを判定することを含むことができる。一実施形態では、プログラム・コンテキストを移行すること、またはプログラム・コンテキストを生成したコード・フラグメントを移行することのいずれがよりコスト効率が高いかは、プログラム・コンテキストのサイズと、プログラム・コンテキストを生成したコード・フラグメントを動作させるための処理時間とに基づいて決定することができる。たとえば、プログラム・コンテキストを第2のプロセッサに転送するよりも、プログラム・コンテキストを生成したコード・フラグメントを第2のプロセッサ上で動作させる方がコスト効率が高い場合がある。
512において、プログラム・コンテキストを移行する方がコスト効率が高いと判定したことに応答して、プログラム・コンテキストが第2のプロセッサに移行される。514において、プログラム・コンテキストを生成したコード・フラグメントを移行する方がコスト効率が高いと判定したことに応答して、プログラム・コンテキストを生成したコード・フラグメントが第2のプロセッサに移行され、その結果、たとえば、そのコード・フラグメントを第2のプロセッサ上で動作させることができ、そのコード・フラグメントに続いて、候補フラグメントを第2のプロセッサ上で動作させることができる。この方法はまた、第2のプロセッサが候補フラグメントを動作させるのを待つことと、候補フラグメントを動作させることに関連する更新されたプログラム・コンテキストを受信することと、を含むこともできる。
図6は、プログラム移行を実施することができる、一実施形態におけるシステムのコンポーネントを示す図である。中央処理装置(CPU)、グラフィック・プロセッシング・ユニット(GPU)、および/またはフィールド・プログラマブル・ゲート・アレイ(FPGA)、特定用途向け集積回路(ASIC)、ならびに/あるいは他のプロセッサなどの1つまたは複数のハードウェア・プロセッサ602は、メモリ・デバイス604と結合され、本明細書に記載のプログラム移行を実施し得る。メモリ・デバイス604は、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、または他のメモリ・デバイスを含み得、本明細書に記載の方法またはシステムあるいはその両方に関連する様々な機能を実装するためのデータまたはプロセッサ命令あるいはその両方を記憶し得る。1つまたは複数のプロセッサ602は、メモリ604に記憶された、または他のコンピュータ・デバイスもしくは媒体から受け取ったコンピュータ命令を実行し得る。メモリ・デバイス604は、たとえば、1つまたは複数のハードウェア・プロセッサ602が機能するための命令もしくはデータまたはその両方を記憶し得、オペレーティング・システムと、他の命令プログラムもしくはデータまたはその両方とを含み得る。1つまたは複数のハードウェア・プロセッサ602は、インタラクティブ開発プラットフォーム、たとえばインタラクティブ・コンピューティング・ノートブックにロードされるコード・フラグメントのコレクションを含む入力を受け取り得る。少なくとも1つのハードウェア・プロセッサ602は、GPU、FPGAなどの異なるプロセッサまたは他のプロセッサ、あるいはリモート・ホストなどの異なるホスト・マシン上の他のプロセッサで動作させるために移行するための1つまたは複数の候補フラグメントを決定し得る。異なるプロセッサまたは他のプロセッサは、たとえば、より高い計算能力を有し、現在のプロセッサまたはマシンよりも速く1つまたは複数の候補フラグメントを動作させることができる。少なくとも1つのハードウェア・プロセッサ602は、プログラム・コンテキストを保存するためのコードを注入するための、フラグメントのコレクション内のスポットまたは場所を識別し得る。たとえば、スポットまたは場所は候補フラグメントの直前とすることができる。少なくとも1つのハードウェア・プロセッサ602は、プログラム・コンテキストを保存するためのコードを識別されたスポットに注入し得る。プログラム・コンテキストを保存するためのコードが第1のプロセッサ上で動作したことに応答して、また、たとえば、基準に基づいて、プログラム・コンテキストが第2のプロセッサに移行され得る。第2のプロセッサは、同じマシン上のGPUもしくはFPGAまたは他のデバイスとすることができる。他の態様では、第2のプロセッサは、スーパーコンピュータなどのリモート・ホスト612のプロセッサとすることができる。一態様では、プログラム・コンテキストは、ストレージ・デバイス606に、またはネットワーク・インターフェース608を介して接続されたリモート・デバイス上の他のストレージ・デバイスに記憶され得る。コード・フラグメントは、たとえば、1つまたは複数のハードウェア・プロセッサ602によって動作させるために、メモリ・デバイス604に一時的にロードすることができる。1つまたは複数のハードウェア・プロセッサ602は、ネットワークなどを介してリモート・システムと通信するためのネットワーク・インターフェース608などのインターフェース・デバイスと、キーボード、マウス、ディスプレイ、もしくはその他、またはそれらの組み合わせなどの、入力もしくは出力またはその両方のデバイスと通信するための入力/出力インターフェース610とに結合され得る。
図7に、一実施形態におけるシステムを実装し得る例示的なコンピュータまたは処理システムの概略図を示す。コンピュータ・システムは、適切な処理システムの単なる一例にすぎず、本明細書に記載の方法論の実施形態の使用または機能の範囲に関するいかなる制限も示唆することを意図したものではない。図示した処理システムは、他の多くの汎用または専用のコンピューティング・システム環境または構成で動作し得る。図7に示す処理システムでの使用に適し得るよく知られているコンピューティング・システム、環境、もしくは構成、またはそれらの組み合わせの例には、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドもしくはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサベースのシステム、セット・トップ・ボックス、プログラム可能な家庭用電化製品、ネットワークPC、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、および上記のシステムもしくはデバイスのいずれか含む分散クラウド・コンピューティング環境などが含まれ得るが、これらに限定されない。
コンピュータ・システムは、コンピュータ・システムが動作させるプログラム・モジュールなどのコンピュータ・システム実行可能命令の一般的なコンテキストで記述され得る。一般に、プログラム・モジュールは、特定のタスクを実施するかまたは特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造などを含み得る。コンピュータ・システムは、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実施される分散型クラウド・コンピューティング環境で実践され得る。分散型クラウド・コンピューティング環境では、プログラム・モジュールは、メモリ・ストレージ・デバイスを含むローカルおよびリモート両方のコンピュータ・システム記憶媒体に配置され得る。
コンピュータ・システムのコンポーネントは、1つまたは複数のプロセッサまたは処理ユニット12と、システム・メモリ16と、システム・メモリ16を含む様々なシステム・コンポーネントをプロセッサ12に結合するバス14と、を含み得るが、これらに限定されない。プロセッサ12は、本明細書に記載の方法を実施するモジュール30を含み得る。モジュール30は、プロセッサ12の集積回路にプログラムされ得、あるいはメモリ16、ストレージ・デバイス18、もしくはネットワーク24、またはそれらの組み合わせからロードされ得る。
バス14は、メモリバスまたはメモリ・コントローラ、ペリフェラル・バス、アクセラレーテッド・グラフィックス・ポート、および様々なバス・アーキテクチャのいずれかを使用するプロセッサまたはローカル・バスを含む、いくつかのタイプのバス構造のうちのいずれかの1つまたは複数を表し得る。限定ではなく例として、そのようなアーキテクチャには、業界標準アーキテクチャ(ISA:Industry Standard Architecture)バス、マイクロ・チャンネル・アーキテクチャ(MCA:Micro Channel Architecture)バス、拡張ISA(EISA:Enhanced ISA)バス、ビデオ・エレクトロニクス規格協会(VESA:Video Electronics Standards Association)ローカル・バス、および周辺機器相互接続(PCI:Peripheral Component Interconnects)バスが含まれる。
コンピュータ・システムは、様々なコンピュータ・システム可読媒体を含み得る。そのような媒体は、コンピュータ・システムによってアクセス可能な任意の利用可能な媒体であり得、揮発性および不揮発性の媒体、取り外し可能および取り外し不可能な媒体の両方を含み得る。
システム・メモリ16は、ランダム・アクセス・メモリ(RAM)および/またはキャッシュ・メモリもしくはその他などの、揮発性メモリの形態のコンピュータ・システム可読媒体を含むことができる。コンピュータ・システムは、他の取り外し可能/取り外し不可能な、揮発性/不揮発性のコンピュータ・システム記憶媒体をさらに含み得る。単なる例として、ストレージ・システム18は、取り外し不可能な不揮発性の磁気媒体(たとえば、「ハードドライブ」)に読み書きするために設けることができる。図示していないが、取り外し可能な不揮発性の磁気ディスク(たとえば、「フレキシブル・ディスク」)に読み書きするための磁気ディスク・ドライブと、CD-ROM、DVD-ROM、または他の光学メディアなどの取り外し可能な不揮発性の光学ディスクに読み書きするための光学ディスク・ドライブと、を設けることができる。そのような例では、それぞれを、1つまたは複数のデータ・メディア・インターフェースによってバス14に接続することができる。
コンピュータ・システムはまた、キーボード、ポインティング・デバイス、ディスプレイ28などの1つまたは複数の外部デバイス26、ユーザがコンピュータ・システムとやりとりすることを可能にする1つまたは複数のデバイス、またはコンピュータ・システムが1つまたは複数の他のコンピューティング・デバイスと通信することを可能にする任意のデバイス(たとえば、ネットワーク・カード、モデムなど)、あるいはそれらの組み合わせと通信し得る。そのような通信は、入力/出力(I/O:Input/Output)インターフェース20を介して行うことができる。
またさらに、コンピュータ・システムは、ネットワーク・アダプタ22を介して、ローカル・エリア・ネットワーク(LAN:local area network)、一般的なワイド・エリア・ネットワーク(WAN:wide area network)、もしくはパブリック・ネットワーク(たとえば、インターネット)、またはそれらの組み合わせなどの、1つまたは複数のネットワーク24と通信することができる。図示のように、ネットワーク・アダプタ22は、バス14を介してコンピュータ・システムの他のコンポーネントと通信する。図示していないが、他のハードウェアもしくはソフトウェアまたはその両方のコンポーネントを、コンピュータ・システムと併用できることを理解されたい。例には、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部ディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システムなどが含まれるが、これらに限定されない。
本開示はクラウド・コンピューティングに関する詳細な説明を含み得るが、本明細書に列挙した教示の実装形態はクラウド・コンピューティング環境に限定されないことを事前に理解されたい。むしろ、本発明の実施形態は、現在知られているまたは今後開発される他の任意のタイプのコンピューティング環境と共に実装することが可能である。クラウド・コンピューティングは、最小限の管理労力またはサービスのプロバイダとのやりとりによって迅速にプロビジョニングおよび解放することができる、設定可能なコンピューティング・リソース(たとえば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、およびサービス)の共有プールへの便利なオンデマンドのネットワーク・アクセスを可能にするためのサービス配信のモデルである。このクラウド・モデルは、少なくとも5つの特徴と、少なくとも3つのサービス・モデルと、少なくとも4つのデプロイメント・モデルとを含み得る。
特徴は以下の通りである。
オンデマンド・セルフ・サービス:クラウド・コンシューマは、サービスのプロバイダとの人的な対話を必要とせずに、必要に応じて自動的に、サーバ時間およびネットワーク・ストレージなどのコンピューティング能力を一方的にプロビジョニングすることができる。
ブロード・ネットワーク・アクセス:能力はネットワークを介して利用することができ、異種のシンまたはシック・クライアント・プラットフォーム(たとえば、携帯電話、ラップトップ、およびPDA)による使用を促進する標準的なメカニズムを介してアクセスされる。
リソース・プーリング:プロバイダのコンピューティング・リソースをプールして、様々な物理リソースおよび仮想リソースが需要に応じて動的に割り当ておよび再割り当てされるマルチ・テナント・モデルを使用して複数のコンシューマにサービス提供する。一般にコンシューマは、提供されるリソースの正確な位置に対して何もできず、知っているわけでもないが、より高い抽象化レベル(たとえば、国、州、またはデータセンターなど)では位置を特定可能であり得るという点で位置非依存の感覚がある。
迅速な弾力性:能力を迅速かつ弾力的に、場合によっては自動的にプロビジョニングして素早くスケール・アウトし、迅速に解放して素早くスケール・インすることができる。コンシューマにとって、プロビジョニング可能な能力は無制限であるように見えることが多く、任意の時間に任意の数量で購入することができる。
測定されるサービス:クラウド・システムは、サービスのタイプ(たとえば、ストレージ、処理、帯域幅、およびアクティブ・ユーザ・アカウント)に適したある抽象化レベルでの計量機能を活用して、リソースの使用を自動的に制御し、最適化する。リソース使用量を監視、管理、および報告して、利用されるサービスのプロバイダおよびコンシューマの両方に透明性を提供することができる。
サービス・モデルは以下の通りである。
ソフトウェア・アズ・ア・サービス(SaaS:Software as a Service):コンシューマに提供される能力は、クラウド・インフラストラクチャ上で動作するプロバイダのアプリケーションを使用することである。アプリケーションは、Webブラウザ(たとえば、Webベースの電子メール)などのシン・クライアント・インターフェースを介して様々なクライアント・デバイスからアクセス可能である。コンシューマは、限定されたユーザ固有のアプリケーション構成設定を可能性のある例外として、ネットワーク、サーバ、オペレーティング・システム、ストレージ、さらには個々のアプリケーション機能を含む、基盤となるクラウド・インフラストラクチャを管理も制御もしない。
プラットフォーム・アズ・ア・サービス(PaaS:Platform as a Service):コンシューマに提供される能力は、プロバイダによってサポートされるプログラミング言語およびツールを使用して作成された、コンシューマが作成または取得したアプリケーションをクラウド・インフラストラクチャ上にデプロイすることである。コンシューマは、ネットワーク、サーバ、オペレーティング・システム、またはストレージを含む、基盤となるクラウド・インフラストラクチャを管理も制御もしないが、デプロイされたアプリケーションおよび場合によってはアプリケーション・ホスティング環境構成を制御する。
インフラストラクチャ・アズ・ア・サービス(IaaS:Infrastructure as a Service):コンシューマに提供される能力は、オペレーティング・システムおよびアプリケーションを含むことができる任意のソフトウェアをコンシューマがデプロイして動作させることが可能な、処理、ストレージ、ネットワーク、および他の基本的なコンピューティング・リソースをプロビジョニングすることである。コンシューマは、基盤となるクラウド・インフラストラクチャを管理も制御もしないが、オペレーティング・システム、ストレージ、デプロイされたアプリケーションを制御し、場合によっては選択したネットワーキング・コンポーネント(たとえば、ホスト・ファイアウォール)を限定的に制御する。
デプロイメント・モデルは以下の通りである。
プライベート・クラウド:クラウド・インフラストラクチャは組織専用に運用される。これは組織または第三者によって管理され得、構内または構外に存在し得る。
コミュニティ・クラウド:クラウド・インフラストラクチャはいくつかの組織によって共有され、共通の懸念(たとえば、ミッション、セキュリティ要件、ポリシー、およびコンプライアンスの考慮事項など)を有する特定のコミュニティをサポートする。これは組織または第三者によって管理され得、構内または構外に存在し得る。
パブリック・クラウド:クラウド・インフラストラクチャは、一般大衆または大規模な業界団体に対して利用可能にされ、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド:クラウド・インフラストラクチャは、固有のエンティティのままであるが、データおよびアプリケーションの移植性を可能にする標準化技術または独自技術(たとえば、クラウド間の負荷分散のためのクラウド・バースティング)によって結合された2つ以上のクラウド(プライベート、コミュニティ、またはパブリック)を合成したものである。
クラウド・コンピューティング環境は、ステートレス性、低結合性、モジュール性、および意味論的相互運用性に重点を置いたサービス指向型である。クラウド・コンピューティングの中核にあるのは、相互接続されたノードのネットワークを含むインフラストラクチャである。
ここで図8を参照すると、例示的なクラウド・コンピューティング環境50が示されている。図示のように、クラウド・コンピューティング環境50は1つまたは複数のクラウド・コンピューティング・ノード10を含み、これらを使用して、たとえば、パーソナル・デジタル・アシスタント(PDA:personal digital assistant)もしくは携帯電話54A、デスクトップ・コンピュータ54B、ラップトップ・コンピュータ54C、または自動車コンピュータ・システム54N、あるいはそれらの組み合わせなどの、クラウド・コンシューマによって使用されるローカル・コンピューティング・デバイスが通信し得る。ノード10は相互に通信し得る。これらは、たとえば、上述のプライベート、コミュニティ、パブリック、もしくはハイブリッド・クラウド、またはそれらの組み合わせなどの1つまたは複数のネットワークにおいて、物理的または仮想的にグループ化され得る(図示せず)。これにより、クラウド・コンピューティング環境50は、クラウド・コンシューマがローカル・コンピューティング・デバイス上にリソースを維持する必要がない、インフラストラクチャ・アズ・ア・サービス、プラットフォーム・アズ・ア・サービス、またはソフトウェア・アズ・ア・サービス、あるいはそれらの組み合わせを提供することが可能になる。図8に示したコンピューティング・デバイス54A~Nのタイプは例示的なものにすぎないことを意図しており、コンピューティング・ノード10およびクラウド・コンピューティング環境50は、任意のタイプのネットワークまたはネットワーク・アドレス指定可能接続(たとえば、Webブラウザを使用)あるいはその両方を介して任意のタイプのコンピュータ化デバイスと通信できることを理解されたい。
ここで図9を参照すると、クラウド・コンピューティング環境50(図8)によって提供される機能的抽象化レイヤのセットが示されている。図9に示したコンポーネント、レイヤ、および機能は例示的なものにすぎないことを意図しており、本発明の実施形態はこれらに限定されないことを事前に理解されたい。図示のように、以下のレイヤおよび対応する機能が提供される。
ハードウェアおよびソフトウェア・レイヤ60は、ハードウェア・コンポーネントおよびソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例には、メインフレーム61、RISC(縮小命令セット・コンピュータ:Reduced Instruction Set Computer)アーキテクチャ・ベースのサーバ62、サーバ63、ブレード・サーバ64、ストレージ・デバイス65、ならびにネットワークおよびネットワーキング・コンポーネント66が含まれる。いくつかの実施形態では、ソフトウェア・コンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア67およびデータベース・ソフトウェア68を含む。
仮想化レイヤ70は抽象化レイヤを提供し、抽象化レイヤから、仮想エンティティの以下の例、すなわち、仮想サーバ71、仮想ストレージ72、仮想プライベート・ネットワークを含む仮想ネットワーク73、仮想アプリケーションおよびオペレーティング・システム74、ならびに仮想クライアント75が提供され得る。
一例では、管理レイヤ80は、下記の機能を提供し得る。リソース・プロビジョニング81は、クラウド・コンピューティング環境内でタスクを実施するために利用されるコンピューティング・リソースおよび他のリソースの動的調達を提供する。計量および価格決定82は、クラウド・コンピューティング環境内でリソースが利用されたときの費用追跡と、これらのリソースの消費に対する会計または請求とを提供する。一例では、これらのリソースはアプリケーション・ソフトウェア・ライセンスを含み得る。セキュリティは、クラウド・コンシューマおよびタスクの同一性検証だけでなく、データおよび他のリソースに対する保護も提供する。ユーザ・ポータル83は、コンシューマおよびシステム管理者にクラウド・コンピューティング環境へのアクセスを提供する。サービス・レベル管理84は、要求されたサービス・レベルが満たされるような、クラウド・コンピューティング・リソースの割り当ておよび管理を提供する。サービス・レベル合意(SLA:Service Level Agreement)の計画および履行85は、SLAに従って将来要求されると予想されるクラウド・コンピューティング・リソースの事前手配および調達を提供する。
ワークロード・レイヤ90は、クラウド・コンピューティング環境が利用され得る機能性の例を提供する。このレイヤから提供され得るワークロードおよび機能の例は、マッピングおよびナビゲーション91、ソフトウェア開発およびライフサイクル管理92、仮想教室教育配信93、データ分析処理94、取引処理95、ならびにプログラム移行処理96を含む。
本発明は、任意の可能な技術的詳細レベルの統合におけるシステム、方法、またはコンピュータ・プログラム製品、あるいはそれらの組み合わせであり得る。コンピュータ・プログラム製品は、本発明の態様をプロセッサに実践させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読記憶媒体(または複数の媒体)を含み得る。
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のために命令を保持および記憶可能な有形のデバイスとすることができる。コンピュータ可読記憶媒体は、たとえば、限定はしないが、電子ストレージ・デバイス、磁気ストレージ・デバイス、光学ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであり得る。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストには、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、消去可能プログラム可能読み取り専用メモリ(EPROM:erasable programmable read-only memoryまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM:static random access memory)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD-ROM:compact disc read-only memory)、デジタル・バーサタイル・ディスク(DVD:digital versatile disk)、メモリー・スティック(R)、フレキシブル・ディスク、命令が記録されたパンチ・カードまたは溝の隆起構造などの機械的にコード化されたデバイス、およびこれらの任意の適切な組み合わせが含まれる。コンピュータ可読記憶媒体は、本明細書で使用する場合、たとえば、電波または他の自由に伝搬する電磁波、導波管もしくは他の伝送媒体を伝搬する電磁波(たとえば、光ファイバ・ケーブルを通過する光パルス)、または有線で伝送される電気信号などの一過性の信号自体であると解釈されるべきではない。
本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、あるいは、たとえば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくは無線ネットワーク、またはそれらの組み合わせなどのネットワークを介して外部コンピュータまたは外部ストレージ・デバイスにダウンロードすることができる。ネットワークは、銅線伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはそれらの組み合わせを含み得る。各コンピューティング/処理デバイスのネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、コンピュータ可読プログラム命令を転送して、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体に記憶する。
本発明の動作を実践するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA:instruction-set-architecture)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路の構成データ、あるいは、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または類似のプログラミング言語などの手続き型プログラミング言語を含む、1つまたは複数のプログラミング言語の任意の組み合わせで書かれたソース・コードまたはオブジェクト・コードであり得る。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロン・ソフトウェア・パッケージとして、部分的にユーザのコンピュータ上かつ部分的にリモート・コンピュータ上で、あるいは完全にリモート・コンピュータまたはサーバ上で実行され得る。最後のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)またはワイド・エリア・ネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続され得、または(たとえば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータへの接続がなされ得る。いくつかの実施形態では、たとえば、プログラマブル・ロジック回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA:programmable logic array)を含む電子回路は、本発明の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用してコンピュータ可読プログラム命令を実行することによって、電子回路を個人向けにし得る。
本発明の態様は、本発明の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して本明細書で説明している。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方におけるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装できることは理解されよう。
これらのコンピュータ可読プログラム命令を、コンピュータまたは他のプログラム可能データ処理装置のプロセッサに提供して、それらの命令がコンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行された場合に、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定された機能/行為を実装するための手段が生成されるようなマシンを生成し得る。また、これらのコンピュータ可読プログラム命令を、コンピュータ、プログラム可能データ処理装置、または他のデバイス、あるいはそれらの組み合わせに特定の方法で機能するように指示することが可能なコンピュータ可読記憶媒体に記憶して、命令が記憶されたコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定された機能/行為の態様を実装する命令を含む製造品を構成するようにし得る。
また、コンピュータ可読プログラム命令をコンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードして、コンピュータ、他のプログラム可能装置、または他のデバイス上で一連の動作ステップを実施させることによって、それらの命令がコンピュータ、他のプログラム可能装置、または他のデバイス上で実行された場合に、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定された機能/行為が実装されるようなコンピュータ実装処理を生成し得る。
図中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、機能、および動作を示している。これに関して、フローチャートまたはブロック図の各ブロックは、指定された論理的機能(複数可)を実装するための1つまたは複数の実行可能命令を含むモジュール、セグメント、または命令の一部を表し得る。いくつかの代替的実装形態では、ブロックに記載した機能は、図示した順序以外で行われ得る。たとえば、関与する機能に応じて、連続して示した2つのブロックは、実際には、1つのステップとして実現され得、同時に、実質的に同時に、部分的にまたは完全に時間的に重なるように動作させられ得、またはそれらのブロックは、場合により逆の順序で動作させられ得る。ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組み合わせは、指定された機能もしくは行為を実施するか、または専用ハードウェアおよびコンピュータ命令の組み合わせを実践する専用のハードウェア・ベースのシステムによって実装できることにも気付くであろう。
本明細書で使用する用語は、特定の実施形態を説明するためのものにすぎず、本発明を限定するものではない。本明細書で使用する場合、単数形「a」、「an」および「the」は、文脈が別段の指示をしない限り、複数形も含むものとする。本明細書で使用する場合、「または(or)」という用語は包括的な演算子(inclusive operator)であり、文脈が明示的にまたは明確に別段の指示をしない限り、「および/または(and/or)」を意味することができる。本明細書で使用する場合、用語「備える(comprise)」、「備える(comprises)」、「備える(comprising)」、「含む(include)」、「含む(includes)」、「含む(including)」、または「有する(having)」、あるいはそれらの組み合わせは、記述した特徴、整数、ステップ、動作、要素、または構成要素、あるいはそれらの組み合わせの存在を示し得るが、1つまたは複数の他の特徴、整数、ステップ、動作、要素、構成要素、またはそれらのグループ、あるいはそれらの組み合わせの存在または追加を排除するものではないということはさらに理解されよう。本明細書で使用する場合、「一実施形態では(in an embodiment)」という語句は、必ずしも同じ実施形態を指すとは限らないが、そうである場合もある。本明細書で使用する場合、「一実施形態では(in one embodiment)」という語句は、必ずしも同じ実施形態を指すとは限らないが、そうである場合もある。本明細書で使用する場合、「他の実施形態では(in another embodiment)」という語句は、必ずしも異なる実施形態を指すとは限らないが、そうである場合もある。さらに、実施形態または実施形態の構成要素あるいはその両方は、相互に排他的でない限り、互いに自由に組み合わせることができる。
もしあれば、以下の特許請求の範囲における全てのミーンズまたはステップ・プラス・ファンクション要素の対応する構造、材料、行為、および均等物は、明確に特許請求した他の特許請求要素と組み合わせて機能を実施するための任意の構造、材料、または行為を含むものとする。本発明の説明は、例示および説明の目的で提示しているが、網羅的であることも、開示した形態の発明に限定されることも意図したものではない。本発明の範囲から逸脱することなく、多くの修正および変形が当業者には明らかであろう。本発明の原理および実際の応用を最もよく説明し、企図した特定の用途に適した様々な修正を有する様々な実施形態について本発明を当業者が理解できるようにするために、実施形態を選び、説明している。