연습 - Azure Quantum Resource Estimator 시작

완료됨

Azure Quantum 리소스 추정기를 연습해 보겠습니다. 다음 예제에서는 Shor 알고리즘 샘플의 실제 리소스를 추정합니다.

qsharp 및 qsharp 위젯 설치

먼저 최신 Azure Quantum qsharpqsharp-widgets 패키지를 설치합니다.

python -m pip install --upgrade qsharp qsharp-widgets 

양자 알고리즘 만들기

  1. VS Code에서 명령 팔레트 보기를 > 선택하고 만들기: 새 Jupyter Notebook을 선택합니다.

  2. Notebook의 첫 번째 셀에서 패키지를 가져옵니다 qsharp .

    import qsharp
    from qsharp_widgets import EstimateDetails
    
  3. 새 셀을 추가하고 다음 코드를 복사합니다.

    %%qsharp
    /// # Sample
    /// Random Bit
    ///
    /// # Description
    /// This Q# program generates a random bit by setting a qubit in a superposition
    /// of the computational basis states |0〉 and |1〉, and returning the measurement
    /// result.
    
        operation RandomBit() : Result {
            // Qubits are only accesible for the duration of the scope where they
            // are allocated and are automatically released at the end of the scope.
            use qubit = Qubit();
    
            // Set the qubit in superposition by applying a Hadamard transformation.
            H(qubit);
    
            // Measure the qubit. There is a 50% probability of measuring either 
            // `Zero` or `One`.
            let result = M(qubit);
    
            // Reset the qubit so it can be safely released.
            Reset(qubit);
            return result;
        }
    

양자 알고리즘 예측

  1. 이제 기본 가정을 사용하여 작업에 대한 RandomBit 실제 리소스를 예측합니다. 새 셀을 추가하고 다음 코드를 복사합니다.

    result = qsharp.estimate("RandomBit()")
    result
    

    이 함수는 qsharp.estimate 전체 물리적 리소스 수가 있는 테이블을 표시하는 데 사용할 수 있는 결과 개체를 만듭니다. 첫 번째 표에서는 실제 리소스 예상 기본 보여 줍니다. 이 작업에는 RandomBit 300큐비트가 필요하며 양자 컴퓨터에서 실행하는 데 2마이크로초가 걸립니다.

    실제 자원 추정치
    런타임 2 마이크로초
    rQOPS 3.00M
    물리적 큐비트 300
  2. 더 많은 정보가 있는 그룹을 축소해 비용 세부 정보를 검사할 수 있습니다. 예를 들어 논리 큐비트 매개 변수 그룹을 축소하여 코드 거리가 5이고 논리 큐비트당 실제 큐비트 수가 50인지 확인합니다.

    논리 큐비트 매개 변수
    QEC 체계 surface_code
    코드 거리 5
    물리적 큐비트 50
    논리 주기 시간 2 마이크로초
    논리적 큐비트 오류 비율 3.00E-5
    교차 프리팩터 0.03
    오류 수정 임계값 0.01
    논리 주기 시간 수식 (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance
    실제 큐비트 수식 2 * codeDistance * codeDistance
  3. 필드를 jobParams 사용하여 작업 실행에 전달할 수 있는 모든 대상 매개 변수에 액세스하고 어떤 기본값이 가정되었는지 확인할 수 있습니다.

    result['jobParams']
    
    {'errorBudget': 0.001,
     'qecScheme': {'crossingPrefactor': 0.03,
      'errorCorrectionThreshold': 0.01,
      'logicalCycleTime': '(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance',
      'name': 'surface_code',
      'physicalQubitsPerLogicalQubit': '2 * codeDistance * codeDistance'},
     'qubitParams': {'instructionSet': 'GateBased',
      'name': 'qubit_gate_ns_e3',
      'oneQubitGateErrorRate': 0.001,
      'oneQubitGateTime': '50 ns',
      'oneQubitMeasurementErrorRate': 0.001,
      'oneQubitMeasurementTime': '100 ns',
      'tGateErrorRate': 0.001,
      'tGateTime': '50 ns',
      'twoQubitGateErrorRate': 0.001,
      'twoQubitGateTime': '50 ns'}}
    

    리소스 추정기에서 큐비트 모델, surface_code 오류 수정 코드 및 0.001 오류 예산을 예측의 기본값으로 사용하는 qubit_gate_ns_e3 것을 볼 수 있습니다.

기본값 변경 및 알고리즘 예측

프로그램에 대한 리소스 예상 요청을 제출할 때 몇 가지 선택적 매개 변수를 지정할 수 있습니다. 사용자 지정할 수 있는 대상 매개 변수는 다음과 같습니다.

  • errorBudget - 알고리즘에 대해 허용되는 전체 오류 예산
  • qecScheme - QEC(양자 오류 수정) 체계
  • qubitParams - 물리적 큐비트 매개 변수
  • constraints - 구성 요소 수준의 제약 조건
  • distillationUnitSpecifications - T 팩터리 증류 알고리즘에 대한 사양
  • estimateType - 단일 또는 프론티어

큐비트 모델 변경

Majorana 기반 큐비트 매개 변수 qubitParams인 "qubit_maj_ns_e6"을 사용하여 동일한 알고리즘에 대한 비용을 예측할 수 있습니다.

result_maj = qsharp.estimate("RandomBit()", params={
                "qubitParams": {
                    "name": "qubit_maj_ns_e6"
                }})
EstimateDetails(result_maj)

양자 오류 수정 체계 변경

Floqued QEC 스키마 qecScheme를 사용하여 Majorana 기반 큐비트 매개 변수에서 동일한 예제에 대한 리소스 예측 작업을 다시 실행할 수 있습니다.

result_maj = qsharp.estimate("RandomBit()", params={
                "qubitParams": {
                    "name": "qubit_maj_ns_e6"
                },
                "qecScheme": {
                    "name": "floquet_code"
                }})
EstimateDetails(result_maj)

오류 예산 변경

다음으로, 10%의 동일한 양자 회로를 errorBudget 다시 실행합니다.

result_maj = qsharp.estimate("RandomBit()", params={
                "qubitParams": {
                    "name": "qubit_maj_ns_e6"
                },
                "qecScheme": {
                    "name": "floquet_code"
                },
                "errorBudget": 0.1})
EstimateDetails(result_maj)