Langkau ke kandungan utama

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​

Cadangan
Source: IBM Quantum docs β€” updated 27 Apr 2026
English version on doQumentation β€” updated 7 Mei 2026
This translation based on the English version of 11 Mac 2026