Job dry-run
Job dry-run menjalankan beban kerjamu lewat IBM Quantum® Compute Service tanpa memakai waktu QPU sama sekali. Pakai job dry-run untuk melakukan hal-hal berikut sebelum kamu menjalankan yang sungguhan:
-
**Mendapatkan penggunaan yang akan dikenakan job ini pada QPU sungguhan.
-
Memvalidasi job. Quantum Compute memeriksa parameter job, sama seperti untuk job sungguhan.
-
Mendapatkan jadwal waktu circuit, jika kamu memintanya, untuk men-debug job sebelum menjalankannya sungguhan.
Berbeda dengan job dry-run, pengujian lokal (fake backend dan Qiskit Aer) berjalan di mesinmu sendiri sehingga tidak bisa memberikan angka penggunaan, validasi sisi layanan, atau informasi waktu dari layanan. Untuk membandingkan kedua pendekatan ini, lihat Perangkat mock dibandingkan dengan fake backend.
qiskit-ibm-runtimev0.51.0 atau yang lebih baru diperlukan untuk job dry-run.- Job dry-run tersedia di semua wilayah, dan hanya tersedia di paket Flex, Premium, dan On-Prem. Job ini tidak tersedia di paket Open atau Pay-As-You-Go.
Cara kerjanya
Untuk menjalankan job dry-run, berikan dry_run=True ke metode run() milik primitive:
backend = service.backend("ibm_phoenix")
isa_circuit = pm.run(circuit) # transpiled for ibm_phoenix
sampler = Sampler(mode=backend)
job = sampler.run([isa_circuit], dry_run=True)
job.result() # wait for completion
print(job.usage())
dry_run adalah argumen dari metode run() (defaultnya False), bukan opsi runtime. Argumen ini tersedia untuk semua primitive.
Job dry-run punya karakteristik berikut:
-
Job ini berjalan di IBM Quantum Compute Service di cloud, bukan di mesinmu.
-
Job ini memakai data kalibrasi dari QPU sungguhan, bukan sekadar snapshot.
-
Hasilnya mempertahankan skema yang diharapkan dan mengikuti bentuk hasil yang diharapkan dari QPU sungguhan, tetapi berisi data mock yang diacak. Hasil ini bukan hasil pengukuran asli atau hasil simulasi, jadi jangan dipakai untuk memeriksa kebenaran fisik.
-
Pemrosesan terjadi di server, jadi job mungkin tidak langsung selesai.
Ukuran circuit, shot, dan batasan lainnya sama seperti untuk job apa pun dari program tersebut.
dry_run=True juga berfungsi ketika backend-nya sudah berupa perangkat mock.
Membaca penggunaan
Penggunaan dari job dry-run yang sudah selesai sama dengan penggunaan yang akan dikenakan job yang sama pada QPU sungguhan, kecuali dalam situasi langka ketika data kalibrasi berubah signifikan setelah job dry-run dan sebelum job di QPU sungguhan.
-
job.usage()mengembalikan penggunaan dalam detik. -
job.metrics()["usage"]mengembalikan data yang sama beserta status penggunaan.
Penggunaan dry-run tidak ditagih, tidak memakai alokasi paketmu, dan tidak dihitung terhadap batasan apa pun.
Jangan gunakan job.usage_estimation pada job dry-run. Gunakan job.usage().
job.usage() mengembalikan 0 sampai perhitungan penggunaan final, jadi tunggu job selesai sebelum membacanya.
Jadwal waktu circuit
Untuk meminta jadwal waktu circuit, gunakan opsi yang sama seperti untuk job sungguhan. Untuk detail lengkap, lihat Visualisasikan waktu circuit.
Keterbatasan
-
Hanya mode job dan batch. Job dry-run hanya bisa berjalan di job mode dan batch mode.
-
Hanya paket Flex, Premium, dan On-Prem. Job dry-run tidak tersedia di paket Open atau Pay-As-You-Go.
Perangkat mock
Perangkat mock adalah implementasi di balik job dry-run. Job dry-run menyembunyikan perangkat mock secara default, tetapi kamu akan menemukannya dalam kasus-kasus berikut:
-
Instance yang dikonfigurasi hanya untuk mengakses perangkat mock. Contoh: jika kamu memakai
service.backend("ibm_phoenix")untuk mengirim job dry-run keibm_phoenix, tetapi instance-mu tidak punya akses keibm_phoenix, kamu akan mendapatQiskitBackendNotFoundError. Sebagai gantinya, pilih perangkat mock secara langsung denganservice.backend("mock_phoenix"). -
Compute resources. Perangkat mock disembunyikan secara default di halaman Compute resources. Tabel di halaman itu punya opsi filter untuk menyertakannya, tetapi hanya paket Flex, Premium, dan On-Prem yang punya akses ke perangkat mock.
-
Tabel Workloads. Job dari perangkat mock disembunyikan secara default di halaman Workloads. Tabelnya punya opsi filter (ikon corong) untuk menampilkannya.
-
Python API.
service.backends()danservice.jobs()mengecualikan perangkat mock kecuali kamu memanggilnya denganinclude_mocks=True.IBMBackend.is_mockmenunjukkan apakah sebuah backend adalah perangkat mock.service.least_busy()tidak pernah mengembalikan perangkat mock.
Perangkat mock dibandingkan dengan fake backend
Namanya mirip, tetapi perangkat mock dan fake backend adalah dua hal yang berbeda. Fake backend adalah objek lokal di lingkungan Python-mu. Perangkat mock adalah resource cloud di IBM Quantum Compute Service.
Perangkat mock (misalnya mock_phoenix) | Fake backend (misalnya FakeManilaV2) | |
|---|---|---|
| Apa itu | Sebuah perangkat di IBM Quantum Compute Service | Kelas Python di qiskit_ibm_runtime.fake_provider |
| Tempat berjalan | Cloud, di dalam layanan | Secara lokal, di mesinmu |
| Cara mendapatkannya | service.backend("mock_phoenix"), atau otomatis dengan run(..., dry_run=True) | from qiskit_ibm_runtime.fake_provider import ... |
| Akun dan instance | Hanya paket tertentu (Flex, Premium, atau On-Prem) | Semua instance dan paket |
| Kalibrasi | Langsung, sesuai dengan perangkat sungguhan setiap saat | Snapshot tetap yang disertakan dalam paket terinstal |
| Hasil | Data acak dengan skema yang diharapkan. Bukan simulasi | Simulasi ber-noise yang memakai model noise dari snapshot |
| Hasil bermakna secara fisik | Tidak. Jangan pernah dipakai untuk memeriksa kebenaran | Kurang lebih, dalam batas model noise |
| Penggunaan dilaporkan | Ya | Tidak ada |
| Ditagih atau dihitung terhadap alokasi atau batasan paket | Tidak | Tidak |
| Validasi job | Dilakukan oleh layanan, sama seperti job sungguhan | Terbatas pada apa yang diperiksa klien |
| Jadwal waktu | Tersedia berdasarkan permintaan | Tidak tersedia |
| Mode eksekusi | Hanya mode job dan batch. Session diblokir | Sintaks session diterima tetapi diabaikan (mode lokal tidak punya session atau batch sungguhan) |
| Penyelesaian | Asinkron, di server | Berjalan secara lokal dan mengembalikan hasil saat selesai |
| Ditampilkan di antarmuka platform dan daftar API | Disembunyikan secara default (Compute resources, tabel Workloads, backends(), jobs()). Aktifkan untuk menampilkan | Tidak pernah, karena tidak ada yang dikirim ke layanan |
Cara memilih
-
Untuk mengetahui berapa banyak penggunaan yang akan dihabiskan job, atau apakah layanan akan menerimanya, gunakan job dry-run.
-
Untuk mengetahui seperti apa kira-kira outputnya, atau untuk bekerja secara offline, gunakan fake backend atau Aer.
-
Untuk keduanya, iterasikan circuit dan hasil dengan fake backend, lalu lakukan dry-run sebagai pemeriksaan terakhir sebelum QPU sungguhan.
Titik-titik yang sering membingungkan
-
Perangkat mock bukan simulator. Outputnya acak, jadi men-sampling circuit Bell di
mock_phoenixtidak mengembalikan distribusi Bell. Kalau kamu mau output ber-noise yang realistis, pakai fake backend. -
Fake backend bukan perangkat yang live. Kalibrasinya adalah snapshot dan mungkin sudah usang. Perangkat mock mengikuti kalibrasi sungguhan, jadi circuit yang di-transpile dan waktunya sesuai dengan apa yang dilihat QPU hari ini.
-
Keduanya tidak berjalan di hardware sungguhan. Keduanya tidak memakai waktu QPU, tetapi hanya job dry-run yang melewati layanan.
-
usage_estimationbukan estimasi dry-run. Untuk job dry-run,job.usage()mengembalikan detik penggunaan yang akan ditagihkan untuk jobmu pada QPU sungguhan.
Kasus penggunaan
Pelajar dan kursus
Seorang administrator membatasi instance hanya untuk perangkat mock, memakai tombol kustomisasi QPU saat membuat atau mengedit instance. Dengan begitu pelajar bisa memvalidasi payload mereka dari ujung ke ujung tanpa memakai waktu QPU atau RU sungguhan. Karena instance hanya punya akses ke perangkat mock, pelajar memilih backend lewat nama mock-nya:
backend = service.backend("mock_phoenix")
sampler = Sampler(mode=backend)
job = sampler.run([isa_circuit], dry_run=True)
Perencanaan proyek
Tim yang akan memulai proyek melakukan dry-run pada job yang representatif untuk melihat RU yang dibutuhkan proyek, sebelum memilih paket atau alokasi:
backend = service.backend("ibm_phoenix")
sampler = Sampler(mode=backend)
job = sampler.run([isa_circuit], dry_run=True)
job.result()
print(job.usage())
Pemeriksaan akhir sebelum berjalan di QPU sungguhan
Validasi parameter dan periksa jadwal waktu dengan dry_run=True, lalu hapus argumen itu dan jalankan di QPU sungguhan. Tidak ada hal lain di kodemu yang berubah:
sampler = Sampler(mode=backend)
# Pre-flight check
job = sampler.run([isa_circuit], dry_run=True)
job.result()
# Real run - same code, without dry_run
job = sampler.run([isa_circuit])
Langkah selanjutnya
- Uji program di mesinmu sendiri dengan Mode pengujian lokal.
- Pelajari bagaimana penggunaan beban kerja diukur.
- Visualisasikan jadwal waktu circuit.
- Pahami resource unit dan paket yang tersedia.