Zadeklaruj zależności
Zarządzany przepływ pracy działa w środowisku Pythona, które jest przygotowywane z wyprzedzeniem. Zadanie nie ma dostępu do internetu, więc nie może wykonać pip install dla pakietów. Zamiast tego Qiskit i lista obsługiwanych pakietów są już zainstalowane, a dla każdego innego pakietu potrzebnego przepływowi pracy możesz przesłać pliki wheel.
Sprawdź, które pakiety są zainstalowane
Każde zadanie działa w Pythonie 3.12 na Linuksie (x86_64) z zainstalowanymi następującymi pakietami:
-
qiskit,qiskit-ibm-runtime,qiskit-serverlessoraz ich zależności, takie jaknumpy. -
Obsługiwane pakiety, takie jak
qiskit-aer,qiskit-addon-sqd,qiskit-addon-utils,qiskit-mitigation,qiskit-addon-slc,qiskit-paulice,ffsimipyscf. Każdy jest zainstalowany w jednej ustalonej wersji.
Aby zobaczyć obsługiwane pakiety i ich wersje, wywołaj dependencies_versions() z lokalnego notebooka:
run_workflow_remotely.ipynb
from qiskit_ibm_catalog import ManagedWorkflowClient
client = ManagedWorkflowClient()
client.dependencies_versions()
Twój przepływ pracy może importować dowolny z tych pakietów bez dodatkowej konfiguracji. Przepływ pracy instaluje je podczas budowania środowiska, a nie podczas uruchamiania zadania, więc nie wydłużają czasu startu zadania.
Przepływ pracy nie odczytuje pliku requirements.txt ani pyproject.toml, więc nie instaluje pakietów wymienionych w tych plikach. Argument dependencies w ManagedWorkflow jest przestarzały i ignorowany, więc również nie instaluje pakietów. Usuń go z kodu przesyłania i zamiast tego prześlij pliki wheel.
Pakiety w profilach obliczeniowych z GPU
Zadania działające na profilu obliczeniowym z GPU mają też zainstalowane następujące pakiety CUDA. Te pakiety działają tylko na profilu z GPU, a dependencies_versions() ich nie wyświetla. Nie przesyłaj własnych plików wheel CUDA, ponieważ powodują konflikt z tymi wersjami.
| Pakiet | Wersja |
|---|---|
gpu4pyscf-cuda12x | 1.8.1 |
gpu4pyscf-libxc-cuda12x | 0.8.1 |
cupy-cuda12x | 14.2.0 |
cutensor-cu12 | 2.8.0 |
cuda-pathfinder | 1.8.5 |
nvidia-cublas-cu12 | 12.9.3.13 |
nvidia-cuda-nvrtc-cu12 | 12.9.86 |
nvidia-cuda-runtime-cu12 | 12.9.79 |
nvidia-cufft-cu12 | 11.4.1.4 |
nvidia-curand-cu12 | 10.3.10.19 |
nvidia-cusolver-cu12 | 11.7.5.82 |
nvidia-cusparse-cu12 | 12.5.10.65 |
nvidia-nvjitlink-cu12 | 12.9.86 |
Wersje nvidia-*-cu12 mogą się zmienić po przebudowaniu środowiska. Kod zależny od dokładnej wersji biblioteki CUDA może wymagać aktualizacji po nowym wydaniu.
Poproś o pakiet
Jeśli inni użytkownicy również potrzebują danego pakietu, zgłoś prośbę na GitHubie. Zaakceptowany pakiet zostanie dodany do środowiska w jednym z kolejnych wydań. Do tego czasu, lub w przypadku pakietu prywatnego, dodaj go jako wheel.
Dodaj własne pakiety
Aby użyć pakietu, który nie jest zainstalowany, zbierz jego pliki wheel na swoim komputerze, prześlij je do magazynu plików przepływu pracy i zainstaluj je na początku przepływu pracy. Ponowne przesłanie jest potrzebne tylko wtedy, gdy pliki się zmienią.
Zbuduj pliki wheel
Zadanie instaluje pliki wheel bez połączenia z internetem, więc każdy wheel musi działać z Pythonem 3.12 w systemie Linux (x86_64). Zbierz pliki wheel w jednym folderze:
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
Dzięki --platform i --python-version polecenie pip download pobiera pliki wheel dla platformy zadania, nawet jeśli uruchamiasz je w systemie macOS lub Windows. Pobiera też zależności pakietu, takie jak python-dateutil, six i tzdata dla pendulum. Ponieważ zadanie instaluje każdy wheel bez jego zależności, prześlij wheel dla każdej zależności, której brakuje w środowisku, a pozostałe pliki wheel usuń z folderu.
Czysty wheel w Pythonie (py3-none-any.whl) działa na każdej platformie. Jeśli pakiet ze skompilowanym kodem nie ma w PyPI wheela dla Linux x86_64, zbuduj go w systemie Linux, na przykład w kontenerze python:3.12. Zachowaj oryginalne nazwy plików, ponieważ pip odczytuje z nich nazwę pakietu, wersję i platformę.
Prześlij pliki wheel
Prześlij pliki wheel z lokalnego notatnika za pomocą 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))
Każda ścieżka może być nazwą pliku lub wzorcem glob, a add_wheels() zwraca nazwy przesłanych plików wheel. Jeśli wzorzec nie pasuje do żadnego pliku lub pasuje do pliku, który nie jest plikiem .whl, add_wheels() zgłasza wyjątek QiskitServerlessException.
Prześlij przepływ pracy przed dodaniem plików wheel, ponieważ są one przechowywane razem z nim. Trafiają do folderu wheels w magazynie plików przepływu pracy, oddzielnie od pozostałych plików.
Zastąp lub usuń pliki wheel
Aby zobaczyć pliki wheel przesłane do przepływu pracy, wywołaj list_wheels(). Aby usunąć pliki wheel, przekaż ich nazwy do 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"])
Aby zaktualizować pakiet, usuń stary plik wheel, a następnie dodaj nowy. Nowa wersja ma inną nazwę pliku, więc jeśli zachowasz stary wheel, install_uploaded_wheels() zainstaluje obie wersje.
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"])
Zainstaluj pliki wheel w przepływie pracy
Zmodyfikuj kod przepływu pracy tak, aby wywoływał install_uploaded_wheels() przed zaimportowaniem pakietów:
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() instaluje każdy wheel z folderu wheels. Jeśli przepływ pracy nie ma żadnych plików wheel, wywołanie nic nie robi. Pliki wheel są instalowane ponownie przy każdym uruchomieniu, więc duży zestaw wydłuża czas startu każdego zadania.
Najlepsza praktyka: dodawaj tylko brakujące pakiety
Zgodnie z najlepszą praktyką przesyłaj pliki wheel tylko dla pakietów, których brakuje w środowisku. Wheel dla zainstalowanego pakietu, takiego jak numpy, instaluje drugą kopię, a kod, który go importuje, może otrzymać dowolną z nich. Błędy wynikające z niezgodności pojawiają się dopiero podczas działania zadania.
Przed przesłaniem sprawdź swoje wymagania za pomocą dependency_report() w lokalnym notatniku:
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
Raport przypisuje każdemu wymaganiu jeden z poniższych statusów:
-
baked: środowisko już udostępnia ten pakiet. Nie przesyłaj dla niego pliku wheel. -
bring: w środowisku brakuje tego pakietu. Prześlij dla niego plik wheel. -
clash: środowisko udostępnia inną wersję. Zmień wersję wymaganą przez kod lub przebuduj pakiet pod zainstalowaną wersję.
Raport sprawdza tylko obsługiwane pakiety, więc qiskit, qiskit-ibm-runtime, qiskit-serverless i numpy pokazuje jako bring. Środowisko je zawiera, więc nie przesyłaj dla nich plików wheel. Raport pokazuje clash tylko dla dokładnej wersji ==. Zakres, taki jak >=0.10, pokazuje jako baked. Raport nie przesyła żadnych plików.
Rozwiązywanie problemów z zależnościami
| Problem | Przyczyna |
|---|---|
pip install kończy się błędem wewnątrz przepływu pracy. | Zadanie nie ma dostępu do internetu. Zamiast tego prześlij plik wheel. |
ModuleNotFoundError dla przesłanego pakietu. | Przepływ pracy importuje pakiet przed wywołaniem install_uploaded_wheels(). |
ModuleNotFoundError dla zależności przesłanego pakietu. | Pliki wheel są instalowane bez swoich zależności. Prześlij wheel dla brakującej zależności. |
Błąd informuje, że wheel is not a supported wheel on this platform. | Wheel jest przeznaczony dla innego systemu operacyjnego lub innej wersji Pythona. Pobierz wheel dla Pythona 3.12 w systemie Linux x86_64. |
install_uploaded_wheels() kończy się błędem ResolutionImpossible. | Folder wheels zawiera dwie wersje tego samego pakietu. Usuń stary wheel za pomocą remove_wheels(). |
Pakiet CUDA, taki jak cupy, przestaje działać w profilu obliczeniowym GPU po przesłaniu plików wheel. | Wheel zastąpił jeden z pakietów CUDA udostępnianych przez środowisko. Usuń ten wheel za pomocą remove_wheels(). |
Zainstalowany pakiet, taki jak numpy, przestaje działać po przesłaniu plików wheel. | Wheel zainstalował drugą kopię pakietu udostępnianego przez środowisko. Usuń ten wheel za pomocą remove_wheels(). |