Perkakasan
Masao Tokunari dan Tamiya Onodera (14 Jun 2024)
Kursus ini berdasarkan kursus langsung yang disampaikan di Universiti Tokyo.
PDF kuliah pelajaran ini dibahagikan kepada dua bahagian. Muat turun bahagian 1 dan muat turun bahagian 2. Perlu diingat bahawa beberapa coretan kod mungkin sudah lapuk memandangkan ini adalah imej statik.
1. Pengenalan​
Pelajaran ini meneroka perkakasan pengkomputeran kuantum moden.
Kita akan mulakan dengan mengesahkan beberapa versi dan mengimport pakej-pakej yang berkaitan.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
import statistics
from qiskit_ibm_runtime import QiskitRuntimeService
2. Backend dan Target​
Qiskit menyediakan API untuk mendapatkan maklumat, sama ada statik mahupun dinamik, tentang peranti kuantum. Kita menggunakan contoh Backend untuk berinteraksi dengan peranti, yang merangkumi contoh Target — model mesin abstrak yang meringkaskan ciri-ciri penting seperti seni bina set arahan (ISA) serta sebarang sifat atau kekangan yang berkaitan dengannya. Mari gunakan contoh-contoh Backend ini untuk mendapatkan sebahagian maklumat yang kamu lihat pada halaman Compute resources di IBM Quantum® Platform. Pertama, kita cipta contoh Backend untuk peranti yang diminati. Dalam contoh berikut, kita pilih "ibm_kyoto", "ibm_kawasaki" atau mesin Eagle yang paling kurang sibuk. Akses kamu kepada QPU mungkin berbeza; kemaskini nama Backend mengikut keperluan.
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
'ibm_strasbourg'
Kita mulakan dengan beberapa maklumat asas (statik) tentang peranti tersebut.
print(
f"""
{backend.name}, {backend.num_qubits} qubits
processor type = {backend.processor_type}
basis gates = {backend.basis_gates}
"""
)
ibm_strasbourg, 127 qubits
processor type = {'family': 'Eagle', 'revision': 3}
basis gates = ['ecr', 'id', 'rz', 'sx', 'x']
2.1 Latihan​
Cuba dapatkan maklumat asas tentang peranti Heron, "ibm_strasbourg". Cuba sendiri dulu, tetapi kod telah disediakan di bawah untuk kamu semak.
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}
"""
)
ibm_strasbourg, 133 qubits
processor type = {'family': 'Heron', 'revision': '1'}
basis gates = ['cz', 'id', 'rz', 'sx', 'x']
2.2 Peta gandingan​
Sekarang kita lukis peta gandingan peranti. Seperti yang dapat kamu lihat, nod adalah Qubit yang diberi nombor. Tepi menunjukkan pasangan yang boleh dikenakan gate pembelit 2-Qubit secara langsung. Topologi ini dipanggil "kekisi hex berat" (heavy-hex lattice).
# 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

3. Sifat-sifat Qubit​
Peranti Eagle mempunyai 127 Qubit. Mari dapatkan sifat-sifat sebahagian daripadanya.
for qn in range(backend.num_qubits):
if qn >= 5:
break
print(f"{qn}: {backend.qubit_properties(qn)}")
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)
Mari kira median masa T1 bagi Qubit-Qubit tersebut. Bandingkan hasilnya dengan yang ditunjukkan untuk peranti di IBM Quantum Platform.
t1s = [backend.qubit_properties(qq).t1 for qq in range(backend.num_qubits)]
f"Median T1: {(statistics.median(t1s)*10**6):.2f} \u03bcs"
'Median T1: 285.43 μs'
3.1 Latihan​
Sila kira median masa T2 bagi Qubit-Qubit tersebut. Cuba sendiri dulu, tetapi kod telah disediakan di bawah untuk kamu semak.
# 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"
'Median T2: 173.10 μs'
3.2 Ralat Gate dan bacaan​
Sekarang kita beralih kepada ralat Gate. Untuk permulaan, kita kaji struktur data bagi contoh Target. Ia adalah kamus yang kuncinya merupakan nama operasi.
target = backend.target
target.keys()
dict_keys(['measure', 'id', 'sx', 'delay', 'x', 'for_loop', 'rz', 'if_else', 'ecr', 'reset', 'switch_case'])
Nilainya juga merupakan kamus. Mari lihat beberapa item daripada nilai (kamus) untuk operasi 'sx'.
for i, qq in enumerate(target["sx"]):
if i >= 5:
break
print(i, qq, target["sx"][qq])
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)
Mari lakukan perkara yang sama untuk operasi 'ecr' dan 'measure'.
for i, edge in enumerate(target["ecr"]):
if i >= 5:
break
print(i, edge, target["ecr"][edge])
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])
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)
Seperti yang dapat kamu lihat, ralat bacaan cenderung lebih besar berbanding operasi 2-Qubit, yang seterusnya cenderung lebih besar daripada operasi 1-Qubit.
Setelah memahami struktur data, kita sudah bersedia untuk mengira ralat median bagi Gate 'sx' dan 'ecr'. Sekali lagi, bandingkan hasilnya dengan yang ditunjukkan untuk peranti di IBM Quantum Platform.
sx_errors = [inst_prop.error for inst_prop in target["sx"].values()]
f"Median SX error: {(statistics.median(sx_errors)):.3e}"
'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}"
'Median ECR error: 6.895e-03'
4. Lampiran​
Salah satu ciri popular Qiskit ialah keupayaan visualisasinya. Ini merangkumi visualizer Circuit, visualizer keadaan dan taburan, serta visualizer Target. Kamu sudah menggunakan dua yang pertama dalam notebook Jupyter sebelumnya. Mari gunakan beberapa keupayaan visualizer Target.
from qiskit.visualization import plot_gate_map
plot_gate_map(backend, font_size=14)

from qiskit.visualization import plot_error_map
plot_error_map(backend)

# Check Qiskit version
import qiskit
qiskit.__version__
'2.0.2'