Installation & Setup
To interface with IBM Quantum backends, install the qiskit
extra,
pip install 'qbraid[qiskit]'
and configure your IBM credentials.
Basic Usage
The QiskitRuntimeProvider
allows you to easily submit jobs to IBM Quantum devices. There are several ways to initialize the provider:
- 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"
)
- Authentication with IBM Quantum:
provider = QiskitRuntimeProvider(
channel="ibm_quantum",
token="MY_IBM_QUANTUM_TOKEN"
)
- 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"
- 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.