Перейти до основного вмісту

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.conflocal, remote, allocator, slurmd та job_script
qrmi_config.jsonremote (обчислювальні вузли)
spank_qrmi.soallocator та 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)
(за замовчуванням)3info
--quiet2error
--verbose4debug
-vv або більше5trace

Міркування щодо кількох 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