{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "3fdd7eec-a38a-4835-9fbc-9e15b09c17d2",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"ワークロード使用量\"\n",
        "description: \"使用量とは何か、およびプリミティブを使用するジョブの実行にかかる時間を推定する方法を説明します\"\n",
        "---\n",
        "\n",
        "<span id=\"workload-usage\" />\n",
        "\n",
        "# ワークロード使用量\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "720c96d9-4903-4eea-ae7a-19c34208150b",
      "metadata": {
        "tags": [
          "version-info"
        ]
      },
      "source": [
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "46a0a6e0-dee7-4ac9-91b2-399e7a51623f",
      "metadata": {},
      "source": [
        "<span id=\"usage\" />\n",
        "\n",
        "使用量は、 IBM Quantum Compute Serviceの利用量を表し、ワークロードを実行するためにQPUがロックされている時間によって決定されます。\n",
        "\n",
        "* セッションの使用時間は、セッションがアクティブな状態にある間の経過時間として測定されます。これは、ワークロードが実際に実行されているかどうかに関わらず、セッションの期間中はQPUの容量が確保されるためです。 [セッション](/docs/guides/run-jobs-session#session-length)の状態遷移に関する詳細については、「セッションの継続時間」を参照してください。\n",
        "* バッチの使用時間は、バッチ内のすべてのジョブを実行するためにQPUが占有された累積時間として測定されます。\n",
        "* 単一ジョブの使用時間は、そのジョブを実行するためにQPUが占有されている時間として測定されます。\n",
        "\n",
        "失敗またはキャンセルされたジョブは、特定の状況下では使用量にカウントされることにご注意ください。詳細は 「[失敗およびキャンセルされたジョブ](#failed-job) 」セクションを参照してください。\n",
        "\n",
        "従量課金プランをご利用のお客様は、費用上限の設定方法の詳細について、 [「費用の管理」](/docs/guides/manage-cost) をご覧ください。\n",
        "\n",
        "<span id=\"failed-job\" />\n",
        "\n",
        "<span id=\"usage-for-failed-and-canceled-jobs\" />\n",
        "\n",
        "## 失敗したジョブおよびキャンセルされたジョブの使用方法\n",
        "\n",
        "ジョブが失敗またはキャンセルされた場合、報告される使用量は以下のようになる：\n",
        "\n",
        "* ジョブモードまたはバッチモード：システムエラーが原因で失敗またはキャンセルが発生した場合、報告される使用量はゼロとなります。 ユーザー側のミスによりジョブが失敗した場合、またはユーザーがジョブをキャンセルした場合、報告される使用量は、その時点までに発生したすべての消費量となります。これには、ジョブを実行するためにQPUを準備する際に発生したオーバーヘッドも含まれます。\n",
        "\n",
        "* セッションモード: 報告される使用時間は、セッションがアクティブである実時間であり、失敗またはキャンセルされたジョブの数には依存しません。\n",
        "\n",
        "<span id=\"view-usage\" />\n",
        "\n",
        "<span id=\"query-a-workloads-actual-usage\" />\n",
        "\n",
        "## ワークロードの実際の使用状況を照会する\n",
        "\n",
        "ワークロードが完了した後、その実際の使用量を見るにはいくつかの方法がある：\n",
        "\n",
        "* 実行する [`batch.usage()`](/docs/api/qiskit-ibm-runtime/batch#usage) または [`session.usage()`](/docs/api/qiskit-ibm-runtime/session#usage) in `qiskit-ibm-runtime` 0.30 or later.  古いバージョンの `qiskit-ibm-runtime` (>= 0.23 and \\< 0.30 ) を使用している場合は、 `session.details()[\"usage_time\"]` と `batch.details()[\"usage_time\"]` に使い方が記載されています。\n",
        "* 使用 [`GET /sessions/{id}`](/docs/api/qiskit-ibm-runtime/tags/sessions#tags__sessions__operations__GetSessionDetailsExtendedController_getSessionDetails) を使用すると、特定のバッチまたはセッションの使用量を確認できます。\n",
        "* 使用方法 [`GET /jobs/{id}`](/docs/api/qiskit-ibm-runtime/tags/jobs#tags__jobs__operations__GetJobByIdController_getJobById) を使用すると、1つのジョブの使用量を見ることができます。\n",
        "\n",
        "<span id=\"instance-usage\" />\n",
        "\n",
        "<span id=\"view-instance-usage\" />\n",
        "\n",
        "## インスタンスの使用状況を表示\n",
        "\n",
        "インスタンスの使用状況は、 [インスタンス・](/instances) ページ、または適切な権限を持つ人のための[アナリティクス・ページで](/analytics)見ることができます。  それぞれのページでは、使用量の計算方法が異なるため、異なる使用量が表示される可能性があることに注意してください。\n",
        "\n",
        "インスタンス」ページには、過去28日間（ローリング）のリアルタイム使用量が表示されます。  アナリティクスのページ使用量は1時間ごとに再計算され、過去28日分が含まれます。つまり、28日前の00:00から今日の1時間前までの使用量が表示されます。\n",
        "\n",
        "<span id=\"estimate-usage-before-submitting-a-job\" />\n",
        "\n",
        "## ジョブを送信する前に使用量を推定する\n",
        "\n",
        "正確なローカル推定値を得ることは、エラー抑制と緩和のために行われる余分な演算のために複雑であるが、推定使用量の近似値を得るためにこの基本式を使用することができる：\n",
        "\n",
        "`<per sub-job overhead> + (rep_delay + <circuit length>) * <num executions>`\n",
        "\n",
        "* `<per sub-job overhead>` は、サブジョブあたり約 2s のオーバーヘッドである。 これには、ペイロードを制御電子機器にロードする作業などが含まれる。 プリミティブ・ジョブは、実行エンジンが一度に処理するには大きすぎる場合、複数のサブジョブに分割されることがあります。\n",
        "* `rep_delay` は[ユーザーがカスタマイズ可能な](/docs/api/qiskit-ibm-runtime/options-execution-options-v2#rep_delay)オプションであり、デフォルトは `backend.default_rep_delay` で指定されている。これは、ほとんどの IBM Quantum バックエンドで250マイクロ秒である。 `rep_delay` を下げるとQPUの総実行時間が短くなりますが、その代償として状態準備エラー率が高くなることに注意してください。詳細については、 [動的繰り返し率実行](/docs/guides/repetition-rate-execution)ガイドを参照してください。\n",
        "* `<circuit length>` は総命令長である。 各命令はQPU上で異なる時間を要するため、回路によって総延長は異なる。 たとえば、測定には `x` ゲートの56倍の時間がかかる。 `backend.target[<instruction>][<qubit>].duration` を使えば、各命令の正確な継続時間を見つけることができる。 典型的な回路の長さは50-100マイクロ秒の間だろう。 プリミティブでエラー抑制やエラー軽減のテクニックを使用する場合、回路に余分な命令が挿入される可能性があり、回路総長が長くなる。\n",
        "  <Admonition type=\"note\">\n",
        "    [experimental `scheduler_timing` オプションは](/docs/guides/visualize-circuit-timing)、回路の合計時間を返すが、これは課金に使用される時間ではない。\n",
        "  </Admonition>\n",
        "* `<num executions>` 回路の総数にショット数を掛けた値であり、ここで回路とは PUB 個の要素がブロードキャストされた後に生成される回路を指す。\n",
        "  * プリミティブでエラー軽減技術を使用している場合、軽減プロセスの一環として追加回路が実行される可能性があり、これにより総実行回数が増加する。 さらに、PEAやPECといった高度なエラー軽減技術は、ノイズ学習のために回路を稼働させる必要があるため、はるかに高いオーバーヘッドを伴う。\n",
        "  * 推定器は量子ビット単位で可換な観測量をグループ化し、実行回数を削減する。\n",
        "\n",
        "高度なエラー軽減技術やカスタム処理を使用していない `rep_delay`場合、簡易的な計算式として `2+0.00035*<num executions>` 以下を利用できます。\n",
        "\n",
        "<span id=\"estimate-usage-locally-with-qiskit\" />\n",
        "\n",
        "### Qiskit を使用してローカルで消費電力を推定する\n",
        "\n",
        "このコード例は、Qiskit を使用して回路時間を計算する方法を示しています：\n",
        "\n",
        "```python\n",
        "\n",
        "# Schedule the circuit to get more accurate timing\n",
        "pm = generate_preset_pass_manager(\n",
        "    target=backend.target,\n",
        "    optimization_level=0,\n",
        "    scheduling_method=\"alap\"\n",
        ")\n",
        "\n",
        "scheduled_circuits = pm.run(isa_circuits)\n",
        "\n",
        "init_duration = backend.target[\"reset\"][(0,)].duration\n",
        "rep_delay = sampler.options.execution.rep_delay or backend.default_rep_delay\n",
        "\n",
        "circuit_duration = 0\n",
        "\n",
        "for circuit in scheduled_circuits:\n",
        "    # Estimate circuit length\n",
        "    circuit_duration += circuit.estimate_duration(backend.target)\n",
        "\n",
        "    # Add INIT time\n",
        "    if sampler.options.execution.init_qubits:\n",
        "        circuit_duration += init_duration\n",
        "\n",
        "    # Add rep_delay\n",
        "    circuit_duration += rep_delay\n",
        "\n",
        "total_time = 2 + (circuit_duration*shots)\n",
        "print(f\"Total estimated usage is {math.ceil(total_time)} seconds\")\n",
        "```\n",
        "\n",
        "<span id=\"next-steps\" />\n",
        "\n",
        "## 次のステップ\n",
        "\n",
        "<Admonition type=\"tip\" title=\"推奨事項\">\n",
        "  * 以下のヒントを確認してください： [ジョブの実行時間を最小限に抑える](minimize-time)。\n",
        "  * [最大実行時間を](max-execution-time)設定する。\n",
        "  * 「[トランスパイル](/docs/guides/transpile/) 」のセクションで、ローカルでのトランスパイル方法について学びましょう。\n",
        "  * [トランスパイラ設定の比較](/docs/guides/circuit-transpilation-settings)ガイドをお試しください。\n",
        "</Admonition>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "id": "a1b8767d",
      "source": "© IBM Corp., 2017-2026"
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 4
}