ข้ามไปยังเนื้อหาหลัก

ระบุตัวเลือก 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 :

หมายเหตุเกี่ยวกับการระบุตัวเลือกใน Estimator primitives
  • คุณสามารถดูตัวเลือกที่มีอยู่และอัปเดตค่าตัวเลือกระหว่างหรือหลังจากการ initialize Estimator
  • ใช้เมธอด update() เพื่อนำการเปลี่ยนแปลงไปใช้กับ attribute options
  • หากคุณไม่ระบุค่าสำหรับตัวเลือก ค่านั้นจะได้รับค่าพิเศษ Unset และจะใช้ค่าเริ่มต้นของ server
  • attribute options เป็นประเภท Python dataclass คุณสามารถใช้เมธอดในตัว 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 ใดๆ:

  1. หาก PUB ระบุ precision ให้ใช้ค่านั้น
  2. หาก keyword argument ของ precision ถูกระบุใน run ให้ใช้ค่านั้น
  3. หาก twirling เปิดใช้งาน (True โดยค่าเริ่มต้น) ให้ใช้ผลคูณของ num_randomizations และ shots_per_randomization ตามที่ระบุใน ตัวเลือก twirling
  4. หาก estimator.options.default_shots ถูกระบุ ให้ใช้ค่านั้นเพื่อควบคุมปริมาณข้อมูล
  5. หาก 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

เอกสาร API default_shots

default_precision

precision เริ่มต้นที่จะใช้สำหรับ PUB หรือการเรียก run() ที่ไม่ระบุ precision

ตัวเลือก: จำนวนทศนิยม > 0

ค่าเริ่มต้น: 0.015625 (1 / sqrt(4096))

เอกสาร API default_precision

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

เอกสาร API 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

เอกสาร API 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

เอกสาร API resilience

resilience.layer_noise_learning

ตัวเลือกสำหรับการเรียนรู้ layer noise

เอกสาร API resilience.layer_noise_learning

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

เอกสาร API resilience.measure_noise_learning

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

เอกสาร API resilience.pec

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

เอกสาร API resilience_level

seed_estimator

ตัวเลือก: จำนวนเต็ม

ค่าเริ่มต้น: None

seed_estimator

simulator

ตัวเลือกที่จะส่งเมื่อ simulate backend

เอกสาร API simulator

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

เอกสาร API 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

ขั้นตอนถัดไป

คำแนะนำ