Cara mengirimkan sirkuit dengan Qiskit ke Azure Quantum
Pelajari cara mengirimkan sirkuit kuantum Qiskit menggunakan azure-quantum
Python paket . Anda dapat mengirimkan sirkuit Qiskit ke Azure Quantum menggunakan notebook Azure Quantum, yang memiliki paket bawaan azure-quantum
Python , atau dari komputer lokal Anda.
Untuk informasi selengkapnya, lihat Sirkuit kuantum.
Catatan
Microsoft Quantum Development Kit (Classic QDK) tidak akan lagi didukung setelah 30 Juni 2024. Jika Anda adalah pengembang QDK yang sudah ada, kami sarankan Anda beralih ke Azure Quantum Development Kit (Modern QDK) baru untuk terus mengembangkan solusi kuantum. Untuk informasi selengkapnya, lihat Memigrasikan kode Q# Anda ke QDK Modern.
Prasyarat
Untuk detail penginstalan, lihat Menginstal QDK Modern di Visual Studio Code.
Ruang kerja Azure Quantum di langganan Azure Anda. Untuk membuat ruang kerja, lihat Membuat ruang kerja Azure Quantum.
Lingkungan Python dengan Python dan Pip terinstal.
Visual Studio Code dengan Azure Quantum Development Kit, Python, dan ekstensi Jupyter terinstal.
Paket Azure Quantum
azure-quantum
dengan tag [qiskit], danqsharp
danipykernel
paket.python -m pip install --upgrade azure-quantum[qiskit] qsharp ipykernel
Catatan
Jika kernel
ipykernel
Jupyter Python tidak terdeteksi, Visual Studio Code akan meminta Anda untuk menginstalnya.
Membuat Jupyter Notebook
- Di Visual Studio Code, pilih Tampilkan > palet Perintah dan pilih Buat: Jupyter Notebook Baru.
- Di kanan atas, Visual Studio Code akan mendeteksi dan menampilkan versi Python dan lingkungan virtual Python yang dipilih untuk buku catatan. Jika Anda memiliki beberapa Python lingkungan, Anda mungkin perlu memilih kernel menggunakan pemilih kernel di kanan atas. Jika tidak ada lingkungan yang terdeteksi, lihat Jupyter Notebooks di VISUAL Studio Code untuk informasi penyiapan.
Memuat impor yang diperlukan
Di sel pertama buku catatan Anda, jalankan kode berikut untuk memuat impor yang diperlukan:
import azure.quantum
from qiskit import QuantumCircuit
from qiskit.visualization import plot_histogram
from azure.quantum.qiskit import AzureQuantumProvider
Menyambungkan ke layanan Azure Quantum
Untuk menyambungkan ke layanan Azure Quantum, 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.
Tambahkan sel baru dan gunakan informasi akun Anda untuk membuat Workspace
objek dan AzureQuantumProvider
untuk menyambungkan ke ruang kerja Azure Quantum Anda.
workspace = Workspace(
resource_id = "", # Add the resourceID of your workspace
location = "" # Add the location of your workspace (for example "westus")
)
provider = AzureQuantumProvider(workspace)
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.sim.h1-1e
- rigetti.sim.qvm
- rigetti.qpu.ankaa-2
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
Pilih untuk target menjalankan program Anda
Jalankan di simulator IonQ
Sebelum berjalan pada perangkat keras nyata, mari kita uji sirkuit di simulator. Gunakan get_backend
untuk membuat Backend
objek untuk menyambungkan ke backend Simulator IonQ:
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 perlu menerjemahkan ke dalam yang didukung gateset
menggunakan transpile
fungsi yang disediakan oleh Qiskit:
from qiskit import transpile
circuit = transpile(circuit, simulator_backend)
Fungsi transpile mengembalikan objek sirkuit baru di mana gerbang diurai menjadi gerbang yang didukung pada 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 menunggu sampai pekerjaan selesai dan mengembalikan hasilnya, jalankan:
result = job.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 yang harus dijalankan. 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 ( Unit Prosesor Kuantum (QPU)), cukup berikan nama target"ionq.qpu"
ke get_backend
metode :
qpu_backend = provider.get_backend("ionq.qpu")
Kirim sirkuit untuk dijalankan di Azure Quantum, dapatkan hasilnya, dan jalankan plot_histogram
untuk memplot hasilnya.
Catatan
Waktu yang diperlukan untuk menjalankan sirkuit di QPU dapat bervariasi bergantung pada waktu antrean saat ini.
# Submit the circuit to run on Azure Quantum
job = qpu_backend.run(circuit, shots=1024)
job_id = job.id()
print("Job id", job_id)
# Get the job results (this method 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='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}
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 dari setiap pekerjaan. Contohnya:
jobs = []
for circuit in circuits:
jobs.append(backend.run(circuit, shots=N))
results = []
for job in jobs:
results.append(job.result())
Prasyarat
- Akun Azure dengan langganan aktif. Jika Anda tidak memiliki akun Azure, daftarkan secara gratis dan daftar untuk langganan prabayar.
- Ruang kerja Azure Quantum. Untuk informasi selengkapnya, lihat Buat ruang kerja Azure Quantum.
Membuat buku catatan baru di ruang kerja Anda
- Masuk ke portal Azure lalu pilih ruang kerja yang Anda buat di langkah sebelumnya.
- Di panel kiri, pilih Notebook.
- Klik Notebooks Saya lalu klik Tambahkan Baru.
- Ketik nama untuk file, misalnya Qiskit.ipynb, lalu klik Buat file.
Saat buku catatan baru Anda terbuka, buku catatan secara otomatis membuat kode untuk sel pertama, berdasarkan informasi langganan dan ruang kerja Anda.
from azure.quantum import Workspace
workspace = Workspace (
resource_id = "", # Add your resource_id
location = "" # Add your workspace location (for example, "westus")
)
Catatan
Kecuali dinyatakan lain, Anda harus menjalankan setiap sel agar Anda membuatnya untuk menghindari masalah kompilasi.
Klik ikon segitiga "putar" di sebelah kiri sel untuk menjalankan kode.
Muat impor yang diperlukan
Pertama, Anda perlu mengimpor beberapa modul tambahan.
Klik + Kode untuk menambahkan sel baru, lalu tambahkan dan jalankan kode berikut:
from qiskit import QuantumCircuit
from qiskit.visualization import plot_histogram
from azure.quantum.qiskit import AzureQuantumProvider
Menyambungkan ke layanan Azure Quantum
Selanjutnya, buat AzureQuantumProvider
objek menggunakan Workspace
objek dari sel sebelumnya untuk menyambungkan ke ruang kerja Azure Quantum Anda. Tambahkan sel baru dengan kode berikut:
provider = AzureQuantumProvider(workspace)
Definisikan sirkuit sederhana
Di sel baru, buat objek circuit
. Contoh ini adalah generator bit acak kuantum sederhana. Tambahkan kode berikut untuk menentukan dan menampilkan sirkuit:
# 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
Cantumkan semua targets
Anda sekarang dapat menampilkan semua komputasi targetskuantum, atau backend, yang tersedia di ruang kerja Anda. Tambahkan sel baru dan jalankan baris berikut:
print("This workspace's targets:")
for backend in provider.backends():
print("- " + backend.name())
This workspace's targets:
- ionq.qpu
- ionq.simulator
- ionq.qpu.aria-1
- microsoft.estimator
- quantinuum.qpu.h1-1
- quantinuum.sim.h1-1sc
- quantinuum.sim.h1-1e
- rigetti.sim.qvm
- rigetti.qpu.ankaa-2
target Pilih untuk menjalankan program Anda
Untuk memeriksa kode Anda sebelum menjalankannya di perangkat keras kuantum yang sebenarnya, Anda dapat menggunakan simulator kuantum IonQ, ionq.simulator
.
Tambahkan sel baru dan buat objek untuk mewakili simulator targetkuantum IonQ :
# Get IonQ quantum simulator target:
simulator_backend = provider.get_backend("ionq.simulator")
Jalankan di simulator IonQ
Untuk menjalankan sirkuit Anda pada simulator, tambahkan kode berikut. Contoh ini menggunakan run
metode target untuk mengirimkan pekerjaan Anda, lalu memantau status pekerjaan.
# Submit the circuit to run on Azure Quantum
job = simulator_backend.run(circuit, shots=100)
job_id = job.id()
print("Job id", job_id)
Ketika pekerjaan berhasil berjalan, dapatkan hasil pekerjaan dan tampilkan:
# Get the job results:
result = job.result()
print(result)
Result(backend_name='ionq.simulator', backend_version='1', qobj_id='Qiskit Sample - 3-qubit GHZ circuit', job_id='7d909574-98d4-11ec-b382-00155d957f5d', success=True, results=[ExperimentResult(shots=100, success=True, meas_level=2, data=ExperimentResultData(counts=defaultdict(<class 'int'>, {'000': 50, '111': 50}), probabilities=defaultdict(<class 'int'>, {'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 jenis result
ini adalah objek native ke paket Qiskit, Anda dapat menggunakan result.get_counts
dan plot_histogram
Qiskit 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 pada perangkat keras kuantum aktual, atau unit pemrosesan kuantum (QPU), Anda dapat memperkirakan berapa biayanya untuk dijalankan.
Pertama, dapatkan daftar penyedia yang tersedia lagi:
print("This workspace's targets:")
for backend in provider.backends():
print("- " + backend.name())
This workspace's targets:
- ionq.qpu
- ionq.simulator
- ionq.qpu.aria-1
- microsoft.estimator
- quantinuum.qpu.h1-1
- quantinuum.sim.h1-1sc
- quantinuum.sim.h1-1e
- rigetti.sim.qvm
- rigetti.qpu.ankaa-2
Selanjutnya, buat objek untuk mewakili komputer kuantum IonQ:
qpu_backend = provider.get_backend("ionq.qpu")
Untuk memperkirakan biaya menjalankan pekerjaan di QPU, tambahkan dan jalankan sel baru menggunakan estimate_cost
metode target:
cost = qpu_backend.estimate_cost(circuit, shots=100)
print(f"Estimated cost: {cost.estimated_total}")
Ini menampilkan perkiraan biaya dalam USD.
Untuk detail harga terbaru, lihat Harga IonQ, atau temukan ruang kerja Anda dan lihat opsi harga di panel Penyedia ruang kerja Anda.
Jalankan di IonQ QPU
Setelah Anda berhasil menjalankan pekerjaan Anda pada simulator IonQ dan memperkirakan biaya QPU, saatnya untuk menjalankan sirkuit Anda pada perangkat keras.
Catatan
Waktu yang diperlukan untuk menjalankan sirkuit di QPU dapat bervariasi bergantung pada waktu antrean saat ini. Anda dapat melihat waktu antrean rata-rata untuk dengan target memilih bilah Penyedia ruang kerja Anda.
Gunakan metode dan operasi run
yang sama seperti yang telah Anda gunakan sebelumnya dengan API Validator untuk mengirimkan dan memantau pekerjaan Anda:
# Submit the circuit to run on Azure Quantum
job = qpu_backend.run(circuit, shots=1024)
job_id = job.id()
print("Job id", job_id)
Setelah pekerjaan selesai, dapatkan hasil pekerjaan seperti sebelumnya dan tampilkan dalam bagan:
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 910b5ac8-98cd-11ec-b3ba-00155d5528cf
Job Status: job has successfully run
Result(backend_name='ionq.simulator', backend_version='1', qobj_id='Qiskit Sample - 3-qubit GHZ circuit', job_id='Job id 54e8c740-98d9-11ec-b382-00155d957f5d', 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}
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())
Langkah berikutnya
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk