SQBM+
システムHに導入されている SQBM+ を利用する手順を説明します。
SQBM+は、東芝が開発した技術「シミュレーテッド分岐アルゴリズム(SBアルゴリズム)」を用いた組合せ最適化ソルバ「シミュレーテッド分岐マシン(Simulated Bifurcation Machine:SBM)」を核とする量子インスパイアード最適化ソリューションです。
SQBM+では汎用的に利用できるQUBOソルバに加えて、様々なソルバを提供しています。 対象とする問題に合わせてソルバを選択してください。
インタラクティブジョブ
インタラクティブジョブでのジョブ投入からSQBM+の実行までの流れを以下で説明します。
ジョブ投入
資源タイプrt_QSを指定してジョブ投入します。
[username@qes01 ~]$ qsub -l rt_QS=1 -W group_list=grpname -I
grpname
: 所属するグループ名に置き換えてください。
問題データの作成
SQBM+マニュアルを参考に求解したい問題を表すデータファイルを作成します。
quboソルバのサンプルデータファイルは以下となっています。
qubo.txt
%%MatrixMarket matrix coordinate integer general
5 5 11
1 1 -2
2 1 2
2 2 -3
3 1 2
3 2 2
3 3 -3
4 2 2
4 4 -2
5 3 2
5 4 2
5 5 -2
SQBM+サーバの起動
SQBM+サーバを以下を参考に起動してください。
例)サーバ起動
[username@qh505 ~]$ /usr/local/sbin/sqbmplus_start
sqbmplus service start
[username@qh505 ~]$ curl "http://localhost:8000/version"
{"version":"2.1.0"}
求解処理の実行
起動したSQBM+のサーバに対して求解処理のHTTPリクエストを送信します。
HTTP送信の際のURLは以下となっています。
URL configuration: http://{ip}:{port}/solver/{solver}?{parameter}
変数 | 説明 |
---|---|
ip | SQBM+計算APIが動作しているマシンのIPアドレス(システムHではlocalhostに固定) |
port | SQBM+サーバのポート番号(システムHでは8000に固定) |
solver | ソルバの種類(qubo, qplib, pubo, tsp, shift, qap) |
parameter | クエリ文字列(key=value形式)利用可能なパラメータとその詳細は、各ソルバ固有のパラメータ仕様を参照 パラメータが設定されていない場合はデフォルト値が使用されます。 |
Note
--data-binaryでHTTPリクエスト送信の際に作成したデータファイルを指定します。
例)quboソルバの実行例
[username@qh505 ~]$ curl -H "Content-Type: application/octet-stream" -X POST "http://localhost:8000/solver/qubo?timeout=1" --data-binary @qubo.txt
{"id":"r4894118093","time":1.062,"wait":0.004,"message":"timeout","runs":131990,"value":-5,"result":[0,1,0,0,1],"param":{"algo":255,"steps":2,"dt":0.7796917,"C":0.1791543},"count":18513}
バッチジョブ
既に問題データファイルを作成している場合はバッチジョブによる実行も可能です。
バッチジョブでの実行の流れを以下で説明します。
ジョブスクリプト
ジョブスクリプト内で資源タイプをrt_QS指定します。
例)quboソルバでのジョブスクリプト
#!/bin/bash
#PBS -l rt_QS=1
#PBS -l walltime=1:00:00
#PBS -W group_list=grpname
echo "Start SQBM+"
/usr/local/sbin/sqbmplus_start
echo "SQBM+ Version"
curl "http://localhost:8000/version"
echo "Run qubo"
curl -H "Content-Type: application/octet-stream" -X POST "http://localhost:8000/solver/qubo?timeout=1" --data-binary @qubo.txt
grpname
: 所属するグループ名に置き換えてください。
ジョブ投入
バッチジョブを投入します。
[username@qes01 ~]$ qsub run.sh