דלג לתוכן הראשי
פרויקט זה בשלב בטא. מצאת באג? פתח issue ב-GitHub. יש שאלה או רעיון? שאל ב-Discussions — נשמח לשמוע ממך!
מה איכות התרגום בדף זה?

הצהרה על תלויות

managed workflow רץ בסביבת Python שהוא מכין מראש. ה-job לא יכול לגשת לאינטרנט, ולכן הוא לא יכול לבצע pip install לחבילות. במקום זה, Qiskit ורשימה של חבילות נתמכות כבר מותקנים, ואפשר להעלות wheels לכל חבילה אחרת שה-workflow שלכם צריך.

בדיקה אילו חבילות מותקנות​

כל job רץ עם Python 3.12 על Linux (x86_64), עם החבילות הבאות מותקנות:

  • qiskit, qiskit-ibm-runtime, qiskit-serverless והתלויות שלהם, כמו numpy.

  • החבילות הנתמכות, כמו qiskit-aer, qiskit-addon-sqd, qiskit-addon-utils, qiskit-mitigation, qiskit-addon-slc, qiskit-paulice, ffsim ו-pyscf. כל אחת מותקנת בגרסה קבועה אחת.

כדי לראות את החבילות הנתמכות ואת הגרסאות שלהן, קראו ל-dependencies_versions() מהמחברת המקומית שלכם:

run_workflow_remotely.ipynb

from qiskit_ibm_catalog import ManagedWorkflowClient

client = ManagedWorkflowClient()
client.dependencies_versions()

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

workflow לא קורא קובץ requirements.txt או pyproject.toml, ולכן הוא לא מתקין את החבילות שהקבצים האלה מפרטים. גם הארגומנט dependencies של ManagedWorkflow הוצא משימוש ומתעלמים ממנו, ולכן הוא לא מתקין חבילות. הסירו אותו מקוד ההעלאה שלכם, והעלו wheels במקום זאת.

חבילות ב-compute profiles עם GPU​

משימות שרצות על פרופיל חישוב GPU כוללות גם את חבילות ה-CUDA הבאות. החבילות האלה פועלות רק בפרופיל GPU, ו-dependencies_versions() לא מציגה אותן. אל תעלו גרסאות CUDA wheel משלכם, כי הן מתנגשות עם הגרסאות האלה.

חבילהגרסה
gpu4pyscf-cuda12x1.8.1
gpu4pyscf-libxc-cuda12x0.8.1
cupy-cuda12x14.2.0
cutensor-cu122.8.0
cuda-pathfinder1.8.5
nvidia-cublas-cu1212.9.3.13
nvidia-cuda-nvrtc-cu1212.9.86
nvidia-cuda-runtime-cu1212.9.79
nvidia-cufft-cu1211.4.1.4
nvidia-curand-cu1210.3.10.19
nvidia-cusolver-cu1211.7.5.82
nvidia-cusparse-cu1212.5.10.65
nvidia-nvjitlink-cu1212.9.86

הגרסאות של nvidia-*-cu12 עשויות להשתנות כשהסביבה נבנית מחדש. קוד שתלוי בגרסה מדויקת של ספריית CUDA עשוי להזדקק לעדכון אחרי שחרור חדש.

בקשת חבילה​

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

הוספת חבילות משלכם​

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

בניית wheels​

המשימה מתקינה wheels בלי חיבור לאינטרנט, ולכן כל wheel חייב לעבוד עם Python 3.12 על Linux (x86_64). אספו את ה-wheels בתיקייה אחת:

Local terminal

# Your own package
pip wheel --no-deps --wheel-dir wheels ./mypkg

# A package from PyPI, for the job's platform
pip download --only-binary=:all: --platform manylinux_2_28_x86_64 \
--python-version 3.12 --dest wheels pendulum==3.1.0

עם --platform ו---python-version, הפקודה pip download מורידה wheels עבור הפלטפורמה של המשימה, גם אם מריצים אותה ב-macOS או ב-Windows. היא גם מורידה את התלויות של החבילה, כמו python-dateutil, six ו-tzdata עבור pendulum. מכיוון שהמשימה מתקינה כל wheel בלי התלויות שלו, העלו wheel לכל תלות שחסרה בסביבה, ומחקו מהתיקייה את שאר ה-wheels.

wheel של Python טהור (py3-none-any.whl) עובד בכל פלטפורמה. אם לחבילה עם קוד מקומפל אין wheel ל-Linux x86_64 ב-PyPI, בנו אחד ב-Linux, למשל בקונטיינר python:3.12. שמרו על שמות הקבצים המקוריים, כי pip קורא מהם את שם החבילה, הגרסה והפלטפורמה.

העלאת wheels​

העלו את ה-wheels מהמחברת המקומית שלכם באמצעות add_wheels():

run_workflow_remotely.ipynb

from qiskit_ibm_catalog import ManagedWorkflowClient

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

client.add_wheels(my_workflow, ["wheels/*.whl"])
print(client.list_wheels(my_workflow))

כל נתיב יכול להיות שם קובץ או תבנית glob, ו-add_wheels() מחזירה את שמות ה-wheels שהועלו. אם תבנית לא תואמת אף קובץ, או תואמת קובץ שאינו קובץ .whl, הפונקציה add_wheels() מעלה QiskitServerlessException.

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

החלפה או הסרה של wheels​

כדי לראות אילו wheels הועלו ל-workflow, קראו ל-list_wheels(). כדי להסיר wheels, העבירו את שמות הקבצים שלהם ל-remove_wheels():

run_workflow_remotely.ipynb

client.list_wheels(my_workflow)
# ['mypkg-1.0-py3-none-any.whl']

client.remove_wheels(my_workflow, ["mypkg-1.0-py3-none-any.whl"])

כדי לשדרג חבילה, הסירו את ה-wheel הישן ואז הוסיפו את החדש. לגרסה חדשה יש שם קובץ שונה, ולכן אם משאירים את ה-wheel הישן, install_uploaded_wheels() מתקינה את שתי הגרסאות.

run_workflow_remotely.ipynb

client.remove_wheels(my_workflow, ["mypkg-1.0-py3-none-any.whl"])
client.add_wheels(my_workflow, ["wheels/mypkg-1.1-*.whl"])

התקנת wheels ב-workflow שלכם​

ערכו את קוד ה-workflow כך שיקרא ל-install_uploaded_wheels() לפני שהוא מייבא את החבילות:

source_files/my_workflow.py

from qiskit_serverless import install_uploaded_wheels

install_uploaded_wheels()

import pendulum # Installed from an uploaded wheel

install_uploaded_wheels() מתקינה כל wheel בתיקיית wheels. אם ל-workflow אין wheels, הקריאה לא עושה דבר. ה-wheels מותקנים מחדש בכל הרצה, ולכן קבוצה גדולה של wheels מאריכה את זמן ההפעלה של כל משימה.

שיטה מומלצת: הביאו רק חבילות חסרות​

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

לפני ההעלאה, בדקו את הדרישות שלכם עם dependency_report() מהמחברת המקומית שלכם:

run_workflow_remotely.ipynb

print(client.dependency_report(["pendulum==3.1.0", "qiskit-aer", "qiskit-addon-sqd==0.10.0"]))
requirement status note
pendulum==3.1.0 bring not in image — upload a wheel
qiskit-aer baked already in image (qiskit-aer==0.17.2)
qiskit-addon-sqd==0.10.0 clash image ships qiskit-addon-sqd==0.13.1

הדוח נותן לכל דרישה אחד מהסטטוסים הבאים:

  • baked: הסביבה כבר מספקת את החבילה. אל תעלו wheel עבורה.

  • bring: הסביבה לא כוללת את החבילה. העלו wheel עבורה.

  • clash: הסביבה מספקת גרסה אחרת. שנו את הגרסה שהקוד שלכם דורש, או בנו מחדש את החבילה שלכם לגרסה המותקנת.

הדוח בודק רק את החבילות הנתמכות, ולכן הוא מציג את qiskit, qiskit-ibm-runtime, qiskit-serverless ו-numpy כ-bring. הסביבה כוללת אותן, ולכן אל תעלו להן wheels. הדוח מציג clash רק עבור גרסה מדויקת עם ==. הוא מציג טווח, כמו >=0.10, כ-baked. הדוח לא מעלה שום קובץ.

פתרון בעיות בתלויות​

בעיהסיבה
pip install נכשל בתוך ה-workflow.המשימה לא יכולה לגשת לאינטרנט. העלו wheel במקום.
ModuleNotFoundError עבור חבילה שהעליתם.ה-workflow מייבא את החבילה לפני שהוא קורא ל-install_uploaded_wheels().
ModuleNotFoundError עבור תלות של חבילה שהעליתם.wheels מותקנים בלי התלויות שלהם. העלו wheel לתלות החסרה.
השגיאה אומרת ש-wheel is not a supported wheel on this platform.ה-wheel מיועד למערכת הפעלה או לגרסת Python אחרת. השיגו wheel ל-Python 3.12 על Linux x86_64.
install_uploaded_wheels() נכשלת עם ResolutionImpossible.בתיקיית wheels יש שתי גרסאות של אותה חבילה. הסירו את ה-wheel הישן באמצעות remove_wheels().
חבילת CUDA, כמו cupy, נכשלת בפרופיל חישוב GPU אחרי שהעליתם wheels.wheel החליף את אחת מחבילות ה-CUDA שהסביבה מספקת. הסירו את ה-wheel הזה באמצעות remove_wheels().
חבילה מותקנת, כמו numpy, נכשלת אחרי שהעליתם wheels.wheel התקין עותק שני של חבילה שהסביבה מספקת. הסירו את ה-wheel הזה באמצעות remove_wheels().