在不同的 Braket 设备上支持 OpenQASM - Amazon Braket

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在不同的 Braket 设备上支持 OpenQASM

对于支持 OpenQASM 3.0 的设备,action 字段支持通过 GetDevice 响应执行新操作,如下列 Rigetti 和 IonQ 设备示例所示。

//OpenQASM as available with the Rigetti device capabilities { "braketSchemaHeader": { "name": "braket.device_schema.rigetti.rigetti_device_capabilities", "version": "1" }, "service": {...}, "action": { "braket.ir.jaqcd.program": {...}, "braket.ir.openqasm.program": { "actionType": "braket.ir.openqasm.program", "version": [ "1" ], …. } } } //OpenQASM as available with the IonQ device capabilities { "braketSchemaHeader": { "name": "braket.device_schema.ionq.ionq_device_capabilities", "version": "1" }, "service": {...}, "action": { "braket.ir.jaqcd.program": {...}, "braket.ir.openqasm.program": { "actionType": "braket.ir.openqasm.program", "version": [ "1" ], …. } } }

对于支持脉冲控制的设备,pulse 字段显示在 GetDevice 响应中。以下示例显示了 Rigetti 设备的 pulse 字段。

// Rigetti { "pulse": { "braketSchemaHeader": { "name": "braket.device_schema.pulse.pulse_device_action_properties", "version": "1" }, "supportedQhpTemplateWaveforms": { "constant": { "functionName": "constant", "arguments": [ { "name": "length", "type": "float", "optional": false }, { "name": "iq", "type": "complex", "optional": false } ] }, ... }, "ports": { "q0_ff": { "portId": "q0_ff", "direction": "tx", "portType": "ff", "dt": 1e-9, "centerFrequencies": [ 375000000 ] }, ... }, "supportedFunctions": { "shift_phase": { "functionName": "shift_phase", "arguments": [ { "name": "frame", "type": "frame", "optional": false }, { "name": "phase", "type": "float", "optional": false } ] }, ... }, "frames": { "q0_q1_cphase_frame": { "frameId": "q0_q1_cphase_frame", "portId": "q0_ff", "frequency": 462475694.24460185, "centerFrequency": 375000000, "phase": 0, "associatedGate": "cphase", "qubitMappings": [ 0, 1 ] }, ... }, "supportsLocalPulseElements": false, "supportsDynamicFrames": false, "supportsNonNativeGatesWithPulses": false, "validationParameters": { "MAX_SCALE": 4, "MAX_AMPLITUDE": 1, "PERMITTED_FREQUENCY_DIFFERENCE": 400000000 } } }

前面的字段详细说明了以下内容:

端口:

描述了在 QPU 上声明的预制外部 (extern) 设备端口以及给定端口的相关属性。此结构中列出的所有端口都预先声明为用户提交的 OpenQASM 3.0 程序中的有效标识符。端口的其他属性包括:

  • 端口 ID (portId)

    • 在 OpenQASM 3.0 中声明为标识符的端口名称。

  • 方向 (direction)

    • 端口的方向。驱动端口传输脉冲(“tx”方向),而测量端口接收脉冲(“rx”方向)。

  • 端口类型 (portType)

    • 此端口负责的操作类型(例如,驱动、捕获或 ff - fast-flux)。

  • Dt (dt)

    • 表示给定端口上的单个采样时间步长,以秒为单位。

  • 量子比特映射 (qubitMappings)

    • 与给定端口关联的量子比特。

  • 中心频率 (centerFrequencies)

    • 端口上所有预先声明或用户定义的帧的相关中心频率列表。有关更多信息,请参阅“帧”。

  • QHP 特定属性 () qhpSpecificProperties

    • 一张可选地图,详细介绍有关 QHP 特定端口的现有属性。

帧:

描述了在 QPU 上声明的预制外部帧以及与这些帧相关的属性。此结构中列出的所有帧都预先声明为用户提交的 OpenQASM 3.0 程序中的有效标识符。帧的其他属性包括:

  • 帧编号 (frameId)

    • 在 OpenQASM 3.0 中声明为标识符的帧名称。

  • 端口 ID (portId)

    • 帧的关联硬件端口。

  • 频率 (frequency)

    • 帧的默认初始频率。

  • 中心频率 (centerFrequency)

    • 帧频率带宽的中心。通常,只能将帧调整到中心频率周围的特定带宽。因此,频率调整应保持在中心频率的给定增量之内。您可以在验证参数中找到带宽值。

  • 阶段 (phase)

    • 帧的默认初始阶段。

  • 关联门 (associatedGate)

    • 与给定帧关联的门。

  • 量子比特映射 (qubitMappings)

    • 与给定帧关联的量子比特。

  • QHP 特定属性 () qhpSpecificProperties

    • 一张可选地图,详细说明有关 QHP 特定帧的现有属性。

SupportsDynamicFrames:

描述了帧是否可以通过 OpenPulse newframe 函数在 caldefcal 块中声明。如果该值为 false,则只能在程序中使用帧结构中列出的帧。

SupportedFunctions:

除了给定函数的关联参数、参数类型和返回类型之外,还描述了设备支持的 OpenPulse 函数。要查看使用这些OpenPulse函数的示例,请参阅OpenPulse规范。目前,Braket 支持:

  • shift_phase

    • 按指定值移动帧的相位

  • set_phase

    • 将帧的相位设置为指定值

  • swap_phases

    • 在两帧之间交换相位。

  • shift_frequency

    • 按指定值移动帧的频率

  • set_frequency

    • 将帧频设置为指定值

  • play

    • 安排波形

  • capture_v0

    • 将捕获帧上的值返回到位寄存器

SupportedQhpTemplateWaveforms:

描述了设备上可用的预先构造的波形函数以及相关的参数和类型。默认情况下,Braket Pulse 在所有设备上提供预先构造的波形例程,它们是:

Constant

显示参数为 t、tau 和 iq 的常数函数的数学表达式,其中:输出始终等于 iq。

τ 是波形长度,iq 是一个复数。

def constant(length, iq)

Gaussian

显示参数为 t、tau、sigma、A=1 和 zae=0 的高斯函数的数学方程。

τ 是波形长度,σ 是高斯宽度,A 是振幅。如果将 ZaE 设置为 True,则对 Gaussian 进行偏移和重新缩放,使其在波形的开头和结尾处都等于零,且最大达到 A

def gaussian(length, sigma, amplitude=1, zero_at_edges=False)

DRAG Gaussian

参数为 t、tau、sigma、beta、A=1 和 zae=0 的阻力高斯分布的数学方程。

τ 是波形长度,σ 是高斯宽度,β 是自由参数,A 是振幅。如果将 ZaE 设置为 True,则对绝热门导数去除(DRAG)Gaussian 进行偏移和重新缩放,使其在波形的开头和结尾处都等于零,实数部分最大达到 A。有关阻力波形的更多信息,请参阅论文 Simple Pulses for Elimination of Leakage in Weakly Nonlinear Qubits

def drag_gaussian(length, sigma, beta, amplitude=1, zero_at_edges=False)

Erf Square

Erf Square 分布的数学方程,含参数 t、长度、宽度、sigma、A=1 和 zae=0。

其中:L 是长度,W 是波形宽度,σ 定义了边缘上升和下降的速度,t1​=(L−W)/2t22=(L+W)/2A 是振幅。如果将 ZaE 设置为 True,则对 Gaussian 进行偏移和重新缩放,使其在波形的开头和结尾处都等于零,且最大达到 A。以下方程是波形的重新缩放版本。

参数为 zae=1 的重新缩放的 Erf Square 分布数学方程。

其中:a=erf(W/2σ)b=erf(-t1​/σ)/2+erf(t2​/σ)/2

def erf_square(length, width, sigma, amplitude=1, zero_at_edges=False)

SupportsLocalPulseElements:

描述了脉冲元素(如端口、帧和波形)是否可以在 defcal 块中进行本地定义。如果值为 false,则必须以 cal 块形式定义元素。

SupportsNonNativeGatesWithPulses:

描述了我们是否可以将非原生门与脉冲程序结合使用。例如,如果不先通过 defcal 为所使用的量子比特定义门,就不能像程序中的 H 门一样使用非原生门。您可以在“设备功能”下方找到原生门 nativeGateSet 键列表。

ValidationParameters:

描述了脉冲元件验证边界,包括:

  • (任意及预先构造的)波形的最大扩展/最大振幅值

  • 所提供中心频率的最大频率带宽(单位为赫兹)

  • length/duration 以秒为单位的最小脉冲

  • 以秒为单位的最 length/duration 大脉冲

OpenQASM 支持的操作、结果和结果类型

要了解每台设备支持哪些 OpenQASM 3.0 功能,可以参考设备功能输出 action 字段中的 braket.ir.openqasm.program 键。例如,以下是 Braket 状态向量模拟器 SV1 支持的操作和结果类型。

... "action": { "braket.ir.jaqcd.program": { ... }, "braket.ir.openqasm.program": { "version": [ "1.0" ], "actionType": "braket.ir.openqasm.program", "supportedOperations": [ "ccnot", "cnot", "cphaseshift", "cphaseshift00", "cphaseshift01", "cphaseshift10", "cswap", "cy", "cz", "h", "i", "iswap", "pswap", "phaseshift", "rx", "ry", "rz", "s", "si", "swap", "t", "ti", "v", "vi", "x", "xx", "xy", "y", "yy", "z", "zz" ], "supportedPragmas": [ "braket_unitary_matrix" ], "forbiddenPragmas": [], "maximumQubitArrays": 1, "maximumClassicalArrays": 1, "forbiddenArrayOperations": [ "concatenation", "negativeIndex", "range", "rangeWithStep", "slicing", "selection" ], "requiresAllQubitsMeasurement": true, "supportsPhysicalQubits": false, "requiresContiguousQubitIndices": true, "disabledQubitRewiringSupported": false, "supportedResultTypes": [ { "name": "Sample", "observables": [ "x", "y", "z", "h", "i", "hermitian" ], "minShots": 1, "maxShots": 100000 }, { "name": "Expectation", "observables": [ "x", "y", "z", "h", "i", "hermitian" ], "minShots": 0, "maxShots": 100000 }, { "name": "Variance", "observables": [ "x", "y", "z", "h", "i", "hermitian" ], "minShots": 0, "maxShots": 100000 }, { "name": "Probability", "minShots": 1, "maxShots": 100000 }, { "name": "Amplitude", "minShots": 0, "maxShots": 0 } { "name": "AdjointGradient", "minShots": 0, "maxShots": 0 } ] } }, ...