Covalent
システムHに導入されているCovalentインタラクティブアプリを用いて、システムHとシステムFを使用した量子・古典ハイブリッドアプリケーションワークフローを実行する手順を説明します。
現在サポートされている各モジュールのバージョンは以下のとおりです。
| module name | version |
|---|---|
| python | 3.12.12 |
| covalent | 0.240.0 |
| quri-parts | 0.24.1 |
| quri-parts-oqtopus | 1.0.3 |
事前準備(初回のみ)
最初に、システムHにPython仮想環境を作成する必要があります。
ここでは、自分のホーム領域に COVALENT-WORK/.venv ディレクトリを作成し、その下に仮想環境を準備する例を示します。
ホーム領域以外の場所でも構いませんが、グループ領域等、すべての計算ノードからアクセスできる場所にする必要があります。
Covalentインタラクティブアプリと同じバージョンの python を使用する必要があります。 現在サポートされているのは、python 3.12.12 のみです。
Covalentワークフローオーケストレーションツールから、システムHとシステムFにジョブを投入するため、次の2つのプラグインをインストールします。 ここではシステムH上に配置されているWheelアーカイブからインストールしています。
- Covalent PBS Professional Plugin (PBS Plugin): PBS Proによりジョブ管理されているシステムに対してタスクを投入するCovalentプラグイン
- Covalent ABCI-Q System F Plugin (System F Plugin): ABCI-Q システムFに対してタスクを投入するCovalentプラグイン
[username@qes01 ~] % qsub -I -W group_list=<your group> -l rt_QG=1 -l walltime=1:00:00
[username@qh001 ~] % cd $HOME
[username@qh001 ~] % mkdir -p COVALENT-WORK/.venv
[username@qh001 ~] % module load python/3.12/3.12.12
[username@qh001 ~] % python3 -m venv COVALENT-WORK/.venv/covalent
[username@qh001 ~] % source COVALENT-WORK/.venv/covalent/bin/activate
((covalent) ) [username@qh001 ~] % pip install --no-index --find-links=/apps/ondemand/COVALENT-NEW/SETUP/Wheel covalent
((covalent) ) [username@qh001 ~] % pip install --no-index --find-links=/apps/ondemand/COVALENT-NEW/SETUP/Wheel covalent_pbspro_plugin
((covalent) ) [username@qh001 ~] % pip install --no-index --find-links=/apps/ondemand/COVALENT-NEW/SETUP/Wheel covalent_abciq_sysf_plugin
利用方法
Open On Demand から、Covalent を起動します。 Covalent アプリケーションが起動されると、画面上に、Covalent GUIを起動するボタンと、Jupyter Notebook を起動するボタンが表示されます。 それぞれ押すと、それぞれの画面が表示されます。(起動には5分ほど時間がかかります。)
システムHを利用する例
システムHの計算ノードを利用するCovalentタスクを、PBS Plguinを利用してシステムHのジョブとして投入します。
Covalent GUI とJupyter Notenook のウィンドウが表示されたら、Jupyter Notebook から、以下のようなサンプルコードを実行してください。
import covalent as ct
executor = ct.executor.PBSProExecutor(
# Covalent GUIから使用する場合は、以下が必要です。
skip_ssh=True,
# 事前準備で用意したディレクトリです。
remote_workdir="COVALENT-WORK",
# module コマンドを使用するために必要な初期化ファイルです。
bashrc_path="/etc/profile.d/modules.sh",
# 実行結果をpoling する間隔(秒)です。
poll_freq=30,
#
cleanup=True,
# PBS 用のパラメータの設定です。
# 利用するリソースクラス、最大実行時間、リソースグループ等を指定します。
embedded_qsub_args={
"l": ["rt_QF=1", "walltime=1:00:00"],
"W": "group_list=<your group>"
},
# PBS のジョブ名です。qstat で状況を確認する際のジョブの名前です。
#(設定しない場合、ジョブ名は、JobScript-XXXXXX-XXXXXX-XXXXX となります)
qsub_args={
"N": "myWORKFLOW",
},
# PBS のジョブを実行する際に、最初に実行するコマンドです。必ず入れてください。
# 事前準備で実行したコマンドと同じ。
# 必要なpython module をロードし、仮想環境を有効にするためのコマンドです。
prerun_commands=[
"module load python/3.12/3.12.12",
"source ~/COVALENT-WORK/.venv/covalent/bin/activate",
],
)
@ct.electron(executor=executor)
def add(a, b):
return a + b
@ct.lattice
def workflow(a, b):
return add(a, b)
dispatch_id = ct.dispatch(workflow)(1, 2)
workflow_job = ct.get_result(dispatch_id, wait=True)
print (workflow_job)
Jupyter Notebook から実行すると、システムHにPBSジョブを投入します。 Covalent GUIで Dispatch list 画面に行き、ウィンドウをリロードすると、ジョブの状況が表示されます。 また、その画面上で、Dispatch ID をクリックすると、ジョブの様子が表示されます。
システムFを利用する例
システムFを利用するCovalentタスクを、System F Pluginを利用してシステムFのジョブとして投入します。
システムHと同様、Covalent GUI とJupyter Notenook のウィンドウが表示されたら、Jupyter Notebook から、以下のようなサンプルコードを実行してください。
import covalent as ct
from quri_parts.circuit import QuantumCircuit, Parameter
from quri_parts_oqtopus.backend.sampling import OqtopusSamplingJob, OqtopusSamplingResult
qps = ct.executor.AbciqSysFSamplingExecutor(
device_id = "abciq-f-1", # Enter the device ID of Quantum PC.
shots = 1024, # Number of shots.
timeout = 3600, # Timeout to get procedure result (second).
interval = 60, # Time interval to query to get status (second).
use_oqtopus_config = True, # Flag of use to oqtopus config file.
oqtopus_section = "SYSF", # when use oqtopus config file, select to section name.
oqtopus_path = "~/.oqtopus", # when use oqtopus config file, enter oqtopus config file path name including filename.
)
@ct.electron(executor=qps)
def calc():
program = """OPENQASM 3;
include "stdgates.inc";
qubit[2] q;
bit[2] c;
h q[0];
cx q[0], q[1];
c[0] = measure q[0];
c[1] = measure q[1];
"""
ti = {"initial_layout": "[1, 2]",}
param = {
"program": program,
"transpiler_info": ti
}
return param
@ct.lattice
def workflow():
output1 = calc()
return output1
dispatch_id = ct.dispatch(workflow)()
workflow_job = ct.get_result(dispatch_id, wait=True)
print (workflow_job)
Jupyter Notebook から実行すると、システムF に量子ジョブを投入します。 Covalent GUIで Dispatch list 画面に行き、ウィンドウをリロードすると、ジョブの状況が表示されます。 また、その画面上で、Dispatch ID をクリックすると、ジョブの様子が表示されます。 上記のコードからは、以下の様な出力が返されます。
Lattice Result
==============
status: COMPLETED
result: {'counts': Counter({0: 302, 3: 290, 2: 225, 1: 207}), 'divided_counts': None}
input args:
input kwargs:
error: None
start_time: 2026-06-11 07:32:02.177655
end_time: 2026-06-11 07:33:02.721305
results_dir: $HOME/.cache/covalent/results/16b4ef43-2f43-49bc-8949-b1ce63af2a4e
dispatch_id: 16b4ef43-2f43-49bc-8949-b1ce63af2a4e
Node Outputs
------------
calc(0): {'counts': Counter({0: 302, 3: 290, 2: 225, 1: 207}), 'divided_counts': None}
:postprocess:reconstruct(1): {'counts': Counter({0: 302, 3: 290, 2: 225, 1: 207}), 'divided_counts': None}
Covalent の results_dir から、System F 側のジョブIDを取得できます。 そのジョブIDを使用して、System F側でのジョブの情報を取得可能です。
[username@qes01 ~] $ cd $HOME/.cache/covalent/results/16b4ef43-2f43-49bc-8949-b1ce63af2a4e <--- 出力された results_dir
[username@qes01 ~] $ cd node_0
[username@qes01 ~] $ cat abciq_sysf_job_info.txt
Timestamp: 2026-06-11T16:32:02.446504
Quantum Job ID: 06a2a647-24eb-770d-8000-54ccd9c2f52c <---- System F のジョブID
Quantum Job Status: submitted
Covalent Dispatch ID: 16b4ef43-2f43-49bc-8949-b1ce63af2a4e
Covalent Node ID: 0
---
Timestamp: 2026-06-11T16:33:02.526372
Quantum Job ID: 06a2a647-24eb-770d-8000-54ccd9c2f52c
Quantum Job Status: succeeded
Covalent Dispatch ID: 16b4ef43-2f43-49bc-8949-b1ce63af2a4e
Covalent Node ID: 0
---