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

แนะนำ Qiskit Functions

หมายเหตุ
  • Qiskit Functions เป็นคุณสมบัติเชิงทดลองที่มีให้เฉพาะผู้ใช้ IBM Quantum® Premium Plan, Flex Plan และ On-Prem (ผ่าน IBM Quantum Platform API) Plan เท่านั้น อยู่ในสถานะ preview release และอาจเปลี่ยนแปลงได้
เวอร์ชัน package

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

qiskit[all]~=1.4.1
qiskit-ibm-runtime~=0.37.0
qiskit-ibm-catalog~=0.4

Qiskit Functions ลดความซับซ้อนและเร่งการค้นพบ algorithm และการพัฒนา application ในระดับ utility-scale โดย abstract ส่วนต่าง ๆ ของ quantum software development workflow ออกไป ด้วยวิธีนี้ Qiskit Functions ช่วยประหยัดเวลาที่ปกติใช้เขียนโค้ดด้วยมือและปรับแต่งการทดลอง

ภาพรวมของ Qiskit Functions Function มีสองรูปแบบ:

ประเภททำอะไร?ตัวอย่าง input และ outputสำหรับใคร?
Circuit functionInterface ที่เรียบง่ายสำหรับการรัน Circuit Abstract transpilation, error suppression และ error mitigationInput: Abstract PUB objects
Output: Mitigated expectation values
นักวิจัยที่ใช้ Qiskit เพื่อค้นพบ algorithm และ application ใหม่ โดยไม่จำเป็นต้องมุ่งเน้นการปรับแต่งสำหรับ hardware หรือจัดการ error Circuit function สามารถใช้สร้าง application function แบบกำหนดเองได้
Application functionครอบคลุม task ระดับสูงขึ้น เช่น การสำรวจ algorithm และ use case เฉพาะ domain Abstract quantum workflow เพื่อแก้ task ด้วย classical input และ outputInput: Molecules, graphs
Output: Ground + excited state energy, optimal values for cost function
นักวิจัยใน domain ที่ไม่ใช่ควอนตัม ที่รวม quantum เข้ากับ workflow classical ขนาดใหญ่ที่มีอยู่แล้ว โดยไม่จำเป็นต้องแมป classical data ไปยัง quantum circuit
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime

Function ให้บริการโดย IBM® และ partner บุคคลที่สาม แต่ละ function มีประสิทธิภาพสำหรับลักษณะ workload เฉพาะและมีตัวเลือกการปรับแต่งประสิทธิภาพที่ไม่เหมือนกัน

ภาพรวมของ function ที่มีให้ใช้

Circuit functions

ชื่อผู้ให้บริการแนะนำให้ใช้กับประโยชน์เฉพาะ
Tensor-Network Error MitigationAlgorithmiqWorkload ที่มี observable น้ำหนักต่ำและ Circuit แบบ loop-freeลด measurement overhead และ variance ทำผลได้ดีกว่า error mitigation baseline มาตรฐาน เช่น Zero Noise Extrapolation (ZNE) และ Probabilistic Error Cancellation (PEC) สำหรับคลาส Circuit ที่เกี่ยวข้อง
QESEM: Error Suppression and Error MitigationQedmaWorkload ที่มี Circuit ที่มี fractional หรือ parameterized gate, observable น้ำหนักสูง และ workflow ที่ต้องการ expectation value ที่ไม่ลำเอียงและประมาณ runtime ที่แม่นยำสร้าง expectation value ที่ไม่ลำเอียงด้วย variance และ resource overhead ที่ต่ำกว่า ทำผลได้ดีกว่า ZNE และ PEC สำหรับคลาส Circuit ที่เกี่ยวข้อง
Performance ManagementQ-CTRLWorkload ที่มี parametric circuit, deep circuit หรือต้องการการดำเนินการ Circuit จำนวนมากใช้ AI-driven error suppression กับ quantum algorithm โดยอัตโนมัติ เพิ่มประสิทธิภาพ IBM device ให้สูงสุดเพื่อให้ผลลัพธ์ที่แม่นยำในขณะที่ลดจำนวน shot, compute time และค่าใช้จ่าย

วิธีที่ไม่มี overhead ที่ปรับปรุงความแม่นยำการดำเนินการสำหรับ Sampler และ Estimator primitive เข้ากันได้กับ observable น้ำหนักใด ๆ

Application functions

ชื่อผู้ให้บริการแนะนำให้ใช้กับประโยชน์เฉพาะ
QUICK-PDEColibriTDใช้ quantum computation สำหรับ multi-physics PDE

เตรียม simulation workflow สำหรับ quantum hardware พร้อมควบคุม parameter การสร้างแบบจำลองควอนตัมและฟิสิกส์ได้อย่างเต็มที่
เสนอ hybrid VQA framework ที่แข็งแกร่งซึ่งให้โซลูชัน PDE ที่แม่นยำและปรับขนาดได้ผ่าน solution encoding และ spectral method ขั้นสูง ทำให้เป็นจุดเข้าถึงที่เหมาะสำหรับทีมที่พยายามสร้างความสามารถ simulation ที่พร้อมสำหรับควอนตัม
Quantum Portfolio OptimizerGlobal Data QuantumWorkload สำหรับการ optimization ทางการเงิน หากลยุทธ์ portfolio ที่ดีที่สุดในช่วงเวลาหนึ่งพร้อมลด risk และเพิ่ม return สูงสุด รองรับการ back-testing กลยุทธ์การซื้อขายแก้ combinatorial optimization ปัญหาผ่านการปรับตัว VQE algorithm สำหรับควอนตัมที่เชี่ยวชาญสูงสำหรับ use case ทางการเงินนี้ โดยใช้ execution strategy และ optimizer ที่ปรับแต่งพร้อม noise-aware error mitigation techniques ที่ปรับแต่งสำหรับ portfolio optimization
HI-VQE ChemistryQunova ComputingWorkload ใน computational chemistry, molecular simulation, materials science หรือ Hamiltonian simulation ใด ๆ ที่ต้องการแก้ปัญหา many-body electronic structureแก้โครงสร้างอิเล็กทรอนิกส์โมเลกุลโดยใช้ enhanced SQD ที่ได้ chemical accuracy (1 kcal/mol, 1.6 mHa) สำหรับปัญหาที่สร้างแบบจำลองด้วย 40 ถึง 60 qubit ทำผลได้ดีกว่าโซลูชัน classical บางอย่างบน supercomputer หรือ standard SQD ในด้าน convergence speed หรือ accuracy ตามลำดับตามขนาด
Iskay Quantum OptimizerKipu QuantumWorkload optimization เช่น scheduling, logistics, routing และปัญหา QUBO/HUBO

มี classical pre- และ post-processing methods แบบ tunable ที่รวมไว้สำหรับ quantum optimization routine

ให้ runtime advantage เหนือ classical solver (CPLEX, simulated annealing และ tabu search) บน HUBO benchmark ที่เลือก

Market Split ms_5_100 ซึ่งเป็นความท้าทายที่ยาก แก้ได้ภายในชั่วโมง (ดูแบบฝึกหัดนี้)
Singularity Machine LearningMultiverse ComputingClassical machine learning classification workflow ที่อาจได้ประโยชน์จากความแม่นยำที่ดีขึ้นหรือประสิทธิภาพการคำนวณที่ดีขึ้นโดยใช้ quantum optimization ที่ดำเนินการบน IBM hardwareให้ความแม่นยำเทียบเคียงหรือเกินกว่า classical model เช่น Random Forest หรือ XGBoost ขณะทำงานด้วย learner และ ensemble ที่กะทัดรัดกว่าอย่างมีนัยสำคัญ

ขับเคลื่อนด้วย quantum-optimized voting เลือก learner ที่มีข้อมูลมากที่สุดและปรับแต่ง decision boundary ส่งผลให้มีประสิทธิภาพมากขึ้น ความซับซ้อนของ model ลดลง และประสิทธิภาพที่แข็งแกร่งขึ้น
Optimization SolverQ-CTRLBinary optimization ปัญหาหรือปัญหา combinatorial ใด ๆ ที่สามารถแมปไปยัง binary cost function ได้

รองรับ cost function ทุกลำดับและขนาดปัญหาสูงสุดถึง device scale สูงสุด
โซลูชัน quantum optimization แบบ end-to-end ที่รับรู้ noise ซึ่งรองรับการกำหนด problem definition ระดับสูงและค้นหาโซลูชันที่แม่นยำสำหรับ combinatorial ปัญหาที่ท้าทาย classical บน utility-scale quantum hardware โดยอัตโนมัติ

ลดความซับซ้อนโดยจัดการ error suppression, efficient mapping และ hybrid quantum-classical optimization เพื่อแก้ optimization task ใน full device scale โดยไม่ต้องมีความเชี่ยวชาญด้านควอนตัมลึกซึ้ง

เริ่มต้นใช้งาน Qiskit Functions

ผู้ใช้ Premium, Flex และ On-Prem (ผ่าน IBM Quantum Platform API) Plan สามารถเริ่มต้นใช้งาน IBM Qiskit Functions ได้ฟรี หรือสามารถจัดหาใบอนุญาตจาก partner ที่มีส่วนร่วมใน function ใน catalog

ขอทดลองใช้ฟรีสำหรับ Qiskit Functions ของบุคคลที่สาม

เพื่อขอทดลองใช้ฟรี ไปที่ Qiskit Functions Catalog และสำรวจแผงรายละเอียด คลิก Request a free trial และกรอกข้อมูลที่ Functions partner ต้องการ รวมถึง IBM Cloud AccessGroupId:

  1. ไปที่ IBM Cloud IAM
  2. ยืนยันคุณสมบัติ
    • สลับ account ในแถบด้านบนเป็น account ที่มีรูปแบบ: XXXXXXX - [Organization Name]
    • ตรวจสอบว่า organization เหมือนกับที่เชื่อมโยงกับ Premium account ของคุณ
    • หากเห็น "[Your Name]'s Account" คุณกำลังใช้ personal account ซึ่งไม่มีสิทธิ์เข้าถึง premium
  3. ค้นหา access group ID ของคุณ
    • คลิกชื่อ group
    • คลิก Details
    • คัดลอก access group ID ควรขึ้นต้นด้วย AccessGroup-

ติดตั้ง Qiskit Functions Catalog client

  1. เพื่อเริ่มใช้ Qiskit Functions ติดตั้ง IBM Qiskit Functions Catalog client:

    pip install qiskit-ibm-catalog
  2. ดึง API key จาก IBM Quantum Platform dashboard และเปิดใช้งาน Python virtual environment ดูคำแนะนำการติดตั้งหากยังไม่มี virtual environment

    หากทำงานใน Python environment ที่เชื่อถือได้ (เช่น บน laptop หรือ workstation ส่วนตัว) ใช้ save_account() method เพื่อบันทึก credentials ในเครื่อง (ข้ามไปขั้นตอนถัดไป หากไม่ได้ใช้ environment ที่เชื่อถือได้ เช่น คอมพิวเตอร์ที่ใช้ร่วมกันหรือสาธารณะ เพื่อยืนยันตัวตนกับ IBM Quantum Platform)

    เพื่อใช้ save_account() รัน python ใน shell แล้วป้อนคำสั่งต่อไปนี้:

    from qiskit_ibm_catalog import QiskitFunctionsCatalog

    QiskitFunctionsCatalog.save_account(channel="ibm_quantum_platform", token="<your-token>", instance="<instance-crn>")

    พิมพ์ exit() จากนี้ไป เมื่อต้องการยืนยันตัวตนกับ service สามารถโหลด credentials ด้วย

    from qiskit_ibm_catalog import QiskitFunctionsCatalog
    catalog = QiskitFunctionsCatalog()
# Load saved credentials
from qiskit_ibm_catalog import QiskitFunctionsCatalog

catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
  1. หลีกเลี่ยงการรันโค้ดบนเครื่องที่ไม่น่าเชื่อถือหรือ cloud Python environment ภายนอกเพื่อลดความเสี่ยงด้านความปลอดภัย หากจำเป็นต้องใช้ environment ที่ไม่น่าเชื่อถือ (เช่น คอมพิวเตอร์สาธารณะ) ให้เปลี่ยน API key หลังการใช้งานแต่ละครั้งโดยลบออกที่หน้า IBM Cloud API keys เพื่อลดความเสี่ยง เรียนรู้เพิ่มเติมใน topic Managing user API keys เพื่อ initialize service ในสถานการณ์นี้ ขยายส่วนต่อไปนี้เพื่อดูโค้ดที่ใช้ได้:

    Initialize service ใน environment ที่ไม่น่าเชื่อถือ
    from qiskit_ibm_catalog import QiskitFunctionsCatalog

    # After using the following code, delete your API key on the IBM Quantum Platform home dashboard
    catalog = QiskitFunctionsCatalog(token="<YOUR_API_KEY>") # Use the 44-character API_KEY you created and saved from the IBM Quantum Platform Home dashboard
    ข้อควรระวัง

    ปกป้อง API key ของคุณ! อย่ารวม key ในโค้ด Python script หรือไฟล์ notebook เมื่อแชร์โค้ดกับผู้อื่น ตรวจสอบให้แน่ใจว่า API key ไม่ได้ฝังโดยตรงใน Python script แต่แชร์ script โดยไม่มี key และให้คำแนะนำสำหรับการตั้งค่าอย่างปลอดภัย

    หากแชร์ key กับผู้อื่นโดยไม่ตั้งใจหรือรวมไว้ใน version control เช่น Git ให้เพิกถอน key ทันทีโดยลบออกที่หน้า IBM Cloud API keys เพื่อลดความเสี่ยง เรียนรู้เพิ่มเติมใน topic Managing user API keys

  2. หลังจากยืนยันตัวตนแล้ว สามารถแสดงรายการ function จาก Qiskit Functions Catalog ที่มีสิทธิ์เข้าถึง:

catalog.list()
[QiskitFunction(qunova/hivqe-chemistry),
QiskitFunction(global-data-quantum/quantum-portfolio-optimizer),
QiskitFunction(algorithmiq/tem),
QiskitFunction(qedma/qesem),
QiskitFunction(multiverse/singularity),
QiskitFunction(ibm/circuit-function),
QiskitFunction(q-ctrl/optimization-solver),
QiskitFunction(colibritd/quick-pde),
QiskitFunction(q-ctrl/performance-management),
QiskitFunction(kipu-quantum/iskay-quantum-optimizer)]

รัน function ที่เปิดใช้งาน

หลังจาก instantiate catalog object แล้ว สามารถเลือก function โดยใช้ catalog.load(provider/function-name):

ibm_cf = catalog.load("ibm/circuit-function")

Qiskit Function แต่ละตัวมี input, option และ output แบบกำหนดเอง ตรวจสอบหน้าเอกสารเฉพาะสำหรับ function ที่ต้องการรันเพื่อข้อมูลเพิ่มเติม โดยค่าเริ่มต้น ผู้ใช้ทั้งหมดสามารถรัน function job ได้เพียงครั้งละหนึ่งงาน:

# This cell is hidden from users
# It gets these details programmatically so we can test this notebook
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit.circuit.random import random_circuit

service = QiskitRuntimeService()
instance = service.active_account()["instance"]
backend_name = service.least_busy().name

circuit = random_circuit(num_qubits=2, depth=2, seed=42)
observable = "Z" * circuit.num_qubits
job = ibm_cf.run(
pubs=[(circuit, observable)],
instance=instance,
backend_name=backend_name, # E.g. "ibm_fez"
)

job.job_id
'7f08c9d5-471b-4da2-92e7-4f2cb94c23a8'

ตรวจสอบสถานะ job

เคล็ดลับ

ปัจจุบัน ตาราง IBM Quantum workloads แสดงเฉพาะ Qiskit Runtime workload เท่านั้น ใช้ job.status() เพื่อดูสถานะปัจจุบันของ Qiskit Function workload

ด้วย Qiskit Function job_id สามารถตรวจสอบสถานะของ job ที่กำลังรัน ซึ่งรวมถึงสถานะต่อไปนี้:

  • QUEUED: โปรแกรมระยะไกลอยู่ในคิว Qiskit Function ลำดับความสำคัญของคิวขึ้นอยู่กับปริมาณการใช้งาน Qiskit Functions
  • INITIALIZING: โปรแกรมระยะไกลกำลังเริ่มต้น รวมถึงการตั้งค่า environment ระยะไกลและการติดตั้ง dependency
  • RUNNING: โปรแกรมกำลังรัน ซึ่งรวมถึงสถานะรายละเอียดเพิ่มเติมหลายรายการหากรองรับโดย function เฉพาะ
    • RUNNING: MAPPING": function กำลัง map classical input ไปยัง quantum input
    • RUNNING: OPTIMIZING_FOR_HARDWARE": function กำลังปรับแต่งสำหรับ QPU ที่เลือก อาจรวมถึง circuit transpilation, QPU characterization, observable backpropagation และอื่น ๆ
    • RUNNING: WAITING_FOR_QPU: function ส่ง job ไปยัง Qiskit Runtime แล้วและรอในคิว
    • RUNNING: EXECUTING_QPU: function มี Qiskit Runtime job ที่ active อยู่
    • RUNNING: POST_PROCESSING: function กำลัง post-process ผลลัพธ์ อาจรวมถึง error mitigation, การแมป quantum result ไปยัง classical และอื่น ๆ
  • DONE: โปรแกรมเสร็จสมบูรณ์แล้ว และสามารถดึงข้อมูลผลลัพธ์ด้วย job.results()
  • ERROR: โปรแกรมหยุดรันเนื่องจากปัญหา ใช้ job.result() เพื่อรับข้อความ error
  • CANCELED: โปรแกรมถูกยกเลิก ไม่ว่าจะโดยผู้ใช้, service หรือ server
job.status()
'QUEUED'

ดึงผลลัพธ์

หลังจากโปรแกรมอยู่ในสถานะ DONE สามารถใช้ job.results() เพื่อดึงผลลัพธ์ รูปแบบ output นี้แตกต่างกันในแต่ละ function ดังนั้นต้องอ่านเอกสารเฉพาะ:

result = job.result()
print(result)
PrimitiveResult([PubResult(data=DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>)), metadata={'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32})], metadata={'dynamical_decoupling': {'enable': True, 'sequence_type': 'XX', 'extra_slack_distribution': 'middle', 'scheduling_method': 'alap'}, 'twirling': {'enable_gates': False, 'enable_measure': True, 'num_randomizations': 'auto', 'shots_per_randomization': 'auto', 'interleave_randomizations': True, 'strategy': 'active-accum'}, 'resilience': {'measure_mitigation': True, 'zne_mitigation': False, 'pec_mitigation': False}, 'version': 2})

นอกจากนี้ยังสามารถยกเลิก job ได้ทุกเมื่อ:

job.stop()
'Job has been stopped.'

แสดงรายการ job ที่รันก่อนหน้ากับ Qiskit Functions

สามารถใช้ jobs() เพื่อแสดงรายการ job ทั้งหมดที่ส่งไปยัง Qiskit Functions:

old_jobs = catalog.jobs()
old_jobs
[<Job | f6c29f49-4d5f-4fff-aca6-2e9a115b9763>,
<Job | 7f08c9d5-471b-4da2-92e7-4f2cb94c23a8>,
<Job | 62fe9176-d1e5-467e-b2bd-7a3f3c7be4e5>,
<Job | af525b2e-16b1-45a1-80bb-dbd94ce30258>,
<Job | b95a7a57-c1ad-4958-b7ac-953e4e1ee824>,
<Job | 7bfa33da-0f17-4e67-84b6-f556f7eeb436>,
<Job | ca46c191-9eb9-4de6-bfa7-b60d7eb29b5e>,
<Job | 6ac0ba93-3831-43fb-9fb9-760da2225e06>,
<Job | f0e38071-060d-47e8-988d-9cc1f69358e3>,
<Job | 629cf110-e490-4675-8a07-f6d298d166b0>]

หากมี job ID สำหรับ job เฉพาะ สามารถดึง job ด้วย catalog.get_job_by_id():

# First, get the most recent job that has been executed.
latest_job = old_jobs[0]

# We can also get that same job with get_job_by_id
job_by_id = catalog.get_job_by_id(latest_job.job_id)

# Verify that the job is the same using both retrieval methods.
assert job_by_id.job_id == latest_job.job_id

# Print the job_id for this job.
print(job_by_id.job_id)
f6c29f49-4d5f-4fff-aca6-2e9a115b9763

ดึงข้อความ error

หากสถานะโปรแกรมเป็น ERROR ใช้ job.error_message() เพื่อดึงข้อความ error ดังนี้:

job.error_message()
qiskit.exceptions.QiskitError: 'Workflow execution failed -- https://docs.quantum.ibm.com/errors#9999'

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

คำแนะนำ
Source: IBM Quantum docs — updated 17 เม.ย. 2569
English version on doQumentation — updated 7 พ.ค. 2569
This translation based on the English version of 11 มี.ค. 2569