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

התקנה ושימוש בתוספי Transpiler

גרסאות חבילות

הקוד בדף זה פותח באמצעות הדרישות הבאות. אנחנו ממליצים להשתמש בגרסאות אלו או חדשות יותר.

qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1

כדי לאפשר פיתוח ושימוש חוזר בקוד transpilation מותאם אישית על-ידי קהילת משתמשי Qiskit הרחבה, ה-Qiskit SDK תומך בממשק תוספים המאפשר לחבילות Python של צד שלישי להצהיר שהן מספקות פונקציונליות transpilation מורחבת הנגישה דרך Qiskit.

כיום, תוספים של צד שלישי יכולים לספק פונקציונליות transpilation מורחבת בשלוש דרכים:

  • תוסף שלב Transpiler מספק pass manager שניתן להשתמש בו במקום אחד מ-6 השלבים של pass manager מדורג מוגדר מראש: init, layout, routing, translation, optimization, ו-scheduling.
  • תוסף סינתזת יוניטרי מספק פונקציונליות מורחבת לסינתזת שערי יוניטרי.
  • תוסף סינתזה ברמה גבוהה מספק פונקציונליות מורחבת לסינתזת "אובייקטים ברמה גבוהה" כגון פונקציות לינאריות או אופרטורי Clifford. אובייקטים ברמה גבוהה מיוצגים על-ידי מחלקות משנה של מחלקת Operation.

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

רשימת תוספים זמינים והתקנת חדשים

Qiskit כבר כולל כמה תוספים מובנים לצורך transpilation. כדי להתקין עוד, ניתן להשתמש במנהל החבילות של Python. לדוגמה, אפשר להריץ pip install qiskit-toqm כדי להתקין את תוסף שלב הניתוב Qiskit TOQM. מספר תוספים של צד שלישי הם חלק מ-מערכת האקולוגית של Qiskit.

רשימת תוספי שלב Transpiler זמינים

השתמש בפונקציה list_stage_plugins, תוך העברת שם השלב שאת תוספיו ברצונך לרשום.

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit.transpiler.preset_passmanagers.plugin import list_stage_plugins

list_stage_plugins("layout")
['default', 'dense', 'sabre', 'trivial']
list_stage_plugins("routing")
['basic', 'default', 'lookahead', 'none', 'sabre']

אם qiskit-toqm היה מותקן, אזי toqm היה מופיע ברשימת תוספי routing.

רשימת תוספי סינתזת יוניטרי זמינים

השתמש בפונקציה unitary_synthesis_plugin_names.

from qiskit.transpiler.passes.synthesis import unitary_synthesis_plugin_names

unitary_synthesis_plugin_names()
['aqc', 'clifford', 'default', 'gridsynth', 'sk']

רשימת תוספי סינתזה ברמה גבוהה זמינים

השתמש בפונקציה high_level_synthesis_plugin_names, תוך העברת שם סוג ה"אובייקט ברמה גבוהה" שיש לסנתז. השם תואם לתכונה name של מחלקת Operation המייצגת את סוג האובייקט שמסנתזים.

from qiskit.transpiler.passes.synthesis import (
high_level_synthesis_plugin_names,
)

high_level_synthesis_plugin_names("clifford")
['ag', 'bm', 'default', 'greedy', 'layers', 'lnn', 'rb_default']

ניתן להשתמש במחלקה HighLevelSynthesisPluginManager כדי לרשום את שמות כל תוספי הסינתזה ברמה גבוהה:

from qiskit.transpiler.passes.synthesis.plugin import (
HighLevelSynthesisPluginManager,
)

HighLevelSynthesisPluginManager().plugins.names()
['FullAdder.default',
'FullAdder.ripple_c04',
'FullAdder.ripple_v95',
'HalfAdder.default',
'HalfAdder.qft_d00',
'HalfAdder.ripple_c04',
'HalfAdder.ripple_r25',
'HalfAdder.ripple_v95',
'IntComp.default',
'IntComp.noaux',
'IntComp.twos',
'ModularAdder.default',
'ModularAdder.modular_v17',
'ModularAdder.qft_d00',
'ModularAdder.ripple_c04',
'ModularAdder.ripple_v95',
'Multiplier.cumulative_h18',
'Multiplier.default',
'Multiplier.qft_r17',
'PauliEvolution.default',
'PauliEvolution.rustiq',
'WeightedSum.default',
'annotated.default',
'clifford.ag',
'clifford.bm',
'clifford.default',
'clifford.greedy',
'clifford.layers',
'clifford.lnn',
'linear_function.default',
'linear_function.kms',
'linear_function.pmh',
'mcmt.default',
'mcmt.noaux',
'mcmt.vchain',
'mcmt.xgate',
'mcx.1_clean_b95',
'mcx.1_clean_kg24',
'mcx.1_dirty_kg24',
'mcx.2_clean_kg24',
'mcx.2_dirty_kg24',
'mcx.default',
'mcx.gray_code',
'mcx.n_clean_m15',
'mcx.n_dirty_i15',
'mcx.noaux_hp24',
'mcx.noaux_v24',
'permutation.acg',
'permutation.basic',
'permutation.default',
'permutation.kms',
'permutation.token_swapper',
'qft.default',
'qft.full',
'qft.line',
'clifford.rb_default']

שימוש בתוסף

בחלק זה נראה כיצד להשתמש בתוספי Transpiler. בדוגמאות הקוד אנו משתמשים בתוספים שמגיעים עם Qiskit, אך תוספים שמותקנים מחבילות צד שלישי משמשים באותה הדרך.

שימוש בתוסף שלב Transpiler

כדי להשתמש בתוסף שלב Transpiler, יש לציין את שמו עם הארגומנט המתאים ל-generate_preset_pass_manager או ל-transpile. הארגומנט נוצר על-ידי הוספת _method לשם שלב ה-transpilation. לדוגמה, כדי להשתמש בתוסף הניתוב lookahead, נציין lookahead עבור ארגומנט routing_method:

from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.backend("ibm_fez")

pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend, routing_method="lookahead"
)

שימוש בתוסף סינתזת יוניטרי

כדי להשתמש בתוסף סינתזת יוניטרי, יש לציין את שמו כארגומנט unitary_synthesis_method ל-generate_preset_pass_manager או ל-transpile:

pass_manager = generate_preset_pass_manager(
optimization_level=3,
backend=backend,
unitary_synthesis_method="sk",
unitary_synthesis_plugin_config=dict(
basis_gates=["cz", "id", "rz", "sx", "x"]
),
)

סינתזת יוניטרי משמשת בשלבי init, translation ו-optimization של ה-pass manager המדורג שמוחזר על-ידי generate_preset_pass_manager או שמשמש ב-transpile. ראה שלבי Transpiler לתיאור שלבים אלו.

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

שימוש בתוסף סינתזה ברמה גבוהה

ראשית, צור HLSConfig כדי לאחסן את שמות התוספים לשימוש עבור אובייקטים שונים ברמה גבוהה. לדוגמה:

from qiskit.transpiler.passes import HLSConfig

hls_config = HLSConfig(clifford=["layers"], linear_function=["pmh"])

תא קוד זה יוצר הגדרת סינתזה ברמה גבוהה שמשתמשת בתוסף layers לסינתזת אובייקטי Clifford ובתוסף pmh לסינתזת אובייקטי LinearFunction. שמות הארגומנטים של מילות המפתח תואמים לתכונה name של מחלקת Operation המייצגת את סוג האובייקט שמסנתזים. עבור כל אובייקט ברמה גבוהה, רשימת התוספים הנתונה מנוסה ברצף עד שאחד מהם מצליח (בדוגמה לעיל, כל רשימה מכילה רק תוסף בודד).

בנוסף לציון תוסף לפי שמו, ניתן גם להעביר טאפל (name, options), כאשר האלמנט השני בטאפל הוא מילון המכיל אפשרויות לתוסף. התיעוד של שיטת הסינתזה אמור להסביר את האפשרויות שהיא תומכת בהן. ראה רשימה זו לקישורים לתיעוד של תוספי הסינתזה ברמה גבוהה המובנים.

לאחר שיצרת את האובייקט HLSConfig, העבר אותו כארגומנט hls_config ל-generate_preset_pass_manager או ל-transpile:

pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend, hls_config=hls_config
)

סינתזה ברמה גבוהה משמשת בשלבי init, translation ו-optimization של ה-pass manager המדורג שמוחזר על-ידי generate_preset_pass_manager או שמשמש ב-transpile. ראה שלבי Transpiler לתיאור שלבים אלו.

הצעדים הבאים

המלצה