주 콘텐츠로 건너뛰기

Orbit - Quantum Elements의 Qiskit Function

API 참조를 참조하세요

참고

Qiskit Functions는 IBM Quantum® Premium Plan, Flex Plan, On-Prem(IBM Quantum Platform API를 통한) Plan 사용자만 이용할 수 있는 실험적 기능입니다. 이는 미리보기 릴리스 상태이며 변경될 수 있습니다.

개요

양자 하드웨어는 계속 발전하고 있지만, 노이즈와 결어긋남(decoherence)은 여전히 실용적인 양자 회로의 깊이와 신뢰성을 제한합니다. 사용 가능한 접근 방식 중 세 가지 상호 보완적인 기술이 이러한 한계를 상당히 완화할 수 있습니다: dynamical decoupling(DD), 최적화된 transpilation, 그리고 측정 오류 완화(MEM)입니다. 최적화된 transpilation은 회로 깊이를 줄이고 대상 하드웨어의 연결성에 더 잘 맞도록 회로를 정렬하며, DD는 신중하게 설계된 제어 시퀀스를 통해 유휴 시간 노이즈를 억제하고, MEM은 판독 오류의 영향을 줄이며 후처리 중에 적용될 수 있습니다.

효과적인 DD 전략을 선택하는 것은 수많은 시퀀스 계열이 존재하고, 한 회로나 노이즈 환경에서 잘 작동하는 시퀀스가 다른 환경에서는 잘 작동하지 않을 수 있기 때문에 특히 쉽지 않습니다. Transpilation, DD, MEM의 이점은 문제, 하드웨어, 워크로드에 따라 달라집니다. 개별적으로 또는 조합하여 사용하면 성능을 향상시킬 수 있지만, 모든 구성에서 보편적으로 유익한 것은 아닙니다.

Quantum Elements가 개발한 Qiskit Function인 Orbit은 이 세 가지 구성 요소를 통합된 워크플로우로 원활하게 결합하여 IBM Quantum 하드웨어에서의 회로 실행을 개선하는 데 쉽게 사용할 수 있도록 합니다. 기본 형태에서 Orbit은 원래의 회로 로직을 유지하면서 유휴 기간 동안 양자 상태를 보호하는 능동적 오류 억제 전략을 자동으로 적용합니다. 특히, 이는 추가적인 양자 또는 고전적 전처리 시간을 도입하지 않고 이루어지므로, 워크플로우 내에서 불필요한 추가 비용이나 대기 시간을 피할 수 있습니다.

Orbit은 블랙박스처럼 작동하는 대신, 사용자가 특정 실험에 맞게 최적화 구성 요소를 평가하고 미세 조정할 수 있도록 합니다. 사용자는 최적화된 transpilation, DD, MEM을 독립적으로 활성화 또는 비활성화할 수 있으며, 자동화된 DD 선택과 사용자 지정 시퀀스를 비교하고, 동일한 워크플로우 내에서 여러 구성을 실행할 수 있습니다. 각 구성을 원본 회로와 비교함으로써, 사용자는 어떤 기술이 자신의 회로와 백엔드에 측정 가능한 이점을 제공하는지 판단하고, 여러 최적화 방법 간의 상호 작용을 파악하며, 자신의 실험 목표를 가장 잘 뒷받침하는 구성을 선택할 수 있습니다. 이 과정은 사용자가 성능 향상이 어디서 비롯되는지 이해하고, 주어진 워크로드에 대해 양자 회로를 최적화할 때 더 정보에 입각한 결정을 내리도록 안내합니다.

설명

Orbit은 IBM Quantum 백엔드에서 양자 회로의 실행을 향상시키도록 설계되었습니다. 자동 모드에서는 사용자가 수동으로 선택하거나 구성할 필요 없이 고차(高次)의 견고한 DD 시퀀스를 원활하게 적용할 수 있습니다. 고급 사용자는 대신 사용 가능한 고차 시퀀스로 실험하여 특정 회로에 대해 최상의 성능을 제공하는 접근 방식을 식별하고 최적화할 수 있습니다.

Orbit은 또한 별도의 교정 및 완화 워크플로우에 일반적으로 필요한 추가 작업(job) 제출 없이 즉각적인 MEM을 제공합니다. mid-circuit measurement가 있는 양자 오류 정정 회로나 dynamic circuit과 같이 transpilation이 회로 구조를 변경해서는 안 되는 워크로드의 경우, Orbit은 사용자의 기존 transpilation 전략을 방해하지 않고 DD와 MEM을 적용할 수 있습니다. 이미 선호하는 접근 방식이 없는 사용자를 위해, Orbit은 오류 억제 및 판독 완화 기법을 적용하기 전에 대상 하드웨어에 맞게 회로를 최적화하는 내장 transpiler도 포함하고 있습니다.

추가적인 회로 샘플링, 외삽(extrapolation), 또는 광범위한 고전적 후처리에 의존하는 접근 방식과 달리, Orbit은 실행 중 오류 억제에 중점을 둡니다. 이 함수는 원래의 회로 로직을 유지하면서 낮은 오버헤드를 도입하도록 설계되었습니다. 사용자는 결과 회로를 검사하고 Orbit으로 최적화된 실행을 표준 실행과 직접 비교할 수 있습니다.

실용적인 Orbit 워크플로우는 다음과 같습니다:

  1. 양자 회로를 정의한 뒤 Qiskit Functions Catalog를 통해 Orbit을 선택합니다.

  2. 'Raw' 모드를 사용하여 Orbit 없이 회로를 포함하여 원본 회로(raw-circuit) 기준선을 설정합니다.

  3. 자동화된 또는 사용자가 선택한 DD 시퀀스, MEM, 최적화된 transpilation을 포함하여 적용할 최적화 전략을 선택합니다.

  4. 개별 방법을 활성화 또는 비활성화하거나 여러 구성을 제출하여 개별 및 결합 효과를 평가합니다.

Orbit은 큐비트가 게이트에 능동적으로 참여하지 않는 유휴 기간이나 스케줄링 간격이 있는 회로에 특히 유용합니다. 이는 mid-circuit measurement가 있는 워크플로우와 fault-tolerant 양자 컴퓨팅 실험을 포함하여 정적 및 동적 회로를 지원합니다. 일반적인 응용 분야로는 양자 오류 정정, 사각형 및 heavy-hex 격자에서의 surface-code 실험, Bernstein-Vazirani와 같은 오라클 알고리즘, 푸리에 변환 회로, 변분 양자 알고리즘, 해밀토니안 시뮬레이션, 벤치마킹 실험, 하드웨어 인식 회로 최적화 등이 있습니다.

fault tolerance 시대를 내다보면, Orbit은 양자 오류 정정과 원활하게 결합될 수 있으므로 fault-tolerant 양자 컴퓨팅 워크플로우와도 호환됩니다. 장기적으로 Orbit은 논리 큐비트를 보호하기 위한 미래 지향적 경로로서 논리 수준의 dynamical decoupling [1]을 지향합니다. 아래 예시에서는 두 개의 논리 큐비트가 얽혀 양자 오류 검출(quantum error detection) 하에서 논리 벨 상태(logical Bell state)를 생성했습니다. 양자 오류 검출만 사용했을 때는 벨 상태 충실도가 수십 마이크로초에 걸쳐 약 44%로 감소한 반면, QED와 Orbit 방식의 보호를 결합했을 때는 논리 벨 상태 충실도가 동일한 시간대에서 약 95.3%에 도달하며 척도의 상단 근처를 유지했습니다. Orbit Quantum Circuit Development Platform

벤치마크

다음 결과는 IBM Quantum 하드웨어에서의 대표적인 Orbit 실행을 요약한 것입니다. 다른 하드웨어 벤치마크와 마찬가지로, 결과는 선택한 장치, 교정 상태, 회로, 실행 설정에 따라 달라집니다.

예시지표큐비트 수QPU추가 세부 정보Orbit 개선율
Bernstein–Vazirani숨겨진 비트열 충실도26
60
70
Heron r3Raw 대 Full Orbit,
Transpilation only 대 Full Orbit,
Full Orbit Only
75x
66x
N/A
QFT (unitary)충실도10Heron r2
Heron r3
Orbit 대 raw:
~44% 대 ~35%
~67% 대 ~61%
1.26x
1.09x
QFT (dynamic circuits)충실도10
20
Heron r3Orbit 대 raw:
~55% 대 ~2%
~10% 대 ~0%
27.51x
N/A
Long-range Bell state (dynamic circuits)충실도30
60
Heron r2N/A1.78x
1.11x
Surface code
(square lattice)
논리 오류 확률25Nighthawk r11라운드
5라운드
10라운드
1.01x
1.15x
1.12x
Surface code
(heavy-hex)
논리 오류 확률65Heron r31라운드
5라운드
10라운드
4.11x
2.04x
1.39x
VQE이상적인 에너지 대비 절대 오차8Heron r3Orbit 대 raw:
56mHa 대 1342 mHa
24x
QAOA성공 확률5Heron r2N/A1.46x
[[4,2,2]] code (logical-level error suppression)얽힌 벨 상태 논리 충실도4Heron r255 μs 동안의 평균 충실도1.63x

지표 정의

  • Bernstein–Vazirani 숨겨진 비트열 충실도: 올바른 숨겨진 비트열을 측정할 확률입니다. 이 지표는 회로 크기가 증가함에 따라 알고리즘이 의도한 해를 얼마나 안정적으로 복구하는지를 나타냅니다. 이 표는 세 가지 다른 구성 하에서 성공적으로 평가된 가장 큰 세 가지 숨겨진 비트열을 보고합니다: (i) Orbit 없이 사용한 raw 회로는 26큐비트에 도달했고, (ii) transpilation만 적용한 회로는 60큐비트에 도달했으며, (iii) full Orbit 워크플로우를 사용한 회로는 70큐비트에 도달했습니다. raw 회로 (i)의 경우, 개선율은 수정되지 않은 회로 대비 DD와 MEM으로 달성된 성능 향상을 나타냅니다. transpilation만 적용한 구성 (ii)의 경우, 최적으로 transpile된 회로에 DD와 MEM을 추가하여 얻은 개선을 나타냅니다. full Orbit 구성 (iii)의 경우, 모든 Orbit 구성 요소(transpilation, DD, MEM)가 활성화되었을 때만 0이 아닌 성공 확률이 얻어졌기 때문에 기준 개선율이 보고되지 않습니다. 예시는 아래에 제공됩니다.

  • 양자 푸리에 변환 충실도: unitary 및 dynamic-circuit QFT 구현체 [2] 모두에 대해, 충실도는 20가지 서로 다른 입력 상태에 걸쳐 실험적으로 구현된 변환과 이상적인 QFT 프로세스 간의 일치도를 측정합니다. 동적 회로는 mid-circuit measurement와 classical feedforward로 인해 상당한 유휴 시간을 포함하며, 이 동안 dynamical decoupling이 결어긋남을 억제할 수 있습니다. 보고된 개선율은 Orbit으로 얻은 충실도와 raw 충실도를 비교한 것입니다.

  • 장거리 벨 상태 준비: 최대 60개의 중간 큐비트로 분리된 두 큐비트 사이에서 동적 회로와 feedforward 연산을 사용하여 벨 상태를 생성함으로써, 국소적으로 연결된 양자 하드웨어에서 효율적인 장거리 얽힘을 시연합니다 [3]. Orbit은 최상의 큐비트 라우팅을 식별하고, feedforward 측정 중 큐비트를 보존하며, 판독 오류를 완화하기 위해 MEM을 적용합니다.

  • Surface-code 논리 오류 확률: heavy-hex surface code [4]와 square-lattice surface code [5]에 대해, 인코딩된 논리 상태를 반복된 오류 정정 라운드 동안 보존하는 양자 메모리 실험이 수행되었습니다. 논리 오류 확률은 누적된 오류로 인해 인코딩된 정보가 잘못 복구될 확률을 측정합니다(낮을수록 좋습니다). 보고된 개선율은 raw 회로의 논리 오류 확률과 Orbit으로 얻은 논리 오류 확률을 비교한 것입니다.

  • VQE 절대 오차: 최적화된 unitary coupled-cluster ansatz를 사용한 VQE로 LiH의 바닥 상태 에너지를 추정합니다 [6]. 측정된 에너지는 노이즈가 없는 회로에서 얻은 이상적인 에너지와 비교됩니다. 이 지표는 측정된 에너지와 이상적인 에너지 간의 절대 차이입니다(값이 낮을수록 좋습니다). 보고된 개선율은 다음과 같습니다:

Improvement factor=ErawEidealEOrbitEideal.\text{Improvement factor} = \frac{|E_{\mathrm{raw}}-E_{\mathrm{ideal}}|} {|E_{\mathrm{Orbit}}-E_{\mathrm{ideal}}|}.

1보다 큰 값은 Orbit이 dynamical decoupling 없이 실행했을 때보다 에너지 오차를 줄인다는 것을 나타냅니다.

  • QAOA 성공 확률: butterfly 그래프에서 정의된 최적화 문제의 최적해에 해당하는 비트열을 측정할 확률입니다. 보고된 개선율은 Orbit으로 얻은 성공 확률과 raw 회로로 얻은 성공 확률을 비교한 것입니다.

  • 논리 충실도: [[4,2,2]] 논리 dynamical-decoupling 실험 [1]에서 두 개의 논리 큐비트가 네 개의 물리 큐비트로 인코딩되어 얽힌 논리 벨 상태로 준비되었습니다. 논리 충실도는 복구된 인코딩 상태와 목표 논리 벨 상태 간의 일치도를 측정합니다. 보고된 개선율은 Orbit과 오류 검출(코드의 기능)로 얻은 평균 논리 충실도와 코드만 단독으로 사용했을 때 얻은 값을 비교한 것입니다.

시작하기

IBM Quantum Platform API 키를 사용하여 인증하고 다음과 같이 Orbit 함수를 선택합니다. 이 스니펫은 이미 로컬 환경에 계정을 저장했다고 가정합니다.

# Added by doQumentation — required packages for this notebook
!pip install -q matplotlib qiskit qiskit-ibm-catalog
from qiskit_ibm_catalog import QiskitFunctionsCatalog
from qiskit import QuantumCircuit

catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
# Verify that you have access to the function.
catalog.list()
[QiskitFunction(quantum-elements/orbit)]
# Load the function.
orbit = catalog.load("quantum-elements/orbit")

예시

다음 예시는 Bernstein-Vazirani 회로를 구축하고, 하나의 작업에서 raw 실행과 Orbit 기본값이라는 두 가지 방식으로 Orbit에 제출합니다.

raw와 Orbit을 직접 비교하고 싶을 때 이 패턴을 사용하세요.

Bernstein-Vazirani 회로 구축

숨겨진 비트열을 선택하고 논리 회로를 구축합니다. 추가 큐비트는 오라클 대상이며, 입력 큐비트는 측정됩니다.

def create_bv_circuit(hidden_bitstring: str) -> QuantumCircuit:
width = len(hidden_bitstring)
circuit = QuantumCircuit(width + 1, width)

circuit.x(width)
circuit.h(range(width + 1))

for input_qubit, bit in enumerate(reversed(hidden_bitstring)):
if bit == "1":
circuit.cx(input_qubit, width)

circuit.barrier()
circuit.h(range(width + 1))
circuit.measure(range(width), range(width))
return circuit

circuit_width = 50
hidden_bitstring = "1" * circuit_width
shots = 4096

bv_circuit = create_bv_circuit(hidden_bitstring)
bv_circuit.count_ops()
OrderedDict([('h', 102),
('cx', 50),
('measure', 50),
('x', 1),
('barrier', 1)])

Orbit 워크로드 준비

하나의 Sampler PUB를 생성한 다음, 두 가지 비교 모드를 위해 이를 복제합니다. Orbit은 논리 회로를 받아 실행 중에 선택한 백엔드로 매핑합니다.

base_pub = (bv_circuit, None, shots)
comparison_labels = ["raw", "orbit"]
pubs = [base_pub] * len(comparison_labels)

raw 및 Orbit 기본값 실행

pub_options는 첫 번째 PUB를 Orbit 최적화, DD, MEM을 건너뛰는 raw 모드에 할당하고, 두 번째 PUB를 최적화된 transpilation, 자동화된 dynamical decoupling(DD) 삽입, 측정 오류 완화(MEM)를 포함하는 Orbit 기본값에 할당합니다.

backend_name = "ibm_kingston"

job = orbit.run(
primitive="sampler",
pubs=pubs,
backend_name=backend_name,
options={
"pub_options": [
{"mode": "raw"},
{"mode": "orbit"},
],
"save_backend_info": True,
},
)

# Check the job ID and status
print(job.job_id)
print(job.status())
c0f1b99c-8dfa-4ebb-9560-d9a37c990acc
QUEUED

결과를 검색하고 카운트를 사용하여 raw 회로와 Orbit으로 개선된 회로를 비교합니다. Sampler 결과의 경우, 반환된 classical register에 대한 get_counts()가 출력 히스토그램을 제공합니다. Orbit PUB에 대해 MEM이 성공하면 이 히스토그램은 이미 MEM으로 보정된 것이며, 완화되지 않은 카운트는 Orbit 메타데이터의 measurementErrorMitigation["rawCounts"] 아래에서 계속 사용할 수 있습니다.

def extract_counts(pub_result) -> dict[str, int]:
data = getattr(pub_result, "data", None)
if data is None:
raise TypeError("pub_result.data is missing")

for name in dir(data):
if name.startswith("_"):
continue
register = getattr(data, name)
get_counts = getattr(register, "get_counts", None)
if callable(get_counts):
counts = get_counts()
if counts:
return counts

raise TypeError(
"No classical register with get_counts() found in pub_result.data"
)

result = job.result()
if len(result) != len(comparison_labels):
raise RuntimeError(
f"Expected {len(comparison_labels)} PUB results, received {len(result)}."
)

comparison_counts = {
label: extract_counts(pub_result)
for label, pub_result in zip(comparison_labels, result, strict=True)
}
correct_counts = {
label: counts.get(hidden_bitstring, 0)
for label, counts in comparison_counts.items()
}

print(
{
"hidden_bitstring": hidden_bitstring,
"correct_counts": correct_counts,
"shots": shots,
}
)
{'hidden_bitstring': '11111111111111111111111111111111111111111111111111', 'correct_counts': {'raw': 0, 'orbit': 184}, 'shots': 4096}

raw 회로와 Orbit으로 개선된 회로를 시각적으로 비교합니다.

import matplotlib.pyplot as plt

labels = list(correct_counts)
values = list(correct_counts.values())
fig, ax = plt.subplots(figsize=(7, 4))
bars = ax.bar(labels, values, width=0.55)
ax.bar_label(bars, labels=[f"{value:g}" for value in values], padding=3)
ax.set_xlabel("Circuit execution mode")
ax.set_ylabel("Correct hidden-bitstring count")
ax.set_title(f"{circuit_width}-qubit Bernstein-Vazirani on {backend_name}")
ax.set_ylim(0, max(1, 1.15 * max(values)))
ax.grid(axis="y", alpha=0.25)
fig.tight_layout()
plt.show()

Output of the previous code cell

지원 받기

Quantum Elements 지원팀에 문의하세요: info@quantumelements.ai

다음 정보를 반드시 포함하세요:

  • Qiskit Function 작업 ID (qiskit-ibm-catalog), job.job_id

  • Backend 이름

  • raw 및 Orbit 모드에 사용된 Orbit pub_options

  • 문제에 대한 상세한 설명

  • 관련된 모든 오류 메시지 또는 코드

  • 문제를 재현하는 단계

다음 단계

권장 사항
  • 다른 backend, 큐비트 수, 또는 다른 숨겨진 비트열을 시도해 보세요.

  • orbit 지원 사용자 정의 DD 전략을 정의하는 방법과, mid-circuit measurement 및 feedforward 연산이 있는 동적 회로에 DD를 적용하는 방법을 배우려면 양자 푸리에 변환에 관한 저희 튜토리얼을 읽어보세요.

  • 모든 Orbit 옵션에 대한 상세한 설명은 API 참조를 방문하세요.

참고 문헌

  1. Logical-level error suppression combined with Quantum Error Detection, Nature Communications (2026)

  2. Quantum Fourier Transform Using Dynamic Circuits, Physical Review Letters (2024)

  3. Efficient Long-Range Entanglement Using Dynamic Circuits, PRX Quantum (2024)

  4. Surface code scaling experiments on IBM Heron with heavy-hex connectivity, arXiv:2510.18847

  5. Surface code experiments on IBM Nighthawk with square-lattice connectivity, arXiv:2606.11496

  6. VQE benchmark reference, Nature Physics (2024)