SPANK plugin para sa QRMI
Ang SPANK plugin para sa Quantum Resource Management Interface (QRMI) ay ginagamit para i-configure ang access sa mga quantum resource mula sa mga user job sa isang compute environment na pinapamahalaan ng Slurm workload manager. Hinahawakan nito ang pagkuha at paglabas ng access sa mga quantum resource, at itinatakda ang mga kinakailangang environment variable para sa pagpapatakbo ng mga quantum workload. Ang mga available na quantum resource ay tinukoy sa isang qrmi_config.json na file, na pinapamahalaan ng isang administrator.
Kapag na-install na, irerehistro ng plugin na ito ang sumusunod na opsyon. Maaaring tukuyin ng isang Slurm user kung aling mga quantum resource ang gagamitin para sa Slurm job script.
--qpu=names Comma separated list of QPU resources to use.
Halimbawa,
#!/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...
Mga kinakailangan at configuration​
Ang mga sumusunod na tool ay kailangan para sa compiling environment:
- Rust compiler 1.86 pataas
- Isang C compiler: halimbawa, GCC (gcc) sa Linux at Clang (clang-tools-extra) para sa Rust unknown targets/cross compilations. Ang QRMI at ang SPANK plugin nito ay katugma sa isang compiler na sumusunod sa C11 standard
- make/cmake (make/cmake RPM para sa RHEL-compatible na OS)
- openssl (openssl-devel RPM para sa RHEL-compatible na OS)
- zlib (zlib-devel RPM para sa RHEL-compatible na OS)
- Ang mga Slurm header file (slurm/slurm.h at iba pa) ay dapat available sa iyong host
Ang runtime environment ay nangangailangan ng:
- gcc (libgcc RPM para sa RHEL-compatible na OS)
- openssl (openssl-libs RPM para sa RHEL-compatible na OS)
- zlib (zlib RPM para sa RHEL-compatible na OS)
I-configure ang mga available na quantum resource​
Ang repository ay naglalaman ng isang halimbawang configuration (qrmi_config.json.example).
Ang resources array ay naglalaman ng isang set ng mga available na quantum resource. Ang bawat kahulugan ng quantum resource ay naglalaman ng sumusunod:
| Property | Paglalarawan |
|---|---|
| name | Pangalan ng quantum resource (halimbawa, pangalan ng Backend) |
| type | Uri ng resource (direct-access, qiskit-runtime-service at pasqal-cloud) |
| environment | Isang set ng mga environment variable para gamitin sa QRMI. Ipinapalagay ng mga kasalukuyang implementasyon na ang API endpoint at mga kredensyal ay tinukoy sa pamamagitan ng environment variable setting |
Kung tinukoy ng isang user ang isang resource gamit ang opsyong --qpu na hindi naka-define sa qrmi_config.json na file, ang tukoy na iyon ay hindi papansinin.
Kung itatakda ng user mismo ang mga kinakailangang environment variable para sa pagpapatakbo ng job, hindi na kailangang tukuyin ang mga ito sa file na ito. Sa kasong ito, ang environment property ay magiging {}.
Kung gumagamit ka ng QPU resource na may resource type na qiskit-runtime-service, gumamit ng account na sumusuporta sa pagbubukas ng session, tulad ng Premium Plan account.
Kung gumagamit ka ng account na hindi sumusuporta sa pagbubukas ng session, tulad ng Open Plan account, magdagdag ng QRMI_IBM_QRS_SESSION_MODE="batch" sa listahan ng environment variable sa qrmi_config.json bilang solusyon.
Pag-install​
Patakbuhin ang build gamit ang make at cmake:
. ~/.cargo/env
mkdir build
cd build
cmake ..
make
Sa default, ang CMakeLists.txt na file ay inaasahang ang Slurm header file (slurm.h) ay matatagpuan sa /usr/include/slurm, ngunit maaari itong i-customize tulad ng ipinapakita sa ibaba.
SLURM_INCLUDE_DIRS=<directory containing slurm/slurm.h> cmake ..
Kung matagumpay ang build step sa itaas, isang Linux shared library na pinangalanang spank_qrmi.so ay malilikha sa ilalim ng build/ na directory.
Bukod dito, magdagdag ng sumusunod na isang linya sa /etc/slurm/plugstack.conf sa mga node kung saan naka-install ang plugin na ito (tandaan na kailangan ng isang administrator na likhain ang qrmi_config.json na file at tukuyin ang path bilang plugin argument, tulad ng sumusunod):
optional /usr/lib64/slurm/spank_qrmi.so /etc/slurm/qrmi_config.json
Maaari mong gamitin ang mga available na optional argument para magdagdag ng mga environment variable sa Slurm process kung saan na-load ang SPANK plugin. Ang format para sa pagtukoy ng mga environment variable ay tinukoy tulad ng sumusunod.
--env:{variable name}={value}
Halimbawa, kapag nakikipag-ugnayan sa mga quantum resource sa pamamagitan ng isang HTTP proxy, ang mga environment variable na http_proxy, https_proxy, at no_proxy ay kinakailangan. Maaari itong idagdag tulad ng ipinapakita sa ibaba.
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 sa allocator node, hindi mo na kailangang tukuyin ang path sa qrmi_config.json, tulad ng sumusunod.
optional /usr/lib64/slurm/spank_qrmi.so
Ang sumusunod na talahanayan ay nagpapakita kung aling mga Slurm context node ang dapat kopyahan ng mga file na ito. Para sa karagdagang detalye ng bawat context, tingnan ang dokumentasyon para sa SPANK plugin.
| Mga File | Mga Slurm context |
|---|---|
plugstack.conf | local, remote, allocator, slurmd, at job_script |
qrmi_config.json | remote (Mga compute node) |
spank_qrmi.so | allocator at remote (Mga login node at compute node) |
Kapag na-update na ang plugstack.conf, ang mga SPANK plugin ay ilo-load sa runtime sa susunod na paglulunsad ng job, ibig sabihin hindi na kailangang i-restart ng mga administrator ang Slurm cluster.
Kapag nakumpleto na ang pag-install, makikita mo ang opsyong --qpu=names sa sbatch help message.
Options provided by plugins:
--qpu=names Comma-separated list of QPU resources to use.
Logging​
Gumagamit ang plugin na ito ng Slurm logger para sa logging. Ang mga log message mula sa plugin na ito ay matatagpuan sa /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
Maaari mong i-enable ang QRMI runtime log sa pamamagitan ng pagtukoy ng sumusunod na mga srun argument.
sbatch/srun na opsyon | Slurm log level (SRUN_DEBUG) | QRMI log level (RUST_LOG) |
|---|---|---|
| (default) | 3 | info |
--quiet | 2 | error |
--verbose | 4 | debug |
-vv o higit pa | 5 | trace |
Mga konsiderasyon para sa maraming QPU​
Sa runtime, ang bawat QRMI instance ay naka-link sa isang solong QPU resource. Para ma-enable ang paggamit ng maraming quantum resource sa loob ng isang job script, itinatakda ng plugin na ito ang mga environment variable na may pangalan ng resource bilang prefix. Halimbawa, kung tinukoy ang --qpu=qpu1,qpu2, ang mga environment variable ay itatakda tulad ng sumusunod:
qpu1_QRMI_IBM_DA_ENDPOINT=http://test1
qpu2_QRMI_IBM_DA_ENDPOINT=http://test2
Tinitiyak nito na ang bawat QRMI instance ay gumagana gamit ang mga configuration parameter na itinakda para sa kani-kanilang resource sa panahon ng pagpapatakbo ng Slurm job.
Ang mga setting ng environment variable sa itaas ay inilalapat lamang sa mga job kung saan tinukoy ang opsyong --qpu=names.
Itinatakda rin ng plugin na ito ang sumusunod na dalawang environment variable, na tinutukoy ng QRMI primitives code.
| Environment variable | Paglalarawan |
|---|---|
SLURM_JOB_QPU_RESOURCES | Comma-separated na listahan ng mga QPU resource na gagamitin sa runtime. Ang mga resource na hindi documented ay ifi-filter out. Halimbawa, qpu1,qpu2 |
SLURM_JOB_QPU_TYPES | Comma-separated na listahan ng uri ng resource (direct-access, qiskit-runtime-service, at pasqal-cloud). Halimbawa, direct-access,pasqal-cloud |