Memulai sesi

Sesi adalah fitur utama komputasi kuantum hibrid. Sesi adalah pengelompokan logis dari satu atau lebih pekerjaan yang Anda serahkan ke satu target. Setiap sesi memiliki ID unik yang dilampirkan ke setiap pekerjaan dalam sesi tersebut. Sesi berguna ketika Anda ingin menjalankan beberapa pekerjaan komputasi kuantum secara berurutan, dan menjalankan kode klasik antara pekerjaan kuantum.

Catatan

Sesi mengelompokkan pekerjaan untuk pengiriman dari Azure Quantum ke penyedia, tetapi pekerjaan dalam sesi tidak di-batch di sisi penyedia.

Prasyarat

Untuk membuat sesi, Anda memerlukan prasyarat berikut:

Apa itu sesi?

Dalam sesi, Anda dapat memindahkan sumber daya komputasi klien ke cloud untuk latensi yang lebih rendah dan kemampuan untuk menjalankan program kuantum Anda beberapa kali dengan parameter yang berbeda. Anda dapat mengelompokkan pekerjaan secara logis ke dalam satu sesi, dan Anda dapat memprioritaskan pekerjaan dalam sesi tersebut melalui pekerjaan non-sesi. Status qubit tidak bertahan di antara pekerjaan, tetapi pekerjaan dalam sesi memiliki waktu antrean yang lebih pendek. Waktu antrean yang lebih pendek memungkinkan Anda menjalankan algoritma kompleks untuk mengatur dan melacak pekerjaan komputasi kuantum individual Anda dengan lebih baik.

Sesi berguna untuk algoritma kuantum berparameter, di mana output dari satu pekerjaan komputasi kuantum digunakan untuk menentukan parameter input untuk 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 Perilaku target.

Cara membuat sesi

Untuk membuat sesi, ikuti langkah-langkah berikut:

Contoh ini memperlihatkan cara membuat sesi dengan Q# kode sebaris dalam Jupyter buku catatan di VS Code.

Catatan

Sesi dikelola dengan Python, bahkan saat menjalankan Q# kode sebaris.

  1. Di VS Code, buka menu Tampilan dan pilih Palet Perintah.

  2. Masukkan atau pilih Buat: Baru Jupyter Notebook.

  3. Di kanan atas, VS 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 Notebook di dalam VS Code untuk informasi pengaturan.

  4. Di sel pertama buku catatan, jalankan kode berikut:

    from qdk.azure import Workspace
    
    workspace = Workspace(resource_id="") # add your resource ID
    
  5. Tambahkan sel baru di buku catatan dan impor qsharpPython paket:

    from qdk import qsharp
    
  6. Pilih kuantum targetAnda. Dalam contoh ini, target adalah simulator IonQ.

    target = workspace.get_targets("ionq.simulator")
    
  7. Pilih konfigurasi target profil, BaseAdaptive_RI, atau Unrestricted.

    qsharp.init(target_profile=qsharp.TargetProfile.Base)
    

    Catatan

    Adaptive_RI target pekerjaan yang berkaitan dengan profil saat ini didukung di Quantinuum targets. Untuk informasi selengkapnya, lihat Komputasi kuantum hibrid terintegrasi.

  8. 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;
    }
    
  9. Selanjutnya, Anda membuat sesi. Katakanlah Anda ingin menjalankan GenerateRandomBit operasi tiga kali, jadi Anda menggunakan target.submit untuk mengirimkan Q# operasi dengan target 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 Anda meneruskan argumen sebagai parameter ke tugas, argumen tersebut diformat ke dalam ekspresi Q# ketika qsharp.compile dipanggil. Ini berarti Anda perlu memformat argumen Anda sebagai Q# objek. Dalam contoh ini, karena array dalam Python sudah dicetak sebagai [item0, item1, ...], argumen input sesuai dengan pemformatan Q#. Untuk struktur data lainnya, Anda mungkin memerlukan penanganan lebih lanjut untuk memasukkan nilai string ke dalam Python dengan cara yang kompatibel.

  10. Setelah membuat sesi, Anda dapat menggunakan workspace.list_session_jobs untuk mengambil daftar semua pekerjaan dalam sesi. Untuk informasi selengkapnya, lihat Cara mengelola sesi.

Perilaku target

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, maka sesi Anda memiliki akses eksklusif ke perangkat keras selama Anda mengantre pekerjaan dalam satu menit dari satu sama lain. Setelah itu, pekerjaan Anda diterima dan ditangani dengan logika antrean dan prioritas standar.