Plugin SPANK per QRMI
Il plugin SPANK per la Quantum Resource Management Interface (QRMI) viene utilizzato per configurare l'accesso alle risorse quantistiche dai job utente in un ambiente di calcolo amministrato dal workload manager Slurm. Gestisce l'acquisizione e il rilascio dell'accesso alle risorse quantistiche e imposta le variabili d'ambiente necessarie per l'esecuzione dei carichi di lavoro quantistici. Le risorse quantistiche disponibili sono specificate in un file qrmi_config.json, gestito da un amministratore.
Una volta installato, questo plugin registra la seguente opzione. Un utente Slurm può specificare quali risorse quantistiche vengono utilizzate per lo script di job Slurm.
--qpu=names Comma separated list of QPU resources to use.
Ad esempio:
#!/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...
Requisiti e configurazione​
I seguenti strumenti sono necessari per l'ambiente di compilazione:
- Compilatore Rust 1.86 o superiore
- Un compilatore C: ad esempio, GCC (gcc) su Linux e Clang (clang-tools-extra) per target sconosciuti di Rust/compilazioni cross. QRMI e il suo plugin SPANK sono compatibili con un compilatore conforme allo standard C11
- make/cmake (RPM make/cmake per OS compatibili con RHEL)
- openssl (RPM openssl-devel per OS compatibili con RHEL)
- zlib (RPM zlib-devel per OS compatibili con RHEL)
- I file header di Slurm (slurm/slurm.h e così via) devono essere disponibili sul tuo host
L'ambiente di runtime richiede:
- gcc (RPM libgcc per OS compatibili con RHEL)
- openssl (RPM openssl-libs per OS compatibili con RHEL)
- zlib (RPM zlib per OS compatibili con RHEL)
Configurare le risorse quantistiche disponibili​
Il repository contiene una configurazione d'esempio (qrmi_config.json.example).
L'array resources contiene un insieme di risorse quantistiche disponibili. Ogni definizione di risorsa quantistica comprende i seguenti campi:
| Proprietà | Descrizione |
|---|---|
| name | Nome della risorsa quantistica (ad esempio, il nome del backend) |
| type | Tipo di risorsa (direct-access, qiskit-runtime-service e pasqal-cloud) |
| environment | Un insieme di variabili d'ambiente per lavorare con QRMI. Le implementazioni attuali assumono che l'endpoint API e le credenziali siano specificati tramite variabili d'ambiente |
Se un utente specifica una risorsa con l'opzione --qpu che non è definita nel file qrmi_config.json, la specifica verrà ignorata.
Se l'utente imposta autonomamente le variabili d'ambiente necessarie per l'esecuzione del job, non è necessario specificarle in questo file. In tal caso, la proprietà environment sarà {}.
Se stai utilizzando una risorsa QPU con il tipo di risorsa qiskit-runtime-service, usa un account che supporti l'apertura di una sessione, come un account con piano Premium.
Se stai utilizzando un account che non supporta l'apertura di una sessione, come un account con piano Open, aggiungi QRMI_IBM_QRS_SESSION_MODE="batch" all'elenco delle variabili d'ambiente in qrmi_config.json come soluzione alternativa.
Installazione​
Esegui la build utilizzando make e cmake:
. ~/.cargo/env
mkdir build
cd build
cmake ..
make
Per impostazione predefinita, il file CMakeLists.txt si aspetta che il file header di Slurm (slurm.h) si trovi in /usr/include/slurm, ma questo può essere personalizzato come mostrato di seguito.
SLURM_INCLUDE_DIRS=<directory containing slurm/slurm.h> cmake ..
Se il passaggio di build precedente va a buon fine, verrà creata una libreria condivisa Linux chiamata spank_qrmi.so nella directory build/.
Inoltre, aggiungi la seguente riga al file /etc/slurm/plugstack.conf sui nodi in cui è installato questo plugin (nota che un amministratore deve creare il file qrmi_config.json e specificare il percorso come argomento del plugin, come mostrato di seguito):
optional /usr/lib64/slurm/spank_qrmi.so /etc/slurm/qrmi_config.json
Puoi utilizzare gli argomenti opzionali disponibili per aggiungere variabili d'ambiente al processo Slurm in cui viene caricato il plugin SPANK. Il formato per specificare le variabili d'ambiente è definito come segue.
--env:{variable name}={value}
Ad esempio, quando si interagisce con risorse quantistiche tramite un proxy HTTP, sono necessarie le variabili d'ambiente http_proxy, https_proxy e no_proxy. Queste possono essere aggiunte come mostrato di seguito.
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
Per il nodo allocatore, non è necessario specificare il percorso di qrmi_config.json, come mostrato di seguito.
optional /usr/lib64/slurm/spank_qrmi.so
La tabella seguente indica in quali nodi del contesto Slurm questi file devono essere copiati. Per maggiori dettagli su ciascun contesto, consulta la documentazione del plugin SPANK.
| File | Contesti Slurm |
|---|---|
plugstack.conf | local, remote, allocator, slurmd e job_script |
qrmi_config.json | remote (nodi di calcolo) |
spank_qrmi.so | allocator e remote (nodi di login e nodi di calcolo) |
Una volta aggiornato plugstack.conf, i plugin SPANK verranno caricati in fase di runtime al prossimo avvio del job, il che significa che gli amministratori non devono riavviare il cluster Slurm.
Una volta completata l'installazione, dovresti trovare l'opzione --qpu=names nel messaggio di aiuto di sbatch.
Options provided by plugins:
--qpu=names Comma-separated list of QPU resources to use.
Log​
Questo plugin utilizza il logger di Slurm per la registrazione. I messaggi di log di questo plugin si trovano in /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
Puoi abilitare il log di runtime di QRMI specificando i seguenti argomenti srun.
Opzione sbatch/srun | Livello di log Slurm (SRUN_DEBUG) | Livello di log QRMI (RUST_LOG) |
|---|---|---|
| (predefinito) | 3 | info |
--quiet | 2 | error |
--verbose | 4 | debug |
-vv o superiore | 5 | trace |
Considerazioni per più QPU​
In fase di runtime, ogni istanza QRMI è collegata a una singola risorsa QPU. Per abilitare l'uso di più risorse quantistiche all'interno di un singolo script di job, questo plugin imposta le variabili d'ambiente con il nome della risorsa come prefisso. Ad esempio, se viene specificato --qpu=qpu1,qpu2, le variabili d'ambiente verranno impostate come segue:
qpu1_QRMI_IBM_DA_ENDPOINT=http://test1
qpu2_QRMI_IBM_DA_ENDPOINT=http://test2
Questo garantisce che ogni istanza QRMI operi con i parametri di configurazione impostati per la rispettiva risorsa durante l'esecuzione del job Slurm.
Le impostazioni delle variabili d'ambiente di cui sopra vengono applicate solo ai job in cui è specificata l'opzione --qpu=names.
Questo plugin imposta inoltre le seguenti due variabili d'ambiente, a cui fa riferimento il codice delle primitive QRMI.
| Variabile d'ambiente | Descrizione |
|---|---|
SLURM_JOB_QPU_RESOURCES | Elenco separato da virgole delle risorse QPU da utilizzare in fase di runtime. Le risorse non documentate verranno filtrate. Ad esempio, qpu1,qpu2 |
SLURM_JOB_QPU_TYPES | Elenco separato da virgole del tipo di risorsa (direct-access, qiskit-runtime-service e pasqal-cloud). Ad esempio, direct-access,pasqal-cloud |