Qiskit Runtime
qiskit_ibm_runtime
Modules related to Qiskit Runtime IBM Client.
Qiskit Runtime is a new architecture that streamlines computations requiring many iterations. These experiments will execute significantly faster within its improved hybrid quantum/classical process.
Primitives and sessions
Qiskit Runtime has two predefined primitives: Sampler
and Estimator
. These primitives provide a simplified interface for performing foundational quantum computing tasks while also accounting for the latest developments in quantum hardware and software.
Qiskit Runtime also has the concept of a session. Jobs submitted within a session are prioritized by the scheduler. A session allows you to make iterative calls to the quantum computer more efficiently.
Below is an example of using primitives within a session:
from qiskit_ibm_runtime import QiskitRuntimeService, Session
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import RealAmplitudes
from qiskit.circuit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
# Initialize account.
service = QiskitRuntimeService()
# Prepare inputs.
psi = RealAmplitudes(num_qubits=2, reps=2)
H1 = SparsePauliOp.from_list([("II", 1), ("IZ", 2), ("XI", 3)])
theta = [0, 1, 1, 2, 3, 5]
# Bell Circuit
qr = QuantumRegister(2, name="qr")
cr = ClassicalRegister(2, name="cr")
qc = QuantumCircuit(qr, cr, name="bell")
qc.h(qr[0])
qc.cx(qr[0], qr[1])
qc.measure(qr, cr)
backend = service.least_busy(operational=True, simulator=False)
bell_isa_circuit = pm.run(qc)
psi_isa_circuit = pm.run(psi)
isa_observables = H1.apply_layout(psi_isa_circuit.layout)
with Session(service=service, backend=backend) as session:
# Submit a request to the Sampler primitive within the session.
sampler = Sampler(session=session)
job = sampler.run([bell_isa_circuit])
pub_result = job.result()[0]
print(f"Counts: {pub_result.data.cr.get_counts()}")
# Submit a request to the Estimator primitive within the session.
estimator = Estimator(session=session)
estimator.options.resilience_level = 1 # Set options.
job = estimator.run(
[(psi_isa_circuit, isa_observables, theta)]
)
pub_result = job.result()[0]
print(f"Expectation values: {pub_result.data.evs}")
Backend data
QiskitRuntimeService
also has methods, such as backend()
, backends()
, and least_busy()
, that allow you to query for a target backend to use. These methods return one or more IBMBackend
instances that contains methods and attributes describing the backend.
Supplementary Information
Account initialization
You need to initialize your account before you can start using the Qiskit Runtime service. This is done by initializing a QiskitRuntimeService
instance with your account credentials. If you don’t want to pass in the credentials each time, you can use the QiskitRuntimeService.save_account()
method to save the credentials on disk.
Qiskit Runtime is available on both IBM Cloud and IBM Quantum, and you can specify channel="ibm_cloud"
for IBM Cloud and channel="ibm_quantum"
for IBM Quantum. The default is IBM Cloud.
Runtime Jobs
When you use the run()
method of the Sampler
or Estimator
to invoke the primitive, a RuntimeJob
instance is returned. This class has all the basic job methods, such as RuntimeJob.status()
, RuntimeJob.result()
, and RuntimeJob.cancel()
.
Logging
qiskit-ibm-runtime
uses the qiskit_ibm_runtime
logger.
Two environment variables can be used to control the logging:
QISKIT_IBM_RUNTIME_LOG_LEVEL
: Specifies the log level to use.If an invalid level is set, the log level defaults to
WARNING
. The valid log levels areDEBUG
,INFO
,WARNING
,ERROR
, andCRITICAL
(case-insensitive). If the environment variable is not set, then the parent logger’s level is used, which also defaults toWARNING
.
QISKIT_IBM_RUNTIME_LOG_FILE
: Specifies the name of the log file to use. If specified,messages will be logged to the file only. Otherwise messages will be logged to the standard error (usually the screen).
For more advanced use, you can modify the logger itself. For example, to manually set the level to WARNING
:
import logging
logging.getLogger('qiskit_ibm_runtime').setLevel(logging.WARNING)
Classes
QiskitRuntimeService ([channel, token, url, ...]) | Class for interacting with the Qiskit Runtime service. |
Estimator | alias of EstimatorV1 |
EstimatorV1 ([backend, session, options]) | Class for interacting with Qiskit Runtime Estimator primitive service. |
EstimatorV2 ([backend, session, options]) | Class for interacting with Qiskit Runtime Estimator primitive service. |
Sampler | alias of SamplerV1 |
SamplerV1 ([backend, session, options]) | Class for interacting with Qiskit Runtime Sampler primitive service. |
SamplerV2 ([backend, session, options]) | Class for interacting with Qiskit Runtime Sampler primitive service. |
Session ([service, backend, max_time]) | Class for creating a Qiskit Runtime session. |
IBMBackend (configuration, service, api_client) | Backend class interfacing with an IBM Quantum backend. |
RuntimeJob (backend, api_client, ...[, ...]) | Representation of a runtime program execution. |
RuntimeJobV2 (backend, api_client, ...[, ...]) | Representation of a runtime V2 primitive exeuction. |
RuntimeOptions ([backend, image, log_level, ...]) | Class for representing generic runtime execution options. |
RuntimeEncoder (*[, skipkeys, ensure_ascii, ...]) | JSON Encoder used by runtime service. |
RuntimeDecoder (*args, **kwargs) | JSON Decoder used by runtime service. |