Vai al contenuto principale

Guida utente del plugin SPANK

Il plugin SPANK per l'interfaccia di gestione delle risorse quantistiche (QRMI) viene utilizzato per configurare l'accesso alle risorse quantistiche dai job utente in un ambiente di calcolo amministrato dal gestore del carico di lavoro Slurm. Questa è una guida per gli utenti del plugin per configurare l'allocazione delle risorse QPU durante la creazione di job Slurm.

Le definizioni delle risorse QPU di Slurm determinano quali risorse fisiche possono essere utilizzate dai job Slurm in ambienti di calcolo ad alte prestazioni (HPC). Il codice sorgente dell'utente dovrebbe essere indipendente da specifiche istanze di backend, e anche dai tipi di backend quando possibile. Questo mantiene il codice sorgente portabile, mentre i criteri di selezione del QPU fanno parte della definizione della risorsa (considerata configurazione e non codice sorgente).

Configurare le risorse QPU nella creazione di job​

attenzione

Nota che questo plugin è in fase di sviluppo attivo e la sintassi esatta è soggetta a modifiche.

Ambito dell'amministratore​

Gli amministratori HPC configurano il plugin SPANK per specificare quali risorse fisiche possono essere fornite ai job Slurm. Questa configurazione contiene tutte le informazioni necessarie affinché i job Slurm accedano alle risorse fisiche, come endpoint e credenziali di accesso.

Leggi il file qrmi_config.json.example per un esempio di configurazione completo.

In slurm.conf, le risorse QPU possono essere assegnate ad alcuni o a tutti i nodi per l'utilizzo:

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

Ambito dell'utente​

Gli utenti HPC inviano job utilizzando risorse QPU collegate alle risorse QPU di Slurm. L'attributo name fa riferimento a ciò che l'amministratore HPC ha definito. Durante il runtime di un job Slurm, la selezione del backend può basarsi su criteri diversi da un nome predefinito che fa riferimento a un backend specifico (ad esempio, tramite qualificatori di capacità e tasso di errore, per aiutare a selezionare tra l'insieme di backend definiti).

Potrebbero essere richieste variabili d'ambiente aggiuntive, a seconda del tipo di backend.

I parametri SBATCH punteranno a una o più risorse QPU assegnate all'applicazione come risorse generiche. Le variabili d'ambiente fornite tramite il plugin forniranno le informazioni necessarie all'applicazione (consulta la sezione Ambito dell'applicazione HPC per i dettagli).

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

srun ...

Per utilizzare più risorse QPU, aggiungi altri QPU al parametro --qpu:

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

srun ...

Ambito dell'applicazione HPC​

Le applicazioni HPC utilizzano le risorse QPU di Slurm assegnate al job Slurm.

Le variabili d'ambiente forniscono ulteriori dettagli per l'utilizzo da parte dell'applicazione; ad esempio, SLURM_JOB_QPU_RESOURCES elenca i nomi delle risorse quantistiche (separati da virgola se ne vengono forniti diversi). Queste variabili saranno utilizzate da QRMI. (Consulta i file README nelle varie directory QRMI (IBM, pasqal) per ulteriori dettagli.)

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()))

Consulta la directory degli esempi per i file di esempio.

Specifiche del backend​

IBM Direct Access API​

Ambito dell'amministratore​

La configurazione dei backend Direct Access API (ambito admin HPC) include endpoint e credenziali per l'endpoint Direct Access e i servizi di autenticazione, nonché per l'endpoint S3. In particolare, include:

  • Chiave API di IBM Cloud® per la creazione di bearer token
  • Endpoint della Direct Access API
  • Bucket S3 e dettagli di accesso

Le credenziali di accesso non devono essere visibili agli utenti HPC o ad altri utenti non privilegiati del sistema. Pertanto, i dati sensibili possono essere inseriti in file separati, che possono essere protetti dall'accesso di conseguenza.

Nota che Slurm ha pieno accesso al backend. Questo ha diverse implicazioni:

  • Il plugin Slurm è responsabile della multi-tenancy (garantire che gli utenti non vedano i risultati dei job di altri utenti)
  • Il lato del cluster HPC è responsabile della verifica degli utenti (chi è autorizzato ad accedere al QPU) e di garantire l'accesso appropriato
  • La capacità e la priorità dell'utilizzo del QPU sono gestite esclusivamente tramite Slurm; non è prevista nessun'altra pianificazione degli utenti al di fuori di Slurm
Ambito dell'utente​

Le corsie di esecuzione non sono esposte direttamente all'amministratore o all'utente HPC. Invece, durante il runtime, gli utenti HPC possono specificare due diverse modalità:

  • exclusive=true specifica che nessun altro job può utilizzare la risorsa contemporaneamente. Un job in modalità esclusiva ottiene tutte le corsie di esecuzione e non può essere eseguito contemporaneamente a un job non esclusivo
  • exclusive=false consente l'esecuzione di altri job in parallelo. In questo caso, possono esserci tanti job quante sono le corsie di esecuzione, tutti in esecuzione contemporaneamente, e al job viene assegnata una corsia

Qiskit Runtime Service​

Ambito dell'utente​

È previsto che gli utenti specifichino ulteriori dettagli di accesso nelle variabili d'ambiente. In particolare, include quanto segue:

  • Istanza del servizio Qiskit Runtime (CRN, Cloud Resource Name)
  • Endpoint per Qiskit Runtime (se non rilevato automaticamente dal CRN)
  • Chiave API, che ha accesso al CRN
  • Istanza S3, bucket e token/credenziali di accesso per i trasferimenti di dati

Questi dettagli determinano con quale utente e istanza del servizio viene utilizzato il servizio Qiskit Runtime. Di conseguenza, la pianificazione di IBM Quantum® Platform considera le capacità dell'utente e dell'istanza del servizio per la pianificazione.

Al momento, gli utenti devono fornire i dettagli sopra indicati (nessun accesso quantistico condiviso a livello di cluster).

Pasqal Cloud Services​

Ambito dell'admin HPC​

Non è richiesta nessuna configurazione specifica da parte degli admin HPC per l'utilizzo di PCS.

Ambito dell'utente HPC​

È previsto che gli utenti specifichino ulteriori dettagli di accesso nelle variabili d'ambiente. Al momento, include quanto segue:

  • Risorsa PCS da targetizzare (FRESNEL, EMU_FRESNEL, EMU_MPS)
  • Token di autorizzazione