target 리소스 예측 도구의 매개 변수 사용자 지정

이 문서에서는 Azure Quantum Resource Estimator의 매개 변수를 사용자 target지정 target 하여 사용하는 컴퓨터 특성과 일치시키는 방법을 보여 줍니다. 리소스 추정기는 이러한 매개 변수를 사용하여 양자 컴퓨터에서 양자 알고리즘을 실행하는 데 필요한 리소스를 예측합니다.

참고

리소스 예측 도구를 사용하는 동안 문제가 발생하면 문제 해결 페이지를 검사.

사전 요구 사항

대상 매개 변수

리소스 예측 도구는 지정된 큐비트 기술과 고정된 아키텍처 선택 집합을 사용하여 지정된 양자 알고리즘을 구현하는 데 필요한 큐비트 수 및 런타임과 같은 리소스의 추정을 계산합니다.

따라서 리소스 예측 도구는 미리 정의된 값을 사용하여 입력 집합을 사용하여 쉽게 시작할 수 있습니다.

  • 기본 물리적 큐비트의 속성을 정의하는 물리적 큐비트 모델입니다.
  • 가정된 양자 오류 수정 체계인 QEC(양자 오류 수정) 체계입니다.
  • 전체 허용 오류인 오류 예산, 즉 프로그램이 구조 해제할 수 있는 횟수입니다.
  • 구성 요소 수준에 대한 제약 조건으로, 논리 주기의 수와 T 팩터리 복사본 수입니다.
  • T 팩터리 증류 알고리즘을 지정하는 증류 단위입니다.
  • Pareto 프론티어 예측 은 동일한 알고리즘에 대해 큐비트 수 및 런타임의 여러 추정치를 실행합니다.

물리적 큐비트 매개 변수

리소스 예측 도구는 물리적 큐비트 가정을 모델링할 때 두 개의 서로 다른 물리적 명령 집합을 사용하여 큐비트를 작동합니다. 물리적 명령 집합은 게이트 기반이거나 Majorana일 수 있습니다. 게이트 기반 명령 집합은 단일 큐비트 측정, 단일 큐비트 게이트(T 게이트 포함), 2 큐비트 게이트를 제공합니다. Majorana 명령 집합은 물리적 T 게이트, 단일 큐비트 측정, 2 큐비트 공동 측정 작업을 제공합니다.

6개의 미리 정의된 큐비트 매개 변수 중에서 선택할 수 있으며, 그 중 4개는 게이트 기반 명령 집합이고 2개는 Majorana 명령 집합입니다. 이러한 큐비트 모델은 다양한 작업 시간과 오류 비율을 포함하므로 실제 양자 애플리케이션을 사용하도록 설정하는 데 필요한 리소스 비용을 충분히 탐색할 수 있습니다.

Qubit 매개 변수 Python API 클래스 Description
"qubit_gate_ns_e3" , "qubit_gate_ns_e4" GATE_NS_E3 , GATE_NS_E4 작업 시간과 충실도는 일반적으로 나노초 정권에서 작업 시간이 있는 초전도 트랜스몬 큐비트 또는 스핀 큐비트의 미래 버전에 해당할 수 있습니다. 이러한 큐비트의 경우 게이트 및 측정 작업은 각각 50 ns 및 100 ns가 소요되는 것으로 간주됩니다. 단일 큐비트 및 2큐비트 게이트 오류 비율은 현실적인 target로 $10^{-3}$, 스케일 업 시스템에 대해 낙관적 target 인 $10^{-4}$로 간주됩니다.
"qubit_gate_us_e3" , "qubit_gate_us_e4" GATE_US_E3 , GATE_US_E4 작업 시간과 충실도는 일반적으로 마이크로초 정권에서 작업 시간이 있는 이온을 기반으로 하는 큐비트의 이후 버전에 해당할 수 있습니다. 이온 큐비트에 대한 일반적인 가정에 따라 게이트 및 측정 작업에는 100μs가 소요되는 것으로 간주됩니다. 단일 큐비트 클리포드 게이트의 오류율은 현실적인 target $10^{-3}$이고 낙관적target인 경우 $10^{-4}$이며, 단일 큐비트 비클리포드 게이트(T 게이트)의 오류율은 $10^{-6}$입니다. 2큐비트 게이트의 경우 오류 비율은 현실적인 target $10^{-3}$이고 낙관적target인 경우 $10^{-4}$입니다.
"qubit_maj_ns_e4" , "qubit_maj_ns_e6" MAJ_NS_E4 , MAJ_NS_E6 작업 시간과 충실도는 이후 개선된 Majorana 큐비트 버전에 해당할 수 있습니다. 이러한 큐비트의 경우 게이트 및 측정 작업은 100 ns가 소요되는 것으로 간주됩니다. 하드웨어에서 토폴로지 보호를 고려하기 위해 단일 큐비트 및 2큐비트 조인트 측정 오류율(Clifford 오류율)은 현실적인 target으로 $10^{-4}$, 낙관적target인 으로 $10^{-6}$로 간주됩니다. 이 아키텍처의 클리포드가 아닌 작업에는 토폴로지 보호가 없으며, 클리포드가 아닌 물리적 T 게이트의 오류율은 5%입니다.

참고

다른 값을 지정하지 않는 한 큐비트 모델의 기본값은 입니다 "qubit_gate_ns_e3".

참조를 위해 미리 정의된 전체 큐비트 매개 변수는 다음과 같습니다.

{
    "qubitParams": {
        "name": "qubit_gate_ns_e3",
        "instructionSet": "GateBased",
        "oneQubitMeasurementTime": "100 ns",
        "oneQubitGateTime": "50 ns",
        "twoQubitGateTime": "50 ns",
        "tGateTime": "50 ns",
        "oneQubitMeasurementErrorRate": 1e-3,
        "oneQubitGateErrorRate": 1e-3,
        "twoQubitGateErrorRate": 1e-3,
        "tGateErrorRate": 1e-3
    }
}

{
    "qubitParams": {
        "name": "qubit_gate_ns_e4",
        "instructionSet": "GateBased",
        "oneQubitMeasurementTime": "100 ns",
        "oneQubitGateTime": "50 ns",
        "twoQubitGateTime": "50 ns",
        "tGateTime": "50 ns",
        "oneQubitMeasurementErrorRate": 1e-4,
        "oneQubitGateErrorRate": 1e-4,
        "twoQubitGateErrorRate": 1e-4,
        "tGateErrorRate": 1e-4
    }
}

{
    "qubitParams": {
        "name": "qubit_gate_us_e3",
        "instructionSet": "GateBased",
        "oneQubitMeasurementTime": "100 µs",
        "oneQubitGateTime": "100 µs",
        "twoQubitGateTime": "100 µs",
        "tGateTime": "100 µs",
        "oneQubitMeasurementErrorRate": 1e-3,
        "oneQubitGateErrorRate": 1e-3,
        "twoQubitGateErrorRate": 1e-3,
        "tGateErrorRate": 1e-6
    }
}

{
    "qubitParams": {
        "name": "qubit_gate_us_e4",
        "instructionSet": "GateBased",
        "oneQubitMeasurementTime": "100 µs",
        "oneQubitGateTime": "100 µs",
        "twoQubitGateTime": "100 µs",
        "tGateTime": "100 µs",
        "oneQubitMeasurementErrorRate": 1e-4,
        "oneQubitGateErrorRate": 1e-4,
        "twoQubitGateErrorRate": 1e-4,
        "tGateErrorRate": 1e-6
    }
}

{
    "qubitParams": {
        "name": "qubit_maj_ns_e4",
        "instructionSet": "Majorana",
        "oneQubitMeasurementTime": "100 ns",
        "twoQubitJointMeasurementTime": "100 ns",
        "tGateTime": "100 ns",
        "oneQubitMeasurementErrorRate": 1e-4,
        "twoQubitJointMeasurementErrorRate": 1e-4,
        "tGateErrorRate": 0.05
    }
}

{
    "qubitParams": {
        "name": "qubit_maj_ns_e6",
        "instructionSet": "Majorana",
        "oneQubitMeasurementTime": "100 ns",
        "twoQubitJointMeasurementTime": "100 ns",
        "tGateTime": "100 ns",
        "oneQubitMeasurementErrorRate": 1e-6,
        "twoQubitJointMeasurementErrorRate": 1e-6,
        "tGateErrorRate": 0.01
    }
}

미리 정의된 큐비트 매개 변수 전달

미리 정의된 큐비트 매개 변수를 프로그래밍 방식으로 지정하는 방법에는 두 가지가 있습니다. 를 실행할 qsharp.estimate때 클래스의 큐비트 모델 이름을 qubitParams 선택할 수 있습니다. 예를 들어 큐비트 매개 변수를 선택 "qubit_maj_ns_e6" 하려면 다음을 작성합니다.

qsharp.estimate("RunProgram()", params=
                {"qubitParams": {
                        "name": "qubit_maj_ns_e6"
                    },
                })

를 사용하여 QubitParams큐비트 매개 변수를 클래스에 EstimatorParams 전달할 수도 있습니다. 예를 들어 큐비트 매개 변수를 선택 MAJ_NS_E6 하려면 다음을 작성합니다.

from qsharp.estimator import EstimatorParams, QubitParams

params = EstimatorParams()
params.qubit_params.name = QubitParams.MAJ_NS_E6 # qubit_maj_ns_e6 qubit parameter

qsharp.estimate("RunProgram()", params=params)

미리 정의된 큐비트 매개 변수 사용자 지정

이름을 지정한 다음 다른 값을 업데이트하여 미리 정의된 큐비트 매개 변수를 사용자 지정할 수 있습니다. 예를 들어 "qubit_maj_ns_e4"에서 2큐비트 조인트 측정의 오류 비율을 줄이려면 다음을 작성합니다.

qsharp.estimate("RunProgram()", params=
                {"qubitParams": {
                        "name": "qubit_maj_ns_e4",
                        "twoQubitJointMeasurementErrorRate": 1e-5,
                    },
                })

또는 목록 형식으로 지침을 전달할 수 있습니다.

from qsharp.estimator import EstimatorParams, QubitParams

params = MicrosoftEstimatorParams()
params.qubit_params.name = QubitParams.MAJ_NS_E4
params.qubit_params.two_qubit_joint_measurement_error_rate = 1e-5

게이트 기반 큐비트에 대한 큐비트 매개 변수

Python 식별자 데이터 형식 Description
name 문자열 큐비트 모델의 이름
instruction_set "gate_based" 기본 큐비트 기술
one_qubit_measurement_time 시간 문자열 ns의 단일 큐비트 측정($t_{\rm meas}$)에 대한 작업 시간
one_qubit_gate_time 시간 문자열 ns의 단일 큐비트 게이트($t_{\rm gate}$)에 대한 작업 시간
two_qubit_gate_time 시간 문자열 ns의 2큐비트 게이트에 대한 작업 시간
t_gate_time 시간 문자열 ns의 단일 큐비트 비클리포드 게이트에 대한 작업 시간
one_qubit_measurement_error_rate float 단일 큐비트 측정에 대한 오류율
one_qubit_gate_error_rate float 단일 큐비트 클리포드 게이트의 오류율($p$)
two_qubit_gate_error_rate float 2큐비트 클리포드 게이트의 오류율
t_gate_error_rate float 클리포드가 아닌 단일 큐비트 상태를 준비하는 오류율($p_T$)
idle_error_rate float 유휴 상태에 해당하는 오류율

다음 코드는 게이트 기반 명령 집합에 대한 사용자 지정 큐비트 매개 변수를 지정하는 방법을 보여줍니다.

from qsharp.estimator import EstimatorParams, QubitParams,

params = EstimatorParams()

params.qubit_params.name = "your_custom_name"
params.qubit_params.instruction_set = "gate_based"
params.qubit_params.t_gate_error_rate = 0.03
params.qubit_params.t_gate_time = "10 ns"
params.qubit_params.idle_error_rate = 0.02

참고

지정하지 않으면 및 의 two_qubit_gate_time 값이 기본값one_qubit_gate_time이고t_gate_time, 의 값 two_qubit_gate_error_ratet_gate_error_rate 기본값one_qubit_gate_error_rate은 이며, 의 값 idle_error_rate 은 기본값으로 one_qubit_measurement_error_rate설정됩니다.

Majorana 큐비트에 대한 큐비트 매개 변수

Python 식별자 데이터 형식 Description
name 문자열 큐비트 모델의 이름
instruction_set "majorana" 기본 큐비트 기술
one_qubit_measurement_time 시간 문자열 ns의 단일 큐비트 측정($t_{\rm meas}$)에 대한 작업 시간
two-qubit_joint_measurement_time 시간 문자열 ns의 2큐비트 측정 작업 시간
t_gate_time 시간 문자열 ns의 단일 큐비트 비클리포드 게이트에 대한 작업 시간
one_qubit_measurement_error_rate float 단일 큐비트 측정에 대한 오류율
two_qubit_joint_measurement_error_rate float 2큐비트 측정에 대한 오류율
t_gate_error_rate float 클리포드가 아닌 단일 큐비트 상태를 준비하는 오류율($p_T$)
idle_error_rate float 유휴 상태에 해당하는 오류율

모든 필수 값이 있는 Majorana 기반 명령 집합에 대한 최소 템플릿은 다음과 같습니다.

from qsharp.estimator import EstimatorParams, QubitParams,

params = EstimatorParams()

params.qubit_params.name = "your_custom_name"
params.qubit_params.instruction_set = "majorana"
params.qubit_params.one_qubit_measurement_time = "10 ns"
params.qubit_params.one_qubit_measurement_error_rate = 0.01

참고

지정하지 않으면 및 의 two_qubitJointMeasurementTime 값이 기본값one_qubit_measurement_time이고t_gate_time, 의 값 two_qubit_joint_measurement_error_ratet_gate_error_rate 기본값one_qubit_measurement_error_rate은 이며, 의 값 idle_error_rate 은 기본값으로 one_qubit_measurement_error_rate설정됩니다.

및 의 경우 one_qubit_measurement_error_rate 측정 판독값, readout및 측정 처리process에 해당하는 오류 비율을 지정할 수 two_qubit_joint_measurement_error_rate있습니다. 이러한 값은 숫자 또는 숫자 쌍일 <double> 수 있습니다. 예를 들면 다음과 같습니다.

params.qubit_params.two_qubit_joint_measurement_error_rate = \
    MeasurementErrorRate(process=0.00005, readout=0.00007)

참고

Majorana 큐비트 측정에서 단일 큐비트 및 2큐비트 오류율에 단일 숫자 값을 지정하면 읽기 및 프로세스 오류 비율이 모두 같을 수 있습니다.

중요

지정되지 않은 모든 값은 기본값을 사용합니다. 예를 들어 를 지정 "qubit": {"oneQubitGateTime":"200 ns"} 하면 2큐비트 게이트 시간과 1큐비트 게이트 시간이 모두 200 ns인 게이트 기반 큐비트를 모델링합니다. 단위의 경우 배정밀도 부동 소수점 숫자인 시간 문자열을 지정한 다음, 가능한 시간 접미사가 ns, µs (또는 us), ms및 인 경우 이러한 값에 대한 공간 및 s시간 단위를 지정해야 합니다.

양자 오류 수정 체계

실제 규모의 양자 애플리케이션을 실행하려면 양자 연산의 오류율이 낮아야 합니다. 이러한 오류 비율 targets 은 일반적으로 원시 물리적 큐비트의 기능을 초과합니다. 이러한 제한을 극복하기 위해 QEC(양자 오류 수정) 및 내결함성 계산은 대규모 양자 컴퓨터의 구성 요소를 구성하는 두 가지 중요한 기술입니다. 먼저 QEC를 사용하면 오류가 발생하기 쉬운 여러 물리적 큐비트를 작성하고 기본 물리적 큐비트보다 양자 정보를 더 잘 보존하는 보다 안정적인 논리 큐비트를 빌드할 수 있습니다.

오류 수정 코드 거리(또는 짧은 코드 거리)는 수정할 수 있는 오류 수를 제어하는 매개 변수입니다. 따라서 논리 큐비트의 오류율 및 인코딩에 필요한 실제 큐비트 수입니다. 코드 거리에 따라 정확도와 실제 큐비트 수가 모두 증가합니다. 목표는 특정 애플리케이션에 대해 필요한 오류율 집합을 달성할 수 있는 최소 코드 거리를 찾는 것입니다.

리소스 예측 도구는 지수 모델을 사용하여 논리적 오류율을 모델링하기 위해 다음 수식을 사용합니다.

$$ P = a\left(\frac{p}{p^*}\right)^{\frac{d+1}{2}} $$

여기서 $d$는 코드 거리이고, $p$는 물리적 오류율이며, $p^*$는 양자 오류 수정 임계값입니다. 물리적 오류율 $p$은 디바이스의 물리적 Clifford 작업 중 최악의 오류율로 큐비트 매개 변수에서 추출됩니다.

특히 게이트 {}기반 명령 집합이 있는 큐비트 매개 변수의 경우 $ max(one_qubit_measurement_error_rate, one_qubit_gate_error_rate, two_qubit_gate_error_rate) $p, Majorana 명령 집합이 있는 큐비트 매개 변수의 경우 $p = {}$ max(one_qubit_measurement_error_rate, two_qubit_joint_measurement_error_rate)입니다. QEC 체계에는 일반적으로 오류 수정으로 오류를 표시하지 않는 오류 비율 임계값$p^*$이 있습니다.

QEC 프로토콜 Python API 클래스 설명
"surface_code" SURFACE_CODE 게이트 기반 표면 코드는 arXiv:1208.0928arXiv:1009.3686을 기반으로 합니다. Majorana 표면 코드는 arXiv:1909.03002arXiv:2007.00307을 기반으로 합니다.
"floquet_code" FLOQUET_CODE 마요라나 큐비트에만 해당합니다. 플로켓 코드는 arXiv:2202.11829를 기반으로 합니다.

참고

다른 값을 지정하지 않는 한 QEC 스키마의 기본값은 "surface_code"입니다.

미리 정의된 각 QEC 체계에 대한 정확한 매개 변수(시뮬레이션을 위해 숫자로 추출할 수 있는 교차 전단계 $a$포함)는 다음과 같습니다.

{
    "qubitParams": {
        "instructionSet": "GateBased",
    }
    "qecScheme": {
        "name": "surface_code",
        "errorCorrectionThreshold": 0.01,
        "crossingPrefactor": 0.03,
        "logicalCycleTime": "(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance",
        "physicalQubitsPerLogicalQubit": "2 * codeDistance * codeDistance"
    }
}

{
    "qubitParams": {
        "instructionSet": "Majorana",
    }
    "qecScheme": {
        "name": "surface_code",
        "errorCorrectionThreshold": 0.0015,
        "crossingPrefactor": 0.08,
        "logicalCycleTime": "20 * oneQubitMeasurementTime * codeDistance",
        "physicalQubitsPerLogicalQubit": "2 * codeDistance * codeDistance"
    }
}

{
    "qubitParams": {
        "instructionSet": "Majorana",
    }
    "qecScheme": {
        "name": "floquet_code",
        "errorCorrectionThreshold": 0.01,
        "crossingPrefactor": 0.07,
        "logicalCycleTime": "3 * oneQubitMeasurementTime * codeDistance",
        "physicalQubitsPerLogicalQubit": "4 * codeDistance * codeDistance + 8 * (codeDistance - 1)"
    }
}

미리 정의된 QEC 스키마 전달

미리 정의된 QEC 스키마를 지정하는 방법에는 두 가지가 있습니다. 를 실행할 qsharp.estimate때 클래스의 QEC 모델 이름을 "qecScheme" 선택할 수 있습니다. 예를 들어 플로켓 코드를 선택하려면 다음을 작성합니다.

qsharp.estimate("RunProgram()", params=
                {"qecScheme": {
                        "name": "floquet_code"
                    }
                })

클래스를 사용하여 QECScheme예측 매개 변수 목록을 클래스에 EstimatorParams 전달할 수도 있습니다. 예를 들어 플로켓 코드를 선택하려면 다음을 작성합니다.

from qsharp.estimator import EstimatorParams, QubitParams, QECScheme,

params = EstimatorParams()
params.items.qec_scheme.name = QECScheme.FLOQUET_CODE # floquet code QEC scheme

qsharp.estimate("RunProgram()", params=params)

미리 정의된 QEC 스키마 사용자 지정

이름을 지정한 다음 다른 값을 업데이트하여 미리 정의된 QEC 체계를 사용자 지정할 수 있습니다. 예를 들어 플로켓 코드에서 교차 전단계를 늘리려면 다음을 작성합니다.

qsharp.estimate("RunProgram()", params=
                {"qecScheme": {
                        "name": "floquet_code",
                        "crossingPrefactor": 0.07,
                    }
                })

참고

지정하지 않으면 및 의 "logicalCycleTime" 값이 기본값"oneQubitMeasurementTime"이고, 의 값 "errorCorrectionThreshold" 은 기본값0.01으로, 의 값 "crossingPrefactor" 은 기본값으로 0.03설정 "physicalQubitsPerLogicalQubit" 됩니다.

QEC 구성표 사용자 지정

Resource Estimator는 $a$ 및 $p^*$에 대한 "crossingPrefactor" 값을 제공하여 위의 수식에 따라 사용자 지정된 QEC 체계를 "errorCorrectionThreshold" 추상화할 수 있습니다. 또한 코드 거리 및 기본 물리적 큐비트의 물리적 작업 시간 가정에 따라 달라지는 단일 논리 연산을 실행하는 시간인 를 지정 "logicalCycleTime"해야 합니다. 마지막으로 두 번째 수식은 코드 거리에 따라 하나의 논리 큐비트를 인코딩하는 데 필요한 실제 큐비트 수를 계산 "physicalQubitsPerLogicalQubit"합니다.

다음 코드를 QEC 스키마의 템플릿으로 사용할 수 있습니다.

qsharp.estimate("RunProgram()", params=
                {"qecScheme": {
                        "crossingPrefactor": <double>,
                        "errorCorrectionThreshold": <double>,
                        "logicalCycleTime": <formula string>,
                        "physicalQubitsPerLogicalQubit": <formula string>
                    }
                })                

수식 내에서 물리적 큐비트 속성, 오류 수정 임계값 및 two_qubit_joint_measurement_time교차 프리팩터를 기반으로 논리 큐비트에 대해 계산된 코드 거리에 대한 변수 eccDistance 뿐만 아니라 실제 큐비트 매개 변수에서 해당 필드에서 값을 가져오는 변수one_qubit_gate_timetwo_qubit_gate_timeone_qubit_measurement_time, , 및 를 사용할 수 있습니다. 시간 변수 및 eccDistance 는 수식을 설명하는 logicalCycleTime 데 사용할 수 있습니다. 수식 physicalQubitsPerLogicalQubit 의 경우 만 eccDistance 사용할 수 있습니다.

오류 예산

총 오류 예산 $\epsilon$은 알고리즘에 대해 허용되는 전체 오류, 즉 알고리즘의 허용되는 오류 확률을 설정합니다. 전역 값은 0에서 1 사이여야 하며 기본값은 0.001이며 0.1%에 해당합니다. 즉, 알고리즘은 1000개 실행에서 최대 한 번 실패할 수 있습니다. 이 매개 변수는 애플리케이션에 따라 다릅니다.

예를 들어 정수 인수에 대한 Shor 알고리즘을 실행하는 경우 출력이 실제로 입력의 주요 요소임을 검사 수 있으므로 오류 예산에 대한 큰 값이 허용될 수 있습니다. 반면에 효율적으로 확인할 수 없는 솔루션으로 문제를 해결하는 알고리즘에는 더 적은 오류 예산이 필요할 수 있습니다.

오류 예산은 다음 세 부분의 합계에 해당합니다.

$$ \epsilon = \epsilon_{\log} + \epsilon_{\rm dis} + \epsilon_{\rm syn} $$

더 이상 지정하지 않으면 오류 예산 $\epsilon$이 균일하게 분산되고 $\epsilon_{\log}$ 오류에 적용되어 논리적 큐비트를 구현합니다. 오류 예산 $\epsilon_{\rm dis}$은 증류를 통해 T 상태를 생성하고 오류 예산 $\epsilon_{\rm syn}$을 사용하여 회전 게이트를 임의 각도로 합성합니다.

증류 및 회전 합성의 경우 각 오류 예산 $\epsilon_{\rm dis}$ 및 $\epsilon_{\rm syn}$은 필요한 모든 T 상태와 모든 필수 회전 게이트 간에 균일하게 분산됩니다. 입력 알고리즘에 회전 게이트가 없는 경우 오류 예산은 논리적 오류 및 T 상태 오류에 균일하게 분산됩니다.

오류 예산 전달

0에서 1 사이의 숫자를 설정하여 오류 예산을 지정하는 두 가지 방법이 있습니다. 를 실행할 qsharp.estimate때 오류 예산을 전달할 수 있습니다. 예를 들어 오류 예산 1/3을 선택하려면 다음을 작성합니다.

qsharp.estimate("RunProgram()", params=
                {'errorBudget': 0.333
                })

오류 예산 매개 변수를 클래스에 EstimatorParams전달할 수도 있습니다.

from qsharp.estimator import EstimatorParams, QubitParams, QECScheme,

params = EstimatorParams()
params.items.error_budget = 0.333 # error budget of 1/3

qsharp.estimate("RunProgram()", params=params)

또한 오류 예산의 각 구성 요소를 개별적으로 지정할 수 있습니다. 모든 값의 합계는 총 오류 예산이며 0에서 1 사이여야 합니다. 양자 알고리즘에 T 상태 또는 회전이 포함되지 않은 경우 및 rotationst_states 값은 각각 0일 수 있습니다.

다음 코드에서는 T 상태 및 회전을 사용하여 오류 예산 매개 변수를 지정하는 방법을 보여 줍니다.

from qsharp.estimator import EstimatorParams, QubitParams,

params = EstimatorParams()
params.error_budget.logical = 0.01
params.error_budget.t_states = 0.02
params.error_budget.rotations = 0.03

제약 조건

클래스를 "constraints" 사용하여 T 팩터 리 구성 요소 수준에서 제약 조건을 적용할 수 있습니다. 제약 조건을 조정하여 큐비트 수를 줄이거나 런타임을 줄이는 방향으로 예측값을 최적화할 수 있습니다.

매개 변수 데이터 형식 설명
logical_depth_factor float 실행 시간을 제어합니다. 값이 1보다 큰 경우 논리 깊이라고도 하는 초기 논리 주기 수에 이 숫자를 곱합니다. 를 logical_depth_factor줄이면 지정된 시간에 T 팩터리의 호출 수를 늘려 동일한 수의 T 상태를 생성하는 데 필요한 T 팩터리 복사본을 줄일 수 있습니다. T 팩터리 복사본 수를 줄이면 알고리즘 런타임이 그에 따라 증가합니다. 추가 주기 수로 인해 필요한 논리적 오류 비율이 증가하므로 총 런타임의 배율 인수는 더 클 수 있습니다.
max_t_factories integer 최대 T 팩터리 복사본 수입니다. 리소스 예측 도구는 시간 오버헤드를 고려하지 않고 사용된 실제 큐비트의 수를 최소화하는 최적의 T 팩터리 복사본 수를 선택하여 필요한 리소스를 결정합니다. 매개 변수는 max_t_factories 최대 복사본 수를 제한하므로 그에 따라 논리 주기 수를 조정합니다. 자세한 내용은 T 팩터리 물리적 예측을 참조하세요.
max_duration 시간 문자열 알고리즘의 최대 런타임입니다. 자원 예측 도구는 당시 또는 max_physical_qubits 제약 조건 중 max_duration 하나만 허용하지만 두 가지 제약 조건은 허용하지 않습니다. 가 지정된 경우 max_duration 리소스 예측 도구는 지정된 최대 수로 제한되는 솔루션 중에서 가장 적합한 추정치 max_physical_qubits 를 찾으려고 시도합니다.
max_physical_qubits integer 알고리즘의 최대 물리적 큐비트 수입니다. 자원 예측 도구는 당시 또는 max_physical_qubits 제약 조건 중 max_duration 하나만 허용하지만 두 가지 제약 조건은 허용하지 않습니다. 가 지정된 경우 max_physical_qubits 리소스 예측 도구는 지정된 최대 수로 제한되는 솔루션 중에서 가장 적합한 추정치 max_duration 를 찾으려고 시도합니다.

다음 코드는 양자 알고리즘에 대한 제약 조건을 지정하는 방법을 보여 줍니다.

from qsharp.estimator import EstimatorParams

params = EstimatorParams()

params.constraints.max_duration = "1 s"
params.constraints.logical_depth_factor = 1.5
params.constraints.max_t_factories = 10

참고

또는 max_physical_qubitsmax_duration 제공된 값이 너무 작아서 가능한 솔루션을 찾을 수 없는 경우 리소스 예측 도구는 오류를 반환합니다. max_duration 제약 조건이나 max_physical_qubits 제약 조건이 모두 지정되지 않은 경우 리소스 예측 도구는 가장 짧은 시간 동안 솔루션을 찾는 것을 목표로 합니다.

max_physical_qubits 를 사용하여 max_duration 솔루션 공간에 영향을 줄 수 있으며, 이러한 제약 조건이 없는 솔루션에 비해 런타임이 길지만 큐비트가 적은 솔루션을 찾을 수 있습니다. 런타임과 큐비트 수 사이에 장차가 있으며, 이 절름차는 다양한 알고리즘에 미치는 영향과 함께 일부 알고리즘에 대해 효율적으로 관리할 수 있습니다. [arXiv:2211.07629]의 테이블 IV는 양자 역학 알고리즘에 대한 큐비트 수와 런타임 간의 절차를 효과적으로 활용하는 것을 보여 줍니다. 자세한 내용은 시간 또는 큐비트 제약 조건 수가 포함된 양자 리소스 추정 샘플을 참조하세요.

증류 단위

클래스를 사용하여 T 팩터리 증류 알고리즘에 대한 사양을 DistillationUnitSpecification제공할 수 있습니다. 사양은 미리 정의되거나 사용자 지정될 수 있습니다. 또는 증류 단위 이름을 15-1 RM 또는 15-1 space-efficient(으)로 선택하여 미리 정의된 사양을 지정할 수 있습니다.

from qsharp.estimator import EstimatorParams, DistillationUnitSpecification

params = EstimatorParams()
unit = DistillationUnitSpecification()
unit.name = "15-1 RM" # predefined distillation unit

params.distillation_unit_specifications.append(unit)

두 경우 모두 표기법 15-1은 15개의 입력 T 상태와 1개의 출력 T 상태를 의미합니다. 15-1 space-efficient 증류 단위는 15-1 RM보다 적은 큐비트를 사용하지만 더 많은 런타임이 필요합니다. 자세한 내용은 표 VI를 참조하세요.

미리 정의된 증류 단위를 사용하면 사용자 지정 증류 단위와 비교하여 성능이 향상됩니다.

증류 단위 사용자 지정

사용자 고유의 증류 단위를 사용자 지정할 수 있습니다. 증류 단위에 대한 정확한 매개 변수는 다음과 같습니다.

qsharp.estimate("RunProgram()", params=
                    {"distillationUnitSpecifications": {
                        "displayName": <string>, 
                        "numInputTs": <int>,
                        "numOutputTs": <int>,
                        "failureProbabilityFormula": <string>,
                        "outputErrorRateFormula": <string>,
                        "physicalQubitSpecification": <protocol specific parameters>, 
                        "logicalQubitSpecification": <protocol specific parameters>, 
                        "logicalQubitSpecificationFirstRoundOverride": <protocol specific parameters>, # Only if "logicalQubitSpecification"
                        }
                })

모든 숫자 매개 변수는 양수여야 합니다. 는 displayName 증류 단위가 출력 결과에 표시되는 방법을 지정합니다.

다음 코드에서는 클래스 및 클래스를 사용하여 양자 알고리즘에 대한 증류 단위 매개 변수를 지정하는DistillationUnitSpecificationProtocolSpecificDistillationUnitSpecification방법을 보여 있습니다.

from qsharp.estimator import EstimatorParams, DistillationUnitSpecification, ProtocolSpecificDistillationUnitSpecification

params = EstimatorParams()
unit = DistillationUnitSpecification()
unit.display_name = "T"
unit.failure_probability_formula = "c"
unit.output_error_rate_formula = "r"
unit.num_input_ts = 1
unit.num_output_ts = 2

physical_qubit_specification = ProtocolSpecificDistillationUnitSpecification()
physical_qubit_specification.num_unit_qubits = 1
physical_qubit_specification.duration_in_qubit_cycle_time = 2
unit.physical_qubit_specification = physical_qubit_specification

output_error_rate_formula 에 대한 failure_probability_formula 수식은 기본 산술 연산, 상수 및 세 개의 매개 변수만 있는 사용자 지정 수식입니다.

  • clifford_error_rate도 로 표시됩니다 c.
  • readout_error_rate도 로 표시됩니다 r.
  • input_error_rate도 로 표시됩니다 z.

긴 표기법과 짧은 표기법을 사용하는 사용자 지정 수식의 다음 예제를 참조하세요. 다음 예제에서는 표준 구현 내에서 기본적으로 사용되는 수식을 보여 줍니다.

매개 변수 긴 수식 짧은 수식
failure_probability_formula "15.0 * input_error_rate + 356.0 * clifford_error_rate" "15.0 * z + 356.0 * c"
output_error_rate_formula "35.0 * input_error_rate ^ 3 + 7.1 * clifford_error_rate" "35.0 * z ^ 3 + 7.1 * c"

또는 매개 변수 physical_qubit_specificationlogical_qubit_specification 중 하나 이상을 제공해야 합니다. 전자만 제공되면 증류 단위를 물리적 큐비트에 적용할 수 있습니다. 후자만 제공되면 증류 단위를 논리 큐비트에 적용할 수 있습니다. 둘 다 제공되면 증류 단위를 두 가지 유형의 큐비트에 모두 적용할 수 있습니다.

매개 변수 logical_qubit_specification_first_round_override 는 가 지정된 경우에만 logical_qubit_specification 제공할 수 있습니다. 이 경우 1차 증류에 적용된 경우 의 logical_qubit_specification 값을 재정의합니다. 에 필요한 logical_qubit_specification_first_round_override<protocol specific parameters> 은 체계를 따라야 합니다.

{
    "numUnitQubits": <int>,
    "durationInQubitCycleTime": <double>
}

파레토 프론티어 추정

알고리즘의 리소스를 추정할 때 실제 큐비트 수와 알고리즘의 런타임 간의 절충을 고려하는 것이 중요합니다. 알고리즘의 런타임을 줄이기 위해 가능한 한 많은 실제 큐비트를 할당하는 것을 고려할 수 있습니다. 그러나 물리적 큐비트의 수는 양자 하드웨어에서 사용할 수 있는 물리적 큐비트의 수에 의해 제한됩니다. 런타임과 시스템 규모 간의 장단점 이해는 리소스 예측의 더 중요한 측면 중 하나입니다.

Pareto 프론티어 예측은 동일한 알고리즘에 대한 여러 추정치를 제공하며, 각각 큐비트 수와 런타임 간의 절충을 보여 줍니다.

참고

: 자원 예측 계산 옵션을 사용하여 Q#Visual Studio Code 리소스 추정기를 실행하는 경우 Pareto 프론티어 추정은 기본적으로 사용하도록 설정됩니다.

Python에서 리소스 예측 도구를 실행하는 경우 매개 변수를 "estimateType""frontier"지정해야 합니다.

result = qsharp.estimate("RunProgram()", params=
                    {"qubitParams": { "name": "qubit_maj_ns_e4" },
                    "qecScheme": { "name": "surface_code" },
                    "estimateType": "frontier", # Pareto frontier estimation
                    }
                )

Pareto 프론티어 추정 결과를 시각화하려는 경우 함수를 EstimatesOverview 사용할 수 있습니다. 이 함수는 표의 프론티어 예측 결과와 시공간 다이어그램을 표시합니다. 자세한 내용은 시공간 다이어그램을 참조하세요.

from qsharp_widgets import EstimatesOverview

EstimatesOverview(result)

참고

리소스 예측 도구를 사용하는 동안 문제가 발생하면 문제 해결 페이지를 검사 또는 에 문의하세요AzureQuantumInfo@microsoft.com.

다음 단계