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

การระบุตัวเลือก Sampler

เวอร์ชันแพ็กเกจ

โค้ดในหน้านี้พัฒนาโดยใช้ข้อกำหนดต่อไปนี้ แนะนำให้ใช้เวอร์ชันเหล่านี้หรือใหม่กว่า

qiskit[all]~=2.5.2
qiskit-ibm-runtime~=0.47.0

คุณสามารถใช้ตัวเลือกเพื่อปรับแต่ง Sampler primitive ได้ ส่วนนี้จะเน้นวิธีระบุตัวเลือก IBM Quantum primitive อินเทอร์เฟซของเมธอด run() ของ primitive นั้นเหมือนกันทุกการใช้งาน แต่ตัวเลือกไม่ใช่ ดูข้อมูลเกี่ยวกับตัวเลือก qiskit.primitives.BackendSamplerV2 และ qiskit_aer.primitives.SamplerV2 ได้จาก API reference ที่เกี่ยวข้อง

ตั้งค่าตัวเลือก Sampler​

คุณตั้งค่าตัวเลือกได้เมื่อเริ่มต้น Sampler หลังจากเริ่มต้น Sampler หรืออัปเดตตัวเลือกหลังจากที่ Sampler ถูกเริ่มต้นแล้ว ดูคำแนะนำการใช้เทคนิคเหล่านี้ได้ที่หัวข้อ บทนำสู่ตัวเลือก

นอกจากนี้ คุณสามารถตั้งค่า shots ในเมธอด run() ได้ตามที่อธิบายในส่วนถัดไป

เมธอด Run()​

ค่าเดียวที่สามารถส่งไปยัง run() คือค่าที่กำหนดไว้ในอินเทอร์เฟซ นั่นคือ shots ซึ่งจะเขียนทับค่าที่ตั้งไว้สำหรับ default_shots ในการรันปัจจุบัน

# 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 SamplerV2 as Sampler
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager

service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)

circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()

pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)

transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)

sampler = Sampler(mode=backend)
# Default shots to use if not specified in run()
sampler.options.default_shots = 500
# Sample two circuits at 128 shots each.
sampler.run([transpiled1, transpiled2], shots=128)
<RuntimeJobV2('dab7ld3vpcac73ddek50', 'sampler')>

กรณีพิเศษ​

Shots​

เมธอด SamplerV2.run รับอาร์กิวเมนต์สองตัว ได้แก่ รายการ PUB ซึ่งแต่ละตัวสามารถระบุค่า shots เฉพาะ PUB และอาร์กิวเมนต์คีย์เวิร์ด shots ค่า shots เหล่านี้เป็นส่วนหนึ่งของอินเทอร์เฟซการดำเนินการ Sampler และเป็นอิสระจากตัวเลือกของ Runtime Sampler ค่าเหล่านี้มีลำดับความสำคัญสูงกว่าค่าที่ระบุเป็นตัวเลือก เพื่อให้สอดคล้องกับการ abstract ของ Sampler

อย่างไรก็ตาม หาก shots ไม่ได้ถูกระบุโดย PUB ใดหรือในอาร์กิวเมนต์คีย์เวิร์ดของ run (หรือถ้าทั้งหมดเป็น None) ค่า shots จากตัวเลือกจะถูกใช้ โดยเฉพาะ default_shots

สรุปแล้ว นี่คือลำดับความสำคัญในการระบุ shots ใน Sampler สำหรับ PUB ใด ๆ:

  1. ถ้า PUB ระบุ shots ให้ใช้ค่านั้น

  2. ถ้าอาร์กิวเมนต์คีย์เวิร์ด shots ถูกระบุใน run ให้ใช้ค่านั้น

  3. หาก twirling เปิดใช้งาน จะใช้ผลคูณของ num_randomizations และ shots_per_randomization ตามที่ระบุเป็น twirling options

  4. ถ้า sampler.options.default_shots ถูกระบุ ให้ใช้ค่านั้น

ดังนั้น ถ้า shots ถูกระบุในทุกตำแหน่งที่เป็นไปได้ ค่าที่มีลำดับความสำคัญสูงสุด (shots ที่ระบุใน PUB) จะถูกใช้

หมายเหตุ

แม้ว่า shots ที่ระบุใน PUB และใน run จะมีลำดับความสำคัญสูงกว่า แต่งานจะล้มเหลวถ้า twirling เปิดใช้งานและผลคูณของ num_randomizations และ shots_per_randomization มีค่าน้อยกว่าค่า shots ในสถานการณ์นี้ SamplerV2 ไม่สามารถจัดสรร shots ให้กับ num_randomizations ที่ระบุได้

ตัวอย่าง:

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager

service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)

circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()

pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)

transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)

# Setting shots during primitive initialization
sampler = Sampler(mode=backend, options={"default_shots": 4096})

# Setting options after primitive initialization
# This uses auto-complete.
sampler.options.default_shots = 2000

# This does bulk update. The value for default_shots is overridden
# if you specify shots with run() or in the PUB.
sampler.options.update(
default_shots=1024, dynamical_decoupling={"sequence_type": "XpXm"}
)

# Sample two circuits at 128 shots each.
sampler.run([transpiled1, transpiled2], shots=128)
<RuntimeJobV2('dab7lf3vpcac73ddek8g', 'sampler')>

ตัวเลือกที่มีให้ใช้​

ตารางต่อไปนี้แสดงตัวเลือกจากเวอร์ชันล่าสุดของ qiskit-ibm-runtime หากต้องการดูเวอร์ชันตัวเลือกเก่ากว่า ให้ไปที่ API reference ของ qiskit-ibm-runtime และเลือกเวอร์ชันก่อนหน้า

default_shots

จำนวน shots ทั้งหมดที่จะใช้ต่อวงจรต่อการกำหนดค่า

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

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

เอกสาร API ของ default_shots

dynamical_decoupling

ควบคุมการตั้งค่าการลดข้อผิดพลาด dynamical decoupling

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

รายการแท็ก

ตัวเลือก: None

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

environment.log_level

ตัวเลือก: DEBUG, INFO, WARNING, ERROR, CRITICAL

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

environment.private

ตัวเลือก: True, False

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

execution

เอกสาร API ของ execution

execution.init_qubits

ว่าจะรีเซ็ต Qubit ให้กลับสู่สถานะพื้นฐานสำหรับแต่ละ shot หรือไม่

ตัวเลือก: True, False

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

execution.rep_delay

การหน่วงเวลาระหว่างการวัดและวงจรควอนตัมที่ตามมา

ตัวเลือก: ค่าในช่วงที่กำหนดโดย backend.rep_delay_range

ค่าเริ่มต้น: กำหนดโดย backend.default_rep_delay

execution.meas_type

ตัวเลือก: classified, kerneled, avg_kerneled

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

max_execution_time

จำกัดระยะเวลาที่งานสามารถรันได้ หน่วยเป็นวินาที ดูรายละเอียดเพิ่มเติมในคู่มือเวลาการรันสูงสุด

ตัวเลือก: จำนวนเต็มเป็นวินาทีในช่วง [1, 10800]

ค่าเริ่มต้น: 10800 (3 ชั่วโมง)

เอกสาร API ของ max_execution_time

simulator

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

เอกสาร API ของ simulator

simulator.basis_gates

ตัวเลือก: รายการชื่อ basis gate ที่จะ unroll ไปยัง

ค่าเริ่มต้น: ชุด basis gate ทั้งหมดที่รองรับโดย Qiskit Aer simulator

simulator.coupling_map

ตัวเลือก: รายการปฏิสัมพันธ์สองควิบิตแบบมีทิศทาง

ค่าเริ่มต้น: 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

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

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 บางอย่างไม่สามารถใช้ร่วมกันในงานเดียว คลิกแท็บที่เหมาะสมเพื่อดูรายการฟีเจอร์ที่ไม่เข้ากันกับฟีเจอร์ที่เลือก:

Dynamic circuits

ไม่เข้ากันกับ:

  • Dynamical decoupling

หมายเหตุอื่น ๆ:

  • Gate twirling สามารถใช้กับวงจรไดนามิกได้ แต่ใช้ได้เฉพาะกับ gate ที่ไม่อยู่ใน conditional blocks เท่านั้น Measurement twirling ใช้ได้เฉพาะกับการวัดสุดท้ายเท่านั้น
  • เข้ากันกับ fractional gate เมื่อใช้ qiskit-ibm-runtime v0.42.0 หรือใหม่กว่า
Dynamical decoupling

ไม่เข้ากันกับ:

  • Dynamic circuits
Fractional gates

ไม่เข้ากันกับ:

  • Gate twirling

เข้ากันกับวงจรไดนามิกเมื่อใช้ qiskit-ibm-runtime v0.42.0 หรือใหม่กว่า

Gate twirling

ไม่เข้ากันกับ:

  • Fractional gates
  • Stretches

หมายเหตุอื่น ๆ:

  • Gate twirling สามารถใช้กับวงจรไดนามิกได้ แต่ใช้ได้เฉพาะกับ gate ที่ไม่อยู่ใน conditional blocks เท่านั้น
  • Measurement twirling ใช้ได้เฉพาะกับการวัดสุดท้ายเท่านั้น
  • Measurement twirling ไม่เข้ากันกับคำสั่ง store
  • ไม่ทำงานกับ non-Clifford entangler

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

คำแนะนำ