주 콘텐츠로 건너뛰기
이 프로젝트는 베타 단계입니다. 버그를 발견하셨나요? GitHub 이슈 만들기. 질문이나 아이디어가 있으신가요? Discussions에서 질문하기 — 피드백을 기다립니다!
이 페이지의 번역 품질은 어떻습니까?

종속성 선언

관리형 워크플로는 미리 준비된 Python 환경에서 실행됩니다. 작업은 인터넷에 접근할 수 없으므로 pip install로 패키지를 설치할 수 없습니다. 대신 Qiskit과 지원되는 패키지 목록이 이미 설치되어 있으며, 워크플로에 필요한 다른 패키지는 wheel을 업로드할 수 있습니다.

설치된 패키지 확인​

모든 작업은 Linux(x86_64)의 Python 3.12에서 실행되며, 다음 패키지가 설치되어 있습니다.

  • 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()

워크플로는 설정 없이 이러한 패키지를 모두 import할 수 있습니다. 워크플로는 작업이 시작될 때가 아니라 환경을 빌드할 때 이 패키지를 설치하므로, 작업의 시작 시간이 늘어나지 않습니다.

워크플로는 requirements.txt 또는 pyproject.toml 파일을 읽지 않으므로, 이러한 파일에 나열된 패키지를 설치하지 않습니다. ManagedWorkflow의 dependencies 인수는 더 이상 사용되지 않으며 무시되므로 이것도 패키지를 설치하지 않습니다. 업로드 코드에서 이를 제거하고 대신 wheel을 업로드하세요.

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 파일을 수집하고, 워크플로의 파일 스토리지에 업로드한 다음, 워크플로 시작 시 설치하세요. wheel이 변경될 때만 다시 업로드하면 됩니다.

wheel 빌드​

작업은 인터넷 연결 없이 wheel을 설치하므로, 각 wheel은 Linux(x86_64)의 Python 3.12에서 작동해야 합니다. 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을 사용하면, macOS 또는 Windows에서 실행하더라도 pip download가 작업의 플랫폼용 wheel을 가져옵니다. 또한 pendulum의 python-dateutil, six, tzdata처럼 패키지의 종속성도 다운로드합니다. 작업은 각 wheel을 종속성 없이 설치하므로, 환경에 없는 모든 종속성의 wheel을 업로드하고 폴더의 나머지 wheel은 삭제하세요.

순수 Python wheel(py3-none-any.whl)은 모든 플랫폼에서 작동합니다. 컴파일된 코드가 있는 패키지에 PyPI의 Linux x86_64 wheel이 없다면, 예를 들어 python:3.12 컨테이너와 같은 Linux에서 빌드하세요. pip가 파일 이름에서 패키지 이름, 버전, 플랫폼을 읽으므로 원래 파일 이름을 유지하세요.

wheel 업로드​

로컬 노트북에서 add_wheels()로 wheel을 업로드하세요.

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은 워크플로와 함께 저장되므로 wheel을 추가하기 전에 워크플로를 업로드하세요. 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을 추가하세요. 새 버전은 파일 이름이 다르므로, 이전 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 설치​

패키지를 import하기 전에 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()는 wheels 폴더에 있는 모든 wheel을 설치합니다. 워크플로에 wheel이 없으면 이 호출은 아무 일도 하지 않습니다. wheel은 실행할 때마다 다시 설치되므로, wheel이 많으면 각 작업의 시작 시간이 늘어납니다.

모범 사례: 없는 패키지만 가져오기​

모범 사례로, 환경에 없는 패키지의 wheel만 업로드하세요. numpy처럼 이미 설치된 패키지의 wheel을 올리면 사본이 하나 더 설치되고, 이를 import하는 코드는 두 사본 중 어느 쪽이든 가져올 수 있습니다. 불일치로 인한 오류는 작업이 실행될 때에야 나타납니다.

업로드하기 전에 로컬 노트북에서 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()를 호출하기 전에 패키지를 import합니다.
업로드한 패키지의 의존성에서 ModuleNotFoundError가 발생합니다.wheel은 의존성 없이 설치됩니다. 누락된 의존성의 wheel을 업로드하세요.
오류 메시지에 wheel이 is not a supported wheel on this platform이라고 나옵니다.wheel이 다른 운영 체제 또는 Python 버전용입니다. Linux x86_64의 Python 3.12용 wheel을 구하세요.
install_uploaded_wheels()가 ResolutionImpossible로 실패합니다.wheels 폴더에 같은 패키지의 두 버전이 있습니다. remove_wheels()로 이전 wheel을 제거하세요.
wheel을 업로드한 후 GPU 컴퓨트 프로필에서 cupy 같은 CUDA 패키지가 실패합니다.wheel이 환경에서 제공하는 CUDA 패키지 중 하나를 대체했습니다. remove_wheels()로 해당 wheel을 제거하세요.
wheel을 업로드한 후 numpy 같은 설치된 패키지가 실패합니다.wheel이 환경에서 제공하는 패키지의 두 번째 사본을 설치했습니다. remove_wheels()로 해당 wheel을 제거하세요.