SPANK-Plugin für QRMI
Das SPANK-Plugin für das Quantum Resource Management Interface (QRMI) wird verwendet, um den Zugriff auf Quantenressourcen aus Benutzerjobs in einer vom Slurm-Workload-Manager verwalteten Rechenumgebung zu konfigurieren. Es übernimmt die Anforderung und Freigabe des Zugriffs auf Quantenressourcen und setzt die notwendigen Umgebungsvariablen für die Ausführung von Quanten-Workloads. Die verfügbaren Quantenressourcen werden in einer qrmi_config.json-Datei angegeben, die von einem Administrator verwaltet wird.
Nach der Installation registriert dieses Plugin die folgende Option. Ein Slurm-Benutzer kann damit angeben, welche Quantenressourcen für das Slurm-Job-Skript verwendet werden sollen.
--qpu=names Comma separated list of QPU resources to use.
Zum Beispiel:
#!/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...
Voraussetzungen und Konfiguration
Die folgenden Werkzeuge werden für die Kompilierungsumgebung benötigt:
- Rust-Compiler 1.86 oder höher
- Ein C-Compiler: zum Beispiel GCC (gcc) unter Linux und Clang (clang-tools-extra) für unbekannte Rust-Targets/Cross-Compilations. QRMI und sein SPANK-Plugin sind mit einem Compiler kompatibel, der dem C11-Standard entspricht
- make/cmake (make/cmake RPM für RHEL-kompatible Betriebssysteme)
- openssl (openssl-devel RPM für RHEL-kompatible Betriebssysteme)
- zlib (zlib-devel RPM für RHEL-kompatible Betriebssysteme)
- Slurm-Header-Dateien (slurm/slurm.h usw.) müssen auf deinem Host verfügbar sein
Die Laufzeitumgebung erfordert:
- gcc (libgcc RPM für RHEL-kompatible Betriebssysteme)
- openssl (openssl-libs RPM für RHEL-kompatible Betriebssysteme)
- zlib (zlib RPM für RHEL-kompatible Betriebssysteme)
Verfügbare Quantenressourcen konfigurieren
Das Repository enthält eine Beispielkonfiguration (qrmi_config.json.example).
Das resources-Array enthält eine Reihe verfügbarer Quantenressourcen. Jede Quantenressourcen-Definition enthält Folgendes:
| Eigenschaft | Beschreibung |
|---|---|
| name | Name der Quantenressource (zum Beispiel Backend-Name) |
| type | Ressourcentyp (direct-access, qiskit-runtime-service und pasqal-cloud) |
| environment | Eine Reihe von Umgebungsvariablen für die Arbeit mit QRMI. Aktuelle Implementierungen setzen voraus, dass API-Endpunkt und Anmeldedaten über Umgebungsvariablen angegeben werden |
Wenn ein Benutzer mit der Option --qpu eine Ressource angibt, die nicht in der qrmi_config.json-Datei definiert ist, wird die Angabe ignoriert.
Wenn der Benutzer die für die Job-Ausführung notwendigen Umgebungsvariablen selbst setzt, müssen diese nicht in dieser Datei angegeben werden. In diesem Fall hat die Eigenschaft environment den Wert {}.
Wenn du eine QPU-Ressource mit dem Ressourcentyp qiskit-runtime-service verwendest, nutze ein Konto, das das Öffnen einer Session unterstützt, beispielsweise ein Premium-Plan-Konto.
Wenn du ein Konto verwendest, das das Öffnen einer Session nicht unterstützt, wie etwa ein Open-Plan-Konto, füge QRMI_IBM_QRS_SESSION_MODE="batch" als Workaround zur Liste der Umgebungsvariablen in qrmi_config.json hinzu.
Installation
Führe den Build mit make und cmake aus:
. ~/.cargo/env
mkdir build
cd build
cmake ..
make
Standardmäßig erwartet die CMakeLists.txt-Datei, dass sich die Slurm-Header-Datei (slurm.h) unter /usr/include/slurm befindet. Dies kann jedoch wie unten gezeigt angepasst werden.
SLURM_INCLUDE_DIRS=<directory containing slurm/slurm.h> cmake ..
Wenn der obige Build-Schritt erfolgreich war, wird eine Linux-Shared-Library namens spank_qrmi.so im Verzeichnis build/ erstellt.
Füge außerdem die folgende Zeile zur /etc/slurm/plugstack.conf auf den Knoten hinzu, auf denen dieses Plugin installiert ist (beachte, dass ein Administrator die qrmi_config.json-Datei erstellen und den Pfad als Plugin-Argument angeben muss, wie im Folgenden gezeigt):
optional /usr/lib64/slurm/spank_qrmi.so /etc/slurm/qrmi_config.json
Du kannst die verfügbaren optionalen Argumente verwenden, um dem Slurm-Prozess, in dem das SPANK-Plugin geladen wird, Umgebungsvariablen hinzuzufügen. Das Format zur Angabe von Umgebungsvariablen ist wie folgt definiert.
--env:{variable name}={value}
Wenn du beispielsweise über einen HTTP-Proxy mit Quantenressourcen interagierst, sind die Umgebungsvariablen http_proxy, https_proxy und no_proxy erforderlich. Diese können wie unten gezeigt hinzugefügt werden.
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
Für den Allocator-Knoten musst du den Pfad zu qrmi_config.json nicht angeben, wie im Folgenden gezeigt.
optional /usr/lib64/slurm/spank_qrmi.so
Die folgende Tabelle zeigt, auf welche Slurm-Kontextknoten diese Dateien kopiert werden müssen. Weitere Details zu den einzelnen Kontexten findest du in der Dokumentation zum SPANK-Plugin.
| Dateien | Slurm-Kontexte |
|---|---|
plugstack.conf | local, remote, allocator, slurmd und job_script |
qrmi_config.json | remote (Rechenknoten) |
spank_qrmi.so | allocator und remote (Login-Knoten und Rechenknoten) |
Sobald plugstack.conf aktualisiert wurde, werden SPANK-Plugins beim nächsten Job-Start zur Laufzeit geladen. Administratoren müssen den Slurm-Cluster daher nicht neu starten.
Nach Abschluss der Installation solltest du die Option --qpu=names in der sbatch-Hilfemeldung finden.
Options provided by plugins:
--qpu=names Comma-separated list of QPU resources to use.
Protokollierung
Dieses Plugin verwendet den Slurm-Logger für die Protokollierung. Lognachrichten dieses Plugins sind in /var/log/slurm/slurmd.log zu finden.
[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
Du kannst das QRMI-Laufzeit-Log aktivieren, indem du die folgenden srun-Argumente angibst.
sbatch/srun-Option | Slurm-Log-Level (SRUN_DEBUG) | QRMI-Log-Level (RUST_LOG) |
|---|---|---|
| (Standard) | 3 | info |
--quiet | 2 | error |
--verbose | 4 | debug |
-vv oder mehr | 5 | trace |
Überlegungen bei mehreren QPUs
Zur Laufzeit ist jede QRMI-Instanz mit einer einzelnen QPU-Ressource verknüpft. Um die Verwendung mehrerer Quantenressourcen innerhalb eines einzelnen Job-Skripts zu ermöglichen, setzt dieses Plugin Umgebungsvariablen mit dem Ressourcenname als Präfix. Wenn beispielsweise --qpu=qpu1,qpu2 angegeben wird, werden die Umgebungsvariablen wie folgt gesetzt:
qpu1_QRMI_IBM_DA_ENDPOINT=http://test1
qpu2_QRMI_IBM_DA_ENDPOINT=http://test2
Dadurch wird sichergestellt, dass jede QRMI-Instanz während der Ausführung des Slurm-Jobs mit den für ihre jeweilige Ressource festgelegten Konfigurationsparametern arbeitet.
Die obigen Umgebungsvariablen-Einstellungen werden nur auf Jobs angewendet, bei denen die Option --qpu=names angegeben ist.
Dieses Plugin setzt außerdem die folgenden zwei Umgebungsvariablen, auf die der QRMI-Primitives-Code verweist.
| Umgebungsvariable | Beschreibung |
|---|---|
SLURM_JOB_QPU_RESOURCES | Kommagetrennte Liste der zur Laufzeit zu verwendenden QPU-Ressourcen. Nicht dokumentierte Ressourcen werden herausgefiltert. Zum Beispiel: qpu1,qpu2 |
SLURM_JOB_QPU_TYPES | Kommagetrennte Liste der Ressourcentypen (direct-access, qiskit-runtime-service und pasqal-cloud). Zum Beispiel: direct-access,pasqal-cloud |