Noise learning helper
Mga bersyon ng package
Ang code sa pahinang ito ay ginawa gamit ang mga sumusunod na requirements. Inirerekomenda naming gamitin ang mga bersyong ito o mas bago pa.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
Ang mga teknik sa error mitigation na PEA at PEC ay parehong gumagamit ng noise learning component na batay sa isang Pauli-Lindblad noise model, na karaniwang pinamamahalaan sa panahon ng pagpapatupad pagkatapos mag-submit ng isa o higit pang mga trabaho sa pamamagitan ng qiskit-ibm-runtime nang walang lokal na access sa fitted noise model. Gayunpaman, mula sa qiskit-ibm-runtime 0.27.1, isang NoiseLearner at kaugnay na NoiseLearnerOptions na klase ang nilikha para makuha ang mga resulta ng mga noise learning experiment na ito. Ang mga resultang ito ay maaaring i-store nang lokal bilang isang NoiseLearnerResult at gamitin bilang input sa mga susunod na eksperimento. Ibinibigay ng pahinang ito ang pangkalahatang-ideya ng paggamit nito at ng mga kaugnay na opsyon na makukuha.
Pangkalahatang-ideyaβ
Ang NoiseLearner na klase ay nagsasagawa ng mga eksperimento na nagtatasa ng mga proseso ng ingay batay sa isang Pauli-Lindblad noise model para sa isa (o higit pa) na mga circuit. Mayroon itong run() na pamamaraan na nagpapatakbo ng mga learning experiment at tumatanggap bilang input ng alinman sa isang listahan ng mga circuit o isang PUB, at nagbabalik ng NoiseLearnerResult na naglalaman ng mga natutunang noise channel at metadata tungkol sa mga isinumiteng trabaho. Sa ibaba ay isang code snippet na nagpapakita ng paggamit ng helper program.
# Added by doQumentation β required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit import QuantumCircuit
from qiskit.transpiler import CouplingMap
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService, EstimatorV2
from qiskit_ibm_runtime.noise_learner import NoiseLearner
from qiskit_ibm_runtime.options import (
NoiseLearnerOptions,
ResilienceOptionsV2,
EstimatorOptions,
)
# Build a circuit with two entangling layers
num_qubits = 27
edges = list(CouplingMap.from_line(num_qubits, bidirectional=False))
even_edges = edges[::2]
odd_edges = edges[1::2]
circuit = QuantumCircuit(num_qubits)
for pair in even_edges:
circuit.cx(pair[0], pair[1])
for pair in odd_edges:
circuit.cx(pair[0], pair[1])
# Choose a backend to run on
service = QiskitRuntimeService()
backend = service.least_busy()
# Transpile the circuit for execution
pm = generate_preset_pass_manager(backend=backend, optimization_level=3)
circuit_to_learn = pm.run(circuit)
# Instantiate a NoiseLearner object and execute the noise learning program
learner = NoiseLearner(mode=backend)
job = learner.run([circuit_to_learn])
noise_model = job.result()
Ang resultang NoiseLearnerResult.data ay isang listahan ng mga LayerError na object na naglalaman ng noise model para sa bawat indibidwal na entangling layer na kabilang sa target na circuit(s). Bawat LayerError ay nag-iimbak ng impormasyon ng layer, sa anyo ng isang circuit at isang set ng mga qubit label, kasama ang PauliLindbladError para sa noise model na natuto para sa ibinigay na layer.
print(
f"Noise learner result contains {len(noise_model.data)} entries"
f" and has the following type:\n {type(noise_model)}\n"
)
print(
f"Each element of `NoiseLearnerResult` then contains"
f" an object of type:\n {type(noise_model.data[0])}\n"
)
print(
f"And each of these `LayerError` objects possess"
f" data on the generators for the error channel: \n{noise_model.data[0].error.generators}\n"
)
print(f"Along with the error rates: \n{noise_model.data[0].error.rates}\n")
Noise learner result contains 2 entries and has the following type:
<class 'qiskit_ibm_runtime.utils.noise_learner_result.NoiseLearnerResult'>
Each element of `NoiseLearnerResult` then contains an object of type:
<class 'qiskit_ibm_runtime.utils.noise_learner_result.LayerError'>
And each of these `LayerError` objects possess data on the generators for the error channel:
['IIIIIIIIIIIIIIIIIIIIIIIIIIX', 'IIIIIIIIIIIIIIIIIIIIIIIIIIY',
'IIIIIIIIIIIIIIIIIIIIIIIIIIZ', 'IIIIIIIIIIIIIIIIIIIIIIIIIXI',
'IIIIIIIIIIIIIIIIIIIIIIIIIXX', 'IIIIIIIIIIIIIIIIIIIIIIIIIXY',
'IIIIIIIIIIIIIIIIIIIIIIIIIXZ', 'IIIIIIIIIIIIIIIIIIIIIIIIIYI',
'IIIIIIIIIIIIIIIIIIIIIIIIIYX', 'IIIIIIIIIIIIIIIIIIIIIIIIIYY',
'IIIIIIIIIIIIIIIIIIIIIIIIIYZ', 'IIIIIIIIIIIIIIIIIIIIIIIIIZI',
'IIIIIIIIIIIIIIIIIIIIIIIIIZX', 'IIIIIIIIIIIIIIIIIIIIIIIIIZY',
'IIIIIIIIIIIIIIIIIIIIIIIIIZZ', 'IIIIIIIIIIIIIIIIIIIIIIIIXII',
'IIIIIIIIIIIIIIIIIIIIIIIIXXI', 'IIIIIIIIIIIIIIIIIIIIIIIIXYI',
'IIIIIIIIIIIIIIIIIIIIIIIIXZI', 'IIIIIIIIIIIIIIIIIIIIIIIIYII',
'IIIIIIIIIIIIIIIIIIIIIIIIYXI', 'IIIIIIIIIIIIIIIIIIIIIIIIYYI',
'IIIIIIIIIIIIIIIIIIIIIIIIYZI', 'IIIIIIIIIIIIIIIIIIIIIIIIZII',
'IIIIIIIIIIIIIIIIIIIIIIIIZXI', 'IIIIIIIIIIIIIIIIIIIIIIIIZYI',
'IIIIIIIIIIIIIIIIIIIIIIIIZZI', 'IIIIIIIIIIIIIIIIIIIIIIIXIII',
'IIIIIIIIIIIIIIIIIIIIIIIXXII', 'IIIIIIIIIIIIIIIIIIIIIIIXYII',
'IIIIIIIIIIIIIIIIIIIIIIIXZII', 'IIIIIIIIIIIIIIIIIIIIIIIYIII',
'IIIIIIIIIIIIIIIIIIIIIIIYXII', 'IIIIIIIIIIIIIIIIIIIIIIIYYII',
'IIIIIIIIIIIIIIIIIIIIIIIYZII', 'IIIIIIIIIIIIIIIIIIIIIIIZIII',
'IIIIIIIIIIIIIIIIIIIIIIIZXII', 'IIIIIIIIIIIIIIIIIIIIIIIZYII',
'IIIIIIIIIIIIIIIIIIIIIIIZZII', 'IIIIIIIIIIIIIIIIIIIIIIXIIII',
'IIIIIIIIIIIIIIIIIIIIIIXXIII', 'IIIIIIIIIIIIIIIIIIIIIIXYIII',
'IIIIIIIIIIIIIIIIIIIIIIXZIII', 'IIIIIIIIIIIIIIIIIIIIIIYIIII',
'IIIIIIIIIIIIIIIIIIIIIIYXIII', 'IIIIIIIIIIIIIIIIIIIIIIYYIII',
'IIIIIIIIIIIIIIIIIIIIIIYZIII', 'IIIIIIIIIIIIIIIIIIIIIIZIIII',
'IIIIIIIIIIIIIIIIIIIIIIZXIII', 'IIIIIIIIIIIIIIIIIIIIIIZYIII',
'IIIIIIIIIIIIIIIIIIIIIIZZIII', 'IIIIIIIIIIIIIIIIIIIIIXIIIII',
'IIIIIIIIIIIIIIIIIIIIIXXIIII', 'IIIIIIIIIIIIIIIIIIIIIXYIIII',
'IIIIIIIIIIIIIIIIIIIIIXZIIII', 'IIIIIIIIIIIIIIIIIIIIIYIIIII',
'IIIIIIIIIIIIIIIIIIIIIYXIIII', 'IIIIIIIIIIIIIIIIIIIIIYYIIII',
'IIIIIIIIIIIIIIIIIIIIIYZIIII', 'IIIIIIIIIIIIIIIIIIIIIZIIIII',
'IIIIIIIIIIIIIIIIIIIIIZXIIII', 'IIIIIIIIIIIIIIIIIIIIIZYIIII',
'IIIIIIIIIIIIIIIIIIIIIZZIIII', 'IIIIIIIIIIIIIIIIIIIIXIIIIII',
'IIIIIIIIIIIIIIIIIIIIYIIIIII', 'IIIIIIIIIIIIIIIIIIIIZIIIIII',
'IIIIIIIIIIIIIIIIIIIXIIIIIII', 'IIIIIIIIIIIIIIIIIIIXXIIIIII',
'IIIIIIIIIIIIIIIIIIIXYIIIIII', 'IIIIIIIIIIIIIIIIIIIXZIIIIII',
'IIIIIIIIIIIIIIIIIIIYIIIIIII', 'IIIIIIIIIIIIIIIIIIIYXIIIIII',
'IIIIIIIIIIIIIIIIIIIYYIIIIII', 'IIIIIIIIIIIIIIIIIIIYZIIIIII', ...]
Along with the error rates:
[8.80e-04 6.50e-04 3.10e-04 5.60e-04 0.00e+00 0.00e+00 0.00e+00 3.00e-04
6.00e-05 1.30e-04 7.00e-05 3.90e-04 0.00e+00 0.00e+00 3.00e-05 3.70e-04
0.00e+00 5.00e-05 7.50e-04 5.50e-04 5.00e-05 0.00e+00 7.60e-04 5.00e-04
5.60e-04 5.60e-04 2.50e-04 5.00e-05 7.00e-05 2.00e-04 1.40e-04 8.00e-05
2.80e-04 0.00e+00 1.70e-04 4.20e-04 3.00e-05 1.00e-05 1.30e-04 4.40e-04
1.00e-04 2.60e-04 7.10e-04 1.10e-04 2.60e-04 1.00e-04 6.80e-04 1.02e-03
4.60e-04 5.30e-04 3.00e-04 0.00e+00 0.00e+00 3.40e-04 0.00e+00 0.00e+00
2.70e-04 0.00e+00 5.00e-05 6.70e-04 0.00e+00 2.20e-04 0.00e+00 4.40e-04
4.30e-04 8.30e-04 1.42e-03 0.00e+00 0.00e+00 1.44e-03 8.70e-04 0.00e+00
0.00e+00 1.05e-03 6.80e-04 5.90e-04 5.10e-04 3.10e-04 5.60e-04 0.00e+00
4.00e-05 0.00e+00 5.50e-04 1.00e-05 2.00e-05 0.00e+00 1.10e-04 0.00e+00
1.20e-04 0.00e+00 2.20e-04 7.00e-05 4.00e-05 3.80e-04 2.80e-04 4.00e-05
7.00e-05 3.00e-04 1.20e-04 6.00e-04 5.80e-04 1.80e-04 5.00e-04 1.20e-04
2.00e-05 2.00e-05 4.80e-04 2.00e-05 0.00e+00 1.40e-04 4.00e-04 3.00e-05
0.00e+00 0.00e+00 4.40e-04 1.10e-04 5.00e-05 6.00e-04 2.30e-04 5.00e-05
1.10e-04 5.30e-04 3.60e-04 6.80e-04 6.70e-04 2.80e-04 4.90e-04 1.30e-04
6.00e-05 7.20e-04 3.00e-05 9.00e-05 1.10e-04 3.30e-04 6.00e-05 1.30e-04
7.60e-04 1.30e-04 1.50e-04 1.30e-04 0.00e+00 3.10e-04 2.50e-04 5.10e-04
0.00e+00 6.00e-05 2.50e-04 2.40e-04 8.00e-05 0.00e+00 0.00e+00 2.70e-04
0.00e+00 8.00e-05 0.00e+00 7.80e-04 7.00e-05 0.00e+00 0.00e+00 2.50e-04
1.70e-04 2.00e-05 4.50e-04 3.10e-04 2.00e-05 1.70e-04 4.60e-04 1.30e-04
3.20e-04 3.50e-04 3.80e-04 2.70e-04 2.00e-04 8.00e-05 1.00e-05 4.10e-04
0.00e+00 0.00e+00 0.00e+00 2.36e-03 0.00e+00 7.00e-05 1.20e-04 9.40e-04
0.00e+00 1.90e-04 1.38e-03 7.50e-04 1.90e-04 0.00e+00 1.14e-03 7.30e-04
5.70e-04 4.20e-04 6.20e-04 0.00e+00 2.20e-04 5.00e-05 1.20e-04 0.00e+00
0.00e+00 1.90e-04 6.00e-05 1.10e-04 2.10e-04 1.50e-04 1.20e-04 2.90e-04
4.60e-04 2.10e-04 4.00e-05 3.00e-05 1.70e-04 3.10e-04 1.00e-04 1.70e-04
3.00e-05 3.90e-04 0.00e+00 6.00e-04 5.60e-04 1.40e-04 3.50e-04 1.00e-04
1.20e-04 9.00e-05 3.20e-04 2.00e-05 1.70e-04 3.00e-05 4.00e-04 1.50e-04
0.00e+00 1.60e-04 1.90e-04 9.00e-05 6.00e-05 4.50e-04 3.10e-04 6.00e-05
9.00e-05 3.70e-04 2.80e-04 6.50e-04 5.30e-04 3.30e-04 8.00e-05 8.00e-05
5.00e-05 2.50e-04 3.50e-04 4.00e-05 0.00e+00 0.00e+00 1.70e-04 1.30e-04
0.00e+00 0.00e+00 7.00e-05 1.70e-04 1.00e-05 4.20e-04 2.00e-04 1.00e-05
1.70e-04 4.80e-04 1.40e-03 4.70e-04 4.00e-04 3.90e-04 4.40e-04 2.00e-04
1.90e-04 7.20e-04 1.80e-04 1.00e-04 0.00e+00 5.70e-04 1.90e-04 2.00e-04
8.70e-04 1.20e-04 1.70e-04 0.00e+00 0.00e+00 3.80e-04 2.40e-04 4.80e-04
6.00e-05 0.00e+00 9.00e-05 6.50e-04 2.00e-05 8.00e-05 1.40e-04 5.80e-04
1.30e-04 0.00e+00 2.00e-05 1.00e-05 1.60e-04 1.00e-05 1.80e-04 4.40e-04
8.00e-05 1.40e-04 4.40e-04 3.90e-04 1.40e-04 8.00e-05 3.90e-04 4.10e-04
8.80e-04 7.30e-04 1.90e-04]
Ang LayerError.error na katangian ng noise learning result ay naglalaman ng mga generator at error rate ng fitted na Pauli Lindblad model, na may ganitong anyo
kung saan ang ay ang LayerError.rates at ang ay ang mga Pauli operator na tinukoy sa LayerError.generators.
Mga opsyon sa noise learningβ
Maaari kang pumili mula sa ilang opsyon na ilalagay kapag nag-instantiate ka ng NoiseLearner na object. Ang mga opsyong ito ay naka-encapsulate ng qiskit_ibm_runtime.options.NoiseLearnerOptions na klase at kasama ang kakayahang tukuyin ang maximum na mga layer na matututunan, bilang ng mga randomization, at ang twirling strategy, bukod sa iba pa. Sumangguni sa API documentation tungkol sa NoiseLearnerOptions para sa mas detalyadong impormasyon.
Sa ibaba ay isang simpleng halimbawa ng kung paano gamitin ang NoiseLearnerOptions sa isang NoiseLearner na eksperimento:
# Build a GHZ circuit
circuit = QuantumCircuit(10)
circuit.h(0)
circuit.cx(range(0, 9), range(1, 10))
# Choose a backend to run on
service = QiskitRuntimeService()
backend = service.least_busy()
# Transpile the circuit for execution
pm = generate_preset_pass_manager(backend=backend, optimization_level=3)
circuit_to_run = pm.run(circuit_to_learn)
# Instantiate a noise learner options object
learner_options = NoiseLearnerOptions(
max_layers_to_learn=3, num_randomizations=32, twirling_strategy="all"
)
# Instantiate a NoiseLearner object and execute the noise learning program
learner = NoiseLearner(mode=backend, options=learner_options)
job = learner.run([circuit_to_run])
noise_model = job.result()
Ipasok ang noise model sa isang primitiveβ
Ang noise model na natuto sa circuit ay maaari ring gamitin bilang input sa EstimatorV2 primitive na ipinatupad sa Qiskit IBM Runtime. Ito ay maaaring ipasa sa primitive sa ilang iba't ibang paraan. Ang susunod na tatlong halimbawa ay nagpapakita kung paano mo maipapasa ang noise model sa estimator.options na katangian nang direkta, sa pamamagitan ng isang ResilienceOptionsV2 na object bago mag-instantiate ng Estimator primitive, at sa pamamagitan ng pagpasa ng isang naaangkop na na-format na dictionary.
# pass the noise model to the `estimator.options` attribute directly
estimator = EstimatorV2(mode=backend)
estimator.options.resilience.layer_noise_model = noise_model
# Specify options via a ResilienceOptionsV2 object
resilience_options = ResilienceOptionsV2(layer_noise_model=noise_model)
estimator_options = EstimatorOptions(resilience=resilience_options)
estimator = EstimatorV2(mode=backend, options=estimator_options)
# Specify options via a dictionary
options_dict = {
"resilience_level": 2,
"resilience": {"layer_noise_model": noise_model},
}
estimator = EstimatorV2(mode=backend, options=options_dict)
Kapag naipasa na ang noise model sa EstimatorV2 na object, maaari na itong gamitin para magpatakbo ng mga workload at magsagawa ng error mitigation gaya ng karaniwan.
Mga susunod na hakbangβ
- Magbasa pa tungkol sa pag-configure ng error mitigation.
- Suriin ang EstimatorOptions API reference at ResilienceOptionsV2 API reference.
- Matuto pa tungkol sa Mga teknik sa error mitigation at suppression na makukuha sa pamamagitan ng Qiskit Runtime.
- Suriin kung paano Tukuyin ang mga opsyon para sa Qiskit Runtime primitives.
- Basahin ang Mag-migrate sa V2 primitives.