주 콘텐츠로 건너뛰기

프리미티브 소개

Package versions

이 페이지의 코드는 다음 요구 사항을 사용하여 개발되었습니다. 이 버전 이상을 사용하길 권장합니다.

qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1

Qiskit이 프리미티브를 도입한 이유는 무엇인가요?​

고전 컴퓨터 초창기에 개발자들이 CPU 레지스터를 직접 조작해야 했던 것과 유사하게, QPU에 대한 초기 인터페이스는 단순히 제어 전자 장치에서 원시 데이터를 반환했습니다. QPU가 연구실에만 있었고 연구자들만 직접 접근할 수 있었을 때는 큰 문제가 없었습니다. 대부분의 개발자들이 이러한 원시 데이터를 0과 1로 변환하는 방법을 알지 못해도 되고 알 필요도 없다는 점을 인식하여, Qiskit은 클라우드에서 QPU에 접근하기 위한 첫 번째 추상화인 backend.run을 도입했습니다. 이를 통해 개발자들은 익숙한 데이터 형식으로 작업하고 더 큰 그림에 집중할 수 있게 되었습니다.

QPU에 대한 접근이 더욱 광범위해지고 더 많은 양자 알고리즘이 개발됨에 따라, 다시 한번 더 높은 수준의 추상화에 대한 필요성이 생겨났습니다. 이에 대응하여 Qiskit은 양자 알고리즘 개발의 두 가지 핵심 작업인 기댓값 추정(Estimator)과 Circuit 샘플링(Sampler)에 최적화된 프리미티브 인터페이스를 도입했습니다. 목표는 다시 한번 개발자들이 데이터 변환보다 혁신에 더 집중할 수 있도록 돕는 것입니다. 프리미티브 인터페이스는 backend.run 인터페이스를 대체하는데, Sampler가 backend.run이 제공했던 것과 동일한 직접 하드웨어 접근을 제공하기 때문입니다.

프리미티브란 무엇인가요?​

컴퓨팅 시스템은 여러 추상화 계층 위에 구축됩니다. 추상화를 통해 당면한 작업과 관련된 특정 수준의 세부 사항에 집중할 수 있습니다. 하드웨어에 가까울수록 더 낮은 수준의 추상화가 필요합니다(예를 들어, CPU 명령 수준에서 데이터를 이동하거나 조작해야 할 수도 있습니다). 수행하려는 작업이 복잡할수록 추상화 수준은 더 높아집니다(예를 들어, 대수 계산을 수행하기 위해 프로그래밍 라이브러리를 사용할 수 있습니다).

이러한 맥락에서 프리미티브란 가장 작은 처리 명령, 즉 특정 추상화 수준에서 유용한 무언가를 만들 수 있는 가장 단순한 구성 요소입니다.

양자 컴퓨팅의 최근 발전으로 인해 더 높은 수준의 추상화에서 작업해야 할 필요성이 증가했습니다. 이 분야가 더 큰 양자 처리 장치(QPU)와 더 복잡한 워크플로를 향해 나아가면서, 개별 qubit 신호와의 상호작용에서 벗어나 양자 장치를 필요한 작업을 수행하는 시스템으로 바라보는 방향으로 초점이 이동하고 있습니다.

양자 컴퓨터의 가장 일반적인 두 가지 작업은 양자 상태 샘플링과 기댓값 계산입니다. 이러한 작업들이 Qiskit 프리미티브인 Estimator와 Sampler의 설계를 이끌었습니다.

  • Estimator는 양자 Circuit으로 준비된 상태에 대한 관측 가능량의 기댓값을 계산합니다.

  • Sampler는 양자 Circuit 실행의 출력 레지스터를 샘플링합니다.

요컨대, Qiskit 프리미티브가 도입한 계산 모델은 양자 프로그래밍을 오늘날의 고전 프로그래밍에 한 걸음 더 가깝게 이동시키며, 하드웨어 세부 사항보다 달성하려는 결과에 더 집중할 수 있게 합니다.

프리미티브 정의 및 구현​

Qiskit 프리미티브에는 두 가지 유형이 있습니다: 기본 클래스와 그 구현입니다. Estimator 및 Sampler 프리미티브는 Qiskit SDK의 qiskit.primitives 모듈에 있는 오픈 소스 프리미티브 기본 클래스로 정의됩니다. 제공업체(IBM Quantum Compute Service 등)는 이러한 기본 클래스를 사용하여 자체 Sampler 및 Estimator 구현을 파생할 수 있습니다. 대부분의 사용자는 기본 프리미티브가 아닌 제공업체 구현과 상호작용하게 됩니다.

기본 클래스​

Base 프리미티브는 프리미티브 구현을 위한 공통 인터페이스를 정의하는 추상 클래스입니다. qiskit.primitives 모듈의 다른 모든 클래스는 이 기본 클래스에서 상속됩니다. 특정 제공업체를 위한 프리미티브 기반 실행 모델을 직접 만들고자 하는 개발자들은 이 클래스를 사용해야 합니다. 이 클래스들은 고도로 커스터마이즈된 처리를 원하지만 기존 프리미티브 구현이 너무 단순하다고 느끼는 분들에게도 유용할 수 있습니다. 일반 사용자는 기본 클래스를 직접 사용하지 않습니다.

BaseEstimatorV1과 BaseSamplerV1 - V1 프리미티브는 여전히 사용 가능하지만, 이 가이드는 최신 버전이며 더 널리 사용되는 V2 프리미티브에 초점을 맞춥니다.

BaseEstimatorV2와 BaseSamplerV2 - Qiskit 참조 프리미티브는 이 인터페이스 사양을 따릅니다.

구현​

모든 프리미티브는 기본 클래스에서 생성되므로 동일한 일반적인 구조와 사용법을 가집니다. 예를 들어, 모든 Estimator 프리미티브의 입력 형식은 동일합니다. 그러나 각 구현을 고유하게 만드는 차이점이 있습니다.

다음은 프리미티브 기본 클래스의 구현입니다:

  • IBM Quantum 프리미티브, EstimatorV2와 SamplerV2는 클라우드 기반 서비스로 더욱 정교한 구현(예: 오류 완화 포함)을 제공합니다. 이 기본 프리미티브의 구현은 IBM Quantum® 하드웨어에 접근하는 데 사용됩니다.

  • StatevectorEstimator와 StatevectorSampler - Qiskit에 내장된 시뮬레이터를 사용하는 프리미티브의 참조 구현입니다. Qiskit quantum_info 모듈로 구축되어 이상적인 상태벡터 시뮬레이션 기반 결과를 생성합니다. Qiskit을 통해 접근할 수 있습니다. 사용법은 Qiskit SDK 프리미티브를 사용한 정확한 시뮬레이션을 참조하세요.

  • BackendEstimatorV2와 BackendSamplerV2 - 이 클래스들을 사용하여 모든 양자 컴퓨팅 리소스를 프리미티브로 "래핑"할 수 있습니다. 이를 통해 아직 프리미티브 기반 인터페이스가 없는 제공업체에 대해 프리미티브 스타일의 코드를 작성할 수 있습니다. 이 클래스들은 일반 Sampler 및 Estimator와 동일하게 사용할 수 있으며, 실행할 양자 컴퓨터를 선택하기 위한 추가적인 backend 인수로 초기화해야 합니다. Qiskit을 사용하여 접근할 수 있습니다. 자세한 내용은 backend 프리미티브 가이드를 참조하세요.

옵션​

프리미티브에 옵션을 전달하여 필요에 맞게 커스터마이즈할 수 있습니다. 프리미티브의 run() 메서드 인터페이스는 모든 구현에서 공통이지만, 옵션은 그렇지 않습니다. 특정 프리미티브 구현이 지원하는 옵션에 대해서는 해당 API 참조를 확인하세요.

예를 들어, IBM Quantum 프리미티브의 옵션에 대해서는 Estimator 옵션 및 Sampler 옵션 항목을 참조하거나, Qiskit Aer 프리미티브 옵션에 대해서는 Qiskit Aer API 참조를 확인하세요.

Qiskit 프리미티브의 장점​

프리미티브를 사용하면 Qiskit 사용자가 모든 세부 사항을 명시적으로 관리하지 않고도 특정 QPU에 대한 양자 코드를 작성할 수 있습니다. 또한 추가적인 추상화 계층으로 인해 특정 제공업체의 고급 하드웨어 기능에 더 쉽게 접근할 수 있습니다. 예를 들어, IBM Quantum 프리미티브를 사용하면 이러한 기술들을 직접 구현하는 대신 프리미티브의 resilience_level과 같은 옵션을 토글하여 최신 오류 완화 및 억제 기술의 발전을 활용할 수 있습니다.

하드웨어 제공업체의 경우, 프리미티브를 기본적으로 구현하면 고급 후처리 기술과 같은 하드웨어 기능에 접근하는 "즉시 사용 가능한" 방법을 사용자에게 제공할 수 있습니다. 따라서 사용자가 하드웨어의 최상의 기능을 활용하기가 더 쉬워집니다.

다음 단계​

권장 사항