IBM Cloud Docs
Einführung

Einführung

Dieses Lernprogramm führt Sie durch die Schritte zum Einrichten einer Qiskit Runtime-Serviceinstanz, zum Anmelden an Ihrer Serviceinstanz und zum Ausführen Ihres ersten Jobs auf einem Quantencomputer.

Die neue IBM-Schnittstelle der Quantum-Plattform wurde im Early-Access-Modus veröffentlicht. Es wird empfohlen, diese Schnittstelle für die Arbeit mit den IBM Quantum-Diensten zu verwenden. Da es auf IBM Cloud basiert, ist die Migration unkompliziert. Weitere Informationen finden Sie im Migrationsleitfaden.

  • Wenn Sie ein Entitäts-Upgrade von einem IBM Quantum-Programm durchführen, das Qiskit Runtimeeinrichten muss, finden Sie Anweisungen zum Einrichten eines Cloudkontos, einer Serviceinstanz und zum Arbeiten mit Benutzern unter Upgrade vom offenen Plan.
  • Wenn Ihre Organisation eine komplexere Struktur hat, finden Sie im Abschnitt Qiskit Runtime für eine Organisation flexiblere Anweisungen zum Einrichten einer Serviceinstanz und zum Arbeiten mit Benutzern.
  • Wenn Sie den Service Qiskit Runtime zum ersten Mal einrichten oder wenn Sie von einem Administrator zu einer Instanz eingeladen wurden, fahren Sie mit den Schritten in diesem Abschnitt fort.

Serviceinstanz erstellen

Wenn Sie bereits eine Qiskit Runtime-Serviceinstanz erstellt haben oder von einem Administrator zu einer eingeladen wurden, fahren Sie mit dem nächsten Schritt fort. Um festzustellen, ob Sie bereits Zugriff auf eine Instanz haben, überprüfen Sie Ihre IBM Cloud-Instanzseite. Wenn eine oder mehrere Instanzen angezeigt werden, können Sie mit Qiskit-Pakete installieren fortfahren.

  1. Wählen Sie auf der Seite Qiskit Runtime Bereitstellungden entsprechenden Serviceplan aus, je nachdem, worauf Sie Zugriff benötigen. Weitere Informationen zu diesen Plänen finden Sie im Thema Qiskit Runtime-Pläne.

    • Lite (veraltet ): Kostenloses Abonnement nur für Simulatoren, um Ihnen den Einstieg zu erleichtern Qiskit Runtime. Lernen Sie die Verwendung von Qiskit Runtime anhand unserer Beispiele und Lernprogramme für eines der vordefinierten Programme, die für die effiziente Ausführung von Circuits verfügbar sind.
    • Standard: Ein Pay-as-you-go-Modell für den ZugriffIBM QPUs und Simulatoren. Erstellen Sie Ihre eigenen Programme und nutzen Sie alle Vorteile von Qiskit Runtime, indem Sie auf realer Quantenhardware arbeiten und gleichzeitig den Zugriff auf alle Simulatoren aufrechterhalten, die für den Lite-Plan verfügbar sind.
  2. Füllen Sie die erforderlichen Informationen aus und klicken Sie dann auf "Erstellen ".

Qiskit-Pakete installieren oder aktualisieren

Installieren oder aktualisieren Sie die folgenden Pakete in Ihrer Entwicklungsumgebung. Sie ermöglichen es Ihnen, Verbindungen zu erstellen und mit primitiven Programmen mit Qiskit Runtimezu arbeiten. Ausführliche Anweisungen finden Sie im Abschnitt Installation und Konfiguration von Qiskit. Überprüfen Sie regelmäßig die Qiskit-Releaseinformationen (oder führen Sie diese Befehle erneut aus), damit Sie immer über die neueste Version verfügen.

Sie können ' pip install -U qiskit nicht verwenden, um von einer Qiskit 0.x Version auf 1.0 oder höher zu aktualisieren. Einzelheiten und Anweisungen finden Sie im Qiskit 1.0 Migrationsleitfaden.

Stellen Sie sicher, dass Sie diese Befehle ausführen, auch wenn Sie die Pakete bereits installiert haben, um sicherzustellen, dass Sie über die neuesten Versionen verfügen.

# Installs the latest version of the Qiskit meta-package for circuit creation.
pip install qiskit -U
# Installs the latest version of the Qiskit Runtime package, which is needed to interact with the Qiskit Runtime primitives on IBM Cloud.
pip install qiskit-ibm-runtime -U

Beim Service authentifizieren

Für die Authentifizierung beim Service rufen Sie QiskitRuntimeService mit Ihrem IBM Cloud-API-Schlüssel und dem CRN auf:

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService(channel="ibm_cloud", token="<IBM Cloud API key>", instance="<IBM Cloud CRN>")

Ihre Zugriffsberechtigungsnachweise suchen

  1. Suchen Sie Ihren API-Schlüssel. Zeigen Sie auf der Seite 'API-Schlüssel'Ihren API-Schlüssel an oder erstellen Sie ihn und kopieren Sie ihn anschließend an eine sichere Position, damit Sie ihn für die Authentifizierung verwenden können.
  2. Ermitteln Sie Ihren Cloud Resource Name (CRN). Öffnen Sie die Seite Instanzen und klicken Sie auf Ihre Instanz. Klicken Sie auf der Seite, die geöffnet wird, auf das Symbol, um Ihren CRN zu kopieren. Speichern Sie sie an einem sicheren Ort, damit Sie sie für die Authentifizierung verwenden können.

Berechtigungsnachweise optional auf Platte speichern

Speichern Sie Ihre Berechtigungsnachweise optional auf Platte (in der Datei $HOME/.qiskit/qiskit-ibm.json ). Wenn Sie Ihre Berechtigungsnachweise nicht auf Platte speichern, müssen Sie Ihre Berechtigungsnachweise bei jedem Start einer neuen Sitzung angeben.

Wenn Sie Ihre Berechtigungsnachweise auf Platte speichern, können Sie zukünftig QiskitRuntimeService() verwenden, um Ihr Konto zu initialisieren.

from qiskit_ibm_runtime import QiskitRuntimeService

# Save account to disk and save it as the default.
QiskitRuntimeService.save_account(channel="ibm_cloud", token="<IBM Cloud API key>", instance="<IBM Cloud CRN>", name="account-name", set_as_default=True)

# Load the saved credentials
service = QiskitRuntimeService(name="account-name")

Wenn Sie Ihre gespeicherten Berechtigungsnachweise aktualisieren müssen, führen Sie save_account erneut aus und übergeben Sie dabei overwrite=True und die aktualisierten Berechtigungsnachweise.

Anweisungen zur Verwendung der Cloud Quantum Qiskit-API finden Sie im Abschnitt authentication in der API-Dokumentation.

Testen Sie Ihre Konfiguration

Führen Sie eine einfache Verbindung mit Sampler aus, um sicherzustellen, dass Ihre Umgebung ordnungsgemäß eingerichtet ist:

from qiskit import QuantumCircuit
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler

# Create empty circuit
example_circuit = QuantumCircuit(2)
example_circuit.measure_all()

# You'll need to specify the credentials when initializing QiskitRuntimeService, if they were not previously saved.
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)

sampler = Sampler(backend)
job = sampler.run([example_circuit])
print(f"job id: {job.job_id()}")
result = job.result()
print(result)

Programm ausführen

Qiskit Runtime verwendet Basisprogramme als Schnittstelle zu Quantencomputern. Die folgenden Programme sind öffentlich verfügbar. Weitere Informationen zu den Änderungen in den V2-Basiselementen finden Sie unter Auf V2-Basiselemente migrieren.

  • Probe: Ermöglicht dem Benutzer, einen Schaltkreis als Eingabe anzugeben und dann die Ausgaben (Bitstrings) von jedem Shot zurückzugeben (V2 ) oder Quasiwahrscheinlichkeiten (V1 ). Dadurch können Benutzer die Möglichkeit mehrerer relevanter Datenpunkte im Kontext destruktiver Interferenzen effizienter bewerten.
  • Schätzer: Ermöglicht es einem Benutzer, eine Liste von Verbindungen und überwachbaren Objekten anzugeben und selektiv zwischen den Listen zu gruppieren, um Erwartungswerte und Varianzen für eine bestimmte Parametereingabe effizient auszuwerten Es wurde entwickelt, um Benutzern zu ermöglichen, Erwartungswerte von Quantenoperatoren, die für viele Algorithmen erforderlich sind, effizient zu berechnen und zu interpretieren.

In diesem Beispiel wird das Basiselement 'Sampler' verwendet:

# Prepare the input circuit.
from qiskit import QuantumCircuit

bell = QuantumCircuit(2)
bell.h(0)
bell.cx(0, 1)
bell.measure_all()

# Execute the circuit
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit_ibm_runtime.fake_provider import FakeManilaV2

# Run the sampler job locally using FakeManilaV2
backend = FakeManilaV2()

from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_bell = pm.run(bell)

sampler = Sampler(backend)

job = sampler.run([(isa_bell,)])
result = job.result()

pub_result = result[0]
# Get counts from the classical register "meas".
print(f" >> Counts for the meas output register: {pub_result.data.meas.get_counts()}")

ISA-Eingabe

Um schnellere und effizientere Ergebnisse zu erzielen, müssen Schaltkreise und Observablen ab dem 1. März 2024 so umgestaltet werden, dass sie nur noch Anweisungen verwenden, die von der QPU unterstützt werden (bezeichnet als* Befehlssatzarchitektur (ISA)* Schaltkreise und Observablen), bevor sie demQiskit Runtime Primitive. Anweisungen zur Umwandlung von Schaltkreisen finden Sie in der Dokumentation zur Umsetzung.

Diese Änderung hat die folgenden wichtigen Auswirkungen:

  • Da die Transposition so erfolgt, dass sie den Verbindungen entspricht, die auf einem bestimmten Back-End verfügbar sind, müssen Sie ein Back-End angeben. Wenn Sie kein Back-End angeben, erhalten Sie einen Fehler.

    Wenn Sie bisher kein Backend angegeben haben, wurde die am wenigsten ausgelastete QPU verwendet, auf die Sie Zugriff haben. Um jetzt die am wenigsten ausgelastete QPU zu verwenden, verwenden Sie Code ähnlich diesem:backend = service.least_busy(operational=True, simulator=False).

  • Die Basiselemente führen keine Layout-oder Routing-Operationen mehr aus. Folglich haben Transpilierungsoptionen, die sich auf diese Aufgaben beziehen, keine Wirkung mehr. Benutzer können weiterhin anfordern, dass die Basiselemente keine Optimierung von Eingabeverbindungen mit optimization_level=0 durchführen.

Beispielcode für die Generierung von ISA-Schaltungen und überwachbaren Objekten:

from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager

# Create a new circuit with two qubits (first argument) and two classical
# bits (second argument)
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)

# Set up six different observables.
observables_labels = ["ZZ", "ZI", "IZ", "XX", "XI"]

from qiskit.quantum_info import SparsePauliOp
observables = [SparsePauliOp(label) for label in observables_labels]

# Convert to an ISA circuit and layout-mapped observables.
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuit = pm.run(qc)
observables = [
    observable.apply_layout(isa_circuit.layout) for observable in observables
]

Nächste Schritte