트랜스파일러 스테이지 플러그인 인터페이스
qiskit.transpiler.preset_passmanagers.plugin
이 모듈은 프리셋 패스 관리자 및 함수에 transpile() 대한 사용자 정의 스테이지 구현을 제공하기 위한 플러그인 인터페이스를 정의합니다. 이를 통해 외부 Python 패키지에서 각 명명된 단계에 사용할 수 있는 객체를 제공할 PassManager 수 있습니다.
플러그인 인터페이스는 키스킷 외부의 패키지가 트랜스파일러 스테이지를 포함하고 있음을 알릴 수 있도록 설정도구 진입점을 사용하여 구축됩니다.
트랜스파일러 합성 메서드에 대한 플러그인을 대신 작성하는 방법에 대한 자세한 내용은 qiskit.transpiler.passes.synthesis.plugin.
플러그인 단계
프리셋 패스 관리자에는 6단계가 있으며, 모두 해당 진입 지점을 사용하여 외부 플러그인을 능동적으로 로드합니다. 다음 표에는 각 단계가 요약되어 있습니다. 각 단계에 대한 설명과 기대치에 대한 자세한 내용은 단계 이름에 있는 링크를 따라 전체 문서로 이동하세요.
스테이지 이름 | 시작점 | 예약 이름 | 요약 |
|---|---|---|---|
| 초기화 | qiskit.transpiler.init | default | 추상 회로에 대한 높은 수준의 논리적 최적화와 다중 큐비트 연산을 1큐비트 및 2큐비트 연산으로 축소합니다. |
| 레이아웃 | qiskit.transpiler.layout | trivial, dense, sabre, default | 가상 큐비트와 물리적 큐비트의 초기 매핑을 선택하고, 명시적 부수자를 포함하도록 회로를 확장합니다. 이 단계는 때때로 routing 와 결합되기도 합니다. |
| 라우팅 | qiskit.transpiler.routing | default, basic, stochastic, lookahead, sabre | Target회로에 게이트를 삽입하여 회로가 의 연결 제약 조건을 충족하도록 하십시오. 삽입된 게이트는 아직 대상 ISA에 포함될 필요가 없기 때문에, 대개는 단순히 명령어로 swap 출력됩니다. layout이 단계는 때때로 에 포함되기도 합니다. |
| 변환 | qiskit.transpiler.translation | default, translator, synthesis | 대상 ISA 외부의 모든 게이트를 다시 작성하여 ISA 내부의 게이트만 사용하도록 합니다. |
| 최적화 | qiskit.transpiler.optimization | default | 낮은 수준의 물리적 회로 인식 최적화. init 과 달리 optimization 단계는 물리적 회로 수준에서 작동합니다. |
| 스케줄링 | qiskit.transpiler.scheduling | alap, asap, default | 삽입 Delay 명령어를 삽입하여 회로의 벽시계 타이밍을 완전히 명시하세요. |
플러그인 작성
패스 매니저 스테이지 플러그인을 작성하려면 크게 두 단계가 있습니다. 첫 번째 단계는 해당 스테이지의 플러그인이 PassManager 어떻게 구성될지 정의하는 데 사용되는 추상 플러그인 PassManagerStagePlugin 클래스의 서브클래스를 생성하는 것입니다. 예를 들어, (최적화 수준에 따라 시도 횟수를 점차 늘려가며) 단순히 실행만 VF2Layout 하고, 가 완벽한 레이아웃을 찾지 못할 경우 VF2Layout 로 TrivialLayout 되돌아가는 스테이지 플러그인을 layout 만들려면:
from qiskit.transpiler.preset_passmanagers.plugin import PassManagerStagePlugin
from qiskit.transpiler.preset_passmanagers import common
from qiskit.transpiler import PassManager
from qiskit.transpiler.passes import VF2Layout, TrivialLayout
from qiskit.transpiler.passes.layout.vf2_layout import VF2LayoutStopReason
from qiskit.passmanager import ConditionalController
def _vf2_match_not_found(property_set):
return property_set.get("layout") is None or (
property_set.get("VF2Layout_stop_reason") is not None
and property_set.get("VF2Layout_stop_reason")
is not VF2LayoutStopReason.SOLUTION_FOUND
)
class VF2LayoutPlugin(PassManagerStagePlugin):
def pass_manager(self, pass_manager_config, optimization_level):
layout_pm = PassManager(
[
VF2Layout(
coupling_map=pass_manager_config.coupling_map,
max_trials=optimization_level * 10 + 1,
target=pass_manager_config.target,
),
ConditionalController(
TrivialLayout(pass_manager_config.coupling_map),
condition=_vf2_match_not_found,
),
]
)
layout_pm += common.generate_embed_passmanager(pass_manager_config.coupling_map)
return layout_pm두 번째 단계는 패키지 메타데이터에서 해당 PassManagerStagePlugin 하위 클래스를 setuptools의 진입점으로 지정하는 것입니다. 이는 플러그인 패키지의 pyproject.toml 테이블에서 entry-points , 해당 플러그인이 적용되는 단계에 맞는 네임스페이스 아래에 필요한 진입점을 지정하여 수행할 수 있습니다. ‘플러그인 단계’에서 단계 목록, 진입점 및 해당 단계에서 기대되는 사항을 확인할 수 있습니다. 예를 들어, 앞서 소개한 플러그인 예제를 이어가면 다음과 같습니다:
[project.entry-points."qiskit.transpiler.layout"]
"vf2" = "qiskit_plugin_pkg.module.plugin:VF2LayoutPlugin"각 플러그인에 고유한 이름이 있는 한 단일 패키지에 포함할 수 있는 플러그인 수에는 제한이 없습니다. 따라서 필요한 경우 단일 패키지로 여러 플러그인을 노출할 수 있습니다. 각 단계의 예약된 이름 목록은 플러그인 단계를 참조하세요.
플러그인 API
PassManagerStagePlugin() | PassManagerStagePlugin 은 사용자 정의 스테이지를 사용하기 위한 플러그인 인터페이스 객체입니다 transpile(). |
PassManagerStagePluginManager() | 사전 설정 패스 관리자 스테이지 플러그인을 위한 관리자 클래스입니다. |
list_stage_plugins
qiskit.transpiler.preset_passmanagers.plugin.list_stage_plugins(stage_name)
스테이지에 설치된 플러그인 목록을 가져옵니다.
매개변수
stage_name (str) – 플러그인 이름을 가져올 스테이지 이름입니다
리턴
지정된 스테이지에 설치된 플러그인 이름 목록
리턴 유형
플러그인
레이즈
TranspilerError - 잘못된 스테이지 이름을 지정한 경우.
passmanager_stage_plugins
qiskit.transpiler.preset_passmanagers.plugin.passmanager_stage_plugins(stage)
각 스테이지 이름에 대해 플러그인의 클래스 유형이 포함된 딕셔너리를 반환합니다.
이 기능은 플러그인에 대한 자세한 정보를 얻을 때 유용합니다:
from qiskit.transpiler.preset_passmanagers.plugin import passmanager_stage_plugins
routing_plugins = passmanager_stage_plugins('routing')
basic_plugin = routing_plugins['basic']
help(basic_plugin)Help on BasicSwapPassManager in module ...preset_passmanagers.builtin_plugins object:
class BasicSwapPassManager(...preset_passmanagers.plugin.PassManagerStagePlugin)
| Plugin class for routing stage with :class:`~.BasicSwap`
|
| Method resolution order:
| BasicSwapPassManager
| ...preset_passmanagers.plugin.PassManagerStagePlugin
| abc.ABC
| builtins.object
...매개변수
stage (str) – 얻을 무대명
리턴
키는 플러그인의 이름이고 값은 각각에 대한 클래스 유형입니다.
리턴 유형
레이즈
TranspilerError - 잘못된 스테이지 이름을 지정한 경우.