使用 Hello Pulse - Amazon Braket

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Hello Pulse

在本節中,您將了解如何直接在Rigetti裝置上使用脈衝來描述和建構單一 qubit 閘道。將電磁場套用至 qubit 會導致 Rabi 振盪,並在其 0 狀態和 1 狀態之間切換 qubit。使用經過校正的脈衝長度和階段,Rabi 振盪可以計算單一 qubit 閘道。在這裡,我們將決定測量 pi/2 脈衝的最佳脈衝長度,這是用來建置更複雜脈衝序列的基本區塊。

首先,若要建置脈衝序列,請匯入 PulseSequence類別。

from braket.aws import AwsDevice from braket.circuits import FreeParameter from braket.devices import Devices from braket.pulse import PulseSequence, GaussianWaveform import numpy as np

接著,使用 QPU 的 Amazon Resource Name(ARN) 來執行個體化新的 Braket 裝置。下列程式碼區塊使用 Rigetti Ankaa-3。

device = AwsDevice(Devices.Rigetti.Ankaa3)

下列脈衝序列包含兩個元件:播放波形和測量 qubit。脈衝序列通常可以套用至影格。有一些例外狀況,例如障礙和延遲,可套用至 qubit。在建構脈衝序列之前,您必須擷取可用的影格。驅動框架用於套用 Rabi 振盪的脈衝,而讀取框架用於測量 qubit 狀態。此範例使用 qubit 25 的影格。如需影格的詳細資訊,請參閱影格和連接埠的角色

drive_frame = device.frames["Transmon_25_charge_tx"] readout_frame = device.frames["Transmon_25_readout_rx"]

現在,建立將在驅動影格中播放的波形。目標是描述不同脈衝長度的 qubit 行為。您每次都會播放不同長度的波形。請不要每次執行個體化新波形,而是在脈衝序列中使用 Braket 支援的可用參數。您可以使用免費參數建立波形和脈衝序列一次,然後使用不同的輸入值執行相同的脈衝序列。

waveform = GaussianWaveform(FreeParameter("length"), FreeParameter("length") * 0.25, 0.2, False)

最後,將它們放在一個脈衝序列中。在脈衝序列中, 會在驅動影格上play播放指定的波形,並從讀取影格capture_v0測量 狀態。

pulse_sequence = ( PulseSequence() .play(drive_frame, waveform) .capture_v0(readout_frame) )

掃描各種脈衝長度,並將其提交至 QPU。

start_length=12e-9 end_length=2e-7 lengths = np.arange(start_length, end_length, 12e-9) tasks = [ device.run(pulse_sequence, shots=100, inputs={"length": length}) for length in lengths ] probability_of_zero = [ task.result().measurement_counts['0']/N_shots for task in tasks ]

qubit 測量的統計資料會顯示在 0 狀態和 1 狀態之間振盪的 qubit 振盪動態。從測量資料中,您可以擷取 Rabi 頻率,並微調脈衝的長度,以實作特定的 1 qubit 閘道。例如,從下圖中的資料中,週期性約為 154 ns。因此,pi/2 輪換閘道會對應至長度 = 38.5ns 的脈衝序列。

以秒為單位顯示脈衝持續時間人口數量的折線圖。圖形中有兩個峰值和一個波谷。

使用 OpenPulse 的 Hello Pulse

OpenPulse 是一種用於指定一般量子裝置的脈衝層級控制的語言,也是 OpenQASM 3.0 規格的一部分。Amazon Braket 支援使用 OpenQASM 3.0 表示法OpenPulse直接程式設計脈衝。

Braket 使用 OpenPulse做為基礎中繼表示法,在原生指示中表達脈衝。 OpenPulse支援以 defcal(「定義校正」的簡稱) 宣告形式新增指令校正。透過這些宣告,您可以在較低層級的控制文法中指定閘道指令的實作。

您可以使用PulseSequence下列命令檢視 Braket 的 OpenPulse 程式。

print(pulse_sequence.to_ir())

您也可以直接建構 OpenPulse 程式。

from braket.ir.openqasm import Program openpulse_script = """ OPENQASM 3.0; cal { bit[1] psb; waveform my_waveform = gaussian(12.0ns, 3.0ns, 0.2, false); play(Transmon_25_charge_tx, my_waveform); psb[0] = capture_v0(Transmon_25_readout_rx); } """

使用指令碼建立Program物件。然後,將程式提交至 QPU。

from braket.aws import AwsDevice from braket.devices import Devices from braket.ir.openqasm import Program program = Program(source=openpulse_script) device = AwsDevice(Devices.Rigetti.Ankaa3) task = device.run(program, shots=100)