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 |
|---|---|
| name | Nazwa zasobu kwantowego (na przykład nazwa Backend) |
| type | Typ zasobu (direct-access, qiskit-runtime-service i pasqal-cloud) |
| environment | Zestaw 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ść {}.
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
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.
| Pliki | Konteksty Slurm |
|---|---|
plugstack.conf | local, remote, allocator, slurmd i job_script |
qrmi_config.json | remote (węzły obliczeniowe) |
spank_qrmi.so | allocator i remote (węzły logowania i obliczeniowe) |
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/srun | Poziom logowania Slurm (SRUN_DEBUG) | Poziom logowania QRMI (RUST_LOG) |
|---|---|---|
| (domyślny) | 3 | info |
--quiet | 2 | error |
--verbose | 4 | debug |
-vv lub więcej | 5 | trace |
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 środowiskowa | Opis |
|---|---|
SLURM_JOB_QPU_RESOURCES | Rozdzielona przecinkami lista zasobów QPU do użycia w czasie wykonywania. Nieudokumentowane zasoby zostaną odfiltrowane. Na przykład qpu1,qpu2 |
SLURM_JOB_QPU_TYPES | Rozdzielona przecinkami lista typów zasobów (direct-access, qiskit-runtime-service i pasqal-cloud). Na przykład direct-access,pasqal-cloud |