高度な利用方法

レスポンスデータから取得できる情報を活用することで、Amplify AE の利用をより効果的に行えます。このセクションでは Amplify AE の高度な利用方法について説明します。

実行時間情報の取得

Amplify AE はユーザからの求解のリクエストを受け取った後に以下のステップで実行し結果を返却します。

  1. リクエストデータの解析

    • ユーザからの求解リクエストを解析し、JSON データから必要な情報を抽出します

  2. リソースの割り当て

    • ユーザが使用可能な GPU リソースを予約し計算に必要な環境を準備します

  3. GPU による求解

    • シミュレーテッドアニーリング法に基づく最適化アルゴリズムを実行します

  4. 結果の解析と返却

    • 計算結果をホストメモリに転送し、最適解や目的関数・制約条件の評価結果を返却します

上の右図は、Amplify SDK が想定するソルバーの実行時間に関する模式図です。Amplify AE はこの図に即した動作を行います。

"Receive Request" から "Start Execution" までの時間は、上のステップにおける 1 と 2 の処理時間に相当します。"Start Execution" から "End Execution" までの時間は 3 に相当し、"End Execution" から "Send Response" までの時間は、4 に対応します。

リクエストデータに含まれる time_limit_ms パラメータは 3 の時間を指定するものですが、完全に一致させることは難しく、指定時間を少し超過することがあります。そのため、実際の処理時間については レスポンスデータの execution_time_ms フィールドに記録されます。また、ステップ 2 の待ち時間はレスポンスデータの queue_time_ms フィールドで取得できます。

レスポンスデータに含まれる時刻情報を以下にまとめます。

execution_time_ms

GPU の求解時間 (ms 単位)

queue_time_ms

リソース割当キュー (ステップ2) の待ち時間 (ms 単位)

submitted_at

リクエストを受け取った時刻 ("Receive Request" の時刻)

started_at

GPU 処理を開始した時刻 (ステップ3開始時刻)

参考

Amplify SDK による時刻情報の取得については クライアントのページ を参照してください。

ステップ 4 の "Start Execution" から "End Execution" までの間、Amplify AE は最適化アルゴリズムを実行し、最良解が更新される度に得られた解とその実行時間を記録します。これにより、探索中の解の履歴がユーザに返却されます。それぞれの解の取得時刻は solutions フィールド内の配列要素における time_stamp_ms フィールドに記録されます。この時刻はステップ3開始時刻 (started_at) からの経過時間を表します。これらの情報を用いる事で、ユーザは探索の進行状況の履歴を把握できます。Amplify SDK を用いた実行時間に関する解析の例は 実行時間情報の取得 を参照してください。

求解情報の取得

上記の求解における "Execution Time" の時間の間に、Amplify AE がどの程度の求解のイテレーションを実行したのかについて、レスポンスデータに詳細な情報が記録されます。

Amplify AE は求解フェーズにおいて、指定された数の GPU を用いてアニーリング法に基づき、現在の状態 (変数の値の組み合わせ) から次の状態を作成します。この操作を「フリップ」と呼びます。GPU は求解の状況に応じて決められた数のフリップを行い、その間に得られた最良解を CPU に返します。ここではこれを「サンプリング」と呼びます。もしサンプリングで得られた解が前回の最良解よりも良い場合は既知の最良解を更新します。この一連の操作を指定された時間に達するまで行い、ユーザに解の更新履歴として結果を返します。

上記の求解処理において、Amplify AE は次の情報をレスポンスデータに記録します。

num_gpus

求解に使用した GPU 数

num_flips

実行結果を返却するまでに試行した全 GPU の合計フリップ数

num_samplings

実行結果を返却するまでに得られた解の数 (サンプリング数)

version

Amplify AE のバージョンと GPU の名前

参考

Amplify SDK による求解情報の取得については クライアントのページ を参照してください。

重複解の取得

同じ目的関数の値を持つ解が複数存在する場合、デフォルトでは Amplify AE は最初に見つけた解のみを記録します。これは、既知の最良解を更新するプロセスが、より良い解が見つかった場合にのみ更新されるためです。

この動作を変更し発見したすべての重複解を取得したい場合、リクエストデータの duplicate_solutions パラメータを true に設定します。これにより、変数の組み合わせが異なるが目的関数の値が同じ解もすべて記録され、レスポンスデータの solutions フィールドに含まれる配列に返却されます。

注釈

必ずしも全ての重複解を取得できるわけではないことに注意してください。Amplify AE の探索アルゴリズムは確率的であり、同じ目的関数の値を持つ解が複数存在する場合でも、全ての解を見つけることが保証されているわけではありません。

参考

Amplify SDK による重複解の取得については クライアントのページ を参照してください。