コンテンツにスキップ

Fixstars Amplify AE

システムHに導入されている Fixstars Amplify Annealing Engine(AE) を利用する手順を説明します。

Note

Fixstars Amplify AEの使用は、産総研職員と事前に許可された利用者に限定されています。 利用可否についてのお問い合わせには答えられません。

仮想環境の作成 (初回のみ)

インタラクティブノードでPython の仮想環境を作成しFixStars Amplify SDKをインストールします。

[username@qes01 ~]$ python3 -m venv <venv_name>
[username@qes01 ~]$ source <venv_name>/bin/activate
(venv_name)[username@qes01 ~]$ python3 -m pip install -U amplify

venv_name: 任意の仮想環境名に置き換えてください。

home領域に仮想環境を準備できたらインタラクティブジョブ及びバッチジョブを投入します。

インタラクティブジョブ

インタラクティブジョブでのジョブ投入からFixStars Amplifyの実行までの流れを以下で説明します。

ジョブ投入

資源タイプrt_QAを指定してジョブ投入します。

[username@qes01 ~]$ qsub -l rt_QA=1 -W group_list=grpname -I

grpname: 所属するグループ名に置き換えてください。

環境設定

cudaモジュールをロードします。

[username@qh503 ~]$ module load cuda/12.6/12.6.2

FixStars Amplifyサーバを起動します。

[username@qh503 ~]$ /usr/local/sbin/fa_start

仮想環境のアクティベート

事前に作成した仮想環境をアクティベートします。

[username@qh503 ~]$ source <venv_name>/bin/activate

Pythonコードの作成

FixStars Amplifyが公開している以下Webサイトを参考にPythonコードを作成します。

Fixstars Amplify Demo

Note

システムHではFixstars Amplify Engineのurlを設定の際にローカルホストを指定します。

またインタラクティブノードでもPythonコードの開発は可能ですが、求解処理は計算ノードのみで可能です。

サンプルコード

# import

import amplify

from amplify import FixstarsClient
from amplify import Model
from amplify import VariableGenerator
from amplify import solve
from datetime import timedelta

# ---
# setting

client = FixstarsClient()

# Fixstars Amplify Engineのurlを設定
client.url = "http://localhost:1080"

# 実行時間を 1 秒に設定
client.parameters.timeout = timedelta(milliseconds=1000)

# 使用する GPU 数を 4 に設定
client.parameters.num_gpus = 4

# 探索中に得られた全ての解を取得
client.parameters.outputs.num_outputs = 0

# ---
# run

# 決定変数と目的関数を定義
g = VariableGenerator()
q = g.array("Binary", 2)
f = q[0] * q[1] + q[0] - q[1] + 1

# モデルを作成
model = Model(f)

# ソルバーを実行
result = solve(model, client)

# ---
# print

print("Amplify SDK version = " + amplify.__version__)
print("solver version = " + client.version)

#print(result)

# 目的関数の値
print(result.best.objective)

# 変数の値
print(result.best.values)

# サンプル問題の解 ( [q_0, q_1] = [0. 1.] )
print(f"{q} = {q.evaluate(result.best.values)}")

Python コードの実行

作成したPython コードを実行します。

[username@qh503 ~]$ python3 <python_code_name>

バッチジョブ

既にPythonコードを作成してる場合はバッチジョブによる実行も可能です。

バッチジョブでの実行の流れを以下で説明します。

ジョブスクリプト

ジョブスクリプト内で資源タイプをrt_QA指定します。

#!/bin/sh

#PBS -l rt_QA=1
#PBS -j oe
#PBS -W group_list=grpname

# cudaモジュールロード
module load cuda/12.6/12.6.2

# Fixstars Amplify サーバの起動
/usr/local/sbin/fa_start

# 仮想環境のアクティベート
source <venv_name>/bin/activate

# pythonコードの実行
python3 <python_code_name>

grpname: 所属するグループ名に置き換えてください。

<venv_name>: 任意の仮想環境名に置き換えてください。

ジョブ投入

バッチジョブを投入します。

[username@qes01 ~]$ qsub run.sh