إضافة 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 (حزمة make/cmake RPM لأنظمة RHEL المتوافقة)
- openssl (حزمة openssl-devel RPM لأنظمة RHEL المتوافقة)
- zlib (حزمة zlib-devel RPM لأنظمة RHEL المتوافقة)
- يجب أن تكون ملفات الترويسة الخاصة بـ Slurm (مثل slurm/slurm.h وما شابهها) متاحةً على جهازك
بيئة التشغيل تتطلب:
- gcc (حزمة libgcc RPM لأنظمة RHEL المتوافقة)
- openssl (حزمة openssl-libs RPM لأنظمة RHEL المتوافقة)
- zlib (حزمة zlib RPM لأنظمة 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، استخدم حساباً يدعم فتح جلسة، مثل حساب الخطة المميزة (Premium Plan).
إذا كنت تستخدم حساباً لا يدعم فتح الجلسات، كحساب الخطة المجانية (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.
التسجيل والسجلات
تستخدم هذه الإضافة مُسجِّل 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 |
اعتبارات عند استخدام عدة وحدات QPU
في وقت التشغيل، ترتبط كل نسخة من QRMI بمورد QPU واحد. لتمكين استخدام موارد كمومية متعددة داخل سكريبت مهمة واحدة، تضبط هذه الإضافة متغيرات البيئة مع اسم المورد كبادئة. على سبيل المثال، إذا تم تحديد --qpu=qpu1,qpu2، ستُضبط متغيرات البيئة على النحو التالي:
qpu1_QRMI_IBM_DA_ENDPOINT=http://test1
qpu2_QRMI_IBM_DA_ENDPOINT=http://test2
هذا يضمن أن كل نسخة من QRMI تعمل بمعاملات الإعداد المحددة للمورد الخاص بها أثناء تنفيذ مهمة Slurm.
إعدادات متغيرات البيئة أعلاه تُطبَّق فقط على المهام التي يتم فيها تحديد خيار --qpu=names.
تضبط هذه الإضافة أيضاً متغيري البيئة التاليين اللذين يستخدمهما كود QRMI primitives.
| متغير البيئة | الوصف |
|---|---|
SLURM_JOB_QPU_RESOURCES | قائمة مفصولة بفواصل من موارد QPU للاستخدام في وقت التشغيل. سيتم تصفية الموارد غير الموثَّقة. مثلاً: qpu1,qpu2 |
SLURM_JOB_QPU_TYPES | قائمة مفصولة بفواصل من نوع المورد (direct-access أو qiskit-runtime-service أو pasqal-cloud). مثلاً: direct-access,pasqal-cloud |