מדריך למשתמש של תוסף SPANK
תוסף SPANK עבור ממשק ניהול משאבי קוונטום (QRMI) משמש להגדרת גישה למשאבי קוונטום ממשימות משתמשים בסביבת מחשוב המנוהלת על ידי מנהל עומסי העבודה Slurm. זהו מדריך למשתמשי התוסף להגדרת הקצאת משאבי QPU בעת יצירת משימות Slurm.
הגדרות משאבי ה-QPU של Slurm קובעות אילו משאבים פיזיים ניתן להשתמש בהם במשימות Slurm בסביבות מחשוב ביצועי גבוה (HPC). קוד המקור של המשתמש צריך להיות אגנוסטי לגבי מופעי Backend ספציפיים, ואפילו לגבי סוגי Backend בכל פעם שניתן. כך נשמרת ניידות קוד המקור בעוד שקריטריוני בחירת ה-QPU הם חלק מהגדרת המשאב (שנחשבת קונפיגורציה ולא קוד מקור).
הגדרת משאבי QPU ביצירת משימות
שים לב שתוסף זה נמצא בפיתוח פעיל והתחביר המדויק עשוי להשתנות.
היקף המנהל
מנהלי HPC מגדירים את תוסף SPANK כדי לציין אילו משאבים פיזיים ניתן לספק למשימות Slurm. הגדרה זו מכילה את כל המידע הדרוש כדי שמשימות Slurm יגשו למשאבים הפיזיים, כגון נקודות קצה וגישת אישורים.
קרא את qrmi_config.json.example לדוגמת קונפיגורציה מקיפה.
בקובץ slurm.conf, ניתן להקצות משאבי QPU לחלק מהצמתים או לכולם לשימוש:
...
GresTypes=qpu,name
NodeName=node[1-5000] Gres=qpu,name:ibm_fez
...
היקף המשתמש
משתמשי HPC מגישים משימות תוך שימוש במשאבי QPU הקשורים למשאבי Slurm QPU. מאפיין השם מפנה למה שהגדיר מנהל ה-HPC. במהלך זמן הריצה של משימת Slurm, בחירת ה-Backend יכולה להתבסס על קריטריונים אחרים מלבד שם מוגדר מראש המפנה ל-Backend ספציפי (למשל, לפי קריטריוני קיבולת ושיעור שגיאות, כדי לסייע בצמצום בין קבוצת ה-Backends המוגדרת).
ייתכן שיידרשו משתני סביבה נוספים, בהתאם לסוג ה-Backend.
פרמטרי SBATCH יצביעו על משאב QPU אחד או יותר המוקצים לאפליקציה כמשאבים גנריים.
משתני סביבה שסופקו דרך התוסף יספקו את המידע הדרוש לאפליקציה (ראה את הסעיף היקף אפליקציית HPC לפרטים).
#SBATCH --time=100
#SBATCH --output=<LOGS_PATH>
#SBATCH --gres=qpu:1
#SBATCH --qpu=ibm_fez
#SBATCH --... # other options
srun ...
כדי להשתמש במשאבי QPU נוספים, הוסף עוד QPUs לפרמטר --qpu:
#SBATCH --time=100
#SBATCH --output=<LOGS_PATH>
#SBATCH --gres=qpu:3
#SBATCH --qpu=my_local_qpu,ibm_fez,ibm_marrakesh
#SBATCH --... # other options
srun ...
היקף אפליקציית HPC
אפליקציות HPC משתמשות במשאבי Slurm QPU המוקצים למשימת Slurm.
משתני סביבה מספקים פרטים נוספים לשימוש האפליקציה; לדוגמה, SLURM_JOB_QPU_RESOURCES מפרט את שמות משאבי הקוונטום (מופרדים בפסיק אם מסופקים כמה).
משתנים אלו ישמשו את QRMI. (ראה את קובצי ה-README בספריות QRMI השונות (IBM, pasqal) לפרטים נוספים.)
from qiskit import QuantumCircuit
# Using an IBM QRMI flavor:
from qrmi.primitives import QRMIService
from qrmi.primitives.ibm import SamplerV2, get_backend
# define circuit
circuit = QuantumCircuit(2)
circuit.h(0)
circuit.cx(0, 1)
circuit.measure_all()
# instantiate QRMI service and get quantum resource (we'll take the first one should there be several of them)
# inject credentials needed for accessing the service at this point
load_dotenv()
service = QRMIService()
resources = service.resources()
qrmi = resources[0]
# Generate transpiler target from backend configuration & properties and transpile
backend = get_backend(qrmi)
pm = generate_preset_pass_manager(
optimization_level=1,
backend=backend,
)
isa_circuit = pm.run(circuit)
# Run the circuit
options = {}
sampler = SamplerV2(qrmi, options=options)
job = sampler.run([(isa_circuit, isa_observable, param_values)])
print(f">>> Job ID: {job.job_id()}")
result = job.result()
if job.done():
pub_result = result[0]
print(f"Counts for the 'meas' output register: {pub_result.data.meas.get_counts()}")
elif job.cancelled():
print("Cancelled")
elif job.errored():
print(qrmi.task_logs(job.job_id()))
ראה את ספריית הדוגמאות לקבצי דוגמה.
פרטי Backend ספציפיים
IBM Direct Access API
היקף המנהל
קונפיגורציה של Backend מסוג Direct Access API (היקף מנהל HPC) כוללת נקודות קצה ואישורי גישה לנקודת הקצה של Direct Access ולשירותי האימות, וכן לנקודת הקצה של S3. באופן ספציפי, זה כולל:
- מפתח API של IBM Cloud® ליצירת bearer tokens
- נקודת קצה של Direct Access API
- דלי S3 ופרטי גישה
אישורי הגישה לא צריכים להיות גלויים למשתמשי HPC או למשתמשים אחרים ללא הרשאות במערכת. לכן, ניתן לשים נתונים רגישים בקבצים נפרדים, שניתן להגן עליהם בהתאם.
שים לב ש-Slurm יש לו גישה מלאה ל-Backend. לכך יש מספר השלכות:
- תוסף Slurm אחראי על ריבוי שוכרים (הבטחה שמשתמשים לא יראו תוצאות של משימות משתמשים אחרים)
- צד אשכול ה-HPC אחראי על בדיקת משתמשים (מי רשאי לגשת ל-QPU) והבטחת גישה בהתאם
- הקיבולת והעדיפות של שימוש ה-QPU מנוהלים אך ורק דרך Slurm; אין תזמון אחר של משתמשים מחוץ ל-Slurm
היקף המשתמש
מסלולי ביצוע אינם חשופים ישירות למנהל ה-HPC או למשתמש. במקום זאת, במהלך זמן הריצה, ישנם שני מצבים שונים שמשתמשי HPC יכולים לציין:
exclusive=trueמציין שאין משימות אחרות שיכולות להשתמש במשאב באותו זמן. מ שימה במצב בלעדי מקבלת את כל מסלולי הביצוע ולא יכולה לרוץ במקביל למשימה שאינה בלעדיתexclusive=falseמאפשר למשימות אחרות לרוץ במקביל. במקרה זה, יכולות להיות כמה משימות כמספר מסלולי הביצוע, כולן רצות בו-זמנית, והמשימה מוקצית למסלול אחד
Qiskit Runtime Service
היקף המשתמש
צפוי שהמשתמשים יציינו פרטי גישה נוספים במשתני סביבה. באופן ספציפי, זה כולל את הדברים הבאים:
- מופע שירות Qiskit Runtime (CRN, Cloud Resource Name)
- נקודת קצה עבור Qiskit Runtime (אם לא מזוהה אוטומטית מה-CRN)
- מפתח API, שיש לו גישה ל-CRN
- מופע S3, דלי, ואסימון גישה/אישורים להעברות נתונים
פרטים אלה קובעים באיזה משתמש ומופע שירות נעשה שימוש בשירות Qiskit Runtime. בהתאם, תזמון פלטפורמת IBM Quantum® מתחשב ביכולות המשתמש ומופע השירות לתזמון.
כרגע, המשתמשים חייבים לספק את הפרטים הנ"ל (אין גישת קוונטום משותפת לכל האשכול).
Pasqal Cloud Services
היקף מנהל HPC
אין הגדרה ספציפית הנדרשת ממנהלי HPC לשימוש ב-PCS.
היקף משתמש HPC
צפוי שהמשתמשים יציינו פרטי גישה נוספים במשתני סביבה. כרגע, זה כולל את הדברים הבאים:
- משאב PCS לטרגט (FRESNEL, EMU_FRESNEL, EMU_MPS)
- אסימון הרשאה