Bekerja dengan Hello Pulse - Amazon Braket

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Bekerja dengan Hello Pulse

Pada bagian ini, Anda akan belajar bagaimana mengkarakterisasi dan membangun gerbang qubit tunggal secara langsung menggunakan pulsa pada Rigetti perangkat. Menerapkan medan elektromagnetik ke qubit mengarah ke osilasi Rabi, mengalihkan qubit antara keadaan 0 dan 1. Dengan panjang dan fase pulsa yang dikalibrasi, osilasi Rabi dapat menghitung gerbang qubit tunggal. Di sini, kita akan menentukan panjang pulsa optimal untuk mengukur pulsa pi/2, blok dasar yang digunakan untuk membangun urutan pulsa yang lebih kompleks.

Pertama, untuk membangun urutan pulsa, impor PulseSequence kelas.

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

Selanjutnya, buat instance perangkat Braket baru menggunakan Amazon Resource Name (ARN) dari QPU. Blok kode berikut menggunakan Rigetti Ankaa-3.

device = AwsDevice(Devices.Rigetti.Ankaa3)

Urutan pulsa berikut mencakup dua komponen: Memainkan bentuk gelombang dan mengukur qubit. Urutan pulsa biasanya dapat diterapkan pada bingkai. Dengan beberapa pengecualian seperti penghalang dan penundaan, yang dapat diterapkan pada qubit. Sebelum membangun urutan pulsa Anda harus mengambil frame yang tersedia. Bingkai drive digunakan untuk menerapkan pulsa untuk osilasi Rabi, dan bingkai pembacaan untuk mengukur status qubit. Contoh ini, menggunakan frame qubit 25. Untuk informasi selengkapnya tentang frame, lihat Peran frame dan port.

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

Sekarang, buat bentuk gelombang yang akan diputar di bingkai drive. Tujuannya adalah untuk mengkarakterisasi perilaku qubit untuk panjang pulsa yang berbeda. Anda akan memainkan bentuk gelombang dengan panjang yang berbeda setiap kali. Alih-alih membuat instance bentuk gelombang baru setiap kali, gunakan parameter bebas yang didukung Rem dalam urutan pulsa. Anda dapat membuat bentuk gelombang dan urutan pulsa sekali dengan parameter bebas, dan kemudian menjalankan urutan pulsa yang sama dengan nilai input yang berbeda.

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

Akhirnya, satukan mereka sebagai urutan pulsa. Dalam urutan pulsa, play putar bentuk gelombang yang ditentukan pada bingkai drive, dan capture_v0 mengukur status dari bingkai pembacaan.

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

Pindai berbagai panjang pulsa dan kirimkan ke 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 ]

Statistik pengukuran qubit menunjukkan dinamika osilasi qubit yang berosilasi antara keadaan 0 dan keadaan 1. Dari data pengukuran, Anda dapat mengekstrak frekuensi Rabi dan menyempurnakan panjang pulsa untuk mengimplementasikan gerbang 1-qubit tertentu. Misalnya, dari data pada gambar di bawah ini, periodisitasnya sekitar 154 ns. Jadi gerbang rotasi pi/2 akan sesuai dengan urutan pulsa dengan panjang = 38.5ns.

Grafik garis yang menunjukkan jumlah populasi dengan durasi pulsa dalam hitungan detik. Ada dua puncak dan satu palung dalam grafik.

Halo Pulse menggunakan OpenPulse

OpenPulseadalah bahasa untuk menentukan kontrol tingkat pulsa dari perangkat kuantum umum dan merupakan bagian dari spesifikasi OpenQASM 3.0. Amazon Braket mendukung OpenPulse untuk pemrograman pulsa langsung menggunakan representasi OpenQASM 3.0.

Braket menggunakan OpenPulse sebagai representasi perantara yang mendasari untuk mengekspresikan pulsa dalam instruksi asli. OpenPulse mendukung penambahan kalibrasi instruksi dalam bentuk deklarasi defcal (singkatan dari “define calibration”). Dengan deklarasi ini, Anda dapat menentukan implementasi instruksi gerbang dalam tata bahasa kontrol tingkat rendah.

Anda dapat melihat OpenPulse program Braket PulseSequence menggunakan perintah berikut.

print(pulse_sequence.to_ir())

Anda juga dapat membuat OpenPulse program secara langsung.

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); } """

Buat Program objek dengan skrip Anda. Kemudian, kirimkan program ke 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)