QRMI용 SPANK 플러그인
Quantum Resource Management Interface (QRMI)용 SPANK 플러그인은 Slurm 워크로드 매니저가 관리하는 컴퓨팅 환경에서 사용자 작업이 양자 리소스에 접근할 수 있도록 구성하는 데 사용됩니다. 이 플러그인은 양자 리소스 접근 권한의 획득 및 해제를 처리하고, 양자 워크로드 실행에 필요한 환경 변수를 설정합니다. 사용 가능한 양자 리소스는 관리자가 관리하는 qrmi_config.json 파일에 지정됩니다.
설치 후 이 플러그인은 다음 옵션을 등록합니다. Slurm 사용자는 Slurm 작업 스크립트에 사용할 양자 리소스를 지정할 수 있습니다.
--qpu=names Comma separated list of QPU resources to use.
예시:
#!/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...
요구 사항 및 구성
컴파일 환경에는 다음 도구가 필요합니다:
- Rust 컴파일러 1.86 이상
- C 컴파일러: 예를 들어 Linux에서는 GCC (gcc), Rust 알 수 없는 타겟/크로스 컴파일의 경우 Clang (clang-tools-extra). QRMI와 해당 SPANK 플러그인은 C11 표준을 준수하는 컴파일러와 호환됩니다
- make/cmake (RHEL 호환 OS의 경우 make/cmake RPM)
- openssl (RHEL 호환 OS의 경우 openssl-devel RPM)
- zlib (RHEL 호환 OS의 경우 zlib-devel RPM)
- Slurm 헤더 파일 (slurm/slurm.h 등)이 호스트에서 사용 가능해야 합니다
런타임 환경에는 다음이 필요합니다:
- gcc (RHEL 호환 OS의 경우 libgcc RPM)
- openssl (RHEL 호환 OS의 경우 openssl-libs RPM)
- zlib (RHEL 호환 OS의 경우 zlib RPM)
사용 가능한 양자 리소스 구성
저장소에는 예시 구성 파일(qrmi_config.json.example)이 포함되어 있습니다.
resources 배열에는 사용 가능한 양자 리소스 집합이 포함됩니다. 각 양자 리소스 정의에는 다음이 포함됩니다:
| 속성 | 설명 |
|---|---|
| name | 양자 리소스 이름 (예: Backend 이름) |
| type | 리소스 유형 (direct-access, qiskit-runtime-service, pasqal-cloud) |
| environment | QRMI와 함께 사용할 환경 변수 집합. 현재 구현에서는 API 엔드포인트와 자격 증명이 환경 변수 설정을 통해 지정된다고 가정합니다 |
사용자가 --qpu 옵션으로 qrmi_config.json 파일에 정의되지 않은 리소스를 지정하면 해당 지정은 무시됩니다.
사용자가 작업 실행에 필요한 환경 변수를 직접 설정한 경우에는 이 파일에 지정할 필요가 없습니다. 이 경우 environment 속성은 {}이 됩니다.
리소스 유형이 qiskit-runtime-service인 QPU 리소스를 사용하는 경우, 세션 열기를 지원하는 계정(예: Premium Plan 계정)을 사용하세요.
세션 열기를 지원하지 않는 계정(예: Open Plan 계정)을 사용하는 경우, 임시 해결책으로 qrmi_config.json의 환경 변수 목록에 QRMI_IBM_QRS_SESSION_MODE="batch"를 추가하세요.
설치
make와 cmake를 사용하여 빌드를 실행합니다:
. ~/.cargo/env
mkdir build
cd build
cmake ..
make
기본적으로 CMakeLists.txt 파일은 Slurm 헤더 파일(slurm.h)이 /usr/include/slurm에 있다고 가정하지만, 아래와 같이 사용자 지정할 수 있습니다.
SLURM_INCLUDE_DIRS=<directory containing slurm/slurm.h> cmake ..
위 빌드 단계가 성공하면 spank_qrmi.so라는 Linux 공유 라이브러리가 build/ 디렉터리 아래에 생성됩니다.
또한 이 플러그인이 설치된 노드의 /etc/slurm/plugstack.conf에 다음 한 줄을 추가합니다 (관리자는 qrmi_config.json 파일을 생성하고 아래와 같이 플러그인 인수로 경로를 지정해야 합니다):
optional /usr/lib64/slurm/spank_qrmi.so /etc/slurm/qrmi_config.json
사용 가능한 선택적 인수를 사용하여 SPANK 플러그인이 로드되는 Slurm 프로세스에 환경 변수를 추가할 수 있습니다. 환경 변수 지정 형식은 다음과 같이 정의됩니다.
--env:{variable name}={value}
예를 들어 HTTP 프록시를 통해 양자 리소스와 상호작용할 때는 http_proxy, https_proxy, no_proxy 환경 변수가 필요합니다. 아래와 같이 추가할 수 있습니다.
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
할당자 노드의 경우 아래와 같이 qrmi_config.json 경로를 지정할 필요가 없습니다.
optional /usr/lib64/slurm/spank_qrmi.so
다음 표는 이러한 파일을 어느 Slurm 컨텍스트 노드에 복사해야 하는지를 보여줍니다. 각 컨텍스트에 대한 자세한 내용은 SPANK 플러그인의 문서를 참조하세요.
| 파일 | Slurm 컨텍스트 |
|---|---|
plugstack.conf | local, remote, allocator, slurmd, job_script |
qrmi_config.json | remote (컴퓨팅 노드) |
spank_qrmi.so | allocator 및 remote (로그인 노드와 컴퓨팅 노드) |
plugstack.conf가 업데이트되면 SPANK 플러그인은 다음 작업 실행 시 런타임에 로드됩니다. 즉, 관리자가 Slurm 클러스터를 재시작할 필요가 없습니다.
설치를 완료하면 sbatch 도움말 메시지에서 --qpu=names 옵션을 확인할 수 있습니다.
Options provided by plugins:
--qpu=names Comma-separated list of QPU resources to use.
로깅
이 플러그인은 로깅을 위해 Slurm 로거를 사용합니다. 이 플러그인의 로그 메시지는 /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
다음 srun 인수를 지정하여 QRMI 런타임 로그를 활성화할 수 있습니다.
sbatch/srun 옵션 | Slurm 로그 레벨 (SRUN_DEBUG) | QRMI 로그 레벨 (RUST_LOG) |
|---|---|---|
| (기본값) | 3 | info |
--quiet | 2 | error |
--verbose | 4 | debug |
-vv 이상 | 5 | trace |
다중 QPU 사용 시 고려 사항
런타임에 각 QRMI 인스턴스는 단일 QPU 리소스에 연결됩니다. 단일 작업 스크립트 내에서 여러 양자 리소스를 사용할 수 있도록 하기 위해 이 플러그인은 리소스 이름을 접두사로 사용하는 환경 변수를 설정합니다. 예를 들어 --qpu=qpu1,qpu2가 지정된 경우 환경 변수는 다음과 같이 설정됩니다:
qpu1_QRMI_IBM_DA_ENDPOINT=http://test1
qpu2_QRMI_IBM_DA_ENDPOINT=http://test2
이를 통해 각 QRMI 인스턴스가 Slurm 작업 실행 중 해당 리소스에 설정된 구성 매개변수로 동작하도록 합니다.
위의 환경 변수 설정은 --qpu=names 옵션이 지정된 작업에만 적용됩니다.
이 플러그인은 또한 QRMI 프리미티브 코드에서 참조하는 다음 두 환경 변수를 설정합니다.
| 환경 변수 | 설명 |
|---|---|
SLURM_JOB_QPU_RESOURCES | 런타임에 사용할 QPU 리소스의 쉼표로 구분된 목록. 문서화되지 않은 리소스는 필터링됩니다. 예: qpu1,qpu2 |
SLURM_JOB_QPU_TYPES | 리소스 유형의 쉼표로 구분된 목록 (direct-access, qiskit-runtime-service, pasqal-cloud). 예: direct-access,pasqal-cloud |