주 콘텐츠로 건너뛰기

BackendV1에서 BackendV2로 마이그레이션

Qiskit의 BackendV1 클래스는 더 이상 사용되지 않으며 서비스에서 제거될 예정입니다. 이 마이그레이션 가이드는 BackendV1에서 BackendV2로 업그레이드한 프로바이더를 사용하는 경우 필요한 소소한 조정 사항을 설명합니다.

참고

qiskit_ibm_runtimeqiskit_aer만 독점적으로 사용한다면 별도의 조치가 필요하지 않습니다. qiskit_ibm_runtime 패키지는 항상 BackendV2를 사용해 왔으며, qiskit_aer는 버전 0.13부터 BackendV2를 사용하고 있습니다.

BackendV2의 주요 변경 사항

Qiskit Backend 모델은 Qiskit SDK에 SDK 범위 내에서 양자 컴퓨터에 대한 추론을 가능하게 하는 추상화 계층을 제공하기 위해 설계되었습니다. 이 모델의 첫 번째 버전은 BackendV1 클래스와 함께 도입되었습니다. 이 클래스는 Backend 정보를 일련의 데이터 컨테이너, 즉 BackendConfigurationBackendProperties 클래스에 저장했습니다.

BackendV2 클래스는 대부분의 Backend 속성에 대한 사용자 접근 방식을 재정의하여 네이티브 Qiskit 데이터 구조와 호환되고 더 단순한 접근 패턴을 갖도록 했습니다. BackendV2 모델의 핵심은 Target 클래스로, Qiskit이 Circuit을 실행을 위해 최적화하는 데 사용할 수 있는 Transpiler 제약 조건을 포함하는 QPU의 표현입니다.

Qiskit SDK는 BackendV2 입력만을 사용하도록 업데이트되었으며, 대부분의 프로바이더는 BackendV1에서 BackendV2로 업그레이드되었습니다. 기존 프로바이더는 원활한 마이그레이션을 제공하기 위해 가능한 한 이전 접근 방식을 deprecated 처리할 것으로 예상되지만, 결국 사용자는 코드를 조정해야 합니다.

BackendV2의 원칙은 Backend에 대한 대부분의 정보가 해당 Target 객체에 포함되어 있으며, Backend의 속성이 BackendV2.target 속성을 쿼리하여 정보를 반환하는 경우가 많다는 것입니다. 그러나 많은 경우 이러한 속성은 Target이 포함할 수 있는 정보의 일부만 제공합니다. 예를 들어, backend.coupling_mapBackendV2.target 속성에서 접근 가능한 Target으로부터 구성된 CouplingMap을 반환합니다. 그러나 Target에는 두 개 이상의 Qubit에서 동작하는 명령 (CouplingMap으로 표현할 수 없음)이 포함되거나, Qubit의 하위 집합(또는 두 Qubit 명령의 경우 두 Qubit 링크)에서만 동작하는 명령이 포함될 수 있으며, 이는 BackendV2.coupling_map이 반환하는 전체 커플링 맵에 자세히 나타나지 않습니다. 따라서 사용 사례에 따라 BackendV2의 동등한 접근 방식보다 더 깊이 살펴봐야 할 수도 있습니다.

BackendV2의 구체적인 변경 사항

대부분의 속성에는 직접적인 대체재가 있어 마이그레이션 작업이 단순합니다. 인터페이스 간 유일한 불일치 지점은 CouplingMap에 있습니다.

다음은 BackendV1의 예시 접근 패턴과 BackendV2에서의 새로운 형식을 나타낸 표입니다.

important

오른쪽으로 스크롤하여 중요한 참고 사항을 확인하세요.

BackendV1BackendV2참고 사항
backend.configuration().n_qubitsbackend.num_qubits
backend.configuration().coupling_mapbackend.coupling_mapBackendV2에서 반환되는 값은 CouplingMap 객체입니다. BackendV1에서는 엣지 목록입니다. 또한, 이는 backend.target에 포함된 정보의 뷰에 불과하며, Target 객체에 포함된 정보의 일부만 나타낼 수 있습니다.
backend.configuration().backend_namebackend.name
backend.configuration().backend_versionbackend.backend_versionBackendV2.version 속성은 객체가 구현하는 추상 Backend 인터페이스의 버전을 나타내며, BackendV2.backend_version은 Backend 자체의 버전에 대한 메타데이터입니다.
backend.configuration().basis_gatesbackend.operation_namesBackendV2backend.target 속성에 포함된 연산 이름 목록을 반환합니다. Target에는 이 이름 목록으로 표현할 수 있는 것보다 더 많은 정보가 포함될 수 있습니다. 예를 들어, 일부 연산은 Qubit의 하위 집합에서만 작동하고, 일부 이름은 다른 매개변수로 동일한 Gate를 구현합니다.
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,)].errorBackendV2에서는 주어진 Qubit에 대한 Measure 연산의 오류율이 판독 오류를 모델링하는 데 사용됩니다. 그러나 BackendV2 객체는 여러 측정 유형을 구현하고 Target에 별도로 나열할 수 있습니다.
backend.properties().readout_length(0)backend.target["measure"][(0,)].durationBackendV2에서는 주어진 Qubit에 대한 Measure 연산의 지속 시간이 판독 길이를 모델링하는 데 사용됩니다. 그러나 BackendV2 객체는 여러 측정 유형을 구현하고 Target에 별도로 나열할 수 있습니다.