Microsoft 퀀텀 개발 키트 (QDK)에는 로컬 컴퓨터에서 양자 프로그램을 실행하는 양자 시뮬레이터가 포함됩니다. 이러한 로컬 시뮬레이터를 사용하여 Azure Quantum 대상에 제출하기 전에 프로그램을 테스트하고 개발합니다.
QDK 양자 프로그램을 실행하기 위한 4개의 기본 시뮬레이터를 제공합니다.
- 스파스 시뮬레이터
- 손떨림 보정기 시뮬레이터
- GPU 시뮬레이터
- CPU 시뮬레이터
스파스 시뮬레이터
스파스 시뮬레이터는 큐비트 상태를 스파스 벡터로 나타내고 스파스 행렬 대수를 사용하여 0이 아닌 진폭을 거의 생성하지 않는 프로그램을 신속하게 시뮬레이션합니다.
openqasm.run 확장의 QDK 및 Python 프로그램과 qsharp.run 및 OpenQASMQ# API용 기본 시뮬레이터입니다. 또는 프로그램의 빠른 시뮬레이션을 원하거나 Q# 시뮬레이션 OpenQASMQiskit중에 프로그램의 양자 상태를 표시하려는 경우 스파스 시뮬레이터를 사용합니다.
스파스 시뮬레이터는 VS CodePython(QDK)용 확장과 QDKVisual Studio Code 패키지 모두에서 사용할 수 있습니다. 이 시뮬레이터는 QDK 확장에서 사용할 수 있는 유일한 시뮬레이터이므로, VS Code에서 OpenQASM 및 Q# 프로그램을 실행할 때 확장이 이를 자동으로 사용합니다.
VS Code에서 Q#DumpMachine 함수 또는 디버거를 사용하여 시뮬레이션의 여러 지점에서 큐비트 상태 벡터를 표시합니다.
VS Code 확장과 Python 패키지는 모두 OpenQASM 및 Q# 프로그램의 스파스 시뮬레이션을 위한 노이즈 모델을 지원합니다. Python 패키지만 Qiskit 프로그램의 스파스 시뮬레이션을 지원하지만 Qiskit 시뮬레이션에 대한 노이즈 모델은 지원하지 않습니다.
Visual Studio Code 확장에서 시뮬레이션을 실행하는 방법에 대한 자세한 내용은 QDK을 참조하세요.
손떨림 보정기 시뮬레이터
안정기 시뮬레이터는 수천 개의 큐비트를 사용하는 Clifford-지배적인 프로그램을 빠르고 효율적으로 시뮬레이션합니다. Clifford 게이트는 양자 오류 수정 회로의 일반적인 구성 요소입니다. Clifford 연산은 스태빌라이저 분기의 수를 증가시키지 않으므로 시뮬레이터는 넓은 회로에서도 이를 효율적으로 적용할 수 있습니다. 일반적인 Clifford 작업은 다음과 같습니다.
- $X$, $Y$, $Z$
- $S$ 및 $S^\dagger$
- $H$또는 Hadamard
- $CX$, $CY$, $CZ$
- $SWAP$
또한 스태빌라이저 시뮬레이터는 스태빌라이저 분기를 사용하여 비-Clifford 연산 수가 제한된 회로를 시뮬레이션합니다. 시뮬레이터는 다음과 같은 non-Clifford 작업을 지원합니다:
- $T$ 및 $T^\dagger$
- 임의 각도 $R_X$, $R_Y$, $R_Z$, $R_{XX}$, $R_{YY}$, $R_{ZZ}$ 회전
Clifford이 아닌 각 연산은 안정자 분기의 수를 늘릴 수 있습니다. Clifford가 아닌 작업을 추가하면 메모리 사용량과 샷 시간이 기하급수적으로 증가할 수 있습니다. 대부분의 Clifford 작업과 적은 수의 비Clifford 연산이 있는 넓은 회로에 스태빌라이저 시뮬레이터를 사용합니다. non-Clifford 작업이 많은 회로에 스파스 또는 전체 상태 시뮬레이터를 사용합니다.
안정자 시뮬레이터는 적응 실행, Pauli 노이즈 및 큐비트 손실을 지원합니다. Q#, OpenQASM, QDK, 및 Python 프로그램용 QIRQiskit 패키지에서는 사용할 수 있지만, VS Code용 QDK 확장에서는 사용할 수 없습니다.
시뮬레이터 선택기가 있는 Python API에서 안정기 시뮬레이터를 선택하려면 "stabilizer" 또는 "clifford"를 사용합니다.
GPU 시뮬레이터
GPU 시뮬레이터는 귀하의 머신의 GPU을 사용하여 양자 프로그램의 여러 샷을 병렬로 실행하는 상태 완전체 시뮬레이터입니다. 시뮬레이터는 모든 게이트 유형을 지원하지만 상당한 컴퓨팅 리소스가 필요합니다. 시뮬레이터는 최대 27개의 큐비트를 모델링할 수 있습니다. 컴퓨터의 GPU 성능에 따라 성능이 결정되지만 약 20개의 큐비트와 많은 샷이 있는 프로그램에는 성능이 최적입니다.
GPU 시뮬레이터는 특정 QIRQiskit 패키지 API를 통해 Python 또는 QDK를 입력으로 받습니다. VS Code 확장은 GPU 시뮬레이터를 지원하지 않습니다. 또한 모든 유형의 양자 게이트 또는 연산에서 노이즈 모델을 다양하게 지원합니다.
CPU 시뮬레이터
CPU 시뮬레이터와 마찬가지로 GPU 시뮬레이터는 모든 유형의 양자 게이트를 사용하여 프로그램을 실행하는 전체 상태 시뮬레이터입니다. 그러나 여러 샷을 병렬로 실행할 수 없으므로 속도가 느립니다. 이 시뮬레이터는 약 25큐비트로 확장되지만 메모리 문제로 인해 더 많은 큐비트로 기하급수적으로 느려집니다. 머신에 GPU가 없거나 프로그램에 큐비트가 거의 없고 많은 샷이 필요하지 않은 경우 CPU 시뮬레이터를 사용합니다.
CPU 시뮬레이터는 Qiskit 또는 QIR 입력을 허용합니다. 특정 QDKPython 패키지 API를 통해 사용할 수 있지만 VS Code 확장을 통해서는 사용할 수 없습니다. 또한 모든 유형의 양자 게이트 또는 연산에서 노이즈 모델을 다양하게 지원합니다.
어떤 시뮬레이터를 사용해야 하나요?
시뮬레이터를 선택할 때 다음 요소를 고려하세요:
- 개발 환경(VS Code 또는 Python)
- 사용 중인 양자 프로그래밍 프레임워크
- 프로그램의 복잡성 및 샷 수
- 로컬 컴퓨터의 하드웨어 기능
- Azure Quantum 대상 또는 프로그램을 실행하려는 기타 양자 하드웨어
- 빌드하려는 노이즈 모델
다음 표에는 각 QDK 시뮬레이터의 가용성 및 지원되는 양자 프로그래밍 프레임워크가 요약되어 있습니다.
| 시뮬레이터 | Availability | 지원되는 프레임워크 |
|---|---|---|
| 희소 | VS Code 확장 및 Python 패키지 | Q#, OpenQASM, Qiskit |
| Stabilizer | Python 패키지 | Q#, OpenQASM, , Qiskit, QIR |
| GPU | Python 패키지 | Qiskit, QIR |
| CPU | Python 패키지 | Qiskit, QIR |
VS Code용 QDK 확장의 시뮬레이션
QDK용 확장 VS Code는 스파스 시뮬레이터만 지원합니다. 스파스 시뮬레이터를 사용하려면 Q#에서 사용자의 VS Code 또는 OpenQASM 파일을 실행합니다. Pauli의 VS Code 프로그램에 대한 스파스 시뮬레이션에는 Q# 노이즈 모델을 추가할 수 있지만, OpenQASM 프로그램에는 추가할 수 없습니다.
패키지의 QDKPython 시뮬레이션
QDK Python 패키지는 여러 양자 프로그래밍 프레임워크와 4개의 QDK 시뮬레이터를 모두 지원합니다. 호환성은 프레임워크 및 API에 따라 다릅니다.
다음 표에서는 각 Python API에서 지원하는 시뮬레이터 및 프로그래밍 프레임워크를 나열합니다.
| Python API | 희소 | Stabilizer | GPU | CPU | 프로그래밍 프레임워크 |
|---|---|---|---|---|---|
qsharp.run |
Supported | Supported | 지원되지 않음 | 지원되지 않음 | Q# |
openqasm.run |
Supported | Supported | 지원되지 않음 | 지원되지 않음 | OpenQASM |
qiskit.QSharpBackend |
Supported | 지원되지 않음 | 지원되지 않음 | 지원되지 않음 | Qiskit |
simulation.NeutralAtomDevice |
지원되지 않음 | Supported | Supported | Supported | QIR |
qiskit.NeutralAtomBackend |
지원되지 않음 | Supported | Supported | Supported | Qiskit |
simulation.run_qir |
지원되지 않음 | Supported | Supported | Supported | QIR |