SPANK-плагін для QRMI
SPANK-плагін для Quantum Resource Management Interface (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 | Назва квантового ресурсу (наприклад, назва бекенду) |
| 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 ..
Якщо наведений вище крок збірки успішний, у директорії build/ буде створена спільна бібліотека Linux з назвою spank_qrmi.so.
Крім того, додай такий рядок до /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
Для вузла розподільника тобі не потрібно вказувати шлях до 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 logger для журналювання. Повідомлення журналу від цього плагіна можна знайти в /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.
| Змінна середовища | Опис |
|---|---|
SLURM_JOB_QPU_RESOURCES | Розділений комами список ресурсів QPU для використання під час виконання. Незадокументовані ресурси будуть відфільтровані. Наприклад, qpu1,qpu2 |
SLURM_JOB_QPU_TYPES | Розділений комами список типів ресурсів (direct-access, qiskit-runtime-service та pasqal-cloud). Наприклад, direct-access,pasqal-cloud |