مهام التشغيل التجريبي (Dry-run)
تشغّل مهمة التشغيل التجريبي (dry-run) حِملك البرمجي عبر IBM Quantum® Compute Service دون استخدام أي وقت QPU. استخدم مهمة تشغيل تجريبي لتنفيذ ما يلي قبل الالتزام بتشغيل حقيقي:
-
**احصل على الاستخدام الذي ستتحمله المهمة على QPU الحقيقي.
-
تحقّق من المهمة. يفحص Quantum Compute معاملات المهمة بالطريقة نفسها التي يتبعها مع المهمة الحقيقية.
-
احصل على جدول توقيت الدارة، إن طلبته، لتصحيح أخطاء المهمة قبل تشغيلها فعلياً.
على عكس مهام التشغيل التجريبي، يعمل الاختبار المحلي (backends المزيفة وQiskit Aer) على جهازك أنت، ولذلك لا يمكنه توفير أرقام الاستخدام أو التحقق من جهة الخدمة أو معلومات التوقيت من الخدمة. للمقارنة بين الأسلوبين، راجع الأجهزة الوهمية (Mock) مقارنةً بالـ backends المزيفة.
- يلزم
qiskit-ibm-runtimeالإصدار v0.51.0 أو أحدث لمهام التشغيل التجريبي. - مهام التشغيل التجريبي متاحة في جميع المناطق، ولكنها متاحة فقط في خطط Flex وPremium وOn-Prem. وهي غير متاحة في خطتَي Open وPay-As-You-Go.
كيف تعمل
لتشغيل مهمة تشغيل تجريبي، مرّر dry_run=True إلى دالة run() الخاصة بالـ primitive:
backend = service.backend("ibm_phoenix")
isa_circuit = pm.run(circuit) # transpiled for ibm_phoenix
sampler = Sampler(mode=backend)
job = sampler.run([isa_circuit], dry_run=True)
job.result() # wait for completion
print(job.usage())
dry_run وسيط في دالة run() (قيمته الافتراضية False)، وليس خيار تشغيل (runtime option). وهو متاح لجميع الـ primitives.
تتميز مهمة التشغيل التجريبي بالخصائص التالية:
-
تعمل في IBM Quantum Compute Service في السحابة، وليس على جهازك.
-
تستخدم بيانات المعايرة من QPU الحقيقي، وليس مجرد لقطة منها.
-
تحافظ نتائجها على المخطط المتوقع وتتبع الشكل المتوقع لنتائج QPU الحقيقي، لكنها تحتوي على بيانات وهمية عشوائية. وهي ليست نتائج قياس فعلية أو محاكاة، لذا لا تستخدمها للتحقق من الصحة الفيزيائية.
-
تتم المعالجة على الخادم، لذا قد لا تنتهي المهمة فوراً.
حجم الدارة وعدد الـ shots والحدود الأخرى هي نفسها المطبّقة على أي مهمة من ذلك البرنامج.
يعمل dry_run=True أيضاً عندما يكون الـ backend جهازاً وهمياً (mock) بالفعل.
قراءة الاستخدام
استخدام مهمة التشغيل التجريبي المكتملة هو الاستخدام نفسه الذي ستتحمله المهمة ذاتها على QPU الحقيقي، باستثناء حالات نادرة تتغير فيها بيانات المعايرة بشكل كبير بعد مهمة التشغيل التجريبي وقبل المهمة على QPU حقيقي.
-
تُرجع
job.usage()الاستخدام بالثواني. -
تُرجع
job.metrics()["usage"]البيانات نفسها مع حالة الاستخدام.
لا يُحتسب استخدام التشغيل التجريبي كرسوم، ولا يستهلك مخصصات خطتك، ولا يُحتسب ضمن أي حدود.
لا تستخدم job.usage_estimation مع مهمة تشغيل تجريبي. استخدم job.usage().
تُرجع job.usage() القيمة 0 إلى أن يصبح حساب الاستخدام نهائياً، لذا انتظر انتهاء المهمة قبل قراءته.
جدول توقيت الدارة
لطلب جدول توقيت الدارة، استخدم الخيار نفسه المستخدم مع المهمة الحقيقية. للتفاصيل الكاملة، راجع عرض توقيت الدارة.
القيود
-
وضعا job وbatch فقط. يمكن تشغيل مهام التشغيل التجريبي فقط في job mode وbatch mode.
-
خطط Flex وPremium وOn-Prem فقط. مهام التشغيل التجريبي غير متاحة في خطتَي Open وPay-As-You-Go.
الأجهزة الوهمية (Mock)
الأجهزة الوهمية هي التنفيذ الكامن وراء مهام التشغيل التجريبي. تُخفي مهام التشغيل التجريبي الأجهزة الوهمية افتراضياً، لكنك ستصادفها في الحالات التالية:
-
النُّسَخ (instances) المهيأة للوصول إلى الأجهزة الوهمية فقط. مثال: إذا استخدمت
service.backend("ibm_phoenix")لإرسال مهمة تشغيل تجريبي علىibm_phoenix، لكن نسختك ليس لديها وصول إلىibm_phoenix، فستحصل علىQiskitBackendNotFoundError. بدلاً من ذلك، اختر الجهاز الوهمي مباشرة باستخدامservice.backend("mock_phoenix"). -
موارد الحوسبة. الأجهزة الوهمية مخفية افتراضياً في صفحة موارد الحوسبة. يحتوي الجدول في الصفحة على خيار تصفية لتضمينها، لكن خطط Flex وPremium وOn-Prem فقط لديها وصول إلى الأجهزة الوهمية.
-
جدول أعباء العمل. مهام الأجهزة الوهمية مخفية افتراضياً في صفحة أعباء العمل. يحتوي الجدول على خيار تصفية (أيقونة القمع) لعرضها.
-
واجهة Python البرمجية. تستبعد
service.backends()وservice.jobs()الأجهزة الوهمية ما لم تستدعهما معinclude_mocks=True. تشيرIBMBackend.is_mockإلى ما إذا كان الـ backend جهازاً وهمياً. ولا تُرجعservice.least_busy()جهازاً وهمياً أبداً.
الأجهزة الوهمية (Mock) مقارنةً بالـ backends المزيفة (Fake)
الاسمان متشابهان، لكن الجهاز الوهمي (mock) والـ backend المزيف (fake) شيئان مختلفان. الـ backend المزيف كائن محلي في بيئة Python لديك. أما الجهاز الوهمي فهو مورد سحابي في IBM Quantum Compute Service.
جهاز وهمي (مثل mock_phoenix) | backend مزيف (مثل FakeManilaV2) | |
|---|---|---|
| ما هو | جهاز في IBM Quantum Compute Service | فئة Python في qiskit_ibm_runtime.fake_provider |
| أين يعمل | في السحابة، داخل الخدمة | محلياً، على جهازك |
| كيف تحصل عليه | service.backend("mock_phoenix")، أو تلقائياً مع run(..., dry_run=True) | from qiskit_ibm_runtime.fake_provider import ... |
| الحساب والنسخة (instance) | خطط محددة فقط (Flex أو Premium أو On-Prem) | جميع النُّسَخ والخطط |
| المعايرة | مباشرة، تطابق الجهاز الحقيقي في أي وقت | لقطة ثابتة تأتي مع الحزمة المثبتة |
| النتائج | بيانات عشوائية بالمخطط المتوقع. وليست محاكاة | محاكاة ضوضائية تستخدم نموذج الضوضاء الخاص باللقطة |
| نتائج ذات معنى فيزيائي | لا. لا تستخدمها أبداً للتحقق من الصحة | تقريباً، ضمن حدود نموذج الضوضاء |
| الاستخدام المُبلَّغ عنه | نعم | لا يوجد |
| يُحتسب كرسوم أو يُخصم من مخصصات الخطة أو حدودها | لا | لا |
| التحقق من المهمة | تتم عبر الخدمة، كما في المهمة الحقيقية | يقتصر على ما يفحصه العميل |
| جدول التوقيت | متاح عند الطلب | غير متاح |
| أوضاع التنفيذ | job وbatch mode فقط. الجلسات محظورة | صياغة الجلسة مقبولة لكن يتم تجاهلها (الوضع المحلي ليس فيه جلسات أو دفعات حقيقية) |
| الاكتمال | غير متزامن، على الخادم | يعمل محلياً ويعود عند الانتهاء |
| الظهور في واجهة المنصة وقوائم API | مخفي افتراضياً (موارد الحوسبة، جدول أعباء العمل، backends()، jobs()). يمكنك تفعيل إظهاره | لا يظهر أبداً، لأنه لا يُرسل شيء إلى الخدمة |
كيف تختار
-
لمعرفة كم من الاستخدام ستستهلكه المهمة، أو ما إذا كانت الخدمة ستقبلها، استخدم مهمة تشغيل تجريبي.
-
لمعرفة كيف قد يبدو الناتج، أو للعمل دون اتصال، استخدم backend مزيفاً أو Aer.
-
للأمرين معاً، كرّر العمل على الدارات والنتائج باستخدام backend مزيف، ثم أجرِ تشغيلاً تجريبياً كفحص أخير قبل QPU الحقيقي.
نقاط الالتباس الشائعة
-
الجهاز الوهمي ليس محاكياً. ناتجه عشوائي، لذا فإن أخذ عينات من دارة Bell على
mock_phoenixلا يعيد توزيع Bell. إذا أردت ناتجاً ضوضائياً واقعياً، فاستخدم backend مزيفاً. -
الـ backend المزيف ليس الجهاز الحي. معايرته لقطة وقد تكون قديمة. أما الجهاز الوهمي فيتتبع المعايرة الحقيقية، لذا فإن الدارات المترجمة (transpiled) والتوقيت يطابقان ما يراه QPU اليوم.
-
لا يعمل أيٌّ منهما على عتاد حقيقي. لا يستهلك أيٌّ منهما وقت QPU، لكن مهمة التشغيل التجريبي فقط تمر عبر الخدمة.
-
usage_estimationليس تقدير التشغيل التجريبي. بالنسبة لمهمة التشغيل التجريبي، تُرجعjob.usage()ثواني الاستخدام التي ستُحتسب على مهمتك على QPU حقيقي.
حالات الاستخدام
الطلاب والدورات
يقيّد المسؤول نسخة (instance) على الأجهزة الوهمية فقط، باستخدام مفتاح تخصيص QPU عند إنشاء النسخة أو تعديلها. عندها يتحقق الطلاب من حمولاتهم من البداية إلى النهاية دون استهلاك وقت QPU حقيقي أو RUs. ولأن النسخة تملك وصولاً إلى الأجهزة الوهمية فقط، يختار الطلاب الـ backend باسمه الوهمي:
backend = service.backend("mock_phoenix")
sampler = Sampler(mode=backend)
job = sampler.run([isa_circuit], dry_run=True)
مشروع التخطيط
يجري فريق على وشك بدء مشروع تشغيلاً تجريبياً لمهام تمثيلية ليرى عدد RUs الذي يحتاجه المشروع، قبل اختيار خطة أو مخصصات:
backend = service.backend("ibm_phoenix")
sampler = Sampler(mode=backend)
job = sampler.run([isa_circuit], dry_run=True)
job.result()
print(job.usage())
الفحص النهائي قبل التشغيل على QPU حقيقي
تحقّق من المعاملات وافحص جدول التوقيت باستخدام dry_run=True، ثم احذف الوسيط وشغّل على QPU الحقيقي. لا يتغير أي شيء آخر في شيفرتك:
sampler = Sampler(mode=backend)
# Pre-flight check
job = sampler.run([isa_circuit], dry_run=True)
job.result()
# Real run - same code, without dry_run
job = sampler.run([isa_circuit])
الخطوات التالية
- اختبر البرامج على جهازك باستخدام وضع الاختبار المحلي.
- تعرّف على كيفية قياس استخدام أعباء العمل.
- اعرض جدول توقيت الدارة.
- افهم وحدات الموارد والخطط المتاحة.