Skip to main content
IBM Quantum Platform

트랜스파일러 플러그인 설치 및 사용

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

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

더 많은 키스킷 사용자 커뮤니티가 사용자 정의 변환 코드를 개발하고 재사용할 수 있도록, 키스킷 SDK는 타사 Python 패키지가 키스킷을 통해 액세스 가능한 확장된 변환 기능을 제공한다고 선언할 수 있는 플러그인 인터페이스를 지원합니다.

현재 타사 플러그인은 세 가지 방법으로 확장된 번역 기능을 제공할 수 있습니다:

  • 트랜스파일러 스테이지 플러그인은 사전 설정된 스테이지 패스 매니저의 6단계 중 하나를 대신하여 사용할 수 있는 패스 매니저를 제공합니다: init, layout, routing, translation, optimization, scheduling.
  • 유니타리 합성 플러그인은 유니타리 게이트 합성을 위한 확장 기능을 제공합니다.
  • 고수준 합성 플러그인은 선형 함수나 클리포드 연산자 같은 '고수준 객체'를 합성하기 위한 확장 기능을 제공합니다. 상위 레벨 객체는 Operation 클래스의 서브클래스로 표현됩니다.

이 페이지의 나머지 부분에서는 사용 가능한 플러그인을 나열하고, 새 플러그인을 설치하고, 사용하는 방법을 설명합니다.


사용 가능한 플러그인을 나열하고 새 플러그인을 설치하세요

키스킷에는 이미 번역을 위한 몇 가지 내장 플러그인이 포함되어 있습니다. 더 설치하려면 Python 패키지 관리자를 사용하세요. 예를 들어, pip install qiskit-toqm 을 실행하여 키스킷 TOQM 라우팅 스테이지 플러그인을 설치할 수 있습니다. 수많은 서드파티 플러그인이 키스킷 생태계의 일부입니다.

사용 가능한 트랜스파일러 스테이지 플러그인 목록

리스트_스테이지_플러그인 함수를 사용하여 플러그인을 나열할 스테이지의 이름을 전달합니다.

from qiskit.transpiler.preset_passmanagers.plugin import list_stage_plugins

list_stage_plugins("layout")

Output:

['default', 'dense', 'sabre', 'trivial']
list_stage_plugins("routing")

Output:

['basic', 'default', 'lookahead', 'none', 'sabre']

qiskit-toqm 이 설치되어 있다면 toqmrouting 플러그인 목록에 표시됩니다.

사용 가능한 단일 합성 플러그인 목록

유니타리_합성_플러그인_이름 함수를 사용합니다.

from qiskit.transpiler.passes.synthesis import unitary_synthesis_plugin_names

unitary_synthesis_plugin_names()

Output:

['aqc', 'clifford', 'default', 'gridsynth', 'sk']

사용 가능한 고급 합성 플러그인 목록

높은_레벨_합성_플러그인_이름 함수를 사용하여 합성할 "상위 레벨 객체" 유형의 이름을 전달합니다. 이름은 합성 중인 객체의 유형을 나타내는 name 속성에 해당하며, 합성되는 객체의 유형을 나타냅니다.

from qiskit.transpiler.passes.synthesis import (
    high_level_synthesis_plugin_names,
)

high_level_synthesis_plugin_names("clifford")

Output:

['rb_default', 'ag', 'bm', 'default', 'greedy', 'layers', 'lnn']

클래스를 사용하여 HighLevelSynthesisPluginManager 클래스를 사용하여 모든 상위 레벨 합성 플러그인의 이름을 나열할 수 있습니다:

from qiskit.transpiler.passes.synthesis.plugin import (
    HighLevelSynthesisPluginManager,
)

HighLevelSynthesisPluginManager().plugins.names()

Output:

['clifford.rb_default',
 'FullAdder.default',
 'FullAdder.ripple_c04',
 'FullAdder.ripple_v95',
 'HalfAdder.default',
 'HalfAdder.qft_d00',
 'HalfAdder.ripple_c04',
 'HalfAdder.ripple_r25',
 'HalfAdder.ripple_v95',
 'IntComp.default',
 'IntComp.noaux',
 'IntComp.twos',
 'ModularAdder.default',
 'ModularAdder.modular_v17',
 'ModularAdder.qft_d00',
 'ModularAdder.ripple_c04',
 'ModularAdder.ripple_v95',
 'Multiplier.cumulative_h18',
 'Multiplier.default',
 'Multiplier.qft_r17',
 'PauliEvolution.default',
 'PauliEvolution.rustiq',
 'WeightedSum.default',
 'annotated.default',
 'clifford.ag',
 'clifford.bm',
 'clifford.default',
 'clifford.greedy',
 'clifford.layers',
 'clifford.lnn',
 'linear_function.default',
 'linear_function.kms',
 'linear_function.pmh',
 'mcmt.default',
 'mcmt.noaux',
 'mcmt.vchain',
 'mcmt.xgate',
 'mcx.1_clean_b95',
 'mcx.1_clean_kg24',
 'mcx.1_dirty_kg24',
 'mcx.2_clean_kg24',
 'mcx.2_dirty_kg24',
 'mcx.default',
 'mcx.gray_code',
 'mcx.n_clean_m15',
 'mcx.n_dirty_i15',
 'mcx.noaux_hp24',
 'mcx.noaux_v24',
 'permutation.acg',
 'permutation.basic',
 'permutation.default',
 'permutation.kms',
 'permutation.token_swapper',
 'qft.default',
 'qft.full',
 'qft.line']

플러그인을 사용하세요

이 섹션에서는 트랜스파일러 플러그인을 사용하는 방법을 설명합니다. 코드 예제에서는 키스킷과 함께 제공되는 플러그인을 사용하지만 타사 패키지에서 설치한 플러그인도 동일한 방식으로 사용됩니다.

트랜스파일러 단계 플러그인을 사용하십시오

트랜스파일러 스테이지 플러그인을 사용하려면, 또는 generate_preset_pass_manager 에 적절한 인수를 사용하여 해당 transpile 플러그인의 이름을 지정하십시오. 인수는 트랜스파일레이션 단계의 이름 뒤에 를 _method 추가하여 구성됩니다. 예를 들어, 라우팅 lookahead 플러그인을 사용하려면 routing_method argument에 ``를 lookahead 지정하면 됩니다.

Note

이 예제에서는 의 모의 FakeSherbrooke``qiskit_ibm_runtime 백엔드를 사용하지만, Qiskit과 호환되는 실제 또는 모의 백엔드라면 어떤 것이든 사용해 볼 수 있습니다. 결과는 다를 수 있습니다.

from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime.fake_provider import FakeSherbrooke

backend = FakeSherbrooke()

pass_manager = generate_preset_pass_manager(
    optimization_level=3, backend=backend, routing_method="lookahead"
)

단일 합성 플러그인을 사용하십시오

단일 합성 플러그인을 사용하려면 이름을 unitary_synthesis_method 인자로 지정하여 generate_preset_pass_manager 또는 transpile:

pass_manager = generate_preset_pass_manager(
    optimization_level=3,
    backend=backend,
    unitary_synthesis_method="sk",
    unitary_synthesis_plugin_config=dict(
        basis_gates=["cz", "id", "rz", "sx", "x"]
    ),
)

단일 합성은 init, translation, optimization 에서 반환된 스테이지드 패스 매니저에서 사용되거나 generate_preset_pass_manager 에서 반환되거나 transpile. 이러한 단계에 대한 설명은 트랜스파일러 단계를 참조하세요.

자유 형식 사전인 unitary_synthesis_plugin_config 인수를 사용하여 단일 합성 방법에 대한 옵션을 전달합니다. 합성 방법의 문서에는 지원되는 옵션이 설명되어 있어야 합니다. 기본 제공되는 단일 합성 플러그인의 문서 링크는 이 목록을 참조하세요.

고수준 합성 플러그인을 사용하십시오

먼저, 다양한 상위 수준 객체에 사용할 플러그인의 이름을 저장하기 위한 HLSConfig를 만듭니다. 예를 들어,

from qiskit.transpiler.passes import HLSConfig

hls_config = HLSConfig(clifford=["layers"], linear_function=["pmh"])

이 코드 셀은 layers 플러그인을 사용하는 높은 수준의 합성 구성을 생성합니다 과 Clifford 오브젝트 합성을 위한 pmh 플러그인을 사용하는 하이레벨 합성 구성을 생성합니다 LinearFunction 오브젝트를 합성합니다. 키워드 인수의 이름은 다음과 같습니다 name 어트리뷰트에 해당하며, 합성되는 객체의 유형을 나타냅니다. 각 상위 수준 객체에 대해 주어진 플러그인 목록이 그 중 하나가 성공할 때까지 순차적으로 시도됩니다 성공할 때까지 순차적으로 시도됩니다(위의 예에서는 각 목록에 하나의 플러그인만 포함되어 있습니다).

이름으로 플러그인을 지정하는 것 외에도 대신 (name, options) 튜플을 전달할 수 있으며, 이 튜플의 두 번째 요소는 플러그인 옵션이 포함된 딕셔너리입니다. 합성 방법의 문서에는 지원되는 옵션이 설명되어 있어야 합니다. 기본 제공되는 고급 합성 플러그인의 문서 링크는 이 목록을 참조하세요.

HLSConfig 객체를 생성한 후, 이 객체를 hls_config 인자로 전달합니다 generate_preset_pass_manager 또는 transpile:

pass_manager = generate_preset_pass_manager(
    optimization_level=3, backend=backend, hls_config=hls_config
)

하이 레벨 합성은 init, translation, optimization 에서 반환된 스테이지드 패스 매니저의,, 단계에서 사용되거나 generate_preset_pass_manager 에서 반환되거나 transpile. 이러한 단계에 대한 설명은 트랜스파일러 단계를 참조하세요.


다음 단계

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