Pengenalan primitives
Versi paket
Kode di halaman ini dikembangkan menggunakan persyaratan berikut. Kami menyarankan menggunakan versi ini atau yang lebih baru.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
Mengapa Qiskit memperkenalkan primitives?
Mirip dengan masa-masa awal komputer klasik, ketika developer harus memanipulasi register CPU secara langsung, antarmuka awal ke QPU hanya mengembalikan data mentah dari elektronik kontrol.
Hal ini tidak menjadi masalah besar ketika QPU masih berada di laboratorium dan hanya bisa diakses langsung oleh para peneliti.
Menyadari bahwa kebanyakan developer tidak perlu dan tidak harus memahami cara mengolah data mentah tersebut menjadi angka 0 dan 1, Qiskit memperkenalkan backend.run, sebuah abstraksi pertama untuk mengakses QPU di cloud. Ini memungkinkan developer untuk bekerja dengan format data yang sudah familiar dan fokus pada gambaran besarnya.
Seiring akses ke QPU semakin meluas, dan dengan semakin banyaknya algoritma kuantum yang dikembangkan,
kebutuhan akan abstraksi tingkat yang lebih tinggi pun muncul kembali. Sebagai respons, Qiskit memperkenalkan
antarmuka primitives, yang dioptimalkan untuk dua tugas inti dalam pengembangan algoritma kuantum:
estimasi nilai ekspektasi (Estimator) dan pengambilan sampel Circuit (Sampler). Tujuannya adalah sekali lagi
membantu developer untuk lebih fokus pada inovasi dan lebih sedikit pada konversi data. Antarmuka primitives menggantikan antarmuka backend.run, karena Sampler memberikan akses hardware langsung yang sama seperti yang ditawarkan oleh backend.run.
Apa itu primitive?
Sistem komputasi dibangun di atas beberapa lapisan abstraksi. Abstraksi memungkinkan kamu untuk fokus pada tingkat detail tertentu yang relevan dengan tugas yang sedang dikerjakan. Semakin dekat kamu dengan hardware, semakin rendah tingkat abstraksi yang kamu butuhkan (misalnya, kamu mungkin perlu memindahkan atau memanipulasi data di tingkat instruksi CPU). Semakin kompleks tugas yang ingin kamu lakukan, semakin tinggi tingkat abstraksinya (misalnya, kamu bisa menggunakan library pemrograman untuk melakukan perhitungan aljabar).
Dalam konteks ini, sebuah primitive adalah instruksi pemrosesan terkecil, blok bangunan paling sederhana yang darinya seseorang bisa membuat sesuatu yang berguna untuk tingkat abstraksi tertentu.
Kemajuan terbaru dalam komputasi kuantum telah meningkatkan kebutuhan untuk bekerja pada tingkat abstraksi yang lebih tinggi. Seiring bidang ini bergerak menuju unit pemrosesan kuantum (QPU) yang lebih besar dan alur kerja yang lebih kompleks, fokusnya bergeser dari berinteraksi dengan sinyal qubit individual ke melihat perangkat kuantum sebagai sistem yang menjalankan tugas-tugas yang diperlukan.
Dua tugas yang paling umum untuk komputer kuantum adalah pengambilan sampel keadaan kuantum dan penghitungan nilai ekspektasi. Tugas-tugas inilah yang mendorong desain Qiskit primitives: Estimator dan Sampler.
- Estimator menghitung nilai ekspektasi dari observable terhadap keadaan yang disiapkan oleh Circuit kuantum.
- Sampler mengambil sampel register output dari eksekusi Circuit kuantum.
Singkatnya, model komputasi yang diperkenalkan oleh Qiskit primitives membawa pemrograman kuantum selangkah lebih dekat ke tempat pemrograman klasik berada saat ini, di mana fokusnya lebih sedikit pada detail hardware dan lebih banyak pada hasil yang ingin kamu capai.
Definisi dan implementasi primitive
Ada dua jenis Qiskit primitives: kelas dasar, dan implementasinya. Primitive Estimator dan Sampler didefinisikan oleh kelas dasar primitive open-source yang ada di Qiskit SDK (di modul qiskit.primitives). Provider (seperti Qiskit Runtime) dapat menggunakan kelas dasar ini untuk menurunkan implementasi Sampler dan Estimator mereka sendiri. Sebagian besar pengguna akan berinteraksi dengan implementasi provider, bukan primitive dasar.
Kelas dasar
Primitive Base adalah kelas abstrak yang mendefinisikan antarmuka umum untuk mengimplementasikan primitives. Semua kelas lain di modul qiskit.primitives mewarisi dari kelas dasar ini. Developer harus menggunakan kelas ini jika mereka tertarik untuk membuat model eksekusi berbasis primitives mereka sendiri untuk provider tertentu. Kelas-kelas ini mungkin juga berguna bagi mereka yang ingin melakukan pemrosesan yang sangat dikustomisasi dan menemukan bahwa implementasi primitives yang sudah ada terlalu sederhana untuk kebutuhan mereka. Pengguna umum tidak akan langsung menggunakan kelas dasar ini.
BaseEstimatorV1 dan BaseSamplerV1 - Meskipun primitive V1 masih bisa digunakan, panduan ini berfokus pada primitive V2 karena mereka yang terbaru dan lebih umum digunakan.
BaseEstimatorV2 dan BaseSamplerV2 - Primitive referensi Qiskit mengikuti spesifikasi antarmuka ini.
Implementasi
Semua primitives dibuat dari kelas dasar; oleh karena itu, mereka memiliki struktur dan penggunaan umum yang sama. Misalnya, format input untuk semua Estimator primitives adalah sama. Namun, ada perbedaan dalam implementasi yang membuat masing-masing unik.
Berikut adalah implementasi dari kelas dasar primitives:
-
Qiskit Runtime primitives,
EstimatorV2danSamplerV2, menyediakan implementasi yang lebih canggih (misalnya, dengan menyertakan error mitigation) sebagai layanan berbasis cloud. Implementasi primitive dasar ini digunakan untuk mengakses hardware IBM Quantum®. -
StatevectorEstimatordanStatevectorSampler- Implementasi referensi dari primitives yang menggunakan simulator bawaan Qiskit. Mereka dibangun dengan modul Qiskitquantum_info, menghasilkan hasil berdasarkan simulasi statevector ideal. Mereka diakses melalui Qiskit. Lihat Simulasi eksak dengan Qiskit primitives untuk detail penggunaan. -
BackendEstimatorV2danBackendSamplerV2- Kamu bisa menggunakan kelas-kelas ini untuk "membungkus" sumber daya komputasi kuantum apa pun menjadi sebuah primitive. Ini memungkinkan kamu menulis kode bergaya primitive untuk provider yang belum memiliki antarmuka berbasis primitives. Kelas-kelas ini bisa digunakan seperti Sampler dan Estimator biasa, kecuali mereka harus diinisialisasi dengan argumenbackendtambahan untuk memilih komputer kuantum mana yang akan dijalankan. Mereka diakses menggunakan Qiskit. Lihat panduan backend primitives untuk informasi lebih lanjut.
Options
Kamu bisa meneruskan opsi ke primitives untuk menyesuaikannya dengan kebutuhanmu. Meskipun antarmuka metode run() pada primitives sama di semua implementasi, opsinya tidak. Konsultasikan referensi API untuk implementasi primitive tertentu untuk mempelajari opsi yang didukungnya.
Misalnya, lihat topik Estimator options dan Sampler options untuk mempelajari opsi untuk Qiskit Runtime primitives, atau lihat referensi API Qiskit Aer untuk opsi primitives Qiskit Aer.
Manfaat Qiskit primitives
Dengan primitives, pengguna Qiskit bisa menulis kode kuantum untuk QPU tertentu tanpa harus secara eksplisit
mengelola setiap detail. Juga, karena adanya lapisan abstraksi tambahan, kamu mungkin bisa lebih mudah
mengakses kemampuan hardware canggih dari provider tertentu. Misalnya, dengan Qiskit Runtime primitives,
kamu bisa memanfaatkan kemajuan terbaru dalam error mitigation dan suppression dengan mengaktifkan opsi seperti resilience_level pada primitive, daripada membangun implementasi teknik-teknik ini sendiri.
Untuk provider hardware, mengimplementasikan primitives secara native berarti kamu bisa memberikan pengguna cara yang lebih "siap pakai" untuk mengakses fitur hardware-mu seperti teknik pasca-pemrosesan canggih. Dengan begitu, lebih mudah bagi penggunamu untuk mendapatkan manfaat dari kemampuan terbaik hardware-mu.
Langkah selanjutnya
- Pahami input dan output primitive.
- Tinjau contoh-contoh yang detail.
- Berlatih dengan primitives melalui pelajaran Cost function di IBM Quantum Learning.
- Tinjau Membuat provider untuk mempelajari cara mengimplementasikan primitive Sampler dan Estimator-mu sendiri.
- Lihat referensi API.
- Baca Migrasi ke V2 primitives.
- Pelajari tentang Qiskit Runtime primitives, yang digunakan untuk menjalankan Circuit pada QPU IBM.