แนะนำ 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 ช่วยประหยัดเวลาที่ปกติใช้เขียนโค้ดด้วยมือและปรับแต่งการทดลอง
Function มีสองรูปแบบ:
| ประเภท | ทำอะไร? | ตัวอย่าง input และ output | สำหรับใคร? |
|---|---|---|---|
| Circuit function | Interface ที่เรียบง่ายสำหรับการรัน Circuit Abstract transpilation, error suppression และ error mitigation | Input: 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 และ output | Input: 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 Mitigation | Algorithmiq | Workload ที่มี observable น้ำหนักต่ำและ Circuit แบบ loop-free | ลด measurement overhead และ variance ทำผลได้ดีกว่า error mitigation baseline มาตรฐาน เช่น Zero Noise Extrapolation (ZNE) และ Probabilistic Error Cancellation (PEC) สำหรับคลาส Circuit ที่เกี่ยวข้อง |
| QESEM: Error Suppression and Error Mitigation | Qedma | Workload ที่มี Circuit ที่มี fractional หรือ parameterized gate, observable น้ำหนักสูง และ workflow ที่ต้องการ expectation value ที่ไม่ลำเอียงและประมาณ runtime ที่แม่นยำ | สร้าง expectation value ที่ไม่ลำเอียงด้วย variance และ resource overhead ที่ต่ำกว่า ทำผลได้ดีกว่า ZNE และ PEC สำหรับคลาส Circuit ที่เกี่ยวข้อง |
| Performance Management | Q-CTRL | Workload ที่มี parametric circuit, deep circuit หรือต้องการการดำเนินการ Circuit จำนวนมาก | ใช้ AI-driven error suppression กับ quantum algorithm โดยอัตโนมัติ เพิ่มประสิทธิภาพ IBM device ให้สูงสุดเพื่อให้ผลลัพธ์ที่แม่นยำในขณะที่ลดจำนวน shot, compute time และค่าใช้จ่าย วิธีที่ไม่มี overhead ที่ปรับปรุงความแม่นยำการดำเนินการสำหรับ Sampler และ Estimator primitive เข้ากันได้กับ observable น้ำหนักใด ๆ |
Application functions
| ชื่อ | ผู้ให้บริการ | แนะนำให้ใช้กับ | ประโยชน์เฉพาะ |
|---|---|---|---|
| QUICK-PDE | ColibriTD | ใช้ quantum computation สำหรับ multi-physics PDE เตรียม simulation workflow สำหรับ quantum hardware พร้อมควบคุม parameter การสร้างแบบจำลองควอนตัมและฟิสิกส์ได้อย่างเต็มที่ | เสนอ hybrid VQA framework ที่แข็งแกร่งซึ่งให้โซลูชัน PDE ที่แม่นยำและปรับขนาดได้ผ่าน solution encoding และ spectral method ขั้นสูง ทำให้เป็นจุดเข้าถึงที่เหมาะสำหรับทีมที่พยายามสร้างความสามารถ simulation ที่พร้อมสำหรับควอนตัม |
| Quantum Portfolio Optimizer | Global Data Quantum | Workload สำหรับการ optimization ทางการเงิน หากลยุทธ์ portfolio ที่ดีที่สุดในช่วงเวลาหนึ่งพร้อมลด risk และเพิ่ม return สูงสุด รองรับการ back-testing กลยุทธ์การซื้อขาย | แก้ combinatorial optimization ปัญหาผ่านการปรับตัว VQE algorithm สำหรับควอนตัมที่เชี่ยวชาญสูงสำหรับ use case ทางการเงินนี้ โดยใช้ execution strategy และ optimizer ที่ปรับแต่งพร้อม noise-aware error mitigation techniques ที่ปรับแต่งสำหรับ portfolio optimization |
| HI-VQE Chemistry | Qunova Computing | Workload ใน 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 Optimizer | Kipu Quantum | Workload 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 Learning | Multiverse Computing | Classical machine learning classification workflow ที่อาจได้ประโยชน์จากความแม่นยำที่ดีขึ้นหรือประสิทธิภาพการคำนวณที่ดีขึ้นโดยใช้ quantum optimization ที่ดำเนินการบน IBM hardware | ให้ความแม่นยำเทียบเคียงหรือเกินกว่า classical model เช่น Random Forest หรือ XGBoost ขณะทำงานด้วย learner และ ensemble ที่กะทัดรัดกว่าอย่างมีนัยสำคัญ ขับเคลื่อนด้วย quantum-optimized voting เลือก learner ที่มีข้อมูลมากที่สุดและปรับแต่ง decision boundary ส่งผลให้มีประสิทธิภาพมากขึ้น ความซับซ้อนของ model ลดลง และประสิทธิภาพที่แข็งแกร่งขึ้น |
| Optimization Solver | Q-CTRL | Binary 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:
- ไปที่ IBM Cloud IAM
- ยืนยันคุณสมบัติ
- สลับ account ในแถบด้านบนเป็น account ที่มีรูปแบบ:
XXXXXXX - [Organization Name] - ตรวจสอบว่า organization เหมือนกับที่เชื่อมโยงกับ Premium account ของคุณ
- หากเห็น "[Your Name]'s Account" คุณกำลังใช้ personal account ซึ่งไม่มีสิทธิ์เข้าถึง premium
- สลับ account ในแถบด้านบนเป็น account ที่มีรูปแบบ:
- ค้นหา access group ID ของคุณ
- คลิกชื่อ group
- คลิก Details
- คัดลอก access group ID ควรขึ้นต้นด้วย
AccessGroup-
ติดตั้ง Qiskit Functions Catalog client
-
เพื่อเริ่มใช้ Qiskit Functions ติดตั้ง IBM Qiskit Functions Catalog client:
pip install qiskit-ibm-catalog -
ดึง 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 QiskitFunctionsCatalogQiskitFunctionsCatalog.save_account(channel="ibm_quantum_platform", token="<your-token>", instance="<instance-crn>")พิมพ์
exit()จากนี้ไป เมื่อต้องการยืนยันตัวตนกับ service สามารถโหลด credentials ด้วยfrom qiskit_ibm_catalog import QiskitFunctionsCatalogcatalog = QiskitFunctionsCatalog()
# Load saved credentials
from qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
-
หลีกเลี่ยงการรันโค้ดบนเครื่องที่ไม่น่าเชื่อถือหรือ 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 dashboardcatalog = 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
-
หลังจากยืนยันตัวตนแล้ว สามารถแสดงรายการ 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 FunctionsINITIALIZING: โปรแกรมระยะไกลกำลังเริ่มต้น รวมถึงการตั้งค่า environment ระยะไกลและการติดตั้ง dependencyRUNNING: โปรแกรมกำลังรัน ซึ่งรวมถึงสถานะรายละเอียดเพิ่มเติมหลายรายการหากรองรับโดย function เฉพาะRUNNING: MAPPING": function กำลัง map classical input ไปยัง quantum inputRUNNING: 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()เพื่อรับข้อความ errorCANCELED: โปรแกรมถูกยกเลิก ไม่ว่าจะโดยผู้ใช้, 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'
ขั้นตอนถัดไป
- สำรวจ circuit functions เพื่อสร้าง algorithm และ application ใหม่ โดยไม่ต้องจัดการ transpilation หรือ error handling
- สำรวจ application functions เพื่อแก้ task เฉพาะ domain ด้วย classical input และ output
- ดูเอกสาร API reference สำหรับ Qiskit Functions
- สำหรับประสบการณ์จริง ลองดูแบบฝึกหัดที่แสดงการใช้งาน Qiskit Functions