Ghid de utilizare a plugin-ului SPANK
Plugin-ul SPANK pentru Interfața de Gestionare a Resurselor Cuantice (QRMI) este utilizat pentru a configura accesul la resursele cuantice din joburile utilizatorilor într-un mediu de calcul administrat de managerul de sarcini Slurm. Acesta este un ghid pentru utilizatorii plugin-ului, care explică cum să configureze alocarea resurselor QPU la crearea joburilor Slurm.
Definițiile resurselor QPU din Slurm determină ce resurse fizice pot fi utilizate de joburile Slurm în mediile de calcul de înaltă performanță (HPC). Codul sursă al utilizatorului ar trebui să fie agnostic față de instanțe specifice de Backend și chiar față de tipurile de Backend ori de câte ori este posibil. Aceasta menține codul sursă portabil, în timp ce criteriile de selecție a QPU fac parte din definiția resursei (care este considerată configurație, nu cod sursă).
Configurarea resurselor QPU la crearea joburilor
Reține că acest plugin este în curs de dezvoltare activă și sintaxa exactă poate fi modificată.
Domeniu administrator
Administratorii HPC configurează plugin-ul SPANK pentru a specifica ce resurse fizice pot fi puse la dispoziția joburilor Slurm. Această configurație conține toate informațiile necesare pentru ca joburile Slurm să poată accesa resursele fizice, cum ar fi endpoint-urile și acreditările de acces.
Citește qrmi_config.json.example pentru un exemplu complet de configurație.
În slurm.conf, resursele QPU pot fi atribuite unora sau tuturor nodurilor pentru utilizare:
...
GresTypes=qpu,name
NodeName=node[1-5000] Gres=qpu,name:ibm_fez
...
Domeniu utilizator
Utilizatorii HPC trimit joburi folosind resurse QPU legate de resursele QPU din Slurm. Atributul name face referire la ceea ce a definit administratorul HPC. În timpul rulării unui job Slurm, selecția Backend-ului poate fi bazată pe criterii altele decât un nume predefinit care se referă la un anumit Backend (de exemplu, pe baza capacității și a ratei de eroare, pentru a selecta dintr-un set definit de Backend-uri).
Este posibil să fie necesare variabile de mediu suplimentare, în funcție de tipul de Backend.
Parametrii SBATCH vor indica una sau mai multe resurse QPU atribuite aplicației ca resurse generice.
Variabilele de mediu furnizate prin plugin vor oferi informațiile necesare aplicației (consultă secțiunea Domeniu aplicație HPC pentru detalii).
#SBATCH --time=100
#SBATCH --output=<LOGS_PATH>
#SBATCH --gres=qpu:1
#SBATCH --qpu=ibm_fez
#SBATCH --... # other options
srun ...
Pentru a utiliza mai multe resurse QPU, adaugă mai multe QPU-uri la parametrul --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 ...
Domeniu aplicație HPC
Aplicațiile HPC folosesc resursele QPU din Slurm atribuite jobului Slurm.
Variabilele de mediu oferă mai multe detalii pentru utilizare de către aplicație; de exemplu, SLURM_JOB_QPU_RESOURCES listează numele resurselor cuantice (separate prin virgul ă dacă sunt furnizate mai multe).
Aceste variabile vor fi utilizate de QRMI. (Consultă fișierele README din diversele directoare QRMI (IBM, pasqal) pentru mai multe detalii.)
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()))
Consultă directorul de exemple pentru fișiere exemplu.
Specificuri Backend
API-ul IBM Direct Access
Domeniu administrator
Configurarea Backend-urilor API Direct Access (domeniu admin HPC) include endpoint-uri și acreditări pentru endpoint-ul Direct Access și serviciile de autentificare, precum și pentru endpoint-ul S3. Mai concret, aceasta include:
- Cheie API IBM Cloud® pentru crearea tokenurilor bearer
- Endpoint-ul API-ului Direct Access
- Bucket S3 și detalii de acces
Acreditările de acces nu ar trebui să fie vizibile pentru utilizatorii HPC sau alți utilizatori fără privilegii pe sistem. Prin urmare, datele sensibile pot fi plasate în fișiere separate, care pot fi protejate corespunzător prin control de acces.
Reține că Slurm are acces complet la Backend. Aceasta are mai multe implicații:
- Plugin-ul Slurm este responsabil pentru multi-tenancy (asigurarea că utilizatorii nu văd rezultatele joburilor altor utilizatori)
- Clusterul HPC este responsabil pentru verificarea utilizatorilor (cine are voie să acceseze QPU) și asigurarea accesului corespunzător
- Capacitatea și prioritatea utilizării QPU sunt gestionate exclusiv prin Slurm; nu există nicio altă planificare a utilizatorilor în afara Slurm
Domeniu utilizator
Benzile de execuție nu sunt expuse direct administratorului HPC sau utilizatorului. În schimb, în timpul rulării, pot exista două moduri diferite pe care utilizatorii HPC le pot specifica:
exclusive=truespecifică faptul că niciun alt job nu poate utiliza resursa în același timp. Un job în mod exclusiv primește toate benzile de execuție și nu poate rula în același timp cu un job non-exclusivexclusive=falsepermite altor joburi să ruleze în paralel. În acest caz, pot exista atâtea joburi câte benzi de execuție există, toate rulând în același timp, iar jobului îi este atribuită o singură bandă
Serviciul Qiskit Runtime
Domeniu utilizator
Se preconizează că utilizatorii vor specifica detalii suplimentare de acces în variabilele de mediu. Mai concret, aceasta include următoarele:
- Instanța serviciului Qiskit Runtime (CRN, Cloud Resource Name)
- Endpoint-ul pentru Qiskit Runtime (dacă nu este detectat automat din CRN)
- Cheia API, care are acces la CRN
- Instanța S3, bucket-ul și tokenul/acreditările de acces pentru transferuri de date
Aceste detalii determină sub ce utilizator și instanță de serviciu este utilizat serviciul Qiskit Runtime. În consecință, planificarea IBM Quantum® Platform ia în considerare capacitățile utilizatorului și ale instanței de serviciu pentru planificare.
În prezent, utilizatorii trebuie să furnizeze detaliile de mai sus (fără acces cuantic partajat la nivel de cluster).
Serviciile Cloud Pasqal
Domeniu admin HPC
Nu este necesară nicio configurare specifică din partea administratorilor HPC pentru utilizarea PCS.
Domeniu utilizator HPC
Se preconizează că utilizatorii vor specifica detalii suplimentare de acces în variabilele de mediu. În prezent, aceasta include următoarele:
- Resursa PCS țintă (FRESNEL, EMU_FRESNEL, EMU_MPS)
- Token de autorizare