Skip to main content
IBM Quantum Platform

트랜스파일레이션 기본 설정 및 구성 옵션

  • 이 페이지의 코드는 다음 요구 사항을 사용하여 개발되었습니다. 다음 버전 이상을 사용하는 것이 좋습니다.

    qiskit[all]~=2.5.2
    qiskit-ibm-runtime~=0.47.0
    

추상 회로는 트랜스파일링이 필요한데, 이는 QPU의 기본 게이트 세트가 제한되어 있고 임의의 연산을 실행할 수 없기 때문입니다. 트랜스파일러의 기능은 임의의 회로를 변경하여 지정된 QPU에서 실행할 수 있도록 하는 것입니다. 이는 회로를 지원되는 베이시스 게이트로 변환하고 필요에 따라 SWAP 게이트를 도입하여 회로의 연결이 QPU의 연결과 일치하도록 하는 방식으로 수행됩니다.

패스 관리자를 사용한 Transpile 에서 설명한 대로 다음을 사용하여 패스 관리자를 생성할 수 있습니다. generate_preset_pass_manager 함수를 호출하고 회로나 회로 목록을 run 메서드에 전달하여 변환합니다. 최적화 수준과 백엔드만 전달하고 다른 모든 옵션에 기본값을 사용하도록 선택하여 generate_preset_pass_manager 을 호출하거나, 함수에 추가 인수를 전달하여 번역을 미세 조정할 수 있습니다.


매개변수 없이 기본 사용법

이 예제에서는 추가 파라미터를 지정하지 않고 트랜스파일러에 회로와 타겟 QPU를 전달합니다.

회로를 생성하고 결과를 확인합니다:

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")

Output:

Output of the previous code cell

회로를 트랜스파일하고 결과를 확인합니다:

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)

Output:

Output of the previous code cell

사용 가능한 모든 매개변수

다음은 함수에서 사용할 수 있는 모든 매개변수입니다 generate_preset_pass_manager 함수에 사용할 수 있는 모든 매개변수는 다음과 같습니다. 컴파일 대상을 설명하는 인자와 트랜스파일러의 작동 방식에 영향을 주는 인자의 두 가지 클래스가 있습니다.

optimization_level 을 제외한 모든 매개변수는 선택 사항입니다. 자세한 내용은 트랜스파일러 API 설명서를 참조하세요.

  • optimization_level (int) - 회로에서 얼마나 많은 최적화를 수행할지 설정합니다. 범위(0 - 3)의 정수입니다. 레벨이 높을수록 더 최적화된 회로를 생성하지만, 트랜스퓔레이션 시간이 길어집니다. 자세한 내용은 트랜스파일러 최적화 수준 설정을 참조하세요.

컴파일 대상 설명에 사용되는 매개변수:

이러한 인수는 큐비트의 연결성을 설명하는 큐비트의 커플링 맵, 큐비트가 지원하는 기본 게이트, 게이트의 오류율 등의 정보를 포함하여 회로 실행을 위한 타겟 큐비트를 설명합니다.

이러한 매개변수 중 상당수는 번역에 일반적으로 사용되는 매개변수에 자세히 설명되어 있습니다.

  • 백엔드 매개변수 - backend 를 지정하면 target 또는 다른 백엔드 옵션을 지정할 필요가 없습니다. 마찬가지로 target 을 지정하면 backend 또는 다른 백엔드 옵션을 지정할 필요가 없습니다.

    • backend (백엔드) - 이 옵션을 설정하면 트랜스파일러가 입력 회로를 이 장치로 컴파일합니다. 이러한 설정에 영향을 주는 다른 옵션(예: coupling_map)이 설정되어 있으면 backend 의 설정이 재정의됩니다.
    • target (대상) - 백엔드 트랜스파일러 대상입니다. 일반적으로 이것은 백엔드 인수의 일부로 지정되지만 Target 개체를 수동으로 구성한 경우 여기에 지정할 수 있습니다. 이렇게 하면 backend 에서 대상을 재정의합니다.
    • backend_properties ( BackendProperties ) - 게이트 오류, 판독 오류, 큐비트 일관성 시간 등에 대한 정보를 포함하여 QPU가 반환하는 속성입니다. backend.properties() 을 실행하여 이 정보를 제공하는 QPU를 찾습니다.
    • timing_constraints (Dictstr[, int] | None) - 명령어 시간 해결에 대한 선택적 제어 하드웨어 제한입니다. 이 정보는 QPU 구성에 의해 제공됩니다. QPU에 명령어 시간 할당에 대한 제한이 없는 경우 timing_constraintsNone 이며 조정이 수행되지 않습니다. QPU는 다음과 같은 일련의 제한 사항을 보고할 수 있습니다:
      • granularity: 최소 펄스 게이트 분해능을 dt 단위로 나타내는 정수 값입니다. 사용자 정의 펄스 게이트는 이 세분성 값의 배수인 지속 시간을 가져야 합니다.
      • min_length: 최소 펄스 게이트 길이를 dt 단위로 나타내는 정수 값입니다. 사용자 정의 펄스 게이트는 이 길이보다 길어야 합니다.
      • pulse_alignment: 게이트 명령 시작 시간의 시간 분해능을 나타내는 정수 값입니다. 게이트 인스트럭션은 이 값의 배수인 시간에 시작해야 합니다.
      • acquire_alignment: 측정 명령 시작 시간의 시간 분해능을 나타내는 정수 값입니다. 측정 명령은 이 값의 배수인 시간에 시작해야 합니다.
    • basis_gates ( [Liststr] | None) - 언롤링할 기준 게이트 이름 목록입니다. 예를 들어 [' u1 ', ' u2 ', ' u3 ', 'cx']. None, 펼치지 마세요.
    • coupling_map ( CouplingMap | List[ [Listint] ]) - 매핑에서 타겟에 대한 커플링 맵(사용자 지정 가능)을 지정합니다. 커플링 맵이 대칭인 경우 양쪽 방향을 모두 지정해야 합니다. 다음 형식이 지원됩니다.
      • CouplingMap 인스턴스
      • 목록 - 인접성 행렬로 제공해야 하며, 각 항목은 QPU가 지원하는 모든 방향성 2비트 상호작용을 지정합니다. 예를 들어 [[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1,] [5, 3] ]
    • inst_map ( [ListInstructionScheduleMap] | None) - 회로 연산을 펄스 스케줄에 매핑합니다. None 인 경우 QPU의 instruction_schedule_map 이 사용됩니다.

트랜스파일러의 동작 방식을 제어하는 데 사용되는 매개변수

이러한 매개 변수는 특정 번역 단계에 영향을 줍니다. 그중 일부는 여러 단계에 영향을 미칠 수 있지만 간결성을 위해 한 단계로만 나열했습니다. 사용하려는 큐비트에 initial_layout 같은 인수를 지정하면 해당 값이 이를 변경할 수 있는 모든 패스를 재정의합니다. 즉, 트랜스파일러는 사용자가 수동으로 지정한 내용을 변경하지 않습니다. 특정 단계에 대한 자세한 내용은 트랜스파일러 단계를 참조하세요.

    • hls_config (HLSConfig) - HighLevelSynthesis 변환 패스에 직접 전달되는 선택적 구성 클래스 HLSConfig . 이 구성 클래스를 사용하면 다양한 상위 레벨 오브젝트에 대한 합성 알고리즘 목록과 해당 파라미터를 지정할 수 있습니다.
    • init_method (str) - 초기화 단계에 사용할 플러그인 이름입니다. 기본적으로 외부 플러그인은 사용되지 않습니다. list_stage_plugins() 를 실행하고 스테이지 이름 인수에 init 를 입력하면 설치된 플러그인 목록을 확인할 수 있습니다.
    • unitary_synthesis_method (str) - 사용할 단일 합성 방법의 이름입니다. 기본적으로 default 이 사용됩니다. unitary_synthesis_plugin_names() 을 실행하여 설치된 플러그인 목록을 확인할 수 있습니다.
    • unitary_synthesis_plugin_config (딕셔너리) - 단일 합성 플러그인에 직접 전달되는 선택적 구성 딕셔너리입니다. 기본 단일 합성 방법에는 사용자 지정 구성이 적용되지 않으므로 기본적으로 이 설정은 적용되지 않습니다. 사용자 정의 구성을 적용하는 것은 unitary_synthesis 인수를 사용하여 단일 합성 플러그인을 지정한 경우에만 필요합니다. 이 옵션은 각 단일 합성 플러그인마다 사용자 정의되므로 이 옵션을 사용하는 방법은 해당 플러그인 설명서를 참조하세요.
    • initial_layout (레이아웃 | 사전 | 목록) - 물리 큐비트 상의 가상 큐비트 초기 위치. 이 레이아웃이 회로를 제약 coupling_map 조건과 호환되게 만든다면, 이를 사용할 것입니다. 최종 레이아웃은 동일하지 않을 수 있습니다. 트랜스파일러가 스왑이나 기타 방법을 통해 큐비트를 재배열할 수 있기 때문입니다. 자세한 내용은 초기 레이아웃 섹션을 참조하십시오.
    • layout_method (str) - 레이아웃 선택 패스 이름(default, dense, sabre, trivial). 레이아웃 단계에 사용할 외부 플러그인 이름일 수도 있습니다. stage_name 인수를 layout 으로 하여 list_stage_plugins() 을 실행하면 설치된 플러그인 목록을 확인할 수 있습니다. 기본값은 sabre 입니다.
    • routing_method (str) - 라우팅 패스 이름 (basic, lookahead, default, sabre, 또는 none). 라우팅 단계에 사용할 외부 플러그인 이름일 수도 있습니다. stage_name 인수를 routing 으로 하여 list_stage_plugins() 을 실행하면 설치된 플러그인 목록을 확인할 수 있습니다. 기본값은 sabre 입니다.
    • translation_method (str) - 번역 패스 이름 (default, synthesis, translator, ibm_backend, ibm_dynamic_circuits, ibm_fractional) 번역 단계에 사용할 외부 플러그인 이름일 수도 있습니다. stage_name 인수를 translation 으로 하여 list_stage_plugins() 을 실행하면 설치된 플러그인 목록을 확인할 수 있습니다. 기본값은 translator입니다.
    • approximation_degree (실수, 0-1 범위 | 없음) - 회로 근사치에 사용되는 휴리스틱 다이얼( 1.0 = 근사치 없음, 0.0 = 최대 근사치)입니다. 기본값은 1.0입니다. None 을 지정하면 보고된 오류율에 대한 근사치가 설정됩니다. 자세한 내용은 근사도 섹션을 참조하세요.
    • optimization_method (str) - 최적화 단계에 사용할 플러그인 이름입니다. 기본적으로 외부 플러그인은 사용되지 않습니다. stage_name 인수를 optimization 으로 하여 list_stage_plugins() 을 실행하면 설치된 플러그인 목록을 확인할 수 있습니다.
    • scheduling_method (str) - 스케줄링 패스의 이름입니다. 스케줄링 단계에 사용할 외부 플러그인 이름일 수도 있습니다. stage_name 인수를 scheduling 으로 하여 list_stage_plugins() 을 실행하면 설치된 플러그인 목록을 확인할 수 있습니다.
      • 'as_soon_as_possible': 큐비트 리소스(별칭: asap)에서 가능한 한 빨리 탐욕스럽게 인스트럭션을 예약합니다.
      • 'as_late_as_possible': 가능한 경우 큐비트를 접지 상태로 유지하는, 즉 인스트럭션을 늦게 예약합니다(별칭: alap). 이것이 기본값입니다.
    • seed_transpiler (int) - 트랜스파일러의 확률적 부분에 대한 무작위 시드를 설정합니다.

위의 매개변수를 지정하지 않으면 다음 기본값이 사용됩니다. 자세한 내용은 메서드의 API 참조 페이지를 참조하세요:

generate_preset_pass_manager(
    optimization_level=1,
    backend=None,
    target=None,
    basis_gates=None,
    coupling_map=None,
    initial_layout=None,
    layout_method=None,
    routing_method=None,
    translation_method=None,
    scheduling_method=None,
    approximation_degree=1.0,
    seed_transpiler=None,
    unitary_synthesis_method="default",
    unitary_synthesis_plugin_config=None,
    hls_config=None,
    init_method=None,
    optimization_method=None,
)

Output:

<qiskit.transpiler.passmanager.StagedPassManager at 0x7fa51ff33590>

다음 단계

권장사항
이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.