Langkau ke kandungan utama

Migrasi daripada BackendV1 ke BackendV2

Kelas BackendV1 Qiskit telah ditamatkan dan akan dibuang daripada perkhidmatan. Panduan migrasi ini menerangkan pelarasan kecil yang perlu anda buat jika anda menggunakan pembekal yang menaik taraf daripada BackendV1 ke BackendV2.

nota

Jika anda hanya menggunakan qiskit_ibm_runtime dan qiskit_aer, tiada tindakan diperlukan. Pakej qiskit_ibm_runtime sentiasa menggunakan BackendV2, dan qiskit_aer telah menggunakan BackendV2 sejak versi 0.13.

Perubahan peringkat tinggi dalam BackendV2​

Model Backend Qiskit direka untuk menyediakan SDK Qiskit dengan lapisan abstraksi yang membolehkan penaakulan tentang komputer kuantum dalam skop SDK. Lelaran pertama model ini diperkenalkan dengan kelas BackendV1. Kelas ini menyimpan maklumat Backend dalam siri bekas data, iaitu kelas BackendConfiguration dan BackendProperties.

Kelas BackendV2 mentakrifkan semula akses pengguna untuk kebanyakan sifat Backend agar ia berfungsi dengan struktur data Qiskit asli dan mempunyai corak akses yang lebih rata. Teras model BackendV2 ialah kelas Target, iaitu perwakilan QPU yang mengandungi kekangan transpilasi yang boleh digunakan Qiskit untuk mengoptimumkan Circuit bagi pelaksanaan.

SDK Qiskit telah dikemas kini untuk bekerja secara eksklusif dengan input BackendV2, dan kebanyakan pembekal telah menaik taraf daripada BackendV1 ke BackendV2. Dijangkakan bahawa pembekal sedia ada akan menghentikan akses lama di mana mungkin untuk menyediakan migrasi yang lancar, tetapi akhirnya pengguna perlu menyesuaikan kod mereka.

Prinsip di sebalik BackendV2 ialah sebahagian besar maklumat tentang Backend terkandung dalam objek Target-nya, dan atribut Backend sering menanyakan atribut BackendV2.target-nya untuk mengembalikan maklumat. Walau bagaimanapun, dalam banyak kes atribut tersebut hanya menyediakan subset maklumat yang boleh dikandungi oleh target. Sebagai contoh, backend.coupling_map mengembalikan objek CouplingMap yang dibina daripada Target yang boleh diakses dalam atribut BackendV2.target. Walau bagaimanapun, target mungkin mengandungi arahan yang beroperasi pada lebih daripada dua qubit (yang tidak dapat diwakili dalam CouplingMap) atau mungkin mempunyai arahan yang hanya beroperasi pada subset qubit (atau pautan dua qubit, untuk arahan dua qubit), yang tidak akan diperincikan dalam peta gandingan penuh yang dikembalikan oleh BackendV2.coupling_map. Jadi bergantung pada kes penggunaan anda, mungkin perlu melihat lebih dalam daripada sekadar akses setara dengan BackendV2.

Perubahan khusus dalam BackendV2​

Kebanyakan atribut mempunyai penggantian langsung, memudahkan usaha migrasi. Satu-satunya ketidakpadanan antara antara muka ialah dalam CouplingMap.

Berikut ialah jadual corak akses contoh dalam BackendV1 dan bentuk baharu dengan BackendV2.

important

Tatal ke kanan untuk melihat nota penting.

BackendV1BackendV2Nota
backend.configuration().n_qubitsbackend.num_qubits
backend.configuration().coupling_mapbackend.coupling_mapNilai pulangan daripada BackendV2 ialah objek CouplingMap. Dalam BackendV1 ia ialah senarai tepi. Selain itu, ini hanyalah paparan maklumat yang terkandung dalam backend.target yang mungkin hanya merupakan subset maklumat dalam objek Target.
backend.configuration().backend_namebackend.name
backend.configuration().backend_versionbackend.backend_versionAtribut BackendV2.version mewakili versi antara muka Backend abstrak yang dilaksanakan objek, manakala BackendV2.backend_version ialah metadata tentang versi Backend itu sendiri.
backend.configuration().basis_gatesbackend.operation_namesBackendV2 mengembalikan senarai nama operasi dalam atribut backend.target. Target mungkin mengandungi lebih banyak maklumat berbanding yang boleh dinyatakan oleh senarai nama ini. Sebagai contoh, sesetengah operasi hanya berfungsi pada subset qubit, dan sesetengah nama melaksanakan get yang sama dengan parameter berbeza.
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,)].errorDalam BackendV2, kadar ralat untuk operasi Measure pada qubit tertentu digunakan untuk memodelkan ralat pembacaan. Walau bagaimanapun, objek BackendV2 boleh melaksanakan pelbagai jenis pengukuran dan menyenaraikannya secara berasingan dalam Target.
backend.properties().readout_length(0)backend.target["measure"][(0,)].durationDalam BackendV2, tempoh untuk operasi Measure pada qubit tertentu digunakan untuk memodelkan panjang pembacaan. Walau bagaimanapun, objek BackendV2 boleh melaksanakan pelbagai jenis pengukuran dan menyenaraikannya secara berasingan dalam Target.