{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "6ec2a7ce-6d72-401c-aecd-59f2f519153a",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"Führen Sie Ihre erste „ Qiskit Serverless “-Workload remote aus\"\n",
        "description: \"So listen Sie in Serverless verfügbare Programme auf, übergeben Eingaben an diese Programme, führen sie remote aus, überprüfen den Status und rufen Ergebnisse und Protokolle ab.\"\n",
        "---\n",
        "\n",
        "<span id=\"run-your-first-qiskit-serverless-workload-remotely\" />\n",
        "\n",
        "# Führen Sie Ihre erste „ Qiskit Serverless “-Workload remote aus\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "1ffb4bbc-6702-4424-bc38-226eb3194a07",
      "metadata": {
        "tags": [
          "version-info"
        ]
      },
      "source": [
        "<Accordion>\n",
        "  <AccordionItem title=\"Paketversionen\">\n",
        "    Der Code auf dieser Seite wurde unter Berücksichtigung der folgenden Anforderungen entwickelt.\n",
        "    Wir empfehlen die Verwendung dieser oder neuerer Versionen.\n",
        "\n",
        "    ```\n",
        "    qiskit[all]~=1.4.0\n",
        "    qiskit-ibm-runtime~=0.36.1\n",
        "    qiskit-ibm-catalog~=0.4\n",
        "    ```\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "33bc7389-22b7-4ddd-ae7d-1c4fd603d793",
      "metadata": {},
      "source": [
        "<Admonition type=\"tip\">\n",
        "  **Qiskit Serverless wird aktualisiert, und seine Funktionen ändern sich schnell.** Während dieser Entwicklungsphase finden Sie Release Notes und die aktuellste Dokumentation auf der Seite „[ Qiskit Serverless](https://qiskit.github.io/qiskit-serverless/index.html) “ () unter GitHub.\n",
        "</Admonition>\n",
        "\n",
        "In diesem Abschnitt wird erläutert, wie Sie `qiskit-ibm-catalog` verwenden, um in Qiskit Serverless verfügbare Programme aufzulisten, Eingaben an diese Programme zu übergeben, sie ferngesteuert auszuführen, ihren Status zu überprüfen und Ergebnisse und Protokolle abzurufen.\n",
        "\n",
        "Vergewissern Sie sich, dass Sie den Arbeitsablauf unter „[Schreiben Sie Ihr erstes Programm](/docs/guides/serverless-first-program) in Qiskit Serverless “ befolgt haben, bevor Sie beginnen.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "ec693d85-baaf-487e-aaff-3867512a4790",
      "metadata": {},
      "source": [
        "<span id=\"list-programs-available\" />\n",
        "\n",
        "## Liste der verfügbaren Programme\n",
        "\n",
        "Mit können Sie eine Liste der `QiskitServerless.list()` verfügbaren Programme abrufen, die mit „ Qiskit Serverless “ ausgeführt werden können. Dazu gehören auch die zuvor hochgeladenen [`transpile_remote_serverless`](/docs/guides/serverless-first-program).\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "id": "4eaad0dc-9b42-48fa-ad08-4e0f9c4d90bc",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "QiskitFunction(transpile_remote_serverless)"
            ]
          },
          "execution_count": 1,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from qiskit_ibm_catalog import QiskitServerless\n",
        "\n",
        "serverless = QiskitServerless()\n",
        "next(\n",
        "    program\n",
        "    for program in serverless.list()\n",
        "    if program.title == \"transpile_remote_serverless\"\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e1a5d0f7-e4d9-4289-ac87-ca25e76f968d",
      "metadata": {},
      "source": [
        "<span id=\"run-an-uploaded-program-and-pass-inputs\" />\n",
        "\n",
        "## Ein hochgeladenes Programm ausführen und Eingaben übergeben\n",
        "\n",
        "Richten Sie zunächst Ihre Eingänge ein. Ihr Programm hat drei Eingänge: `circuits`, `backend`, und `optimization_level`. Mit `random_circuit` können Sie 30 zufällige Schaltungen erstellen:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "id": "46108a95-11f8-4ecf-83bb-131c3e7ea4c2",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/serverless-run-first-workload/extracted-outputs/46108a95-11f8-4ecf-83bb-131c3e7ea4c2-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 2,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from qiskit.circuit.random import random_circuit\n",
        "\n",
        "qc_random = [(random_circuit(4, 4, measure=True, seed=i)) for i in range(10)]\n",
        "qc_random[0].draw(output=\"mpl\", idle_wires=False)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "61c17ded-b832-4db1-ba9a-60772362daea",
      "metadata": {},
      "source": [
        "Wählen Sie dann mit `QiskitRuntimeService` und `least_busy` eine `backend` aus:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "ebefb5ac-c8a8-4350-b16f-0677f0e412e5",
      "metadata": {},
      "outputs": [],
      "source": [
        "from qiskit_ibm_runtime import QiskitRuntimeService\n",
        "\n",
        "service = QiskitRuntimeService()\n",
        "backend = service.least_busy(operational=True, simulator=False)\n",
        "print(backend.name)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "6a6ba35b-b98b-41b1-8dd4-c7cf2fc8b637",
      "metadata": {},
      "source": [
        "Legen Sie Ihre Optimierungsstufe fest:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "id": "cab2773b-f72a-49fe-a274-169a10e89c5e",
      "metadata": {},
      "outputs": [],
      "source": [
        "optimization_level = 3"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "f522b54f-93e5-45e9-9dc7-a2287eb4c707",
      "metadata": {},
      "source": [
        "Wählen Sie Ihr Programm mit `serverless.load('PROGRAM_NAME')`:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "id": "e9b7e7c1-07b1-4777-bb08-1522433901c6",
      "metadata": {},
      "outputs": [],
      "source": [
        "transpile_remote_serverless = serverless.load(\"transpile_remote_serverless\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "8e256a2a-6b14-4194-8fee-df986c7ebc6c",
      "metadata": {},
      "source": [
        "Als Nächstes übergeben Sie Ihre Eingaben und führen es auf pythonische Weise wie folgt aus:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "id": "85b1aace-e7d7-4e2e-bb77-44fb514d0236",
      "metadata": {},
      "outputs": [],
      "source": [
        "job = transpile_remote_serverless.run(\n",
        "    circuits=qc_random,\n",
        "    backend=backend.name,\n",
        "    optimization_level=optimization_level,\n",
        ")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "id": "2e8b4ec2-b7e3-4218-8742-b67f2a1d82e0",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "'118256c5-bbb0-4ea8-9e9f-51aac2220aef'"
            ]
          },
          "execution_count": 7,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "job.job_id"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "87dbb375-cd24-4d0f-a2fc-c653db8345e3",
      "metadata": {},
      "source": [
        "<span id=\"serverless-job-status\" />\n",
        "\n",
        "<span id=\"check-job-status\" />\n",
        "\n",
        "## Auftragsstatus überprüfen\n",
        "\n",
        "Mit Ihrem Qiskit Serverless `job_id` können Sie den Status der laufenden Aufträge überprüfen. Dazu gehören die folgenden Status:\n",
        "\n",
        "* **`QUEUED`**: Das entfernte Programm befindet sich in der Qiskit Serverless-Warteschlange. Die Priorität der Warteschlange basiert derzeit darauf, wie oft Sie Qiskit Serverless verwendet haben\n",
        "* **`INITIALIZING`**: Das entfernte Programm wird gestartet; dies beinhaltet die Einrichtung der entfernten Umgebung und die Installation von Abhängigkeiten\n",
        "* **`RUNNING`**: Das Programm wird ausgeführt. Wenn Sie zu diesem Zeitpunkt `print()` Ausgaben in Ihrem Programm haben, können Sie die Protokolle mit `job.logs()`\n",
        "* **`DONE`**: Das Programm ist abgeschlossen, und Sie können die in `save_result()` gespeicherten Daten mit `job.results()`\n",
        "\n",
        "Sie können auch detailliertere Auftragsstatus unter [Verwalten von Qiskit Serverless-Rechen- und Datenressourcen](/docs/guides/serverless-manage-resources) festlegen.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "id": "f4877d45-c350-4855-b1ca-868a6ad8cfa4",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "'QUEUED'"
            ]
          },
          "execution_count": 8,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "job.status()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "3fa9c01e-18a4-482c-bad6-69dee5acece4",
      "metadata": {},
      "source": [
        "<Admonition type=\"tip\">\n",
        "  Derzeit werden in der Tabelle „ IBM Quantum -Workloads“ ausschließlich Workloads des „ IBM Quantum Compute Service“ angezeigt. Verwenden Sie, `job.status()` um den aktuellen Status Ihrer „ Qiskit Serverless “-Workload anzuzeigen.\n",
        "</Admonition>\n",
        "\n",
        "Sie haben Ihr erstes Qiskit Serverless-Programm erfolgreich ausgeführt!\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "65566f2c-8d5b-4493-819b-4389155c3d69",
      "metadata": {},
      "source": [
        "<span id=\"retrieve-logs-and-results\" />\n",
        "\n",
        "## Protokolle und Ergebnisse abrufen\n",
        "\n",
        "Wie bereits erwähnt, können Sie, sobald ein Programm `RUNNING` ist, `job.logs()` verwenden, um Protokolle zu holen, die von `print()` Ausgaben erstellt wurden:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "id": "cbf12a1b-bfff-4eb2-82f1-298de1e9c114",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "No logs yet.\n"
          ]
        }
      ],
      "source": [
        "logs = job.logs()\n",
        "print(logs)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "bff87452-bf98-4c7a-85c8-d280d89a7970",
      "metadata": {},
      "source": [
        "Sie können einen Auftrag auch jederzeit abbrechen:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "id": "bc4fbe20-456c-4ce4-bf26-dfdb8b68e89f",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "'Job has been stopped.'"
            ]
          },
          "execution_count": 11,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "job.stop()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "925a8d81-e85b-4e26-a9e1-3a01e8e0785b",
      "metadata": {},
      "source": [
        "Sobald ein Programm `DONE` ist, können Sie `job.results()` verwenden, um das in `save_result()` gespeicherte Ergebnis abzurufen:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "id": "c0d999d9-af9e-4312-b5bb-f60f714257ba",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "{'transpiled_circuits': [<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93eca64810>,\n",
              "  <qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5e5310>,\n",
              "  <qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5d5310>,\n",
              "  <qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec58b490>,\n",
              "  <qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec57d310>,\n",
              "  <qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec535950>,\n",
              "  <qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec523c90>,\n",
              "  <qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec60a990>,\n",
              "  <qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5527d0>,\n",
              "  <qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec4152d0>]}"
            ]
          },
          "execution_count": 12,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "# We can't get results from a cancelled job, so we'll fetch a completed one instead\n",
        "completed_job = next(\n",
        "    job for job in serverless.jobs() if job.status() == \"DONE\"\n",
        ")\n",
        "completed_job.result()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "ca9791df-60c2-49d8-8541-741078ea63c6",
      "metadata": {},
      "source": [
        "<span id=\"list-jobs-previously-run-with-qiskit-serverless\" />\n",
        "\n",
        "## Liste der zuvor ausgeführten Jobs mit „ Qiskit Serverless “\n",
        "\n",
        "Sie können `jobs()` verwenden, um alle an Qiskit Serverless übermittelten Aufträge aufzulisten:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 13,
      "id": "ba9365c4-b07d-4dc6-9594-edc07c44bc63",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[<Job | 118256c5-bbb0-4ea8-9e9f-51aac2220aef>,\n",
              " <Job | e9a36469-7d6b-4f00-bf91-78709ebdbbff>,\n",
              " <Job | 4efd601b-8f61-4c8e-b14a-0b8a9c649dc0>,\n",
              " <Job | 87cd22c7-8eb9-4606-bdb4-befe946e9e9b>,\n",
              " <Job | be9a6dfd-0830-4250-aa60-acdd05bb8818>,\n",
              " <Job | 479513dd-6a76-4c3e-ba49-bb21351b9a05>,\n",
              " <Job | f9c20c31-be46-41b3-97ac-99f7be61f89e>,\n",
              " <Job | 37fa2489-4449-4bfb-974e-9d9a9ec3cc21>,\n",
              " <Job | b754c4e8-6817-48db-9bb9-74c151d6349a>,\n",
              " <Job | 78bc6744-b417-48cb-8e01-59bb63bcc2be>]"
            ]
          },
          "execution_count": 13,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "old_jobs = serverless.jobs()\n",
        "old_jobs"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "fd3415a0-0e55-4991-8764-c9fe66eb2664",
      "metadata": {},
      "source": [
        "<span id=\"next-steps\" />\n",
        "\n",
        "## Nächste Schritte\n",
        "\n",
        "<Admonition type=\"info\" title=\"Empfehlungen\">\n",
        "  * Entdecken Sie [die](/docs/guides/serverless-manage-resources) Ihrem Programm zur Verfügung stehenden Tools für die Datenverarbeitung und das Datenmanagement, einschließlich der Parallelisierung.\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": 2
}