Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menjalankan beberapa program
Amazon Braket menawarkan dua pendekatan untuk menjalankan beberapa program kuantum secara efisien: Kumpulan program dan batch tugas kuantum.
Set program adalah cara yang lebih disukai untuk menjalankan beban kerja dengan beberapa program. Mereka memungkinkan Anda untuk mengemas beberapa program ke dalam satu tugas kuantum Amazon Braket. Set program memberikan peningkatan kinerja
Saat ini, IQM dan Rigetti perangkat mendukung set program. Sebelum mengirimkan set program ke QPUs, disarankan untuk menguji pada Simulator Lokal Amazon Braket terlebih dahulu. Untuk memeriksa apakah perangkat mendukung set program, Anda dapat melihat properti perangkat
Contoh berikut menunjukkan bagaimana menjalankan program set.
from math import pi from braket.devices import LocalSimulator from braket.program_sets import ProgramSet from braket.circuits import Circuit program_set = ProgramSet([ Circuit().h(0).cnot(0,1), Circuit().rx(0, pi/4).ry(1, pi/8).cnot(1,0), Circuit().t(0).t(1).cz(0,1).s(0).cz(1,2).s(1).s(2), ]) device = LocalSimulator() result = device.run(program_set, shots=300).result() print(result[0][0].counts) # The result of the first program in the program set
Untuk mempelajari lebih lanjut tentang berbagai cara membangun kumpulan program (Misalnya, membuat set program dari banyak observable atau parameter dengan satu program) dan mengambil hasil set program, lihat bagian set program di Panduan Pengembang Amazon Braket dan folder set program
Pengumpulan tugas kuantum tersedia di setiap perangkat Amazon Braket. Batching sangat berguna untuk tugas kuantum yang Anda jalankan pada simulator sesuai permintaan (SV1, DM1 atauTN1) karena mereka dapat memproses beberapa tugas kuantum secara paralel. Batching memungkinkan Anda untuk meluncurkan tugas kuantum secara paralel. Misalnya, jika Anda ingin membuat perhitungan yang membutuhkan 10 tugas kuantum dan program dalam tugas kuantum tersebut tidak tergantung satu sama lain, disarankan untuk menggunakan pengelompokan tugas. Gunakan batch tugas kuantum saat menjalankan beban kerja dengan beberapa program pada perangkat yang tidak mendukung set program.
Contoh berikut menunjukkan bagaimana menjalankan batch tugas kuantum.
from braket.circuits import Circuit from braket.devices import LocalSimulator bell = Circuit().h(0).cnot(0, 1) circuits = [bell for _ in range(5)] device = LocalSimulator() batch = device.run_batch(circuits, shots=100) print(batch.results()[0].measurement_counts) # The result of the first quantum task in the batch
Untuk informasi lebih spesifik tentang batching, lihat contoh Amazon Braket
Di bagian ini:
Tentang set program dan biaya
Set program secara efisien menjalankan beberapa program kuantum dengan mengemas hingga 100 program atau set parameter ke dalam satu tugas kuantum. Dengan set program, Anda hanya membayar satu biaya per tugas ditambah biaya per tembakan berdasarkan total tembakan di semua program, secara signifikan mengurangi biaya dibandingkan dengan mengirimkan program secara individual. Pendekatan ini sangat bermanfaat untuk beban kerja dengan banyak program dan dengan jumlah tembakan per program yang rendah. Set program saat ini didukung pada IQM dan Rigetti perangkat, serta Simulator Lokal Amazon Braket.
Untuk informasi selengkapnya, lihat bagian Set program untuk langkah-langkah implementasi terperinci, praktik terbaik, dan contoh kode.
Tentang pengelompokan tugas kuantum dan biaya
Beberapa peringatan yang perlu diingat mengenai biaya batching dan penagihan tugas kuantum:
-
Secara default, pengelompokan tugas kuantum mencoba ulang sepanjang waktu atau gagal tugas kuantum 3 kali.
-
Sejumlah tugas kuantum yang berjalan lama, seperti 34 qubits untukSV1, dapat menimbulkan biaya besar. Pastikan untuk memeriksa ulang nilai
run_batchpenetapan dengan hati-hati sebelum Anda memulai serangkaian tugas kuantum. Kami tidak merekomendasikan menggunakan TN1 denganrun_batch. -
TN1dapat menimbulkan biaya untuk tugas fase latihan yang gagal (lihat TN1 deskripsi untuk informasi lebih lanjut). Percobaan ulang otomatis dapat menambah biaya sehingga kami merekomendasikan pengaturan jumlah 'max_retries' pada batching ke 0 saat menggunakan TN1 (lihat Quantum Task Batching
, Line 186).
Pengelompokan tugas kuantum dan PennyLane
Manfaatkan batching saat Anda menggunakan PennyLane di Amazon Braket dengan parallel = True menyetel saat Anda membuat instance perangkat Amazon Braket, seperti yang ditunjukkan pada contoh berikut.
import pennylane as qml # Define the number of wires (qubits) you want to use wires = 2 # For example, using 2 qubits # Define your S3 bucket my_bucket = "amazon-braket-s3-demo-bucket" my_prefix = "pennylane-batch-output" s3_folder = (my_bucket, my_prefix) device = qml.device("braket.aws.qubit", device_arn="arn:aws:braket:::device/quantum-simulator/amazon/sv1", wires=wires, s3_destination_folder=s3_folder, parallel=True)
Untuk informasi lebih lanjut tentang batching dengan PennyLane, lihat Optimalisasi paralel sirkuit kuantum.
Pengelompokan tugas dan sirkuit parametris
Saat mengirimkan batch tugas kuantum yang berisi sirkuit parametris, Anda dapat menyediakan inputs kamus, yang digunakan untuk semua tugas kuantum dalam batch, atau kamus input, dalam hal ini kamus -th dipasangkan dengan tugas i -th, seperti yang ditunjukkan pada contoh berikuti. list
from braket.circuits import Circuit, FreeParameter, Observable from braket.aws import AwsQuantumTaskBatch, AwsDevice # Define your quantum device device = AwsDevice("arn:aws:braket:::device/quantum-simulator/amazon/sv1") # Create the free parameters alpha = FreeParameter('alpha') beta = FreeParameter('beta') # Create two circuits circ_a = Circuit().rx(0, alpha).ry(1, alpha).cnot(0, 2).xx(0, 2, beta) circ_a.variance(observable=Observable.Z(), target=0) circ_b = Circuit().rx(0, alpha).rz(1, alpha).cnot(0, 2).zz(0, 2, beta) circ_b.expectation(observable=Observable.Z(), target=2) # Use the same inputs for both circuits in one batch tasks = device.run_batch([circ_a, circ_b], inputs={'alpha': 0.1, 'beta': 0.2}) # Or provide each task its own set of inputs inputs_list = [{'alpha': 0.3, 'beta': 0.1}, {'alpha': 0.1, 'beta': 0.4}] tasks = device.run_batch([circ_a, circ_b], inputs=inputs_list)
Anda juga dapat menyiapkan daftar kamus input untuk rangkaian parametrik tunggal dan mengirimkannya sebagai kumpulan tugas kuantum. Jika ada kamus masukan N dalam daftar, batch berisi N tugas kuantum. Tugas kuantum i ke--sesuai dengan rangkaian yang dijalankan dengan kamus masukan i ke--th.
from braket.circuits import Circuit, FreeParameter # Create a parametric circuit circ = Circuit().rx(0, FreeParameter('alpha')) # Provide a list of inputs to execute with the circuit inputs_list = [{'alpha': 0.1}, {'alpha': 0.2}, {'alpha': 0.3}] tasks = device.run_batch(circ, inputs=inputs_list, shots=100)