Перейти до основного вмісту
Цей проєкт у бета-версії. Знайшов(-ла) помилку? Відкрити issue на GitHub. Є запитання чи ідея? Запитати в Discussions — будемо раді твоєму відгуку!
Яка якість перекладу на цій сторінці?

Оголошення залежностей

Керований робочий процес виконується в середовищі Python, яке він готує заздалегідь. Завдання не має доступу до інтернету, тому не може виконати pip install для пакетів. Натомість Qiskit і список підтримуваних пакетів уже встановлені, а для будь-якого іншого потрібного пакета можна завантажити wheel-файли.

Перевір, які пакети встановлено​

Кожне завдання виконується з 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()

Твій робочий процес може імпортувати будь-який із цих пакетів без налаштування. Робочий процес встановлює їх під час створення середовища, а не під час запуску завдання, тому вони не збільшують час запуску завдання.

Робочий процес не читає файли requirements.txt чи pyproject.toml, тому не встановлює пакети, перелічені в них. Аргумент dependencies класу ManagedWorkflow застарілий і ігнорується, тому він також не встановлює пакети. Видали його з коду завантаження й натомість завантаж wheel-файли.

Пакети в обчислювальних профілях із GPU​

Завдання, що виконуються в обчислювальному профілі з GPU, також мають встановлені такі пакети CUDA. Ці пакети працюють лише в профілі з GPU, а dependencies_versions() їх не перелічує. Не завантажуй власні wheel-файли CUDA, бо вони конфліктують із цими версіями.

ПакетВерсія
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-файли на своєму комп'ютері, завантаж їх у файлове сховище робочого процесу та встанови на початку робочого процесу. Завантажувати їх повторно потрібно лише тоді, коли вони змінюються.

Збирання wheel-файлів​

Завдання встановлює wheel-файли без підключення до інтернету, тому кожен wheel-файл має працювати з Python 3.12 на Linux (x86_64). Збери wheel-файли в одній теці:

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 отримує wheel-файли для платформи завдання, навіть якщо ти запускаєш її на macOS чи Windows. Вона також завантажує залежності пакета, наприклад python-dateutil, six і tzdata для pendulum. Оскільки завдання встановлює кожен wheel-файл без його залежностей, завантаж wheel-файл для кожної залежності, якої бракує в середовищі, а решту wheel-файлів видали з теки.

Чисто Python-овий wheel-файл (py3-none-any.whl) працює на будь-якій платформі. Якщо для пакета зі скомпільованим кодом на PyPI немає wheel-файлу для Linux x86_64, збери його на Linux, наприклад у контейнері python:3.12. Зберігай оригінальні назви файлів, бо pip зчитує з них назву пакета, версію та платформу.

Завантаження wheel-файлів​

Завантаж wheel-файли зі свого локального ноутбука за допомогою 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() повертає назви завантажених wheel-файлів. Якщо шаблону не відповідає жоден файл або відповідає файл, що не є файлом .whl, add_wheels() викликає QiskitServerlessException.

Завантаж робочий процес до того, як додаватимеш wheel-файли, бо вони зберігаються разом із ним. Вони потрапляють у теку wheels у файловому сховищі робочого процесу, окремо від твоїх інших файлів.

Заміна або видалення wheel-файлів​

Щоб побачити wheel-файли, завантажені в робочий процес, виклич list_wheels(). Щоб видалити wheel-файли, передай їхні назви в 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"])

Встановлення wheel-файлів у твоєму робочому процесі​

Зміни код робочого процесу так, щоб він викликав 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. Якщо в робочого процесу немає wheel-файлів, виклик нічого не робить. Wheel-файли встановлюються знову під час кожного запуску, тому великий набір wheel-файлів збільшує час запуску кожного завдання.

Рекомендована практика: додавай лише відсутні пакети​

Як рекомендовану практику, завантажуй wheel-файли лише для пакетів, яких бракує в середовищі. 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. Середовище їх містить, тому не завантажуй для них wheel-файли. Звіт показує clash лише для точної версії з ==. Діапазон, наприклад >=0.10, він показує як baked. Звіт не завантажує жодних файлів.

Усунення проблем із залежностями​

ПроблемаПричина
pip install завершується помилкою всередині робочого процесу.Завдання не має доступу до інтернету. Натомість завантаж wheel-файл.
ModuleNotFoundError для пакета, який ти завантажив.Робочий процес імпортує пакет до виклику install_uploaded_wheels().
ModuleNotFoundError для залежності пакета, який ти завантажив.Wheel-файли встановлюються без своїх залежностей. Завантаж 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 після завантаження wheel-файлів.Wheel-файл замінив один із пакетів CUDA, що надаються середовищем. Видали цей wheel-файл за допомогою remove_wheels().
Встановлений пакет, наприклад numpy, дає збій після завантаження wheel-файлів.Wheel-файл встановив другу копію пакета, який надає середовище. Видали цей wheel-файл за допомогою remove_wheels().