분수 게이트
이 페이지의 코드는 다음 요구 사항을 사용하여 개발되었습니다. 다음 버전 이상을 사용하는 것이 좋습니다.
qiskit[all]~=2.3.1 qiskit-ibm-runtime~=0.45.1
이 페이지에서는 IBM Quantum® 제품군에서 새롭게 지원되는 두 가지 게이트 유형을 소개합니다. 이러한 프랙셔널 게이트는 Heron QPU에서 다음과 같은 형태로 지원됩니다:
- 에 대한
- 모든
이 페이지에서는 프랙셔널 게이트를 구현하여 워크플로우의 효율성을 개선할 수 있는 사용 사례와 IBM 퀀텀 QPU에서 이러한 게이트를 사용하는 방법에 대해 설명합니다.
분수 게이트 사용 방법
내부적으로, 이러한 분수 게이트는 임의의 각도에 대해 및 회전을 직접 실행함으로써 작동합니다. 게이트를 사용하면 임의 각도의 단일 큐비트 회전 시간과 오류를 최대 2배까지 줄일 수 있습니다. 게이트 회전을 직접 실행함으로써 다중 CZGate 객체로의 분해를 피할 수 있으며, 이는 회로 실행 시간과 오류를 유사하게 감소시킵니다. 이는 특히 단일 및 2큐비트 회전이 많이 포함된 회로에 유용합니다. 예를 들어 양자 시스템의 역학을 시뮬레이션하거나 많은 매개변수를 가진 변분적 접근법을 사용할 때 그렇습니다.
이러한 유형의 게이트는 시스템이 보유할 QuantumCircuit 수 있는 표준 게이트 라이브러리에 포함되어 있지만, 특정 IBM Quantum QPU에서만 사용할 수 있으며, 해당 QPU에는 (아래에 표시된 대로 True ) 플래그가 use_fractional_gates 설정된 상태로 로드되어야 합니다. 이 플래그를 설정하면 Target 트랜스파일러의 백엔드에 분수 게이트가 포함되도록 합니다.
service = QiskitRuntimeService()
backend = service.backend('ibm_torino', use_fractional_gates=True)이 코드 예시는 프랙셔널 게이트를 사용하여 Ising 체인의 역학을 시뮬레이션하는 워크플로우의 맥락에서 프랙셔널 게이트를 사용하는 방법을 보여줍니다. 그런 다음 회로 지속 시간을 분수 게이트를 사용하지 않는 백엔드와 비교합니다.
분수 게이트가 활성화된 백엔드의 Target 에 보고된 오류 값은 분수 게이트가 없는 백엔드의 오류 값의 복사본일 뿐입니다(동일하지 않을 수 있음). 아직 분수 게이트에 대한 오류율 보고가 지원되지 않기 때문입니다.
그러나 분수형 게이트와 비분수형 게이트의 게이트 시간은 동일하므로, 특히 회로의 주요 오류 원인이 이완으로 인한 경우 오류율이 비슷하다고 가정하는 것이 합리적입니다.
from qiskit import QuantumCircuit
from qiskit.circuit import Parameter
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.visualization.timeline import draw as draw_timeline, IQXSimple
from qiskit_ibm_runtime import QiskitRuntimeService
num_qubits = 5
num_time_steps = 3
rx_angle = 0.1
rzz_angle = 0.1
ising_circuit = QuantumCircuit(num_qubits)
for i in range(num_time_steps):
# rx layer
for q in range(num_qubits):
ising_circuit.rx(rx_angle, q)
for q in range(1, num_qubits - 1, 2):
ising_circuit.rzz(rzz_angle, q, q + 1)
# 2nd rzz layer
for q in range(0, num_qubits - 1, 2):
ising_circuit.rzz(rzz_angle, q, q + 1)
ising_circuit.barrier()
ising_circuit.draw("mpl")Output:
프랙셔널 게이트가 활성화된 백엔드 객체와 비활성화된 백엔드 객체 두 개를 지정한 다음 둘 다 트랜스파일합니다.
service = QiskitRuntimeService()
backend_fractional = service.backend("ibm_torino", use_fractional_gates=True)
backend_conventional = service.backend(
"ibm_torino", use_fractional_gates=False
)
pm_fractional = generate_preset_pass_manager(
optimization_level=3, backend=backend_fractional, scheduling_method="alap"
)
pm_conventional = generate_preset_pass_manager(
optimization_level=3,
backend=backend_conventional,
scheduling_method="alap",
)
ising_circuit_fractional = pm_fractional.run(ising_circuit)
ising_circuit_conventional = pm_conventional.run(ising_circuit)두 가지 유형의 게이트를 사용하여 회로의 타임라인을 표시합니다.
# Draw timeline of circuit with conventional gates
draw_timeline(
ising_circuit_conventional,
idle_wires=False,
target=backend_conventional.target,
time_range=(0, 500),
style=IQXSimple(),
)Output:
# Draw timeline of circuit with fractional gates
draw_timeline(
ising_circuit_fractional,
idle_wires=False,
target=backend_fractional.target,
time_range=(0, 500),
style=IQXSimple(),
)Output:
각도 제약 조건
2-큐비트 게이트의 경우, IBM Quantum 하드웨어에서는 와 사이의 각도만 실행할 수 있습니다. 회로에 이 범위 밖의 각도를 가진 게이트가 포함되어 있는 경우, 표준 트랜스필레이션 파이프라인은 일반적으로 (패스를 FoldRzzAngle 통해) 적절한 회로 변환을 수행하여 이를 수정합니다. 그러나 하나 이상의 Parameters를 포함하는 모든 게이트의 경우, 트랜스파일러는 런타임 시 이러한 매개변수에 이 범위 내의 각도가 할당될 것이라고 가정합니다. IBM Quantum 컴퓨트 서비스에 제출된 PUB 에 명시된 매개변수 값 중 하나라도 이 범위 밖일 경우, 작업이 실패합니다.
분수 게이트를 어디에 사용하나요?
역사적으로 IBM 퀀텀 QPU에서 사용할 수 있는 기본 게이트는 CZ, X, RZ, **SX**와 **ID**로, 의 배수가 아닌 단일 큐비트 및 2큐비트 회전 회로를 효율적으로 표현할 수 없습니다. 예를 들어 게이트는 트랜스파일링될 때 일련의 및 게이트로 분해되어야 하므로 하나가 아닌 유한한 기간의 두 게이트로 구성된 회로가 만들어집니다.
마찬가지로 게이트와 같은 2큐비트 회전을 트랜스파일링하는 경우, 분해에는 두 개의 CZ 게이트와 여러 개의 단일 큐비트 게이트가 필요하므로 회로 깊이가 증가합니다. 이러한 분해는 다음 코드에 나와 있습니다.
qc = QuantumCircuit(1)
param = Parameter("θ")
qc.rx(param, 0)
qc.draw("mpl")Output:
# Decomposition of an RX(θ) gate using the IBM Quantum QPU basis
service = QiskitRuntimeService()
backend = service.backend("ibm_torino")
optimization_level = 3
pm = generate_preset_pass_manager(optimization_level, backend=backend)
transpiled_circuit = pm.run(qc)
transpiled_circuit.draw("mpl", idle_wires=False)Output:
from qiskit import QuantumCircuit
from qiskit.circuit import Parameter
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService
qc = QuantumCircuit(2)
param = Parameter("θ")
qc.rzz(param, 0, 1)
qc.draw("mpl")Output:
# Decomposition of an RZZ(θ) gate using the IBM Quantum QPU basis
service = QiskitRuntimeService()
backend = service.backend("ibm_torino")
optimization_level = 3
pm = generate_preset_pass_manager(optimization_level, backend=backend)
transpiled_circuit = pm.run(qc)
transpiled_circuit.draw("mpl", idle_wires=False)Output:
단일 큐비트 또는 2큐비트 회전이 많이 필요한 워크플로우(예: 가변 안사츠 또는 양자 시스템의 시간 진화 시뮬레이션)의 경우, 이 제약으로 인해 회로 깊이가 빠르게 증가하게 됩니다. 그러나 프랙셔널 게이트는 단일 큐비트와 2큐비트 회전을 직접 실행하기 때문에 이러한 요구 사항을 제거하고 보다 효율적인(따라서 오류가 억제된) 양자 회로를 생성합니다.
분수 게이트를 사용하지 말아야 할 때
분수 게이트는 실험적인 기능이며, 이 use_fractional_gates 플래그의 동작은 향후 변경될 수 있다는 점에 유의해야 합니다. 자세한 qiskit-ibm-runtime 내용은 새 버전의 릴리스 노트를 참조하십시오. QiskitRuntimeService.backend에 대한 API 참조 문서도 함께 참조하시기 바랍니다. 이 문서에는 다음 내용이 설명되어 있습니다 use_fractional_gates.
또한, 키스킷 트랜스파일러는 최적화 패스에서 을 사용할 수 있는 기능이 제한되어 있습니다. 따라서 이러한 지침이 포함된 회로를 제작하고 최적화하는 데 더 많은 주의를 기울여야 합니다.
마지막으로, 분수 게이트 사용은 지원되지 않습니다:
- 폴리 트월링 - 그러나 TREX를 사용한 측정 트월링은 지원됩니다.
- 확률적 오류 제거
- 무노이즈 추정(확률적 오류 증폭 사용)
기본 옵션에 대한 가이드를 읽고 주어진 양자 워크로드에 맞게 오류 완화 및 억제 기술을 사용자 지정하는 방법에 대해 자세히 알아보세요.
어떤 백엔드가 소수 게이트를 지원하나요?
모든 백엔드가 소수 게이트를 지원하는 것은 아닙니다. 그렇게 하는 사람들을 service.backends(use_fractional_gates=True) 찾아 나서세요. v0.48qiskit-ibm-runtime 가 출시됨에 따라, 소수점 게이트를 지원하는 백엔드 중 부하가 가장 적은 백엔드를 찾기 위해 service.least_busy(fractional_gates=True) 다음 명령을 실행할 수도 있습니다. 가상 백엔드는 관련 “실제” 백엔드가 분수 게이트를 지원하는 경우에만 분수 게이트를 지원합니다.
가짜 백엔드는 기본적으로 소수 게이트를 지원하지 않으므로 주의하시기 바랍니다. 소수 게이트는 기본적으로 비활성화되어 있기 때문입니다. 분수 게이트를 지원하는 가짜 백엔드에서 분수 게이트를 활성화하려면 해당 백엔드의 구성을 새로 고침하십시오.
예:
service = QiskitRuntimeService()
fake_backend = FakeBoston()
fake_backend.refresh(service=service, use_fractional_gates=True)다음 단계
- 번역에 대해 자세히 알아보려면 번역 소개 페이지를 참조하세요.
- 사용자 지정 트랜스파일러 패스 작성에 대해 읽어보세요.
- 오류 완화 기능을 구성하는 방법을 이해합니다.