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.
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.
Tatal ke kanan untuk melihat nota penting.
BackendV1 | BackendV2 | Nota |
|---|---|---|
backend.configuration().n_qubits | backend.num_qubits | |
backend.configuration().coupling_map | backend.coupling_map | Nilai 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_name | backend.name | |
backend.configuration().backend_version | backend.backend_version | Atribut 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_gates | backend.operation_names | BackendV2 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().dt | backend.dt | |
backend.configuration().dtm | backend.dtm | |
backend.configuration().max_experiments | backend.max_circuits | |
backend.configuration().online_date | backend.online_date | |
InstructionDurations.from_backend(backend) | backend.instruction_durations | |
backend.defaults().instruction_schedule_map | backend.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 | Dalam 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,)].duration | Dalam 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. |