مقدمة إلى عملية التحويل (Transpilation)
التحويل (Transpilation) هو عملية إعادة كتابة دائرة مُدخَلة لتتوافق مع هيكلية جهاز كمومي محدد، وتحسين تعليمات الدائرة لتنفيذها على أجهزة الحوسبة الكمومية الصاخبة. تغطي هذه الوثائق الأدوات وسير العمل للتحويل المحلي المتاح لجميع مستخدمي Qiskit. إذا كنت تستخدم الـ primitives وتهتم فقط بخيارات التحويل الافتراضية التي تقدمها IBM Quantum Compute Service، فاقرأ موضوع Error mitigation and suppression techniques.
تأخذ عملية التحويل دائرة تحتوي على تعليماتك:
ثم تحوّلها بحيث تُستخدم فقط التعليمات المتاحة على Backend مختار، وتُحسَّن تلك التعليمات لتقليل تأثيرات الضوضاء:
يُعد المُحول (transpiler) عنصرًا أساسيًا في Qiskit SDK، وهو مُصمم ليكون معياريًا وقابلًا للتوسيع. استخدامه الرئيسي هو كتابة تحويلات دوائر جديدة (تُعرف باسم الـ passes الخاصة بالمحول)، ودمجها مع passes أخرى موجودة، مما يقلل بشكل كبير من عمق الدوائر الكمومية وتعقيدها. تُحدث الـ passes التي يتم ربطها معًا والترتيب الذي تُنفذ فيه تأثيرًا كبيرًا على النتيجة النهائية. يتم تحديد خط الأنابيب هذا من خلال الكائنات PassManager وStagedPassManager. ينسق الكائن StagedPassManager تنفيذ واحد أو أكثر من PassManagers ويحدد الترتيب الذي تُنفذ به، بينما الكائن PassManager هو مجرد مجموعة من pass واحد أو أكثر. فكّر في StagedPassManager على أنه قائد الأوركسترا، وفي PassManagers على أنها أقسام الآلات المختلفة، وفي الكائنات Pass على أنها الموسيقيون الأفراد. بهذه الطريقة، يمكنك تركيب دوائر كمومية فعالة من حيث العتاد تتيح لك تنفيذ أعمال على نطاق المنفعة (utility-scale) مع إبقاء الضوضاء تحت السيطرة.
يمكنك الاطلاع على مزيد من المعلومات حول مراحل مدير الـ Pass في موضوع مراحل الـ Transpiler.
معمارية مجموعة التعليمات
إضافةً إلى تقليل عمق الدوائر الكمومية وتعقيدها، صُمِّم الـ Transpiler لتحويل التعليمات الموجودة في QuantumCircuit معطى لتتوافق مع معمارية مجموعة التعليمات (ISA) لـ Backend معين. تتكون الدوائر المتوافقة مع ISA فقط من التعليمات التي يدعمها Target الخاص بالـ Backend، كبوابات الأساس المتاحة للأجهزة، والقياسات، وعمليات إعادة الضبط، وعمليات التحكم في التدفق، وتمتثل للقيود التي تحددها قابلية الاتصال بالأجهزة، أي CouplingMap الخاصة بالـ Target. عند إرسال مهمة إلى Backend من IBM Quantum®، يجب أن تلتزم الدوائر بـ ISA الخاص بذلك الـ Backend.
مراحل الـ Transpiler
يتكوّن خط أنابيب الـ Transpiler المُعدّ مسبقًا في Qiskit من ست مراحل أساسية:
-
init- تُشغّل هذه المرحلة أي passes أولية مطلوبة قبل أن تُضمَّن الدائرة. يتضمن ذلك عادةً تفكيك التعليمات المخصصة (unrolling) وتحويل الدائرة إلى بوابات أحادية وثنائية القبيت. بشكل افتراضي، تتحقق هذه المرحلة من صحة تعليمات الدائرة وتُترجم بوابات القبيت المتعددة إلى بوابات أحادية وثنائية القبيت. -
layout- يُطبّق هذا الـ Pass تخطيطًا (layout)، يُعيّن فيه Qubits الافتراضية في دائرتك إلى Qubits الفيزيائية في وحدة المعالجة الكمومية (QPU). -
routing- يعمل هذا الـ Pass بعد تطبيق التخطيط، ويحقن بوابات (أي SWAPs) في الدائرة الأصلية لجعلها متوافقة مع قابلية الاتصال في QPU (خريطة الاقتران). -
translation- تُترجم هذه المرحلة البوابات في الدائرة إلى مجموعة التعليمات الأساسية للـ QPU. -
optimization- تُشغّل هذه المرحلة حلقة تحسين لإيجاد تفكيكات أكثر كفاءة للدائرة الكمومية حتى يُستوفى شرط معين (كعمق ثابت). -
scheduling- هذه المرحلة مخصصة لأي passes جدولة تراعي متطلبات الأجهزة. إذا حدد المستخدم طريقة جدولة، فإن هذه المرحلة تأخذ في الحسبان جميع أوقات الخمول في الدائرة.
إذا كنت تُخصص سير عمل التحويل، فاستخدم هذه المراحل كمرجع أثناء التطوير.
التحويل باستخدام مديري الـ Pass
الطريقة الموصى بها لتحويل دائرة هي إنشاء مدير pass مُدرَّج (staged pass manager) ثم تنفيذ الـ method الخاصة بـ run مع دائرتك كمُدخَل. يمكنك استخدام دالة generate_preset_pass_manager لتوليد مدير pass مُدرَّج بإعدادات افتراضية معقولة.
يمكن للمستخدمين الأكثر تقدمًا تخصيص مجموعة من كائنات PassManager وStagedPassManager وتحديد ترتيب تنفيذ كل مرحلة. يمكن لهذا أن يُغير بشكل جذري الدائرة النهائية الناتجة. في الواقع، غالبًا ما يُنتج النهج المخصص لتحويل الخوارزميات الكمومية كبت أخطاء أكثر كفاءة مقارنةً بالنهج الافتراضي. يتضمن النهج المخصص إعادة كتابة الدوائر الكمومية لتتوافق مع قيود الأجهزة وتقليل تأثيرات الضوضاء. يمكن تخصيص منطق تدفق هذه السلسلة من الأدوات، ولا يلزم أن يكون خطيًا. يمكن لعملية التحويل أن تُعدّ حلقات تكرارية وفروع شرطية وسلوكيات معقدة أخرى. نقطة انطلاق جيدة عند تطوير مجموعة من الـ passes المخصصة هي فحص التسلسل الافتراضي للتحويلات.
للاطلاع على نظرة عامة حول التحويل باستخدام مديري الـ Pass، راجع التحويل باستخدام مديري الـ Pass.
التحويل الافتراضي
للحصول على طريقة أبسط لاستخدام الـ Transpiler "جاهزة للاستخدام"، وإن كانت أقل قابلية للتخصيص، استخدم دالة qiskit.compiler.transpile. تُولّد هذه الدالة وتُشغّل أحد كائنات StagedPassManager المُعدّة مسبقًا بناءً على خيارات عدة، من بينها علَم optimization_level الذي يمكن ضبطه على 0 أو 1 أو 2 أو 3. تُنتج المستويات الأعلى دوائر أكثر تحسينًا على حساب وقت تحويل أطول.
الخطوات التالية
- لتتعلم كيفية استخدام دالة
generate_preset_passmanager، ابدأ بموضوع الإعدادات الافتراضية للتحويل وخيارات الضبط. - واصل التعلم عن التحويل مع موضوع مراحل الـ Transpiler.
- جرّب دليل مقارنة إعدادات الـ Transpiler.
- جرّب مثالًا متكاملًا يستخدم دوائر محوَّلة في درس تقدير طاقة الحالة الأساسية لسلسلة Heisenberg باستخدام VQE.
- راجع توثيق Transpile API.
- تعلّم كيفية تحويل الدوائر.