Plugin SPANK untuk QRMI
Plugin SPANK untuk Quantum Resource Management Interface (QRMI) digunakan untuk mengkonfigurasi akses kepada sumber kuantum daripada kerja pengguna dalam persekitaran pengkomputeran yang ditadbir oleh pengurus beban kerja Slurm. Ia mengendalikan pemerolehan dan pelepasan akses kepada sumber kuantum serta menetapkan pemboleh ubah persekitaran yang diperlukan untuk melaksanakan beban kerja kuantum. Sumber kuantum yang tersedia ditentukan dalam fail qrmi_config.json, yang diurus oleh pentadbir.
Setelah dipasang, plugin ini mendaftarkan opsyen berikut. Pengguna Slurm boleh menentukan sumber kuantum yang digunakan untuk skrip kerja Slurm.
--qpu=names Comma separated list of QPU resources to use.
Contohnya,
#!/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...
Keperluan dan konfigurasiβ
Alat berikut diperlukan untuk persekitaran pengkompilan:
- Pengkompil Rust 1.86 atau ke atas
- Pengkompil C: contohnya, GCC (gcc) pada Linux dan Clang (clang-tools-extra) untuk sasaran Rust yang tidak diketahui/pengkompilan silang. QRMI dan plugin SPANK-nya serasi dengan pengkompil yang mematuhi standard C11
- make/cmake (make/cmake RPM untuk OS serasi RHEL)
- openssl (openssl-devel RPM untuk OS serasi RHEL)
- zlib (zlib-devel RPM untuk OS serasi RHEL)
- Fail pengepala Slurm (slurm/slurm.h dan sebagainya) mesti tersedia pada hos anda
Persekitaran masa jalan memerlukan:
- gcc (libgcc RPM untuk OS serasi RHEL)
- openssl (openssl-libs RPM untuk OS serasi RHEL)
- zlib (zlib RPM untuk OS serasi RHEL)
Konfigurasi sumber kuantum yang tersediaβ
Repositori mengandungi contoh konfigurasi (qrmi_config.json.example).
Array resources mengandungi set sumber kuantum yang tersedia. Setiap definisi sumber kuantum mengandungi yang berikut:
| Sifat | Penerangan |
|---|---|
| name | Nama sumber kuantum (contohnya, nama Backend) |
| type | Jenis sumber (direct-access, qiskit-runtime-service dan pasqal-cloud) |
| environment | Set pemboleh ubah persekitaran untuk bekerja dengan QRMI. Pelaksanaan semasa menganggap titik akhir API dan kelayakan ditentukan melalui tetapan pemboleh ubah persekitaran |
Jika pengguna menentukan sumber dengan opsyen --qpu yang tidak ditakrifkan dalam fail qrmi_config.json, spesifikasi itu akan diabaikan.
Jika pengguna menetapkan pemboleh ubah persekitaran yang diperlukan untuk pelaksanaan kerja sendiri, tidak perlu menentukannya dalam fail ini. Dalam kes ini, sifat persekitaran akan menjadi {}.
Jika anda menggunakan sumber QPU dengan jenis sumber qiskit-runtime-service, gunakan akaun yang menyokong membuka sesi, seperti akaun Premium Plan.
Jika anda menggunakan akaun yang tidak menyokong pembukaan sesi, seperti akaun Open Plan, tambahkan QRMI_IBM_QRS_SESSION_MODE="batch" ke senarai pemboleh ubah persekitaran dalam qrmi_config.json sebagai penyelesaian sementara.
Pemasanganβ
Jalankan binaan menggunakan make dan cmake:
. ~/.cargo/env
mkdir build
cd build
cmake ..
make
Secara lalai, fail CMakeLists.txt menjangkakan fail pengepala Slurm (slurm.h) berada di /usr/include/slurm, tetapi ini boleh disesuaikan seperti yang ditunjukkan di bawah.
SLURM_INCLUDE_DIRS=<directory containing slurm/slurm.h> cmake ..
Jika langkah binaan di atas berjaya, pustaka kongsi Linux bernama spank_qrmi.so akan dicipta di bawah direktori build/.
Selain itu, tambahkan satu baris berikut ke /etc/slurm/plugstack.conf pada nod di mana plugin ini dipasang (perhatikan bahawa pentadbir perlu mencipta fail qrmi_config.json dan menentukan laluan sebagai argumen plugin, seperti berikut):
optional /usr/lib64/slurm/spank_qrmi.so /etc/slurm/qrmi_config.json
Anda boleh menggunakan argumen opsional yang tersedia untuk menambah pemboleh ubah persekitaran kepada proses Slurm di mana plugin SPANK dimuatkan. Format untuk menentukan pemboleh ubah persekitaran ditakrifkan seperti berikut.
--env:{variable name}={value}
Contohnya, apabila berinteraksi dengan sumber kuantum melalui proksi HTTP, pemboleh ubah persekitaran http_proxy, https_proxy, dan no_proxy diperlukan. Ini boleh ditambahkan seperti ditunjukkan di bawah.
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
Untuk nod pengagih, anda tidak perlu menentukan laluan ke qrmi_config.json, seperti berikut.
optional /usr/lib64/slurm/spank_qrmi.so
Jadual berikut menunjukkan nod konteks Slurm yang fail ini perlu disalin ke dalamnya. Untuk butiran lanjut setiap konteks, rujuk dokumentasi untuk plugin SPANK.
| Fail | Konteks Slurm |
|---|---|
plugstack.conf | local, remote, allocator, slurmd, dan job_script |
qrmi_config.json | remote (Nod pengiraan) |
spank_qrmi.so | allocator dan remote (Nod log masuk dan nod pengiraan) |
Setelah plugstack.conf dikemas kini, plugin SPANK akan dimuatkan pada masa jalan semasa pelancaran kerja seterusnya, bermakna pentadbir tidak perlu memulakan semula kluster Slurm.
Setelah selesai pemasangan, anda akan menemui opsyen --qpu=names dalam mesej bantuan sbatch.
Options provided by plugins:
--qpu=names Comma-separated list of QPU resources to use.
Pengeloganβ
Plugin ini menggunakan pencatat Slurm untuk pengelogan. Mesej log daripada plugin ini boleh ditemui di /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
Anda boleh mendayakan log masa jalan QRMI dengan menentukan argumen srun berikut.
Opsyen sbatch/srun | Tahap log Slurm (SRUN_DEBUG) | Tahap log QRMI (RUST_LOG) |
|---|---|---|
| (lalai) | 3 | info |
--quiet | 2 | error |
--verbose | 4 | debug |
-vv atau lebih | 5 | trace |
Pertimbangan untuk pelbagai QPUβ
Pada masa jalan, setiap contoh QRMI dikaitkan dengan satu sumber QPU. Untuk membolehkan penggunaan beberapa sumber kuantum dalam satu skrip kerja, plugin ini menetapkan pemboleh ubah persekitaran dengan nama sumber sebagai awalan. Contohnya, jika --qpu=qpu1,qpu2 ditentukan, pemboleh ubah persekitaran akan ditetapkan seperti berikut:
qpu1_QRMI_IBM_DA_ENDPOINT=http://test1
qpu2_QRMI_IBM_DA_ENDPOINT=http://test2
Ini memastikan setiap contoh QRMI beroperasi dengan parameter konfigurasi yang ditetapkan untuk sumbernya masing-masing semasa pelaksanaan kerja Slurm.
Tetapan pemboleh ubah persekitaran di atas hanya digunakan untuk kerja di mana opsyen --qpu=names ditentukan.
Plugin ini juga menetapkan dua pemboleh ubah persekitaran berikut, yang dirujuk oleh kod primitif QRMI.
| Pemboleh ubah persekitaran | Penerangan |
|---|---|
SLURM_JOB_QPU_RESOURCES | Senarai dipisahkan koma sumber QPU yang digunakan pada masa jalan. Sumber yang tidak didokumentasikan akan ditapis keluar. Contohnya, qpu1,qpu2 |
SLURM_JOB_QPU_TYPES | Senarai dipisahkan koma jenis sumber (direct-access, qiskit-runtime-service, dan pasqal-cloud). Contohnya, direct-access,pasqal-cloud |