Skip to main content
IBM Quantum Platform

Systemhardware

Note

Masao Tokunari und Tamiya Onodera (14. Juni 2024)

Dieser Kurs basiert auf einem Live-Kurs an der Universität von Tokio.

Die pdf-Vorlesung dieser Lektion wurde in zwei Teile aufgeteilt. Download Teil 1 und Download Teil 2. Beachten Sie, dass einige Codeschnipsel veraltet sein könnten, da es sich um statische Bilder handelt.


1. Einführung

Diese Lektion beschäftigt sich mit moderner Quantencomputer-Hardware.

Wir beginnen damit, einige Versionen zu überprüfen und einige relevante Pakete zu importieren.

import statistics

from qiskit_ibm_runtime import QiskitRuntimeService

2. Backend und Ziel

Qiskit bietet eine API, um statische und dynamische Informationen über ein Quantengerät zu erhalten. Wir verwenden eine Backend-Instanz als Schnittstelle zu einem Gerät, das eine Target-Instanz enthält, ein abstraktes Maschinenmodell, das die relevanten Merkmale wie die Befehlssatzarchitektur (ISA) und alle damit verbundenen Eigenschaften oder Beschränkungen zusammenfasst. Lassen Sie uns diese Backend-Instanzen verwenden, um einige der Informationen zu erhalten, die Sie auf der Seite Compute-Ressourcen auf IBM Quantum® Platform sehen. Zunächst erstellen wir eine Backend-Instanz für ein Gerät von Interesse. Im Folgenden wählen wir "ibm_kyoto", "ibm_kawasaki" oder den am wenigsten ausgelasteten Eagle-Rechner. Ihr Zugang zu QPUs kann sich unterscheiden; aktualisieren Sie den Backend-Namen entsprechend.

service = QiskitRuntimeService()
# backend = service.backend("ibm_kawasaki") # an Eagle, if you have access to ibm_kawasaki
backend = service.least_busy(
    operational=True, simulator=False, min_num_qubits=127
)  # Eagle
backend.name

Output:

'ibm_strasbourg'

Wir beginnen mit einigen grundlegenden (statischen) Informationen über das Gerät.

print(
    f"""
{backend.name}, {backend.num_qubits} qubits
processor type = {backend.processor_type}
basis gates = {backend.basis_gates}
"""
)

Output:


ibm_strasbourg, 127 qubits
processor type = {'family': 'Eagle', 'revision': 3} 
basis gates = ['ecr', 'id', 'rz', 'sx', 'x']

2.1 Übung

Versuchen Sie, die grundlegenden Informationen über ein Heron-Gerät, "ibm_strasbourg", zu erhalten. Probieren Sie es selbst aus, aber wir haben unten einen Code eingefügt, den Sie selbst überprüfen können.

a_heron = service.backend("ibm_strasbourg")  # a Heron

# your code here
print(
    f"""
{backend.name}, {a_heron.num_qubits} qubits
processor type = {a_heron.processor_type}
basis gates = {a_heron.basis_gates}
"""
)

Output:


ibm_strasbourg, 133 qubits
processor type = {'family': 'Heron', 'revision': '1'} 
basis gates = ['cz', 'id', 'rz', 'sx', 'x']

2.2 Kopplungskarte

Wir zeichnen nun die Kopplungskarte des Geräts. Wie Sie sehen können, sind die Knoten Qubits, die nummeriert sind. Die Kanten zeigen Paare an, auf die man das 2-Qubit-Verschränkungsgatter direkt anwenden kann. Die Topologie wird als "Heavy-Hex-Gitter" bezeichnet.

# This function requires that Graphviz is installed. If you need to install Graphviz
# you can refer to:
# https://graphviz.org/download/#executable-packages for instructions.
try:
    fig = backend.coupling_map.draw()
except RuntimeError as ex:
    print(ex)
fig

Output:

Output of the previous code cell

3. Eigenschaften von Qubits

Das Eagle-Gerät hat 127 Qubits. Wir wollen die Eigenschaften einiger von ihnen kennenlernen.

for qn in range(backend.num_qubits):
    if qn >= 5:
        break
    print(f"{qn}: {backend.qubit_properties(qn)}")

Output:

0: QubitProperties(t1=0.000183686508736532, t2=0.00023613944465408068, frequency=4832100227.116953)
1: QubitProperties(t1=0.00048794378526038294, t2=9.007098375327869e-05, frequency=4736264354.075363)
2: QubitProperties(t1=0.00021247781834456527, t2=7.81037910324034e-05, frequency=4859349851.150393)
3: QubitProperties(t1=0.0002936462084765663, t2=0.00011400214529510604, frequency=4679749549.503852)
4: QubitProperties(t1=0.00044229440258559125, t2=0.0003181648356339447, frequency=4845872064.050596)

Berechnen wir den Median der T1 -Zeiten der Qubits. Vergleichen Sie das Ergebnis mit dem, das für das Gerät auf IBM Quantum Platform angezeigt wird.

t1s = [backend.qubit_properties(qq).t1 for qq in range(backend.num_qubits)]
f"Median T1: {(statistics.median(t1s)*10**6):.2f} \u03bcs"

Output:

'Median T1: 285.43 μs'

3.1 Übung

Berechnen Sie bitte den Median der T2 Zeiten der Qubits. Probieren Sie es selbst aus, aber wir haben unten einen Code eingefügt, den Sie selbst überprüfen können.

# Your code here

t2s = [backend.qubit_properties(qq).t2 for qq in range(backend.num_qubits)]
f"Median T2: {(statistics.median(t2s)*10**6):.2f} \u03bcs"

Output:

'Median T2: 173.10 μs'

3.2 Gate- und Auslesefehler

Wir wenden uns nun den Torfehlern zu. Zu Beginn untersuchen wir die Datenstruktur der Zielinstanz. Es ist ein Wörterbuch, dessen Schlüssel die Namen der Operationen sind.

target = backend.target
target.keys()

Output:

dict_keys(['measure', 'id', 'sx', 'delay', 'x', 'for_loop', 'rz', 'if_else', 'ecr', 'reset', 'switch_case'])

Seine Werte sind ebenfalls Wörterbücher. Schauen wir uns einige der Elemente des Wertes (Wörterbuch) für die Operation "sx" an.

for i, qq in enumerate(target["sx"]):
    if i >= 5:
        break
    print(i, qq, target["sx"][qq])

Output:

0 (0,) InstructionProperties(duration=6e-08, error=0.0007401311759115297)
1 (1,) InstructionProperties(duration=6e-08, error=0.0003163759907528654)
2 (2,) InstructionProperties(duration=6e-08, error=0.0003183859004638003)
3 (3,) InstructionProperties(duration=6e-08, error=0.00042235914178831863)
4 (4,) InstructionProperties(duration=6e-08, error=0.011163151923589715)

Dasselbe gilt für die Operationen "ecr" und "measure".

for i, edge in enumerate(target["ecr"]):
    if i >= 5:
        break
    print(i, edge, target["ecr"][edge])

Output:

0 (0, 14) InstructionProperties(duration=6.6e-07, error=0.01486295709788732)
1 (1, 0) InstructionProperties(duration=6.6e-07, error=0.015201590794522601)
2 (2, 1) InstructionProperties(duration=6.6e-07, error=0.00697838102630724)
3 (2, 3) InstructionProperties(duration=6.6e-07, error=0.008075067943986797)
4 (3, 4) InstructionProperties(duration=6.6e-07, error=0.0630164507876913)
for i, qq in enumerate(target["measure"]):
    if i >= 5:
        break
    print(i, qq, target["measure"][qq])

Output:

0 (0,) InstructionProperties(duration=1.6e-06, error=0.0078125)
1 (1,) InstructionProperties(duration=1.6e-06, error=0.155029296875)
2 (2,) InstructionProperties(duration=1.6e-06, error=0.057373046875)
3 (3,) InstructionProperties(duration=1.6e-06, error=0.02880859375)
4 (4,) InstructionProperties(duration=1.6e-06, error=0.01318359375)

Wie Sie sehen können, sind die Fehler beim Auslesen tendenziell größer als die der 2-Qubit-Operation, die wiederum tendenziell größer sind als die der 1-Qubit-Operation.

Nachdem wir die Datenstrukturen verstanden haben, können wir nun die Medianfehler für die „sx“- und die „ecr“-Gatter berechnen. Vergleichen Sie die Ergebnisse erneut mit denen, die für das Gerät auf IBM Quantum Platform angezeigt werden.

sx_errors = [inst_prop.error for inst_prop in target["sx"].values()]
f"Median SX error: {(statistics.median(sx_errors)):.3e}"

Output:

'Median SX error: 2.277e-04'
ecr_errors = [inst_prop.error for inst_prop in target["ecr"].values()]
f"Median ECR error: {(statistics.median(ecr_errors)):.3e}"

Output:

'Median ECR error: 6.895e-03'

4. Anhang

Ein beliebtes Merkmal von Qiskit ist seine Visualisierungsfunktion. Es umfasst Schaltkreisvisualisierer, Zustands- und Verteilungsvisualisierer und Zielvisualisierer. Die ersten beiden haben Sie bereits in den vorherigen Jupyter-Notebooks verwendet. Lassen Sie uns einige Möglichkeiten des Zielvisualisierers nutzen.

from qiskit.visualization import plot_gate_map

plot_gate_map(backend, font_size=14)

Output:

Output of the previous code cell
from qiskit.visualization import plot_error_map

plot_error_map(backend)

Output:

Output of the previous code cell
# Check Qiskit version
import qiskit

qiskit.__version__

Output:

'2.0.2'
War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.