트랜스파일링에 일반적으로 사용되는 매개변수
이 페이지의 코드는 다음 요구 사항을 사용하여 개발되었습니다. 다음 버전 이상을 사용하는 것이 좋습니다.
qiskit[all]~=2.5.2 qiskit-ibm-runtime~=0.47.0
이 페이지에서는 로컬 번역에 일반적으로 사용되는 몇 가지 매개변수에 대해 설명합니다. 이러한 매개변수는 다음 인수를 사용하여 구성합니다 generate_preset_pass_manager 또는 transpile.
근사도
근사 정도를 사용하여 결과 회로를 원하는 (입력) 회로와 얼마나 가깝게 일치시키려는지 지정할 수 있습니다. 이 값은 ( 0.0 - 1.0 ) 범위의 실수이며, 0.0 은 최대 근사치이고 1.0 (기본값)은 근사치가 없습니다. 값이 작을수록 출력 정확도와 실행의 용이성(즉, 게이트 수가 적음)이 맞바뀝니다. 기본값은 1.0입니다.
2큐비트 단일 합성(모든 레벨의 초기 단계와 최적화 레벨 3의 최적화 단계에 사용)에서 이 값은 출력 분해의 목표 충실도를 지정합니다. 즉, 회로의 행렬 표현이 이산 게이트로 변환될 때 얼마나 많은 오차가 발생하는지를 나타냅니다. 근사도가 낮은 값(더 근사화)일수록 합성의 출력 회로가 입력 행렬과 더 많이 다르지만, 게이트가 더 적고(임의의 2큐비트 연산은 최대 3개의 CX 게이트로 완벽하게 분해할 수 있으므로) 실행하기 더 쉽습니다.
근사 정도가 1.0 보다 작으면 하나 또는 두 개의 CX 게이트가 있는 회로가 합성되어 하드웨어에서 발생하는 오류는 줄어들지만 근사치에서 발생하는 오류는 늘어날 수 있습니다. CX는 오류 측면에서 가장 비싼 게이트이므로 합성의 충실도를 희생하는 대신 그 수를 줄이는 것이 유리할 수 있습니다(이 기술은 IBM® 장치에서 양자 볼륨을 늘리는 데 사용되었습니다): 무작위 모델 회로를 사용한 양자 컴퓨터 검증 ).
예를 들어, 초기 단계에서 합성할 임의의 2큐비트 UnitaryGate 를 생성합니다. approximation_degree 을 1.0 보다 작게 설정하면 대략적인 회로가 생성될 수 있습니다. 또한 basis_gates 을 지정하여 합성 메서드가 대략적인 합성을 위해 사용할 수 있는 게이트를 알려주어야 합니다.
from qiskit import QuantumCircuit, QuantumRegister
from qiskit.circuit.library import UnitaryGate
from qiskit.quantum_info import random_unitary
from qiskit.transpiler import generate_preset_pass_manager
UU = random_unitary(4, seed=12345)
rand_U = UnitaryGate(UU)
qubits = QuantumRegister(2, name="q")
qc = QuantumCircuit(qubits)
qc.append(rand_U, qubits)
pass_manager = generate_preset_pass_manager(
optimization_level=1,
approximation_degree=0.85,
basis_gates=["sx", "rz", "cx"],
)
approx_qc = pass_manager.run(qc)
print(approx_qc.count_ops()["cx"])Output:
2
근사치에는 더 적은 수의 CX 게이트가 필요하기 때문에 2 라는 출력이 생성됩니다.
난수 생성 프로그램 시드(seed)
트랜스파일러의 일부 부분은 확률적이기 때문에 반복적으로 트랜스파일링을 실행하면 다른 결과가 반환될 수 있습니다. 재현 가능한 결과를 얻으려면 seed_transpiler 인수를 사용하여 의사 난수 생성기의 시드를 설정할 수 있습니다. 동일한 시드를 사용하여 반복 실행하면 동일한 결과가 반환됩니다.
예:
pass_manager = generate_preset_pass_manager(
optimization_level=1, seed_transpiler=11, basis_gates=["sx", "rz", "cx"]
)
optimized_1 = pass_manager.run(qc)
optimized_1.draw("mpl")Output:
초기 레이아웃
트랜스파일링 전에는 회로에 포함된 큐비트가 가상 큐비트이므로 대상 백엔드의 물리적 큐비트와 반드시 일치하지 않습니다. initial_layout 인수를 사용하여 가상 큐비트와 물리적 큐비트의 초기 매핑을 지정할 수 있습니다. 트랜스파일러가 스왑 게이트 또는 기타 수단을 사용하여 큐비트를 퍼미팅할 수 있으므로 최종 큐비트 레이아웃은 초기 레이아웃과 다를 수 있습니다.
아래 예제에서는 모의 백엔드의 초기 레이아웃을 구성합니다 FakeSherbrooke 모의 백엔드의 초기 레이아웃을 Layout 객체를 생성합니다. 우리의 레이아웃은 회로의 첫 번째 큐비트를 셔브룩의 5 큐비트에 매핑하고, 회로의 두 번째 큐비트를 셔브룩의 6 큐비트에 매핑합니다. 물리적 큐비트는 항상 정수로 표현된다는 점에 유의하세요.
이 예제에서는 의 모의 FakeSherbrooke``qiskit_ibm_runtime 백엔드를 사용하지만, Qiskit과 호환되는 실제 또는 모의 백엔드라면 어떤 것이든 사용해 볼 수 있습니다. 결과는 다를 수 있습니다.
from qiskit_ibm_runtime.fake_provider import FakeSherbrooke
from qiskit.transpiler import Layout
backend = FakeSherbrooke()
a, b = qubits
initial_layout = Layout({a: 5, b: 6})
pass_manager = generate_preset_pass_manager(
optimization_level=1, backend=backend, initial_layout=initial_layout
)
transpiled_circ = pass_manager.run(qc)
transpiled_circ.draw("mpl", idle_wires=False)Output:
레이아웃 객체를 지정하는 것 외에도 정수의 목록을 전달할 수 있는데, 목록의 -번째 요소에는 -번째 큐비트에 매핑해야 하는 물리적 큐비트가 포함됩니다. 예를 들어,
initial_layout = [5, 6]
pass_manager = generate_preset_pass_manager(
optimization_level=1, backend=backend, initial_layout=initial_layout
)
transpiled_circ = pass_manager.run(qc)
transpiled_circ.draw("mpl", idle_wires=False)Output:
함수를 사용하여 plot_error_map 함수를 사용하여 오류 정보와 함께 실제 큐비트에 레이블이 지정된 장치 그래프 다이어그램을 생성할 수 있습니다. 컴퓨팅 리소스 페이지에서도 비슷한 다이어그램을 볼 수 있습니다.
from qiskit.visualization import plot_error_map
plot_error_map(backend, figsize=(30, 24))Output:
트랜스파일러 단계 및 플러그인 옵션
이러한 옵션에는 _method 이라는 접미사가 붙습니다. 트랜스파일러의 작동 방식에 영향을 미치며 트랜스파일러에서 더 나은, 다른 또는 특정 결과물을 얻기 위해 사용됩니다.
-
init_method(str) - 초기화 단계에 사용할 플러그인입니다. -
layout_method(str) - 레이아웃 선택 패스(trivial,dense,sabre). 레이아웃 단계에 사용할 외부 플러그인 이름일 수도 있습니다. -
optimization_method(str) - 최적화 단계에 사용할 플러그인입니다. -
routing_method(str) - 라우팅 패스 이름 (basic,lookahead,default,sabre,none). 라우팅 단계에 사용할 외부 플러그인 이름일 수도 있습니다. -
scheduling_method(str) - 스케줄링 패스 이름입니다. 스케줄링 단계에 사용할 외부 플러그인 이름일 수도 있습니다.as_soon_as_possible: 욕심내서 지침을 예약하세요: 가능한 한 빨리 쿼비트 리소스(별칭:asap)에서 예약하세요.as_late_as_possible: 일정 안내가 늦어집니다. 즉, 가능한 경우 큐비트를 접지 상태로 유지합니다(별칭:alap).
-
translation_method(str) - 번역 패스 이름 (unroller,translator,synthesis). 번역 단계에 사용할 외부 플러그인 이름일 수도 있습니다. -
unitary_synthesis_method(str) - 사용할 단일 합성 방법의 이름입니다. 기본적으로default이 사용됩니다.
특정 스테이지에 설치된 모든 플러그인 목록을 보려면 list_stage_plugins("stage_name"). 예를 들어 라우팅 단계에 설치된 모든 플러그인 목록을 보려면 list_stage_plugins(routing) 을 실행합니다.
다음 단계
- 기본 옵션 및 구성 설정 항목을 검토합니다.
- 최적화 수준 설정 방법을 알아보세요.
- Compare 트랜스파일러 설정 가이드를 시도해 보세요.
- 트랜스파일러 API 문서를 검토하십시오.