Pular para o conteúdo principal

Plugin SPANK para QRMI

O plugin SPANK para a Interface de Gerenciamento de Recursos Quânticos (QRMI) é usado para configurar o acesso a recursos quânticos a partir de jobs de usuários em um ambiente de computação administrado pelo gerenciador de cargas de trabalho Slurm. Ele lida com a aquisição e liberação do acesso a recursos quânticos e define as variáveis de ambiente necessárias para executar cargas de trabalho quânticas. Os recursos quânticos disponíveis são especificados em um arquivo qrmi_config.json, que é gerenciado por um administrador.

Após a instalação, este plugin registra a seguinte opção. Um usuário do Slurm pode especificar quais recursos quânticos são utilizados no script de job do Slurm.

--qpu=names             Comma separated list of QPU resources to use.

Por exemplo,

#!/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...

Requisitos e configuração

As seguintes ferramentas são necessárias para o ambiente de compilação:

  • Compilador Rust 1.86 ou superior
  • Um compilador C: por exemplo, GCC (gcc) no Linux e Clang (clang-tools-extra) para alvos desconhecidos do Rust/compilações cruzadas. O QRMI e seu plugin SPANK são compatíveis com compiladores que seguem o padrão C11
  • make/cmake (RPM make/cmake para SO compatível com RHEL)
  • openssl (RPM openssl-devel para SO compatível com RHEL)
  • zlib (RPM zlib-devel para SO compatível com RHEL)
  • Os arquivos de cabeçalho do Slurm (slurm/slurm.h e outros) devem estar disponíveis no seu host

O ambiente de execução requer:

  • gcc (RPM libgcc para SO compatível com RHEL)
  • openssl (RPM openssl-libs para SO compatível com RHEL)
  • zlib (RPM zlib para SO compatível com RHEL)

Configurar recursos quânticos disponíveis

O repositório contém um exemplo de configuração (qrmi_config.json.example).

O array resources contém um conjunto de recursos quânticos disponíveis. Cada definição de recurso quântico contém o seguinte:

PropriedadeDescrição
nameNome do recurso quântico (por exemplo, nome do backend)
typeTipo de recurso (direct-access, qiskit-runtime-service e pasqal-cloud)
environmentUm conjunto de variáveis de ambiente para trabalhar com o QRMI. As implementações atuais assumem que o endpoint de API e as credenciais são especificados por meio da definição de variáveis de ambiente

Se um usuário especificar um recurso com a opção --qpu que não está definido no arquivo qrmi_config.json, a especificação será ignorada.

Se o usuário definir por conta própria as variáveis de ambiente necessárias para a execução do job, não é necessário especificá-las neste arquivo. Nesse caso, a propriedade environment será {}.

nota

Se você estiver usando um recurso QPU com o tipo de recurso qiskit-runtime-service, use uma conta que suporte abertura de sessão, como uma conta do Plano Premium.

Se você estiver usando uma conta que não suporta abertura de sessão, como uma conta do Plano Open, adicione QRMI_IBM_QRS_SESSION_MODE="batch" à lista de variáveis de ambiente no qrmi_config.json como alternativa.

Instalação

Execute o build usando make e cmake:

. ~/.cargo/env
mkdir build
cd build
cmake ..
make

Por padrão, o arquivo CMakeLists.txt espera que o arquivo de cabeçalho do Slurm (slurm.h) esteja localizado em /usr/include/slurm, mas isso pode ser personalizado conforme mostrado abaixo.

SLURM_INCLUDE_DIRS=<directory containing slurm/slurm.h> cmake ..

Se o passo de build acima for bem-sucedido, uma biblioteca compartilhada Linux chamada spank_qrmi.so será criada no diretório build/.

Além disso, adicione a seguinte linha ao /etc/slurm/plugstack.conf nos nós onde este plugin está instalado (observe que um administrador precisa criar o arquivo qrmi_config.json e especificar o caminho como argumento do plugin, conforme mostrado a seguir):

optional /usr/lib64/slurm/spank_qrmi.so /etc/slurm/qrmi_config.json
nota

Você pode usar os argumentos opcionais disponíveis para adicionar variáveis de ambiente ao processo Slurm onde o plugin SPANK é carregado. O formato para especificar variáveis de ambiente é definido da seguinte forma.

--env:{variable name}={value}

Por exemplo, ao interagir com recursos quânticos por meio de um proxy HTTP, as variáveis de ambiente http_proxy, https_proxy e no_proxy são necessárias. Elas podem ser adicionadas conforme mostrado abaixo.

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

Para o nó alocador, você não precisa especificar o caminho para qrmi_config.json, conforme mostrado a seguir.

optional /usr/lib64/slurm/spank_qrmi.so

A tabela a seguir mostra para quais nós de contexto do Slurm esses arquivos devem ser copiados. Para mais detalhes sobre cada contexto, consulte a documentação do plugin SPANK.

ArquivosContextos Slurm
plugstack.conflocal, remote, allocator, slurmd e job_script
qrmi_config.jsonremote (Nós de computação)
spank_qrmi.soallocator e remote (Nós de login e nós de computação)
nota

Após a atualização do plugstack.conf, os plugins SPANK serão carregados em tempo de execução durante o próximo lançamento de job, o que significa que os administradores não precisam reiniciar o cluster Slurm.

Após concluir a instalação, você deve encontrar a opção --qpu=names na mensagem de ajuda do sbatch.

Options provided by plugins:
--qpu=names Comma-separated list of QPU resources to use.

Logging

Este plugin usa o logger do Slurm para registro de logs. As mensagens de log deste plugin podem ser encontradas em /var/log/slurm/slurmd.log.

[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

Você pode habilitar o log de execução do QRMI especificando os seguintes argumentos do srun.

Opção sbatch/srunNível de log do Slurm (SRUN_DEBUG)Nível de log do QRMI (RUST_LOG)
(padrão)3info
--quiet2error
--verbose4debug
-vv ou mais5trace

Considerações para múltiplos QPUs

Em tempo de execução, cada instância QRMI está vinculada a um único recurso QPU. Para permitir o uso de múltiplos recursos quânticos dentro de um único script de job, este plugin define variáveis de ambiente com o nome do recurso como prefixo. Por exemplo, se --qpu=qpu1,qpu2 for especificado, as variáveis de ambiente serão definidas da seguinte forma:

qpu1_QRMI_IBM_DA_ENDPOINT=http://test1
qpu2_QRMI_IBM_DA_ENDPOINT=http://test2

Isso garante que cada instância QRMI opere com os parâmetros de configuração definidos para seu respectivo recurso durante a execução do job Slurm.

As configurações de variáveis de ambiente acima são aplicadas apenas a jobs onde a opção --qpu=names é especificada.

Este plugin também define as duas variáveis de ambiente a seguir, que são referenciadas pelo código primitivo do QRMI.

Variável de ambienteDescrição
SLURM_JOB_QPU_RESOURCESLista separada por vírgulas de recursos QPU a serem usados em tempo de execução. Recursos não documentados serão filtrados. Por exemplo, qpu1,qpu2
SLURM_JOB_QPU_TYPESLista separada por vírgulas do tipo de recurso (direct-access, qiskit-runtime-service e pasqal-cloud). Por exemplo, direct-access,pasqal-cloud