انتقل إلى المحتوى الرئيسي
هذا المشروع في مرحلة تجريبية. وجدت خطأ؟ افتح مشكلة على GitHub. لديك سؤال أو فكرة؟ اسأل في Discussions — نحب سماع ملاحظاتك!
كيف جودة الترجمة في هذه الصفحة؟

شغّل مسحًا للمعاملات

إصدارات الحزم

تم تطوير الكود في هذه الصفحة باستخدام المتطلبات التالية. نوصي باستخدام هذه الإصدارات أو الأحدث.

qiskit-serverless~=0.38.0

يعمل مسح المعاملات مثل مصفوفة مهام Slurm. استدعِ run() مرة واحدة لكل مجموعة مدخلات، وتعمل المهام في نفس الوقت، كل منها على عقدة خاصة بها. استخدم النمط نفسه لأي دفعة من المدخلات المستقلة، مثل مهمة لكل جزيء أو لكل Backend. لا يمكن للمهام إرسال بيانات إلى بعضها، لذا قسّم العمل إلى مدخلات مستقلة.

تستخدم الأمثلة في هذه الصفحة سير العمل من شغّل سير عمل مُدار، الذي يقرأ زاوية واحدة، 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
)

ابدأ المهام​

احصل على سير العمل بعنوانه، واستدعِ run() مرة واحدة لكل مدخل. احفظ معرّفات المهام في ملف: 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)
  • تحقق من كل مدخل أولًا. إذا كان لسير العمل مخطط وسائط، فاستدعِ validate_arguments() على كل مدخل قبل الحلقة.

  • احفظ معرّفات المهام في ملف. يمكنك بعد ذلك جمع النتائج من جلسة جديدة.

  • أعطِ ملفات كل تشغيل اسمًا فريدًا. تتشارك جميع التشغيلات في تخزين ملفات سير العمل. راجع أفضل ممارسة: أعطِ ملفات كل تشغيل اسمًا فريدًا.

  • ابقَ تحت حد المهام النشطة. لا يضع سير العمل المُدار المهام التي تتجاوز الحد في الطابور، لذلك عند بلوغه، ابدأ مهام أخرى فقط بعد انتهاء المهام السابقة.

اجمع النتائج​

احصل على كل مهمة عن طريق معرّفها، والتقط المهام الفاشلة حتى لا يوقف فشل واحد الحلقة: 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)

لإعادة تشغيل المدخلات التي فشلت، استدعِ run() مرة أخرى بنفس الوسائط.

حد المهام النشطة​

يمكنك أن يكون لديك ما يصل إلى 50 مهمة في قائمة الانتظار أو قيد التهيئة أو التشغيل أو الإلغاء في نفس الوقت. يحتسب هذا الحد جميع مهامك، بما فيها مهام مسارات العمل الأخرى. إذا تجاوزت هذا الحد، فإن run() يرفع QiskitServerlessException ولا ينشئ المهمة ولا يضعها في قائمة الانتظار:

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

الخطوات التالية​

توصيات