Qiskit

**Qiskit**(Quantum Information Software Kit)은 IBM 리서치가 개발하고 2017년에 처음 출시된 양자 컴퓨팅을 위한 오픈 소스, 파이썬 기반의 고성능 소프트웨어 스택이다. 이 소프트웨어는 양자 프로그램(양자 회로 및 연산 정의를 통해)을 생성하고 이를 양자 컴퓨터 또는 고전 시뮬레이터에서 실행하기 위한 도구를 제공한다. "Qiskit"이라는 이름은 광범위하게 양자 소프트웨어 도구 모음을 지칭한다. 이는 핵심 Qiskit SDK를 중심으로 하며, 클라우드를 통해 최적화된 계산을 가능하게 하는 Qiskit Runtime 서비스와 같은 양자 계산을 위한 도구 및 서비스 모음과 결합되어 있다. Qiskit은 사용자가 양자 회로를 작성하고 이를 실제 양자 프로세서(초전도 큐비트 시스템 등) 또는 다양한 호환 가능한 양자 장치에서 실행할 수 있도록 한다. 시간이 지남에 따라 Qiskit의 기능은 Qiskit Functions 및 Qiskit 애드온과 같은 새로운 구성 요소와 개선 사항으로 확장되었으며, 양자 컴퓨팅 연구 및 애플리케이션 개발을 위한 오픈 소스 생태계를 유지하고 있다.

## 구성 요소

### Qiskit SDK
Qiskit SDK는 확장된 (정적, 동적 및 스케줄링된) 양자 회로, 연산자 및 프리미티브 수준에서 양자 컴퓨터와 작업하기 위한 핵심 소프트웨어 개발 키트이다. 파이썬 패키지 **qiskit**으로 배포되는 이 프레임워크는 사용자가 양자 회로를 구성하고, 양자 연산자를 조작하며, 양자 하드웨어 또는 시뮬레이터와 인터페이스할 수 있도록 하는 오픈 소스 프레임워크이다. Qiskit SDK는 Qiskit 소프트웨어 스택의 기본 구성 요소이며, 가장 큰 기능 집합을 제공하며 다른 Qiskit 서비스 및 모듈이 구축되는 기반 역할을 한다.

Qiskit SDK의 주요 기능에는 양자 회로를 구축하고 양자 연산을 등록하기 위한 모듈, 사전 정의된 양자 논리 회로 및 매개변수화된 회로 라이브러리, 양자 상태 및 연산자와 작업하기 위한 양자 정보 모듈, 특정 양자 하드웨어 백엔드에서 실행되도록 회로를 최적화하고 변환하는 **트랜스파일러**가 포함된다. 예를 들어, Qiskit은 사용자가 직관적인 파이썬 API를 사용하여 양자 회로를 생성한 다음, 트랜스파일러를 사용하여 특정 장치의 토폴로지 및 제약 조건에 맞게 이러한 회로를 조정하고 최적화할 수 있도록 한다(필요에 따라 게이트 수 또는 회로 깊이 감소). SDK는 또한 노이즈 모델링을 위한 도구를 제공하고 **프리미티브**를 지원한다 – 기본 양자 프로그램 구성 요소(회로 결과에 대한 샘플러 및 추정기와 같은) – 이는 상위 수준 양자 알고리즘의 빌딩 블록 역할을 하며 로컬 시뮬레이터 또는 클라우드 서비스를 사용하여 실행될 수 있다. 이러한 기능들이 합쳐져 Qiskit SDK는 하드웨어에 구애받지 않는 방식으로 양자 알고리즘 및 실험을 개발하기 위한 포괄적인 플랫폼이 된다.

### Qiskit Runtime

**Qiskit Runtime**은 IBM Quantum 시스템에서 양자 계산 실행을 간소화하기 위해 IBM이 도입한 클라우드 기반 양자 실행 서비스이다. 이 서비스는 사용자가 추가 서버 측 관리와 함께 양자 프로그램을 실행할 수 있도록 하여, 고전-양자 통신의 지연 시간을 최소화하고 고급 양자 오류 완화 기술을 활용하여 성능을 향상시킨다. 본질적으로 Qiskit Runtime은 양자 회로(또는 상위 수준 프리미티브 프로그램)가 양자 하드웨어에 더 가깝게 실행되는 IBM 클라우드에서 최적화된 환경을 제공하여, 전통적인 작업 제출 방식의 요청-응답 방식보다 대기 시간을 줄이고 더 복잡한 워크플로우를 가능하게 한다. 이 서비스는 양자 프로그램 실행을 특히 반복적인 회로 평가 또는 반복 프로세스를 포함하는 알고리즘에 대해 더 효율적이고 확장 가능하게 설계되었다.

Qiskit Runtime은 추가적인 고전 및 양자 컴퓨팅 리소스를 활용하여 양자 프로세서에서 얻은 결과의 품질과 정확도를 높이는 오류 완화 전략을 통합한다. 예를 들어, Qiskit Runtime은 동적 디커플링(회로 실행 중 노이즈를 억제하기 위해) 및 제로 노이즈 외삽 또는 기타 형태의 판독 오류 완화(측정 오류의 영향을 줄이기 위해)와 같은 기술을 자동으로 적용하여 노이즈가 많은 양자 하드웨어에서 더 높은 품질의 결과를 반환하는 것을 목표로 한다. 런타임 서비스는 또한 양자 작업을 실행하기 위한 여러 실행 모드를 지원하며, 각 모드는 다른 사용 사례에 적합하다. 사용자는 단일 **작업**(지정된 샷 수로 한 번의 회로 또는 프리미티브 호출)을 실행하거나, 그 사이의 오버헤드를 줄여 일련의 작업을 대화식으로 실행하기 위한 **세션**을 생성하거나, 큐에서 병렬 실행을 위해 **배치** 모드로 작업을 제출할 수 있다. 이러한 모드는 실험 관리에 유연성을 제공한다 – 예를 들어, 세션 모드는 중간 결과에 따라 적응하는 반복적인 알고리즘을 가능하게 하는 반면, 배치 모드는 많은 독립적인 회로를 동시에 실행하는 데 유용하다.

### Qiskit Serverless

**Qiskit Serverless**는 양자-고전 워크로드를 분산된 클라우드 네이티브 방식으로 실행할 수 있도록 하는 Qiskit 생태계의 확장이다. 이는 원격 서버에서 컴퓨팅 리소스를 관리하고 양자 워크플로우의 일부를 실행하기 위한 간단한 인터페이스를 제공하여, 사용자가 양자 프로그램과 그에 수반되는 고전 처리 단계를 IBM Quantum 클라우드 또는 심지어 여러 클라우드 환경에 배포할 수 있도록 효과적으로 허용한다. Qiskit Serverless의 목표는 필요에 따라 양자 처리 장치와 고전 컴퓨팅 리소스의 할당을 모두 처리하여 **유틸리티 규모**의 양자 애플리케이션을 용이하게 하는 것이며, 이는 하이브리드 알고리즘 및 대규모 실험에 특히 유용하다. Qiskit Serverless는 다음을 위해 사용될 수 있다:

* 양자 워크플로우의 일부인 **고전 작업 병렬화**, 예를 들어 입력 데이터의 전처리 또는 양자 결과의 후처리. 이러한 고전 계산을 클라우드 리소스에 분산함으로써, 사용자는 양자 하드웨어와 함께 많은 회로 또는 대규모 데이터 세트로 작업할 때 전체 실행 속도를 높일 수 있다.
* 클라우드에서 **장기 실행 워크로드 지속**, 사용자의 로컬 환경(예: 랩톱)이 오프라인 상태여도 양자 작업이 계속 실행되고 결과를 수집할 수 있도록 한다. 이는 연구원이 복잡한 양자 실험을 시작하고 지속적인 연결을 유지하는 것에 대해 걱정할 필요가 없음을 의미한다. 서버리스 시스템은 실행을 처리하고 사용자가 검색할 때까지 결과를 유지한다.
* IBM Quantum 플랫폼에 **재사용 가능한 프로그램**(양자 애플리케이션 또는 알고리즘 루틴)을 배포하여 필요에 따라 호출한다. 이는 사용자 지정 양자 알고리즘을 서비스로 전환하여 협업 및 재사용을 가능하게 한다: 예를 들어, 최적화 알고리즘 또는 화학 시뮬레이션 루틴은 한 번 업로드한 다음 필요에 따라 다른 매개변수로 반복적으로 실행될 수 있다.

클라우드 리소스 관리의 세부 사항을 추상화함으로써 Qiskit Serverless는 양자 실험을 확장하고 이를 더 큰 컴퓨팅 워크플로우에 통합하는 것을 더 쉽게 만드는 것을 목표로 한다.

### Qiskit Add-ons

Qiskit Add-ons (Qiskit addons로 표기)는 양자 알고리즘 개발을 위한 Qiskit의 기능을 확장하도록 설계된 모듈식의 별도로 설치되는 도구이다. 이들은 Qiskit의 핵심 프레임워크를 기반으로 구축되며, 사용자의 워크플로우에 연결되어 새로운 알고리즘을 확장하거나 설계하는 데 도움을 줄 수 있다. 각 애드온은 독립적인 파이썬 패키지(예: SQD 도구를 위한 **qiskit-addon-sqd**)로 배포되며, 이는 파이썬 패키지 색인(PyPI)을 통해 설치한 다음 Qiskit SDK와 함께 사용할 수 있다. 이러한 공식 애드온은 회로 매핑, 최적화 및 결과 후처리(post‑processing)와 같은 작업을 향상시키면서 Qiskit의 기능과 완벽하게 통합된다.

* **근사 양자 컴파일 (AQC)** – qiskit-addon-aqc-tensor. AQC는 텐서 네트워크 방법을 사용하여 양자 회로의 한 부분을 높은 충실도로 더 짧은 등가 회로로 압축한다.
* **다중 곱 공식 (MPF)** – qiskit-addon-mpf. MPF는 여러 회로 실행 결과를 가중 공식으로 결합하여 트로터 오류를 해밀턴 시뮬레이션에서 줄인다.
* **연산자 역전파 (OBP)** – qiskit-addon-obp. OBP는 최종 게이트 연산 세트를 잘라내고 나머지 회로에 대한 추가 측정으로 보상하여 회로 깊이를 단축한다.
* **샘플 기반 양자 대각화 (SQD)** – qiskit-addon-sqd. SQD는 양자 회로 실행에서 비트열 샘플을 고전적으로 분석하여 노이즈 하에서 큰 연산자(분자 해밀토니언과 같은)의 고윳값 및 고유 벡터를 더 정확하게 추정하는 후처리 도구이다.

각 애드온은 깃허브 Qiskit 조직에서 오픈 소스 확장으로 유지 관리되며, IBM Quantum에서 문서 및 튜토리얼을 제공한다. 이 모듈식 접근 방식은 연구원들이 필요에 따라 고급 알고리즘 기술을 선택할 수 있도록 하여, Qiskit의 핵심은 가볍게 유지하면서도 애드온을 통해 최첨단 기능을 가능하게 한다.

### Qiskit Ecosystem

**Qiskit 생태계**는 핵심 SDK의 일부가 아니면서 Qiskit과 인터페이스하는 더 넓은 오픈 소스 프로젝트 모음을 지칭한다. IBM Quantum 또는 더 넓은 커뮤니티에서 개발된 이러한 프로젝트는 Qiskit 프레임워크를 보완하는 추가 기능 및 특수 도구를 제공한다. IBM은 모듈식 및 확장 가능한 아키텍처로 Qiskit을 설계함으로써, 외부 패키지가 시뮬레이션, 작업 관리 및 오류 완화와 같은 영역에서 쉽게 통합되고 기능을 확장할 수 있도록 했다. 이 생태계는 기본 라이브러리의 범위를 넘어선 작업을 해결함으로써 Qiskit의 유용성을 향상시키며, 사용자가 커뮤니티 중심 솔루션으로 양자 컴퓨팅 워크플로우를 맞춤화할 수 있도록 한다. Qiskit 생태계의 주목할 만한 프로젝트는 다음과 같다:

* **Qiskit Aer** (qiskit-aer) – 양자 회로를 위한 고성능 시뮬레이터로, 여러 시뮬레이션 백엔드와 현실적인 노이즈 모델 지원 기능을 제공한다. IBM Quantum에 의해 Qiskit의 공식 시뮬레이션 엔진으로 유지 관리되며, 실제 양자 프로세서에서 실행하기 전에 알고리즘을 검증하는 데 자주 사용된다.
* **qBraid SDK** (qbraid) – 양자 작업의 전체 수명 주기를 간소화하는 플랫폼에 구애받지 않는 양자 런타임 및 클라우드 관리 프레임워크이다. qBraid 회사에서 개발하고 유지 관리하는 이 도구는 다양한 공급자 간에 양자 컴퓨팅 워크로드를 관리하는 복잡성의 많은 부분을 추상화하여, Qiskit의 개발 도구를 클라우드 배포 기능으로 보완한다.
* **mthree** (mthree) – 매트릭스 프리 측정 완화(M3)를 위한 라이브러리로, 실제 하드웨어에서 큐비트 측정 결과의 정확도를 향상시킨다. 이 IBM Quantum이 개발한 패키지는 측정 프로세스에서 노이즈의 축소된 모델을 구성한 다음, 큰 보정 행렬을 역전시킬 필요 없이 보정된 결과 확률을 계산함으로써 판독 오류를 해결한다.

이러한 생태계 프로젝트를 통해 Qiskit 사용자는 핵심 SDK에 포함되지 않은 확장된 기능에 접근하여 연구 및 애플리케이션 개발을 향상시킬 수 있다. 예를 들어, Aer는 시뮬레이션에서 알고리즘의 철저한 테스트를 가능하게 하고, qBraid는 다양한 클라우드 하드웨어에서 Qiskit 프로그램을 실행하는 것을 용이하게 하며, mthree는 더 정확한 실험 데이터를 얻는 데 도움을 준다. Qiskit 생태계 프로젝트의 포괄적인 카탈로그는 Qiskit Ecosystem 페이지에서 확인할 수 있으며, 사용자는 Qiskit과 함께 작동하는 다른 도구 및 라이브러리를 발견하고 심지어 자신의 것을 기여할 수도 있다. 이러한 모든 생태계 노력은 Qiskit을 중심으로 하는 더 다재다능하고 견고한 양자 컴퓨팅 툴킷에 기여한다.

## 같이 보기
* IBM Quantum documentation
* IBM Qiskit ecosystem page
* Quantum Computing with Qiskit
* 양자 프로그래밍

## 각주

분류:IBM 소프트웨어
분류:소프트웨어 개발 키트
분류:양자 프로그래밍