はじめに
量子アニーリングを試したいとき、D-Wave の Ocean(neal など)や、シミュレーテッド量子アニーリング等が使える OpenJij などの選択肢があります。高性能な選択肢としては、量子マシンの D-Wave Leap、量子インスパイアードの東芝 SQBM+ などもありますが、やや利用ハードルが高めです。
そこで今回は、クラウド(AWS)上で比較的手軽に動かせる量子インスパイアード・ハイブリッドソルバー QIH Solver を見つけたので動かしてみました。日本語の実行記事が見当たらなかったため、メモ的な備忘録として残します。
QIH Solverとは
AWS Marketplace に記載の概要から要点を抜粋すると、複数の古典的ヒューリスティックをハイブリッド化した量子インスパイアード最適化アルゴリズムで、問題特性に応じて実行パラメータを自動選択し、短時間で妥当な解を提供するというソルバーで、TuringQ Co. Ltd.が公開しています。
要するに、Ising / QUBO の組合せ最適化問題が解けます。
導入
QIH Solver は AMI (Amazon Machine Image) として配布されています。自分の AWS 環境で、該当 AMI から EC2 インスタンスを起動すれば利用可能です。
また、今回はEC2のインスタンスタイプとして、AWS Marketplaceで推奨となっていたc5.4xlargeで立ち上げました。
動作確認
動作例に従い、インスタンスの環境内にssh接続して以下のコマンドを実行することでサンプルのプログラムが動作いたしました。
ssh -i "ご自身の-keypair.pem" ubuntu@<インスタンスのIPアドレス>
# ここからインスタンスの中
cd qheuristic/ # <- サンプルプログラム等が入っていました
# サンプルプログラムの実行
python test.py
# 結果の確認
cat 1756890785.3666341.txt
プログラムを実行すると以下のような表示が出てきました。
実行が終わるとIsing/QUBOの一番良い解が記載されたtxtファイルが同じディレクトリに保存されます。
████████╗██╗ ██╗██████╗ ██╗███╗ ██╗ ██████╗ ██████╗
╚══██╔══╝██║ ██║██╔══██╗██║████╗ ██║██╔════╝ ██╔═══██╗
██║ ██║ ██║██████╔╝██║██╔██╗ ██║██║ ███╗██║ ██║
██║ ██║ ██║██╔══██╗██║██║╚██╗██║██║ ██║██║▄▄ ██║
██║ ╚██████╔╝██║ ██║██║██║ ╚████║╚██████╔╝╚██████╔╝
╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚══▀▀═╝
Start Running...
Running 0.00 %
Running 2.78 %
Running 5.56 %
(中略)
Running 94.48 %
Running 97.26 %
Running 99.99 %
Successfully finished, and output is saved in 1756890785.3666341.txt
time used: 181.84362949300004
結果のファイルの中身
best state is:[-1. 1. -1. -1. 1. -1. -1. -1. -1. 1. -1. 1. 1. -1. -1. -1. -1. 1. 1. -1. 1. -1. -1. -1. 1. -1. 1. -1. 1. -1. -1. 1. 1. 1. -1. 1. 1. 1. 1. 1. 1. 1. 1. -1. -1. 1. -1. -1. -1. 1. 1. 1. 1. -1. 1. -1. 1. -1. 1. 1. 1. -1. -1. 1. 1. -1. 1. 1. 1. -1. 1. 1. 1. 1. 1. -1. 1. 1. 1. 1. -1. 1. 1. -1. -1. -1. -1. -1. -1. -1. 1. 1. 1. 1. 1. -1. 1. -1. 1. 1. -1. -1. 1. 1. 1. 1. -1. 1. -1. -1. 1. -1. -1. 1. -1. -1. -1. 1. 1. -1. 1. 1. 1. 1. 1. -1. -1. 1. 1. 1. 1. 1. 1. -1. -1. -1. -1. -1. 1. -1. 1. -1. -1. -1. 1. -1. 1. 1. -1. 1.]
その他
その他でちょっと気になったことや、詰まった点など記載いたします。
scp接続
QIH SolverのEC2インスタンスとのファイルのやり取りをするのに今回はscpコマンドを使用しました。(S3などでもいいと思います。)
普段あまりawsを使わないので、あまり意識したことがなく普通にファイルのやり取りができるかと思っていましたが、
scp: Received message too long 1349281121
scp: Ensure the remote shell produces no output for non-interactive sessions.
というエラーが出たので対処をしました。
原因は、sshで接続した時に表示される/etc/ssh/sshd_config
という設定ファイル内で、/etc/bannerというアスキーアート的なテキストが表示される部分に起因していました。
scpは、非対話モード前提で、ファイル以外のテキスト情報が流れてくるとエラー扱いになるようで、バナーを表示しないようにする必要がありました。
/etc/ssh/sshd_config
からバナーを表示しないようにすることで、scpコマンドでファイルの受け渡しができるようになりました。
修正前:Banner /etc/banner
修正後:Banner none
マニュアルについて
インターネットを色々調べてもあまりQIH Solverの情報が出てこず、公開元のTuringQ Co. Ltd.のサイトを確認してもマニュアル等は見つかりませんでした。
しかし、こちらのQIH SolverのAMI環境に、簡単な使い方や、仕様面の説明などが記載されたマニュアルが同梱されておりました!
AWS Marketplace内の説明で記載がなかった点についてピックアップします。
- 商用/非商用利用:現バージョンは非商用に限り無償で利用可能
- 変数の制限:10,000変数まで
- パラメータの調整:内部のアルゴリズムで自動調整される
学習目的では特に問題ないかと思いますが、利用にあたっては少し注意が必要です。
商用利用や変数数の上限を上げて利用したい場合は、サポートに連絡が必要とのことです。
パラメータについては、reads、sweeps, seedなど細かいパラメータを調整する機能が見当たりませんでした。
おわりに
本記事では、AWS 上で動作する量子インスパイアード・ハイブリッドソルバー QIH Solver の導入と動作確認を紹介しました。EC2 のコストはかかりますが、手軽に強力なソルバーを試せるのは魅力です。現時点ではライセンス/利用条件(商用/非商用)に注意が必要です。今後、自作 QUBO の実行結果 も確認できたら続編の記事を作成しようと思います。