주기적 경계 조건을 위한 Circuit Cutting
사용량 예상: Eagle 프로세서에서 약 2분 (참고: 이 값은 추정치이며, 실제 실행 시간은 다를 수 있습니다.)
배경
이 노트북에서는 인접한 두 Qubit 사이마다 2-Qubit 연산이 있는 주기적 Qubit 체인의 시뮬레이션을 다룹니다. 여기에는 첫 번째와 마지막 Qubit 간의 연산도 포함됩니다. 주기적 체인은 이징 모델(Ising model)이나 분자 시뮬레이션과 같은 물리학 및 화학 문제에서 자주 등장합니다.
현재 IBM Quantum® 장치는 평면 구조입니다. 일부 주기적 체인은 첫 번째와 마지막 Qubit이 서로 이웃하도록 토폴로지에 직접 배치할 수 있습니다. 그러나 문제 규모가 충분히 커지면 첫 번째와 마지막 Qubit이 서로 멀리 떨어지게 되어, 이 두 Qubit 간의 2-Qubit 연산을 위해 많은 SWAP Gate가 필요해집니다. 이러한 주기적 경계 문제는 이 논문에서 연구된 바 있습니다.
이 노트북에서는 첫 번째와 마지막 Qubit이 이웃하지 않는 유틸리티 규모의 주기적 체인 문제를 처리하기 위해 Circuit cutting을 사용하는 방법을 보여줍니다. 이 장거리 연결을 잘라내면 여분의 SWAP Gate를 피할 수 있으며, 그 대신 Circuit의 여러 인스턴스를 실행하고 고전적인 후처리를 수행합니다. 요약하자면, Cutting을 통해 장거리 2-Qubit 연산을 논리적으로 계산할 수 있습니다. 다시 말해, 이 방법은 커플링 맵의 연결성을 효과적으로 높여 SWAP Gate의 수를 줄여줍니다.
Cutting에는 두 가지 유형이 있습니다. Circuit의 와이어를 자르는 방법(wire cutting)과 2-Qubit Gate를 여러 단일 Qubit 연산으로 대체하는 방법(gate cutting)입니다. 이 노트북에서는 gate cutting에 집중합니다. gate cutting에 대한 자세한 내용은 qiskit-addon-cutting의 설명 자료와 해당 참고 문헌을 참조하세요. wire cutting에 대한 자세한 내용은 기댓값 추정을 위한 Wire Cutting 튜토리얼이나 qiskit-addon-cutting의 튜토리얼을 참조하세요.
요구 사항
이 튜토리얼을 시작하기 전에 다음이 설치되어 있는지 확인하세요:
- Qiskit SDK v1.2 이상 (
pip install qiskit) - Qiskit Runtime v0.3 이상 (
pip install qiskit-ibm-runtime) - Circuit cutting Qiskit addon v.9.0 이상 (
pip install qiskit-addon-cutting)
설정
# Added by doQumentation — required packages for this notebook
!pip install -q matplotlib numpy qiskit qiskit-addon-cutting qiskit-ibm-runtime
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from qiskit.transpiler import PassManager
from qiskit.transpiler.passes import (
BasisTranslator,
Optimize1qGatesDecomposition,
)
from qiskit.circuit.equivalence_library import (
SessionEquivalenceLibrary as sel,
)
from qiskit.converters import circuit_to_dag, dag_to_circuit
from qiskit.result import sampled_expectation_value
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit.circuit.library import TwoLocal
from qiskit_addon_cutting import (
cut_gates,
generate_cutting_experiments,
reconstruct_expectation_values,
)
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import SamplerV2, SamplerOptions, Batch