Přeskočit na hlavní obsah

IBM Circuit function

Poznámka
  • Qiskit Functions jsou experimentální funkce dostupné pouze uživatelům IBM Quantum® Premium Plan, Flex Plan a On-Prem (prostřednictvím IBM Quantum Platform API) Plan. Jsou ve stavu náhledového vydání a mohou se změnit.

Přehled

IBM® Circuit function přijímá abstraktní PUBs jako vstupy a vrací zmírněné střední hodnoty jako výstupy. Tato Circuit function zahrnuje automatizovaný a přizpůsobený pipeline, který umožňuje výzkumníkům soustředit se na objevování algoritmů a aplikací.

Popis

Po odeslání svého PUB jsou tvé abstraktní obvody a observabely automaticky transpilovány, spuštěny na hardwaru a post-processovány, aby vrátily zmírněné střední hodnoty. K tomu kombinuje následující nástroje:

IBM Circuit function

Začínáme

Autentizuj se pomocí svého API klíče a vyber Qiskit Function takto. (Tento úryvek předpokládá, že jsi již uložil svůj účet do svého místního prostředí.)

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime
from qiskit_ibm_catalog import QiskitFunctionsCatalog

catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")

function = catalog.load("ibm/circuit-function")

Příklad

Začni tímto základním příkladem:

from qiskit.circuit.random import random_circuit
from qiskit_ibm_runtime import QiskitRuntimeService

# You can skip this step if you have a target backend, e.g.
# backend_name = "ibm_brisbane"
# You'll need to specify the credentials when initializing QiskitRuntimeService, if they were not previously saved.
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)

circuit = random_circuit(num_qubits=2, depth=2, seed=42)
observable = "Z" * circuit.num_qubits
pubs = [(circuit, observable)]

job = function.run(
# Use `backend_name=backend_name` if you didn't initialize a backend object
backend_name=backend.name,
pubs=pubs,
)

Zkontroluj stav úlohy svého Qiskit Function nebo získej výsledky takto:

print(job.status())
result = job.result()
QUEUED

Výsledky mají stejný formát jako výsledek Estimatoru:

print(f"The result of the submitted job had {len(result)} PUB\n")
print(
f"The associated PubResult of this job has the following DataBins:\n {result[0].data}\n"
)
print(f"And this DataBin has attributes: {result[0].data.keys()}")
print(
f"The expectation values measured from this PUB are: \n{result[0].data.evs}"
)
The result of the submitted job had 1 PUB

The associated PubResult of this job has the following DataBins:
DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>))

And this DataBin has attributes: dict_keys(['evs', 'stds', 'ensemble_standard_error'])
The expectation values measured from this PUB are:
1.02116704805492

Vstupy

Viz následující tabulku pro všechny vstupní parametry, které IBM Circuit function přijímá. Následující sekce Možnosti obsahuje další podrobnosti o dostupných options.

NázevTypPopisPovinnéVýchozíPříklad
backend_namestrNázev Backend, na který se má dotaz odeslat.AnoNeníibm_fez
pubsIterable[EstimatorPubLike]Iterovatelná kolekce abstraktních objektů podobných PUB (primitive unified bloc), jako jsou n-tice (circuit, observables) nebo (circuit, observables, parameter_values). Viz Přehled PUBs pro více informací. Obvody mohou být abstraktní (non-ISA).AnoNení(circuit, observables, parameter_values)
optionsdictVstupní možnosti. Viz sekci Možnosti pro více podrobností.NeViz sekci Možnosti pro podrobnosti.{"optimization_level": 3}
instancestrNázev cloudového prostředku instance, která se má použít ve daném formátu.NeJedna je náhodně vybrána, pokud má tvůj účet přístup k více instancím.CRN

Možnosti

Struktura

Podobně jako u Qiskit Runtime primitiv lze možnosti pro IBM Circuit function specifikovat jako vnořený slovník. Běžně používané možnosti, jako například optimization_level a mitigation_level, jsou na první úrovni. Ostatní, pokročilejší možnosti jsou seskupeny do různých kategorií, jako například resilience.

Výchozí hodnoty

Pokud neuvedeš hodnotu pro určitou možnost, použije se výchozí hodnota specifikovaná službou.

Úroveň zmírnění

IBM Circuit function také podporuje mitigation_level. Úroveň zmírnění určuje, kolik potlačení a zmírnění chyb se má na úlohu aplikovat. Vyšší úrovně generují přesnější výsledky, za cenu delší doby zpracování. Míra snížení chyb závisí na použité metodě. Úroveň zmírnění abstrahuje podrobnou volbu metod zmírnění a potlačení chyb, aby uživatelé mohli uvažovat o kompromisu cena/přesnost vhodném pro jejich aplikaci. Následující tabulka zobrazuje odpovídající metody pro každou úroveň.

poznámka

Přestože jsou názvy podobné, mitigation_level aplikuje jiné techniky než ty, které používá resilience_level Estimatoru.

Podobně jako resilience_level v Qiskit Runtime Estimatoru specifikuje mitigation_level základní sadu vybraných možností. Veškeré možnosti, které ručně specifikuješ nad rámec úrovně zmírnění, se aplikují na vrchol základní sady možností definované touto úrovní. V principu tedy můžeš nastavit úroveň zmírnění na 1 a zároveň vypnout zmírnění měření, přestože to není doporučeno.

Úroveň zmírněníTechnika
1 [Výchozí]Dynamické oddělování + měřicí twirling + TREX
2Úroveň 1 + hradlový twirling + ZNE pomocí hradlového skládání
3Úroveň 1 + hradlový twirling + ZNE pomocí PEA

Následující příklad demonstruje nastavení úrovně zmírnění:

options = {"mitigation_level": 2}

job = function.run(backend_name=backend.name, pubs=pubs, options=options)

Všechny dostupné možnosti

Kromě mitigation_level poskytuje IBM Circuit function také omezený počet pokročilých možností, které ti umožňují doladit kompromis cena/přesnost. Následující tabulka zobrazuje všechny dostupné možnosti:

MožnostPodmožnostPodmožnost podmožnostiPopisVolbyVýchozí
default_precisionVýchozí přesnost, která se použije pro jakýkoli PUB nebo volání run()
která nespecifikuje vlastní.
Každý vstupní PUB může specifikovat svou vlastní přesnost. Pokud je metodě run() zadána přesnost, použije se tato hodnota pro všechny PUBs ve volání run(), které nespecifikují vlastní.
float > 00.015625
max_execution_timeMaximální doba provádění v sekundách, která je založena
na využití QPU (nikoli na skutečném čase). Využití QPU je
množství času, po které je QPU věnována zpracování tvé úlohy. Pokud úloha překročí tento časový limit, je nuceně zrušena.
Celé číslo sekund v rozsahu [1, 10800]
mitigation_levelKolik potlačení a zmírnění chyb aplikovat. Viz sekci Úroveň zmírnění pro více informací o metodách používaných na každé úrovni.1 / 2 / 31
optimization_levelKolik optimalizace provést na obvodech. Vyšší úrovně generují optimalizovanější obvody, za cenu delší doby transpilace.1 / 2 / 32
dynamical_decouplingenableZda povolit dynamické oddělování. Viz Techniky potlačení a zmírnění chyb pro vysvětlení metody.True/FalseTrue
sequence_typeKterá sekvence dynamického oddělování se má použít.
* XX: použije sekvenci tau/2 - (+X) - tau - (+X) - tau/2
* XpXm: použije sekvenci tau/2 - (+X) - tau - (-X) - tau/2
* XY4: použije sekvenci
tau/2 - (+X) - tau - (+Y) - tau (-X) - tau - (-Y) - tau/2
'XX'/'XpXm'/'XY4''XX'
twirlingenable_gatesZda aplikovat twirling 2-Qubit Cliffordových Gate.True/FalseFalse
enable_measureZda povolit twirling měření.True/FalseTrue
resiliencemeasure_mitigationZda povolit metodu zmírnění chyb měření TREX. Viz Techniky potlačení a zmírnění chyb pro vysvětlení metody.True/FalseTrue
zne_mitigationZda zapnout metodu zmírnění chyb Zero Noise Extrapolation. Viz Techniky potlačení a zmírnění chyb pro vysvětlení metody.True/FalseFalse
zneamplifierKterá technika se má použít pro amplifikaci šumu. Jedna z:
- gate_folding (výchozí) používá 2-Qubit gate folding pro amplifikaci šumu. Pokud faktor šumu vyžaduje amplifikaci pouze podmnožiny Gate, jsou tyto Gate vybrány náhodně.

- gate_folding_front používá 2-Qubit gate folding pro amplifikaci šumu. Pokud faktor šumu vyžaduje amplifikaci pouze podmnožiny Gate, jsou tyto Gate vybrány z přední části topologicky uspořádaného DAG Circuit.

- gate_folding_back používá 2-Qubit gate folding pro amplifikaci šumu. Pokud faktor šumu vyžaduje amplifikaci pouze podmnožiny Gate, jsou tyto Gate vybrány ze zadní části topologicky uspořádaného DAG Circuit.

- pea používá techniku zvanou Probabilistic error amplification (PEA) pro amplifikaci šumu. Viz Techniky potlačení a zmírnění chyb pro vysvětlení metody.
gate_folding / gate_folding_front / gate_folding_back / peagate_folding
noise_factorsFaktory šumu, které se použijí pro amplifikaci šumu.seznam floatů; každý float >= 1(1, 1.5, 2) pro PEA a (1, 3, 5) jinak.
extrapolatorFaktory šumu, při nichž se vyhodnocují modely extrapolace fitování. Tato možnost nijak neovlivňuje provádění ani fitování modelu; pouze určuje body, ve kterých jsou objekty extrapolator vyhodnoceny a vráceny v datových polích evs_extrapolated a stds_extrapolated.jeden nebo více z exponential,linear, double_exponential,polynomial_degree_(1 <= k <= 7)(exponential, linear)
pec_mitigationZda zapnout metodu zmírnění chyb Probabilistic Error Cancellation. Viz Techniky potlačení a zmírnění chyb pro vysvětlení metody.True/FalseFalse
pecmax_overheadMaximální povolená režie vzorkování obvodů, nebo None pro bez maxima.None/ celé číslo >1100

V následujícím příkladu nastavení úrovně zmírnění na 1 nejprve vypne ZNE zmírnění, ale nastavení zne_mitigation na True přepíše příslušné nastavení z mitigation_level.

options = {"mitigation_level": 1, "resilience": {"zne_mitigation": True}}

Výstupy

Výstupem Circuit function je PrimitiveResult, který obsahuje dvě pole:

  • Jeden nebo více objektů PubResult. Ty lze indexovat přímo z PrimitiveResult.

  • Metadata na úrovni úlohy.

Každý PubResult obsahuje pole data a metadata.

  • Pole data obsahuje alespoň pole středních hodnot (PubResult.data.evs) a pole standardních chyb (PubResult.data.stds). Může také obsahovat další data v závislosti na použitých možnostech.

  • Pole metadata obsahuje metadata na úrovni PUB (PubResult.metadata).

Následující úryvek kódu popisuje formát PrimitiveResult (a přidruženého PubResult).

print(f"The result of the submitted job had {len(result)} PUB")
print(
f"The expectation values measured from this PUB are: \n{result[0].data.evs}"
)
print(f"And the associated metadata is: \n{result[0].metadata}")
The result of the submitted job had 1 PUB
The expectation values measured from this PUB are:
1.02116704805492
And the associated metadata is:
{'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32}

Získání chybových zpráv

Pokud je stav tvé úlohy ERROR, použij job.result() k získání chybové zprávy pro ladění takto:

job = function.run(
backend_name="bad_backend_name", pubs=pubs, options=options
)

print(job.result())

Získání podpory

Obrať se na podporu IBM Quantum a uveď následující informace:

  • ID úlohy Qiskit Function (qiskit-ibm-catalog), job.job_id
  • Podrobný popis problému
  • Jakékoli relevantní chybové zprávy nebo kódy
  • Kroky k reprodukci problému

Další kroky

Doporučení