Przejdź do głównej treści

Wtyczka SPANK dla QRMI

Wtyczka SPANK dla Interfejsu zarządzania zasobami kwantowymi (QRMI) służy do konfigurowania dostępu do zasobów kwantowych z zadań użytkownika w środowisku obliczeniowym administrowanym przez menedżera obciążeń Slurm. Obsługuje pozyskiwanie i zwalnianie dostępu do zasobów kwantowych oraz ustawia niezbędne zmienne środowiskowe do wykonywania obciążeń kwantowych. Dostępne zasoby kwantowe są określone w pliku qrmi_config.json, którym zarządza administrator.

Po zainstalowaniu wtyczka rejestruje następującą opcję. Użytkownik Slurm może określić, które zasoby kwantowe są używane w skrypcie zadania Slurm.

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

Na przykład:

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

Wymagania i konfiguracja

Do środowiska kompilacji wymagane są następujące narzędzia:

  • Kompilator Rust 1.86 lub nowszy
  • Kompilator C: na przykład GCC (gcc) dla Linuksa i Clang (clang-tools-extra) dla nieznanych celów Rust/kompilacji skrośnej. QRMI i jego wtyczka SPANK są zgodne z kompilatorem spełniającym standard C11
  • make/cmake (pakiet RPM make/cmake dla systemów kompatybilnych z RHEL)
  • openssl (pakiet RPM openssl-devel dla systemów kompatybilnych z RHEL)
  • zlib (pakiet RPM zlib-devel dla systemów kompatybilnych z RHEL)
  • Pliki nagłówkowe Slurm (slurm/slurm.h i inne) muszą być dostępne na twoim hoście

Środowisko uruchomieniowe wymaga:

  • gcc (pakiet RPM libgcc dla systemów kompatybilnych z RHEL)
  • openssl (pakiet RPM openssl-libs dla systemów kompatybilnych z RHEL)
  • zlib (pakiet RPM zlib dla systemów kompatybilnych z RHEL)

Konfiguracja dostępnych zasobów kwantowych

Repozytorium zawiera przykładową konfigurację (qrmi_config.json.example).

Tablica resources zawiera zestaw dostępnych zasobów kwantowych. Każda definicja zasobu kwantowego zawiera następujące elementy:

WłaściwośćOpis
nameNazwa zasobu kwantowego (na przykład nazwa Backend)
typeTyp zasobu (direct-access, qiskit-runtime-service i pasqal-cloud)
environmentZestaw zmiennych środowiskowych do pracy z QRMI. Bieżące implementacje zakładają, że punkt końcowy API i poświadczenia są podane przez ustawienie zmiennej środowiskowej

Jeśli użytkownik określi za pomocą opcji --qpu zasób, który nie jest zdefiniowany w pliku qrmi_config.json, specyfikacja zostanie zignorowana.

Jeśli użytkownik sam ustawia niezbędne zmienne środowiskowe do wykonania zadania, nie jest konieczne podawanie ich w tym pliku. W takim przypadku właściwość environment będzie miała wartość {}.

uwaga

Jeśli używasz zasobu QPU z typem zasobu qiskit-runtime-service, skorzystaj z konta obsługującego otwieranie Session, np. konta Premium Plan.

Jeśli używasz konta, które nie obsługuje otwierania Session, np. konta Open Plan, dodaj QRMI_IBM_QRS_SESSION_MODE="batch" do listy zmiennych środowiskowych w pliku qrmi_config.json jako obejście problemu.

Instalacja

Uruchom budowanie za pomocą make i cmake:

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

Domyślnie plik CMakeLists.txt oczekuje, że plik nagłówkowy Slurm (slurm.h) znajduje się w /usr/include/slurm, ale można to dostosować w następujący sposób.

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

Jeśli powyższy krok budowania zakończy się pomyślnie, w katalogu build/ zostanie utworzona współdzielona biblioteka Linuxa o nazwie spank_qrmi.so.

Ponadto dodaj następujący wiersz do pliku /etc/slurm/plugstack.conf na węzłach, na których ta wtyczka jest zainstalowana (pamiętaj, że administrator musi utworzyć plik qrmi_config.json i podać jego ścieżkę jako argument wtyczki, jak poniżej):

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

Możesz użyć dostępnych opcjonalnych argumentów, aby dodać zmienne środowiskowe do procesu Slurm, w którym załadowana jest wtyczka SPANK. Format podawania zmiennych środowiskowych jest zdefiniowany następująco:

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

Na przykład podczas interakcji z zasobami kwantowymi przez serwer proxy HTTP wymagane są zmienne środowiskowe http_proxy, https_proxy i no_proxy. Można je dodać w następujący sposób:

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

W przypadku węzła alokatora nie musisz podawać ścieżki do qrmi_config.json, jak poniżej.

optional /usr/lib64/slurm/spank_qrmi.so

Poniższa tabela pokazuje, do których węzłów kontekstu Slurm należy skopiować te pliki. Więcej szczegółów dotyczących każdego kontekstu znajdziesz w dokumentacji wtyczki SPANK.

PlikiKonteksty Slurm
plugstack.conflocal, remote, allocator, slurmd i job_script
qrmi_config.jsonremote (węzły obliczeniowe)
spank_qrmi.soallocator i remote (węzły logowania i obliczeniowe)
uwaga

Po zaktualizowaniu pliku plugstack.conf wtyczki SPANK zostaną załadowane w czasie wykonywania podczas następnego uruchomienia zadania, co oznacza, że administratorzy nie muszą restartować klastra Slurm.

Po zakończeniu instalacji w komunikacie pomocy sbatch powinna pojawić się opcja --qpu=names.

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

Rejestrowanie zdarzeń

Ta wtyczka używa loggera Slurm do rejestrowania zdarzeń. Komunikaty logów tej wtyczki można znaleźć w /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

Możesz włączyć log środowiska uruchomieniowego QRMI, podając następujące argumenty srun.

Opcja sbatch/srunPoziom logowania Slurm (SRUN_DEBUG)Poziom logowania QRMI (RUST_LOG)
(domyślny)3info
--quiet2error
--verbose4debug
-vv lub więcej5trace

Uwagi dotyczące wielu QPU

W czasie wykonywania każda instancja QRMI jest powiązana z jednym zasobem QPU. Aby umożliwić korzystanie z wielu zasobów kwantowych w ramach jednego skryptu zadania, ta wtyczka ustawia zmienne środowiskowe z nazwą zasobu jako prefiksem. Na przykład jeśli określono --qpu=qpu1,qpu2, zmienne środowiskowe zostaną ustawione w następujący sposób:

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

Zapewnia to, że każda instancja QRMI działa z parametrami konfiguracji ustawionymi dla odpowiedniego zasobu podczas wykonywania zadania Slurm.

Powyższe ustawienia zmiennych środowiskowych są stosowane tylko do zadań, dla których określono opcję --qpu=names.

Ta wtyczka ustawia również następujące dwie zmienne środowiskowe, do których odwołuje się kod prymitywów QRMI.

Zmienna środowiskowaOpis
SLURM_JOB_QPU_RESOURCESRozdzielona przecinkami lista zasobów QPU do użycia w czasie wykonywania. Nieudokumentowane zasoby zostaną odfiltrowane. Na przykład qpu1,qpu2
SLURM_JOB_QPU_TYPESRozdzielona przecinkami lista typów zasobów (direct-access, qiskit-runtime-service i pasqal-cloud). Na przykład direct-access,pasqal-cloud