Guía de usuario del plugin SPANK
El plugin SPANK para la Interfaz de Gestión de Recursos Cuánticos (QRMI) se utiliza para configurar el acceso a recursos cuánticos desde trabajos de usuario en un entorno de cómputo administrado por el gestor de cargas de trabajo Slurm. Esta es una guía para que los usuarios del plugin configuren la asignación de recursos QPU al crear trabajos de Slurm.
Las definiciones de recursos QPU de Slurm determinan qué recursos físicos pueden utilizar los trabajos de Slurm en entornos de cómputo de alto rendimiento (HPC). El código fuente del usuario debe ser agnóstico a instancias de backend específicas, e incluso a tipos de backend siempre que sea posible. Esto mantiene el código fuente portable, mientras que los criterios de selección de QPU forman parte de la definición de recursos (que se considera configuración en lugar de código fuente).
Configurar recursos QPU en la creación de trabajos
Ten en cuenta que este plugin está en desarrollo activo y la sintaxis exacta puede cambiar.
Ámbito del administrador
Los administradores de HPC configuran el plugin SPANK para especificar qué recursos físicos pueden proporcionarse a los trabajos de Slurm. Esta configuración contiene toda la información necesaria para que los trabajos de Slurm accedan a los recursos físicos, como endpoints y credenciales de acceso.
Lee el archivo qrmi_config.json.example para ver un ejemplo de configuración completo.
En slurm.conf, los recursos QPU pueden asignarse a algunos o todos los nodos para su uso:
...
GresTypes=qpu,name
NodeName=node[1-5000] Gres=qpu,name:ibm_fez
...
Ámbito del usuario
Los usuarios de HPC envían trabajos usando recursos QPU vinculados a recursos QPU de Slurm. El atributo de nombre hace referencia a lo que el administrador de HPC ha definido. Durante la ejecución de un trabajo de Slurm, la selección del backend puede basarse en criterios distintos a un nombre predefinido que apunte a un backend específico (por ejemplo, mediante calificadores de capacidad y tasa de error, para ayudar a reducir el conjunto de backends definidos).
Puede que se requieran variables de entorno adicionales, dependiendo del tipo de backend.
Los parámetros de SBATCH apuntarán a uno o más recursos QPU asignados a la aplicación como recursos genéricos.
Las variables de entorno proporcionadas a través del plugin suministrarán la información necesaria a la aplicación (consulta la sección Ámbito de la aplicación HPC para más detalles).
#SBATCH --time=100
#SBATCH --output=<LOGS_PATH>
#SBATCH --gres=qpu:1
#SBATCH --qpu=ibm_fez
#SBATCH --... # other options
srun ...
Para usar más recursos QPU, añade más QPUs al parámetro --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 ...
Ámbito de la aplicación HPC
Las aplicaciones HPC utilizan los recursos QPU de Slurm asignados al trabajo de Slurm.
Las variables de entorno proporcionan más detalles para uso de la aplicación; por ejemplo, SLURM_JOB_QPU_RESOURCES lista los nombres de los recursos cuánticos (separados por comas si se proporcionan varios).
Estas variables serán usadas por QRMI. (Consulta los archivos README en los distintos directorios de QRMI (IBM, pasqal) para más detalles.)
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 el directorio de ejemplos para ver archivos de ejemplo.
Especificidades del backend
IBM Direct Access API
Ámbito del administrador
La configuración de backends de la Direct Access API (ámbito del administrador de HPC) incluye endpoints y credenciales para el endpoint de Direct Access y los servicios de autenticación, así como para el endpoint de S3. En concreto, esto incluye:
- Clave de API de IBM Cloud® para crear tokens bearer
- Endpoint de la Direct Access API
- Bucket de S3 y detalles de acceso
Las credenciales de acceso no deben ser visibles para los usuarios de HPC ni para otros usuarios sin privilegios en el sistema. Por ello, los datos sensibles pueden almacenarse en archivos separados, que pueden protegerse con los permisos de acceso adecuados.
Ten en cuenta que Slurm tiene acceso completo al backend. Esto tiene varias implicaciones:
- El plugin de Slurm es responsable de la multi-tenencia (garantizar que los usuarios no vean los resultados de los trabajos de otros usuarios)
- El lado del clúster HPC es responsable de verificar a los usuarios (quién tiene permitido acceder a la QPU) y garantizar el acceso correspondiente
- La capacidad y prioridad del uso de la QPU se gestionan exclusivamente a través de Slurm; no hay otro mecanismo de planificación de usuarios fuera de Slurm
Ámbito del usuario
Los carriles de ejecución no están expuestos directamente al administrador de HPC ni al usuario. En cambio, durante la ejecución, los usuarios de HPC pueden especificar dos modos distintos:
exclusive=trueespecifica que ningún otro trabajo puede usar el recurso al mismo tiempo. Un trabajo en modo exclusivo obtiene todos los carriles de ejecución y no puede ejecutarse al mismo tiempo que un trabajo no exclusivoexclusive=falsepermite que otros trabajos se ejecuten en paralelo. En este caso, puede haber tantos trabajos como carriles de ejecución haya, todos ejecutándose al mismo tiempo, y al trabajo se le asigna un carril
Qiskit Runtime Service
Ámbito del usuario
Se espera que los usuarios especifiquen detalles de acceso adicionales en variables de entorno. En concreto, esto incluye lo siguiente:
- Instancia del servicio Qiskit Runtime (CRN, Cloud Resource Name)
- Endpoint para Qiskit Runtime (a menos que se detecte automáticamente a partir del CRN)
- Clave de API con acceso al CRN
- Instancia de S3, bucket y token/credenciales de acceso para transferencias de datos
Estos detalles determinan bajo qué usuario e instancia de servicio se utiliza el servicio Qiskit Runtime. En consecuencia, la planificación de IBM Quantum® Platform considera las capacidades del usuario y de la instancia de servicio para la planificación.
En este momento, los usuarios deben proporcionar los detalles anteriores (no hay acceso cuántico compartido a nivel de clúster).
Pasqal Cloud Services
Ámbito del administrador de HPC
No se requiere ninguna configuración específica por parte de los administradores de HPC para el uso de PCS.
Ámbito del usuario de HPC
Se espera que los usuarios especifiquen detalles de acceso adicionales en variables de entorno. Actualmente, esto incluye lo siguiente:
- Recurso PCS a usar como destino (FRESNEL, EMU_FRESNEL, EMU_MPS)
- Token de autorización