דלג לתוכן הראשי

מבוא לטרנספילציה

סקי�רה כללית של טרנספילציה וכלים רלוונטיים לשימוש, הן מקומית והן בענן.

טרנספילציה היא תהליך של כתיבה מחדש של מעגל קלט נתון כך שיתאים לטופולוגיה של מכשיר קוונטי ספציפי, ואופטימיזציה של הוראות המעגל להרצה על מחשבים קוונטיים רועשים. תיעוד זה מכסה את הכלים וזרימות העבודה לטרנספילציה מקומית הזמינה לכל משתמשי Qiskit, כמו גם את שירות ה-Transpiler של Qiskit הזמין למשתמשי Premium Plan, Flex Plan ו-On-Prem (דרך IBM Quantum Platform API) Plan. אם אתה משתמש ב-primitives ומעוניין רק באפשרויות הטרנספילציה המוגדרות כברירת מחדל שמספק שירות Qiskit Runtime, קרא את הנושא Configure runtime compilation for Qiskit Runtime.

תהליך הטרנספילציה לוקח מעגל שמכיל את ההוראות שלך:

מעגל קוונטי דו-קיוביט המכיל שערי Hadamard ושני שערי CNOT.

הטרנספילציה אז ממירה אותו כך שישתמשו רק בהוראות הזמינות ב-Backend הנבחר, ומייעלת הוראות אלו כדי למזער את השפעות הרעש:

אותו מעגל קוונטי דו-קיוביט לאחר טרנספילציה. הוא מכיל שערי RZ, X, SX ו-ECR.


מרכיב מרכזי ב-Qiskit SDK, ה-Transpiler מתוכנן למודולריות ולהרחבה. השימוש העיקרי בו הוא לכתוב טרנספורמציות מעגל חדשות (המכונות passes של ה-Transpiler), ולשלב אותן עם passes קיימים אחרים, מה שמקטין מאוד את עומק המעגלים הקוונטיים ומורכבותם. אילו passes משורשרים יחד ובאיזה סדר משפיע רבות על התוצאה הסופית. הצינור הזה נקבע על ידי אובייקטי PassManager ו-StagedPassManager. ה-StagedPassManager מתאם את ביצוע PassManager אחד או יותר וקובע את הסדר שבו הם מורצים, בעוד שאובייקט PassManager הוא פשוט אוסף של pass אחד או יותר. חשוב על StagedPassManager כמנצח בתזמורת, PassManagers כסקציות הכלים השונות, ואובייקטי Pass כנגנים הבודדים. בדרך זו, ניתן לחבר מעגלים קוונטיים יעילים לחומרה שיאפשרו לך לבצע עבודה בהיקף שימושי תוך שמירה על רעש בר-ניהול.

מצא מידע נוסף על שלבי ה-pass manager בנושא שלבי ה-Transpiler.

ארכיטקטורת סט ההוראות

בנוסף להקטנת עומק המעגלים הקוונטיים ומורכבותם, ה-Transpiler מתוכנן לשנות את ההוראות הכלולות ב-QuantumCircuit נתון כך שיציית ל-Instruction Set Architecture (ISA) של Backend ספציפי. מעגלים הציתים ל-ISA מורכבים רק מהוראות הנתמכות על ידי ה-Target של ה-Backend, כגון שערי הבסיס הזמינים של החומרה, מדידות, איפוסים ופעולות זרימת בקרה, ועומדים בהגבלות שנקבעות על ידי הקישוריות של החומרה, כלומר ה-CouplingMap של היעד. בעת שליחת משימה ל-Backend של IBM Quantum®, המעגלים חייבים לעמוד ב-ISA של ה-Backend.

שלבי ה-Transpiler

הצינור המובנה מראש של Qiskit למטרנספילציה מורכב משישה שלבים יסודיים:

  1. init - pass זה מריץ כל pass ראשוני הנדרש לפני שניתן לשבץ את המעגל. בדרך כלל, זה כולל פתיחת הוראות מותאמות אישית והמרת המעגל לשערים חד ודו-קיוביטיים. כברירת מחדל, זה מאמת את הוראות המעגל ומתרגם שערים רב-קיוביטיים לשערים חד ודו-קיוביטיים.
  2. layout - pass זה מיישם layout, ממפה את ה-Qubits הוירטואליים במעגל שלך ל-Qubits הפיזיים של ה-QPU.
  3. routing - pass זה רץ לאחר שהוחל layout ומחדיר שערים (כלומר, SWAPs) למעגל המקורי כדי להפוך אותו לתואם לקישוריות ה-QPU (מפת הצימוד).
  4. translation - pass זה מתרגם את השערים במעגל לסט ההוראות הבסיסי של ה-QPU.
  5. optimization - pass זה מריץ לולאת אופטימיזציה למציאת פירוקים יעילים יותר של המעגל הקוונטי עד שמתקיים תנאי (כגון עומק קבוע).
  6. scheduling - שלב זה מיועד לכל passes תזמון המודעים לחומרה. אם המשתמש מציין שיטת תזמון, שלב זה לוקח בחשבון את כל זמן הסרק במעגל.

אם אתה מתאים אישית זרימת עבודה של טרנספילציה, השתמש בשלבים אלו כהנחיה בפיתוח.

טרנספילציה עם pass managers

הדרך המומלצת לטרנספל מעגל היא ליצור staged pass manager ולאחר מכן לבצע את שיטת ה-run שלו עם המעגל שלך כקלט. ניתן להשתמש בפונקציה generate_preset_pass_manager כדי ליצור staged pass manager עם ברירות מחדל סבירות.

משתמשים מתקדמים יותר יכולים להתאים אישית קבוצת אובייקטים של PassManager ו-StagedPassManager ולקבוע את הסדר שבו כל שלב מורץ. זה יכול לשנות באופן דרמטי את מעגל הפלט הסופי. למעשה, גישה מותאמת אישית לטרנספילציה של אלגוריתם קוונטי מניבה לרוב דיכוי שגיאות יעיל יותר מהגישה המוגדרת כברירת מחדל. גישה מותאמת אישית כוללת כתיבה מחדש של מעגלים קוונטיים כדי להתאים לאילוצי החומרה ולדכא את השפעות הרעש. זרימת הלוגיקה לשרשרת כלים זו ניתנת להתאמה אישית ואינה חייבת להיות לינארית. תהליך הטרנספילציה יכול להכין לולאות איטרטיביות, ענפים מותנים והתנהגויות מורכבות אחרות. נקודת פתיחה טובה בעת פיתוח קבוצת passes מותאמים אישית היא לבחון את רצף ברירת המחדל של טרנספורמציות.

לסקירה של טרנספילציה באמצעות pass managers, ראה Transpile with pass managers.

טרנספילציה ברירת המחדל

לדרך פשוטה יותר, אך פחות ניתנת להתאמה אישית, להשתמש ב-Transpiler "מהקופסה", השתמש בפונקציה qiskit.compiler.transpile. זה מייצר ומריץ אחד מאובייקטי StagedPassManager המוגדרים מראש בהתבסס, בין שאר האפשרויות, על דגל optimization_level שניתן להגדיר ל-0, 1, 2 או 3. רמות גבוהות יותר מייצרות מעגלים מותאמים יותר במחיר של זמני טרנספילציה ארוכים יותר.

הצעדים הבאים

המלצות