target Настройка параметров оценщика ресурсов

В этой статье показано, как настроить target параметры оценщика ресурсов Azure Quantum в соответствии с характеристиками компьютера, которые вы используете target. Оценщик ресурсов использует эти параметры для оценки ресурсов, необходимых для выполнения квантового алгоритма на квантовом компьютере.

Примечание

Если при работе с оценщиком ресурсов возникают проблемы, проверка страницу Устранение неполадок.

Предварительные требования

Параметры целевых расположений

Оценщик ресурсов вычисляет оценку ресурсов, например количество кубитов и время выполнения, которое потребуется для реализации заданного квантового алгоритма с использованием заданной технологии кубита и с фиксированным набором вариантов архитектуры.

Таким образом, оценщик ресурсов принимает набор входных данных с предопределенными значениями, чтобы легко приступить к работе:

Параметры физического кубита

Когда оценщик ресурсов моделирует предположения физического кубита, он использует два разных набора физических инструкций для работы с кубитами. Набор физических инструкций может быть на основе шлюза или Майорана. Набор инструкций на основе шлюза предоставляет однокубитные измерения, однокубитные шлюзы (включая шлюзы T) и двухкубитные шлюзы. Набор инструкций Majorana предоставляет физический T-шлюз, однокубитное измерение и операции измерения двухкубитных соединений.

Вы можете выбрать один из шести предопределенных параметров кубита, четыре из которых имеют наборы инструкций на основе шлюза и два с набором инструкций Majorana. Эти модели кубитов охватывают диапазон времени работы и частоты ошибок, что позволяет достаточно исследовать затраты на ресурсы, необходимые для реализации практических квантовых приложений.

Параметр Кубита Класс API Python Описание
"qubit_gate_ns_e3" , "qubit_gate_ns_e4" GATE_NS_E3 , GATE_NS_E4 Время и точность операций могут соответствовать будущим версиям сверхпроводящих трансмонских кубитов или спин-кубитов, которые обычно имеют время работы в режиме наносекунд. Предполагается, что для этих кубитов операции шлюза и измерения принимают 50 нс и 100 нс соответственно. Предполагается, что скорость ошибок однокубитных и двухкубитных вентилей составляет $10^{-3}$ как реалистичная targetи $10^{-4}$ как оптимистичная target для масштабируемой системы.
"qubit_gate_us_e3" , "qubit_gate_us_e4" GATE_US_E3 , GATE_US_E4 Время и точность операций могут соответствовать будущим версиям кубитов на основе ионов, которые обычно имеют время операций в режиме микросекунд. На основе типичных предположений для кубитов ионов предполагается, что операции шлюза и измерения принимают 100 мкс. Частота ошибок для однокубитных ворот Клиффорда составляет $10^{-3}$ как реалистичная target и $10^{-4}$ как оптимистическая target, в то время как скорость погрешности для однокубитных неклиффордских вентилей (T-вентилей) составляет $10^{-6}$. Для двухкубитных вентилей частота ошибок составляет $10^{-3}$ как реалистичная target и $10^{-4}$ как оптимистическая target.
"qubit_maj_ns_e4" , "qubit_maj_ns_e6" MAJ_NS_E4 , MAJ_NS_E6 Время и точность операций могут соответствовать будущим улучшенным версиям кубитов Majorana. Предполагается, что для этих кубитов операции шлюза и измерения принимают 100 нс. Чтобы учесть топологическую защиту в оборудовании, коэффициенты погрешностей измерения однокубитных и двухкубитных суставов (коэффициенты ошибок Клиффорда) считаются $10^{-4}$ как реалистичная targetи $10^{-6}$ как оптимистическая target. Операции, не относящиеся к Клиффорду, в этой архитектуре не имеют топологической защиты, частота ошибок для физических 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"
                    },
                })

Параметры кубита также можно передать в EstimatorParams класс с помощью QubitParams. Например, чтобы выбрать 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", напишите следующее:

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 строка Имя модели кубита
instruction_set "gate_based" Базовая технология кубитов
one_qubit_measurement_time строка времени Время операции для однокубитного измерения ($t_{\rm meas}$) в ns
one_qubit_gate_time строка времени Время работы однокубитного шлюза ($t_{\rm gate}$) в ns
two_qubit_gate_time строка времени Время работы двухкубитного шлюза в ns
t_gate_time строка времени Время работы для однокубитных ворот, не относящихся к Клиффорду, в ns
one_qubit_measurement_error_rate FLOAT Частота ошибок при измерении с одним кубитом
one_qubit_gate_error_rate FLOAT Частота ошибок для однокубитного шлюза Клиффорда ($p$)
two_qubit_gate_error_rate FLOAT Частота ошибок для двухкубитных ворот Клиффорда
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 и t_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 строка Имя модели кубита
instruction_set "majorana" Базовая технология кубитов
one_qubit_measurement_time строка времени Время операции для однокубитного измерения ($t_{\rm meas}$) в ns
two-qubit_joint_measurement_time строка времени Время работы для двухкубитного измерения в ns
t_gate_time строка времени Время работы для однокубитных ворот, не относящихся к Клиффорду, в ns
one_qubit_measurement_error_rate FLOAT Частота ошибок при измерении с одним кубитом
two_qubit_joint_measurement_error_rate FLOAT Частота ошибок при измерении двухкубитных
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 и t_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 и two_qubit_joint_measurement_error_rateможно указать частоту ошибок, соответствующую считываниям измерений, readoutи обработке измерений. process Это могут быть <double> числа или пары чисел. Пример:

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

Примечание

Если вы укажете одно числовое значение для частоты ошибок с одним кубитом и двумя кубитами в измерении кубитов Майорана, частота ошибок чтения и обработки может быть одинаковой.

Важно!

Все не указанные значения будут принимать значение по умолчанию. Например, при указании будет моделироваться "qubit": {"oneQubitGateTime":"200 ns"} кубит на основе шлюза, в котором время двухкубитного шлюза и однокубитное время шлюза равно 200 нс. Для единиц необходимо указать строки времени, которые представляют собой числа с плавающей запятой двойной точности, за которыми следует пробел и единица времени для таких значений, где возможны суффиксы nsвремени , µs (или us), msи s.

Схемы квантовой коррекции ошибок

Для выполнения квантовых приложений практического масштаба квантовые операции должны иметь низкую частоту ошибок. Эти ошибки targets обычно выходят за рамки возможностей необработанных физических кубитов. Чтобы преодолеть это ограничение, квантовое исправление ошибок (QEC) и отказоустойчивое вычисление являются двумя важными методами, которые образуют стандартные блоки крупномасштабных квантовых компьютеров. Во-первых, QEC позволяет составить несколько физических кубитов, подверженных ошибкам, и создать более надежный логический кубит, который сохраняет квантовую информацию лучше, чем базовые физические кубиты.

Расстояние кода исправления ошибок (или просто расстояние кода для краткости) — это параметр, который управляет количеством ошибок, которые можно исправить. Таким образом, частота ошибок логических кубитов и количество физических кубитов, необходимых для их кодирования. Точность и количество физических кубитов увеличиваются с расстоянием кода. Цель состоит в том, чтобы найти минимальное расстояние кода, которое может достичь требуемой частоты ошибок, установленной для конкретного приложения.

Оценщик ресурсов использует следующую формулу для моделирования частоты логических ошибок с помощью экспоненциальной модели.

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

где $d$ — расстояние кода, $p$ — физическая частота ошибок, а $p^*$ — порог квантового исправления ошибок. Физическая частота ошибок $p$ извлекается из параметров кубита в качестве наихудшего коэффициента ошибок любой физической операции Clifford на устройстве.

В частности, $p = {}$ max(one_qubit_measurement_error_rate, one_qubit_gate_error_rate, ) two_qubit_gate_error_rateдля параметров кубита с набором инструкций на основе шлюза и $p = {}$ max(one_qubit_measurement_error_rate, two_qubit_joint_measurement_error_rate) для параметров кубита с набором инструкций Majorana. Схемы QEC обычно имеют пороговое значение частоты ошибок $p^*$, ниже которого исправление ошибок подавляет ошибки.

Протокол QEC Класс API Python Описание
"surface_code" SURFACE_CODE Код поверхности на основе шлюза основан на arXiv:1208.0928 и arXiv:1009.3686. Код поверхности Majorana основан на arXiv:1909.03002 и arXiv:2007.00307.
"floquet_code" FLOQUET_CODE Только для кубитов Майораны. Код floquet основан на 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" класса . Например, чтобы выбрать floquet-код, напишите:

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

Вы также можете передать список параметров оценки вEstimatorParams класс с помощью QECScheme класса . Например, чтобы выбрать floquet-код, напишите:

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, указав имя и обновив любое из других значений. Например, чтобы увеличить префактор пересечения в коде floquet, напишите:

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

Примечание

Если значение не указано, значения для "logicalCycleTime" и "physicalQubitsPerLogicalQubit" по умолчанию — "oneQubitMeasurementTime", значение для "errorCorrectionThreshold" параметра по умолчанию 0.01— , а значение по умолчанию 0.03"crossingPrefactor" .

Настройка схем QEC

Оценщик ресурсов может абстрагирование настраиваемой схемы QEC на основе приведенной выше формулы, предоставляя значения для "crossingPrefactor" $a$ и "errorCorrectionThreshold" $p^*$. Кроме того, необходимо указать "logicalCycleTime", то есть время выполнения одной логической операции, которое зависит от расстояния кода и допущений времени физической операции базовых физических кубитов. Наконец, вторая формула вычисляет "physicalQubitsPerLogicalQubit", то есть количество физических кубитов, необходимых для кодирования одного логического кубита на основе расстояния в коде.

Следующий код можно использовать в качестве шаблона для схем QEC:

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

В формулах можно использовать переменные one_qubit_gate_time, two_qubit_gate_time, one_qubit_measurement_timeи two_qubit_joint_measurement_time, значения которых взяты из соответствующего поля из параметров физического кубита, а также переменную eccDistance для расстояния кода, вычисленного для логического кубита, на основе свойств физического кубита, порога исправления ошибок и префактора пересечения. Переменные времени и eccDistance могут использоваться для описания формулы logicalCycleTime . Для формулы physicalQubitsPerLogicalQubit можно использовать только eccDistance .

Бюджет ошибок

Общий бюджет ошибок $\epsilon$ задает общую допустимую ошибку для алгоритма, т. е. допустимую вероятность сбоя алгоритма. Его глобальное значение должно находиться в диапазоне от 0 до 1, а значение по умолчанию — 0,001, что соответствует 0,1 %. Иными словами, алгоритм может завершаться сбоем не более одного раза в 1000 выполнений. Этот параметр зависит от конкретного приложения.

Например, если вы используете алгоритм Шора для факторизации целых чисел, может допускаться большое значение для бюджета ошибок, так как можно проверка, что выходные данные действительно являются основными факторами входных данных. С другой стороны, для решения проблемы с помощью алгоритма может потребоваться меньший бюджет ошибок, который не может быть эффективно проверен.

Бюджет ошибок соответствует сумме из трех частей:

$$ \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-состояний или поворотов, то значения t_states и 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_duration или max_physical_qubits в то время, но не два. Если max_duration указан параметр , оценщик ресурсов пытается найти наилучшую оценку для max_physical_qubits решений, ограниченных указанным максимальным числом.
max_physical_qubits Целое число Максимальное количество физических кубитов для алгоритма. Оценщик ресурсов принимает только одно из ограничений max_duration или max_physical_qubits в то время, но не два. Если 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_durationmax_physical_qubits или слишком мало для поиска возможного решения, оценщик ресурсов возвращает ошибку. Если ни max_duration ограничения, ни max_physical_qubits ограничения не указаны, оценщик ресурсов стремится найти решение с минимальным временем.

Совет

Вы можете использовать max_duration и max_physical_qubits , чтобы повлиять на пространство решений, потенциально находя решения с более длительным сроком выполнения, но меньшим количеством кубитов по сравнению с решениями без этих ограничений. Существует компромисс между средой выполнения и количеством кубитов, и этим компромиссом можно эффективно управлять для некоторых алгоритмов, что по-разному влияет на различные алгоритмы. В таблице IV в [arXiv:2211.07629] показано эффективное использование компромисса между количеством кубитов и средой выполнения для алгоритмов квантовой динамики. Дополнительные сведения см. в статье Квантовая оценка ресурсов с ограничением времени или количества кубитов .

Дистилляционные единицы

Вы можете предоставить спецификации для алгоритмов дистилляции фабрик 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 , как будет отображаться единица дистилляции в выходных результатах.

В следующем коде показано, как указать параметры единицы дистилляции для квантового алгоритма DistillationUnitSpecification с помощью класса и ProtocolSpecificDistillationUnitSpecification класса .

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 задан параметр . Если да, он переопределяет значения logical_qubit_specification в случае, если применяется на первом раунде дистилляции. Значение <protocol specific parameters> , необходимое для logical_qubit_specification_first_round_override , должно соответствовать схеме:

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

Оценка границы Парето

При оценке ресурсов алгоритма важно учитывать компромисс между количеством физических кубитов и средой выполнения алгоритма. Можно рассмотреть возможность выделения как можно больше физических кубитов, чтобы уменьшить время выполнения алгоритма. Однако количество физических кубитов ограничено количеством физических кубитов, доступных в квантовом оборудовании. Понимание компромисса между средой выполнения и масштабом системы является одним из самых важных аспектов оценки ресурсов.

Оценка границы Парето предоставляет несколько оценок для одного и того же алгоритма, каждая из которых показывает компромиссы между количеством кубитов и средой выполнения.

Примечание

Если вы запускаете оценщик ресурсов в Visual Studio Code с помощью Q#параметра : Вычисление оценки ресурсов, оценка границы Pareto включена по умолчанию.

При запуске оценщика ресурсов в 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

Дальнейшие действия