Memigrasikan kode Anda Q# ke QDK Modern

Azure Quantum Development Kit (Modern QDK), dirilis pada Januari 2024, adalah kit pengembangan default Q# yang digunakan dalam Visual Studio Code dan portal Azure Quantum. Untuk informasi selengkapnya tentang fitur dan peningkatan baru, lihat Apa yang baru di QDK Modern.

Jika Anda memiliki program yang ada yang ditulis untuk Microsoft Quantum Development Kit (Classic QDK), setidaknya beberapa elemen perlu dimodifikasi untuk API, proses, dan alat baru. Selain itu, ada peningkatan Q# sintaks bahasa untuk membuat pengkodian lebih mudah dan lebih fleksibel.

Artikel ini memandu Anda melalui skenario paling umum untuk menyiapkan dan menjalankan kode Anda di QDK baru. S

Menghentikan Penggunaan Visual Studio sebagai platform pengembangan

QDK Modern menghapus dukungan untuk Visual Studio dan pustaka kuantum .NET terkait. Jika Anda memiliki proyek Visual Studio yang ada, sangat disarankan untuk memigrasikannya ke QDK Modern menggunakan panduan dalam artikel ini. Untuk terus menggunakan QDK Klasik untuk proyek Anda, lihat Lanjutkan bekerja di QDK Klasik.

Mengimpor modul dari Q# file

Untuk program Python yang menggunakan Q# file (*.qs) untuk mengimpor Q# fungsi dan operasi sebagai modul, sintaks impor telah berubah.

Di QDK Klasik, untuk mengimpor dan menjalankan Random() operasi dari file source.qs:

namespace Sample {
    operation Random() : Result {
        use q = Qubit();
        H(q);
        let result = M(q);
        Reset(q);
        return result
    }
}

Anda akan menggunakan sintaks impor Python standar:

from Sample import Random

print(Random.simulate())

dengan persyaratan bahwa source.qs dan program Python Anda berada di folder yang sama.

Untuk mengimpor operasi yang sama dengan QDK Modern, Anda menentukan Q# proyek, yang memungkinkan Anda mengatur file dan pustaka sumber dengan cara yang lebih efisien dan logis. Untuk langkah-langkah terperinci untuk menentukan Q# proyek, lihat Bekerja dengan Q# proyek.

Setelah Anda menyiapkan folder proyek dan membuat file manifes sederhana, gunakan qsharp.init untuk menunjuk ke akar proyek Anda dan qsharp.eval untuk mengakses file sumber dan mengimpor <namespace>.<>operation_name.

qsharp.init(project_root = '/MyProjectFolder')
print(qsharp.eval("Sample.Random()"))

Jika operasi atau fungsi yang Anda impor mengambil nilai input, ini juga dapat diteruskan:

print(qsharp.eval("Sample.Random(4)"))

Menjalankan program Anda di simulator lokal

Sebagian besar simulator dalam memori dari QDK Klasik tidak digunakan lagi, meninggalkan simulator jarang sebagai simulator lokal default di VISUAL Code dan portal Azure Quantum.

Simulator yang tidak digunakan lagi:

  • Simulator keadaan penuh
  • Simulator kebisingan
  • Simulator pelacakan
  • Simulator Toffoli

Untuk menjalankan simulator jarang default:

Skenario Metode
Q# Dalam program di Visual Studio Code Pilih Jalankan Q# file
Di sel buku catatan Python result=qsharp.eval("EntryPointOperation()")
atau
result=qsharp.run("EntryPointOperation()", shots=##)
%%qsharp Dalam sel buku catatan EntryPointOperation()

Rilis qubit yang diberlakukan

QDK Modern memberlakukan persyaratan bahwa qubit berada di tanah atau status |0⟩ sebelum dirilis di akhir cakupannya. Hal ini untuk mencegah qubit mungkin digunakan kembali dalam keadaan tak terduga saat menjalankan program pada perangkat keras kuantum.

Misalnya, kode berikut memicu kesalahan runtime:

operation MyOperation() : Result {
    use q = Qubit();
        X(q);
        return M(q);
}

dan perlu dimodifikasi untuk mengatur ulang kubit sebelum mengembalikan pengukuran:

operation MyOperation() : Result {
    use q = Qubit();
        X(q);
        let r = M(q);
        Reset(q);
        return r;
}

atau gunakan operasi yang mengatur ulang qubit sebagai bagian dari pengambilan pengukuran:

open Microsoft.Quantum.Measurement;
operation MyOperation() : Result {
    use q = Qubit();
    X(q);
    return MResetZ(q);
}

Mengonfigurasi profil Dasar

Tidak seperti simulator lokal, target perangkat keras Azure Quantum belum mendukung kemampuan penuh yang diperlukan untuk menjalankan semua Q# program. Jika Anda mengirimkan pekerjaan ke Azure Quantum, sebelum mengkompilasi program, Anda perlu mengatur profil target untuk mengetahui Q# kemampuan mana yang didukung perangkat keras target Anda. Saat ini, hanya program yang mematuhi Profil Dasar QIR yang dapat dikirimkan ke Azure Quantum. Perhatikan bahwa untuk menjalankan kode pada simulator lokal, konfigurasi profil apa pun dapat digunakan.

Visual Studio Code

Visual Studio Code menampilkan mode profil di bilah status di bagian bawah untuk Q# file, baik QIR: Base atau Unrestricted. Mode tidak terbatas paling berguna untuk menjalankan kode pada simulator. Jika Anda mengirimkan pekerjaan ke Azure Quantum dan mendapatkan peringatan bahwa program tidak diatur untuk profil Dasar, pilih Tidak Dibatasi di bilah status dan pilih QIR: Dasar sebagai profil.

Notebook Python dan Jupyter

Untuk mengatur profil Dasar, gunakan qsharp.init fungsi :

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

Catatan

  • Fungsi ini qsharp.init menggantikan perintah ajaib %azure.target-capability .
  • Jika Anda mengatur ulang profil target, Anda harus menjalankan Q# ulang sel atau impor sebelum mengkompilasi.

Mengkompilasi Q# program untuk dikirimkan ke Azure Quantum

Dengan Modern QDK, program Anda perlu dikompilasi sebelum mengirimkan pekerjaan ke Azure Quantum.

Catatan

Untuk skenario langkah demi langkah untuk mengirimkan pekerjaan ke Azure Quantum menggunakan Q# program, program Python, atau Jupyter Notebooks, lihat Mengirimkan pekerjaan ke Azure Quantum.

Visual Studio Code

Q#program di Visual Studio Code mengkompilasi program Anda secara otomatis saat Anda memilih target penyedia di ruang kerja Anda dan pilih Kirim program saat iniQ#. Jika ada kesalahan pengkompilasi, Anda dapat men-debug file dengan menekan F5. Untuk informasi selengkapnya, lihat Mengirimkan pekerjaan ke Azure Quantum.

Notebook Python dan Jupyter

Untuk program Jupyter Notebook dan Python yang menggunakan Workspace kelas untuk menyambungkan ke Azure Quantum, Anda perlu mengompilasi program Anda lalu mengirimkannya ke Azure Quantum dengan pengiriman pekerjaan.

  1. Jalankan Q# kode yang Anda impor atau tulis dalam sel %%qsharp .

  2. qsharp.compile Gunakan fungsi , melewati Q# operasi atau fungsi untuk digunakan sebagai titik masuk. Misalnya, untuk program ini Q# :

    operation MyOperation() : Result {
        use q = Qubit();
            H(q);
            let r = M(q);
            Reset(q);
            return r;
    }
    

    Anda akan melewati MyOperation() operasi sebagai:

    MyProgram = qsharp.compile("MyOperation()")
    
  3. Hasil yang dikompilasi MyProgram kemudian diteruskan ke Azure Quantum dengan target.submit fungsi :

    job = target.submit(MyProgram, "job name", ...)
    

Azure CLI

Anda juga dapat menggunakan Azure CLI untuk menyambungkan dan mengirimkan Python dan Q# pekerjaan ke Azure Quantum. Untuk skenario ini, Anda harus menyimpan program yang dikompilasi sebagai file teks. Untuk prosedur langkah demi langkah, lihat Mengirimkan pekerjaan ke Azure Quantum.

Menyambungkan ke Azure Quantum

Untuk Q# program di Visual Studio Code, Anda dapat terhubung ke ruang kerja Azure Quantum dan mengirimkan semua pekerjaan dalam Visual Studio Code.

Untuk program Python dan Jupyter Notebook, metode koneksi default adalah azure.quantum.Workspace kelas , yang menggantikan perintah ajaib IQ#%azure dan modul yang qsharp.azure tidak digunakan lagi. Untuk contoh semua perintah ini, lihat Mengirimkan pekerjaan ke Azure Quantum.

Perintah ajaib atau API yang tidak digunakan lagi Penggunaan
%azure.connect
qsharp.azure.connect()
wksp = azure.quantum.Workspace(
resource_id=""",
location="")
%azure.target
qsharp.azure.target()
target = wksp.get_targets("<target_name>")
%azure.execute
qsharp.azure.execute()
job = target.submit(...) Tidak memblokir I/O
%azure.submit
qsharp.azure.submit()
job = target.submit(<QirInputData>, <jobName>, input_params={"count: <##>"})
%azure.jobs
qsharp.azure.jobs()
wksp.list_jobs()
%azure.output
qsharp.azure.output(
)
job.get_results()
%azure.status
qsharp.azure.status()
job.details.status
%azure.quotas wksp.get_quotas()

Perintah ajaib lain yang tidak digunakan lagi

Perintah ajaib yang tidak digunakan lagi    
%check_kata Tidak digunakan lagi
%chemistry.broombridge Tidak digunakan lagi
%chemistry.encode Tidak digunakan lagi
%chemistry.fh.add_terms Tidak digunakan lagi
%chemistry.fh.load Tidak digunakan lagi
%chemistry.inputstate.load Tidak digunakan lagi
%config Tidak digunakan lagi
%debug Tidak digunakan lagi
%experimental.build_info Tidak digunakan lagi
%kata Tidak digunakan lagi
%lsmagic Tidak digunakan lagi
%lsopen Tidak digunakan lagi
%noise_model Tidak digunakan lagi
%package Tidak digunakan lagi
%performance Tidak digunakan lagi
%project Tidak digunakan lagi
%who Tidak digunakan lagi
%workspace Tidak digunakan lagi