Mulai menggunakan sesi
Sesi adalah fitur utama komputasi kuantum hibrid yang memungkinkan Anda mengelompokkan beberapa pekerjaan komputasi kuantum bersama-sama.
Artikel ini menjelaskan arsitektur sesi dalam komputasi kuantum hibrid dan cara membuat sesi baru.
Prasyarat
Untuk membuat sesi, Anda memerlukan prasyarat berikut:
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.
Lingkungan Python dengan Python dan Pip terinstal.
Paket Azure Quantum
azure-quantum
. Jika Anda ingin menggunakan Qiskit atau Cirq, Anda perlu menginstalazure-quantum
paket dengan tag [qiskit] atau [cirq].pip install --upgrade azure-quantum[qiskit]
Apa itu sesi?
Sesi adalah pengelompokan logis dari satu atau beberapa pekerjaan yang dikirimkan ke satu target. Setiap sesi memiliki ID unik yang dilampirkan ke setiap pekerjaan dalam sesi tersebut.
Dalam sesi, sumber daya komputasi klien dapat dipindahkan ke cloud, menghasilkan latensi yang lebih rendah dan kemampuan untuk mengulangi eksekusi sirkuit kuantum dengan parameter yang berbeda. Pekerjaan dapat dikelompokkan secara logis ke dalam satu sesi, dan pekerjaan dalam sesi tersebut dapat diprioritaskan daripada pekerjaan non-sesi. Meskipun status qubit tidak bertahan di antara pekerjaan, sesi memungkinkan waktu antrean yang lebih singkat untuk pekerjaan dan masalah yang berjalan lebih lama.
Sesi memungkinkan Anda mengatur beberapa pekerjaan komputasi kuantum dengan kemampuan untuk menjalankan kode klasik di antara pekerjaan kuantum. Anda akan dapat menjalankan algoritma kompleks untuk mengatur dan melacak pekerjaan komputasi kuantum individual Anda dengan lebih baik.
Skenario pengguna utama di mana Anda mungkin ingin menggabungkan pekerjaan dalam sesi adalah algoritma kuantum berparameter di mana output dari satu pekerjaan komputasi kuantum menginformasikan parameter pekerjaan komputasi kuantum berikutnya. Contoh paling umum dari jenis algoritma ini adalah Variational Quantum Eigensolvers (VQE) dan Quantum Approximate Optimization Algorithms (QAOA).
Perangkat keras yang didukung
Sesi didukung pada semua penyedia perangkat keras komputasi kuantum. Dalam beberapa kasus, pekerjaan yang dikirimkan dalam sesi diprioritaskan dalam antrean itu target. Untuk informasi selengkapnya, lihat Target perilaku.
Cara membuat sesi
Untuk membuat sesi, ikuti langkah-langkah berikut:
Contoh ini memperlihatkan cara membuat sesi dengan Q# kode sebaris menggunakan Jupyter Notebook di Visual Studio Code. Anda juga dapat membuat sesi menggunakan program Python yang memanggil program yang berdekatan Q# .
Catatan
Sesi dikelola dengan Python, bahkan saat menjalankan Q# kode sebaris.
Di Visual Studio Code, pilih Tampilkan Palet Perintah dan pilih Buat: Notebook Jupyter > Baru.
Di kanan atas, VISUAL Code akan mendeteksi dan menampilkan versi Python dan lingkungan Python virtual yang dipilih untuk notebook. Jika Anda memiliki beberapa lingkungan Python, Anda mungkin perlu memilih kernel menggunakan pemilih kernel di kanan atas. Jika tidak ada lingkungan yang terdeteksi, lihat Jupyter Notebooks di VISUAL Code untuk informasi penyiapan.
Di sel pertama buku catatan, jalankan
import azure.quantum workspace = azure.quantum.Workspace( resource_id = "", # add your resource ID location = "", # add your location, for example "westus" )
Klik + Kode untuk menambahkan sel baru di buku catatan dan mengimpor
qsharp
Python SDK.import qsharp
Pilih kuantum target pilihan Anda. Dalam contoh ini, Anda menggunakan simulator IonQ sebagai target.
target = workspace.get_targets("ionq.simulator")
Pilih konfigurasi target profil, baik
Base
, ,Adaptive_RI
atauUnrestricted
.qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Adaptive_RI, qsharp.TargetProfile.Unrestricted
Catatan
Adaptive_RI
target pekerjaan profil saat ini didukung di Quantinuum targets. Untuk informasi selengkapnya, lihat Komputasi kuantum hibrid terintegrasi.Tulis program Anda Q# . Misalnya, program berikut Q# menghasilkan bit acak. Untuk mengilustrasikan penggunaan argumen input, program ini mengambil bilangan bulat,
n
, dan array sudut,angle
, sebagai input.%%qsharp import Std.Measurement.*; import Std.Arrays.*; operation GenerateRandomBits(n: Int, angle: Double[]) : Result[] { use qubits = Qubit[n]; // n parameter as the size of the qubit array for q in qubits { H(q); } R(PauliZ, angle[0], qubits[0]); // arrays as entry-points parameters R(PauliZ, angle[1], qubits[1]); let results = MeasureEachZ(qubits); ResetAll(qubits); return results; }
Selanjutnya, Anda membuat sesi. Katakanlah Anda ingin menjalankan
GenerateRandomBit
operasi tiga kali, jadi Anda menggunakantarget.submit
untuk mengirimkan Q# operasi dengantarget
data dan Anda mengulangi kode tiga kali - dalam skenario dunia nyata, Anda mungkin ingin mengirimkan program yang berbeda alih-alih kode yang sama.angle = [0.0, 0.0] with target.open_session(name="Q# session of three jobs") as session: target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 1", shots=100) # First job submission angle[0] += 1 target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 2", shots=100) # Second job submission angle[1] += 1 target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 3", shots=100) # Third job submission session_jobs = session.list_jobs() [session_job.details.name for session_job in session_jobs]
Penting
Saat meneruskan argumen sebagai parameter ke pekerjaan, argumen tersebut Q# diformat ke dalam ekspresi saat memanggil
qsharp.compile
. Ini berarti Bahwa Anda perlu berhati-hati untuk memformat argumen Anda sebagai Q# objek. Dalam contoh ini, karena array di Python sudah dicetak sebagai [item0, item1, ...], argumen input cocok dengan Q# pemformatan. Untuk struktur data Python lainnya, Anda mungkin memerlukan lebih banyak penanganan untuk mendapatkan nilai string yang Q# disisipkan ke dalam dengan cara yang kompatibel.Setelah membuat sesi, Anda dapat menggunakan
workspace.list_session_jobs
untuk mengambil daftar semua pekerjaan dalam sesi. Untuk informasi selengkapnya, lihat Cara mengelola sesi.
Target perilaku
Setiap penyedia perangkat keras kuantum mendefinisikan heuristik mereka sendiri untuk mengelola prioritas pekerjaan dalam sesi.
Quantinuum
Jika Anda memilih untuk mengirimkan pekerjaan dalam sesi ke Quantinuum target, sesi Anda akan memiliki akses eksklusif ke perangkat keras selama Anda mengantre pekerjaan dalam satu menit dari satu sama lain. Setelah itu, pekerjaan Anda akan diterima dan ditangani dengan logika antrean dan prioritas standar.