니시모리 상전이
사용 시간 예상: Heron r2 프로세서 기준 3분 (참고: 이는 예상치이며, 실제 실행 시간은 다를 수 있습니다.)
배경
이 튜토리얼은 IBM® 양자 프로세서에서 니시모리 상전이를 구현하는 방법을 설명합니다. 이 실험은 원래 Realizing the Nishimori transition across the error threshold for constant-depth quantum circuits에서 소개되었습니다.
니시모리 상전이는 랜덤 결합 이징 모델에서 단범위 질서 위상과 장범위 질서 위상 간의 전이를 말합니다. 양자 컴퓨터에서 장범위 질서 위상은 전체 장치에 걸쳐 Qubit들이 얽힌 상태로 나타납니다. 이 고도로 얽힌 상태는 측정에 의한 얽힘 생성 (GEM) 프로토콜을 사용하여 준비됩니다. 중간 Circuit 측정을 활용함으로써 GEM 프로토콜은 일정 깊이의 Circuit만으로도 전체 장치에 걸쳐 Qubit들을 얽을 수 있습니다. 이 튜토리얼은 GEM Suite 소프트웨어 패키지의 GEM 프로토콜 구현을 사용합니다.
요구 사항
이 튜토리얼을 시작하기 전에 다음이 설치되어 있는지 확인하세요:
- Qiskit SDK v1.0 이상 (시각화 지원 포함)
- Qiskit Runtime v0.22 이상 (
pip install qiskit-ibm-runtime) - GEM Suite (
pip install gem-suite)
설정
# Added by doQumentation — required packages for this notebook
!pip install -q gem-suite matplotlib qiskit qiskit-ibm-runtime
import matplotlib.pyplot as plt
from collections import defaultdict
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit.transpiler import generate_preset_pass_manager
from gem_suite import PlaquetteLattice
from gem_suite.experiments import GemExperiment
1단계: 고전적 입력을 양자 문제로 매핑
GEM 프로토콜은 격자로 설명되는 Qubit 연결성을 가진 양자 프로세서에서 작동합니다. 오늘날의 IBM 양자 프로세서는 heavy hex 격자를 사용합니다. 프로세서의 Qubit들은 차지하는 격자의 단위 셀에 따라 플래킷으로 그룹화됩니다. Qubit이 두 개 이상의 단위 셀에 속할 수 있으므로, 플래킷들은 서로 분리되어 있지 않습니다. Heavy hex 격자에서 플래킷은 12개의 Qubit을 포함합니다. 플래킷 자체도 격자를 형성하며, 두 플래킷이 Qubit을 공유하면 연결됩니다. Heavy hex 격자에서 인접한 플래킷은 3개의 Qubit을 공유합니다.
GEM Suite 소프트웨어 패키지에서 GEM 프로토콜을 구현하는 기본 클래스는 PlaquetteLattice이며, 이는 플래킷의 격자(heavy hex 격자와는 다릅니다)를 나타냅니다. PlaquetteLattice는 Qubit 결합 맵으로부터 초기화할 수 있습니다. 현재는 heavy hex 결합 맵만 지원됩니다.
다음 코드 셀은 IBM 양자 프로세서의 결합 맵에서 플래킷 격자를 초기화합니다. 플래킷 격자가 항상 전체 하드웨어를 포함하지는 않습니다. 예를 들어, ibm_torino는 총 133개의 Qubit을 가지지만, 장치에 맞는 가장 큰 플래킷 격자는 그 중 125개만 사용하며 총 18개의 플래킷으로 구성됩니다. 다른 Qubit 수를 가진 IBM Quantum® 장치에서도 유사한 현상이 관찰됩니다.
# QiskitRuntimeService.save_account(channel="ibm_quantum", token="<YOUR_API_KEYN>", overwrite=True, set_as_default=True)
service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=127
)
plaquette_lattice = PlaquetteLattice.from_coupling_map(backend.coupling_map)
print(f"Number of qubits in backend: {backend.num_qubits}")
print(
f"Number of qubits in plaquette lattice: {len(list(plaquette_lattice.qubits()))}"
)
print(f"Number of plaquettes: {len(list(plaquette_lattice.plaquettes()))}")
Number of qubits in backend: 133
Number of qubits in plaquette lattice: 125
Number of plaquettes: 18
플래킷 격자의 그래프 표현 다이어그램을 생성하여 시각화할 수 있습니다. 다이어그램에서 플래킷은 레이블이 붙은 육각형으로 표현되며, 두 플래킷이 Qubit을 공유하면 간선으로 연결됩니다.
plaquette_lattice.draw_plaquettes()
plaquettes 메서드를 사용하여 개별 플래킷이 포함하는 Qubit 등의 정보를 조회할 수 있습니다.
# Get a list of the plaquettes
plaquettes = list(plaquette_lattice.plaquettes())
# Display information about plaquette 0
plaquettes[0]
PyPlaquette(index=0, qubits=[0, 1, 2, 3, 4, 15, 16, 19, 20, 21, 22, 23], neighbors=[3, 1])
플래킷 격자를 구성하는 기본 Qubit의 다이어그램도 생성할 수 있습니다.
plaquette_lattice.draw_qubits()

Qubit 레이블과 연결된 Qubit을 나타내는 간선 외에도, 다이어그램에는 GEM 프로토콜과 관련된 세 가지 추가 정보가 포함됩니다:
- 각 Qubit은 음영 처리(회색)되거나 음영 없음으로 표시됩니다. 음영 처리된 Qubit은 이징 모델의 사이트를 나타내는 "사이트" Qubit이며, 음영 없는 Qubit은 사이트 Qubit 간의 상호 작용을 매개하는 "결합" Qubit입니다.
- 각 사이트 Qubit은 (A) 또는 (B)로 레이블이 지정되어 GEM 프로토콜에서 사이트 Qubit이 수행할 수 있는 두 가지 역할 중 하나를 나타냅니다 (역할은 나중에 설명됩니다).
- 각 간선은 여섯 가지 색상 중 하나로 색칠되어 간선을 여섯 그룹으로 분할합니다. 이 분할은 2-Qubit Gate를 병렬화하는 방법과 노이즈가 있는 양자 프로세서에서 다른 양의 오류를 유발할 가능성이 있는 다양한 스케줄링 패턴을 결정합니다. 그룹 내 간선은 서로 분리되어 있으므로, 해당 간선에 대해 2-Qubit Gate 레이어를 동시에 적용할 수 있습니다. 실제로, 여섯 가지 색상을 두 색상씩 세 그룹으로 나누어 각 두 색상의 합집합이 여전히 분리되도록 할 수 있습니다. 따라서 모든 간선을 활성화하는 데 단 세 레이어의 2-Qubit Gate만 필요합니다. 여섯 색상을 이렇게 분할하는 방법은 12가지가 있으며, 각 분할은 서로 다른 3-레이어 Gate 스케줄을 생성합니다.
플래킷 격자를 생성했다면, 다음 단계는 플래킷 격자와 실험을 실행할 Backend를 모두 전달하여 GemExperiment 객체를 초기화하는 것입니다. GemExperiment 클래스는 Circuit 생성, 작업 제출, 데이터 분석을 포함한 GEM 프로토콜의 실제 구현을 관리합니다. 다음 코드 셀은 플래킷 격자를 두 개의 플래킷(21개의 Qubit)으로만 제한하여 실험 클래스를 초기화함으로써, 하드웨어의 노이즈가 신호를 압도하지 않도록 실험 규모를 줄입니다.
gem_exp = GemExperiment(plaquette_lattice.filter([9, 12]), backend=backend)
# visualize the plaquette lattice after filtering
plaquette_lattice.filter([9, 12]).draw_qubits()

GEM 프로토콜 Circuit은 다음 단계로 구성됩니다:
- 모든 Qubit에 Hadamard Gate를 적용하여 전체 상태를 준비합니다.
- 연결된 모든 Qubit 쌍에 Gate를 적용합니다. 이는 3개의 Gate 레이어를 사용하여 달성할 수 있습니다. 각 Gate는 사이트 Qubit과 결합 Qubit에 작용합니다. 사이트 Qubit이 (B)로 레이블된 경우, 각도는