트랜스파일 소개
트랜스파일(Transpilation)은 주어진 입력 Circuit을 특정 양자 장치의 토폴로지에 맞게 재작성하고, 노이즈가 있는 양자 컴퓨터에서 실행할 수 있도록 Circuit 명령어를 최적화하는 과정입니다. 이 문서는 모든 Qiskit 사용자가 사용할 수 있는 로컬 트랜스파일을 위한 도구와 워크플로우, 그리고 Premium Plan, Flex Plan, On-Prem(IBM Quantum Platform API 경유) Plan 사용자가 이용할 수 있는 클라우드 기반 Qiskit Transpiler Service를 다룹니다. 프리미티브를 사용하면서 Qiskit Runtime 서비스가 제공하는 기본 트랜스파일 옵션에만 관심이 있다면, Configure runtime compilation for Qiskit Runtime 항목을 참고하세요.
트랜스파일 과정은 여러분의 명령어를 담은 Circuit을 받아서:
선택한 Backend에서 사용 가능한 명령어만 사용하도록 변환하고, 노이즈의 영향을 최소화하도록 해당 명령어를 최적화합니다:
Qiskit SDK의 핵심 구성 요소인 Transpiler는 모듈성과 확장성을 고려하여 설계되었습니다. 주된 용도는 새로운 Circuit 변환(트랜스파일러 **패스(passes)**라고 함)을 작성하고, 이를 기존 패스들과 결합하여 양자 Circuit의 깊이와 복잡성을 크게 줄이는 것입니다. 어떤 패스들을 어떤 순서로 연결하느냐는 최종 결과에 큰 영향을 미칩니다. 이 파이프라인은 PassManager와 StagedPassManager 객체에 의해 결정됩니다. StagedPassManager는 하나 이상의 PassManager의 실행을 조율하고 실행 순서를 결정하는 반면, PassManager 객체는 단순히 하나 이상의 패스들의 모음입니다. StagedPassManager를 오케스트라의 지휘자로, PassManager들을 각 악기 섹션으로, Pass 객체들을 개별 연주자로 생각하면 이해하기 쉽습니다. 이런 방식으로 하드웨어에 효율적인 양자 Circuit을 구성하여 노이즈를 관리하면서 유틸리티 규모의 작업을 실행할 수 있습니다.
패스 매니저 스테이지에 대한 자세한 내용은 Transpiler stages 항목을 참고하세요.
명령어 집합 아키텍처
양자 Circuit의 깊이와 복잡성을 줄이는 것 외에도, Transpiler는 주어진 QuantumCircuit에 포함된 명령어를 특정 Backend의 명령어 집합 아키텍처(ISA, Instruction Set Architecture)에 맞게 변환하도록 설계되었습니다. ISA를 따르는 Circuit은 Backend의 Target이 지원하는 명령어(하드웨어의 사용 가능한 기저 Gate, 측정, 리셋, 제어 흐름 연산 등)만으로 구성되며, 하드웨어의 연결성(즉, Target의 CouplingMap)이 지정하는 제약 조건을 따릅니다. IBM Quantum® Backend에 작업을 제출할 때, Circuit은 해당 Backend의 ISA를 따라야 합니다.
Transpiler 스테이지
Qiskit의 사전 구성된 Transpiler 파이프라인은 여섯 가지 기본 스테이지로 구성됩니다:
init- 이 패스는 Circuit이 임베드되기 전에 필요한 초기 패스를 실행합니다. 일반적으로 사용자 정의 명령어를 펼치고 Circuit을 단일- 및 2-Qubit Gate로 변환합니다. 기본적으로 Circuit 명령어를 검증하고 다중 Qubit Gate를 단일- 및 2-Qubit Gate로 변환합니다.layout- 이 패스는 레이아웃을 적용하여 Circuit의 가상 Qubit을 QPU의 물리적 Qubit에 매핑합니다.routing- 이 패스는 레이아웃이 적용된 후 실행되며, 원래 Circuit에 Gate(즉, SWAP)를 삽입하여 QPU의 연결성(커플링 맵)과 호환되도록 합니다.translation- 이 패스는 Circuit의 Gate를 QPU의 기저 명령어 집합으로 변환합 니다.optimization- 이 패스는 조건(예: 고정된 깊이)이 충족될 때까지 양자 Circuit의 더 효율적인 분해를 찾기 위해 최적화 루프를 실행합니다.scheduling- 이 스테이지는 하드웨어를 인식하는 스케줄링 패스를 위한 것입니다. 사용자가 스케줄링 방법을 지정하면, 이 스테이지는 Circuit의 모든 유휴 시간을 처리합니다.
트랜스파일 워크플로우를 커스터마이징하는 경우, 개발 중에 이 스테이지들을 가이드라인으로 활용하세요.
Pass Manager로 트랜스파일하기
Circuit을 트랜스파일하는 권장 방법은 단계적 패스 매니저(staged pass manager)를 생성한 후, Circuit을 입력으로 하여 run 메서드를 실행하는 것입니다. generate_preset_pass_manager 함수를 사용하면 합리적인 기본값으로 단계적 패스 매니저를 생성할 수 있습니다.
고급 사용자는 PassManager와 StagedPassManager 객체 집합을 커스터마이징하고 각 스테이지의 실행 순서를 결정할 수 있습니다. 이렇게 하면 최종 출력 Circuit이 크게 달라질 수 있습니다. 실제로 양자 알고리즘을 트랜스파일하는 커스텀 접근 방식은 종종 기본 접근 방식보다 더 효율적인 오류 억제를 만들어냅니다. 커스텀 접근 방식은 하드웨어 제약 조건에 맞게 양자 Circuit을 재작성하고 노이즈의 영향을 억제하는 것을 포함합니다. 이 도구 체인의 논리 흐름은 커스터마이징이 가능하며 반드시 선형일 필요는 없습니다. 트랜스파일 과정은 반복 루프, 조건 분기 및 기타 복잡한 동작을 준비할 수 있습니다. 커스텀 패스 집합을 개발할 때 좋은 출발점은 기본 변환 시퀀스를 살펴보는 것입니다.
Pass Manager를 사용한 트랜스파일 개요는 Transpile with pass managers를 참고하세요.
기본 트랜스파일
Transpiler를 더 간단하지만 커스터마이징 가능성은 낮은 "바로 사용 가능한" 방식으로 사용하려면 qiskit.compiler.transpile 함수를 사용하세요. 이 함수는 0, 1, 2, 3으로 설정할 수 있는 optimization_level 플래그를 비롯한 여러 옵션을 기반으로 사전 설정된 StagedPassManager 객체 중 하나를 생성하고 실행합니다. 레벨이 높을수록 트랜스파일 시간이 길어지는 대신 더 최적화된 Circuit을 생성합니다.
다음 단계
generate_preset_passmanager함수 사용법을 배우려면 Transpilation default settings and configuration options 항목부터 시작하세요.- Transpiler stages 항목으로 트랜스파일에 대한 학습을 계속하세요.
- Compare transpiler settings 가이드를 시도해 보세요.
- Ground-state energy estimation of the Heisenberg chain with VQE 튜토리얼에서 트랜스파일된 Circuit을 사용하는 엔드투엔드 예제를 시도해 보세요.
- Transpile API 문서를 참고하세요.
- 회로 트랜스파일 방법을 학습하세요.