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é postupně 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 dotazují
jeho atribut BackendV2.target pro vrácení informací. 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. Toto je také pouze pohled na informace obsažené v backend.target, který může být pouze podmnožinou informací obsažených v 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. |