תוסף SPANK עבור QRMI
תוסף SPANK עבור ממשק ניהול משאבים קוונטיים (QRMI) משמש להגדרת גישה למשאבים קוונטיים מתוך משימות משתמש בסביבת מחשוב שמנוהלת על ידי מנהל עומסי העבודה Slurm. הוא מטפל ברכישה ושחרור של הגישה למשאבים קוונטיים, ומגדיר את משתני הסביבה הנחוצים להרצת עומסי עבודה קוונטיים. המשאבים הקוונטיים הזמינים מוגדרים בקובץ qrmi_config.json, שמנוהל על ידי מנהל המערכת.
לאחר ההתקנה, תוסף זה רושם את האפשרות הבאה. משתמש Slurm יכול לציין אילו משאבים קוונטיים ישמשו לסקריפט המשימה ב-Slurm.
--qpu=names Comma separated list of QPU resources to use.
לדוגמה:
#!/bin/bash
#SBATCH --job-name=sampler_job
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=1
#SBATCH --qpu=ibm_quebec,ibm_sherbrooke
# Your script goes here...
דרישות והגדרות
הכלים הבאים נדרשים לסביבת הקומפילציה:
- מהדר Rust גרסה 1.86 ומעלה
- מהדר C: לדוגמה, GCC (gcc) על Linux ו-Clang (clang-tools-extra) עבור יעדים לא מוכרים ב-Rust / קומפילציות צולבות. QRMI ותוסף ה-SPANK שלו תואמים למהדר שעומד בתקן C11
- make/cmake (חבילת RPM של make/cmake עבור מערכות הפעלה תואמות RHEL)
- openssl (חבילת RPM של openssl-devel עבור מערכות הפעלה תואמות RHEL)
- zlib (חבילת RPM של zlib-devel עבור מערכות הפעלה תואמות RHEL)
- קובצי כותרת של Slurm (slurm/slurm.h וכדומה) חייבים להיות זמינים על המארח שלך
סביבת הריצה דורשת:
- gcc (חבילת RPM של libgcc עבור מערכות הפעלה תואמות RHEL)
- openssl (חבילת RPM של openssl-libs עבור מערכות הפעלה תואמות RHEL)
- zlib (חבילת RPM של zlib עבור מערכות הפעלה תואמות RHEL)
הגדרת משאבים קוונטיים זמינים
המאגר מכיל דוגמת הגדרה (qrmi_config.json.example).
מערך ה-resources מכיל קבוצה של משאבים קוונטיים זמינים. כל הגדרת משאב קוונטי מכילה את הפרטים הבאים:
| מאפיין | תיאור |
|---|---|
| name | שם המשאב הקוונטי (לדוגמה, שם ה-Backend) |
| type | סוג המשאב (direct-access, qiskit-runtime-service ו-pasqal-cloud) |
| environment | קבוצת משתני סביבה לעבודה עם QRMI. המימושים הנוכחיים מניחים שנקודת הקצה של ה-API ואישורי הגישה מוגדרים דרך הגדרת משתני סביבה |
אם משתמש מציין משאב עם האפשרות --qpu שאינו מוגדר בקובץ qrmi_config.json, המפרט יתעלם ממנו.
אם המשתמש מגדיר בעצמו את משתני הסביבה הנחוצים להרצת ה משימה, אין צורך לציין אותם בקובץ זה. במקרה כזה, מאפיין ה-environment יהיה {}.
אם אתה משתמש במשאב QPU עם סוג המשאב qiskit-runtime-service, השתמש בחשבון שתומך בפתיחת Session, כגון חשבון Premium Plan.
אם אתה משתמש בחשבון שאינו תומך בפתיחת Session, כגון חשבון Open Plan, הוסף את QRMI_IBM_QRS_SESSION_MODE="batch" לרשימת משתני הסביבה ב-qrmi_config.json כפתרון עוקף.
התקנה
הרץ את הבנייה באמצעות make ו-cmake:
. ~/.cargo/env
mkdir build
cd build
cmake ..
make
כברירת מחדל, קובץ CMakeLists.txt מצפה שקובץ הכותרת של Slurm (slurm.h) יימצא ב-/usr/include/slurm, אך ניתן להתאים זאת כמוצג להלן.
SLURM_INCLUDE_DIRS=<directory containing slurm/slurm.h> cmake ..
אם שלב הבנייה לעיל הצליח, ספריית שיתוף Linux בשם spank_qrmi.so תיווצר תחת ספריית build/.
בנוסף, הוסף את השורה הבאה לקובץ /etc/slurm/plugstack.conf בצמתים שבהם מותקן תוסף זה (שים לב שמנהל המערכת צריך ליצור את קובץ qrmi_config.json ולציין את הנתיב אליו כארגומנט לתוסף, כמוצג להלן):
optional /usr/lib64/slurm/spank_qrmi.so /etc/slurm/qrmi_config.json
אפשר להשתמש בארגומנטים האופציונליים הזמינים כדי להוסיף משתני סביבה לתהליך Slurm שבו נטען תוסף SPANK. פורמט ציון משתני הסביבה מוגדר כדלקמן:
--env:{variable name}={value}
לדוגמה, כאשר מתקשרים עם משאבים קוונטיים דרך פרוקסי HTTP, נדרשים משתני הסביבה http_proxy, https_proxy ו-no_proxy. ניתן להוסיף אותם כמוצג להלן.
optional /usr/lib64/slurm/spank_qrmi.so /etc/slurm/qrmi_config.json --env:http_proxy=http://192.168.1.128:3128 --env:https_proxy=http://192.168.1.128:3128
עבור צומת ה-allocator, אין צורך לציין את הנתיב ל-qrmi_config.json, כמוצג להלן.
optional /usr/lib64/slurm/spank_qrmi.so
הטבלה הבאה מציגה לאילו צמתי הקשר של Slurm יש להעתיק את הקבצים הללו. לפרטים נוספים על כל הקשר, עיין בתיעוד של תוסף SPANK.
| קבצים | הקשרי Slurm |
|---|---|
plugstack.conf | local, remote, allocator, slurmd ו-job_script |
qrmi_config.json | remote (צמתי מחשוב) |
spank_qrmi.so | allocator ו-remote (צמתי התחברות וצמתי מחשוב) |
לאחר עדכון plugstack.conf, תוספי SPANK יטענו בזמן ריצה בעת ההפעלה הבאה של משימה, כלומר מנהלי מערכת אינם צריכים להפעיל מחדש את אשכול Slurm.
לאחר השלמת ההתקנה, תמצא את האפשרות --qpu=names בהודעת העזרה של sbatch.
Options provided by plugins:
--qpu=names Comma-separated list of QPU resources to use.
רישום לוג
תוסף זה משתמש ב-logger של Slurm לצורך רישום. הודעות לוג מתוסף זה ניתן למצוא ב-/var/log/slurm/slurmd.log.
[2025-07-31T09:43:34.019] [21.batch] debug: spank: /etc/slurm/plugstack.conf:1: Loaded plugin spank_qrmi.so
[2025-07-31T09:43:34.019] [21.batch] debug: spank_qrmi_c(6582, 0): -> slurm_spank_init argc=1 remote=1
[2025-07-31T09:43:34.019] [21.batch] debug: SPANK: appending plugin option "qpu"
[2025-07-31T09:43:34.019] [21.batch] debug: spank_qrmi_c(6582,0): <- slurm_spank_init rc=0
[2025-07-31T09:43:34.019] [21.batch] debug2: spank: spank_qrmi.so: init = 0
[2025-07-31T09:43:34.019] [21.batch] debug: spank_qrmi_c: --qpu=[ibm_sherbrooke,ibm_torino]
[2025-07-31T09:43:34.019] [21.batch] debug: spank_qrmi_c(6582, 0): -> slurm_spank_init_post_opt argc=1 remote=1
[2025-07-31T09:43:34.019] [21.batch] debug: spank_qrmi_c, fffffffb
[2025-07-31T09:43:34.019] [21.batch] debug: spank_qrmi_c: argv[0] = [/etc/slurm/qrmi_config.json]
[2025-07-31T09:43:34.020] [21.batch] debug: spank_qrmi_c: name(ibm_sherbrooke), type(1) found in qrmi_config
ניתן להפעיל את לוג הריצה של QRMI על ידי ציון הארגומנטים הבאים ל-srun.
אפשרות sbatch/srun | רמת לוג של Slurm (SRUN_DEBUG) | רמת לוג של QRMI (RUST_LOG) |
|---|---|---|
| (ברירת מחדל) | 3 | info |
--quiet | 2 | error |
--verbose | 4 | debug |
-vv ומעלה | 5 | trace |
שיקולים עבור מספר QPUs
בזמן ריצה, כל מופע QRMI מקושר למשאב QPU יחיד. כדי לאפשר שימוש במספר משאבים קוונטיים בתוך סקריפט משימה אחד, תוסף זה מגדיר משתני סביבה עם שם המשאב כקידומת. לדוגמה, אם מציינים --qpu=qpu1,qpu2, משתני הסביבה יוגדרו כדלקמן:
qpu1_QRMI_IBM_DA_ENDPOINT=http://test1
qpu2_QRMI_IBM_DA_ENDPOINT=http://test2
זה מבטיח שכל מופע QRMI פועל עם פרמטרי ההגדרה שנקבעו עבור המשאב שלו בעת הרצת משימת Slurm.
הגדרות משתני הסביבה לעיל מוחלות רק על משימות שבהן מצוינת האפשרות --qpu=names.
תוסף זה גם מגדיר את שני משתני הסביבה הבאים, שמשמשים את קוד הפרימיטיבים של QRMI.
| משתנה סביבה | תיאור |
|---|---|
SLURM_JOB_QPU_RESOURCES | רשימה מופרדת בפסיקים של משאבי QPU לשימוש בזמן ריצה. משאבים לא מתועדים יסוננו. לדוגמה, qpu1,qpu2 |
SLURM_JOB_QPU_TYPES | רשימה מופרדת בפסיקים של סוג המשאב (direct-access, qiskit-runtime-service ו-pasqal-cloud). לדוגמה, direct-access,pasqal-cloud |