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
Qiskit Serverless sedang menerima naik taraf, dan ciri-cirinya berubah dengan pantas. Sepanjang fasa pembangunan ini, dapatkan nota keluaran dan dokumentasi terkini di halaman Qiskit Serverless GitHub.
Contoh ini menunjukkan cara menggunakan alat qiskit-serverless untuk membuat program transpilasi selari, kemudian menggunakan qiskit-ibm-catalog untuk memuat naik program anda ke IBM Quantum Platform agar boleh digunakan sebagai perkhidmatan jauh yang boleh digunakan semula.
Gambaran keseluruhan aliran kerja
- Cipta direktori tempatan dan fail program kosong (
./source_files/transpile_remote.py) - Tambah kod ke program anda yang, apabila dimuat naik ke Qiskit Serverless, akan mentranspil litar
- Gunakan
qiskit-ibm-cataloguntuk mengesahkan ke Qiskit Serverless - Muat naik program ke Qiskit Serverless
Selepas memuat naik program anda, anda boleh menjalankannya untuk mentranspil litar dengan mengikuti panduan Jalankan beban kerja Qiskit Serverless pertama anda dari jauh.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime qiskit-serverless
Contoh: Transpilasi jauh dengan Qiskit Serverless
Contoh ini memandu anda mencipta dan menambah ke fail program yang, apabila anda memuat naiknya ke Qiskit Serverless, akan mentranspil circuit terhadap backend dan optimization_level sasaran yang diberikan.
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 direktori tertentu (dalam contoh ini, direktori source_files) untuk dijalankan dari jauh. Setelah ini disediakan, anda boleh melaraskan transpile_remote.py untuk mengambil input dan memulangkan output.
Cipta direktori dan fail program kosong
Mula-mula, cipta direktori bernama source_files, kemudian cipta fail program dalam direktori tersebut, supaya laluannya ialah ./source_files/transpile_remote.py. Ini ialah fail yang akan anda muat naik ke Qiskit Serverless.
Tambah kod ke fail program anda
Isikan fail program anda dengan kod berikut, kemudian simpannya.
Jika anda membaca sel kod secara tempatan dalam notebook, anda akan melihat magic command %%writefile. Melaksanakan sel dengan magic command ini menyimpannya ke cakera dan bukannya melaksanakannya.
# This cell is hidden from users, it creates a new folder
from pathlib import Path
Path("./source_files").mkdir(exist_ok=True)
%%writefile ./source_files/transpile_remote.py
# If you include the preceding `%%writefile` command (visible only when you read this
# locally in a notebook), running this cell saves to disk rather than executing the code.
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
Tambah kod untuk mendapatkan argumen program
Sekarang tambah kod berikut ke fail program anda, yang menyediakan 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
# If you include the preceding `%%writefile` command (visible only when you read this
# locally in a notebook), running this cell saves to disk rather than executing the code.
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")
Tambah kod yang memanggil Backend
Tambah kod berikut ke fail program anda, yang memanggil Backend anda dengan QiskitRuntimeService.
Kod berikut mengandaikan bahawa anda telah mengikuti proses untuk menyimpan kelayakan anda dengan menggunakan QiskitRuntimeService.save_account, dan akan memuatkan akaun lalai yang anda simpan melainkan anda menyatakan sebaliknya. Lihat Simpan kelayakan log masuk anda dan Mulakan akaun perkhidmatan Qiskit Runtime anda untuk maklumat lanjut.
%%writefile --append ./source_files/transpile_remote.py
# If you include the preceding `%%writefile` command (visible only when you read this
# locally in a notebook), running this cell saves to disk rather than executing the code.
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.backend(backend_name)
Tambah kod untuk mentranspil
Akhirnya, tambah kod berikut ke fail program anda. Kod ini menjalankan transpile_remote() merentas semua circuits yang dihantar, dan memulangkan transpiled_circuits sebagai keputusan:
%%writefile --append ./source_files/transpile_remote.py
# If you include the preceding `%%writefile` command (visible only when you read this
# locally in a notebook), running this cell saves to disk rather than executing the code.
# Each circuit is being transpiled and will populate the array
results = [
transpile_remote(circuit, 1, backend)
for circuit in circuits
]
save_result({
"transpiled_circuits": results
})
Mengesahkan ke Qiskit Serverless
Gunakan qiskit-ibm-catalog untuk mengesahkan ke QiskitServerless dengan kunci API anda (anda boleh menggunakan kunci API QiskitRuntimeService anda, atau mencipta kunci API baharu pada papan pemuka IBM Quantum Platform).
from qiskit_ibm_catalog import QiskitServerless, QiskitFunction
# Authenticate to the remote cluster and submit the pattern for remote execution
serverless = QiskitServerless()
Jalankan kod untuk memuat naik
Jalankan kod berikut untuk memuat naik program. Qiskit Serverless memampatkan kandungan working_dir (dalam kes ini, source_files) ke dalam tar, yang dimuat naik dan kemudian dibersihkan. entrypoint mengenal pasti program utama yang boleh dilaksanakan untuk dijalankan oleh Qiskit Serverless.
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)
Sahkan muat naik
Untuk menyemak sama ada muat naik berjaya, gunakan serverless.list(), seperti dalam kod berikut:
# 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.