API Reference: qbraid.runtime.ibm

Installation & Setup

To interface with IBM Quantum backends, install the qiskit extra,

pip install 'qbraid[qiskit]'

and configure your IBM credentials.

When using the ibm_cloud channel, the instance value is your IBM Cloud CRN (Cloud Resource Name) — a string that looks like crn:v1:bluemix:public:quantum-computing:<region>:a/<account-id>:<service-instance-id>::. It identifies a Qiskit Runtime service instance in your IBM Cloud account and is not a qBraid identifier. You can find it in the IBM Cloud console under the Qiskit Runtime service instance you want to use. Pair it with your IBM Cloud API key as the token.

Basic Usage

The QiskitRuntimeProvider allows you to easily submit jobs to IBM Quantum devices. There are several ways to initialize the provider:

  1. Direct authentication with IBM Cloud:
from qbraid.runtime import QiskitRuntimeProvider

provider = QiskitRuntimeProvider(
    channel="ibm_cloud",
    token="MY_IBM_CLOUD_API_KEY",
    instance="MY_IBM_CLOUD_CRN"
)
  1. Authentication with IBM Quantum:
provider = QiskitRuntimeProvider(
    channel="ibm_quantum",
    token="MY_IBM_QUANTUM_TOKEN"
)
  1. Using environment variables:
export QISKIT_IBM_TOKEN="MY_IBM_CLOUD_API_KEY"
export QISKIT_IBM_INSTANCE="MY_IBM_CLOUD_CRN"
export QISKIT_IBM_CHANNEL="ibm_cloud"
  1. Using credentials stored in $HOME/.qiskit/qiskit-ibm.json

When using environment variables or stored credentials, you can initialize the provider without any arguments:

provider = QiskitRuntimeProvider()

Once initialized, you can list available devices and access their information:

# Get list of available devices
provider.get_devices()
# [<qbraid.runtime.ibm.device.QiskitBackend('ibm_brisbane')>,
#  <qbraid.runtime.ibm.device.QiskitBackend('ibm_sherbrooke')>,
#  <qbraid.runtime.ibm.device.QiskitBackend('ibm_fez')>,
#  <qbraid.runtime.ibm.device.QiskitBackend('ibm_kyiv')>,
#  <qbraid.runtime.ibm.device.QiskitBackend('ibm_torino')>,
#  <qbraid.runtime.ibm.device.QiskitBackend('ibm_marrakesh')>]

# Select a specific device
device = provider.get_device('ibm_brisbane')

# View device metadata
device.metadata()
# {'device_id': 'ibm_brisbane',
#  'device_type': 'QPU',
#  'num_qubits': 127,
#  'instance': 'ibm-q/open/main',
#  'max_shots': 100000,
#  'status': 'ONLINE',
#  'queue_depth': 37}

Our chosen device is the IBM Osaka Backend, which we will now submit a Qiskit job to.

from qiskit import QuantumCircuit

circuit = QuantumCircuit(2)
circuit.h(0)
job = device.run(circuit, shots=10)

So now we have job which is of type QiskitJob, which inherits from QuantumJob. To see the results, we can do the following:

res = job.result()

res.data.get_counts()
# {'00': 6, '11': 4}

res.data.measurements
# array([[1, 1],
#        [0, 0],
#        [0, 0],
#        [1, 1],
#        [0, 0],
#        [1, 1],
#        [0, 0],
#        [1, 1],
#        [0, 0],
#        [0, 0]])

See how to visualize these results in the Visualization section.