Lewati ke konten utama
Proyek ini masih dalam tahap beta. Menemukan bug? Buat isu GitHub. Punya pertanyaan atau ide? Tanya di Discussions — kami sangat menghargai masukan kamu!
Bagaimana kualitas terjemahan di halaman ini?

Quickstart Sampler

Tugas inti Sampler adalah mengambil sampel register output dari eksekusi satu atau lebih Circuit kuantum. Circuit dinamis dan Circuit terparameterisasi diterima sebagai input (jika Circuit terparameterisasi dikirimkan, nilai parameter juga harus disertakan). Sampler juga mendukung dynamical decoupling dan twirling bawaan untuk penekanan error.

Langkah-langkah dalam topik ini menjelaskan cara menyiapkan Sampler, menjelajahi opsi yang bisa kamu gunakan untuk mengonfigurasinya, dan memanggilnya dalam sebuah program.

Implementasi Sampler baru

Implementasi baru dari interface Qiskit SamplerV2 dan EstimatorV2 diperkenalkan di qiskit-ibm-runtime v0.50.0. Primitif sisi klien ini melakukan sebagian besar pra-pemrosesan dan pasca-pemrosesan di sisi klien dan mendelegasikan eksekusi ke primitif Executor. Menjalankan di sisi klien memberikan transparansi yang lebih besar, umpan balik debugging yang lebih cepat, dan kontrol yang lebih terperinci.

Karena mengimplementasikan API yang sama, primitif sisi klien ini sebagian besar merupakan pengganti langsung (drop-in) dari primitif sisi server versi lama, dan satu-satunya yang perlu diubah hanyalah pernyataan import. Lihat Migrasi dari Sampler dan Estimator sisi server ke sisi klien untuk informasi lebih lanjut.

Versi paket

Kode di halaman ini dikembangkan menggunakan persyaratan berikut. Kami menyarankan menggunakan versi ini atau yang lebih baru.

qiskit[all]~=2.5.2
qiskit-ibm-runtime~=0.47.0

Langkah-langkah menggunakan primitif Sampler​

1. Inisialisasi akun​

Kamu perlu menginisialisasi akunmu terlebih dahulu. Setelah itu kamu bisa memilih QPU yang ingin kamu gunakan.

Ikuti langkah-langkah di topik Atur akun IBM Cloud-mu jika kamu belum memiliki akun yang disiapkan.

Fractional gates

Untuk menggunakan fractional gates yang baru didukung, atur use_fractional_gates=True saat meminta backend dari instance QiskitRuntimeService. Contoh:

service = QiskitRuntimeService()
fractional_gate_backend = service.least_busy(use_fractional_gates=True)

Ini adalah fitur eksperimental dan mungkin berubah di masa mendatang.

# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"numpy": "numpy", "qiskit": "qiskit", "qiskit_ibm_runtime": "qiskit-ibm-runtime"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=127
)

2. Buat sebuah sirkuit​

Kamu membutuhkan setidaknya satu Circuit sebagai input ke primitif Sampler.

import numpy as np
from qiskit.circuit.library import efficient_su2

circuit = efficient_su2(127, entanglement="linear")
circuit.measure_all()
# The circuit is parametrized, so we will define the parameter values for execution
param_values = np.random.rand(circuit.num_parameters)

Circuit dan observabel perlu ditransformasi untuk hanya menggunakan instruksi yang didukung oleh QPU (disebut sebagai Circuit instruction set architecture (ISA)). Gunakan Transpiler untuk melakukan ini.

from qiskit.transpiler import generate_preset_pass_manager

pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
isa_circuit = pm.run(circuit)
print(f">>> Circuit ops (ISA): {isa_circuit.count_ops()}")
>>> Circuit ops (ISA): OrderedDict([('rz', 3036), ('sx', 1769), ('cz', 378), ('measure', 127), ('barrier', 1)])

3. Inisialisasi IBM Quantum Sampler​

Saat kamu menginisialisasi Sampler, gunakan parameter mode untuk menentukan mode yang ingin dijalankan. Nilai yang mungkin adalah objek batch, session, atau backend, masing-masing untuk mode eksekusi batch, session, dan job. Untuk info lebih lanjut, lihat Pengantar mode eksekusi IBM Quantum Compute Service. Perlu diperhatikan bahwa pengguna Open Plan tidak bisa mengirimkan job session.

# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Sampler

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_sampler import Sampler

sampler = Sampler(mode=backend)

4. Panggil Sampler dan dapatkan hasilnya​

Selanjutnya, panggil metode run() untuk menghasilkan output. Circuit dan set nilai parameter opsional dimasukkan sebagai tuple primitive unified bloc (PUB).

job = sampler.run([(isa_circuit, param_values)])
print(f">>> Job ID: {job.job_id()}")
print(f">>> Job Status: {job.status()}")
>>> Job ID: dab7lb6rrl7c7386gjgg
>>> Job Status: QUEUED
result = job.result()

# Get results for the first (and only) PUB
pub_result = result[0]
print(
f"First ten results for the 'meas' output register: "
f"{pub_result.data.meas.get_bitstrings()[:10]}"
)
First ten results for the 'meas' output register: ['1110001000100100100111011000001001000101010000001100010010110011001100110111100000000110001000011001101000110100101110101010011', '1110101100010101010001010111111011000110011010100101001100110101010010101010101110001010100100000000011110101101011000100000100', '1100110011101000110000000100110111101010110001100010111100001101100001010100111001101010101110000101010001001101010101001000100', '1011001001011000000101010111111010011101001111010100001011110011000101110101011001100110011011110011101010000111001111110110011', '1110111011011111101011110101110101010110011001100110101111100100011101100011011100101100101001001111110101111010101110111111011', '0101001110001110010001010100010111011001000000011110000000000001110000010010101101011001000100000001011011101111010010110111110', '1101101001000100010000110001000101010010101011000011000011001010000111100110010101010110100110011010101100001011100110001111011', '1000110011111111100010101010101111001001100001110111101001100111010101010111110110011000110011010010010000100000100010010010101', '0101010100110011110011010000000100011001111100101100101100101111101110100001101101111010100011011000010011111010001100110000010', '0010000111011100000000110000001110001100010011000100101110111111100011001100011001101010011111111100000000011100101101111010100']

Langkah selanjutnya​

Rekomendasi