דלג לתוכן הראשי

מבוא ל-Qiskit Functions

הערות
  • Qiskit Functions הוא פיצ'ר ניסיוני הזמין רק למשתמשי IBM Quantum® Premium Plan, Flex Plan ו-On-Prem (דרך IBM Quantum Platform API). הוא נמצא בסטטוס גרסת תצוגה מקדימה וכפוף לשינויים.
גרסאות חבילות

הקוד בדף זה פותח תוך שימוש בדרישות הבאות. אנו ממליצים להשתמש בגרסאות אלה או בחדשות יותר.

qiskit[all]~=1.4.1
qiskit-ibm-runtime~=0.37.0
qiskit-ibm-catalog~=0.4

Qiskit Functions מפשטות ומאיצות גילוי אלגוריתמים ופיתוח יישומים בקנה-מידה שימושי, על ידי הפשטת חלקים מתהליך פיתוח תוכנת הקוונטום. כך, Qiskit Functions משחררות זמן שבדרך כלל מוקדש לכתיבת קוד ידנית ולכיוון עדין של ניסויים.

סקירה כללית של Qiskit Functions הפונקציות מגיעות בשתי צורות:

סוגמה הוא עושה?דוגמאות לקלט ולפלטלמי זה מיועד?
Circuit functionממשק מפושט להפעלת Circuit-ים. מפשט טרנספילציה, דיכוי שגיאות ומיתון שגיאותקלט: אובייקטי PUB מופשטים
פלט: ערכי ציפייה עם מיתון שגיאות
חוקרים שמשתמשים ב-Qiskit לגילוי אלגוריתמים ויישומים חדשים, ללא צורך להתמקד בייעול לחומרה או בטיפול בשגיאות. Circuit functions ניתנות לשימוש לבניית Application functions מותאמות אישית.
Application functionמכסה משימות ברמה גבוהה יותר, כגון חקירת אלגוריתמים ותרחישי שימוש ספציפיים לתחום. מפשט את תהליך העבודה הקוונטי לפתרון משימות, עם קלט ופלט קלאסייםקלט: מולקולות, גרפים
פלט: אנרגיית מצב בסיס ומצב מעורר, ערכים אופטימליים לפונקציית עלות
חוקרים בתחומים לא-קוונטיים, המשלבים קוונטום בתהליכי עבודה קלאסיים קיימים בקנה-מידה גדול, ללא צורך במיפוי של נתונים קלאסיים ל-Circuit-ים קוונטיים.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime

הפונקציות מסופקות על ידי IBM® ושותפים צד שלישי. כל אחת מבצעת בצורה אופטימלית עבור מאפייני עומס עבודה ספציפיים ובעלת אפשרויות כיוון ביצועים ייחודיות.

סקירה כללית של הפונקציות הזמינות

Circuit functions

שםספקשימוש מומלץיתרונות ייחודיים
Tensor-Network Error MitigationAlgorithmiqעומסי עבודה בעלי אובזרבבלים בעלי משקל נמוך ו-Circuit-ים ללא לולאות.מפחית עלויות מדידה ושונות, ומצליח לעלות על בסיסי מיתון שגיאות סטנדרטיים כגון Zero Noise Extrapolation (ZNE) ו-Probabilistic Error Cancellation (PEC) עבור מחלקות Circuit רלוונטיות.
QESEM: Error Suppression and Error MitigationQedmaעומסי עבודה הכוללים Circuit-ים עם שערים שבריים או פרמטריים, אובזרבבלים בעלי משקל גבוה, ותהליכי עבודה הדורשים ערכי ציפייה לא-מוטים ואומדני זמן ריצה מדויקים.מייצר ערכי ציפייה לא-מוטים עם שונות נמוכה יותר ועלויות משאבים, ומצליח לעלות על ZNE ו-PEC עבור מחלקות Circuit רלוונטיות.
Performance ManagementQ-CTRLעומסי עבודה המכילים Circuit-ים פרמטריים, Circuit-ים עמוקים, או הדורשים ביצועי Circuit רבים.מיישם אוטומטית דיכוי שגיאות מבוסס-בינה מלאכותית על אלגוריתמים קוונטיים, ממקסם את ביצועי מכשירי IBM כדי לספק תוצאות מדויקות תוך הפחתת מספר ה-shots, זמן החישוב והעלות הנדרשים.

שיטה ללא עלויות נוספות שמשפרת את דיוק הביצוע עבור ה-Sampler וה-Estimator primitives, תואמת לכל משקל של אובזרבבלים.

Application functions

שםספקשימוש מומלץיתרונות ייחודיים
QUICK-PDEColibriTDשימוש בחישוב קוונטי עבור PDEs רב-פיזיקליים.

הכנת תהליכי עבודה לסימולציה על חומרה קוונטית, תוך שמירת שליטה מלאה הן על הפרמטרים הקוונטיים והן על הפרמטרים הפיזיקליים.
מציע מסגרת VQA היברידית חזקה המספקת פתרונות PDE מדויקים וניתנים להרחבה באמצעות קידוד פתרון מתקדם ושיטות ספקטרליות, מה שהופך אותו לנקודת כניסה אידיאלית לצוותים המנסים לבנות יכולות סימולציה מוכנות לקוונטום.
Quantum Portfolio OptimizerGlobal Data Quantumעומסי עבודה לאופטימיזציה פיננסית, המחפשים אסטרטגיות תיק השקעות אופטימליות לאורך זמן תוך מזעור סיכון ומקסום תשואות, ומאפשרים בדיקה לאחור של אסטרטגיות מסחר.פותר בעיות אופטימיזציה קומבינטוריות באמצעות הסתגלות מיוחדת ביותר של אלגוריתם הקוונטום VQE למקרה השימוש הפיננסי הזה, תוך שימוש באסטרטגיות ביצוע ממוטבות ובאופטימיזרים, יחד עם טכניקות מיתון שגיאות מותאמות-רעש שתוכננו לאופטימיזציה של תיקי השקעות.
HI-VQE ChemistryQunova Computingעומסי עבודה בכימיה חישובית, סימולציה מולקולרית, מדעי החומרים, או כל סימולציית האמילטוניאן הדורשת פתרון בעיות מבנה אלקטרוני של גוף-רב.פותר מבני אלקטרונים מולקולריים באמצעות SQD משופר תוך השגת דיוק כימי (1 kcal/mol, 1.6 mHa) עבור בעיות המדורגות ב-40 עד 60 qubits, ומצליח לעלות על פתרונות קלאסיים מסוימים במחשבי-על או SQD סטנדרטי במהירות ההתכנסות או בדיוק, בהתאמה, בסדרי גודל.
Iskay Quantum OptimizerKipu Quantumעומסי עבודה לאופטימיזציה כגון תזמון, לוגיסטיקה, ניתוב ובעיות QUBO/HUBO.

שיטות עיבוד מקדים ועיבוד לאחר קלאסיות מתכווננות ומשולבות לשגרת האופטימיזציה הקוונטית.

מספק יתרון זמן ריצה על פני פותרים קלאסיים (CPLEX, simulated annealing ו-tabu search) על בנצ'מרקים HUBO נבחרים.

Market Split ms_5_100, אתגר קשה, נפתר תוך שעות (ראה מדריך זה).
Singularity Machine LearningMultiverse Computingתהליכי עבודה של סיווג למידת מכונה קלאסית שעשויים להפיק תועלת מדיוק משופר או יעילות חישובית על ידי מינוף אופטימיזציה קוונטית המופעלת על חומרת IBM.מספק דיוק הדומה לזה של מודלים קלאסיים כגון Random Forest או XGBoost, אם לא עולה עליו, תוך פעולה עם מספר לומדים קטן משמעותית ומכלול קומפקטי יותר.

מופעל על ידי הצבעה ממוטבת-קוונטית, הוא בוחר את הלומדים האינפורמטיביים ביותר ומשפר גבולות החלטה, מה שמביא ליעילות גדולה יותר, מורכבות מודל מופחתת וביצועים חזקים יותר.
Optimization SolverQ-CTRLבעיות אופטימיזציה בינארית או כל בעיה קומבינטורית שניתן למפות לפונקציית עלות בינארית.

נתמכות פונקציות עלות מכל סדר וגדלי בעיות עד לקנה-מידה המקסימלי של המכשיר.
פתרון אופטימיזציה קוונטי מקצה לקצה מודע לרעש, המאפשר קלטים של הגדרות בעיה ברמה גבוהה ומוצא אוטומטית פתרונות מדויקים לבעיות קומבינטוריות מאתגרות קלאסית על חומרה קוונטית בקנה-מידה שימושי.

הוא מפשט את המורכבות על ידי טיפול בדיכוי שגיאות, מיפוי יעיל ואופטימיזציה היברידית קוונטית-קלאסית לפתרון משימות אופטימיזציה בקנה-מידה מלא של המכשיר ללא מומחיות קוונטית עמוקה.

התחלת עבודה עם Qiskit Functions

משתמשי Premium, Flex ו-On-Prem (דרך IBM Quantum Platform API) יכולים להתחיל להשתמש ב-IBM Qiskit Functions בחינם, או לרכוש רישיון מאחד השותפים שתרמו פונקציה לקטלוג.

בקשת ניסיון חינמי ל-Qiskit Functions של צד שלישי

כדי לבקש ניסיון חינמי חדש, נווט אל Qiskit Functions Catalog, וחקור את לוח הפרטים. לחץ על Request a free trial ומלא את המידע הנדרש על ידי שותף הפונקציות, כולל ה-AccessGroupId של IBM Cloud:

  1. נווט אל IBM Cloud IAM.
  2. אמת זכאות.
    • החלף את חשבונך בסרגל העליון לאחד בפורמט הבא: XXXXXXX - [Organization Name]
    • ודא שהארגון זהה לזה המשויך לחשבון Premium שלך.
    • אם אתה רואה "[Your Name]'s Account", אתה משתמש בחשבונך האישי, שאינו זכאי לגישה premium.
  3. מצא את מזהה קבוצת הגישה שלך.
    • לחץ על שם קבוצה.
    • לחץ על Details.
    • העתק את מזהה קבוצת הגישה. הוא אמור להתחיל ב-AccessGroup-.

התקנת לקוח Qiskit Functions Catalog

  1. כדי להתחיל להשתמש ב-Qiskit Functions, התקן את לקוח IBM Qiskit Functions Catalog:

    pip install qiskit-ibm-catalog
  2. אחזר את מפתח ה-API שלך מלוח הבקרה של IBM Quantum Platform, והפעל את הסביבה הווירטואלית של Python. ראה את הוראות ההתקנה אם עדיין לא הגדרת סביבה וירטואלית.

    אם אתה עובד בסביבת Python מהימנה (כגון מחשב נייד או תחנת עבודה אישית), השתמש בשיטה save_account() כדי לשמור את האישורים שלך באופן מקומי. (דלג לשלב הבא אם אינך משתמש בסביבה מהימנה, כגון מחשב משותף או ציבורי, כדי לאמת את הזהות מול IBM Quantum Platform.)

    כדי להשתמש ב-save_account(), הרץ python בשורת הפקודה שלך, ולאחר מכן הזן את הדברים הבאים:

    from qiskit_ibm_catalog import QiskitFunctionsCatalog

    QiskitFunctionsCatalog.save_account(channel="ibm_quantum_platform", token="<your-token>", instance="<instance-crn>")

    הקלד exit(). מעכשיו, בכל פעם שתצטרך לאמת את הזהות מול השירות, תוכל לטעון את האישורים שלך עם

    from qiskit_ibm_catalog import QiskitFunctionsCatalog
    catalog = QiskitFunctionsCatalog()
# Load saved credentials
from qiskit_ibm_catalog import QiskitFunctionsCatalog

catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
  1. הימנע מהפעלת קוד על מכונה לא-מהימנה או סביבת Python חיצונית בענן כדי למזער סיכוני אבטחה. אם עליך להשתמש בסביבה לא-מהימנה (כגון, מחשב ציבורי), שנה את מפתח ה-API שלך לאחר כל שימוש על ידי מחיקתו בדף IBM Cloud API keys כדי להפחית סיכון. למד עוד בנושא Managing user API keys. כדי לאתחל את השירות במצב זה, הרחב את הסעיף הבא כדי לצפות בקוד שתוכל להשתמש בו:

    אתחל את השירות בסביבה לא-מהימנה
    from qiskit_ibm_catalog import QiskitFunctionsCatalog

    # After using the following code, delete your API key on the IBM Quantum Platform home dashboard
    catalog = QiskitFunctionsCatalog(token="<YOUR_API_KEY>") # Use the 44-character API_KEY you created and saved from the IBM Quantum Platform Home dashboard
    זהירות

    הגן על מפתח ה-API שלך! לעולם אל תכלול את המפתח שלך בקוד מקור, סקריפט Python, או קובץ מחברת. בעת שיתוף קוד עם אחרים, ודא שמפתח ה-API שלך אינו מוטמע ישירות בתוך סקריפט ה-Python. במקום זאת, שתף את הסקריפט ללא המפתח וספק הוראות להגדרתו בצורה מאובטחת.

    אם שיתפת בטעות את המפתח שלך עם מישהו או כללת אותו בבקרת גרסאות כמו Git, בטל מיד את המפתח על ידי מחיקתו בדף IBM Cloud API keys כדי להפחית סיכון. למד עוד בנושא Managing user API keys.

  2. לאחר שאימתת את הזהות, תוכל לרשום את הפונקציות מ-Qiskit Functions Catalog שיש לך גישה אליהן:

catalog.list()
[QiskitFunction(qunova/hivqe-chemistry),
QiskitFunction(global-data-quantum/quantum-portfolio-optimizer),
QiskitFunction(algorithmiq/tem),
QiskitFunction(qedma/qesem),
QiskitFunction(multiverse/singularity),
QiskitFunction(ibm/circuit-function),
QiskitFunction(q-ctrl/optimization-solver),
QiskitFunction(colibritd/quick-pde),
QiskitFunction(q-ctrl/performance-management),
QiskitFunction(kipu-quantum/iskay-quantum-optimizer)]

הפעלת פונקציות מופעלות

לאחר שאובייקט הקטלוג נוצר, תוכל לבחור פונקציה באמצעות catalog.load(provider/function-name):

ibm_cf = catalog.load("ibm/circuit-function")

לכל Qiskit Function יש קלטים, אפשרויות ופלטים מותאמים אישית. בדוק את דפי התיעוד הספציפיים לפונקציה שברצונך להפעיל לקבלת מידע נוסף. כברירת מחדל, כל המשתמשים יכולים להפעיל רק עבודת פונקציה אחת בכל פעם:

# This cell is hidden from users
# It gets these details programmatically so we can test this notebook
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit.circuit.random import random_circuit

service = QiskitRuntimeService()
instance = service.active_account()["instance"]
backend_name = service.least_busy().name

circuit = random_circuit(num_qubits=2, depth=2, seed=42)
observable = "Z" * circuit.num_qubits
job = ibm_cf.run(
pubs=[(circuit, observable)],
instance=instance,
backend_name=backend_name, # E.g. "ibm_fez"
)

job.job_id
'7f08c9d5-471b-4da2-92e7-4f2cb94c23a8'

בדיקת סטטוס עבודה

טיפ

כיום, טבלת עומסי העבודה של IBM Quantum משקפת רק עומסי עבודה של Qiskit Runtime. השתמש ב-job.status() כדי לראות את הסטטוס הנוכחי של עומס העבודה של Qiskit Function שלך.

עם job_id של Qiskit Function שלך, תוכל לבדוק את הסטטוס של עבודות רצות. זה כולל את הסטטוסים הבאים:

  • QUEUED: התוכנית המרוחקת נמצאת בתור של Qiskit Function. עדיפות התור מבוססת על כמה השתמשת ב-Qiskit Functions.
  • INITIALIZING: התוכנית המרוחקת מתחילה; זה כולל הגדרת הסביבה המרוחקת והתקנת תלויות.
  • RUNNING: התוכנית רצה. זה כולל גם מספר סטטוסים מפורטים יותר אם הם נתמכים על ידי פונקציות ספציפיות
    • RUNNING: MAPPING": הפונקציה ממפה כעת את הקלטים הקלאסיים שלך לקלטים קוונטיים
    • RUNNING: OPTIMIZING_FOR_HARDWARE": הפונקציה מבצעת אופטימיזציה עבור ה-QPU שנבחר. זה יכול לכלול טרנספילציה של Circuit, אפיון QPU, אחורי-הפצת אובזרבבל וכדומה
    • RUNNING: WAITING_FOR_QPU: הפונקציה הגישה עבודה ל-Qiskit Runtime, וממתינה בתור
    • RUNNING: EXECUTING_QPU: לפונקציה יש עבודת Qiskit Runtime פעילה
    • RUNNING: POST_PROCESSING: הפונקציה מעבדת תוצאות לאחר הריצה. זה יכול לכלול מיתון שגיאות, מיפוי תוצאות קוונטיות לקלאסיות וכדומה
  • DONE: התוכנית הושלמה, ותוכל לאחזר נתוני תוצאות עם job.results().
  • ERROR: התוכנית הפסיקה לרוץ בגלל בעיה. השתמש ב-job.result() כדי לקבל את הודעת השגיאה.
  • CANCELED: התוכנית בוטלה; על ידי משתמש, השירות, או השרת.
job.status()
'QUEUED'

אחזור תוצאות

לאחר שהתוכנית במצב DONE, תוכל להשתמש ב-job.results() כדי לאחזר את התוצאה. פורמט הפלט משתנה עם כל פונקציה, לכן הקפד לעקוב אחר התיעוד הספציפי:

result = job.result()
print(result)
PrimitiveResult([PubResult(data=DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>)), metadata={'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32})], metadata={'dynamical_decoupling': {'enable': True, 'sequence_type': 'XX', 'extra_slack_distribution': 'middle', 'scheduling_method': 'alap'}, 'twirling': {'enable_gates': False, 'enable_measure': True, 'num_randomizations': 'auto', 'shots_per_randomization': 'auto', 'interleave_randomizations': True, 'strategy': 'active-accum'}, 'resilience': {'measure_mitigation': True, 'zne_mitigation': False, 'pec_mitigation': False}, 'version': 2})

תוכל גם לבטל עבודה בכל עת:

job.stop()
'Job has been stopped.'

רשימת עבודות שהופעלו בעבר עם Qiskit Functions

תוכל להשתמש ב-jobs() כדי לרשום את כל העבודות שהוגשו ל-Qiskit Functions:

old_jobs = catalog.jobs()
old_jobs
[<Job | f6c29f49-4d5f-4fff-aca6-2e9a115b9763>,
<Job | 7f08c9d5-471b-4da2-92e7-4f2cb94c23a8>,
<Job | 62fe9176-d1e5-467e-b2bd-7a3f3c7be4e5>,
<Job | af525b2e-16b1-45a1-80bb-dbd94ce30258>,
<Job | b95a7a57-c1ad-4958-b7ac-953e4e1ee824>,
<Job | 7bfa33da-0f17-4e67-84b6-f556f7eeb436>,
<Job | ca46c191-9eb9-4de6-bfa7-b60d7eb29b5e>,
<Job | 6ac0ba93-3831-43fb-9fb9-760da2225e06>,
<Job | f0e38071-060d-47e8-988d-9cc1f69358e3>,
<Job | 629cf110-e490-4675-8a07-f6d298d166b0>]

אם כבר יש לך את מזהה העבודה עבור עבודה מסוימת, תוכל לאחזר את העבודה עם catalog.get_job_by_id():

# First, get the most recent job that has been executed.
latest_job = old_jobs[0]

# We can also get that same job with get_job_by_id
job_by_id = catalog.get_job_by_id(latest_job.job_id)

# Verify that the job is the same using both retrieval methods.
assert job_by_id.job_id == latest_job.job_id

# Print the job_id for this job.
print(job_by_id.job_id)
f6c29f49-4d5f-4fff-aca6-2e9a115b9763

אחזור הודעות שגיאה

אם סטטוס התוכנית הוא ERROR, השתמש ב-job.error_message() כדי לאחזר את הודעת השגיאה באופן הבא:

job.error_message()
qiskit.exceptions.QiskitError: 'Workflow execution failed -- https://docs.quantum.ibm.com/errors#9999'

הצעדים הבאים

המלצות
  • חקור Circuit functions כדי לבנות אלגוריתמים ויישומים חדשים, ללא צורך לנהל טרנספילציה או טיפול בשגיאות.
  • חקור Application functions כדי לפתור משימות ספציפיות לתחום, עם קלט ופלט קלאסיים.