Migrace z BackendV1 na BackendV2
Třída Qiskit BackendV1 byla označena jako zastaralá a bude odstraněna. Tento průvodce migrací popisuje drobné úpravy, které musíš provést, pokud používáš poskytovatele, který přešel z BackendV1 na BackendV2.
Pokud používáš výhradně qiskit_ibm_runtime a qiskit_aer, žádná akce není potřeba. Balíček qiskit_ibm_runtime vždy používal BackendV2 a qiskit_aer používá BackendV2 od verze 0.13.
Hlavní změny v BackendV2
Model Qiskit Backend byl navržen tak, aby poskytoval Qiskit SDK abstrakční vrstvu umožňující práci s kvantovými počítači v rámci SDK. První iterace modelu byla představena třídou
BackendV1. Tato třída ukládala informace o Backend v sérii datových kontejnerů, konkrétně ve třídách BackendConfiguration a
BackendProperties.
Třída BackendV2 předefinovala
uživatelský přístup k většině vlastností Backend tak, aby fungovaly s nativními datovými strukturami Qiskit a měly plošší přístupové vzory. Jádrem modelu BackendV2 je třída
Target, reprezentace QPU obsahující omezení pro transpilaci, která může Qiskit využít k optimalizaci Circuit pro spuštění.
Qiskit SDK bylo aktualizováno tak, aby pracovalo výhradně se vstupy BackendV2,
a většina poskytovatelů přešla z BackendV1 na BackendV2. Očekává se, že stávající poskytovatelé tam, kde to bude možné, označí starý přístup jako zastaralý, aby umožnili plynulou migraci, ale nakonec budeš muset svůj kód upravit.
Princip BackendV2 spočívá v tom,
že většina informací o Backend je obsažena v jeho objektu
Target a atributy Backend často získávají informace
z jeho atributu BackendV2.target. V mnoha případech však atributy poskytují
pouze podmnožinu informací, které target může obsahovat. Například backend.coupling_map
vrací CouplingMap sestavenou z
Target dostupného v atributu
BackendV2.target. Target však může obsahovat
instrukce operující na více než dvou qubit (které nelze reprezentovat v
CouplingMap) nebo může mít instrukce, které operují pouze na
podmnožině qubit (nebo dvou-Qubit spojení u dvou-Qubit instrukcí), což nebude
zachyceno v úplné coupling mapě vrácené
BackendV2.coupling_map. Takže v závislosti na tvém případu použití
může být nutné se podívat hlouběji než jen na ekvivalentní přístup přes
BackendV2.
Konkrétní změny v BackendV2
Většina atributů má přímou náhradu, což zjednodušuje migraci. Jediným místem nesouladu mezi rozhraními je CouplingMap.
Následuje tabulka příkladů přístupových vzorů v BackendV1 a jejich nová podoba
s BackendV2.
Posuň se doprava pro zobrazení důležitých poznámek.
BackendV1 | BackendV2 | Poznámky |
|---|---|---|
backend.configuration().n_qubits | backend.num_qubits | |
backend.configuration().coupling_map | backend.coupling_map | Návratová hodnota z BackendV2 je objekt CouplingMap. V BackendV1 to je seznam hran. Jde také jen o pohled na informace obsažené v backend.target; tento pohled může zachycovat pouze podmnožinu informací z objektu Target. |
backend.configuration().backend_name | backend.name | |
backend.configuration().backend_version | backend.backend_version | Atribut BackendV2.version reprezentuje verzi abstraktního rozhraní Backend, které objekt implementuje, zatímco BackendV2.backend_version jsou metadata o verzi samotného Backend. |
backend.configuration().basis_gates | backend.operation_names | BackendV2 vrací seznam názvů operací obsažených v atributu backend.target. Target může obsahovat více informací, než lze vyjádřit tímto seznamem názvů. Například některé operace fungují pouze na podmnožině qubit a některé názvy implementují stejný Gate s různými parametry. |
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 | V BackendV2 se chybovost operace Measure na daném qubit používá k modelování chyby čtení. Objekt BackendV2 však může implementovat více typů měření a uvádět je samostatně v objektu Target. |
backend.properties().readout_length(0) | backend.target["measure"][(0,)].duration | V BackendV2 se délka trvání operace Measure na daném qubit používá k modelování délky čtení. Objekt BackendV2 však může implementovat více typů měření a uvádět je samostatně v objektu Target. |