Guia do usuário do plugin SPANK
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 computacional administrado pelo gerenciador de cargas de trabalho Slurm. Este é um guia para usuários do plugin configurarem a alocação de recursos de QPU ao criar jobs Slurm.
As definições de recursos de QPU do Slurm determinam quais recursos físicos podem ser usados por jobs Slurm em ambientes de computação de alto desempenho (HPC). O código-fonte do usuário deve ser agnóstico em relação a instâncias de backend específicas e, sempre que possível, também em relação a tipos de backend. Isso mantém o código-fonte portável, enquanto os critérios de seleção de QPU fazem parte da definição de recursos (o que é considerado configuração, e não código-fonte).
Configurar recursos de QPU na criação de jobs
Observe que este plugin está em desenvolvimento ativo e a sintaxe exata está sujeita a alterações.
Escopo do administrador
Os administradores de HPC configuram o plugin SPANK para especificar quais recursos físicos podem ser fornecidos aos jobs Slurm. Essa configuração contém todas as informações necessárias para que os jobs Slurm acessem os recursos físicos, como endpoints e credenciais de acesso.
Leia o qrmi_config.json.example para um exemplo de configuração completo.
Em slurm.conf, os recursos de QPU podem ser atribuídos a alguns ou todos os nós para uso:
...
GresTypes=qpu,name
NodeName=node[1-5000] Gres=qpu,name:ibm_fez
...
Escopo do usuário
Os usuários de HPC enviam jobs usando recursos de QPU que estão vinculados aos recursos de QPU do Slurm. O atributo de nome faz referência ao que o administrador de HPC definiu. Durante a execução de um job Slurm, a seleção de backend pode ser baseada em critérios diferentes de um nome predefinido que se refere a um backend específico (por exemplo, por qualificadores de capacidade e taxa de erros, para ajudar a selecionar entre o conjunto definido de backends).
Podem ser necessárias variáveis de ambiente adicionais, dependendo do tipo de backend.
Os parâmetros SBATCH apontarão para um ou mais recursos de QPU atribuídos à aplicação como recursos genéricos.
As variáveis de ambiente fornecidas pelo plugin fornecerão as informações necessárias para a aplicação (consulte a seção Escopo da aplicação HPC para detalhes).
#SBATCH --time=100
#SBATCH --output=<LOGS_PATH>
#SBATCH --gres=qpu:1
#SBATCH --qpu=ibm_fez
#SBATCH --... # other options
srun ...
Para usar mais recursos de QPU, adicione mais QPUs ao 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 ...
Escopo da aplicação HPC
As aplicações HPC usam os recursos de QPU do Slurm atribuídos ao job Slurm.
As variáveis de ambiente fornecem mais detalhes para uso pela aplicação; por exemplo, SLURM_JOB_QPU_RESOURCES lista os nomes dos recursos quânticos (separados por vírgula se vários forem fornecidos).
Essas variáveis serão usadas pelo QRMI. (Consulte os arquivos README nos vários diretórios do QRMI (IBM, pasqal) para mais detalhes.)
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()))
Consulte o diretório de exemplos para arquivos de exemplo.
Especificidades de backend
API de Acesso Direto IBM
Escopo do administrador
A configuração de backends da API de Acesso Direto (escopo de administrador HPC) inclui endpoints e credenciais para o endpoint de Acesso Direto e os serviços de autenticação, bem como para o endpoint S3. Especificamente, isso inclui:
- Chave de API do IBM Cloud® para criação de tokens de portador
- Endpoint da API de Acesso Direto
- Bucket S3 e detalhes de acesso
As credenciais de acesso não devem ser visíveis para usuários de HPC ou outros usuários sem privilégios no sistema. Portanto, dados sensíveis podem ser armazenados em arquivos separados, que podem ser protegidos por controle de acesso adequado.
Observe que o Slurm tem acesso total ao backend. Isso tem várias implicações:
- O plugin Slurm é responsável pela multilocação (garantindo que os usuários não vejam os resultados dos jobs de outros usuários)
- O lado do cluster HPC é responsável pela triagem de usuários (quem tem permissão para acessar a QPU) e por garantir o acesso adequado
- A capacidade e a prioridade do uso da QPU são gerenciadas exclusivamente pelo Slurm; não há outro agendamento de usuários fora do Slurm
Escopo do usuário
As lanes de execução não são expostas diretamente ao administrador ou ao usuário de HPC. Em vez disso, durante a execução, os usuários de HPC podem especificar dois modos diferentes:
exclusive=trueespecifica que nenhum outro job pode usar o recurso ao mesmo tempo. Um job em modo exclusivo obtém todas as lanes de execução e não pode ser executado ao mesmo tempo que um job não exclusivoexclusive=falsepermite que outros jobs sejam executados em paralelo. Nesse caso, pode haver tantos jobs quantas forem as lanes de execução, todos rodando ao mesmo tempo, e o job recebe uma lane
Qiskit Runtime Service
Escopo do usuário
Espera-se que os usuários especifiquem detalhes de acesso adicionais em variáveis de ambiente. Especificamente, isso inclui o seguinte:
- Instância do serviço Qiskit Runtime (CRN, Cloud Resource Name)
- Endpoint do Qiskit Runtime (a menos que seja detectado automaticamente a partir do CRN)
- Chave de API com acesso ao CRN
- Instância S3, bucket e token/credenciais de acesso para transferências de dados
Esses detalhes determinam sob qual usuário e instância de serviço o Qiskit Runtime Service é utilizado. Consequentemente, o agendamento do IBM Quantum® Platform considera as capacidades do usuário e da instância de serviço para o agendamento.
No momento, os usuários devem fornecer os detalhes acima (sem acesso quântico compartilhado em todo o cluster).
Pasqal Cloud Services
Escopo do administrador HPC
Não há configuração específica exigida dos administradores de HPC para o uso do PCS.
Escopo do usuário HPC
Espera-se que os usuários especifiquem detalhes de acesso adicionais em variáveis de ambiente. Atualmente, isso inclui o seguinte:
- Recurso PCS a ser utilizado (FRESNEL, EMU_FRESNEL, EMU_MPS)
- Token de autorização