Lewati ke konten utama

Migrasi dari BackendV1 ke BackendV2

Kelas Qiskit BackendV1 telah didepresiasi dan akan dihapus dari layanan. Panduan migrasi ini menjelaskan penyesuaian kecil yang perlu kamu lakukan jika menggunakan provider yang sudah diperbarui dari BackendV1 ke BackendV2.

catatan

Jika kamu hanya menggunakan qiskit_ibm_runtime dan qiskit_aer, tidak ada tindakan yang perlu dilakukan. Paket qiskit_ibm_runtime selalu menggunakan BackendV2, dan qiskit_aer sudah menggunakan BackendV2 sejak versi 0.13.

Perubahan utama di BackendV2​

Model Qiskit Backend dirancang untuk menyediakan lapisan abstraksi kepada Qiskit SDK yang memungkinkan penalaran tentang komputer kuantum dalam lingkup SDK. Iterasi pertama model ini diperkenalkan melalui kelas BackendV1. Kelas ini menyimpan informasi backend dalam serangkaian kontainer data, yaitu kelas BackendConfiguration dan BackendProperties.

Kelas BackendV2 mendefinisikan ulang akses pengguna untuk sebagian besar properti backend agar bisa bekerja dengan struktur data Qiskit native dan memiliki pola akses yang lebih datar. Inti dari model BackendV2 adalah kelas Target, sebuah representasi QPU yang berisi batasan transpilasi yang bisa digunakan Qiskit untuk mengoptimalkan Circuit untuk eksekusi.

Qiskit SDK telah diperbarui untuk bekerja secara eksklusif dengan input BackendV2, dan sebagian besar provider sudah diperbarui dari BackendV1 ke BackendV2. Diharapkan bahwa provider yang sudah ada akan mendepresiasi akses lama di mana memungkinkan untuk memberikan migrasi yang mulus, namun pada akhirnya pengguna perlu menyesuaikan kode mereka.

Prinsip di balik BackendV2 adalah bahwa sebagian besar informasi tentang sebuah backend terdapat dalam objek Target-nya, dan atribut backend sering kali mengkueri atribut BackendV2.target-nya untuk mengembalikan informasi. Namun, dalam banyak kasus atribut hanya memberikan sebagian informasi yang bisa dikandung target. Misalnya, backend.coupling_map mengembalikan objek CouplingMap yang dibangun dari Target yang dapat diakses di atribut BackendV2.target. Namun, target mungkin mengandung instruksi yang beroperasi pada lebih dari dua Qubit (yang tidak bisa direpresentasikan dalam CouplingMap) atau mungkin memiliki instruksi yang hanya beroperasi pada sebagian Qubit (atau dua tautan Qubit, untuk instruksi dua Qubit), yang tidak akan diperinci dalam coupling map lengkap yang dikembalikan oleh BackendV2.coupling_map. Jadi tergantung pada kasus penggunaanmu, mungkin perlu untuk melihat lebih dalam dari sekadar akses ekuivalen dengan BackendV2.

Perubahan spesifik di BackendV2​

Sebagian besar atribut memiliki pengganti langsung, sehingga menyederhanakan upaya migrasi. Satu-satunya titik ketidakcocokan antara antarmuka adalah pada CouplingMap.

Berikut adalah tabel contoh pola akses di BackendV1 dan bentuk barunya dengan BackendV2.

important

Gulir ke kanan untuk melihat catatan penting.

BackendV1BackendV2Catatan
backend.configuration().n_qubitsbackend.num_qubits
backend.configuration().coupling_mapbackend.coupling_mapNilai kembalian dari BackendV2 adalah objek CouplingMap. Di BackendV1 berupa edge list. Selain itu, ini hanya tampilan dari informasi yang terdapat di backend.target yang mungkin hanya merupakan sebagian dari informasi yang terkandung dalam objek Target.
backend.configuration().backend_namebackend.name
backend.configuration().backend_versionbackend.backend_versionAtribut BackendV2.version merepresentasikan versi antarmuka Backend abstrak yang diimplementasikan oleh objek, sementara BackendV2.backend_version adalah metadata tentang versi backend itu sendiri.
backend.configuration().basis_gatesbackend.operation_namesBackendV2 mengembalikan daftar nama operasi yang terdapat dalam atribut backend.target. Target mungkin mengandung lebih banyak informasi daripada yang bisa diekspresikan oleh daftar nama ini. Misalnya, beberapa operasi hanya bekerja pada sebagian Qubit, dan beberapa nama mengimplementasikan Gate yang sama dengan parameter berbeda.
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,)].errorDi BackendV2, tingkat error untuk operasi Measure pada Qubit tertentu digunakan untuk memodelkan readout error. Namun, objek BackendV2 bisa mengimplementasikan beberapa tipe pengukuran dan mencantumkannya secara terpisah dalam Target.
backend.properties().readout_length(0)backend.target["measure"][(0,)].durationDi BackendV2, durasi untuk operasi Measure pada Qubit tertentu digunakan untuk memodelkan readout length. Namun, objek BackendV2 bisa mengimplementasikan beberapa tipe pengukuran dan mencantumkannya secara terpisah dalam Target.