Mulai cepat: Kirim sirkuit dengan Qiskit ke Azure Quantum
Pelajari cara menggunakan azure-quantum
Python paket untuk mengirimkan sirkuit kuantum Qiskit ke komputasi target kuantum IonQ, Quantinuum, atau Rigetti melalui layanan Azure Quantum. Untuk informasi selengkapnya, lihat Sirkuit kuantum.
Prasyarat
Akun Azure dengan langganan aktif. Membuat akun secara gratis.
Buat ruang kerja Azure Quantum. Untuk informasi selengkapnya, lihat Buat ruang kerja Azure Quantum.
Instal paket terbaru
azure-quantum
Python menggunakan tag [qiskit].Catatan
Sebelum menginstal atau memperbarui paket azure-quantum, hapus instalan semua versi pyqir, pyqir-*, dan qiskit-qir pada komputer Anda untuk menghindari konflik dependensi.
Tip
Jika menggunakan Miniconda atau Anaconda, Anda dapat secara opsional membuat lingkungan baru dengan mengunduh environment.yml dan menjalankan hal berikut:
conda env create -f environment.yml
Ini akan menciptakan lingkungan conda baru yang dapat Anda aktifkan dengan langkah berikut:
conda activate azurequantum
Mulai editor kode favorit Anda atau alat interaktif Python, seperti VS Code, Jupyter, atau iPython.
Catatan
Contoh dalam Mulai Cepat ini menggunakan lingkungan Jupyter Notebook. Dari lingkungan conda Anda, jalankan Jupyter Notebook
.
Memuat impor yang diperlukan
Di Jupyter Notebooks, buat buku catatan baru yang menggunakan Python 3 kernel. Di sel pertama, jalankan kode berikut untuk memuat impor yang diperlukan:
from qiskit import QuantumCircuit
from qiskit.visualization import plot_histogram
from qiskit.tools.monitor import job_monitor
from azure.quantum.qiskit import AzureQuantumProvider
Menyambungkan ke layanan Azure Quantum
Untuk dapat tersambung ke layanan Azure Quantum, program Anda memerlukan ID sumber daya dan lokasi ruang kerja Azure Quantum Anda. Masuk ke akun Azure Anda, https://portal.azure.com, navigasikan ke ruang kerja Azure Quantum Anda, dan salin nilai dari header.
Tempelkan nilai ke konstruktor berikut AzureQuantumProvider
untuk membuat objek provider
yang terhubung ke ruang kerja Azure Quantum Anda.
provider = AzureQuantumProvider(
resource_id="",
location=""
)
Mencantumkan semua backend
Anda sekarang dapat mencetak semua backend komputasi kuantum yang tersedia di ruang kerja Anda:
print("This workspace's targets:")
for backend in provider.backends():
print("- " + backend.name())
This workspace's targets:
- ionq.qpu
- ionq.qpu.aria-1
- ionq.simulator
- microsoft.estimator
- quantinuum.hqs-lt-s1
- quantinuum.hqs-lt-s1-apival
- quantinuum.hqs-lt-s2
- quantinuum.hqs-lt-s2-apival
- quantinuum.hqs-lt-s1-sim
- quantinuum.hqs-lt-s2-sim
- quantinuum.qpu.h1-1
- quantinuum.sim.h1-1sc
- quantinuum.qpu.h1-2
- quantinuum.sim.h1-2sc
- quantinuum.sim.h1-1e
- quantinuum.sim.h1-2e
- rigetti.sim.qvm
- rigetti.qpu.aspen-11
- rigetti.qpu.aspen-m-2
- rigetti.qpu.aspen-m-3
Menjalankan sirkuit sederhana
Pertama, buat sirkuit Qiskit sederhana untuk dijalankan.
# Create a Quantum Circuit acting on the q register
circuit = QuantumCircuit(3, 3)
circuit.name = "Qiskit Sample - 3-qubit GHZ circuit"
circuit.h(0)
circuit.cx(0, 1)
circuit.cx(1, 2)
circuit.measure([0,1,2], [0, 1, 2])
# Print out the circuit
circuit.draw()
┌───┐ ┌─┐
q_0: ┤ H ├──■───────┤M├──────
└───┘┌─┴─┐ └╥┘┌─┐
q_1: ─────┤ X ├──■───╫─┤M├───
└───┘┌─┴─┐ ║ └╥┘┌─┐
q_2: ──────────┤ X ├─╫──╫─┤M├
└───┘ ║ ║ └╥┘
c: 3/════════════════╩══╩══╩═
0 1 2
Untuk mendapatkan hasil kembali dengan cepat, gunakan provider.get_backend
untuk membuat objek Backend
agar dapat terhubung ke backend IonQ Simulator:
simulator_backend = provider.get_backend("ionq.simulator")
Backend IonQ mendukung gerbang dari set gerbang yang ditentukan dan dikompilasi agar dapat berjalan secara optimal di perangkat keras. Jika sirkuit Anda berisi gerbang yang tidak ada dalam daftar ini, Anda harus mengubah rute ke set gerbang yang didukung menggunakan fungsi transpile
yang disediakan oleh Qiskit:
from qiskit import transpile
circuit = transpile(circuit, simulator_backend)
Ini akan mengembalikan objek sirkuit baru dengan gerbang yang terurai akan menjadi gerbang yang didukung oleh backend yang ditentukan.
Anda sekarang dapat menjalankan program melalui layanan Azure Quantum dan mendapatkan hasilnya. Sel berikut mengirimkan pekerjaan yang menjalankan sirkuit dengan 100 bidikan:
job = simulator_backend.run(circuit, shots=100)
job_id = job.id()
print("Job id", job_id)
Job id 00000000-0000-0000-0000-000000000000
Untuk memantau kemajuan pekerjaan, Anda dapat menggunakan Qiskit job_monitor
yang diimpor lebih awal untuk melacak status Pekerjaan. Panggilan ini akan diblokir hingga pekerjaan selesai:
job_monitor(job)
Job Status: job has successfully run
Untuk menunggu sampai pekerjaan selesai dan mengembalikan hasilnya, jalankan:
result = job.result()
Langkah ini akan memunculkan objek qiskit.Result
.
type(result)
qiskit.result.result.Result
print(result)
Result(backend_name='ionq.simulator', backend_version='1', qobj_id='Qiskit Sample - 3-qubit GHZ circuit', job_id='00000000-0000-0000-0000-000000000000', success=True, results=[ExperimentResult(shots=100, success=True, meas_level=2, data=ExperimentResultData(counts={'000': 50, '111': 50}, probabilities={'000': 0.5, '111': 0.5}), header=QobjExperimentHeader(meas_map='[0, 1, 2]', name='Qiskit Sample - 3-qubit GHZ circuit', num_qubits='3', qiskit='True'))])
Karena hasilnya adalah objek asli paket Qiskit, Anda dapat menggunakan Qiskit result.get_counts
dan plot_histogram
untuk memvisualisasikan hasilnya. Untuk memastikan bahwa semua kemungkinan label bitstring diwakili, tambahkan ke counts
.
counts = {format(n, "03b"): 0 for n in range(8)}
counts.update(result.get_counts(circuit))
print(counts)
plot_histogram(counts)
{'000': 50, '001': 0, '010': 0, '011': 0, '100': 0, '101': 0, '110': 0, '111': 50}
Memperkirakan biaya pekerjaan
Sebelum menjalankan pekerjaan di QPU, Anda dapat memperkirakan berapa biaya untuk menjalankannya. Untuk memperkirakan biaya menjalankan pekerjaan di QPU, Anda dapat menggunakan metode estimate_cost
ini:
backend = provider.get_backend("ionq.qpu")
cost = backend.estimate_cost(circuit, shots=1024)
print(f"Estimated cost: {cost.estimated_total}")
Langkah ini akan mencetak perkiraan biaya dalam USD.
Untuk detail harga terbaru, lihat Harga IonQ, atau temukan ruang kerja Anda dan lihat opsi harga di tab "Penyedia" ruang kerja melalui: aka.ms/aq/myworkspaces.
Menjalankan di IonQ QPU
Untuk terhubung ke perangkat keras nyata ( Quantum Processor Unit (QPU)), cukup berikan nama target"ionq.qpu"
ke provider.get_backend
metode :
qpu_backend = provider.get_backend("ionq.qpu")
Kirimkan sirkuit untuk dijalankan di Azure Quantum.
Catatan
Waktu yang diperlukan untuk menjalankan sirkuit di QPU dapat bervariasi bergantung pada waktu antrean saat ini.
Seperti sebelumnya, gunakan job_monitor
untuk melacak status pekerjaan, dan plot_histogram
untuk merencanakan hasilnya.
# Submit the circuit to run on Azure Quantum
qpu_job = qpu_backend.run(circuit, shots=1024)
job_id = qpu_job.id()
print("Job id", job_id)
# Monitor job progress and wait until complete:
job_monitor(qpu_job)
# Get the job results (this method also waits for the Job to complete):
result = qpu_job.result()
print(result)
counts = {format(n, "03b"): 0 for n in range(8)}
counts.update(result.get_counts(circuit))
print(counts)
plot_histogram(counts)
Job id 00000000-0000-0000-0000-000000000000
Job Status: job has successfully run
Result(backend_name='ionq.simulator', backend_version='1', qobj_id='Qiskit Sample - 3-qubit GHZ circuit', job_id='00000000-0000-0000-0000-000000000000', success=True, results=[ExperimentResult(shots=1024, success=True, meas_level=2, data=ExperimentResultData(counts={'0': 505, '1': 6, '2': 1, '3': 1, '4': 1, '5': 10, '6': 11, '7': 488}, probabilities={'0': 0.4932, '1': 0.0059, '2': 0.001, '3': 0.001, '4': 0.001, '5': 0.0098, '6': 0.0117, '7': 0.4766}), header=QobjExperimentHeader(name='Qiskit Sample - 3-qubit GHZ circuit', num_qubits='3', qiskit='True'))])
{'000': 505, '001': 6, '010': 1, '011': 1, '100': 1, '101': 10, '110': 11, '111': 488}
Memuat impor yang diperlukan
Di Jupyter Notebooks, buat buku catatan baru yang menggunakan Python 3 kernel. Di sel pertama, jalankan kode berikut untuk memuat impor yang diperlukan:
from qiskit import QuantumCircuit
from qiskit.visualization import plot_histogram
from qiskit.tools.monitor import job_monitor
from azure.quantum.qiskit import AzureQuantumProvider
Menyambungkan ke layanan Azure Quantum
Untuk dapat tersambung ke layanan Azure Quantum, program Anda memerlukan ID sumber daya dan lokasi ruang kerja Azure Quantum Anda. Masuk ke akun Azure Anda, https://portal.azure.com, navigasikan ke ruang kerja Azure Quantum Anda, dan salin nilai dari header.
Tempelkan nilai ke konstruktor berikut AzureQuantumProvider
untuk membuat objek provider
yang terhubung ke ruang kerja Azure Quantum Anda.
provider = AzureQuantumProvider(
resource_id="",
location=""
)
Mencantumkan semua backend
Catatan
Nama target untuk Pemeriksa Sintaks Quantinuum, Emulator, dan QPU baru-baru ini berubah. Nama yang diperbarui digunakan dalam topik ini. Untuk detailnya, lihat topik penyedia Quantinuum .
Anda sekarang dapat mencetak semua backend komputasi kuantum yang tersedia di ruang kerja Anda:
print("This workspace's targets:")
for backend in provider.backends():
print("- " + backend.name())
This workspace's targets:
- ionq.qpu
- ionq.qpu.aria-1
- ionq.simulator
- microsoft.estimator
- quantinuum.hqs-lt-s1
- quantinuum.hqs-lt-s1-apival
- quantinuum.hqs-lt-s2
- quantinuum.hqs-lt-s2-apival
- quantinuum.hqs-lt-s1-sim
- quantinuum.hqs-lt-s2-sim
- quantinuum.qpu.h1-1
- quantinuum.sim.h1-1sc
- quantinuum.qpu.h1-2
- quantinuum.sim.h1-2sc
- quantinuum.sim.h1-1e
- quantinuum.sim.h1-2e
- rigetti.sim.qvm
- rigetti.qpu.aspen-11
- rigetti.qpu.aspen-m-2
- rigetti.qpu.aspen-m-3
Jalankan pada pemeriksa sintaks
Untuk menguji program sebelum menjalankannya pada perangkat keras, pertama-tama jalankan pada pemeriksa sintaks Quantinuum.
Catatan
Backend pemeriksa sintaks Quantinuum akan selalu mengembalikan 0 pada pengukuran.
# Get Quantinuum's syntax checker backend:
syntax_backend = provider.get_backend("quantinuum.sim.h1-1sc")
# Create a Quantum Circuit acting on the q register
circuit = QuantumCircuit(3, 3)
circuit.name = "Qiskit Sample - 3-qubit GHZ circuit"
circuit.h(0)
circuit.cx(0, 1)
circuit.cx(1, 2)
circuit.measure([0,1,2], [0, 1, 2])
# Print out the circuit
circuit.draw()
┌───┐ ┌─┐
q_0: ┤ H ├──■───────┤M├──────
└───┘┌─┴─┐ └╥┘┌─┐
q_1: ─────┤ X ├──■───╫─┤M├───
└───┘┌─┴─┐ ║ └╥┘┌─┐
q_2: ──────────┤ X ├─╫──╫─┤M├
└───┘ ║ ║ └╥┘
c: 3/════════════════╩══╩══╩═
0 1 2
Anda sekarang dapat menjalankan program melalui layanan Azure Quantum dan mendapatkan hasilnya. Sel berikut mengirimkan pekerjaan yang menjalankan sirkuit dengan 1024 bidikan:
# Submit the circuit to run on Azure Quantum
job = syntax_backend.run(circuit, shots=1024)
job_id = job.id()
print("Job id", job_id)
# Monitor job progress and wait until complete:
job_monitor(job)
# Get the job results (this method also waits for the Job to complete):
result = job.result()
print(result)
counts = {format(n, "03b"): 0 for n in range(8)}
counts.update(result.get_counts(circuit))
print(counts)
plot_histogram(counts)
Job id 00000000-0000-0000-0000-000000000000
Job Status: job has successfully run
Result(backend_name='quantinuum.qpu.h1-1sc', backend_version='1', qobj_id='Qiskit Sample - 3-qubit GHZ circuit', job_id='00000000-0000-0000-0000-000000000000', success=True, results=[ExperimentResult(shots=1024, success=True, meas_level=2, data=ExperimentResultData(counts={'000': 1024}, probabilities={'000': 1.0}), header=QobjExperimentHeader(name='Qiskit Sample - 3-qubit GHZ circuit'))])
{'000': 1024, '001': 0, '010': 0, '011': 0, '100': 0, '101': 0, '110': 0, '111': 0}
Catatan
Meskipun pemeriksa sintaks memastikan bahwa kode Anda akan berjalan dengan sukses pada perangkat keras Quantinuum, ia juga mengembalikan 0 untuk setiap pengukuran kuantum. Untuk pengukuran kuantum yang benar, Anda perlu menjalankan sirkuit Anda pada perangkat keras kuantum.
Memperkirakan biaya pekerjaan
Sebelum menjalankan pekerjaan di QPU, Anda dapat memperkirakan berapa biaya untuk menjalankannya. Untuk memperkirakan biaya menjalankan pekerjaan di QPU, Anda dapat menggunakan metode estimate_cost
ini:
qpu_backend = provider.get_backend("quantinuum.qpu.h1-1")
cost = qpu_backend.estimate_cost(circuit, shots=1024)
print(f"Estimated cost: {cost.estimated_total}")
Ini mencetak perkiraan biaya dalam H-System Quantum Credits (HQC).
Untuk detail harga terbaru, lihat Harga Azure Quantum, atau temukan ruang kerja Anda dan lihat opsi harga di tab Penyedia ruang kerja Anda melalui: aka.ms/aq/myworkspaces.
Menjalankan di Quantinuum QPU
Setelah berhasil berjalan di validator API, Anda dapat menjalankan pekerjaan di salah satu prosesor perangkat keras Quantinuum (Quantum Processor Unit (QPU)).
Catatan
Waktu yang diperlukan untuk menjalankan sirkuit di QPU dapat bervariasi bergantung pada waktu antrean saat ini.
# Get Quantinuum's QPU backend:
qpu_backend = provider.get_backend("quantinuum.qpu.h1-1")
# Submit the circuit to run on Azure Quantum
job = qpu_backend.run(circuit, shots=1024)
job_id = job.id()
print("Job id", job_id)
# Monitor job progress and wait until complete:
job_monitor(job)
Job id 00000000-0000-0000-0000-000000000000
Job Status: job has successfully run
# Get the job results (this method also waits for the Job to complete):
result = job.result()
print(result)
counts = {format(n, "03b"): 0 for n in range(8)}
counts.update(result.get_counts(circuit))
print(counts)
plot_histogram(counts)
Result(backend_name='quantinuum.qpu.h1-1', backend_version='1', qobj_id='Qiskit Sample - 3-qubit GHZ circuit', job_id='00000000-0000-0000-0000-000000000000', success=True, results=[ExperimentResult(shots=1024, success=True, meas_level=2, data=ExperimentResultData(counts={'011': 16, '010': 5, '001': 1, '000': 500, '111': 471, '101': 6, '100': 17, '110': 8}, probabilities={'011': 0.015625, '010': 0.0048828125, '001': 0.0009765625, '000': 0.48828125, '111': 0.4599609375, '101': 0.005859375, '100': 0.0166015625, '110': 0.0078125}), header=QobjExperimentHeader(name='Qiskit Sample - 3-qubit GHZ circuit'))])
{'000': 500, '001': 1, '010': 5, '011': 16, '100': 17, '101': 6, '110': 8, '111': 471}
Memuat impor yang diperlukan
Di Jupyter Notebooks, buat buku catatan baru yang menggunakan Python 3 kernel. Di sel pertama, jalankan kode berikut untuk memuat impor yang diperlukan:
from qiskit import QuantumCircuit
from qiskit.visualization import plot_histogram
from qiskit.tools.monitor import job_monitor
from azure.quantum.qiskit import AzureQuantumProvider
Menyambungkan ke layanan Azure Quantum
Untuk dapat tersambung ke layanan Azure Quantum, program Anda memerlukan ID sumber daya dan lokasi ruang kerja Azure Quantum Anda. Masuk ke akun Azure Anda, https://portal.azure.com, navigasikan ke ruang kerja Azure Quantum Anda, dan salin nilai dari header.
Tempelkan nilai ke konstruktor berikut AzureQuantumProvider
untuk membuat objek provider
yang terhubung ke ruang kerja Azure Quantum Anda.
provider = AzureQuantumProvider(
resource_id="",
location=""
)
Mencantumkan semua backend
Anda sekarang dapat mencetak semua backend komputasi kuantum yang tersedia di ruang kerja Anda:
print("This workspace's targets:")
for backend in provider.backends():
print("- " + backend.name())
This workspace's targets:
- ionq.qpu
- ionq.qpu.aria-1
- ionq.simulator
- microsoft.estimator
- quantinuum.hqs-lt-s1
- quantinuum.hqs-lt-s1-apival
- quantinuum.hqs-lt-s2
- quantinuum.hqs-lt-s2-apival
- quantinuum.hqs-lt-s1-sim
- quantinuum.hqs-lt-s2-sim
- quantinuum.qpu.h1-1
- quantinuum.sim.h1-1sc
- quantinuum.qpu.h1-2
- quantinuum.sim.h1-2sc
- quantinuum.sim.h1-1e
- quantinuum.sim.h1-2e
- rigetti.sim.qvm
- rigetti.qpu.aspen-11
- rigetti.qpu.aspen-m-2
- rigetti.qpu.aspen-m-3
Jalankan pada simulator QVM
Untuk menguji program sebelum menjalankannya pada perangkat keras, pertama-tama jalankan pada simulator Rigetti QVM.
# Get Rigetti's QVM simulator backend:
qvm_backend = provider.get_backend("rigetti.sim.qvm")
# Create a Quantum Circuit acting on the q register
circuit = QuantumCircuit(3, 3)
circuit.name = "Qiskit Sample - 3-qubit GHZ circuit"
circuit.h(0)
circuit.cx(0, 1)
circuit.cx(1, 2)
circuit.measure([0,1,2], [0, 1, 2])
# Print out the circuit
circuit.draw()
┌───┐ ┌─┐
q_0: ┤ H ├──■───────┤M├──────
└───┘┌─┴─┐ └╥┘┌─┐
q_1: ─────┤ X ├──■───╫─┤M├───
└───┘┌─┴─┐ ║ └╥┘┌─┐
q_2: ──────────┤ X ├─╫──╫─┤M├
└───┘ ║ ║ └╥┘
c: 3/════════════════╩══╩══╩═
0 1 2
Anda sekarang dapat menjalankan program melalui layanan Azure Quantum dan mendapatkan hasilnya. Sel berikut mengirimkan pekerjaan yang menjalankan sirkuit dengan 1024 bidikan:
# Submit the circuit to run on Azure Quantum
job = qvm_backend.run(circuit, shots=1024)
job_id = job.id()
print("Job id", job_id)
# Monitor job progress and wait until complete:
job_monitor(job)
# Get the job results (this method also waits for the Job to complete):
result = job.result()
print(result)
counts = {format(n, "03b"): 0 for n in range(8)}
counts.update(result.get_counts(circuit))
print(counts)
plot_histogram(counts)
Job id 00000000-0000-0000-0000-000000000000
Job Status: job has successfully run
Result(backend_name='rigetti.sim.qvm"', backend_version='1', qobj_id='Qiskit Sample - 3-qubit GHZ circuit', job_id='00000000-0000-0000-0000-000000000000', success=True, results=[ExperimentResult(shots=1024, success=True, meas_level=2, data=ExperimentResultData(counts={'000': 1024}, probabilities={'000': 1.0}), header=QobjExperimentHeader(name='Qiskit Sample - 3-qubit GHZ circuit'))])
{'000': 1024, '001': 0, '010': 0, '011': 0, '100': 0, '101': 0, '110': 0, '111': 0}
Jalankan pada Rigetti QPU
Setelah berhasil berjalan pada simulator QVM, Anda dapat menjalankan pekerjaan Anda di salah satu prosesor perangkat keras Rigetti ( Quantum Processor Unit (QPU)).
Catatan
Waktu yang diperlukan untuk menjalankan sirkuit di QPU dapat bervariasi bergantung pada waktu antrean saat ini.
# Get Rigetti's QPU backend:
qpu_backend = provider.get_backend("rigetti.qpu.aspen-m-3")
# Submit the circuit to run on Azure Quantum
job = qpu_backend.run(circuit, shots=500)
job_id = job.id()
print("Job id", job_id)
# Monitor job progress and wait until complete:
job_monitor(job)
Job id 00000000-0000-0000-0000-000000000000
Job Status: job has successfully run
# Get the job results (this method also waits for the Job to complete):
result = job.result()
print(result)
counts = {format(n, "03b"): 0 for n in range(8)}
counts.update(result.get_counts(circuit))
print(counts)
plot_histogram(counts)
Result(backend_name='rigetti.qpu.aspen-m-3', backend_version='1', qobj_id='Qiskit Sample - 3-qubit GHZ circuit', job_id='00000000-0000-0000-0000-000000000000', success=True, results=[ExperimentResult(shots=1024, success=True, meas_level=2, data=ExperimentResultData(counts={'011': 16, '010': 5, '001': 1, '000': 500, '111': 471, '101': 6, '100': 17, '110': 8}, probabilities={'011': 0.015625, '010': 0.0048828125, '001': 0.0009765625, '000': 0.48828125, '111': 0.4599609375, '101': 0.005859375, '100': 0.0166015625, '110': 0.0078125}), header=QobjExperimentHeader(name='Qiskit Sample - 3-qubit GHZ circuit'))])
{'000': 500, '001': 1, '010': 5, '011': 16, '100': 17, '101': 6, '110': 8, '111': 471}
Penting
Mengirimkan beberapa sirkuit pada satu pekerjaan saat ini tidak didukung. Sebagai solusinya, Anda dapat memanggil backend.run
metode untuk mengirimkan setiap sirkuit secara asinkron, lalu mengambil hasil setiap pekerjaan. Contohnya:
jobs = []
for circuit in circuits:
jobs.append(backend.run(circuit, shots=N))
results = []
for job in jobs:
results.append(job.result())