Перейти до основного вмісту

Міграція з BackendV1 на BackendV2

Клас Qiskit BackendV1 є застарілим і буде вилучений з обслуговування. Цей посібник з міграції описує невеликі зміни, які тобі потрібно внести, якщо ти використовуєш провайдера, що оновився з BackendV1 на BackendV2.

примітка

Якщо ти використовуєш виключно qiskit_ibm_runtime та qiskit_aer, жодних дій не потрібно. Пакет qiskit_ibm_runtime завжди використовував BackendV2, а qiskit_aer використовує BackendV2 починаючи з версії 0.13.

Основні зміни в BackendV2

Модель Qiskit Backend була розроблена для забезпечення Qiskit SDK рівнем абстракції, який дозволяв міркувати про квантові комп'ютери в межах SDK. Перша ітерація моделі була представлена класом BackendV1. Цей клас зберігав інформацію про Backend у серії контейнерів даних, а саме класах BackendConfiguration та BackendProperties.

Клас BackendV2 переглянув доступ користувача до більшості властивостей Backend, щоб вони працювали з нативними структурами даних Qiskit і мали більш плоскі шаблони доступу. Ядром моделі BackendV2 є клас Target — представлення QPU, що містить обмеження транспіляції, які Qiskit може використовувати для оптимізації Circuit для виконання.

Qiskit SDK було оновлено для роботи виключно з вхідними даними BackendV2, і більшість провайдерів оновилися з BackendV1 на BackendV2. Очікується, що існуючі провайдери визнають застарілим старий доступ, де це можливо, для плавної міграції, але врешті-решт користувачам потрібно буде адаптувати свій код.

Принцип BackendV2 полягає в тому, що більша частина інформації про Backend міститься в його об'єкті Target, і атрибути Backend часто звертаються до атрибута BackendV2.target для повернення інформації. Проте в багатьох випадках атрибути надають лише підмножину інформації, яку може містити Target. Наприклад, backend.coupling_map повертає CouplingMap, побудовану з Target, доступного в атрибуті BackendV2.target. Проте Target може містити інструкції, які працюють з більш ніж двома Qubit (що не може бути представлено в CouplingMap), або може мати інструкції, які працюють лише з підмножиною Qubit (або двокубітних зв'язків для двокубітної інструкції), що не буде детально відображено в повній карті зв'язків, що повертається BackendV2.coupling_map. Тому, залежно від твого випадку використання, може бути необхідно заглибитися далі, ніж просто еквівалентний доступ через BackendV2.

Конкретні зміни в BackendV2

Більшість атрибутів мають пряму заміну, що спрощує зусилля з міграції. Єдиною точкою розбіжності між інтерфейсами є CouplingMap.

Нижче наведена таблиця прикладів шаблонів доступу в BackendV1 та нова форма з BackendV2.

important

Прокрути праворуч, щоб побачити важливі примітки.

BackendV1BackendV2Примітки
backend.configuration().n_qubitsbackend.num_qubits
backend.configuration().coupling_mapbackend.coupling_mapПовернення з BackendV2 — це об'єкт CouplingMap. У BackendV1 це список ребер. Також це лише перегляд інформації, що міститься в backend.target, яка може бути лише підмножиною інформації в об'єкті Target.
backend.configuration().backend_namebackend.name
backend.configuration().backend_versionbackend.backend_versionАтрибут BackendV2.version представляє версію абстрактного інтерфейсу Backend, який реалізує об'єкт, тоді як BackendV2.backend_version — це метадані про версію самого Backend.
backend.configuration().basis_gatesbackend.operation_namesBackendV2 повертає список імен операцій, що містяться в атрибуті backend.target. Target може містити більше інформації, ніж може бути виражено цим списком імен. Наприклад, деякі операції працюють лише з підмножиною Qubit, а деякі імена реалізують той самий Gate з різними параметрами.
backend.configuration().dtbackend.dt
backend.configuration().dtmbackend.dtm
backend.configuration().max_experimentsbackend.max_circuits
backend.configuration().online_datebackend.online_date
InstructionDurations.from_backend(backend)backend.instruction_durations
backend.defaults().instruction_schedule_mapbackend.instruction_schedule_map
backend.properties().t1(0)backend.qubit_properties(0).t1
backend.properties().t2(0)backend.qubit_properties(0).t2
backend.properties().frequency(0)backend.qubit_properties(0).frequency
backend.properties().readout_error(0)backend.target["measure"][(0,)].errorУ BackendV2 частота помилок для операції Measure на даному Qubit використовується для моделювання помилки зчитування. Проте об'єкт BackendV2 може реалізовувати кілька типів вимірювань і перераховувати їх окремо в Target.
backend.properties().readout_length(0)backend.target["measure"][(0,)].durationУ BackendV2 тривалість операції Measure на даному Qubit використовується для моделювання довжини зчитування. Проте об'єкт BackendV2 може реалізовувати кілька типів вимірювань і перераховувати їх окремо в Target.