انتقل إلى المحتوى الرئيسي

قطع الدوائر

قطع الدوائر هو أسلوب يُتيح تشغيل دوائر أكبر حجمًا على العتاد الكمومي، وذلك على حساب زيادة في عبء أخذ العينات. تُنفّذ هذه الإضافة هذا الأسلوب، إذ يُقطَع عدد محدود من البوابات أو الأسلاك أو كليهما، مما يُفضي إلى دوائر أصغر حجمًا تكون أكثر ملاءمةً للتشغيل على العتاد. تُنفَّذ هذه الدوائر الأصغر بعد ذلك، وتُعاد بناء نتائج الدائرة الأصلية عبر معالجة كلاسيكية لاحقة. غير أن المقايضة هنا هي أن العدد الإجمالي للقياسات (shots) يجب أن يزيد بعامل يعتمد على عدد القطوع ونوعها (يُعرف بعبء أخذ العينات). يمكن أيضًا استخدام قطع الدوائر لبناء بوابات بين كيوبتات متباعدة، بدلًا من تحمّل عبء كبير ناجم عن عمليات SWAP.

المصطلحات الأساسية

  • الدوائر الفرعية (Subcircuits): مجموعة الدوائر الناتجة عن قطع البوابات في QuantumCircuit ثم فصل مجموعات الكيوبتات غير المتصلة إلى دوائر أصغر. تحتوي هذه الدوائر على كائنات SingleQubitQPDGate وتُستخدم لإنشاء كل تجربة فرعية.

  • التجربة الفرعية (Subexperiment): مصطلح يُشير إلى العينات الفريدة من الدوائر المرتبطة بدائرة فرعية، والتي تُرسَل إلى وحدة معالجة الكم (QPU) للتنفيذ.

تثبيت حزمة قطع الدوائر

ثمة ثلاث طرق لتثبيت حزمة قطع الدوائر: عبر PyPI، أو بالبناء من المصدر، أو التشغيل داخل بيئة حاويات. يُنصح بتثبيت هذه الحزم في بيئة افتراضية لضمان الفصل بين تبعيات الحزم.

التثبيت من PyPI

أبسط طريقة لتثبيت حزمة qiskit-addon-cutting هي عبر PyPI:

pip install qiskit-addon-cutting

التثبيت من المصدر

انقر هنا لمعرفة كيفية تثبيت هذه الحزمة يدويًا.

للمساهمة في هذه الحزمة أو تثبيتها يدويًا، ابدأ بنسخ المستودع:

git clone git@github.com:Qiskit/qiskit-addon-cutting.git

ثم ثبّت الحزمة باستخدام pip. لتشغيل الدروس التعليمية الموجودة في مستودع الحزمة، ثبّت تبعيات دفاتر الملاحظات أيضًا. ثبّت تبعيات dev إذا كنت تعتزم التطوير داخل المستودع.

pip install tox notebook -e '.[notebook-dependencies,dev]'

الاستخدام مع Docker

يمكن استخدام ملف Dockerfile المضمّن في مستودع الإضافة لبناء صورة Docker. يُتيح لك ملف compose.yaml المضمّن استخدام صورة Docker بالأوامر التالية.

انقر هنا لمعرفة كيفية استخدام هذه الحزمة مع Docker.

git clone git@github.com:Qiskit/qiskit-addon-cutting.git
cd qiskit-addon-cutting
docker compose build
docker compose up
Note

If you are using podman and podman-compose instead of docker, the commands are:

podman machine start
podman-compose --podman-pull-args short-name-mode="permissive" build
podman-compose up

بمجرد تشغيل الحاوية، ستظهر لك رسالة مشابهة لما يلي:

notebook_1  |     To access the server, open this file in a browser:
notebook_1 | file:///home/$USERNAME/.local/share/jupyter/runtime/jpserver-7-open.html
notebook_1 | Or copy and paste one of these URLs:
notebook_1 | http://e4a04564eb39:8888/lab?token=00ed70b5342f79f0a970ee9821c271eeffaf760a7dcd36ec
notebook_1 | or http://127.0.0.1:8888/lab?token=00ed70b5342f79f0a970ee9821c271eeffaf760a7dcd36ec

الرابط الأخير في هذه الرسالة سيُتيح لك الوصول إلى واجهة دفتر ملاحظات Jupyter.

علاوة على ذلك، يحتوي الدليل الرئيسي على مجلد فرعي باسم persistent-volume. يجب وضع جميع الأعمال التي تريد حفظها في هذا المجلد، لأنه المجلد الوحيد الذي سيُحفظ عبر تشغيلات الحاويات المختلفة.

الخلفية النظرية

في عملية قطع الدوائر، يوجد نوعان من القطوع: قطع البوابة أو القطع "المكاني"، حيث يمر القطع عبر بوابة تعمل على كيوبتين أو أكثر، وقطع السلك أو القطع "الزمني"، الذي يمر مباشرةً عبر سلك الكيوبت (وهو في جوهره بوابة هوية أحادية الكيوبت مقطوعة إلى قطعتين).

يوضّح الرسم البياني أدناه مثالًا على قطع البوابات بحيث يمكن تقسيم الدائرة إلى قطعتين أصغر بعدد أقل من الكيوبتات.

Diagram of gate cutting by taking one larger circuit and cutting it into two smaller ones labeled "A" and "B"

ثمة ثلاثة سيناريوهات يجب مراعاتها عند تحضير سير عمل قطع الدوائر، وتتمحور حول مدى توافر التواصل الكلاسيكي بين عمليات تنفيذ الدوائر. الأول هو حالة توافر العمليات المحلية (LO) فقط، بينما يُدخل الآخران تواصلًا كلاسيكيًا بين عمليات التنفيذ، يُعرف بالعمليات المحلية والتواصل الكلاسيكي (LOCC). تُقسَّم سيناريوهات LOCC إلى إما تواصل أحادي الاتجاه شبه فوري بين عمليات تنفيذ الدوائر، أو تواصل ثنائي الاتجاه في الوقت الفعلي (كما قد تراه في بيئة متعددة وحدات QPU).

رغم إمكانية استخدام قطع الدوائر لتشغيل دوائر كمومية أكبر مما هو ممكن على العتاد الحالي، إلا أن ذلك يأتي بتكلفة. لأن هذا الأسلوب يمكن صياغته على أنه مسألة تحليل شبه احتمالي (QPD)، فإنه يستلزم عبء أخذ عينات أسيًا لإعادة بناء النتائج. هذا العبء هو العامل الذي يجب بموجبه زيادة العدد الإجمالي للقياسات حتى يُفضي التحليل شبه الاحتمالي إلى نفس مقدار الخطأ، ϵ\epsilon، الذي ستحصل عليه بتنفيذ الدائرة الأصلية. كل بوابة مقطوعة تُضيف إلى هذا العبء، ومقدار العبء المُضاف يعتمد على نوع البوابة المقطوعة (مزيد من التفاصيل حول عبء أخذ العينات موجود في الملحق الأخير من [1]).

على سبيل المثال، قطع بوابة CNOT واحدة يُحدث عبء أخذ عينات بمقدار 9 [2,6]، ودائرة بها nn قطوع في الأسلاك تُحدث عبء أخذ عينات بمقدار O(16n)\mathcal{O}(16^n) عندما لا يتوافر التواصل الكلاسيكي (سيناريو LO). ينخفض هذا إلى O(4n)\mathcal{O}(4^n) عندما يصبح التواصل الكلاسيكي متاحًا (سيناريو LOCC) [4]. غير أن قطع الأسلاك مع التواصل الكلاسيكي (LOCC) غير مدعوم في هذه الحزمة.

رسميًا، يمكن التعبير عن مسألة QPD لقطع الدوائر كما يلي:

U=iaiFi, \mathcal{U} = \sum_i a_i \mathcal{F}_i,

حيث U\mathcal{U} هي القناة الكمومية التي تُنفّذ العملية المطلوبة، وكل aia_i معامل حقيقي يقابل قناة Fi\mathcal{F}_i قابلة للتنفيذ على العتاد.

تُحصَّل النتائج المكافئة للقناة المطلوبة U\mathcal{U} بأن نُولّد أولًا المعاملات aia_i، ثم ننفّذ التجارب الفرعية للحصول على نتائج القنوات المختلفة Fi\mathcal{F}_i من أجل إعادة بناء قيم التوقع المقابلة لـ U\mathcal{U}.

مثال مختصر: قطع بوابة RZZGate

كمثال أساسي صريح، لنأخذ تحليل بوابة RZZGate المقطوعة (التفاصيل في [2]). يمكن محاكاة دائرة كمومية تحتوي على بوابة RZZGate بإجراء ست تجارب فرعية يُستبدل فيها بوابة RZZGate بعمليات أحادية الكيوبت فقط (وهي Fi\mathcal{F}_i من المعادلة أعلاه). تُعاد بناء نتائج هذه الدائرة بدمج نتائج كل تجربة فرعية مع مجموعة من المعاملات (aia_i من المعادلة أعلاه)، والتي يمكن أن تكون موجبة أو سالبة.

لقيمة معينة θ\theta لمعامل بوابة RZZGate، التجارب الفرعية الست هي كالتالي:

  1. بالمعامل a1=cos2(θ/2)a_1 = \cos^2(\theta/2)، لا شيء (III\otimes I)
  2. بالمعامل a2=sin2(θ/2)a_2 = \sin^2(\theta/2)، نُجري بوابة ZGate على كل كيوبت (ZZZ\otimes Z)
  3. بالمعامل a3=sin(θ)/2a_3 = -\sin(\theta)/2، نُجري قياسًا إسقاطيًا في الأساس ZZ على الكيوبت الأول وبوابة SS على الثاني (MzSM_z\otimes S). إذا كانت نتيجة القياس 11، نعكس إشارة مساهمة تلك النتيجة أثناء إعادة البناء.
  4. بالمعامل a4=sin(θ)/2a_4 = \sin(\theta)/2، نُجري قياسًا إسقاطيًا في الأساس ZZ على الكيوبت الأول وبوابة SS^\dagger على الثاني (MzSM_z\otimes S^\dagger). إذا كانت نتيجة القياس 1، نعكس إشارة مساهمة تلك النتيجة أثناء إعادة البناء.
  5. مثل 3. (a5=a3a_5=a_3)، لكن نُبادل بين الكيوبتين (نُجري SMzS\otimes M_z بدلًا من ذلك).
  6. مثل 4. (a6=a4a_6=a_4)، لكن نُبادل بين الكيوبتين (نُجري SMzS^\dagger\otimes M_z بدلًا من ذلك).

جدول مرجعي لعبء أخذ العينات

يوضّح الجدول التالي عامل عبء أخذ العينات لمجموعة متنوعة من التعليمات ثنائية الكيوبت، بافتراض قطع تعليمة واحدة فقط.

InstructionsKAK decomposition anglesSampling overhead factor
CSGate, CSdgGate, CSXGate(π/8,0,0)\left(\pi/8, 0, 0\right)3+2(2)2.8283+2\sqrt(2) \approx 2.828
CXGate, CYGate, CZGate, GHGate, ECRGate(π/4,0,0)\left(\pi/4, 0, 0\right)32=93^2=9
iSwapGate, DCXGate(π/4,π/4,0)\left(\pi/4, \pi/4, 0\right)72=497^2 = 49
SwapGate(π/4,π/4,π/4)\left(\pi/4, \pi/4, \pi/4\right)72=497^2 = 49
RXXGate, RYYGate, RZZGate, RZXGate(θ/2,0,0,)\left(\lvert\theta/2\rvert, 0, 0, \right)(1+2sin(θ))2\left(1 + 2\lvert\sin(\theta)\rvert\right)^2
CRXGate, CRYGate, CRZGate, CPhaseGate(θ/4,0,0)\left(\lvert\theta/4\rvert, 0, 0\right)(1+2sin(θ/2))2\left(1 + 2\lvert\sin(\theta/2)\rvert\right)^2
XXPlusYYGate, XXMinusYYGate(θ/4,θ/4,0)\left(\vert\theta/4\rvert, \lvert\theta/4\rvert, 0\right)(1+4sin(θ/2)+2sin2(θ/2))2\left(1 + 4\lvert\sin(\theta/2)\rvert + 2\sin^2(\theta/2)\right)^2 (independent of β\beta)
Move (cut wire in the LO scenario)N/A42=164^2 = 16

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

المراجع

[1] Christophe Piveteau, David Sutter, Circuit knitting with classical communication, https://arxiv.org/abs/2205.00016

[2] Kosuke Mitarai, Keisuke Fujii, Constructing a virtual two-qubit gate by sampling single-qubit operations, https://arxiv.org/abs/1909.07534

[3] Kosuke Mitarai, Keisuke Fujii, Overhead for simulating a non-local channel with local channels by quasiprobability sampling, https://arxiv.org/abs/2006.11174

[4] Lukas Brenner, Christophe Piveteau, David Sutter, Optimal wire cutting with classical communication, https://arxiv.org/abs/2302.03366

[5] K. Temme, S. Bravyi, and J. M. Gambetta, Error mitigation for short-depth quantum circuits, https://arxiv.org/abs/1612.02058

[6] Lukas Schmitt, Christophe Piveteau, David Sutter, Cutting circuits with multiple two-qubit unitaries, https://arxiv.org/abs/2312.11638

[7] Jun Zhang, Jiri Vala, K. Birgitta Whaley, Shankar Sastry, A geometric theory of non-local two-qubit operations, https://arxiv.org/abs/quant-ph/0209120