Langkau ke kandungan utama

Penggunaan beban kerja

Penggunaan mewakili penggunaan Perkhidmatan IBM Quantum Compute dan ditentukan oleh jumlah masa QPU dikunci untuk melaksanakan beban kerja.

  • Penggunaan Session diukur sebagai masa yang berlalu semasa sesi kekal aktif, kerana kapasiti QPU dikhaskan untuk tempoh sesi, tanpa mengira sama ada beban kerja sedang berjalan secara aktif. Lihat Tempoh sesi untuk maklumat lanjut tentang peralihan status sesi.

  • Penggunaan Batch diukur sebagai jumlah kumulatif masa QPU dikunci untuk melaksanakan semua kerja dalam batch.

  • Penggunaan kerja tunggal diukur sebagai masa QPU dikunci untuk melaksanakan kerja.

Perlu diingat bahawa kerja yang gagal atau dibatalkan dikira dalam penggunaan anda dalam keadaan tertentu - lihat bahagian Kerja yang gagal dan dibatalkan untuk butiran.

Bagi pengguna Pelan Pay-As-You-Go, lihat Urus kos untuk butiran tentang menetapkan had kos.

Penggunaan untuk kerja yang gagal dan dibatalkan

Apabila kerja gagal atau dibatalkan, penggunaan yang dilaporkan adalah seperti berikut:

  • Mod kerja atau batch: Jika kegagalan atau pembatalan berlaku disebabkan ralat sistem, penggunaan yang dilaporkan adalah sifar. Bagi kerja yang gagal akibat ralat pengguna atau apabila pengguna membatalkan kerja, penggunaan yang dilaporkan adalah sebarang penggunaan yang telah berlaku sehingga masa itu, termasuk overhed yang ditanggung untuk menyediakan QPU bagi menjalankan kerja.

  • Mod sesi: Penggunaan yang dilaporkan adalah masa jam dinding semasa sesi aktif, tanpa mengira bilangan kerja yang gagal atau dibatalkan.

Tanya penggunaan sebenar beban kerja

Selepas beban kerja selesai, terdapat beberapa cara untuk melihat penggunaan sebenarnya:

  • Dalam qiskit-ibm-runtime v0.30 atau lebih baharu, jalankan job.usage() untuk kerja tunggal, atau batch.usage() atau session.usage() apabila menggunakan mod batch atau sesi. Jika menggunakan versi lama qiskit-ibm-runtime (>= 0.23 dan < 0.30), penggunaan masih boleh didapati dalam session.details()["usage_time"] dan batch.details()["usage_time"].

  • Guna GET /sessions/{id} untuk melihat penggunaan bagi batch atau sesi tertentu (titik akhir adalah sama untuk kedua-dua mod pelaksanaan).

  • Guna GET /jobs/{id} untuk melihat penggunaan bagi kerja tunggal.

Lihat penggunaan instans

Anda boleh melihat penggunaan instans pada halaman Instans, atau, bagi mereka yang mempunyai autoriti yang sesuai, halaman Analitik. Perlu diingat bahawa halaman tersebut mungkin menunjukkan nombor penggunaan yang berbeza kerana ia mengira penggunaan secara berbeza.

Halaman Instans menunjukkan penggunaan masa nyata untuk 28 hari lepas (bergulir), sehingga masa semasa pada hari semasa. Penggunaan halaman Analitik dikira semula setiap jam dan merangkumi 28 hari penuh terakhir; iaitu, ia menunjukkan penggunaan dari 00:00 28 hari lalu hingga hari ini, pada jam teratas.

Anggarkan penggunaan sebelum menghantar kerja

Walaupun mendapatkan anggaran setempat yang tepat adalah rumit kerana operasi tambahan yang dilakukan untuk penindasan dan mitigasi ralat, anda boleh menggunakan formula asas ini untuk mendapatkan anggaran penggunaan yang dianggarkan:

<per sub-job overhead> + (rep_delay + <circuit length>) * <num executions>

  • <per sub-job overhead> ialah overhed lebih kurang 2s bagi setiap sub-job. Ini termasuk operasi seperti memuatkan payload ke dalam elektronik kawalan. Kerja primitif anda mungkin dibahagikan kepada beberapa sub-job jika ia terlalu besar untuk enjin pelaksanaan memproses semuanya sekali gus.

  • rep_delay adalah pilihan yang boleh disesuaikan pengguna, dan lalainya diberikan oleh backend.default_rep_delay, iaitu 250 mikrosaat pada kebanyakan backend IBM Quantum. Perlu diingat bahawa mengurangkan rep_delay mengurangkan jumlah masa pelaksanaan QPU, tetapi dengan kos kadar ralat penyediaan keadaan yang meningkat; lihat panduan Pelaksanaan kadar pengulangan dinamik untuk maklumat lanjut.

  • <circuit length> ialah jumlah panjang arahan. Setiap arahan mengambil masa yang berbeza pada QPU, jadi jumlah panjang berbeza-beza mengikut Circuit. Pengukuran, sebagai contoh, boleh mengambil masa 56 kali lebih lama daripada Gate x. backend.target[<instruction>][<qubit>].duration boleh digunakan untuk mencari tempoh tepat bagi setiap arahan. Panjang Circuit biasa mungkin antara 50-100 mikrosaat. Jika anda menggunakan teknik penindasan atau mitigasi ralat dengan primitif, arahan tambahan mungkin dimasukkan ke dalam Circuit anda, yang akan meningkatkan jumlah panjang Circuit.

    nota

    Pilihan scheduler_timing eksperimen mengembalikan jumlah masa Circuit, tetapi ini BUKAN masa yang digunakan untuk pengebilan.

  • <num executions> ialah jumlah bilangan Circuit didarab dengan bilangan shot, di mana Circuit tersebut ialah yang dijana selepas elemen PUB disiarkan.

    • Jika anda menggunakan teknik mitigasi ralat dengan primitif, Circuit tambahan mungkin dijalankan sebagai sebahagian daripada proses mitigasi, yang akan meningkatkan jumlah bilangan pelaksanaan. Selain itu, teknik mitigasi ralat lanjutan seperti PEA dan PEC datang dengan overhed yang lebih tinggi kerana ia memerlukan Circuit dijalankan untuk pembelajaran hingar.
    • Estimator mengumpulkan observable yang bertukar tempat mengikut qubit, yang mengurangkan bilangan pelaksanaan.

Jika anda tidak menggunakan sebarang teknik mitigasi ralat lanjutan atau rep_delay tersuai, anda boleh guna 2+0.00035*<num executions> sebagai formula pantas.

Anggarkan penggunaan secara setempat dengan Qiskit

Contoh kod ini menunjukkan cara menggunakan Qiskit untuk mengira masa litar:


# Schedule the circuit to get more accurate timing
pm = generate_preset_pass_manager(
target=backend.target,
optimization_level=0,
scheduling_method="alap"
)

scheduled_circuits = pm.run(isa_circuits)

init_duration = backend.target["reset"][(0,)].duration
rep_delay = sampler.options.execution.rep_delay or backend.default_rep_delay

circuit_duration = 0

for circuit in scheduled_circuits:
# Estimate circuit length
circuit_duration += circuit.estimate_duration(backend.target)

# Add INIT time
if sampler.options.execution.init_qubits:
circuit_duration += init_duration

# Add rep_delay
circuit_duration += rep_delay

total_time = 2 + (circuit_duration*shots)
print(f"Total estimated usage is {math.ceil(total_time)} seconds")

Langkah seterusnya

Cadangan