다양한 Braket 디바이스에서의 OpenQASM에 대한 지원 - Amazon Braket

다양한 Braket 디바이스에서의 OpenQASM에 대한 지원

OpenQASM 3.0을 지원하는 디바이스의 경우 action 필드는 Rigetti 및 IonQ 디바이스에 대한 다음 예제와 같이 GetDevice 응답을 통해 새 작업을 지원합니다.

//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)

    • 포트의 방향입니다. 드라이브 포트는 펄스(direction “tx”)를 전송하는 반면, 측정 포트는 펄스(direction “rx”)를 수신합니다.

  • 포트 유형(portType)

    • 이 포트가 담당하는 작업의 유형(예: 드라이브, 캡처 또는 ff - fast-flux)입니다.

  • Dt(dt)

    • 지정된 포트에서 단일 샘플 시간 단계를 나타내는 초 단위 시간입니다.

  • 큐비트 매핑(qubitMappings)

    • 지정된 포트와 연결된 큐비트입니다.

  • 중심 주파수(centerFrequencies)

    • 포트에서 사전 선언되거나 사용자 정의된 모든 프레임에 대한 연관 중심 주파수의 목록입니다. 자세한 내용은 프레임을 참조하세요.

  • QHP 특정 속성(qhpSpecificProperties)

    • QHP 전용 포트에 대한 기존 속성을 자세히 설명하는 선택적 맵입니다.

프레임:

QPU에서 선언된 사전 제작 외부 프레임과 해당 프레임에 대한 관련 속성을 설명합니다. 이 구조에 나열된 모든 프레임은 사용자가 제출한 OpenQASM 3.0 프로그램 내에서 유효한 식별자로 사전 선언됩니다. 프레임의 추가 속성은 다음과 같습니다.

  • 프레임 ID(frameId)

    • OpenQASM 3.0에서 식별자로 선언된 프레임 이름입니다.

  • 포트 ID(portId)

    • 프레임에 연결된 하드웨어 포트입니다.

  • 주파수(frequency)

    • 프레임의 기본 초기 주파수입니다.

  • 중심 주파수(centerFrequency)

    • 프레임의 주파수 대역폭 중심입니다. 일반적으로 프레임은 중심 주파수 주변의 특정 대역폭으로만 조정할 수 있습니다. 따라서 주파수 조정은 중심 주파수의 지정된 델타 범위 내에서 이루어져야 합니다. 대역폭 값은 검증 파라미터에서 확인할 수 있습니다.

  • 위상(phase)

    • 프레임의 기본 초기 위상입니다.

  • 연결된 게이트(associatedGate)

    • 지정된 프레임과 연결된 게이트입니다.

  • 큐비트 매핑(qubitMappings)

    • 지정된 프레임과 연결된 큐비트입니다.

  • QHP 특정 속성(qhpSpecificProperties)

    • QHP 전용 프레임에 대한 기존 속성을 자세히 설명하는 선택적 맵입니다.

SupportsDynamicFrames:

OpenPulse newframe 함수를 통해 프레임을 cal 또는 defcal 블록에서 선언할 수 있는지 여부를 설명합니다. false인 경우 프레임 구조에 나열된 프레임만 프로그램 내에서 사용할 수 있습니다.

SupportedFunctions:

지정된 함수에 대해 연결된 인수, 인수 유형 및 반환 유형 외에도 디바이스에 대해 지원되는 OpenPulse 함수를 설명합니다. OpenPulse 함수의 사용 예제를 보려면 OpenPulse 사양을 참조하세요. 현재 Braket은 다음을 지원합니다.

  • shift_phase

    • 프레임의 위상을 지정된 값만큼 이동합니다.

  • set_phase

    • 프레임의 위상을 지정된 값으로 설정합니다.

  • swap_phases

    • 두 프레임 간에 위상을 바꿉니다.

  • shift_frequency

    • 프레임의 주파수를 지정된 값만큼 이동합니다.

  • set_frequency

    • 프레임의 주파수를 지정된 값으로 설정합니다.

  • play

    • 파형을 예약합니다.

  • capture_v0

    • 캡처 프레임의 값을 비트 레지스터로 반환합니다.

SupportedQhpTemplateWaveforms:

디바이스에서 사용할 수 있는 사전 빌드된 파형 함수와 관련 인수 및 유형을 설명합니다. 기본적으로 Braket Pulse는 모든 디바이스에서 다음과 같은 사전 빌드된 파형 루틴을 제공합니다.

상수

파라미터 t, tau 및 iq를 갖는 상수 함수를 보여주는 수학 방정식으로, 출력은 항상 iq와 같습니다.

τ는 파형의 길이이고 iq는 복소수입니다.

def constant(length, iq)

가우시안

파라미터 t, tau, 시그마, A=1, ZaE=0을 갖는 가우시안 함수를 보여주는 수학 방정식입니다.

τ는 파형의 길이이고, σ는 가우시안의 너비이며 A는 진폭입니다. ZaETrue로 설정하면 가우시안은 파형의 시작과 끝에서 0이 되도록 오프셋 및 재조정되며 최대값에서 A에 도달합니다.

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

DRAG 가우시안

파라미터 t, tau, 시그마, 베타, A=1, ZaE=0을 갖는 DRAG 가우시안 분포에 대한 수학 방정식입니다.

τ는 파형의 길이, σ는 가우시안의 너비, β는 자유 파라미터, A는 진폭입니다. ZaETrue로 설정하면 DRAG(Derivative Removal by Adiabatic Gate) 가우시안은 파형의 시작과 끝에서 0이 되도록 오프셋 및 재조정되며 실수부는 최대값에서 A에 도달합니다. DRAG 파형에 대한 자세한 내용은 백서 약한 비선형 큐비트에서 누출 제거를 위한 단순 펄스를 참조하세요.

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

Erf 제곱

파라미터 t, 길이, 너비, 시그마, A=1, ZaE=0을 갖는 Erf 제곱 분포에 대한 수학 방정식입니다.

여기서 L은 길이이고 W는 파형의 너비이며 σ는 엣지의 상승 및 하강 속도를 정의하고 t1​=(L−W)/2t22=(L+W)/2, A는 진폭입니다. ZaETrue로 설정하면 가우시안은 파형의 시작과 끝에서 0이 되도록 오프셋 및 재조정되며 최대값에서 A에 도달합니다. 다음 방정식은 파형의 재조정된 버전입니다.

파라미터 ZaE=1을 갖는 재조정된 Erf 제곱 분포에 대한 수학 방정식입니다.

여기서 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:

다음을 포함하여 펄스 요소 검증 경계를 설명합니다.

  • 파형(임의 및 사전 빌드됨)의 최대 규모/최대 진폭 값

  • 제공된 중심 주파수의 최대 주파수 대역폭을 Hz 단위로 표시

  • 초 단위의 최소 펄스 길이/지속 시간

  • 초 단위의 최대 펄스 길이/지속 시간

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 } ] } }, ...