Tulis program Qiskit Serverless pertama anda
Versi pakej
Kod pada halaman ini dibangunkan menggunakan keperluan berikut. Kami mengesyorkan penggunaan versi ini atau yang lebih baharu.
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
Contoh ini menunjukkan cara menggunakan alat qiskit-serverless untuk membuat program transpilasi selari, kemudian menggunakan qiskit-ibm-catalog untuk menyebarkan program anda ke IBM Quantum Platform agar boleh digunakan sebagai perkhidmatan jauh yang boleh digunakan semula.
Contoh: transpilasi jauh dengan Qiskit Serverlessβ
Mulakan dengan contoh berikut yang mentranspil circuit terhadap backend dan optimization_level sasaran yang diberikan, kemudian tambah lebih banyak elemen secara beransur-ansur untuk menyebarkan beban kerja anda ke Qiskit Serverless.
Letakkan sel kod berikut dalam fail ./source_files/transpile_remote.py. Fail ini ialah program yang akan dimuat naik ke 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
Sediakan fail andaβ
Qiskit Serverless memerlukan anda menyediakan fail .py beban kerja ke dalam direktori khusus. Struktur berikut adalah contoh amalan terbaik:
serverless_program
βββ program_uploader.ipynb
βββ source_files
βββ transpile_remote.py
βββ *.py
Serverless memuat naik kandungan source_files untuk dijalankan dari jauh. Setelah ini disediakan, anda boleh melaraskan transpile_remote.py untuk mengambil input dan memulangkan output.
Dapatkan argumen programβ
transpile_remote.py awal anda mempunyai tiga input: circuits, backend_name, dan optimization_level. Serverless pada masa ini hanya menerima input dan output yang boleh disiri. Atas sebab ini, anda tidak boleh menghantar backend secara terus, jadi gunakan backend_name sebagai rentetan.
%%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
Pada ketika ini, anda boleh mendapatkan Backend anda dengan QiskitRuntimeService dan menambah program sedia ada anda dengan kod berikut. Kod berikut memerlukan anda telah menyimpan kelayakan anda.
%%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
Akhirnya, anda boleh menjalankan transpile_remote() merentas semua circuits yang dihantar, dan memulangkan transpiled_circuits sebagai keputusan:
%%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
Sebarkan ke IBM Quantum Platformβ
Bahagian sebelumnya telah mencipta program untuk dijalankan dari jauh. Sel kod dalam bahagian ini memuat naik program tersebut ke Qiskit Serverless.
Gunakan qiskit-ibm-catalog untuk mengesahkan ke QiskitServerless dengan kunci API anda, yang boleh anda temui di papan pemuka IBM Quantum, dan muat naik program.
Anda boleh menggunakan save_account() untuk menyimpan kelayakan anda (lihat bahagian Sediakan untuk menggunakan IBM Cloud). Perhatikan bahawa ini menulis kelayakan anda ke fail yang sama seperti QiskitRuntimeService.save_account().
from qiskit_ibm_catalog import QiskitServerless, QiskitFunction
# Authenticate to the remote cluster and submit the pattern for remote execution
serverless = QiskitServerless()
Qiskit Serverless memampatkan kandungan working_dir (dalam kes ini, source_files) ke dalam tar, yang dimuat naik dan dibersihkan selepas itu. entrypoint mengenal pasti program utama yang boleh dilaksanakan untuk dijalankan oleh Qiskit Serverless. Selain itu, jika program anda mempunyai kebergantungan pip tersuai, anda boleh menambahnya ke dalam tatasusunan dependencies:
transpile_remote_demo = QiskitFunction(
title="transpile_remote_serverless",
entrypoint="transpile_remote.py",
working_dir="./source_files/",
)
serverless.upload(transpile_remote_demo)
QiskitFunction(transpile_remote_serverless)
Untuk menyemak sama ada muat naik berjaya, gunakan serverless.list():
# Get program from serverless.list() that matches the title of the one we uploaded
next(
program
for program in serverless.list()
if program.title == "transpile_remote_serverless"
)
QiskitFunction(transpile_remote_serverless)
# This cell is hidden from users, it checks the program uploaded correctly
assert _.title == "transpile_remote_serverless" # noqa: F821
# This cell is hidden from users, it checks the program executes correctly
from time import sleep
from qiskit import QuantumCircuit
qc = QuantumCircuit(2)
transpile_remote_serverless = serverless.load("transpile_remote_serverless")
job = transpile_remote_serverless.run(
circuits=[qc],
backend="ibm_sherbrooke",
optimization_level=1,
)
while True:
sleep(5)
status = job.status()
if status not in ["QUEUED", "INITIALIZING", "RUNNING", "DONE"]:
raise Exception(
f"Unexpected job status: '{status}'\n"
+ "Here are the logs:\n"
+ job.logs()
)
if status == "DONE":
break
Langkah seterusnyaβ
- Ketahui cara menghantar input dan menjalankan program anda dari jauh dalam topik Jalankan beban kerja Qiskit Serverless pertama anda dari jauh.