SPANK plugin pro QRMI
SPANK plugin pro Quantum Resource Management Interface (QRMI) slouží ke konfiguraci přístupu ke kvantovým zdrojům z uživatelských úloh ve výpočetním prostředí spravovaném správcem úloh Slurm. Zajišťuje získání a uvolnění přístupu ke kvantovým zdrojům a nastavuje potřebné proměnné prostředí pro spouštění kvantových úloh. Dostupné kvantové zdroje jsou specifikovány v souboru qrmi_config.json, který spravuje administrátor.
Po instalaci plugin registruje následující volbu. Uživatel Slurmu může určit, které kvantové zdroje se použijí pro skript Slurm úlohy.
--qpu=names Comma separated list of QPU resources to use.
Například:
#!/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...
Požadavky a konfigurace
Pro prostředí sestavení jsou vyžadovány následující nástroje:
- Kompilátor Rust verze 1.86 nebo novější
- Kompilátor C: například GCC (gcc) na Linuxu a Clang (clang-tools-extra) pro neznámé cíle Rustu / cross kompilace. QRMI a jeho SPANK plugin jsou kompatibilní s kompilátorem odpovídajícím standardu C11
- make/cmake (make/cmake RPM pro operační systémy kompatibilní s RHEL)
- openssl (openssl-devel RPM pro operační systémy kompatibilní s RHEL)
- zlib (zlib-devel RPM pro operační systémy kompatibilní s RHEL)
- Hlavičkové soubory Slurmu (slurm/slurm.h a další) musí být dostupné na tvém hostu
Běhové prostředí vyžaduje:
- gcc (libgcc RPM pro operační systémy kompatibilní s RHEL)
- openssl (openssl-libs RPM pro operační systémy kompatibilní s RHEL)
- zlib (zlib RPM pro operační systémy kompatibilní s RHEL)
Konfigurace dostupných kvantových zdrojů
Repozitář obsahuje ukázkovou konfiguraci (qrmi_config.json.example).
Pole resources obsahuje sadu dostupných kvantových zdrojů. Každá definice kvantového zdroje obsahuje následující položky:
| Vlastnost | Popis |
|---|---|
| name | Název kvantového zdroje (například název Backend) |
| type | Typ zdroje (direct-access, qiskit-runtime-service a pasqal-cloud) |
| environment | Sada proměnných prostředí pro práci s QRMI. Aktuální implementace předpokládají, že API endpoint a přihlašovací údaje jsou specifikovány pomocí nastavení proměnných prostředí |
Pokud uživatel zadá pomocí volby --qpu zdroj, který není definován v souboru qrmi_config.json, tato specifikace bude ignorována.
Pokud si uživatel sám nastaví potřebné proměnné prostředí pro spuštění úlohy, není nutné je v tomto souboru uvádět. V takovém případě bude vlastnost environment rovna {}.
Pokud používáš QPU zdroj s typem zdroje qiskit-runtime-service, použij účet, který podporuje otevření session, například účet Premium Plan.
Pokud používáš účet, který nepodporuje otevření session, například účet Open Plan, přidej jako obejití QRMI_IBM_QRS_SESSION_MODE="batch" do seznamu proměnných prostředí v souboru qrmi_config.json.
Instalace
Spusť sestavení pomocí make a cmake:
. ~/.cargo/env
mkdir build
cd build
cmake ..
make
Ve výchozím nastavení soubor CMakeLists.txt očekává, že hlavičkový soubor Slurmu (slurm.h) se nachází v /usr/include/slurm, ale toto lze upravit následovně.
SLURM_INCLUDE_DIRS=<directory containing slurm/slurm.h> cmake ..
Pokud výše uvedený krok sestavení proběhne úspěšně, ve složce build/ bude vytvořena sdílená knihovna pro Linux s názvem spank_qrmi.so.
Navíc přidej do souboru /etc/slurm/plugstack.conf na uzlech, kde je tento plugin nainstalován, následující jeden řádek (upozorňujeme, že administrátor musí vytvořit soubor qrmi_config.json a zadat jeho cestu jako argument pluginu, jak je uvedeno níže):
optional /usr/lib64/slurm/spank_qrmi.so /etc/slurm/qrmi_config.json
Pomocí dostupných volitelných argumentů můžeš přidávat proměnné prostředí do procesu Slurmu, kde je SPANK plugin načten. Formát pro zadání proměnných prostředí je definován takto:
--env:{variable name}={value}
Například při komunikaci s kvantovými zdroji přes HTTP proxy jsou vyžadovány proměnné prostředí http_proxy, https_proxy a no_proxy. Tyto lze přidat následovně:
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
Pro uzel alokátoru není nutné zadávat cestu k souboru qrmi_config.json, jak je uvedeno níže.
optional /usr/lib64/slurm/spank_qrmi.so
Následující tabulka ukazuje, na které uzly Slurm kontextu mají být tyto soubory zkopírovány. Další podrobnosti o každém kontextu najdeš v dokumentaci SPANK pluginu.
| Soubory | Slurm kontexty |
|---|---|
plugstack.conf | local, remote, allocator, slurmd a job_script |
qrmi_config.json | remote (výpočetní uzly) |
spank_qrmi.so | allocator a remote (přihlašovací uzly a výpočetní uzly) |
Po aktualizaci souboru plugstack.conf budou SPANK pluginy načteny za běhu při dalším spuštění úlohy, což znamená, že administrátoři nemusí restartovat Slurm cluster.
Po dokončení instalace bys měl(a) v nápovědě příkazu sbatch najít volbu --qpu=names.
Options provided by plugins:
--qpu=names Comma-separated list of QPU resources to use.
Logování
Tento plugin používá pro logování logger Slurmu. Zprávy protokolu z tohoto pluginu lze najít v souboru /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
Protokolování běhového prostředí QRMI lze zapnout zadáním následujících argumentů příkazu srun.
Volba sbatch/srun | Úroveň protokolu Slurmu (SRUN_DEBUG) | Úroveň protokolu QRMI (RUST_LOG) |
|---|---|---|
| (výchozí) | 3 | info |
--quiet | 2 | error |
--verbose | 4 | debug |
-vv nebo více | 5 | trace |
Poznámky k použití více QPU
Za běhu je každá instance QRMI propojena s jediným QPU zdrojem. Aby bylo možné v rámci jednoho skriptu úlohy použít více kvantových zdrojů, nastavuje tento plugin proměnné prostředí s názvem zdroje jako předponou. Například pokud je zadáno --qpu=qpu1,qpu2, proměnné prostředí budou nastaveny takto:
qpu1_QRMI_IBM_DA_ENDPOINT=http://test1
qpu2_QRMI_IBM_DA_ENDPOINT=http://test2
Tím je zajištěno, že každá instance QRMI pracuje s konfiguračními parametry nastavenými pro příslušný zdroj během vykonávání Slurm úlohy.
Výše uvedená nastavení proměnných prostředí jsou aplikována pouze na úlohy, u nichž je zadána volba --qpu=names.
Tento plugin také nastavuje následující dvě proměnné prostředí, na které odkazuje kód primitivů QRMI.
| Proměnná prostředí | Popis |
|---|---|
SLURM_JOB_QPU_RESOURCES | Seznam QPU zdrojů oddělený čárkami, které se použijí za běhu. Nedokumentované zdroje budou odfiltrovány. Například qpu1,qpu2 |
SLURM_JOB_QPU_TYPES | Seznam typů zdrojů oddělený čárkami (direct-access, qiskit-runtime-service a pasqal-cloud). Například direct-access,pasqal-cloud |