트랜스파일 기본 설정 및 구성 옵션
패키지 버전
이 페이지의 코드는 다음 요구 사항을 사용하여 개발되었습니다. 아래 버전 이상을 사용하길 권장합니다.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
추상 Circuit은 QPU가 제한된 기저 게이트(basis gate) 집합만 지원하며 임의의 연산을 실행할 수 없기 때문에 트 랜스파일이 필요합니다. Transpiler의 역할은 임의의 Circuit을 지정된 QPU에서 실행할 수 있도록 변환하는 것입니다. 이는 Circuit을 지원되는 기저 Gate로 변환하고, Circuit의 연결성이 QPU의 연결성과 일치하도록 필요에 따라 SWAP Gate를 도입함으로써 이루어집니다.
패스 매니저로 트랜스파일하기에서 설명한 바와 같이, generate_preset_pass_manager 함수를 사용하여 패스 매니저를 생성하고, Circuit 또는 Circuit 목록을 해당 run 메서드에 전달하여 트랜스파일할 수 있습니다. generate_preset_pass_manager를 호출할 때 최적화 수준과 Backend만 전달하여 나머지 옵션에 대한 기본값을 사용하거나, 트랜스파일을 세밀하게 조정하기 위해 함수에 추가 인수를 전달할 수도 있습니다.
매개변수 없이 기본 사용
이 예시에서는 추가 매개변수를 지정하지 않고 Circuit과 대상 QPU를 Transpiler에 전달합니다.
Circuit을 생성하고 결과를 확인합니다:
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit import QuantumCircuit
from qiskit.circuit.library import grover_operator, DiagonalGate
from qiskit_ibm_runtime.fake_provider import FakeSherbrooke
# Create circuit to test transpiler on
oracle = DiagonalGate([1] * 7 + [-1])
qc = QuantumCircuit(3)
qc.h([0, 1, 2])
qc = qc.compose(grover_operator(oracle))
# Add measurements to the circuit
qc.measure_all()
# View the circuit
qc.draw(output="mpl")
Circuit을 트랜스파일하고 결과를 확인합니다:
from qiskit.transpiler import generate_preset_pass_manager
# Specify the QPU to target
backend = FakeSherbrooke()
# Transpile the circuit
pass_manager = generate_preset_pass_manager(
optimization_level=1, backend=backend
)
transpiled_circ = pass_manager.run(qc)
# View the transpiled circuit
transpiled_circ.draw(output="mpl", idle_wires=False)
사용 가능한 모든 매개변수
다음은 generate_preset_pass_manager 함수에서 사용할 수 있는 모든 매개변수입니다. 매개변수는 두 가지 클래스 로 나뉩니다: 컴파일 대상을 설명하는 것과 Transpiler의 동작 방식에 영향을 미치는 것입니다.
optimization_level을 제외한 모든 매개변수는 선택 사항입니다. 전체 세부 정보는 Transpiler API 문서를 참조하세요.
optimization_level(int) - Circuit에 대해 수행할 최적화의 정도입니다. 0에서 3 사이의 정수입니다. 수준이 높을수록 더 최적화된 Circuit이 생성되지만, 트랜스파일 시간이 더 오래 걸립니다. 자세한 내용은 Transpiler 최적화 수준 설정을 참조하세요.
컴파일 대상을 설명하는 데 사용되는 매개변수
이 인수들은 Circuit 실행을 위한 대상 QPU를 설명하며, QPU의 커플링 맵(Qubit의 연결성을 설명하는 정보), QPU에서 지원하는 기저 Gate, Gate의 오류율 등의 정보를 포함합니다.
이러한 매개변수 중 다수는 트랜스파일에 일반적으로 사용되는 매개변수에서 자세히 설명되어 있습니다.
QPU (Backend) 매개변수
Backend) 매개변수Backend 매개변수 - backend를 지정하면 target이나 다른 Backend 옵션 을 지정할 필요가 없습니다. 마찬가지로, target을 지정하면 backend나 다른 Backend 옵션을 지정할 필요가 없습니다.
backend(Backend) - 설정되면 Transpiler가 입력 Circuit을 해당 장치에 맞게 컴파일합니다.coupling_map과 같이 이 설정에 영향을 미치는 다른 옵션이 설정된 경우, 해당 옵션이backend의 설정을 재정의합니다.target(Target) - Backend Transpiler 대상입니다. 일반적으로 backend 인수의 일부로 지정되지만, Target 객체를 수동으로 생성한 경우 여기에서 지정할 수 있습니다. 이는backend의 대상을 재정의합니다.backend_properties(BackendProperties) - QPU에서 반환되는 속성으로, Gate 오류, 읽기 오류, Qubit 결맞음 시간 등에 대한 정보를 포함합니다.backend.properties()를 실행하여 이 정보를 제공하는 QPU를 찾을 수 있습니다.timing_constraints(Dict[str, int] | None) - 명령 시간 해상도에 대한 선택적 제어 하드웨어 제한입니다. 이 정보는 QPU 구성에서 제공됩니다. QPU에 명령 시간 할당에 대한 제한이 없으면timing_constraints는None이며 조정이 수행되지 않습니다. QPU는 다음과 같은 제한 집합을 보고할 수 있습니다:granularity: dt 단위로 최소 펄스 Gate 해상도를 나타내는 정수 값입니다. 사용자 정의 펄스 Gate의 지속 시간은 이 세분성 값의 배수여야 합니다.min_length: dt 단위로 최소 펄스 Gate 길이를 나타내는 정수 값입니다. 사용자 정의 펄스 Gate는 이 길이보다 길어야 합니다.pulse_alignment: Gate 명령 시작 시간의 시간 해상도를 나타내 는 정수 값입니다. Gate 명령은 이 값의 배수인 시간에 시작해야 합니다.acquire_alignment: 측정 명령 시작 시간의 시간 해상도를 나타내는 정수 값입니다. 측정 명령은 이 값의 배수인 시간에 시작해야 합니다.
레이아웃 및 토폴로지 매개변수
basis_gates(List[str] | None) - 언롤(unroll)할 기저 Gate 이름 목록입니다. 예를 들어 ['u1', 'u2', 'u3', 'cx'].None이면 언롤하지 않습니다.coupling_map(CouplingMap | List[List[int]]) - 매핑에서 대상으로 사용할 방향성 커플링 맵(사용자 정의 가능)입니다. 커플링 맵이 대칭인 경우 양방향을 모두 지정해야 합니다. 다음 형식이 지원됩니다:- CouplingMap 인스턴스
- List - 인접 행렬로 제공해야 하며, 각 항목은 QPU에서 지원하는 모든 방향성 2-Qubit 상호작용을 지정합니다. 예: [[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3]]
inst_map(List[InstructionScheduleMap] | None) - Circuit 연산에서 펄스 스케줄로의 매핑입니다.None이면 QPU의instruction_schedule_map이 사용됩니다.