اختيار ملف حوسبة
تعمل سير العمل المُدارة على ملفات حوسبة. ملف الحوسبة هو توليفة ثابتة من vCPUs والذاكرة وGPUs، مشابهة للموارد التي تطلبها من جدولة HPC. عندما ترفع سير عمل، تربط أحجامه، مثل S وM، بملفات، ويختار كل تشغيل أحد تلك الأحجام. ثم تعمل المهمة على عقدة خاصة بها بذلك الملف، وتحتفظ به حتى تنتهي المهمة.
| الملف | vCPUs | الذاكرة (GB) | GPUs |
|---|---|---|---|
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 |
يأخذ معرّف الملف الشكل {cpu}x{memory}، مع الذاكرة بوحدة GB، أو {cpu}x{memory}x{count}{gpu} لملف يحتوي على GPUs. على سبيل المثال، يحتوي 24x120x1l40s على 24 vCPU و120 GB من الذاكرة ووحدة NVIDIA L40S GPU واحدة.
التحقق من الملفات المتاحة
لمعرفة الملفات المتاحة، استدعِ 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)
البحث عن ملف حسب موارده
بدلًا من كتابة معرّف ملف، يمكنك وصف الموارد التي يحتاجها سير العمل باستخدام compute_profile()، واستخدام النتيجة كقيمة في sizes_map. مرّر cpu وmemory بوحدة GB، ومرّر gpu لملف 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 معرّفات الملفات والملفات التي تُرجعها compute_profile()، ويمكنك الجمع بين الاثنين في خريطة واحدة. للتحقق من معرّف ملف قبل الرفع، مرّره إلى compute_profile()، على سبيل المثال client.compute_profile("16x128"). إذا لم يتطابق أي ملف، يسرد الخطأ الملفات المتاحة.
تُرجع compute_profiles() قائمة، لذا يمكنك أيضًا تصفيتها بنفسك. على سبيل المثال، يجد الكود التالي ملفات GPU:
run_workflow_remotely.ipynb
gpu_profiles = [p for p in client.compute_profiles() if p.gpu]
تعيين ملف حوسبة افتراضي لسير العمل
تبدأ معظم سير العمل بحجم واحد. اربطه بملف باستخدام sizes_map، واجعله الافتراضي باستخدام default_size، عند رفع سير العمل:
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",
)
)
يستخدم كل تشغيل لسير العمل هذا الملف، لذا لا تحتاج إلى تمرير حجم عند تشغيله:
run_workflow_remotely.ipynb
job = my_workflow.run(circuits=circuits) # Runs on 16x128
أفضل ممارسة: طابق الأحجام مع أحجام المسائل
يحل سير العمل مسائل محددة، وقد يتطلب ملفات حوسبة مختلفة مع تزايد حجم المسائل وتعقيدها. مع sizes_map لكل سير عمل، يمكنك القيام بما يلي:
-
امنح المسائل الكبيرة موارد حوسبة كافية لتعمل حتى الاكتمال.
-
امنع المسائل الصغيرة من استخدام عقدة أكبر مما تحتاج.
يمكنك بناء الأحجام على العوامل التي تحدد استخدام الذاكرة وCPU في سير العمل، مثل حجم الفضاء الجزئي، أو عدد الدفعات، أو عدد الكيوبتات.
تحديد الأحجام
يمكنك ربط ما يصل إلى أربعة أحجام، للمسائل الصغيرة (S) والمتوسطة (M) والكبيرة (L) والكبيرة جدًا (XL). على سبيل المثال، يحدد الكود التالي سير عمل بثلاثة أحجام:
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، لذا يمكن لسير العمل تحديد ما يصل إلى أربعة أحجام. يطابق سير العمل المُدار التسميات بالأحرف الكبيرة أو الصغيرة، ويخزنها بالأحرف الكبيرة. يمكن لحجمين الإشارة إلى الملف نفسه.
يرفض سير العمل الرفع الأول في الحالات التالية:
-
تسمية ليست
SأوMأوLأوXL. -
تضبط
sizes_mapبدونdefault_size، أوdefault_sizeبدونsizes_map. -
default_sizeليست إحدى التسميات فيsizes_map. -
قيمة في
sizes_mapليست ملف حوسبة متاحًا.
تغيير الأحجام عند إعادة الرفع
عندما ترفع سير العمل مرة أخرى بالـ title نفسه، يتعامل سير العمل المُدار مع الأحجام كما يلي:
-
إذا ضبطت
sizes_map، تحل الأحجام الجديدة محل كل الأحجام المخزَّنة. -
إذا حذفت
sizes_map، يحتفظ سير العمل بالأحجام المخزَّنة وبالحجم الافتراضي. -
لتغيير الحجم الافتراضي فقط، اضبط
default_sizeبدونsizes_map. يجب أن تكون قيمةdefault_sizeأحد الأحجام المخزَّنة.
اضبط default_size في كل مرة تضبط فيها sizes_map. لا تتطلب إعادة الرفع default_size. إذا لم تتضمن الأحجام الجديدة الحجم الافتراضي القديم، فلن يكون لسير العمل حجم افتراضي، وسيفشل كل تشغيل بدون function_size.
اختيار حجم لكل تشغيل
مرّر function_size إلى run() لاختيار أحد أحجام سير العمل لتلك المهمة. إذا حذفته، تستخدم المهمة الحجم الافتراضي لسير العمل:
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() الأحجام التي خُزّنت عند تحميل سير العمل. لرؤية الأحجام التي تغيرت بعد تحميل سير العمل، حمّله مرة أخرى.
لقراءة حجم المهمة وملف الحوسبة الخاص بها، استدعِ get_function_size() وget_compute_profile() في كود سير العمل:
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 ليست ملفًا متاحًا. تحقق من المعرّف باستخدام compute_profiles()، أو استخدم compute_profile() للبحث عنه. |
تفشل compute_profile() مع No compute profile matches ... | لا يوجد ملف بهذه الموارد بالضبط. لملف GPU، مرّر gpu أيضًا. اختر ملفًا من القائمة الموجودة في الخطأ. |
يفشل الرفع مع 'default_size' is required when 'sizes' is provided. | الرفع الأول يضبط sizes_map بدون default_size. |
تفشل run() مع Unknown function size '...' for this function. Available sizes: ... | لا يحدد سير العمل الحجم الذي مررته إلى function_size. |
تفشل run() مع This function has no size. | استبدلت إعادة الرفع الأحجام وأزالت الحجم الافتراضي. ارفع مرة أخرى مع default_size، أو مرّر function_size. |