다음을 통해 공유


target 리소스 추정기의 매개 변수 사용자 지정

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

참고 항목

리소스 예측 도구로 작업하는 동안 문제가 발생하면 문제 해결 페이지를 확인하세요.

필수 조건

  • Python 및 Pip설치된 Python 환경입니다.

  • 최신 버전의 Visual Studio Code 또는 웹에서 VS Code를 엽니다.

  • Azure Quantum Development Kit, PythonJupyter 확장이 설치된 VS Code

  • 최신 Azure Quantum qsharpqsharp-widgets 패키지입니다.

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

Target 매개 변수

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

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

작업에 대해 미리 계산된 예상을 이미 알고 있는 경우 이를 통합하고 리소스 예측 도구의 실행을 최적화할 수도 있습니다. 자세한 내용은 리소스 추정기에서 알려진 예상치를 사용하는 방법을 참조 하세요.

물리적 큐비트 매개 변수

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

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

Qubit 매개 변수 Python API 클래스 설명
"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큐비트 조인트 측정 오류율(클리포드 오류율)은 현실적인 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 식별자 데이터 형식 설명
name string 큐비트 모델의 이름
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_timet_gate_time 기본값 one_qubit_gate_time, two_qubit_gate_error_rate 기본값 및 t_gate_error_rate 기본값 one_qubit_gate_error_rate, idle_error_rate 기본값은 .로 one_qubit_measurement_error_rate설정됩니다.

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

Python 식별자 데이터 형식 설명
name string 큐비트 모델의 이름
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_qubitJointMeasurementTimet_gate_time 기본값 one_qubit_measurement_time, two_qubit_joint_measurement_error_rate 기본값 및 t_gate_error_rate 기본값 one_qubit_measurement_error_rate, idle_error_rate 기본값은 .로 one_qubit_measurement_error_rate설정됩니다.

측정 one_qubit_measurement_error_rate 값 읽기 및 측정 처리process에 해당하는 오류 비율을 지정할 수 있습니다readout.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큐비트 오류 비율에 단일 숫자 값을 지정하면 읽기 및 프로세스 오류 비율이 모두 같을 수 있습니다.

Important

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

양자 오류 수정 체계

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

리소스 추정기는 다음 수식을 사용하여 지수 모델을 사용하여 논리적 오류 비율을 모델링합니다.

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

여기서 $a$는 교차 전단계이고, $d$는 코드 거리이고, $p$는 물리적 오류율이며, $p^*$는 양자 오류 수정 임계값입니다. 교차 전단계 $a$는 시뮬레이션을 위해 숫자로 추출할 수 있습니다.

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

물리적 오류율 $p$은 디바이스에서 수행된 물리적 Clifford 작업의 최악의 오류율로 큐비트 매개 변수에서 추출됩니다. 특히 $p = {}$ max(one_qubit_measurement_error_rate, one_qubit_gate_error_rate, two_qubit_gate_error_rate) - 게이트 기반 명령 집합이 있는 큐비트 매개 변수의 경우, majorana 명령 집합이 있는 큐비트 매개 변수의 경우 $p = {}$ max(one_qubit_measurement_error_rate, two_qubit_joint_measurement_error_rate)입니다. QEC 체계에는 일반적으로 오류 수정으로 인해 오류가 표시되지 않는 오류 비율 임계값$p^*$이 있습니다.

Azure Quantum Resource Estimator는 표면 코드와 플로켓 코드라는 두 가지 미리 정의된 QEC 스키마를 지원합니다.

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 스키마에 대한 매개 변수

미리 정의된 각 QEC 스키마에 대한 정확한 매개 변수는 다음과 같습니다.

{
    "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""physicalQubitsPerLogicalQubit" 기본값, "errorCorrectionThreshold" 기본"oneQubitMeasurementTime"값은 기본값0.01, 기본값 "crossingPrefactor" 은 .로 0.03설정됩니다.

QEC 구성표 사용자 지정

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

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

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

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

오류 예산

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

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

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

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

논리적 오류 $\epsilon_{\log}$는 논리 큐비트를 구현하는 오류이고, T 상태 오류 $\epsilon_{\rm dis}$는 증류를 통해 T 상태를 생성하는 오류이며, 회전 게이트 오류 $\epsilon_{\rm syn}$는 임의 각도로 회전 게이트를 합성하는 오류입니다.

참고 항목

다른 값을 지정하지 않는 한 오류 예산 $\epsilon$은 논리적 오류, T 상태 오류 및 회전 게이트 오류 간에 균일하게 분산됩니다.

증류 및 회전 합성의 경우 각 오류 예산 $\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 상태 또는 회전이 포함되지 않은 경우 값은 t_states 각각 0이고 rotations 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 정수 T 팩터리 복사본의 최대 수입니다. 리소스 추정기는 시간 오버헤드를 고려하지 않고 사용되는 실제 큐비트 수를 최소화하는 최적의 T 팩터리 복사본 수를 선택하여 필요한 리소스를 결정합니다. 매개 변수는 max_t_factories 최대 복사본 수를 제한하므로 그에 따라 논리 주기 수를 조정합니다. 자세한 내용은 T 팩터리 물리적 추정을 참조 하세요.
max_duration 시간 문자열 알고리즘의 최대 런타임입니다. 리소스 추정기는 당시에 하나 또는 max_physical_qubits 제약 조건 중 하나 max_duration 만 허용하지만 두 가지 제약 조건은 허용하지 않습니다. 지정된 경우 max_duration 리소스 추정기는 지정된 최대 수로 제한되는 솔루션 중에서 가장 적합한 추정치 max_physical_qubits 를 찾으려고 시도합니다.
max_physical_qubits 정수 알고리즘의 최대 물리적 큐비트 수입니다. 리소스 추정기는 당시에 하나 또는 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_duration max_physical_qubits 너무 작아서 가능한 솔루션을 찾을 수 없는 경우 리소스 예측 도구에서 오류를 반환합니다. 제약 조건도 지정되지 max_duration max_physical_qubits 않은 경우 리소스 예측 도구는 가장 짧은 시간 동안 솔루션을 찾는 것을 목표로 합니다.

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

증류 단위

클래스를 사용하여 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 단위가 출력 결과에 표시되는 방법을 지정합니다.

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

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

수식 failure_probability_formula output_error_rate_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_specification logical_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에서 리소스 추정기를 실행하는 경우 파레토 프론티어 예측은 기본적으로 사용하도록 설정됩니다.

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

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

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

from qsharp_widgets import EstimatesOverview

EstimatesOverview(result)

참고 항목

리소스 예측 도구로 작업하는 동안 문제가 발생하는 경우 문제 해결 페이지를 확인하거나 문의하세요AzureQuantumInfo@microsoft.com.

다음 단계