Visual Studio Code용 QDK 확장에서 양자 시뮬레이션을 실행합니다.

Visual Studio Code QDK (VS Code) 확장은 Microsoft (퀀텀 개발 키트)에 대해 해당 로컬 스파스 시뮬레이터에서 Q# 및 OpenQASM 프로그램을 자동으로 실행합니다.

이 문서에서는 로컬 시뮬레이터에서 프로그램을 실행하는 방법과 Q# 노이즈를 Pauli 시뮬레이션에 추가하는 방법을 설명합니다. Python의 다른 QDK 시뮬레이터를 사용하려면 QDK을 참조하세요.

로컬 시뮬레이터 작동 방식

스파스 시뮬레이터는 양자 상태의 0이 아닌 진폭만 저장합니다. 대부분의 계산 기준 진폭이 0인 경우 이 표현은 메모리를 적게 사용하고 모든 진폭을 저장하는 전체 상태 시뮬레이터보다 큐비트가 많은 일부 프로그램을 시뮬레이션할 수 있습니다.

성능 이점은 양자 상태가 계산 기준으로 스파스 상태로 유지되는지 여부에 따라 달라집니다. 자세한 내용은 Jaques 및 Häner(arXiv:2105.01533)를 참조하세요.

VS Code에서 양자 프로그램 실행

  1. VS Code용 확장을 설치합니다QDK.
  2. Q# (.qs) 파일 또는 OpenQASM (.qasm) 파일을 엽니다.
  3. 파일 시작 부분 또는 Main 작업 위에 있는 코드 렌즈에서 Q#을 선택합니다.

시뮬레이션 출력이 터미널에 VS Code 나타납니다. Q# 프로그램의 경우 디버그를 선택하여 실행 시 프로그램의 양자 상태를 검사합니다.

Pauli시뮬레이션에 Q#노이즈 추가

스파스 시뮬레이터는 Pauli 확장의 QDK 프로그램에 대한 Q# 노이즈를 지원합니다. 프로그램에서 Pauli를 사용하여 ConfigurePauliNoise $X$, $Y$, $Z$ 오류의 확률을 설정합니다. 확장 설정은 QDK 전역 Pauli 노이즈 모델도 지원합니다.

메모

OpenQASM 확장에서 QDK 시뮬레이션에 노이즈 모델을 추가할 수 없습니다. Q# 또는 NoiseConfig 프로그램에 대한 작업별 노이즈 모델을 빌드하려면 QDKPython 패키지와 OpenQASM API를 사용합니다.

VS Code 노이즈를 Pauli 설정에 추가

  • VS Code에서 Q# 확장에 대한 QDK 사용자 설정에서 Q# 프로그램의 전역 Pauli 노이즈를 설정합니다.

VS Code의 QDK 확장에 대한 전역 Q#Pauli 노이즈 설정 스크린샷

Q# 내의 모든 프로그램에서 모든 게이트, 측정값, 큐비트의 히스토그램 결과에 VS Code 노이즈 설정이 적용됩니다.

노이즈가 없으면 이 GHZ 샘플 프로그램의 히스토그램은 측정값의 약 절반에 대해 $\ket{00000}$를, 나머지 절반은 $\ket{11111}$를 표시합니다.

import Std.Diagnostics.*;
import Std.Measurement.*;

operation Main() : Result[] {
    let num = 5;
    return GHZSample(num);
}

operation GHZSample(n: Int) : Result[] {
    use qs = Qubit[n];
    H(qs[0]);
    ApplyCNOTChain(qs);
    let results = MeasureEachZ(qs);
    ResetAll(qs);
    return results;
}

노이즈가 없고 모든 큐비트가 0이거나 모든 큐비트가 1인 곳에 피크가 있는 히스토그램의 스크린샷

1% 비트 플립 노이즈 비율에서 결과가 확산하기 시작합니다. 25%에서는 히스토그램은 순수한 노이즈와 구별할 수 없습니다.

1% 및 25% 비트 플립 노이즈 비율의 Q# 프로그램에 대한 히스토그램의 스크린샷

개별 Pauli 프로그램에 노이즈 추가 Q#

Q#를 사용하여 ConfigurePauliNoise 프로그램의 노이즈 모델을 설정하거나 변경하고 노이즈가 발생하는 시기와 위치를 제어합니다.

메모

설정은 VS Code 모든 Q# 프로그램에 노이즈를 적용하지만 ConfigurePauliNoise 자신을 호출하는 프로그램에 대해서는 해당 설정을 재정의합니다.

이전 프로그램에서 큐비트 할당 직후 노이즈를 추가합니다.

operation GHZSample(n: Int) : Result[] {
    use qs = Qubit[n];

    // 5% bit-flip noise applies to all subsequent operations.
    ConfigurePauliNoise(0.05, 0.0, 0.0);

    H(qs[0]);
    ApplyCNOTChain(qs);
    let results = MeasureEachZ(qs);
    ResetAll(qs);
    return results;
}

큐비트 할당 후 5% 비트 플립 노이즈가 시작되는 히스토그램 결과의 스크린샷.

노이즈만 측정 작업에 적용하려면 측정 직전에 노이즈 모델을 설정하고 나중에 지웁니다.

operation GHZSample(n: Int) : Result[] {
    use qs = Qubit[n];
    H(qs[0]);
    ApplyCNOTChain(qs);

    // Noise applies only to the measurement operation.
    ConfigurePauliNoise(0.05, 0.0, 0.0);

    let results = MeasureEachZ(qs);
    ResetAll(qs);
    return results;
}

측정 직전에 5% 비트 플립 노이즈가 시작되는 히스토그램 결과의 스크린샷.

프로그램의 다른 지점에서 노이즈 구성을 변경하거나 지우려면 ConfigurePauliNoise를 여러 번 호출합니다. 예를 들어 Hadamard 게이트에 5% 비트 플립 노이즈를 적용한 다음 프로그램의 나머지 부분에 대한 노이즈 구성을 지웁니다.

operation GHZSample(n: Int) : Result[] {
    use qs = Qubit[n];

    // Noise applies to the H operation.
    ConfigurePauliNoise(0.05, 0.0, 0.0);
    
    H(qs[0]);

    // Clear the noise settings.
    ConfigurePauliNoise(0.0, 0.0, 0.0);
    
    ApplyCNOTChain(qs);
    let results = MeasureEachZ(qs);
    ResetAll(qs);
    return results;
}

기타 Q# 노이즈 함수

ConfigurePauliNoise 는 모든 Pauli 노이즈 모델을 지원합니다. Std.Diagnostics 네임스페이스의 이러한 함수 및 작업을 사용하여 노이즈를 구성하거나 적용합니다.

Function Description Example
ConfigurePauliNoise 시뮬레이션의 Pauli 노이즈를 설정합니다. Pauli $X$, $Y$, $Z$ 오류의 확률 또는 Pauli 노이즈 모델 중 하나를 전달합니다. 이 구성은 Q# 프로그램의 모든 후속 게이트, 측정값 및 큐비트에 적용되고 VS Code 확장 노이즈 설정을 재정의합니다. 후속 호출은 이전 구성을 재정의합니다. ConfigurePauliNoise(0.1, 0.0, 0.5)
또는
ConfigurePauliNoise(BitFlipNoise(0.1))
BitFlipNoise 지정된 확률에서 $X$ 오류만 Pauli 있는 노이즈 모델을 반환합니다. 10% 비트 플립 노이즈:
ConfigurePauliNoise(BitFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.1, 0.0, 0.0)
PhaseFlipNoise 지정된 확률에서 $Z$ 오류만 Pauli 있는 노이즈 모델을 반환합니다. 10% 위상 대칭 이동 노이즈:
ConfigurePauliNoise(PhaseFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.1)
DepolarizingNoise $X$, $Y$, $Z$ 오류에 대해 Pauli 동일한 확률을 갖는 노이즈 모델을 반환합니다. 6% 노이즈 분해:
ConfigurePauliNoise(DepolarizingNoise(0.06)) $\equiv$ ConfigurePauliNoise(0.02, 0.02, 0.02)
NoNoise 오류 확률이 0인 모델을 반환합니다. 현재 노이즈 구성을 지우려면 ConfigurePauliNoise에 전달하면 됩니다. ConfigurePauliNoise(NoNoise()) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.0)
ApplyIdleNoise 시뮬레이션 중에 구성된 노이즈를 단일 큐비트에 적용합니다. ...
use q = Qubit[2];
ConfigurePauliNoise(0.1, 0.0, 0.0);
ApplyIdleNoise(q[0]);
...