Bagikan melalui


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 menginstal azure-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.

  1. Di Visual Studio Code, pilih Tampilkan Palet Perintah dan pilih Buat: Notebook Jupyter > Baru.

  2. 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.

  3. 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"
    )
    
  4. Klik + Kode untuk menambahkan sel baru di buku catatan dan mengimpor qsharp Python SDK.

    import qsharp
    
  5. Pilih kuantum target pilihan Anda. Dalam contoh ini, Anda menggunakan simulator IonQ sebagai target.

    target = workspace.get_targets("ionq.simulator")
    
  6. Pilih konfigurasi target profil, baik Base, , Adaptive_RIatau Unrestricted.

    qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Adaptive_RI, qsharp.TargetProfile.Unrestricted
    

    Catatan

    Adaptive_RItarget pekerjaan profil saat ini didukung di Quantinuum targets. Untuk informasi selengkapnya, lihat Komputasi kuantum hibrid terintegrasi.

  7. 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;
    }
    
  8. 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 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.

  9. 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.