เขียนโปรแกรม Qiskit Serverless แรกของคุณ
เวอร์ชันของแพ็กเกจ
โค้ดในหน้านี้พัฒนาโดยใช้ requirements ต่อไปนี้ แนะนำให้ใช้เวอร์ชันเหล่านี้หรือใหม่ก ว่า
qiskit[all]~=1.3.1
qiskit-ibm-runtime~=0.34.0
qiskit-aer~=0.15.1
qiskit-serverless~=0.18.1
qiskit-ibm-catalog~=0.2
qiskit-addon-sqd~=0.8.1
qiskit-addon-utils~=0.1.0
qiskit-addon-mpf~=0.2.0
qiskit-addon-aqc-tensor~=0.1.2
qiskit-addon-obp~=0.1.0
scipy~=1.15.0
pyscf~=2.8.0
ตัวอย่างนี้สาธิตวิธีใช้เครื่องมือ qiskit-serverless เพื่อสร้างโปรแกรม transpilation แบบ parallel จากนั้นใช้ qiskit-ibm-catalog เพื่ อ deploy โปรแกรมลง IBM Quantum Platform ให้ใช้เป็น remote service ที่นำกลับมาใช้ซ้ำได้
ตัวอย่าง: remote transpilation ด้วย Qiskit Serverless
เริ่มจากตัวอย่างต่อไปนี้ที่ Transpile circuit กับ backend และ optimization_level ที่กำหนด แล้วค่อย ๆ เพิ่มองค์ประกอบเพื่อ deploy workload ลง Qiskit Serverless
วาง code cell ต่อไปนี้ในไฟล์ ./source_files/transpile_remote.py ไฟล์นี้คือโปรแกรมที่จะอัปโหลดไปยัง Qiskit Serverless
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime qiskit-serverless
# This cell is hidden from users, it just creates a new folder
from pathlib import Path
Path("./source_files").mkdir(exist_ok=True)
%%writefile ./source_files/transpile_remote.py
from qiskit.transpiler import generate_preset_pass_manager
def transpile_remote(circuit, optimization_level, backend):
"""Transpiles an abstract circuit into an ISA circuit for a given backend."""
pass_manager = generate_preset_pass_manager(
optimization_level=optimization_level,
backend=backend
)
isa_circuit = pass_manager.run(circuit)
return isa_circuit
Writing ./source_files/transpile_remote.py
ตั้งค่าไฟล์
Qiskit Serverless ต้องการให้ตั้งค่าไฟล์ .py ของ workload ลงในไดเรกทอรีที่กำหนด โครงสร้างต่อไปนี้เป็นตัวอย่างของ best practice:
serverless_program
├── program_uploader.ipynb
└── source_files
├── transpile_remote.py
└── *.py
Serverless จะอัปโหลดเนื้อหาใน source_files เพื่อรันจากระยะไกล เมื่อตั้งค่าเสร็จแล้ว สามารถปรับแต่ง transpile_remote.py เพื่อรับ input และคืน output ได้
รับ arguments ของโปรแกรม
transpile_remote.py เริ่มต้นมี input สามตัว ได้แก่ circuits, backend_name, และ optimization_level ปัจจุบัน Serverless รับได้เฉพาะ input และ output ที่ serialize ได้เท่านั้น ด้วยเหตุนี้จึงไม่สามารถส่ง backend โดยตรงได้ ให้ใช้ backend_name เป็น string แทน
%%writefile --append ./source_files/transpile_remote.py
from qiskit_serverless import get_arguments, save_result, distribute_task, get
# Get program arguments
arguments = get_arguments()
circuits = arguments.get("circuits")
backend_name = arguments.get("backend_name")
optimization_level = arguments.get("optimization_level")
Appending to ./source_files/transpile_remote.py
ตอนนี้สามารถรับ Backend ด้วย QiskitRuntimeService และเพิ่มโปรแกรมที่มีอยู่ได้ด้วยโค้ดต่อไปนี้ โค้ดนี้ต้องการให้บันทึก credentialsไว้ก่อนแล้ว
%%writefile --append ./source_files/transpile_remote.py
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.backend(backend_name)
Appending to ./source_files/transpile_remote.py
สุดท้าย รัน transpile_remote() กับทุก circuits ที่ส่งเข้ามา แล้วคืน transpiled_circuits เป็นผลลัพธ์:
%%writefile --append ./source_files/transpile_remote.py
results = [
transpile_remote(circuit, 1, backend)
for circuit in circuits
]
save_result({
"transpiled_circuits": results
})
Appending to ./source_files/transpile_remote.py
Deploy ลง IBM Quantum Platform
ส่วนก่อนหน้านี้สร้างโปรแกรมสำหรับรันจากระยะไกล code cell ในส่วนนี้จะอัปโหลดโปรแกรมนั้นไปยัง Qiskit Serverless
ใช้ qiskit-ibm-catalog เพื่อ authenticate กับ QiskitServerless ด้วย API key ซึ่งหาได้จาก IBM Quantum dashboard แล้วอัปโหลดโปรแกรม
สามารถใช้ save_account() เพื่อบันทึก credentials ได้ (ดูส่วน