ระบุตัวเลือก Estimator
เวอร์ชันแพ็คเกจ
โค้ดในหน้านี้ได้รับการพัฒนาโดยใช้ข้อกำหนดต่อไปนี้ แนะนำให้ใช้เวอร์ชันเหล่านี้หรือใหม่กว่า
qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
คุณสามารถใช้ตัวเลือกเพื่อปรับแต่ง Estimator primitive ในขณะที่ interface ของเมธอด run() ของ primitives นั้นเหมือนกันในทุกการใช้งาน แต่ตัวเลือกของพวกเขาไม่เหมือนกัน ดูข้อมูลเกี่ยวกับตัวเลือก qiskit.primitives.BaseEstimatorV2 และ qiskit_aer.BaseEstimatorV2 ได้ที่ API references
Notes :
- คุณสามารถดูตัวเลือกที่มีอยู่และอัปเดตค่าตัวเลือกระหว่างหรือหลังจากการ initialize Estimator
- ใช้เมธอด
update()เพื่อนำการเปลี่ยนแปลงไปใช้กับ attributeoptions - หากคุณไม่ระบุค่าสำหรับตัวเลือก ค่านั้นจะได้รับค่าพิเศษ
Unsetและจะใช้ค่าเริ่มต้นของ server - attribute
optionsเป็นประเภท Pythondataclassคุณสามารถใช้เมธอดในตัวasdictเพื่อแปลงเป็น dictionary
ตั้งค่าตัวเลือก Estimator
คุณสามารถตั้งค่าตัวเลือกเมื่อ initialize Estimator หลังจาก initialize Estimator หรือ (สำหรับ precision เท่านั้น) ในเมธอด run()
การ initialize Primitive
คุณสามารถส่ง instance ของ options class หรือ dictionary เมื่อ initialize Estimator ซึ่งจะทำสำเนาของตัวเลือกเหล่านั้น ดังนั้นการเปลี่ยนแปลง dictionary หรือ options instance ดั้งเดิมจะไม่ส่งผลต่อตัวเลือกที่ primitive เป็นเจ้าของ
Options class
เมื่อสร้าง instance ของ class EstimatorV2 คุณสามารถส่ง instance ของ options class เข้ามาได้ ตัวเลือกเหล่านั้นจะถูกนำไปใช้เมื่อคุณใช้ run() เพื่อทำการคำนวณ ระบุตัวเลือกในรูปแบบนี้: options.option.sub-option.sub-sub-option = choice ตัวอย่างเช่น: options.dynamical_decoupling.enable = True
ตัวอย่าง:
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit_ibm_runtime.options import EstimatorOptions
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
options = EstimatorOptions(
resilience_level=2,
resilience={"zne_mitigation": True, "zne": {"noise_factors": [1, 3, 5]}},
)
# or...
options = EstimatorOptions()
options.resilience_level = 2
options.resilience.zne_mitigation = True
options.resilience.zne.noise_factors = [1, 3, 5]
estimator = Estimator(mode=backend, options=options)
Dictionary
คุณสามารถระบุตัวเลือกเป็น dictionary เมื่อ initialize Estimator
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
# Setting options during initialization
estimator = Estimator(
backend,
options={
"resilience_level": 2,
"resilience": {
"zne_mitigation": True,
"zne": {"noise_factors": [1, 3, 5]},
},
},
)
อัปเดตตัวเลือกหลังจาก initialization
คุณสามารถระบุตัวเลือกในรูปแบบนี้: estimator.options.option.sub-option.sub-sub-option = choice เพื่อใช้ประโยชน์จาก auto-complete หรือใช้เมธอด update() เพื่ออัปเดตแบบ bulk
คลาสตัวเลือก EstimatorV2 (EstimatorOptions) ไม่จำเป็นต้องสร้าง instance หากคุณตั้งค่าตัวเลือกหลังจาก initialize primitive
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
estimator = Estimator(mode=backend)
# Setting options after initialization
# This uses auto-complete.
estimator.options.default_precision = 0.01
# This does bulk update.
estimator.options.update(
default_precision=0.02, resilience={"zne_mitigation": True}
)
เมธอด run()
ค่าที่คุณสามารถส่งไปยัง run() ได้เฉพาะค่าที่กำหนดไว้ใน interface เท่านั้น นั่นคือ precision สำหรับ Estimator ซึ่งจะเขียนทับค่าใดก็ตามที่ตั้งไว้สำหรับ default_precision ในการรันปัจจุบัน
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()
observable = SparsePauliOp("Z" * 3)
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
isa_observable1 = observable.apply_layout(transpiled1.layout)
isa_observable2 = observable.apply_layout(transpiled2.layout)
estimator = Estimator(mode=backend)
# Default precision to use if not specified in run()
estimator.options.default_precision = 0.01
# Run two circuits, requiring a precision of .02 for both.
estimator.run(
[(transpiled1, isa_observable1), (transpiled2, isa_observable2)],
precision=0.02,
)
<RuntimeJobV2('d7amh42k86tc73a1sa20', 'estimator')>
กรณีพิเศษ: precision
เมธอด EstimatorV2.run รับ arguments สองตัว: รายการของ PUBs ซึ่งแต่ละอันสามารถระบุค่าเฉพาะ PUB สำหรับ precision และ keyword argument ของ precision ค่า precision เหล่านี้เป็นส่วนหนึ่งของ interface การรัน Estimator และเป็นอิสระจากตัวเลือกของ Runtime Estimator ค่าเหล่านี้มีความสำคัญเหนือกว่าค่าใดๆ ที่ระบุเป็นตัวเลือก เพื่อให้สอดคล้องกับ Estimator abstraction
อย่างไรก็ตาม หาก precision ไม่ได้ถูกระบุโดย PUB หรือใน keyword argument ของ run (หรือหากทั้งหมดเป็น None) ค่า precision จากตัวเลือกจะถูกใช้ โดยเฉพาะ default_precision
พารามิเตอร์ precision เหล่านี้ใช้สำหรับระบุ ค่าเป้าหมาย precision เท่านั้น และผลลัพธ์ไม่ได้รับประกันว่าจะถึง precision ที่ระบุ
โปรดทราบว่าตัวเลือก Estimator มีทั้ง default_shots และ default_precision อย่างไรก็ตาม เนื่องจาก gate-twirling เปิดใช้งานโดยค่าเริ่มต้น ผลคูณของ num_randomizations และ shots_per_randomization จะมีความสำคัญเหนือกว่าตัวเลือกทั้งสองนั้น
โดยเฉพาะสำหรับ Estimator PUB ใดๆ:
- หาก PUB ระบุ precision ให้ใช้ค่านั้น
- หาก keyword argument ของ precision ถูกระบุใน
runให้ใช้ค่านั้น - หาก
twirlingเปิดใช้งาน (True โดยค่าเริ่มต้น) ให้ใช้ผลคูณของnum_randomizationsและshots_per_randomizationตามที่ระบุใน ตัวเลือกtwirling - หาก
estimator.options.default_shotsถูกระบุ ให้ใช้ค่านั้นเพื่อควบคุมปริมาณข้อมูล - หาก
estimator.options.default_precisionถูกระบุ ให้ใช้ค่านั้น
ตัวอย่างเช่น หาก precision ถูกระบุในสี่ที่ทั้งหมด ค่าที่มีความสำคัญสูงสุด (precision ที่ระบุใน PUB) จะถูกใช้
แม้ว่า precision ที่ระบุใน PUB และใน run จะมีความสำคัญสูงกว่า แต่ job จะล้มเหลวหาก twirling เปิดใช้งานและผลคูณของ num_randomizations และ shots_per_randomization น้อยกว่าจำนวน shots ที่ต้องการเพื่อให้ได้ precision นั้น ในสถานการณ์นี้ EstimatorV2 ไม่สามารถจัดสรร shots ระหว่าง num_randomizations ที่ระบุได้
Precision มีความสัมพันธ์แบบผกผันกับการใช้งาน กล่าวคือ ยิ่ง precision ต่ำ ยิ่งใช้เวลา QPU มากขึ้นในการรัน
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
observable = SparsePauliOp("Z" * 3)
circuit = random_iqp(3)
circuit.measure_all()
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
isa_circuit = pass_manager.run(circuit)
isa_observable = observable.apply_layout(isa_circuit.layout)
# Setting precision during primitive initialization
estimator = Estimator(mode=backend, options={"default_precision": 0.05})
# Run with precision=0.02, overwriting the default.
estimator.run(
[(isa_circuit, isa_observable1)],
precision=0.02,
)
<RuntimeJobV2('d8286b00bvlc73d1vn50', 'estimator')>
ปิดการ mitigate errors และการกดข่มข้อผิดพลาดทั้งหมด
คุณสามารถปิดการ mitigate errors และการกดข่มข้อผิดพลาดทั้งหมดได้ เช่น หากคุณกำลังทำการวิจัยเกี่ยวกับเทคนิคการ mitigation ของคุณเอง เพื่อให้สำเร็จ ตั้งค่า resilience_level = 0
ตัวอย่าง:
from qiskit_ibm_runtime import EstimatorV2 as Estimator, QiskitRuntimeService
# Define the service. This allows you to access an IBM QPU.
service = QiskitRuntimeService()
# Get a backend
backend = service.least_busy(operational=True, simulator=False)
# Define Estimator
estimator = Estimator(backend)
options = estimator.options
# Turn off all error mitigation and suppression
options.resilience_level = 0
ตัวเลือกที่มีอยู่
ตารางต่อไปนี้ระบุตัวเลือกจากเวอร์ชันล่าสุดของ qiskit-ibm-runtime หากต้องการดูเวอร์ชันตัวเลือกเก่า ไปที่ API reference ของ qiskit-ibm-runtime และเลือกเวอร์ชันก่อนหน้า
default_shots
จำนวน shots ทั้งหมดที่จะใช้ต่อ circuit ต่อ configuration
ตัวเลือก: จำนวนเต็ม >= 0
ค่าเริ่มต้น: None
default_precision
precision เริ่มต้นที่จะใช้สำหรับ PUB หรือการเรียก run() ที่ไม่ระบุ precision
ตัวเลือก: จำนวนทศนิยม > 0
ค่าเริ่มต้น: 0.015625 (1 / sqrt(4096))
dynamical_decoupling
ควบคุมการตั้งค่า dynamical decoupling error mitigation
เอกสาร API dynamical_decoupling
dynamical_decoupling.enable
ตัวเลือก: True, False
ค่าเริ่มต้น: False
dynamical_decoupling.extra_slack_distribution
ตัวเลือก: middle, edges
ค่าเริ่มต้น: middle
dynamical_decoupling.scheduling_method
ตัวเลือก: asap, alap
ค่าเริ่มต้น: alap
dynamical_decoupling.sequence_type
ตัวเลือก: XX, XpXm, XY4
ค่าเริ่มต้น: XX
dynamical_decoupling.skip_reset_qubits
ตัวเลือก: True, False
ค่าเริ่มต้น: False
environment
environment.callback
ฟังก์ชันที่เรียกได้ซึ่งรับ Job ID และ Job result
ตัวเลือก: None
ค่าเริ่มต้น: None
environment.job_tags
รายการ tags
ตัวเลือก: None
ค่าเริ่มต้น: None
environment.log_level
ตัวเลือก: DEBUG, INFO, WARNING, ERROR, CRITICAL
ค่าเริ่มต้น: WARNING
environment.private
ตัวเลือก: True, False
ค่าเริ่มต้น: False
execution
execution.init_qubits
ว่าจะ reset qubit ไปยัง ground state สำหรับแต่ละ shot หรือไม่
ตัวเลือก: True, False
ค่าเริ่มต้น: True
execution.rep_delay
ความล่าช้าระหว่างการวัดและ quantum circuit ต่อมา
ตัวเลือก: ค่าในช่วงที่จัดหาโดย backend.rep_delay_range
ค่าเริ่มต้น: กำหนดโดย backend.default_rep_delay
max_execution_time
จำกัดระยะเวลาที่งานสามารถรันได้ เป็นวินาที ดูรายละเอียดที่ คู่มือเวลารันสูงสุด
ตัวเลือก: จำนวนเต็มเป็นวินาทีในช่วง [1, 10800]
ค่าเริ่มต้น: 10800 (3 ชั่วโมง)
resilience
ตัวเลือก resilience ขั้นสูงเพื่อปรับแต่งกลยุทธ์ resilience
resilience.layer_noise_learning
ตัวเลือกสำหรับการเรียนรู้ layer noise
resilience.layer_noise_learning.layer_pair_depths
ตัวเลือก: list[int] ของ 2-10 ค่าในช่วง [0, 200]
ค่าเริ่มต้น: (0, 1, 2, 4, 16, 32)
resilience.layer_noise_learning.max_layers_to_learn
ตัวเลือก: None, จำนวนเต็ม >= 1
ค่าเริ่มต้น: 4
resilience.layer_noise_learning.num_randomizations
ตัวเลือก: จำนวนเต็ม >= 1
ค่าเริ่มต้น: 32
resilience.layer_noise_learning.shots_per_randomization
ตัวเลือก: จำนวนเต็ม >= 1
ค่าเริ่มต้น: 128
resilience.layer_noise_model
ตัวเลือก: NoiseLearnerResult, Sequence[LayerError]
ค่าเริ่มต้น: None
resilience.measure_mitigation
ตัวเลือก: True, False
ค่าเริ่มต้น: True
resilience.measure_noise_learning
ตัวเลือกสำหรับการเรียนรู้ measurement noise
resilience.measure_noise_learning.num_randomizations
ตัวเลือก: จำนวนเต็ม >= 1
ค่าเริ่มต้น: 32
resilience.measure_noise_learning.shots_per_randomization
ตัวเลือก: จำนวนเต็ม, auto
ค่าเริ่มต้น: auto
resilience.pec_mitigation
ตัวเลือก: True, False
ค่าเริ่มต้น: False
resilience.pec
ตัวเลือก probabilistic error cancellation mitigation
resilience.pec.max_overhead
ตัวเลือก: None, จำนวนเต็ม >= 1
ค่าเริ่มต้น: 100
resilience.pec.noise_gain
ตัวเลือก: auto, จำนวนทศนิยมในช่วง [0, 1]
ค่าเริ่มต้น: auto
resilience.zne_mitigation
ตัวเลือก: True, False
ค่าเริ่มต้น: False
resilience.zne
resilience.zne.amplifier
ตัวเลือก: gate_folding, gate_folding_front, gate_folding_back, pea
ค่าเริ่มต้น: gate_folding
resilience.zne.extrapolated_noise_factors
ตัวเลือก: รายการของจำนวนทศนิยม
ค่าเริ่มต้น: [0, *noise_factors]
resilience.zne.extrapolator
ตัวเลือก: หนึ่งหรือมากกว่า: exponential, linear, double_exponential, polynomial_degree_(1 <= k <= 7), fallback
ค่าเริ่มต้น: (exponential, linear)
resilience.zne.noise_factors
ตัวเลือก: รายการของจำนวนทศนิยม; แต่ละจำนวนทศนิยม >= 1
ค่าเริ่มต้น: (1, 1.5, 2) สำหรับ PEA และ (1, 3, 5) สำหรับกรณีอื่น
resilience_level
ระดับ resilience ต่อ errors ระดับที่สูงกว่าจะสร้างผลลัพธ์ที่แม่นยำกว่าโดยแลกกับเวลาประมวลผลที่นานกว่า ดูส่วน ระดับ resilience ใน topic Noise management เพื่อเรียนรู้เพิ่มเติม
ตัวเลือก: 0, 1, 2
ค่าเริ่มต้น: 1
seed_estimator
simulator
ตัวเลือกที่จะส่งเมื่อ simulate backend
simulator.basis_gates
ตัวเลือก: รายการชื่อ basis gate ที่จะ unroll ไปยัง
ค่าเริ่มต้น: ชุดของ basis gates ทั้งหมดที่รองรับโดย Qiskit Aer simulator
simulator.coupling_map
ตัวเลือก: รายการของ directed two-qubit interactions
ค่าเริ่มต้น: None ซึ่งหมายถึงไม่มีข้อจำกัดการเชื่อมต่อ (การเชื่อมต่อเต็มรูปแบบ)
simulator.noise_model
ตัวเลือก: Qiskit Aer NoiseModel หรือการแสดงผล
ค่าเริ่มต้น: None
simulator.seed_simulator
ตัวเลือก: จำนวนเต็ม
ค่าเริ่มต้น: None
twirling
ตัวเลือก Twirling
twirling.enable_gates
ตัวเลือก: True, False
ค่าเริ่มต้น: False
twirling.enable_measure
ตัวเลือก: True, False
ค่าเริ่มต้น: True
twirling.num_randomizations
ตัวเลือก: auto, จำนวนเต็ม >= 1
ค่าเริ่มต้น: auto
twirling.shots_per_randomization
ตัวเลือก: auto, จำนวนเต็ม >= 1
ค่าเริ่มต้น: auto
twirling.strategy
ตัวเลือก: active, active-circuit, active-accum, all
ค่าเริ่มต้น: active-accum
experimental
ตัวเลือกเชิงทดลอง เมื่อมีให้ใช้งาน
ความเข้ากันได้ของฟีเจอร์
ฟีเจอร์ runtime บางอย่างไม่สามารถใช้ร่วมกันในงานเดียว คลิกที่แท็บที่เหมาะสมเพื่อดูรายการฟีเจอร์ที่เข้ากันไม่ได้กับฟีเจอร์ที่เลือก:
Fractional gates
เข้ากันไม่ได้กับ:
- Gate twirling
- PEA
- PEC
Gate-folding ZNE
อาจไม่ทำงานเมื่อใช้ custom gates เข้ากันไม่ได้กับ:
- PEA
- PEC
Gate twirling
เข้ากันไม่ได้กับ:
- Fractional gates
- Stretches
หมายเหตุอื่นๆ:
- Measurement twirling สามารถใช้ได้กับ terminal measurements เท่านั้น
- ไม่ทำงานกับ non-Clifford entanglers
PEA
เข้ากันไม่ได้กับ:
- Fractional gates
- Gate-folding ZNE
- PEC
PEC
เข้ากันไม่ได้กับ:
- Fractional gates
- Gate-folding ZNE
- PEA
ขั้นตอนถัดไป
- ดูรายละเอียดเพิ่มเติมเกี่ยวกับเมธอด
EstimatorV2ใน Estimator API reference - ตัดสินใจว่าจะรันงานใน execution mode ใด
- เรียนรู้เกี่ยวกับ การจัดการ noise ด้วย Estimator