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 | 量子リソース名(例:バックエンド名) |
| 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_IBM_QRS_SESSION_MODE="batch" を qrmi_config.json の環境変数リストに追加してください。
インストール
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 に以下の1行を追加してください(管理者は 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リソースにリンクされます。1つのジョブスクリプト内で複数の量子リソースを使用できるようにするため、このプラグインはリソース名をプレフィックスとした環境変数を設定します。例えば、--qpu=qpu1,qpu2 を指定した場合、環境変数は以下のように設定されます。
qpu1_QRMI_IBM_DA_ENDPOINT=http://test1
qpu2_QRMI_IBM_DA_ENDPOINT=http://test2
これにより、各QRMIインスタンスはSlurm ジョブの実行中に、それぞれのリソースに設定された構成パラメーターで動作することが保証されます。
上記の環境変数の設定は、--qpu=names オプ ションが指定されたジョブにのみ適用されます。
このプラグインはさらに、QRMIプリミティブコードから参照される以下の2つの環境変数を設定します。
| 環境変数 | 説明 |
|---|---|
SLURM_JOB_QPU_RESOURCES | ランタイムで使用するQPUリソースのカンマ区切りリスト。未定義のリソースはフィルタリングされます。例:qpu1,qpu2 |
SLURM_JOB_QPU_TYPES | リソースタイプ(direct-access、qiskit-runtime-service、pasqal-cloud)のカンマ区切りリスト。例:direct-access,pasqal-cloud |