키스킷(Qiskit)은 확장된 양자 회로, 연산자 및 기본 요소 수준에서 양자 컴퓨터를 사용하기 위한 오픈 소스 SDK입니다.
이 라이브러리는 양자 회로, 양자 연산자, 원시 함수(샘플러 및 추정기)를 생성하고 작업하기 위한 빌딩 블록을 포함하는 키스킷의 핵심 구성 요소입니다. 또한 양자 회로 최적화를 지원하는 트랜스파일러와 고급 연산자 생성을 위한 양자 정보 도구 상자도 포함되어 있습니다.
키스킷 사용 방법에 대한 자세한 내용은 여기에 있는 문서를 참조하세요.
https://docs.퀀텀.ibm.com/
경고
기존 Qiskit 0.* 환경을 Qiskit 1.0으로 업그레이드하려고 하지 마십시오. 자세히 읽어보세요.
pip
통해 Qiskit을 설치하는 것이 좋습니다.
pip install qiskit
Pip은 모든 종속성을 자동으로 처리하므로 항상 최신(그리고 잘 테스트된) 버전을 설치하게 됩니다.
소스에서 설치하려면 설명서의 지침을 따르십시오.
이제 키스킷이 설치되었으므로 키스킷 작업을 시작할 시간이다. 양자 프로그램의 필수 부분은 다음과 같습니다.
sampler
사용하여 결과를 샘플링하거나 estimator
를 사용하여 값을 추정합니다. QuantumCircuit
클래스를 사용하여 예제 양자 회로를 만듭니다.
import numpy as np
from qiskit import QuantumCircuit
# 1. A quantum circuit for preparing the quantum state |000> + i |111>
qc_example = QuantumCircuit ( 3 )
qc_example . h ( 0 ) # generate superpostion
qc_example . p ( np . pi / 2 , 0 ) # add quantum phase
qc_example . cx ( 0 , 1 ) # 0th-qubit-Controlled-NOT gate on 1st qubit
qc_example . cx ( 0 , 2 ) # 0th-qubit-Controlled-NOT gate on 2nd qubit
이 간단한 예는 GHZ 상태로 알려진 얽힌 상태를 만듭니다. h
), 위상 게이트( p
) 및 CNOT 게이트( cx
)를 사용합니다.
첫 번째 양자 회로를 만든 후에는 사용할 기본 기능을 선택하세요. sampler
부터 measure_all(inplace=False)
사용하여 모든 큐비트가 측정되는 회로의 복사본을 얻습니다.
# 2. Add the classical output in the form of measurement of all qubits
qc_measured = qc_example . measure_all ( inplace = False )
# 3. Execute using the Sampler primitive
from qiskit . primitives import StatevectorSampler
sampler = StatevectorSampler ()
job = sampler . run ([ qc_measured ], shots = 1000 )
result = job . result ()
print ( f" > Counts: { result [ 0 ]. data [ "meas" ]. get_counts () } " )
이를 실행하면 {'000': 497, '111': 503}
과 유사한 결과가 제공되며 이는 통계적 변동까지 시간의 000
50% 및 111
50%입니다. Estimator의 기능을 설명하기 위해 이제 양자 정보 도구 상자를 사용하여 연산자를 생성합니다. run()
함수에 전달합니다. Estimator에는 측정 없는 회로가 필요하므로 이전에 생성한 qc_example
회로를 사용합니다.
# 2. Define the observable to be measured
from qiskit . quantum_info import SparsePauliOp
operator = SparsePauliOp . from_list ([( "XXY" , 1 ), ( "XYX" , 1 ), ( "YXX" , 1 ), ( "YYY" , - 1 )])
# 3. Execute using the Estimator primitive
from qiskit . primitives import StatevectorEstimator
estimator = StatevectorEstimator ()
job = estimator . run ([( qc_example , operator )], precision = 1e-3 )
result = job . result ()
print ( f" > Expectation values: { result [ 0 ]. data . evs } " )
이것을 실행하면 결과가 4
됩니다. 재미삼아 각 단일 큐비트 연산자 X 및 Y에 +/- 1 값을 할당하고 이 결과를 얻을 수 있는지 확인해보세요. (스포일러 경고: 이는 불가능합니다!)
키스킷이 제공하는 qiskit.primitives.StatevectorSampler
와 qiskit.primitives.StatevectorEstimator
사용하면 그리 멀리 가지 않을 것이다. 양자 컴퓨팅의 성능은 기존 컴퓨터에서 시뮬레이션할 수 없으며 더 큰 양자 회로로 확장하려면 실제 양자 하드웨어를 사용해야 합니다. 그러나 하드웨어에서 양자 회로를 실행하려면 기본 게이트와 양자 하드웨어의 연결을 다시 작성해야 합니다. 이를 수행하는 도구는 트랜스파일러이며 Qiskit에는 합성, 최적화, 매핑 및 예약을 위한 트랜스파일러 패스가 포함되어 있습니다. 그러나 여기에는 대부분의 예제에서 매우 잘 작동하는 기본 컴파일러도 포함되어 있습니다. 다음 코드는 예제 회로를 basis_gates = ['cz', 'sx', 'rz']
및 큐비트의 선형 체인에 매핑합니다. coupling_map =[[0, 1], [1, 2]]
.
from qiskit import transpile
qc_transpiled = transpile ( qc_example , basis_gates = [ 'cz' , 'sx' , 'rz' ], coupling_map = [[ 0 , 1 ], [ 1 , 2 ]] , optimization_level = 3 )
키스킷은 사용자가 호환 가능한 인터페이스를 제공하는 모든 공급업체의 하드웨어에서 양자 회로를 실행할 수 있도록 하는 추상화 계층을 제공합니다. 키스킷을 사용하는 가장 좋은 방법은 특정 하드웨어 플랫폼에 최적화된 sampler
및 estimator
구현을 제공하는 런타임 환경을 사용하는 것입니다. 이 런타임에는 오류 억제, 오류 완화 및 궁극적으로 내장된 오류 수정 기능을 갖춘 최적화된 트랜스파일러 전달과 같은 사전 및 사후 처리 사용이 포함될 수 있습니다. 런타임은 qiskit.primitives.BaseSamplerV2
및 qiskit.primitives.BaseEstimatorV2
인터페이스를 구현합니다. 예를 들어, 런타임 기본 구현의 구현을 제공하는 일부 패키지는 다음과 같습니다.
키스킷은 또한 양자 백엔드를 설명하기 위한 낮은 수준의 추상 인터페이스를 제공합니다. qiskit.providers
에 위치한 이 인터페이스는 공급자가 하드웨어나 시뮬레이터를 키스킷에 나타내기 위해 구현할 수 있는 추상 BackendV2
클래스를 정의합니다. 백엔드 클래스에는 백엔드에서 회로를 실행하기 위한 공통 인터페이스가 포함되어 있습니다. 그러나 이 인터페이스에서 각 공급자는 공급업체가 정의한 다양한 유형의 사전 및 사후 처리와 반환 결과를 수행할 수 있습니다. 실제 하드웨어와 인터페이스하는 게시된 공급자 패키지의 몇 가지 예는 다음과 같습니다.
이러한 시스템에 액세스하고 사용하는 방법에 대한 추가 지침은 해당 패키지의 설명서를 참조할 수 있습니다.
Qiskit에 기여하고 싶다면 기여 지침을 살펴보세요. 참여함으로써 귀하는 당사의 행동 강령을 준수해야 합니다.
우리는 요청과 버그를 추적하기 위해 GitHub 문제를 사용합니다. 토론, 의견, 질문이 있으면 Qiskit Slack 커뮤니티에 가입하세요. Qiskit 실행 또는 사용과 관련된 질문의 경우 Stack Overflow에 qiskit
있습니다. 키스킷을 사용한 양자 컴퓨팅에 대한 질문이 있는 경우 양자 컴퓨팅 스택 교환(Quantum Computing Stack Exchange)에서 qiskit
태그를 사용하세요(먼저 해당 포럼에서 질문하는 방법에 대한 지침을 읽어보세요).
키스킷은 다양한 수준에서 프로젝트에 기여하는 많은 사람들의 작품입니다. Qiskit을 사용하는 경우 포함된 BibTeX 파일에 따라 인용하세요.
특정 릴리스에 대한 변경 로그는 동적으로 생성되어 각 릴리스에 대한 Github의 릴리스 페이지에 기록됩니다. 예를 들어, 여기에서 0.46.0
릴리스 페이지를 찾을 수 있습니다.
https://github.com/Qiskit/qiskit/releases/tag/0.46.0
현재 릴리스의 변경 로그는 릴리스 탭에서 찾을 수 있습니다. 변경 로그는 특정 릴리스의 주요 변경 사항에 대한 빠른 개요를 제공합니다.
또한 각 릴리스의 일부로 릴리스의 일부로 변경된 내용을 자세히 문서화하기 위해 세부 릴리스 노트가 작성됩니다. 여기에는 업그레이드 및 새로운 기능에 대한 잠재적인 주요 변경 사항에 대한 문서가 포함됩니다. 여기에서 모든 릴리스 노트를 확인하세요.
우리는 계약 번호 DE-SC0012704에 따라 DOE Office of Science National Quantum Information Science Research Centers, Co-design Center for Quantum Advantage(C2QA)의 Qiskit 개발에 대한 부분적인 지원을 인정합니다.
아파치 라이센스 2.0