Backend properties¶
Overview¶
In contrast to a backend configuration that remains static on the timescale of typical experiments, the properties of a backend are dynamical quantities that update at device calibration. Devices are nominally calibrated once over a 24-hour period, and the backend properties update once this calibration sequence is complete. The properties play a critical role in quantum circuit execution, as the parameters within the properties are utilized for noise-aware circuit mapping and optimization (transpilation). Additionally, backend properties are used for constructing noise models of a device for use in classical simulation techniques.
Backend properties¶
You can most easily obtain a quantum system’s properties with Qiskit, but you can also obtain them by downloading the “calibrations” CSV file for a given system on IBM Quantum Experience (see View backend configuration on IBM Quantum Experience for more information).
backend name -
backend.properties().backend_name
gives the name of the system.backend version -
backend.properties().backend_version
specifies the version of the system, as described in the Backend versioning section.last update date -
backend.properties().last_update_date
gives the UTC time at which the properties information was last updated. This is the time at which the full properties file was returned from the device. Individual elements in the properties give the times at which they were computed. Depending on the device calibration schedule, these times can be markedly different than the last update date.qubits -
backend.properties().qubits
contains information on the physical attributes of the qubits. This includes the qubit frequency in GHz, T1 and T2 times in µs, and readout error. As shown below, the readout_error is further partitioned intoprob_meas0_prep1
andprob_meas1_prep0
, indicating the probability of preparing a given computational basis state, but measuring the orthogonal state. The readout error is taken to be the average of these two values. Note thatprob_meas0_prep1
is usually the dominant factor in the readout error due to relaxation during the measurement process. The qubits field is a list indexed by the qubit number.[Nduv('2020-06-05T08:59:55Z', T1, µs, 72.75657779304275), Nduv('2020-06-05T09:01:05Z', T2, µs, 131.16634823903556), Nduv('2020-06-05T10:16:38Z', frequency, GHz, 4.968918179746842), Nduv('2020-06-05T08:55:52Z', readout_error, , 0.016666666666666607), Nduv('2020-06-05T08:55:52Z', prob_meas0_prep1, , 0.030000000000000027), Nduv('2020-06-05T08:55:52Z', prob_meas1_prep0, , 0.0033333333333333335)]
We see that each qubit parameter is expressed as an
Nduv
(name, date, unit value) object containing the UTC time at which the parameter was updated, the parameter name, parameter units, and the actual numerical parameter value.gates -
backend.properties().gates
gives detailed information on each gate that the system supports executing. For every single-qubit gate listed in the system basis gates, there exists an entry in the properties that gives the details of that gate, for each qubit on which the gate can be applied. Each entry is in the form of aGate
object:Gate(gate='u2', name='u2_0', parameters=[Nduv('2020-06-06T09:06:46Z', gate_error, , 0.00022436814887248838), Nduv('2020-06-06T10:03:18Z', gate_length, ns, 35.55555555555556)], qubits=[0])
and lists the kind of gate (
u2
in the example), its name, a list specifying the qubits on which the gate acts, and aparameters
attribute,gates.parameters
:[Nduv('2020-06-06T09:06:46Z', gate_error, , 0.00022436814887248838), Nduv('2020-06-06T10:03:18Z', gate_length, ns, 35.55555555555556)]
containing
Nduv
objects specifying the gate error and gate length.The same holds for multi-qubit gates, where there is an entry for each directed edge in the system coupling map. For symmetric coupling maps, the directionality of the underlying gate is still important. For example,
Gate(gate='cx', name='cx3_4', parameters=[Nduv('2020-06-06T10:03:18Z', gate_error, , 0.009793933588297388), Nduv('2020-06-06T10:03:18Z', gate_length, ns, 327.1111111111111)], qubits=[3, 4])
versus
Gate(gate='cx', name='cx4_3', parameters=[Nduv('2020-06-06T10:03:18Z', gate_error, , 0.009793933588297388), Nduv('2020-06-06T10:03:18Z', gate_length, ns, 362.66666666666663)], qubits=[4, 3])