Plugin SPANK untuk QRMI
Plugin SPANK untuk Quantum Resource Management Interface (QRMI) digunakan untuk mengonfigurasi akses ke sumber daya kuantum dari job pengguna di lingkungan komputasi yang dikelola oleh workload manager Slurm. Plugin ini menangani akuisisi dan pelepasan akses ke sumber daya kuantum serta menetapkan variabel lingkungan yang diperlukan untuk menjalankan workload kuantum. Sumber daya kuantum yang tersedia ditentukan dalam file qrmi_config.json, yang dikelola oleh administrator.
Setelah dipasang, plugin ini mendaftarkan opsi berikut. Pengguna Slurm bisa menentukan sumber daya kuantum mana yang digunakan untuk skrip job 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...
Persyaratan dan konfigurasiβ
Alat-alat berikut diperlukan untuk lingkungan kompilasi:
- Rust compiler versi 1.86 atau lebih baru
- Kompiler C: misalnya, GCC (gcc) di Linux dan Clang (clang-tools-extra) untuk target unknown Rust/kompilasi silang. QRMI dan plugin SPANK-nya kompatibel dengan kompiler yang sesuai standar C11
- make/cmake (RPM make/cmake untuk OS kompatibel RHEL)
- openssl (RPM openssl-devel untuk OS kompatibel RHEL)
- zlib (RPM zlib-devel untuk OS kompatibel RHEL)
- File header Slurm (slurm/slurm.h dan sejenisnya) harus tersedia di host kamu
Lingkungan runtime memerlukan:
- gcc (RPM libgcc untuk OS kompatibel RHEL)
- openssl (RPM openssl-libs untuk OS kompatibel RHEL)
- zlib (RPM zlib untuk OS kompatibel RHEL)
Mengonfigurasi sumber daya kuantum yang tersediaβ
Repositori ini berisi contoh konfigurasi (qrmi_config.json.example).
Array resources berisi sekumpulan sumber daya kuantum yang tersedia. Setiap definisi sumber daya kuantum mengandung hal berikut:
| Properti | Deskripsi |
|---|---|
| name | Nama sumber daya kuantum (misalnya, nama Backend) |
| type | Tipe sumber daya (direct-access, qiskit-runtime-service dan pasqal-cloud) |
| environment | Sekumpulan variabel lingkungan untuk bekerja dengan QRMI. Implementasi saat ini mengasumsikan endpoint API dan kredensial ditentukan melalui pengaturan variabel lingkungan |
Jika pengguna menentukan sumber daya dengan opsi --qpu yang tidak didefinisikan dalam file qrmi_config.json, spesifikasi tersebut akan diabaikan.
Jika pengguna menetapkan variabel lingkungan yang diperlukan untuk eksekusi job sendiri, tidak perlu menentukannya di file ini. Dalam kasus ini, properti environment akan berupa {}.
Jika kamu menggunakan sumber daya QPU dengan tipe sumber daya qiskit-runtime-service, gunakan akun yang mendukung pembukaan Session, seperti akun Premium Plan.
Jika kamu menggunakan akun yang tidak mendukung pembukaan Session, seperti akun Open Plan, tambahkan QRMI_IBM_QRS_SESSION_MODE="batch" ke daftar variabel lingkungan di qrmi_config.json sebagai solusi sementara.
Instalasiβ
Jalankan build menggunakan make dan cmake:
. ~/.cargo/env
mkdir build
cd build
cmake ..
make
Secara default, file CMakeLists.txt mengharapkan file header Slurm (slurm.h) berada di /usr/include/slurm, tapi ini bisa dikustomisasi seperti yang ditunjukkan di bawah.
SLURM_INCLUDE_DIRS=<directory containing slurm/slurm.h> cmake ..
Jika langkah build di atas berhasil, library shared Linux bernama spank_qrmi.so akan dibuat di direktori build/.
Selain itu, tambahkan satu baris berikut ke /etc/slurm/plugstack.conf di node tempat plugin ini dipasang (perhatikan bahwa administrator perlu membuat file qrmi_config.json dan menentukan path-nya sebagai argumen plugin, seperti berikut):
optional /usr/lib64/slurm/spank_qrmi.so /etc/slurm/qrmi_config.json
Kamu bisa menggunakan argumen opsional yang tersedia untuk menambahkan variabel lingkungan ke proses Slurm tempat plugin SPANK dimuat. Format untuk menentukan variabel lingkungan didefinisikan sebagai berikut.
--env:{variable name}={value}
Misalnya, saat berinteraksi dengan sumber daya kuantum melalui proxy HTTP, variabel lingkungan http_proxy, https_proxy, dan no_proxy diperlukan. Ini bisa ditambahkan seperti yang 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 node allocator, kamu tidak perlu menentukan path ke qrmi_config.json, seperti berikut.
optional /usr/lib64/slurm/spank_qrmi.so
Tabel berikut menunjukkan node konteks Slurm mana file-file ini harus disalin. Untuk detail lebih lanjut tentang setiap konteks, lihat dokumentasi untuk plugin SPANK.
| File | Konteks Slurm |
|---|---|
plugstack.conf | local, remote, allocator, slurmd, dan job_script |
qrmi_config.json | remote (Node komputasi) |
spank_qrmi.so | allocator dan remote (Node login dan node komputasi) |
Setelah plugstack.conf diperbarui, plugin SPANK akan dimuat saat runtime selama peluncuran job berikutnya, yang berarti administrator tidak perlu me-restart cluster Slurm.
Setelah kamu menyelesaikan instalasi, kamu akan menemukan opsi --qpu=names di pesan bantuan sbatch.
Options provided by plugins:
--qpu=names Comma-separated list of QPU resources to use.
Loggingβ
Plugin ini menggunakan logger Slurm untuk logging. Pesan log dari plugin ini bisa ditemukan 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
Kamu bisa mengaktifkan log runtime QRMI dengan menentukan argumen srun berikut.
Opsi sbatch/srun | Level log Slurm (SRUN_DEBUG) | Level log QRMI (RUST_LOG) |
|---|---|---|
| (default) | 3 | info |
--quiet | 2 | error |
--verbose | 4 | debug |
-vv atau lebih | 5 | trace |
Pertimbangan untuk beberapa QPUβ
Saat runtime, setiap instance QRMI terhubung ke satu sumber daya QPU. Untuk memungkinkan penggunaan beberapa sumber daya kuantum dalam satu skrip job, plugin ini menetapkan variabel lingkungan dengan nama sumber daya sebagai prefiks. Misalnya, jika --qpu=qpu1,qpu2 ditentukan, variabel lingkungan akan ditetapkan sebagai berikut:
qpu1_QRMI_IBM_DA_ENDPOINT=http://test1
qpu2_QRMI_IBM_DA_ENDPOINT=http://test2
Ini memastikan bahwa setiap instance QRMI beroperasi dengan parameter konfigurasi yang ditetapkan untuk sumber dayanya masing-masing selama eksekusi job Slurm.
Pengaturan variabel lingkungan di atas hanya diterapkan pada job yang opsi --qpu=names-nya ditentukan.
Plugin ini juga menetapkan dua variabel lingkungan berikut, yang dirujuk oleh kode primitif QRMI.
| Variabel lingkungan | Deskripsi |
|---|---|
SLURM_JOB_QPU_RESOURCES | Daftar sumber daya QPU yang dipisahkan koma untuk digunakan saat runtime. Sumber daya yang tidak terdokumentasi akan difilter. Misalnya, qpu1,qpu2 |
SLURM_JOB_QPU_TYPES | Daftar tipe sumber daya yang dipisahkan koma (direct-access, qiskit-runtime-service, dan pasqal-cloud). Misalnya, direct-access,pasqal-cloud |