Skip to main content
IBM Quantum Platform

하드웨어

Note

도쿠나리 마사오와 오노데라 타미야 (2024년 6월 14일)

이 강좌는 도쿄대학교에서 제공하는 라이브 강좌를 기반으로 합니다.

이 레슨의 강의 PDF는 두 부분으로 나뉘어 있습니다. 1부를 다운로드하고 2부를 다운로드하세요. 일부 코드 스니펫은 정적 이미지이므로 더 이상 사용되지 않을 수 있습니다.


1. 소개

이 단원에서는 최신 양자 컴퓨팅 하드웨어를 살펴봅니다.

먼저 일부 버전을 확인하고 관련 패키지를 가져오는 것으로 시작하겠습니다.

import statistics

from qiskit_ibm_runtime import QiskitRuntimeService

2. 백엔드와 대상

키스킷은 양자 디바이스에 대한 정적 및 동적 정보를 얻을 수 있는 API를 제공합니다. 당사는 백엔드 인스턴스를 사용하여 장치와 인터페이스하며, 여기에는 명령어 집합 아키텍처(ISA) 및 이와 관련된 모든 속성 또는 제약 조건과 같은 관련 기능을 요약하는 추상 머신 모델인 Target 인스턴스가 포함되어 있습니다. 이러한 백엔드 인스턴스를 사용하여 컴퓨팅 리소스 페이지에 표시되는 정보 중 일부를 가져와 보겠습니다 의 IBM Quantum® 플랫폼에 표시됩니다. 먼저 관심 있는 디바이스에 대한 백엔드 인스턴스를 생성합니다. 다음에서는 "ibm_kyoto", "ibm_kawasaki" 또는 가장 사용량이 적은 Eagle 머신을 선택합니다. QPU에 대한 액세스 권한이 다를 수 있으므로 그에 따라 백엔드 이름을 업데이트하세요.

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'

디바이스에 대한 몇 가지 기본(정적) 정보부터 시작합니다.

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 운동

Heron 장치에 대한 기본 정보인 "ibm_strasbourg"를 가져옵니다. 직접 확인하실 수 있도록 아래에 코드를 추가했습니다.

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 결합 지도

이제 디바이스의 커플링 맵을 그립니다. 보시다시피 노드는 번호가 매겨진 큐비트입니다. 가장자리는 2큐비트 얽힘 게이트를 직접 적용할 수 있는 쌍을 나타냅니다. 이 토폴로지를 "무거운 16진수 격자"라고 합니다.

# 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. 큐비트 특성

이글 디바이스에는 127개의 큐비트가 있습니다. 그중 몇 가지의 속성을 알아봅시다.

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)

큐비트의 T1 회 시간의 중앙값을 계산해 봅시다. 이 결과를 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"

Output:

'Median T1: 285.43 μs'

3.1 운동

Pease는 큐비트의 T2 배의 중앙값을 계산합니다. 직접 확인하실 수 있도록 아래에 코드를 추가했습니다.

# 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 게이트 및 판독 오류

이제 게이트 오류로 넘어갑니다. 우선 대상 인스턴스의 데이터 구조를 연구합니다. 키가 작업 이름인 사전입니다.

target = backend.target
target.keys()

Output:

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

그 값은 사전이기도 합니다. 'sx' 연산에 대한 값(사전)의 몇 가지 항목을 살펴 보겠습니다.

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)

'ecr' 및 '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)

보시다시피, 판독 오차는 2쿼비트 연산보다 1쿼비트 연산보다 더 큰 경향이 있으며, 이는 다시 1쿼비트 연산보다 더 큰 경향이 있습니다.

데이터 구조를 이해했으므로, 이제 'sx' 게이트와 'ecr' 게이트의 중앙값 오차를 계산할 준비가 되었습니다. 다시 한 번, 이 결과를 IBM Quantum Platform 에 게시된 해당 기기의 결과와 비교해 보십시오.

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. 부록

키스킷의 인기 기능은 시각화 기능입니다. 여기에는 회로 시각화 도구, 상태 및 분포 시각화 도구, 대상 시각화 도구가 포함됩니다. 앞의 두 개는 이미 이전 주피터 노트북에서 사용하셨습니다. 대상 시각화 도구의 몇 가지 기능을 사용해 보겠습니다.

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'
이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.