Lumaktaw sa pangunahing nilalaman

IBM Circuit function

Tandaan
  • Ang Qiskit Functions ay isang experimental na feature na available lamang sa mga gumagamit ng IBM Quantum® Premium Plan, Flex Plan, at On-Prem (sa pamamagitan ng IBM Quantum Platform API) Plan. Nasa preview release status ito at maaaring magbago.

Pangkalahatang-ideya​

Ang IBM® Circuit function ay tumatanggap ng abstract PUBs bilang mga input, at nagbabalik ng mitigated na expectation values bilang mga output. Kasama sa circuit function na ito ang isang automated at customized na pipeline para makapag-focus ang mga mananaliksik sa pag-discover ng algorithm at application.

Paglalarawan​

Pagkatapos mag-submit ng PUB, ang iyong mga abstract circuit at observable ay awtomatikong tina-transpile, pinatatakbo sa hardware, at nipo-post-process para ibalik ang mitigated na expectation values. Para magawa ito, pinagsama ang mga sumusunod na kagamitan:

IBM Circuit function

Pagsisimula​

Mag-authenticate gamit ang iyong API key at piliin ang Qiskit Function tulad ng sumusunod. (Ipinapalagay ng snippet na ito na nai-save mo na ang iyong account sa iyong lokal na environment.)

# 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")

Halimbawa​

Para makapagsimula, subukan ang basic na halimbawang ito:

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,
)

Tingnan ang status ng iyong Qiskit Function workload o kunin ang mga resulta tulad ng sumusunod:

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

Ang mga resulta ay nasa parehong format ng isang Estimator result:

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

Mga Input​

Tingnan ang sumusunod na talahanayan para sa lahat ng input parameter na tinatanggap ng IBM Circuit function. Ang susunod na seksyon ng Mga Opsyon ay nagbibigay ng mas detalyadong impormasyon tungkol sa mga available na options.

PangalanUriPaglalarawanKinakailanganDefaultHalimbawa
backend_namestrPangalan ng backend para sa query.OoN/Aibm_fez
pubsIterable[EstimatorPubLike]Isang iterable ng abstract PUB-like (primitive unified bloc) na mga object, tulad ng mga tuple na (circuit, observables) o (circuit, observables, parameter_values). Tingnan ang Pangkalahatang-ideya ng PUBs para sa karagdagang impormasyon. Ang mga circuit ay maaaring abstract (non-ISA).OoN/A(circuit, observables, parameter_values)
optionsdictMga input na opsyon. Tingnan ang seksyon ng Mga Opsyon para sa karagdagang detalye.HindiTingnan ang seksyon ng Mga Opsyon para sa mga detalye.{"optimization_level": 3}
instancestrAng cloud resource name ng instance na gagamitin sa format na iyon.HindiIsang random ang pipiliin kung ang iyong account ay may access sa maramihang instance.CRN

Mga Opsyon​

Istruktura​

Katulad ng Qiskit Runtime primitives, ang mga opsyon para sa IBM Circuit function ay maaaring tukuyin bilang isang nested dictionary. Ang mga karaniwang ginagamit na opsyon, tulad ng optimization_level at mitigation_level, ay nasa unang antas. Ang iba pang mas advanced na opsyon ay nakagrupo sa iba't ibang kategorya, tulad ng resilience.

Mga Default​

Kung hindi ka nagtukoy ng value para sa isang opsyon, gagamitin ang default na value na itinakda ng serbisyo.

Antas ng mitigation​

Sinusuportahan din ng IBM Circuit function ang mitigation_level. Tinutukoy ng mitigation level kung gaano karaming error suppression at mitigation ang ilalapat sa job. Ang mas mataas na antas ay nagbibigay ng mas tumpak na mga resulta, ngunit mas matagal ang processing time. Ang antas ng pagbabawas ng error ay depende sa pamamaraang ginamit. Binibigyan ng abstraction ng mitigation level ang detalyadong pagpili ng mga paraan ng error mitigation at suppression para makapag-isip ang mga gumagamit tungkol sa cost/accuracy trade-off na angkop sa kanilang application. Ipinapakita ng sumusunod na talahanayan ang mga katumbas na pamamaraan para sa bawat antas.

tala

Kahit magkapareho ang mga pangalan, ang mitigation_level ay gumagamit ng ibang mga teknik kaysa sa ginagamit ng resilience_level ng Estimator.

Katulad ng resilience_level sa Qiskit Runtime Estimator, tinutukoy ng mitigation_level ang isang base set ng mga curated na opsyon. Ang anumang opsyon na mano-manong tinukoy mo bukod sa mitigation level ay ilalapat sa ibabaw ng base set ng mga opsyon na tinukoy ng mitigation level. Kaya naman, sa prinsipyo, maaari mong itakda ang mitigation level sa 1, ngunit pagkatapos ay i-off ang measurement mitigation, kahit hindi ito inirerekomenda.

Mitigation LevelTeknik
1 [Default]Dynamical decoupling + measurement twirling + TREX
2Level 1 + gate twirling + ZNE via gate folding
3Level 1 + gate twirling + ZNE via PEA

Ipinapakita ng sumusunod na halimbawa ang pagtatakda ng mitigation level:

options = {"mitigation_level": 2}

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

Lahat ng available na opsyon​

Bukod sa mitigation_level, nagbibigay din ang IBM Circuit function ng ilang advanced na opsyon na nagbibigay-daan sa iyo na i-fine-tune ang cost/accuracy trade-off. Ipinapakita ng sumusunod na talahanayan ang lahat ng available na opsyon:

OpsyonSub-opsyonSub-sub-opsyonPaglalarawanMga PagpipilianDefault
default_precisionAng default na precision na gagamitin para sa anumang PUB o run()
call na hindi nagtutukoy ng isa.
Ang bawat input PUB ay maaaring magtukoy ng sariling precision. Kung ang run() method ay binibigyan ng precision, ang value na iyon ang gagamitin para sa lahat ng PUB sa run() call na hindi nagtutukoy ng sarili nilang precision.
float > 00.015625
max_execution_timeMaximum na oras ng execution sa segundo, batay sa
QPU usage (hindi wall clock time). Ang QPU usage ay ang
dami ng oras na nakalaan ang QPU sa pagpoproseso ng iyong job. Kung lalampas ang isang job sa time limit na ito, ito ay puwersahang icancelled.
Integer na bilang ng segundo sa range na [1, 10800]
mitigation_levelGaano karaming error suppression at mitigation ang ilalapat. Sumangguni sa seksyon ng Antas ng mitigation para sa karagdagang impormasyon tungkol sa mga pamamaraang ginagamit sa bawat antas.1 / 2 / 31
optimization_levelGaano karaming optimization ang isasagawa sa mga circuit. Ang Mas mataas na antas ay nagge-generate ng mas na-optimize na mga circuit, ngunit mas matagal ang transpilation time.1 / 2 / 32
dynamical_decouplingenableKung ie-enable ang dynamical decoupling. Sumangguni sa Mga teknik ng error suppression at mitigation para sa paliwanag ng pamamaraan.True/FalseTrue
sequence_typeKung aling dynamical decoupling sequence ang gagamitin.
* XX: gamitin ang sequence na tau/2 - (+X) - tau - (+X) - tau/2
* XpXm: gamitin ang sequence na tau/2 - (+X) - tau - (-X) - tau/2
* XY4: gamitin ang sequence na
tau/2 - (+X) - tau - (+Y) - tau (-X) - tau - (-Y) - tau/2
'XX'/'XpXm'/'XY4''XX'
twirlingenable_gatesKung ilalapat ang 2-qubit Clifford gate twirling.True/FalseFalse
enable_measureKung ie-enable ang twirling ng mga measurement.True/FalseTrue
resiliencemeasure_mitigationKung ie-enable ang TREX measurement error mitigation method. Sumangguni sa Mga teknik ng error suppression at mitigation para sa paliwanag ng pamamaraan.True/FalseTrue
zne_mitigationKung io-on ang Zero Noise Extrapolation error mitigation method. Sumangguni sa Mga teknik ng error suppression at mitigation para sa paliwanag ng pamamaraan.True/FalseFalse
zneamplifierKung aling teknik ang gagamitin para sa pagpapalaki ng noise. Isa sa:
- gate_folding (default) gumagamit ng 2-qubit gate folding para palakihin ang noise. Kung ang noise factor ay nangangailangan na palakihin lamang ang isang subset ng mga gate, ang mga gate na ito ay random na pinipili.

- gate_folding_front gumagamit ng 2-qubit gate folding para palakihin ang noise. Kung ang noise factor ay nangangailangan na palakihin lamang ang isang subset ng mga gate, ang mga gate na ito ay pinipili mula sa harapan ng topologically ordered DAG circuit.

- gate_folding_back gumagamit ng 2-qubit gate folding para palakihin ang noise. Kung ang noise factor ay nangangailangan na palakihin lamang ang isang subset ng mga gate, ang mga gate na ito ay pinipili mula sa likod ng topologically ordered DAG circuit.

- pea gumagamit ng teknik na tinatawag na Probabilistic error amplification (PEA) para palakihin ang noise. Sumangguni sa Mga teknik ng error suppression at mitigation para sa paliwanag ng pamamaraan.
gate_folding / gate_folding_front / gate_folding_back / peagate_folding
noise_factorsMga noise factor na gagamitin para sa noise amplification.listahan ng mga float; bawat float >= 1(1, 1.5, 2) para sa PEA, at (1, 3, 5) para sa iba.
extrapolatorMga noise factor para sa pag-evaluate ng fit extrapolation models. Ang opsyon na ito ay hindi nakakaapekto sa execution o model fitting sa anumang paraan; tinutukoy lamang nito ang mga punto kung saan ine-evaluate ang mga extrapolator object para ibalik sa mga data field na tinatawag na evs_extrapolated at stds_extrapolated.isa o higit pa sa exponential,linear, double_exponential,polynomial_degree_(1 <= k <= 7)(exponential, linear)
pec_mitigationKung io-on ang Probabilistic Error Cancellation error mitigation method. Sumangguni sa Mga teknik ng error suppression at mitigation para sa paliwanag ng pamamaraan.True/FalseFalse
pecmax_overheadAng maximum na circuit sampling overhead na pinahihintulutan, o None para walang maximum.None/ integer >1100

Sa sumusunod na halimbawa, ang pagtatakda ng mitigation level sa 1 ay unang nag-a-off ng ZNE mitigation, ngunit ang pagtatakda ng zne_mitigation sa True ay nino-override ang kaugnay na setup mula sa mitigation_level.

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

Mga Output​

Ang output ng isang Circuit function ay isang PrimitiveResult, na naglalaman ng dalawang field:

  • Isa o higit pang PubResult na mga object. Maaaring i-index ang mga ito nang direkta mula sa PrimitiveResult.

  • Job-level na metadata.

Ang bawat PubResult ay naglalaman ng data at metadata na field.

  • Ang data field ay naglalaman ng hindi bababa sa isang array ng mga expectation value (PubResult.data.evs) at isang array ng mga standard error (PubResult.data.stds). Maaari rin itong maglaman ng karagdagang data, depende sa mga opsyon na ginamit.

  • Ang metadata field ay naglalaman ng PUB-level na metadata (PubResult.metadata).

Inilalarawan ng sumusunod na code snippet ang format ng PrimitiveResult (at kaugnay na 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}

Pagkuha ng mga mensahe ng error​

Kung ang status ng iyong workload ay ERROR, gamitin ang job.result() para kunin ang mensahe ng error para makatulong sa pag-debug tulad ng sumusunod:

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

print(job.result())

Kumuha ng suporta​

Makipag-ugnayan sa IBM Quantum support, at isama ang sumusunod na impormasyon:

  • Qiskit Function Job ID (qiskit-ibm-catalog), job.job_id
  • Isang detalyadong paglalarawan ng isyu
  • Anumang kaugnay na mensahe o code ng error
  • Mga hakbang para muling mapalabas ang isyu

Mga Susunod na Hakbang​

Mga Rekomendasyon