ข้ามไปยังเนื้อหาหลัก
โครงการนี้อยู่ในช่วงเบต้า พบข้อผิดพลาด? สร้าง GitHub Issue มีคำถามหรือไอเดีย? ถามใน Discussions — ยินดีรับฟังความคิดเห็น!
คุณภาพการแปลในหน้านี้เป็นอย่างไร?

ประกาศ dependency

managed workflow รันในสภาพแวดล้อม Python ที่เตรียมไว้ล่วงหน้า job เข้าถึงอินเทอร์เน็ตไม่ได้ จึง pip install แพ็กเกจไม่ได้ แต่ Qiskit และรายการแพ็กเกจที่รองรับติดตั้งไว้แล้ว และคุณอัปโหลด wheelสำหรับแพ็กเกจอื่นที่ workflow ต้องใช้ได้

ตรวจสอบว่าติดตั้งแพ็กเกจใดไว้บ้าง​

ทุก job รันด้วย Python 3.12 บน Linux (x86_64) โดยมีแพ็กเกจต่อไปนี้ติดตั้งอยู่:

  • qiskit, qiskit-ibm-runtime, qiskit-serverless และ dependency ของแพ็กเกจเหล่านี้ เช่น numpy

  • แพ็กเกจที่รองรับ เช่น qiskit-aer, qiskit-addon-sqd, qiskit-addon-utils, qiskit-mitigation, qiskit-addon-slc, qiskit-paulice, ffsim และ pyscf แต่ละแพ็กเกจติดตั้งที่เวอร์ชันคงที่หนึ่งเวอร์ชัน

หากต้องการดูแพ็กเกจที่รองรับและเวอร์ชันของแพ็กเกจเหล่านั้น ให้เรียก dependencies_versions() จาก notebook ในเครื่องของคุณ:

run_workflow_remotely.ipynb

from qiskit_ibm_catalog import ManagedWorkflowClient

client = ManagedWorkflowClient()
client.dependencies_versions()

workflow ของคุณ import แพ็กเกจเหล่านี้ตัวใดก็ได้โดยไม่ต้องตั้งค่า workflow ติดตั้งแพ็กเกจเหล่านี้ตอนสร้างสภาพแวดล้อม ไม่ใช่ตอนเริ่ม job ดังนั้นจึงไม่เพิ่มเวลาเริ่มต้นของ job

workflow ไม่อ่านไฟล์ requirements.txt หรือ pyproject.toml จึงไม่ติดตั้งแพ็กเกจที่ไฟล์เหล่านี้ระบุ อาร์กิวเมนต์ dependencies ของ ManagedWorkflow เลิกใช้แล้วและถูกละเว้น จึงไม่ติดตั้งแพ็กเกจเช่นกัน ให้ลบออกจากโค้ดอัปโหลดของคุณ และอัปโหลด wheel แทน

แพ็กเกจบน GPU compute profile​

job ที่รันบน GPU compute profile จะมีแพ็กเกจ CUDA ต่อไปนี้ติดตั้งไว้ด้วย แพ็กเกจเหล่านี้ใช้ได้เฉพาะบน GPU profile และ 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 ต้องใช้งานได้กับ 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 ก็ตาม นอกจากนี้ยังดาวน์โหลด dependency ของแพ็กเกจด้วย เช่น python-dateutil, six และ tzdata สำหรับ pendulum เนื่องจากงานติดตั้งแต่ละ wheel โดยไม่ติดตั้ง dependency ให้อัปโหลด wheel ของทุก dependency ที่สภาพแวดล้อมไม่มี และลบ wheel อื่นออกจากโฟลเดอร์

wheel แบบ pure-Python (py3-none-any.whl) ใช้ได้กับทุกแพลตฟอร์ม ถ้าแพ็กเกจที่มีโค้ดคอมไพล์ไม่มี wheel สำหรับ Linux x86_64 บน PyPI ให้สร้างบน 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() จะ raise QiskitServerlessException

อัปโหลดเวิร์กโฟลว์ก่อนเพิ่ม 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 เก่าไว้ 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() ก่อน import แพ็กเกจ:

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 จะติดตั้งสำเนาที่สอง และโค้ดที่ import อาจได้สำเนาใดสำเนาหนึ่ง ข้อผิดพลาดจากความไม่ตรงกันจะปรากฏเฉพาะตอนที่งานรัน

ก่อนอัปโหลด ให้ตรวจสอบ requirement ของคุณด้วย 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

รายงานจะระบุสถานะหนึ่งในต่อไปนี้ให้แต่ละ requirement:

  • baked: สภาพแวดล้อมมีแพ็กเกจนี้อยู่แล้ว อย่าอัปโหลด wheel ของแพ็กเกจนี้

  • bring: สภาพแวดล้อมไม่มีแพ็กเกจนี้ ให้อัปโหลด wheel ของแพ็กเกจนี้

  • clash: สภาพแวดล้อมมีเวอร์ชันที่ต่างออกไป ให้เปลี่ยนเวอร์ชันที่โค้ดของคุณต้องการ หรือสร้างแพ็กเกจของคุณใหม่ให้ตรงกับเวอร์ชันที่ติดตั้งอยู่

รายงานจะตรวจสอบเฉพาะแพ็กเกจที่รองรับ จึงแสดง qiskit, qiskit-ibm-runtime, qiskit-serverless และ numpy เป็น bring ทั้งที่สภาพแวดล้อมมีแพ็กเกจเหล่านี้อยู่แล้ว ดังนั้นอย่าอัปโหลด wheel ของแพ็กเกจเหล่านี้ รายงานจะแสดง clash เฉพาะเวอร์ชันแบบ == ที่ระบุตรงตัว ส่วนช่วงเวอร์ชัน เช่น >=0.10 จะแสดงเป็น baked รายงานนี้ไม่อัปโหลดไฟล์ใดเลย

แก้ปัญหา dependency​

ปัญหาสาเหตุ
pip install ล้มเหลวภายในเวิร์กโฟลว์งานเชื่อมต่ออินเทอร์เน็ตไม่ได้ ให้ อัปโหลด wheel แทน
ModuleNotFoundError กับแพ็กเกจที่คุณอัปโหลดไว้เวิร์กโฟลว์ import แพ็กเกจก่อนที่จะเรียก install_uploaded_wheels()
ModuleNotFoundError กับ dependency ของแพ็กเกจที่คุณอัปโหลดไว้wheel ถูกติดตั้งโดยไม่มี dependency ให้อัปโหลด wheel ของ dependency ที่ขาดไป
ข้อผิดพลาดระบุว่า wheel is not a supported wheel on this platformwheel นั้นสำหรับระบบปฏิบัติการหรือ Python เวอร์ชันอื่น ให้หา wheel สำหรับ Python 3.12 บน Linux x86_64
install_uploaded_wheels() ล้มเหลวด้วย ResolutionImpossibleโฟลเดอร์ wheels มีแพ็กเกจเดียวกันสองเวอร์ชัน ให้ลบ wheel เก่าด้วย remove_wheels()
แพ็กเกจ CUDA เช่น cupy ล้มเหลวบนโปรไฟล์คอมพิวต์ GPU หลังจากอัปโหลด wheelwheel ไปแทนที่หนึ่งในแพ็กเกจ CUDAที่สภาพแวดล้อมมีให้ ให้ลบ wheel นั้นด้วย remove_wheels()
แพ็กเกจที่ติดตั้งไว้ เช่น numpy ล้มเหลวหลังจากอัปโหลด wheelwheel ติดตั้งสำเนาที่สองของแพ็กเกจที่สภาพแวดล้อมมีให้อยู่แล้ว ให้ลบ wheel นั้นด้วย remove_wheels()