Přeskočit na hlavní obsah
Tento projekt je v betě. Našel jsi chybu? Otevřít issue na GitHubu. Máš otázku nebo nápad? Zeptej se v Discussions — rádi si poslechneme tvou zpětnou vazbu!
Jaká je kvalita překladu na této stránce?

Rychlý start s Estimatorem

Primitivum Estimator vypočítává střední hodnoty pro jednu nebo více pozorovatelných vzhledem ke stavům připraveným kvantovými obvody. Obvody mohou být parametrizované, pokud jsou také poskytnuty hodnoty parametrů jako vstup primitiva.

Toto primitivum má několik vestavěných technik zmírnění a potlačení chyb, včetně dynamického oddělování (dynamical decoupling), Pauliho twirlingu, gate-folding ZNE, PEA a PEC. Také podporuje možnost resilience_level, která ti umožňuje snadno konfigurovat kompromis mezi náklady a přesností. Kroky v tomto tématu popisují, jak nastavit Estimator, prozkoumat možnosti pro jeho konfiguraci a spustit ho v programu.

Nová implementace Estimatoru

Nové implementace rozhraní Qiskit SamplerV2 a EstimatorV2 byly zavedeny v qiskit-ibm-runtime v0.50.0. Tato klientská primitiva provádějí většinu předzpracování a následného zpracování na straně klienta a delegují provedení na primitivum Executor. Spouštění na straně klienta poskytuje větší transparentnost, rychlejší zpětnou vazbu při ladění a jemnější kontrolu.

Protože implementují stejné API, jsou tato klientská primitiva z velké části přímými náhradami starších serverových primitiv, přičemž jedinou změnou je příkaz import. Více informací najdeš v průvodci Migrace ze serverového na klientský Sampler a Estimator.

Verze balíčků

Kód na této stránce byl vyvinut s použitím následujících požadavků. Doporučujeme používat tyto verze nebo novější.

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

Kroky k použití primitiva Estimator​

1. Inicializace účtu​

Nejprve musíš inicializovat svůj účet. Poté můžeš vybrat QPU, které chceš použít pro výpočet střední hodnoty.

Pokud ještě nemáš účet, postupuj podle kroků v části Nastavení účtu IBM Cloud.

Zlomková hradla

Chceš-li používat nově podporovaná zlomková hradla, nastav use_fractional_gates=True při žádosti o backend z instance QiskitRuntimeService. Například:

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

Toto je experimentální funkce a může se v budoucnu změnit.

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

_needed = {"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
)

print(backend.name)
ibm_fez

2. Vytvoření obvodu a pozorovatelné​

Pro primitivum Estimator potřebuješ alespoň jeden obvod a jednu pozorovatelnou jako vstupy.

from qiskit.circuit.library import qaoa_ansatz
from qiskit.quantum_info import SparsePauliOp

entanglement = [tuple(edge) for edge in backend.coupling_map.get_edges()]
observable = SparsePauliOp.from_sparse_list(
[("ZZ", [i, j], 0.5) for i, j in entanglement],
num_qubits=backend.num_qubits,
)
circuit = qaoa_ansatz(observable, reps=2)
# The circuit is parametrized, so we will define the parameter values for execution
param_values = [0.1, 0.2, 0.3, 0.4]

Obvod a pozorovatelná musí být transformovány tak, aby používaly pouze instrukce podporované QPU (označované jako obvody architektury instrukční sady (ISA)). K tomu použij transpiler.

from qiskit.transpiler import generate_preset_pass_manager

pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
isa_circuit = pm.run(circuit)
isa_observable = observable.apply_layout(isa_circuit.layout)
print(f">>> Circuit ops (ISA): {isa_circuit.count_ops()}")
>>> Circuit ops (ISA): OrderedDict([('rz', 4472), ('sx', 1884), ('cz', 1120)])

3. Inicializace IBM Quantum Estimatoru​

Při inicializaci Estimatoru použij parametr mode k určení režimu, ve kterém ho chceš spustit. Možné hodnoty jsou objekty batch, session nebo backend pro režim dávky (batch), relace (session) a jednotlivých úloh (job). Více informací najdeš v části Úvod do IBM Quantum Compute Service prováděcích režimů. Uživatelé Open Plan nemohou odesílat úlohy v režimu session.

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

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import Estimator

estimator = Estimator(mode=backend)

4. Spuštění Estimatoru a získání výsledků​

Dále spusť metodu run() pro výpočet středních hodnot pro vstupní obvody a pozorovatelné. Obvod, pozorovatelná a volitelné sady hodnot parametrů jsou jako vstup zadány ve formě n-tic primitive unified bloc (PUB).

job = estimator.run([(isa_circuit, isa_observable, param_values)])
print(f">>> Job ID: {job.job_id()}")
print(f">>> Job Status: {job.status()}")
>>> Job ID: dab7lfurrl7c7386gjn0
>>> Job Status: QUEUED
result = job.result()
print(f">>> {result}")
print(f" > Expectation value: {result[0].data.evs}")
print(f" > Metadata: {result[0].metadata}")
>>> PrimitiveResult([PubResult(data=DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>)), metadata={'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32})], metadata={'dynamical_decoupling': {'enable': False, 'sequence_type': 'XX', 'extra_slack_distribution': 'middle', 'scheduling_method': 'alap'}, 'twirling': {'enable_gates': False, 'enable_measure': True, 'num_randomizations': 'auto', 'shots_per_randomization': 'auto', 'interleave_randomizations': True, 'strategy': 'active-accum'}, 'resilience': {'measure_mitigation': True, 'zne_mitigation': False, 'pec_mitigation': False}, 'version': 2})
> Expectation value: 28.60306448415693
> Metadata: {'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32}

Další kroky​

Doporučení