انتقل إلى المحتوى الرئيسي
هذا المشروع في مرحلة تجريبية. وجدت خطأ؟ افتح مشكلة على GitHub. لديك سؤال أو فكرة؟ اسأل في Discussions — نحب سماع ملاحظاتك!
كيف جودة الترجمة في هذه الصفحة؟

مهام التشغيل التجريبي (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_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])

الخطوات التالية​

توصيات