주 콘텐츠로 건너뛰기

Transpiler 플러그인 설치 및 사용

패키지 버전

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

qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1

Qiskit 사용자 커뮤니티에서 커스텀 트랜스파일 코드의 개발과 재사용을 촉진하기 위해, Qiskit SDK는 서드파티 Python 패키지가 Qiskit을 통해 접근 가능한 확장 트랜스파일 기능을 제공한다고 선언할 수 있는 플러그인 인터페이스를 지원합니다.

현재 서드파티 플러그인은 다음 세 가지 방법으로 확장 트랜스파일 기능을 제공할 수 있습니다:

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

사용 가능한 플러그인 목록 조회 및 새 플러그인 설치

Qiskit에는 이미 트랜스파일을 위한 기본 내장 플러그인이 포함되어 있습니다. 추가 플러그인을 설치하려면 Python 패키지 매니저를 사용하면 됩니다. 예를 들어, pip install qiskit-toqm을 실행하면 Qiskit TOQM 라우팅 스테이지 플러그인을 설치할 수 있습니다. 다양한 서드파티 플러그인이 Qiskit 에코시스템의 일부로 제공됩니다.

사용 가능한 Transpiler 스테이지 플러그인 목록 조회

list_stage_plugins 함수를 사용하고, 목록을 조회할 스테이지 이름을 인수로 전달합니다.

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit.transpiler.preset_passmanagers.plugin import list_stage_plugins

list_stage_plugins("layout")
['default', 'dense', 'sabre', 'trivial']
list_stage_plugins("routing")
['basic', 'default', 'lookahead', 'none', 'sabre']

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

사용 가능한 유니터리 합성 플러그인 목록 조회

unitary_synthesis_plugin_names 함수를 사용합니다.

from qiskit.transpiler.passes.synthesis import unitary_synthesis_plugin_names

unitary_synthesis_plugin_names()
['aqc', 'clifford', 'default', 'gridsynth', 'sk']

사용 가능한 고수준 합성 플러그인 목록 조회

high_level_synthesis_plugin_names 함수를 사용하고, 합성할 "고수준 객체" 유형의 이름을 인수로 전달합니다. 이름은 합성 대상 객체 유형을 나타내는 Operation 클래스의 name 속성에 해당합니다.

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

high_level_synthesis_plugin_names("clifford")
['ag', 'bm', 'default', 'greedy', 'layers', 'lnn', 'rb_default']

HighLevelSynthesisPluginManager 클래스를 사용하면 모든 고수준 합성 플러그인의 이름을 나열할 수 있습니다:

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

HighLevelSynthesisPluginManager().plugins.names()
['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',
'clifford.rb_default']

플러그인 사용하기

이 섹션에서는 Transpiler 플러그인을 사용하는 방법을 보여줍니다. 코드 예제에서는 Qiskit에 내장된 플러그인을 사용하지만, 서드파티 패키지에서 설치한 플러그인도 동일한 방식으로 사용됩니다.

Transpiler 스테이지 플러그인 사용하기

Transpiler 스테이지 플러그인을 사용하려면, generate_preset_pass_manager 또는 transpile의 적절한 인수에 플러그인 이름을 지정합니다. 인수 이름은 트랜스파일 스테이지 이름 뒤에 _method를 붙여서 만들어집니다. 예를 들어, lookahead 라우팅 플러그인을 사용하려면 routing_method 인수에 lookahead를 지정합니다:

from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.backend("ibm_fez")

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

유니터리 합성 플러그인 사용하기

유니터리 합성 플러그인을 사용하려면, generate_preset_pass_manager 또는 transpileunitary_synthesis_method 인수에 플러그인 이름을 지정합니다:

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

유니터리 합성은 generate_preset_pass_manager가 반환하거나 transpile에서 사용하는 스테이지 패스 매니저의 init, translation, optimization 스테이지에서 사용됩니다. 이 스테이지들에 대한 설명은 Transpiler 스테이지를 참고하세요.

유니터리 합성 방법의 옵션을 전달하려면 자유 형식 딕셔너리인 unitary_synthesis_plugin_config 인수를 사용합니다. 합성 방법의 문서에서 지원되는 옵션을 확인할 수 있습니다. 내장 유니터리 합성 플러그인 문서 링크는 이 목록을 참고하세요.

고수준 합성 플러그인 사용하기

먼저, 다양한 고수준 객체에 사용할 플러그인 이름을 저장하기 위해 HLSConfig를 생성합니다. 예를 들어:

from qiskit.transpiler.passes import HLSConfig

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

이 코드 셀은 Clifford 객체 합성에 layers 플러그인을, LinearFunction 객체 합성에 pmh 플러그인을 사용하는 고수준 합성 설정을 생성합니다. 키워드 인수의 이름은 합성 대상 객체 유형을 나타내는 Operation 클래스의 name 속성에 해당합니다. 각 고수준 객체에 대해, 지정된 플러그인 목록은 그 중 하나가 성공할 때까지 순서대로 시도됩니다(위 예제에서는 각 목록에 플러그인이 하나씩만 포함되어 있습니다).

플러그인을 이름으로 지정하는 것 외에도, (name, options) 튜플을 전달할 수 있습니다. 여기서 튜플의 두 번째 요소는 플러그인의 옵션을 담은 딕셔너리입니다. 합성 방법의 문서에서 지원되는 옵션을 확인할 수 있습니다. 내장 고수준 합성 플러그인 문서 링크는 이 목록을 참고하세요.

HLSConfig 객체를 생성한 후, generate_preset_pass_manager 또는 transpilehls_config 인수로 전달합니다:

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

고수준 합성은 generate_preset_pass_manager가 반환하거나 transpile에서 사용하는 스테이지 패스 매니저의 init, translation, optimization 스테이지에서 사용됩니다. 이 스테이지들에 대한 설명은 Transpiler 스테이지를 참고하세요.

다음 단계

권장 사항