Przejdź do głównej treści
Ten projekt jest w wersji beta. Znalazłeś błąd? Otwórz zgłoszenie na GitHub. Masz pytanie lub pomysł? Zapytaj w Discussions — chętnie poznamy Twoją opinię!
Jak oceniasz jakość tłumaczenia tej strony?

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-serverless oraz ich zależności, takie jak numpy.

  • Obsługiwane pakiety, takie jak qiskit-aer, qiskit-addon-sqd, qiskit-addon-utils, qiskit-mitigation, qiskit-addon-slc, qiskit-paulice, ffsim i pyscf. 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.

PakietWersja
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

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​

ProblemPrzyczyna
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().