{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "3fdd7eec-a38a-4835-9fbc-9e15b09c17d2",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"Auslastung\"\n",
        "description: \"Erklärt, was Nutzung ist und wie man abschätzen kann, wie lange ein Job, der eine Primitive verwendet, zur Ausführung benötigt\"\n",
        "---\n",
        "\n",
        "<span id=\"workload-usage\" />\n",
        "\n",
        "# Auslastung\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",
        "Die Nutzung entspricht dem Verbrauch des „ IBM Quantum “-Compute-Dienstes und richtet sich nach der Zeit, in der eine QPU für die Ausführung von Workloads reserviert ist.\n",
        "\n",
        "* Die Sitzungsnutzung wird als die Zeit gemessen, die verstreicht, während die Sitzung aktiv ist, da die QPU-Kapazität für die Dauer der Sitzung reserviert bleibt, unabhängig davon, ob Workloads aktiv ausgeführt werden. Weitere Informationen zu den Statusübergängen einer Sitzung finden Sie unter „[Sitzungsdauer](/docs/guides/run-jobs-session#session-length) “.\n",
        "* Die Batch-Auslastung wird als die Gesamtzeit gemessen, in der die QPU für die Ausführung aller Jobs im Batch gesperrt ist.\n",
        "* Die Auslastung durch einen einzelnen Job wird als die Zeit gemessen, in der die QPU für die Ausführung des Jobs reserviert ist.\n",
        "\n",
        "Beachten Sie, dass fehlgeschlagene oder abgebrochene Aufträge unter bestimmten Umständen zu Ihrer Nutzung zählen – weitere Informationen finden Sie im Abschnitt „[Fehlgeschlagene und abgebrochene Aufträge](#failed-job) “.\n",
        "\n",
        "Nutzer des Pay-As-You-Go-Tarifs finden unter „[Kosten verwalten](/docs/guides/manage-cost) “ weitere Informationen zum Festlegen eines Kostenlimits.\n",
        "\n",
        "<span id=\"failed-job\" />\n",
        "\n",
        "<span id=\"usage-for-failed-and-canceled-jobs\" />\n",
        "\n",
        "## Verwendung für fehlgeschlagene und abgebrochene Aufträge\n",
        "\n",
        "Wenn ein Auftrag fehlschlägt oder abgebrochen wird, wird die Verwendung wie folgt gemeldet:\n",
        "\n",
        "* Einzel- oder Stapelmodus: Wenn der Fehler oder die Abbruch aufgrund eines Systemfehlers aufgetreten ist, wird die Nutzung mit Null angegeben. Bei Aufträgen, die aufgrund eines Benutzerfehlers fehlgeschlagen sind oder von einem Benutzer abgebrochen wurden, umfasst die gemeldete Nutzung den bis zu diesem Zeitpunkt angefallenen Verbrauch, einschließlich des Aufwands, der für die Vorbereitung der QPU zur Ausführung des Auftrags entstanden ist.\n",
        "\n",
        "* Sitzungsmodus: Die gemeldete Nutzung ist die tatsächliche Zeit, in der die Sitzung aktiv ist, unabhängig von der Anzahl der fehlgeschlagenen oder abgebrochenen Aufträge.\n",
        "\n",
        "<span id=\"view-usage\" />\n",
        "\n",
        "<span id=\"query-a-workloads-actual-usage\" />\n",
        "\n",
        "## Die tatsächliche Nutzung einer Arbeitslast abfragen\n",
        "\n",
        "Nach Beendigung eines Workloads gibt es mehrere Möglichkeiten, die tatsächliche Nutzung anzuzeigen:\n",
        "\n",
        "* Führen Sie in v0.30`qiskit-ibm-runtime` oder höher den Befehl für [`job.usage()`](/docs/api/qiskit-ibm-runtime/runtime-job-v2#usage) einen einzelnen Job aus oder die Befehle bzw [`batch.usage()`](/docs/api/qiskit-ibm-runtime/batch#usage) ., [`session.usage()`](/docs/api/qiskit-ibm-runtime/session#usage) wenn Sie den Batch- oder Sitzungsmodus verwenden.  Bei Verwendung einer älteren Version von `qiskit-ibm-runtime` (>= 0.23 und \\< 0.30 ) finden Sie die Anleitung weiterhin unter `session.details()[\"usage_time\"]` und `batch.details()[\"usage_time\"]`.\n",
        "* Verwenden Sie, um [`GET /sessions/{id}`](/docs/api/qiskit-runtime-rest/tags/sessions#tags__sessions__operations__get_session) die Nutzung für einen bestimmten Durchlauf oder eine bestimmte Sitzung anzuzeigen (der Endpunkt ist für beide Ausführungsmodi identisch).\n",
        "* Verwenden Sie, [`GET /jobs/{id}`](/docs/api/qiskit-runtime-rest/tags/jobs#tags__jobs__operations__get_job_metrics_jid) um die Nutzung eines einzelnen Auftrags anzuzeigen.\n",
        "\n",
        "<span id=\"instance-usage\" />\n",
        "\n",
        "<span id=\"view-instance-usage\" />\n",
        "\n",
        "## Instanznutzung anzeigen\n",
        "\n",
        "Sie können die Nutzung einer Instanz auf der Seite [Instanzen](/instances) oder, für diejenigen mit der entsprechenden Berechtigung, auf der Seite [Analysen](/analytics) einsehen.  Beachten Sie, dass die Seiten möglicherweise unterschiedliche Nutzungszahlen anzeigen, da sie die Nutzung unterschiedlich berechnen.\n",
        "\n",
        "Die Seite Instanzen zeigt die Echtzeitnutzung der letzten 28 Tage (rollierend) bis zur aktuellen Uhrzeit des aktuellen Tages.  Die Nutzung der Analytics-Seite wird stündlich neu berechnet und umfasst die letzten 28 vollen Tage, d. h. sie zeigt die Nutzung von vor 28 Tagen um 00:00 Uhr bis heute zu jeder vollen Stunde.\n",
        "\n",
        "<span id=\"estimate-usage-before-submitting-a-job\" />\n",
        "\n",
        "## Schätzen Sie die Nutzung, bevor Sie einen Auftrag einreichen\n",
        "\n",
        "Eine genaue lokale Schätzung wird zwar durch die zusätzlichen Operationen zur Fehlerunterdrückung und -minderung erschwert, aber Sie können diese Grundformel verwenden, um einen Näherungswert für die geschätzte Nutzung zu erhalten:\n",
        "\n",
        "`<per sub-job overhead> + (rep_delay + <circuit length>) * <num executions>`\n",
        "\n",
        "* `<per sub-job overhead>` ist ein Overhead von etwa 2s pro Teilauftrag. Dazu gehören Vorgänge wie das Laden der Nutzlast in die Steuerelektronik. Ihr primitiver Auftrag kann in mehrere Teilaufträge aufgeteilt werden, wenn er für die Ausführungsmaschine zu groß ist, um alle auf einmal zu verarbeiten.\n",
        "* `rep_delay` ist eine [vom Benutzer anpassbare](/docs/api/qiskit-ibm-runtime/options-models-execution-options#rep_delay) Option, deren Standardwert durch festgelegt ist `backend.default_rep_delay`, der bei den meisten „ IBM Quantum “-Backends 250 Mikrosekunden beträgt. Beachten Sie, dass eine Verringerung der die gesamte QPU-Ausführungszeit verkürzt `rep_delay` , jedoch auf Kosten einer erhöhten Fehlerrate bei der Zustandsvorbereitung; weitere Informationen finden Sie im Leitfaden [zur Ausführung mit dynamischer Wiederholungsrate](/docs/guides/repetition-rate-execution).\n",
        "* `<circuit length>` ist die Gesamtlänge der Anweisungen. Jede Anweisung benötigt auf der QPU unterschiedlich viel Zeit, so dass die Gesamtlänge von Schaltung zu Schaltung variiert. Eine Messung kann zum Beispiel 56 Mal länger dauern als ein `x` Tor. `backend.target[<instruction>][<qubit>].duration` kann verwendet werden, um die genaue Dauer für jede Anweisung zu ermitteln. Eine typische Schaltungslänge liegt wahrscheinlich zwischen 50-100 Mikrosekunden. Wenn Sie mit den Primitiven Fehlerunterdrückungs- oder -minderungstechniken verwenden, werden möglicherweise zusätzliche Anweisungen in Ihre Schaltung eingefügt, was die Gesamtlänge der Schaltung erhöhen würde.\n",
        "  <Admonition type=\"note\">\n",
        "    Die [experimentelle Option `scheduler_timing` ](/docs/guides/visualize-circuit-timing) gibt die Gesamtzeit des Stromkreises zurück, aber dies ist NICHT die Zeit, die für die Abrechnung verwendet wird.\n",
        "  </Admonition>\n",
        "* `<num executions>` ist die Gesamtzahl der Schaltkreise multipliziert mit der Anzahl der Schüsse, wobei die Schaltkreise diejenigen sind, die nach der Übertragung von „ PUB “-Elementen erzeugt werden.\n",
        "  * Wenn Sie Fehlerbehebungsmethoden mit den Primitiven verwenden, können im Rahmen des Behebungsprozesses zusätzliche Schaltkreise ausgeführt werden, wodurch sich die Gesamtzahl der Ausführungen erhöht. Darüber hinaus sind fortschrittliche Fehlerminderungstechniken wie PEA und PEC mit einem viel höheren Overhead verbunden, da sie für das Noise Learning laufende Schaltungen erfordern.\n",
        "  * Der Schätzer gruppiert qubitweise kommutierende Observablen, wodurch sich die Anzahl der Ausführungen reduziert.\n",
        "\n",
        "Wenn Sie keine erweiterten Fehlerbehebungstechniken oder benutzerdefinierten `rep_delay`Funktionen verwenden, können Sie als `2+0.00035*<num executions>` schnelle Formel verwenden.\n",
        "\n",
        "<span id=\"estimate-usage-locally-with-qiskit\" />\n",
        "\n",
        "### Schätzung der Nutzung vor Ort mit Qiskit\n",
        "\n",
        "Dieses Code-Beispiel zeigt, wie man mit Qiskit die Schaltungszeit berechnet:\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ächste Schritte\n",
        "\n",
        "<Admonition type=\"tip\" title=\"Empfehlungen\">\n",
        "  * Beachten Sie diese Tipps: [Minimieren Sie die Auftragslaufzeit](minimize-time).\n",
        "  * Legen Sie die [maximale Ausführungszeit](max-execution-time) fest.\n",
        "  * Im Abschnitt [„Transpile“](/docs/guides/transpile/) erfahren Sie, wie Sie lokal transpilieren können.\n",
        "  * Probieren Sie die Anleitung [zum Vergleichen der Transpiler-Einstellungen](/docs/guides/circuit-transpilation-settings) aus.\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
}