تحويل الدوائر عن بُعد باستخدام خدمة Qiskit Transpiler
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-transpiler
اعتبارًا من 18 يوليو 2025، تجري عملية نقل الخدمة لدعم منصة IBM Quantum® الجديدة وهي غير متاحة حاليًا. للتمريرات المعتمدة على الذكاء الاصطناعي، يمكنك استخدام الوضع المحلي.
الخدمة في إصدار تجريبي (beta) وقابلة للتغيير. إذا كان لديك ملاحظات أو تريد التواصل مع فريق التطوير، استخدم قناة Qiskit Slack Workspace.
توفر خدمة Qiskit Transpiler إمكانيات تحويل الدوائر الكمومية (transpilation) على السحابة. بالإضافة إلى إمكانيات محوّل Qiskit المحلي، يمكن لمهام التحويل الخاصة بك الاستفادة من موارد IBM Quantum السحابية وتمريرات المحوّل المدعومة بالذكاء الاصطناعي.
تقدم خدمة Qiskit Transpiler مكتبة Python لدمج هذه الخدمة وإمكاناتها بسلاسة في أنماط وسير عمل Qiskit الحالية. هذه الخدمة متاحة فقط لمستخدمي خطة IBM Quantum Premium Plan وFlex Plan وOn-Prem (عبر IBM Quantum Platform API).
تثبيت حزمة qiskit-ibm-transpiler
لاستخدام خدمة Qiskit Transpiler، ثبّت حزمة qiskit-ibm-transpiler:
pip install qiskit-ibm-transpiler
تتم المصادقة تلقائيًا باستخدام بيانات اعتماد IBM Quantum Platform الخاصة بك، بنفس الطريقة التي يديرها Qiskit Runtime:
- متغير البيئة:
QISKIT_IBM_TOKEN - ملف الإعدادات
~/.qiskit/qiskit-ibm.json(تحت القسمdefault-ibm-quantum).
ملاحظة: تتطلب هذه الحزمة Qiskit SDK الإصدار v1.X.
خيارات transpile في qiskit-ibm-transpiler
backend_name(اختياري، str) - اسم الجهاز الخلفي (backend) كما هو متوقع من قِبَل QiskitRuntimeService (مثلًا،ibm_torino). إذا تم تعيين هذا الخيار، تستخدم طريقة transpile التخطيط من الجهاز المحدد لعملية التحويل. إذا تم تعيين أي خيار آخر يؤثر على هذه الإعدادات، مثلcoupling_map، يتم تجاوز إعداداتbackend_name.coupling_map(اختياري، List[List[int]]) - قائمة coupling map صالحة (مثلًا، [[0,1],[1,2]]). إذا تم تعيينه، تستخدم طريقة transpile هذه الخريطة لعملية التحويل. إذا تم تعريفه، فإنه يتجاوز أي قيمة محددة لـtarget.optimization_level(int) - مستوى التحسين المحتمل الذي يُطبَّق خلال عملية التحويل. القيم الصحيحة هي [1,2,3]، حيث 1 هو أقل تحسين (والأسرع)، و3 هو أعلى تحسين (والأكثر استهلاكًا للوقت).ai("true", "false", "auto") - ما إذا كان سيتم استخدام الإمكانيات المدعومة بالذكاء الاصطناعي خلال عملية التحويل. الإمكانيات المتاحة تشمل تمريراتAIRoutingأو طرق التوليف الأخرى المدعومة بالذكاء الاصطناعي. إذا كانت هذه القيمة"true"، تطبق الخدمة تمريرات تحويل مختلفة مدعومة بالذكاء الاصطناعي وفقًا لـoptimization_levelالمطلوب. إذا كانت"false"، تستخدم أحدث ميزات تحويل Qiskit بدون ذكاء اصطناعي. وإذا كانت"auto"، تقرر الخدمة ما إذا كانت ستطبق تمريرات Qiskit الاستدلالية القياسية أو التمريرات المدعومة بالذكاء الاصطناعي بناءً على دائرتك.qiskit_transpile_options(dict) - كائن قاموس Python يمكن أن يتضمن أي خيار آخر صالح في طريقةtranspile()في Qiskit. إذا تضمّنqiskit_transpile_optionsالخيارoptimization_level، يتم تجاهله لصالحoptimization_levelالمحدد كمعامل إدخال. إذا تضمّنqiskit_transpile_optionsأي خيار غير معروف لطريقةtranspile()في Qiskit، ترفع المكتبة خطأً.
لمزيد من المعلومات حول طرق qiskit-ibm-transpiler المتاحة، راجع مرجع qiskit-ibm-transpiler API. لمعرفة المزيد عن خدمة API، راجع توثيق Qiskit Transpiler Service REST API.
أمثلة
توضح الأمثلة التالية كيفية تحويل الدوائر باستخدام خدمة Qiskit Transpiler بمعاملات مختلفة.
- أنشئ دائرة واستدعِ خدمة Qiskit Transpiler لتحويلها باستخدام
ibm_torinoكـbackend_name، و3 كـoptimization_level، وبدون استخدام الذكاء الاصطناعي خلال التحويل.
from qiskit.circuit.library import efficient_su2
from qiskit_ibm_transpiler.transpiler_service import TranspilerService
circuit = efficient_su2(101, entanglement="circular", reps=1)
cloud_transpiler_service = TranspilerService(
backend_name="ibm_torino",
ai="false",
optimization_level=3,
)
transpiled_circuit = cloud_transpiler_service.run(circuit)
ملاحظة: يمكنك فقط استخدام أجهزة backend_name التي لديك وصول إليها عبر حساب IBM Quantum الخاص بك. بالإضافة إلى backend_name، يتيح TranspilerService أيضًا استخدام coupling_map كمعامل.
- أنشئ دائرة مماثلة وحوّلها مع طلب إمكانيات التحويل بالذكاء الاصطناعي عبر تعيين الراية
aiإلىTrue:
from qiskit.circuit.library import efficient_su2
from qiskit_ibm_transpiler.transpiler_service import TranspilerService
circuit = efficient_su2(101, entanglement="circular", reps=1)
cloud_transpiler_service = TranspilerService(
backend_name="ibm_torino",
ai="true",
optimization_level=1,
)
transpiled_circuit = cloud_transpiler_service.run(circuit)
- أنشئ دائرة مماثلة وحوّلها مع السماح للخدمة بالقرار حول استخدام تمريرات التحويل المدعومة بالذكاء الاصطناعي.
from qiskit.circuit.library import efficient_su2
from qiskit_ibm_transpiler.transpiler_service import TranspilerService
circuit = efficient_su2(101, entanglement="circular", reps=1)
cloud_transpiler_service = TranspilerService(
backend_name="ibm_torino",
ai="auto",
optimization_level=1,
)
transpiled_circuit = cloud_transpiler_service.run(circuit)
حدود خدمة Qiskit Transpiler
فيما يلي أهم القيود الخاصة بالخدمة:
- الحد الأقصى لعدد البوابات ثنائية الكيوبت لكل دائرة في مهمة تحويل في أي وضع
aiهو مليون بوابة. - الحد الأقصى للوقت المسموح به لتشغيل عملية التحويل هو 30 دقيقة لكل مهمة.
- يجب استرداد نتيجة التحويل من الخدمة خلال 20 دقيقة بعد انتهاء عملية التحويل. بعد 20 دقيقة، يتم تجاهل نتيجة المهمة.
- الحد الأقصى للوقت الذي يمكن أن تبقى فيه مجموعة من الدوائر في قائمة الانتظار الداخلية في انتظار التحويل هو 120 دقيقة. بعد ذلك الوقت، إذا لم تُحوَّل المهمة، يتم تجاهلها.
- لم يتم تحديد الحد الأقصى لعدد الكيوبتات. تم اختبار الخدمة على 900+ كيوبت.
الاستشهاد
إذا استخدمت أي ميزة مدعومة بالذكاء الاصطناعي من خدمة Qiskit Transpiler في أبحاثك، استخدم الاستشهاد الموصى به التالي:
@misc{2405.13196,
Author = {David Kremer and Victor Villar and Hanhee Paik and Ivan Duran and Ismael Faro and Juan Cruz-Benito},
Title = {Practical and efficient quantum circuit synthesis and transpiling with Reinforcement Learning},
Year = {2024},
Eprint = {arXiv:2405.13196},
}
الخطوات التالية
- تعلّم كيفية إنشاء تمريرات المحوّل بالذكاء الاصطناعي.
- تعلّم كيفية تحويل الدوائر كجزء من سير عمل أنماط Qiskit باستخدام Qiskit Runtime.
- راجع توثيق عميل Qiskit Transpiler Service Python.