Перейти до основного вмісту
Цей проєкт у бета-версії. Знайшов(-ла) помилку? Відкрити issue на GitHub. Є запитання чи ідея? Запитати в Discussions — будемо раді твоєму відгуку!
Яка якість перекладу на цій сторінці?

Стандартні налаштування транспіляції та параметри конфігурації

Package versions

Код на цій сторінці розроблено з використанням наступних залежностей. Рекомендуємо використовувати ці версії або новіші.

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

Абстрактні схеми потребують транспіляції, оскільки QPU підтримують обмежений набір базисних Gate і не можуть виконувати довільні операції. Функція транспілятора — перетворювати довільні схеми так, щоб вони могли виконуватися на конкретному QPU. Для цього схеми перетворюються на підтримувані базисні Gate, а за потреби додаються SWAP Gate, щоб зв'язність схеми відповідала зв'язності QPU.

Як пояснено в розділі Транспіляція з менеджерами проходів, ти можеш створити менеджер проходів за допомогою функції generate_preset_pass_manager та передати схему або список схем до його методу run для транспіляції. Можна викликати generate_preset_pass_manager, передаючи лише рівень оптимізації та backend, використовуючи стандартні значення для всіх інших параметрів, або ж передати додаткові аргументи для тонкого налаштування транспіляції.

Базове використання без параметрів​

У цьому прикладі ми передаємо схему та цільовий QPU транспілятору, не вказуючи жодних додаткових параметрів.

Створи схему та перегляни результат:

# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"qiskit": "qiskit", "qiskit_ibm_runtime": "qiskit-ibm-runtime"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
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")

Вивід попередньої комірки коду

Транспілюй схему та перегляни результат:

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)

Вивід попередньої комірки коду

Усі доступні параметри​

Нижче наведено всі доступні параметри функції generate_preset_pass_manager. Існує два класи аргументів: ті, що описують ціль компіляції, і ті, що впливають на роботу транспілятора.

Усі параметри, крім optimization_level, є необов'язковими. Для отримання повної інформації дивись документацію Transpiler API.

Параметри для опису цілі компіляції:​

Ці аргументи описують цільовий QPU для виконання схем, включаючи такі відомості, як карта зв'язності QPU (що описує з'єднання між qubit), базисні Gate, підтримувані QPU, та частоти помилок Gate.

Багато з цих параметрів докладно описано в розділі Часто використовувані параметри транспіляції.

Параметри QPU (`Backend`)

Параметри Backend — якщо ти вказуєш backend, не потрібно вказувати target або інші параметри backend. Аналогічно, якщо ти вказуєш target, не потрібно вказувати backend або інші параметри backend.

  • backend (Backend) — якщо вказано, транспілятор компілює вхідну схему для цього пристрою. Якщо встановлено будь-який інший параметр, що впливає на ці налаштування, наприклад coupling_map, він замінює налаштування з backend.
  • target (Target) — ціль транспілятора для backend. Зазвичай це вказується як частина аргументу backend, але якщо ти вручну побудував об'єкт Target, можна вказати його тут. Це замінює ціль із backend.
  • backend_properties (BackendProperties) — властивості QPU, включаючи інформацію про помилки Gate, помилки зчитування, часи когерентності qubit тощо. Знайди QPU, що надає цю інформацію, виконавши backend.properties().
  • timing_constraints (Dict[str, int] | None) — необов'язкове апаратне обмеження на роздільну здатність часу виконання інструкцій. Ця інформація надається конфігурацією QPU. Якщо QPU не має жодних обмежень на розподіл часу виконання інструкцій, timing_constraints дорівнює None і корекція не виконується. QPU може повідомляти про такі обмеження:
    • granularity: ціле число, що представляє мінімальну роздільну здатність імпульсного Gate у одиницях dt. Тривалість користувацького імпульсного Gate повинна бути кратна цьому значенню.
    • min_length: ціле число, що представляє мінімальну довжину імпульсного Gate у одиницях dt. Користувацький імпульсний Gate повинен бути довшим за це значення.
    • pulse_alignment: ціле число, що представляє роздільну здатність часу для початку виконання Gate інструкції. Інструкції Gate повинні починатися у момент, кратний цьому значенню.
    • acquire_alignment: ціле число, що представляє роздільну здатність часу для початку виконання інструкції вимірювання. Інструкція вимірювання повинна починатися у момент, кратний цьому значенню.
Параметри розміщення та топології
  • basis_gates (List[str] | None) — список назв базисних Gate для розгортання. Наприклад ['u1', 'u2', 'u3', 'cx']. Якщо None, розгортання не виконується.

  • coupling_map (CouplingMap | List[List[int]]) — спрямована карта зв'язності (можливо, користувацька) для відображення. Якщо карта зв'язності симетрична, потрібно вказати обидва напрямки. Підтримуються такі формати:

    • Екземпляр CouplingMap

    • List — повинен бути заданий як матриця суміжності, де кожен запис визначає всі дозволені спрямовані двокубітові взаємодії на QPU. Наприклад: [[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3]]

  • inst_map (List[InstructionScheduleMap] | None) - Відображення операцій схеми на розклади імпульсів. Якщо None, використовується instruction_schedule_map QPU.

Параметри, що впливають на роботу транспілятора​

Ці параметри впливають на конкретні етапи транспіляції. Деякі з них можуть впливати на кілька етапів, але для простоти вони перераховані лише під одним. Якщо ти вказуєш аргумент, наприклад initial_layout для qubit, які хочеш використовувати, це значення замінює всі проходи, що могли б його змінити. Іншими словами, транспілятор не змінить нічого, що ти вказуєш вручну. Для отримання інформації про конкретні етапи дивись Етапи транспілятора.

Етап ініціалізації
  • hls_config (HLSConfig) — необов'язковий клас конфігурації HLSConfig, що передається безпосередньо до проходу трансформації HighLevelSynthesis. Цей клас конфігурації дозволяє вказувати списки алгоритмів синтезу та їхні параметри для різних об'єктів високого рівня.

  • init_method (str) — назва плагіна для використання на етапі ініціалізації. За замовчуванням зовнішній плагін не використовується. Список встановлених плагінів можна переглянути, виконавши list_stage_plugins() з init як аргументом назви етапу.

  • unitary_synthesis_method (str) — назва методу унітарного синтезу. За замовчуванням використовується default. Список встановлених плагінів можна переглянути, виконавши unitary_synthesis_plugin_names().

  • unitary_synthesis_plugin_config (dict) - Необов'язковий словник конфігурації, який передається безпосередньо до плагіна унітарного синтезу. За замовчуванням цей параметр не має ефекту, оскільки типовий метод унітарного синтезу не приймає власної конфігурації. Застосування власної конфігурації має бути потрібним лише тоді, коли плагін унітарного синтезу вказано за допомогою аргументу unitary_synthesis. Оскільки це унікально для кожного плагіна унітарного синтезу, звернися до документації плагіна щодо використання цього параметра.

Етап розташування
  • initial_layout (Layout | Dict | List) — початкове розміщення віртуальних qubit на фізичних qubit. Якщо це розміщення робить схему сумісною з обмеженнями coupling_map, воно буде використане. Кінцеве розміщення не гарантується таким самим, оскільки транспілятор може переставляти qubit через SWAP або інші засоби. Для повної інформації дивись розділ про початкове розміщення.

  • layout_method (str) - Назва проходу вибору розташування (default, dense, sabre та trivial). Це також може бути назвою зовнішнього плагіна для етапу розташування. Список встановлених плагінів можна переглянути, запустивши list_stage_plugins() з layout для аргументу stage_name. Типове значення — sabre.

Етап маршрутизації
  • routing_method (str) - Назва проходу маршрутизації (basic, lookahead, default, sabre або none). Це також може бути назвою зовнішнього плагіна для етапу маршрутизації. Список встановлених плагінів можна переглянути, запустивши list_stage_plugins() з routing для аргументу stage_name. Типове значення — sabre.
Етап трансляції
  • translation_method (str) - Назва проходу трансляції (default, synthesis, translator, ibm_backend, ibm_dynamic_circuits, ibm_fractional) Це також може бути назвою зовнішнього плагіна для етапу трансляції. Список встановлених плагінів можна переглянути, запустивши list_stage_plugins() з translation для аргументу stage_name. Типове значення — translator.
Етап оптимізації
  • approximation_degree (float, у діапазоні 0-1 | None) - Евристичний параметр, що використовується для апроксимації схеми (1.0 = без апроксимації, 0.0 = максимальна апроксимація). Типове значення — 1.0. Вказання None встановлює ступінь апроксимації рівним заявленому рівню помилок. Дивись розділ про ступінь апроксимації для деталей.

  • optimization_method (str) - Назва плагіна для етапу оптимізації. За замовчуванням зовнішній плагін не використовується. Список встановлених плагінів можна переглянути, запустивши list_stage_plugins() з optimization для аргументу stage_name.

Етап планування
  • scheduling_method (str) - Назва проходу планування. Це також може бути назвою зовнішнього плагіна для етапу планування. Список встановлених плагінів можна переглянути, запустивши list_stage_plugins() з scheduling для аргументу stage_name.

    • 'as_soon_as_possible': Планує інструкції жадібно, якомога раніше на ресурсі кубіта (псевдонім: asap).

    • 'as_late_as_possible': Планує інструкції пізно, тобто утримуючи кубіти в основному стані, коли це можливо (псевдонім: alap). Це типове значення.

Виконання транспілятора
  • seed_transpiler (int) - Задає початкові значення (seed) генератора випадкових чисел для стохастичних частин транспілятора.

Якщо ти не вказуєш жодного з наведених вище параметрів, використовуються такі стандартні значення. Для отримання додаткової інформації дивись сторінку довідника 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,
)
<qiskit.transpiler.passmanager.StagedPassManager at 0x1403cd250>

Наступні кроки​

Рекомендації