Lumaktaw sa pangunahing nilalaman
Ang proyektong ito ay nasa beta. Nakakita ng bug? Mag-bukas ng GitHub issue. May tanong o ideya? Magtanong sa Discussions — gusto naming marinig ang iyong feedback!
Gaano kaganda ang kalidad ng pagsasalin sa pahinang ito?

Ideklara ang mga dependency

Tumatakbo ang isang managed workflow sa isang Python environment na inihahanda nito nang maaga. Hindi maaabot ng job ang internet, kaya hindi ito makakapag-pip install ng mga package. Sa halip, naka-install na ang Qiskit at isang listahan ng mga sinusuportahang package, at maaari kang mag-upload ng mga wheel para sa anumang ibang package na kailangan ng workflow mo.

Tingnan kung aling mga package ang naka-install​

Tumatakbo ang bawat job gamit ang Python 3.12 sa Linux (x86_64), na may mga sumusunod na package na naka-install:

  • qiskit, qiskit-ibm-runtime, qiskit-serverless, at ang mga dependency nila, gaya ng numpy.

  • Ang mga sinusuportahang package, gaya ng qiskit-aer, qiskit-addon-sqd, qiskit-addon-utils, qiskit-mitigation, qiskit-addon-slc, qiskit-paulice, ffsim, at pyscf. Bawat isa ay naka-install sa isang nakatakdang bersyon.

Para makita ang mga sinusuportahang package at ang mga bersyon nila, tawagin ang dependencies_versions() mula sa local mong notebook:

run_workflow_remotely.ipynb

from qiskit_ibm_catalog import ManagedWorkflowClient

client = ManagedWorkflowClient()
client.dependencies_versions()

Maaaring mag-import ang workflow mo ng alinman sa mga package na ito nang walang setup. Ini-install ng workflow ang mga ito kapag binubuo ang environment, hindi kapag nagsisimula ang job, kaya hindi sila nagdaragdag sa oras ng pagsisimula ng job.

Hindi bumabasa ang workflow ng requirements.txt o pyproject.toml na file, kaya hindi nito ini-install ang mga package na nakalista sa mga file na ito. Ang argument na dependencies ng ManagedWorkflow ay deprecated at binabalewala, kaya hindi rin ito nag-i-install ng mga package. Alisin ito sa upload code mo, at mag-upload ng mga wheel na lang.

Mga package sa mga GPU compute profile​

Ang mga job na tumatakbo sa isang GPU compute profile ay may naka-install din na mga sumusunod na CUDA package. Gumagana lang ang mga package na ito sa GPU profile, at hindi sila nililista ng dependencies_versions(). Huwag mag-upload ng sarili mong mga CUDA wheel, dahil magkakasalungat ang mga ito sa mga bersyong ito.

PackageVersion
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

Puwedeng magbago ang mga bersyon ng nvidia-*-cu12 kapag muling ginawa ang environment. Maaaring kailanganing i-update ang code na umaasa sa eksaktong bersyon ng CUDA library pagkatapos ng bagong release.

Humiling ng package​

Kung kailangan din ng ibang user ang isang package, humiling sa GitHub. Idadagdag sa environment ang tinanggap na package sa susunod na release. Hanggang doon, o para sa private na package, idagdag ito bilang wheel.

Idagdag ang sarili mong mga package​

Para gumamit ng package na hindi naka-install, kolektahin ang mga wheel file nito sa computer mo, i-upload ang mga ito sa file storage ng workflow, at i-install ang mga ito sa simula ng workflow. Uulitin mo lang ang pag-upload kapag nagbago ang mga ito.

Gumawa ng mga wheel​

Nag-i-install ang job ng mga wheel nang walang internet connection, kaya dapat gumana ang bawat wheel sa Python 3.12 sa Linux (x86_64). Kolektahin ang mga wheel sa iisang folder:

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

Gamit ang --platform at --python-version, kumukuha ang pip download ng mga wheel para sa platform ng job, kahit patakbuhin mo ito sa macOS o Windows. Dina-download din nito ang mga dependency ng package, gaya ng python-dateutil, six, at tzdata para sa pendulum. Dahil ini-install ng job ang bawat wheel nang walang mga dependency nito, mag-upload ng wheel para sa bawat dependency na wala sa environment, at burahin sa folder ang iba pang mga wheel.

Gumagana sa kahit anong platform ang pure-Python na wheel (py3-none-any.whl). Kung walang Linux x86_64 na wheel sa PyPI ang isang package na may compiled code, gumawa ng isa sa Linux, halimbawa sa isang python:3.12 container. Panatilihin ang orihinal na mga pangalan ng file, dahil binabasa ng pip ang pangalan ng package, bersyon, at platform mula sa mga ito.

I-upload ang mga wheel​

I-upload ang mga wheel mula sa local notebook mo gamit ang 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))

Ang bawat path ay puwedeng pangalan ng file o glob pattern, at ibinabalik ng add_wheels() ang mga pangalan ng na-upload na mga wheel. Kung walang file na tumutugma sa pattern, o may tumugmang file na hindi .whl file, nagtataas ang add_wheels() ng QiskitServerlessException.

I-upload ang workflow bago ka magdagdag ng mga wheel, dahil iniimbak ang mga wheel kasama nito. Napupunta ang mga ito sa isang wheels folder sa file storage ng workflow, hiwalay sa iba mong mga file.

Palitan o alisin ang mga wheel​

Para makita ang mga wheel na na-upload sa isang workflow, tawagin ang list_wheels(). Para mag-alis ng mga wheel, ipasa ang mga pangalan ng file nito sa 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"])

Para i-upgrade ang isang package, alisin ang lumang wheel, tapos idagdag ang bago. May ibang pangalan ng file ang bagong bersyon, kaya kung iiwan mo ang lumang wheel, ini-install ng install_uploaded_wheels() ang parehong bersyon.

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"])

I-install ang mga wheel sa workflow mo​

I-edit ang code ng workflow mo para tawagin ang install_uploaded_wheels() bago nito i-import ang mga package:

source_files/my_workflow.py

from qiskit_serverless import install_uploaded_wheels

install_uploaded_wheels()

import pendulum # Installed from an uploaded wheel

Ini-install ng install_uploaded_wheels() ang bawat wheel sa wheels folder. Kung walang mga wheel ang workflow, walang ginagawa ang tawag. Muling ini-install ang mga wheel sa bawat run, kaya ang malaking set ng mga wheel ay nagdaragdag sa oras ng pagsisimula ng bawat job.

Best practice: dalhin lang ang mga package na kulang​

Bilang best practice, mag-upload lang ng mga wheel para sa mga package na kulang sa environment. Ang wheel para sa naka-install nang package, gaya ng numpy, ay nag-i-install ng pangalawang kopya, at puwedeng alinman sa dalawang kopya ang makuha ng code na nag-i-import nito. Lumalabas lang ang mga error mula sa hindi pagkakatugma kapag tumatakbo na ang job.

Bago ka mag-upload, suriin ang mga requirement mo gamit ang dependency_report() mula sa local notebook mo:

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

Binibigyan ng report ang bawat requirement ng isa sa mga sumusunod na status:

  • baked: Ibinibigay na ng environment ang package. Huwag mag-upload ng wheel para dito.

  • bring: Kulang sa environment ang package. Mag-upload ng wheel para dito.

  • clash: Ibang bersyon ang ibinibigay ng environment. Baguhin ang bersyong kailangan ng code mo, o muling buuin ang package mo para sa naka-install na bersyon.

Sinusuri lang ng report ang mga suportadong package, kaya ipinapakita nito ang qiskit, qiskit-ibm-runtime, qiskit-serverless, at numpy bilang bring. Kasama na ang mga ito sa environment, kaya huwag mag-upload ng mga wheel para sa kanila. Ipinapakita lang ng report ang clash para sa eksaktong bersyon na ==. Ipinapakita nito bilang baked ang isang range, gaya ng >=0.10. Hindi nag-a-upload ng anumang file ang report.

I-troubleshoot ang mga dependency​

ProblemaSanhi
Pumapalya ang pip install sa loob ng workflow.Hindi maabot ng job ang internet. Mag-upload na lang ng wheel.
ModuleNotFoundError para sa package na in-upload mo.Ini-import ng workflow ang package bago nito tawagin ang install_uploaded_wheels().
ModuleNotFoundError para sa dependency ng package na in-upload mo.Ini-install ang mga wheel nang walang mga dependency nito. Mag-upload ng wheel para sa kulang na dependency.
Sinasabi ng error na ang isang wheel ay is not a supported wheel on this platform.Para sa ibang operating system o bersyon ng Python ang wheel. Kumuha ng wheel para sa Python 3.12 sa Linux x86_64.
Pumapalya ang install_uploaded_wheels() na may ResolutionImpossible.May dalawang bersyon ng parehong package ang wheels folder. Alisin ang lumang wheel gamit ang remove_wheels().
Pumapalya ang isang CUDA package, gaya ng cupy, sa GPU compute profile pagkatapos mong mag-upload ng mga wheel.Pinalitan ng isang wheel ang isa sa mga CUDA package na ibinibigay ng environment. Alisin ang wheel na iyon gamit ang remove_wheels().
Pumapalya ang naka-install na package, gaya ng numpy, pagkatapos mong mag-upload ng mga wheel.Nag-install ang isang wheel ng pangalawang kopya ng package na ibinibigay ng environment. Alisin ang wheel na iyon gamit ang remove_wheels().