Langkau ke kandungan utama
Projek ini dalam fasa beta. Jumpa pepijat? Buat isu GitHub. Ada soalan atau idea? Tanya dalam Discussions — kami suka dengar maklum balas anda!
Bagaimana kualiti terjemahan pada halaman ini?

Jalankan sapuan parameter

Versi pakej

Kod pada halaman ini dibangunkan menggunakan keperluan berikut. Kami mengesyorkan penggunaan versi ini atau yang lebih baharu.

qiskit-serverless~=0.38.0

Sapuan parameter berfungsi seperti tatasusunan job Slurm. Panggil run() sekali bagi setiap set input, dan job berjalan serentak, masing-masing pada nodnya sendiri. Gunakan corak yang sama untuk sebarang kelompok input bebas, seperti satu job bagi setiap molekul atau setiap backend. Job tidak boleh menghantar data antara satu sama lain, jadi pecahkan kerja kepada input yang bebas.

Contoh pada halaman ini menggunakan aliran kerja daripada Jalankan aliran kerja terurus, yang membaca satu sudut, theta:

# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"qiskit_ibm_catalog": "qiskit-ibm-catalog", "qiskit_serverless": "qiskit-serverless"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
# This cell is hidden from users. It creates the working directory.
from pathlib import Path

Path("./source_files").mkdir(exist_ok=True)
%%writefile ./source_files/my_workflow.py
import math

from qiskit_serverless import get_arguments, save_result

arguments = get_arguments()
theta = arguments["theta"]
if not 0 <= theta <= math.pi:
raise ValueError(f"theta must be between 0 and pi, got {theta}")

print(f"Computing the expectation value for theta={theta}", flush=True)
save_result({"theta": theta, "expectation_value": math.cos(theta)})
Writing ./source_files/my_workflow.py
# This cell is hidden from users. It uploads the workflow under a title that
# other test notebooks do not use, and makes load("my-workflow") return it.
import logging

from qiskit_ibm_catalog import ManagedWorkflow, ManagedWorkflowClient

logging.getLogger("qiskit_ibm_runtime").setLevel(logging.ERROR)

_test_title = "docs-run-parameter-sweep"
ManagedWorkflowClient().upload(
ManagedWorkflow(
title=_test_title,
entrypoint="my_workflow.py",
working_dir="./source_files/",
)
)
_load = ManagedWorkflowClient.load
ManagedWorkflowClient.load = lambda self, title, *a, **k: _load(
self, _test_title if title == "my-workflow" else title, *a, **k
)

Mulakan job​

Dapatkan aliran kerja melalui tajuknya, dan panggil run() sekali bagi setiap input. Simpan ID job ke dalam fail: run_workflow_remotely.ipynb

import json

from qiskit_ibm_catalog import ManagedWorkflowClient

client = ManagedWorkflowClient()
my_workflow = client.load("my-workflow")

thetas = [0.1, 0.2, 0.3]

job_ids = {
f"theta-{theta}": my_workflow.run(theta=theta).job_id for theta in thetas
}

with open("job_ids.json", "w") as f:
json.dump(job_ids, f)
  • Semak setiap input terlebih dahulu. Jika aliran kerja mempunyai skema argumen, panggil validate_arguments() pada setiap input sebelum gelung.

  • Simpan ID job ke dalam fail. Anda kemudian boleh mengumpul hasil daripada sesi baharu.

  • Beri nama unik kepada fail setiap larian. Semua larian berkongsi storan fail aliran kerja. Lihat Amalan terbaik: beri nama unik kepada fail setiap larian.

  • Kekal di bawah had job aktif. Aliran kerja terurus tidak menyusun job yang melebihi had dalam baris gilir, jadi apabila anda mencapainya, mulakan lebih banyak job hanya selepas job terdahulu tamat.

Kumpulkan hasil​

Dapatkan setiap job melalui ID-nya, dan tangkap job yang gagal supaya satu kegagalan tidak menghentikan gelung: run_workflow_remotely.ipynb

from qiskit_serverless.exception import QiskitServerlessException

with open("job_ids.json") as f:
job_ids = json.load(f)

results, errors = {}, {}
for run_name, sweep_job_id in job_ids.items():
try:
results[run_name] = client.job(sweep_job_id).result()
except QiskitServerlessException as error:
errors[run_name] = str(error)

print(f"{len(results)} jobs finished, {len(errors)} failed")
3 jobs finished, 0 failed
# This cell is hidden from users. It checks the sweep results.
assert len(results) == 3 and not errors, (results, errors)
assert all(results[f"theta-{t}"]["theta"] == t for t in thetas)

Untuk menjalankan semula input yang gagal, panggil run() sekali lagi dengan argumen yang sama.

Had job aktif​

Anda boleh mempunyai sehingga 50 job yang berada dalam baris gilir, memulakan, berjalan atau membatalkan pada masa yang sama. Had ini mengira semua job anda, termasuk job aliran kerja lain. Jika anda melebihi had ini, run() menimbulkan QiskitServerlessException dan tidak mencipta atau menyusun job dalam baris gilir:

| Message: Http bad request.
| Code: 429
| Details: Active job limit reached. The maximum allowed is 50.

Langkah seterusnya​

Cadangan