IBM Qiskit Runtime Client
Qiskit IBM Runtime is the official client library for interacting with the IBM Quantum Platform's Qiskit Runtime service. It streamlines quantum computations by providing optimized implementations of Qiskit primitives (Sampler and Estimator) for IBM Quantum hardware, leveraging classical computing resources for tasks like error suppression and mitigation. The library is currently at version 0.46.1 and requires Python >=3.10.
Warnings
- breaking Qiskit Runtime V1 primitives (`Sampler`, `Estimator`, and the `Options` class) are deprecated and have been removed. All code should migrate to use the V2 interfaces (`SamplerV2`, `EstimatorV2`).
- breaking The `ibm_quantum` channel option for `QiskitRuntimeService` is no longer supported due to the sunset of IBM Quantum Platform Classic. The only valid channels are `ibm_cloud` and `ibm_quantum_platform` (which is the new default).
- breaking The `fake_provider` module, which provides fake backends for testing, has been migrated from `qiskit.providers.fake_provider` to `qiskit_ibm_runtime.fake_provider`.
- deprecated The `QiskitRuntimeService.delete_job()` method is deprecated and not supported on the new IBM Quantum Platform.
- gotcha Initializing a primitive (Sampler/Estimator) outside of a `Session` or `Batch` context manager will result in jobs running in 'job mode'. This means subsequent jobs will not be prioritized, and iterative calls will incur queuing delays.
- gotcha As of March 2024, Qiskit Runtime primitives only accept Instruction Set Architecture (ISA) circuits and observables. Non-ISA inputs must be transpiled before submission.
- gotcha Connections to the Qiskit Runtime service can be disrupted, leading to `WebsocketError` when retrieving results, potentially causing loss of computation for long-running jobs.
Install
-
pip install qiskit-ibm-runtime
Imports
- QiskitRuntimeService
from qiskit_ibm_runtime import QiskitRuntimeService
- SamplerV2
from qiskit_ibm_runtime import SamplerV2
- EstimatorV2
from qiskit_ibm_runtime import EstimatorV2
- Session
from qiskit_ibm_runtime import Session
- Sampler
from qiskit_ibm_runtime import SamplerV2 as Sampler
- Estimator
from qiskit_ibm_runtime import EstimatorV2 as Estimator
- Options
from qiskit_ibm_runtime.options import Options
- fake_provider
from qiskit_ibm_runtime.fake_provider import FakeSherbrooke
Quickstart
import os
from qiskit import QuantumCircuit
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler, Session
# Set your IBM Quantum Platform API token and instance CRN as environment variables
# Or save them locally with QiskitRuntimeService.save_account(token="YOUR_API_TOKEN", instance="YOUR_CRN")
# API token: From your IBM Quantum Platform account page (https://quantum.ibm.com/account)
# CRN: From the Instances page on the IBM Quantum Platform (e.g., ibm-q/open/main)
# Initialize the service (ensure API token and instance are set via env vars or saved)
service = QiskitRuntimeService(channel="ibm_quantum_platform")
# Get a least busy backend that supports Sampler
backend = service.least_busy(simulator=False, min_num_qubits=2, max_credits=10)
print(f"Using backend: {backend.name}")
# Create a simple Bell state circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
# Define the input for Sampler (a PUB: Primitive Unified Bloc)
pubs = [(qc,)] # A single circuit to run
# Run the circuit using SamplerV2 within a session
with Session(service=service, backend=backend) as session:
sampler = Sampler()
job = sampler.run(pubs=pubs)
print(f"Job ID: {job.job_id}")
result = job.result()
# Get the quasi-probability distribution result for the first PUB
quasi_dists = result[0].data.meas.get_counts()
print(f"Quasi-probability distribution: {quasi_dists}")