Lewati ke konten utama

Tulis program Qiskit Serverless pertamamu

Versi paket

Kode di halaman ini dikembangkan menggunakan persyaratan berikut. Kami sarankan memakai versi ini atau yang lebih baru.

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 paralel, lalu mengimplementasikan qiskit-ibm-catalog untuk men-deploy programmu ke IBM Quantum Platform agar bisa digunakan sebagai layanan remote yang bisa dipakai ulang.

Contoh: transpilasi remote dengan Qiskit Serverless​

Mulai dengan contoh berikut yang mentranspilasi sebuah circuit terhadap backend dan optimization_level target yang diberikan, lalu tambahkan lebih banyak elemen secara bertahap untuk men-deploy workload-mu ke Qiskit Serverless.

Taruh kode berikut di file ./source_files/transpile_remote.py. File ini adalah program yang akan diunggah 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

Siapkan file-mu​

Qiskit Serverless mengharuskan pengaturan file .py workload-mu ke dalam direktori tersendiri. Struktur berikut adalah contoh praktik yang baik:

serverless_program
β”œβ”€β”€ program_uploader.ipynb
└── source_files
β”œβ”€β”€ transpile_remote.py
└── *.py

Serverless mengunggah isi source_files untuk dijalankan secara remote. Setelah semuanya siap, kamu bisa menyesuaikan transpile_remote.py untuk mengambil input dan mengembalikan output.

Ambil argumen program​

transpile_remote.py awalmu punya tiga input: circuits, backend_name, dan optimization_level. Serverless saat ini hanya bisa menerima input dan output yang bisa diserialisasi. Karena itu, kamu tidak bisa langsung memasukkan backend, jadi gunakan backend_name sebagai 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

Di tahap ini, kamu bisa mendapatkan backend dengan QiskitRuntimeService dan menambahkan program yang sudah ada dengan kode berikut. Kode berikut mengharuskan kamu sudah menyimpan kredensial.

%%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

Terakhir, kamu bisa menjalankan transpile_remote() untuk semua circuits yang dimasukkan, dan mengembalikan transpiled_circuits sebagai hasilnya:

%%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 ke IBM Quantum Platform​

Bagian sebelumnya membuat program untuk dijalankan secara remote. Kode di bagian ini mengunggah program tersebut ke Qiskit Serverless.

Gunakan qiskit-ibm-catalog untuk autentikasi ke QiskitServerless dengan API key-mu, yang bisa ditemukan di dashboard IBM Quantum, dan unggah programnya.

Kamu bisa menggunakan save_account() untuk menyimpan kredensial (lihat bagian Siapkan penggunaan IBM Cloud). Perlu diingat bahwa ini menulis kredensialmu ke file yang sama dengan 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 mengompres isi working_dir (dalam hal ini, source_files) menjadi sebuah tar, yang diunggah lalu dibersihkan sesudahnya. entrypoint mengidentifikasi file program utama yang akan dijalankan oleh Qiskit Serverless. Selain itu, jika programmu punya dependensi pip kustom, kamu bisa menambahkannya ke array 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 mengecek apakah berhasil diunggah, 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 selanjutnya​

Rekomendasi
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 Mar 2026