コンテンツにスキップ

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アーカイブからインストールしています。

[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
---