เลือก compute profile
managed workflow รันบน compute profile compute profile คือการรวม vCPU หน่วยความจำ และ GPU ที่กำหนดไว้ตายตัว คล้ายกับทรัพยากรที่คุณร้องขอจากตัวจัดตารางงาน HPC เมื่ออัปโหลด workflow คุณจะแมปขนาดของ workflow เช่น S และ M กับ profile และแต่ละการรันจะเลือกหนึ่งในขนาดเหล่านั้น จากนั้น job จะรันบน node ของตัวเองด้วย profile นั้น และใช้ profile นั้นจนกว่า job จะสิ้นสุด
| Profile | vCPU | หน่วยความจำ (GB) | GPU |
|---|---|---|---|
8x32 | 8 | 32 | ไม่มี |
16x128 | 16 | 128 | ไม่มี |
48x768 | 48 | 768 | ไม่มี |
128x1500 | 128 | 1500 | ไม่มี |
24x120x1l40s | 24 | 120 | 1 L40S |
20x320x2a100 | 20 | 320 | 2 A100 |
80x1200x8a100 | 80 | 1200 | 8 A100 |
160x1792x8h100 | 160 | 1792 | 8 H100 |
ID ของ profile มีรูปแบบ {cpu}x{memory} โดยหน่วยความจำเป็น GB หรือ {cpu}x{memory}x{count}{gpu} สำหรับ profile ที่มี GPU ตัวอย่างเช่น 24x120x1l40s มี vCPU 24 ตัว หน่วยความจำ 120 GB และ NVIDIA L40S GPU หนึ่งตัว
ตรวจสอบ profile ที่ใช้ได้
หากต้องการดูว่ามี profile ใดให้ใช้บ้าง ให้เรียก compute_profiles():
run_workflow_remotely.ipynb
from qiskit_ibm_catalog import ManagedWorkflowClient
client = ManagedWorkflowClient()
print(client.compute_profiles())
8x32 (8 vCPU / 32 GB)
16x128 (16 vCPU / 128 GB)
48x768 (48 vCPU / 768 GB)
128x1500 (128 vCPU / 1500 GB)
24x120x1l40s (24 vCPU / 120 GB / 1l40s)
20x320x2a100 (20 vCPU / 320 GB / 2a100)
80x1200x8a100 (80 vCPU / 1200 GB / 8a100)
160x1792x8h100 (160 vCPU / 1792 GB / 8h100)
ค้นหา profile จากทรัพยากร
แทนที่จะพิมพ์ ID ของ profile คุณสามารถอธิบายทรัพยากรที่ workflow ต้องการด้วย compute_profile() และใช้ผลลัพธ์เป็นค่าใน sizes_map ส่ง cpu และ memory เป็น GB และส่ง gpu สำหรับ profile ที่มี GPU:
run_workflow_remotely.ipynb
profile = client.compute_profile(cpu=24, memory=120, gpu="1l40s")
print(profile) # 24x120x1l40s
sizes_map = {"S": "8x32", "L": profile}
sizes_map รับทั้ง ID ของ profile และ profile ที่ compute_profile() คืนมา และคุณผสมทั้งสองแบบในแมปเดียวได้ หากต้องการตรวจสอบ ID ของ profile ก่อนอัปโหลด ให้ส่งไปยัง compute_profile() เช่น client.compute_profile("16x128") ถ้าไม่มี profile ที่ตรงกัน ข้อผิดพลาดจะแสดงรายการ profile ที่ใช้ได้
compute_profiles() คืนลิสต์ ดังนั้นคุณจึงกรองเองได้ด้วย ตัวอย่างเช่น โค้ดต่อไปนี้หา profile ที่มี GPU:
run_workflow_remotely.ipynb
gpu_profiles = [p for p in client.compute_profiles() if p.gpu]
ตั้งค่า compute profile เริ่มต้นสำหรับ workflow ของคุณ
workflow ส่วนใหญ่เริ่มด้วยขนาดเดียว ให้แมปขนาดนั้นกับ profile ด้วย sizes_map และตั้งเป็นค่าเริ่มต้นด้วย default_size เมื่ออัปโหลด workflow:
run_workflow_remotely.ipynb
from qiskit_ibm_catalog import ManagedWorkflow, ManagedWorkflowClient
client = ManagedWorkflowClient()
my_workflow = client.upload(
ManagedWorkflow(
title="my-workflow",
entrypoint="my_workflow.py",
working_dir="./source_files/",
sizes_map={"M": "16x128"},
default_size="M",
)
)
ทุกการรันของ workflow ใช้ profile นี้ ดังนั้นคุณไม่ต้องส่งขนาดเมื่อรัน:
run_workflow_remotely.ipynb
job = my_workflow.run(circuits=circuits) # Runs on 16x128
แนวปฏิบัติที่ดี: จับคู่ขนาดกับขนาดของปัญหา
workflow แก้ปัญหาเฉพาะอย่าง และอาจต้องใช้ compute profile ที่ต่างกันเมื่อปัญหามีขนาดและความซับซ้อนเพิ่มขึ้น เมื่อมี sizes_map สำหรับแต่ละ workflow คุณทำสิ่งต่อไปนี้ได้:
-
ให้ทรัพยากรคำนวณเพียงพอแก่ปัญหาขนาดใหญ่เพื่อให้รันจนเสร็จ
-
ป้องกันไม่ให้ปัญหาขนาดเล็กใช้ node ที่ใหญ่เกินความจำเป็น
คุณกำหนดขนาดตามปัจจัยที่กำหนดการใช้หน่วยความจำและ CPU ของ workflow ได้ เช่น ขนาดของ subspace จำนวน batch หรือจำนวน qubit
กำหนดขนาด
คุณแมปได้สูงสุดสี่ขนาด สำหรับปัญหาขนาดเล็ก (S) กลาง (M) ใหญ่ (L) และใหญ่พิเศษ (XL) ตัวอย่างเช่น โค้ดต่อไปนี้กำหนด workflow ที่มีสามขนาด:
run_workflow_remotely.ipynb
sizes_map = {"S": "8x32", "M": "16x128", "L": "128x1500"}
my_workflow = client.upload(
ManagedWorkflow(
title="my-workflow",
entrypoint="my_workflow.py",
working_dir="./source_files/",
sizes_map=sizes_map,
default_size="M",
)
)
กฎของขนาด
ป้ายกำกับขนาดต้องเป็น S, M, L หรือ XL ดังนั้น workflow กำหนดขนาดได้สูงสุดสี่ขนาด managed workflow จับคู่ป้ายกำกับทั้งตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก และเก็บเป็นตัวพิมพ์ใหญ่ สองขนาดแมปไปยัง profile เดียวกันได้
workflow จะปฏิเสธการอัปโหลดครั้งแรกในกรณีต่อไปนี้:
-
ป้ายกำกับไม่ใช่
S,M,LหรือXL -
คุณตั้ง
sizes_mapโดยไม่มีdefault_sizeหรือตั้งdefault_sizeโดยไม่มีsizes_map -
default_sizeไม่ใช่หนึ่งในป้ายกำกับในsizes_map -
ค่าใน
sizes_mapไม่ใช่ compute profile ที่ใช้ได้
เปลี่ยนขนาดเมื่ออัปโหลดซ้ำ
เมื่อคุณอัปโหลด workflow อีกครั้งด้วย title เดิม managed workflow จะจัดการขนาดดังนี้:
-
ถ้าคุณตั้ง
sizes_mapขนาดใหม่จะแทนที่ขนาดที่เก็บไว้ทั้งหมด -
ถ้าคุณไม่ระบุ
sizes_mapworkflow จะคงขนาดที่เก็บไว้และค่าเริ่มต้นไว้ -
หากต้องการเปลี่ยนเฉพาะค่าเริ่มต้น ให้ตั้ง
default_sizeโดยไม่มีsizes_mapค่าของdefault_sizeต้องเป็นหนึ่งในขนาดที่เก็บไว้
ให้ตั้ง default_size ทุกครั้งที่คุณตั้ง sizes_map การอัปโหลดซ้ำไม่บังคับให้มี default_size แต่ถ้าขนาดใหม่ไม่รวมค่าเริ่มต้นเดิม workflow จะไม่มีค่าเริ่มต้น และทุกการรันที่ไม่ระบุ function_size จะล้มเหลว
เลือกขนาดสำหรับแต่ละการรัน
ส่ง function_size ให้ run() เพื่อเลือกหนึ่งในขนาดของ workflow สำหรับ job นั้น ถ้าไม่ระบุ job จะใช้ขนาดเริ่มต้นของ workflow:
run_workflow_remotely.ipynb
print(my_workflow.sizes()) # {'S': '8x32', 'M': '16x128', 'L': '128x1500'}
print(my_workflow.get_default_size()) # 'M'
job = my_workflow.run(function_size="L", circuits=circuits) # Runs on 128x1500
job = my_workflow.run(circuits=circuits) # Runs on the default size, M
sizes() และ get_default_size() คืนขนาดที่เก็บไว้ ณ ตอนที่คุณโหลด workflow หากต้องการดูขนาดที่เปลี่ยนไปหลังจากโหลด workflow ให้โหลดใหม่อีกครั้ง
หากต้องการอ่านขนาดและ compute profile ของ job ให้เรียก get_function_size() และ get_compute_profile() ในโค้ด workflow ของคุณ:
source_files/my_workflow.py
from qiskit_serverless import get_compute_profile, get_function_size
print(get_function_size()) # 'L'
print(get_compute_profile()) # '128x1500'
แก้ปัญหาเรื่องขนาด
| ปัญหา | สาเหตุ |
|---|---|
การอัปโหลดล้มเหลวพร้อม Invalid size '...'. Valid sizes are: S, M, L, XL. | ป้ายกำกับใน sizes_map ไม่ใช่หนึ่งในสี่ป้ายกำกับที่รองรับ |
การอัปโหลดล้มเหลวพร้อม Unknown compute profile '...' for size '...'. | ค่าใน sizes_map ไม่ใช่ profile ที่ใช้ได้ ตรวจสอบ ID ด้วย compute_profiles() หรือใช้ compute_profile() เพื่อค้นหา |
compute_profile() ล้มเหลวพร้อม No compute profile matches ... | ไม่มี profile ที่มีทรัพยากรตรงกันเป๊ะ สำหรับ profile ที่มี GPU ให้ส่ง gpu ด้วย เลือก profile จากรายการในข้อความข้อผิดพลาด |
การอัปโหลดล้มเหลวพร้อม 'default_size' is required when 'sizes' is provided. | การอัปโหลดครั้งแรกตั้ง sizes_map โดยไม่มี default_size |
run() ล้มเหลวพร้อม Unknown function size '...' for this function. Available sizes: ... | workflow ไม่ได้กำหนดขนาดที่คุณส่งให้ function_size |
run() ล้มเหลวพร้อม This function has no size. | การอัปโหลดซ้ำแทนที่ขนาดและลบค่าเริ่มต้นออก ให้อัปโหลดอีกครั้งพร้อม default_size หรือส่ง function_size |