트랜스파일러 플러그인 설치 및 사용
이 페이지의 코드는 다음 요구 사항을 사용하여 개발되었습니다. 다음 버전 이상을 사용하는 것이 좋습니다.
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 이 설치되어 있다면 toqm 이 routing 플러그인 목록에 표시됩니다.
사용 가능한 단일 합성 플러그인 목록
유니타리_합성_플러그인_이름 함수를 사용합니다.
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 지정하면 됩니다.
이 예제에서는 의 모의 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. 이러한 단계에 대한 설명은 트랜스파일러 단계를 참조하세요.
다음 단계
- 트랜스파일러 플러그인을 만듭니다.
- 튜토리얼에서 양자 회로 트랜스파일링 및 실행 예제를 확인하세요.