Zum Hauptinhalt springen

SPANK-Plugin Benutzerhandbuch

Das SPANK-Plugin für das Quantum Resource Management Interface (QRMI) wird verwendet, um den Zugriff auf Quantenressourcen in Benutzer-Jobs einer vom Slurm-Workload-Manager verwalteten Compute-Umgebung zu konfigurieren. Dies ist ein Leitfaden für Plugin-Benutzer zur Konfiguration der QPU-Ressourcenzuweisung beim Erstellen von Slurm-Jobs.

Die Slurm-QPU-Ressourcendefinitionen legen fest, welche physischen Ressourcen von Slurm-Jobs in High-Performance-Computing-Umgebungen (HPC) genutzt werden können. Der Quellcode von Benutzern sollte nach Möglichkeit unabhängig von spezifischen Backend-Instanzen und sogar von Backend-Typen sein. Dies hält den Quellcode portabel, während die QPU-Auswahlkriterien Teil der Ressourcendefinition sind (die als Konfiguration und nicht als Quellcode betrachtet wird).

QPU-Ressourcen bei der Job-Erstellung konfigurieren

vorsicht

Beachte, dass sich dieses Plugin aktiv in der Entwicklung befindet und die genaue Syntax sich ändern kann.

Administrator-Bereich

HPC-Administratoren konfigurieren das SPANK-Plugin, um festzulegen, welche physischen Ressourcen für Slurm-Jobs bereitgestellt werden können. Diese Konfiguration enthält alle Informationen, die Slurm-Jobs benötigen, um auf die physischen Ressourcen zuzugreifen, wie Endpunkte und Zugangsdaten.

Lies die qrmi_config.json.example für eine umfassende Beispielkonfiguration.

In slurm.conf können QPU-Ressourcen einigen oder allen Knoten zur Nutzung zugewiesen werden:

...
GresTypes=qpu,name
NodeName=node[1-5000] Gres=qpu,name:ibm_fez
...

Benutzer-Bereich

HPC-Benutzer übermitteln Jobs unter Nutzung von QPU-Ressourcen, die an Slurm-QPU-Ressourcen gebunden sind. Das Namensattribut verweist auf das, was der HPC-Administrator definiert hat. Während der Laufzeit eines Slurm-Jobs kann die Backend-Auswahl auf anderen Kriterien als einem vordefinierten Namen basieren, der auf ein bestimmtes Backend verweist (zum Beispiel anhand von Kapazitäts- und Fehlerrate-Qualifikatoren, um die Auswahl unter den definierten Backends einzugrenzen).

Je nach Backend-Typ können zusätzliche Umgebungsvariablen erforderlich sein.

SBATCH-Parameter verweisen auf eine oder mehrere QPU-Ressourcen, die der Anwendung als generische Ressourcen zugewiesen sind. Umgebungsvariablen, die über das Plugin bereitgestellt werden, liefern der Anwendung die notwendigen Informationen (siehe den Abschnitt HPC-Anwendungsbereich für Details).

#SBATCH --time=100
#SBATCH --output=<LOGS_PATH>
#SBATCH --gres=qpu:1
#SBATCH --qpu=ibm_fez
#SBATCH --... # other options

srun ...

Um mehr QPU-Ressourcen zu verwenden, füge weitere QPUs zum --qpu-Parameter hinzu:

#SBATCH --time=100
#SBATCH --output=<LOGS_PATH>
#SBATCH --gres=qpu:3
#SBATCH --qpu=my_local_qpu,ibm_fez,ibm_marrakesh
#SBATCH --... # other options

srun ...

HPC-Anwendungsbereich

HPC-Anwendungen nutzen die Slurm-QPU-Ressourcen, die dem Slurm-Job zugewiesen sind.

Umgebungsvariablen liefern weitere Details zur Verwendung durch die Anwendung; zum Beispiel listet SLURM_JOB_QPU_RESOURCES die Namen der Quantenressourcen auf (kommagetrennt, falls mehrere angegeben sind). Diese Variablen werden von QRMI verwendet. (Siehe die README-Dateien in den verschiedenen QRMI-Verzeichnissen (IBM, pasqal) für weitere Details.)

from qiskit import QuantumCircuit
# Using an IBM QRMI flavor:
from qrmi.primitives import QRMIService
from qrmi.primitives.ibm import SamplerV2, get_backend

# define circuit

circuit = QuantumCircuit(2)
circuit.h(0)
circuit.cx(0, 1)
circuit.measure_all()

# instantiate QRMI service and get quantum resource (we'll take the first one should there be several of them)
# inject credentials needed for accessing the service at this point
load_dotenv()
service = QRMIService()

resources = service.resources()
qrmi = resources[0]

# Generate transpiler target from backend configuration & properties and transpile
backend = get_backend(qrmi)
pm = generate_preset_pass_manager(
optimization_level=1,
backend=backend,
)

isa_circuit = pm.run(circuit)

# Run the circuit
options = {}
sampler = SamplerV2(qrmi, options=options)

job = sampler.run([(isa_circuit, isa_observable, param_values)])
print(f">>> Job ID: {job.job_id()}")

result = job.result()

if job.done():
pub_result = result[0]
print(f"Counts for the 'meas' output register: {pub_result.data.meas.get_counts()}")
elif job.cancelled():
print("Cancelled")
elif job.errored():
print(qrmi.task_logs(job.job_id()))

Siehe das Beispielverzeichnis für Beispieldateien.

Backend-Besonderheiten

IBM Direct Access API

Administrator-Bereich

Die Konfiguration von Direct Access API-Backends (HPC-Admin-Bereich) umfasst Endpunkte und Zugangsdaten für den Direct Access-Endpunkt und Authentifizierungsdienste sowie den S3-Endpunkt. Konkret umfasst dies:

  • IBM Cloud® API-Schlüssel zur Erstellung von Bearer-Tokens
  • Endpunkt der Direct Access API
  • S3-Bucket und Zugriffsdetails

Zugangsdaten sollten für HPC-Benutzer oder andere nicht privilegierte Benutzer auf dem System nicht sichtbar sein. Daher können sensible Daten in separaten Dateien abgelegt werden, die entsprechend zugriffsgeschützt werden können.

Beachte, dass Slurm vollen Zugriff auf das Backend hat. Dies hat mehrere Implikationen:

  • Das Slurm-Plugin ist für die Mandantenfähigkeit verantwortlich (es stellt sicher, dass Benutzer die Ergebnisse der Jobs anderer Benutzer nicht sehen)
  • Die HPC-Cluster-Seite ist dafür verantwortlich, Benutzer zu prüfen (wer auf die QPU zugreifen darf) und den entsprechenden Zugriff sicherzustellen
  • Die Kapazität und Priorität der QPU-Nutzung wird ausschließlich durch Slurm verwaltet; es gibt keine andere Benutzerplanung außerhalb von Slurm
Benutzer-Bereich

Ausführungs-Lanes werden dem HPC-Administrator oder dem Benutzer nicht direkt angezeigt. Stattdessen können während der Laufzeit zwei verschiedene Modi von HPC-Benutzern angegeben werden:

  • exclusive=true gibt an, dass keine anderen Jobs die Ressource gleichzeitig verwenden können. Ein Job im exklusiven Modus erhält alle Ausführungs-Lanes und kann nicht gleichzeitig mit einem nicht-exklusiven Job ausgeführt werden
  • exclusive=false erlaubt anderen Jobs die parallele Ausführung. In diesem Fall können so viele Jobs gleichzeitig laufen, wie es Ausführungs-Lanes gibt, und dem Job wird eine Lane zugewiesen

Qiskit Runtime Service

Benutzer-Bereich

Es wird erwartet, dass Benutzer zusätzliche Zugriffsdetails in Umgebungsvariablen angeben. Konkret umfasst dies Folgendes:

  • Qiskit Runtime-Serviceinstanz (CRN, Cloud Resource Name)
  • Endpunkt für Qiskit Runtime (sofern nicht automatisch aus dem CRN erkannt)
  • API-Schlüssel, der Zugriff auf den CRN hat
  • S3-Instanz, Bucket und Zugriffstoken/Zugangsdaten für Datenübertragungen

Diese Details bestimmen, unter welchem Benutzer und welcher Serviceinstanz der Qiskit Runtime-Dienst genutzt wird. Entsprechend berücksichtigt das IBM Quantum® Platform-Scheduling die Fähigkeiten des Benutzers und der Serviceinstanz bei der Planung.

Derzeit müssen Benutzer die obigen Details selbst angeben (kein gemeinsamer clusterweiter Quantenzugang).

Pasqal Cloud Services

HPC-Admin-Bereich

Für HPC-Admins ist keine spezifische Einrichtung für die PCS-Nutzung erforderlich.

HPC-Benutzer-Bereich

Es wird erwartet, dass Benutzer zusätzliche Zugriffsdetails in Umgebungsvariablen angeben. Derzeit umfasst dies Folgendes:

  • PCS-Ressource (FRESNEL, EMU_FRESNEL, EMU_MPS)
  • Autorisierungstoken