Zum Hauptinhalt springen

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:

EigenschaftBeschreibung
nameName der Quantenressource (zum Beispiel Backend-Name)
typeRessourcentyp (direct-access, qiskit-runtime-service und pasqal-cloud)
environmentEine 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 {}.

hinweis

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
hinweis

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.

DateienSlurm-Kontexte
plugstack.conflocal, remote, allocator, slurmd und job_script
qrmi_config.jsonremote (Rechenknoten)
spank_qrmi.soallocator und remote (Login-Knoten und Rechenknoten)
hinweis

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-OptionSlurm-Log-Level (SRUN_DEBUG)QRMI-Log-Level (RUST_LOG)
(Standard)3info
--quiet2error
--verbose4debug
-vv oder mehr5trace

Ü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.

UmgebungsvariableBeschreibung
SLURM_JOB_QPU_RESOURCESKommagetrennte Liste der zur Laufzeit zu verwendenden QPU-Ressourcen. Nicht dokumentierte Ressourcen werden herausgefiltert. Zum Beispiel: qpu1,qpu2
SLURM_JOB_QPU_TYPESKommagetrennte Liste der Ressourcentypen (direct-access, qiskit-runtime-service und pasqal-cloud). Zum Beispiel: direct-access,pasqal-cloud