メインコンテンツへスキップ

SPANKプラグイン ユーザーガイド

Quantum Resource Management Interface (QRMI)向けのSPANKプラグインは、Slurmワークロードマネージャーによって管理されるコンピューティング環境において、ユーザージョブから量子リソースへのアクセスを設定するために使用されます。このガイドは、Slurmジョブを作成する際にQPUリソースの割り当てを設定するプラグインユーザー向けのものです。

Slurm QPUリソース定義は、高性能コンピューティング(HPC)環境のSlurmジョブで使用できる物理リソースを決定します。ユーザーのソースコードは、可能な限り特定のバックエンドインスタンスやバックエンドタイプに依存しない形で記述することが推奨されます。これにより、QPUの選択基準をリソース定義(ソースコードではなく設定として扱われます)の一部としながら、ソースコードの移植性を維持できます。

ジョブ作成時のQPUリソース設定

注意

このプラグインは現在活発に開発中であり、正確な構文は変更される場合があります。

管理者スコープ

HPC管理者は、SPANKプラグインを設定して、Slurmジョブに提供できる物理リソースを指定します。 この設定には、エンドポイントやアクセス認証情報など、Slurmジョブが物理リソースにアクセスするために必要なすべての情報が含まれます。

包括的な設定例については、qrmi_config.json.exampleをご参照ください。

slurm.confでは、QPUリソースを一部またはすべてのノードに割り当てて使用できます:

...
GresTypes=qpu,name
NodeName=node[1-5000] Gres=qpu,name:ibm_fez
...

ユーザースコープ

HPCユーザーは、Slurm QPUリソースに紐付けられたQPUリソースを使用してジョブを送信します。name属性は、HPC管理者が定義した内容を参照します。Slurmジョブの実行時、バックエンドの選択は、特定のバックエンドを指す定義済みの名前以外の基準(例えば、定義されたバックエンドセットを絞り込むためのキャパシティやエラーレートの修飾子)に基づいて行うことができます。

バックエンドタイプによっては、追加の環境変数が必要になる場合があります。

SBATCHパラメーターは、アプリケーションにジェネリックリソースとして割り当てられた1つ以上のQPUリソースを指定します。 プラグインを通じて提供される環境変数は、アプリケーションに必要な情報を提供します(詳細についてはHPCアプリケーションスコープセクションを参照してください)。

#SBATCH --time=100
#SBATCH --output=<LOGS_PATH>
#SBATCH --gres=qpu:1
#SBATCH --qpu=ibm_fez
#SBATCH --... # other options

srun ...

複数のQPUリソースを使用するには、--qpuパラメーターにQPUを追加します:

#SBATCH --time=100
#SBATCH --output=<LOGS_PATH>
#SBATCH --gres=qpu:3
#SBATCH --qpu=my_local_qpu,ibm_fez,ibm_marrakesh
#SBATCH --... # other options

srun ...

HPCアプリケーションスコープ

HPCアプリケーションは、Slurmジョブに割り当てられたSlurm QPUリソースを使用します。

環境変数はアプリケーションが使用する詳細情報を提供します。例えば、SLURM_JOB_QPU_RESOURCESは量子リソース名の一覧を(複数ある場合はカンマ区切りで)列挙します。 これらの変数はQRMIによって使用されます(詳細については、各QRMIディレクトリのREADMEファイル(IBMpasqal)を参照してください)。

from qiskit import QuantumCircuit
# Using an IBM QRMI flavor:
from qrmi.primitives import QRMIService
from qrmi.primitives.ibm import SamplerV2, get_backend

# define circuit

circuit = QuantumCircuit(2)
circuit.h(0)
circuit.cx(0, 1)
circuit.measure_all()

# instantiate QRMI service and get quantum resource (we'll take the first one should there be several of them)
# inject credentials needed for accessing the service at this point
load_dotenv()
service = QRMIService()

resources = service.resources()
qrmi = resources[0]

# Generate transpiler target from backend configuration & properties and transpile
backend = get_backend(qrmi)
pm = generate_preset_pass_manager(
optimization_level=1,
backend=backend,
)

isa_circuit = pm.run(circuit)

# Run the circuit
options = {}
sampler = SamplerV2(qrmi, options=options)

job = sampler.run([(isa_circuit, isa_observable, param_values)])
print(f">>> Job ID: {job.job_id()}")

result = job.result()

if job.done():
pub_result = result[0]
print(f"Counts for the 'meas' output register: {pub_result.data.meas.get_counts()}")
elif job.cancelled():
print("Cancelled")
elif job.errored():
print(qrmi.task_logs(job.job_id()))

サンプルファイルについては、examplesディレクトリを参照してください。

バックエンド固有の詳細

IBM Direct Access API

管理者スコープ

Direct Access APIバックエンドの設定(HPC管理者スコープ)には、Direct AccessエンドポイントおよびS3エンドポイントへのエンドポイントと認証情報、さらに認証サービスへの情報が含まれます。 具体的には以下が含まれます:

  • ベアラートークン作成のためのIBM Cloud® APIキー
  • Direct Access APIのエンドポイント
  • S3バケットとアクセス詳細情報

アクセス認証情報は、HPCユーザーやシステム上の他の非特権ユーザーには見えないようにする必要があります。 そのため、機密データは個別のファイルに格納し、適切なアクセス保護を設定することができます。

Slurmはバックエンドへの完全なアクセス権を持つことに注意してください。 これにはいくつかの重要な意味があります:

  • Slurmプラグインはマルチテナンシーを担当します(ユーザーが他のユーザーのジョブ結果を参照できないようにします)
  • HPCクラスター側はユーザーの審査(QPUへのアクセスを許可されているのは誰か)と適切なアクセスの確保を担当します
  • QPU使用のキャパシティと優先度は専らSlurmを通じて管理され、Slurm外部での他のユーザースケジューリングは関与しません
ユーザースコープ

実行レーンはHPC管理者やユーザーに直接公開されません。 代わりに、実行時にHPCユーザーが指定できる2つの異なるモードがあります:

  • exclusive=trueは、他のジョブが同時にリソースを使用できないことを指定します。排他モードのジョブはすべての実行レーンを取得し、非排他ジョブと同時に実行することはできません
  • exclusive=falseは、他のジョブの並行実行を許可します。この場合、実行レーンの数と同数のジョブが同時に実行でき、各ジョブには1つのレーンが割り当てられます

Qiskit Runtime Service

ユーザースコープ

ユーザーは環境変数に追加のアクセス詳細情報を指定することが求められます。 具体的には以下が含まれます:

  • Qiskit RuntimeサービスインスタンスのCRN(Cloud Resource Name)
  • Qiskit Runtimeのエンドポイント(CRNから自動検出されない場合)
  • CRNへのアクセス権を持つAPIキー
  • データ転送用のS3インスタンス、バケット、アクセストークン/認証情報

これらの詳細情報により、Qiskit Runtimeサービスがどのユーザーおよびサービスインスタンスで使用されるかが決まります。 それに応じて、IBM Quantum® Platformのスケジューリングは、スケジューリングにおけるユーザーとサービスインスタンスの能力を考慮します。

現時点では、ユーザーは上記の詳細情報を自分で提供する必要があります(クラスター全体で共有された量子アクセスはありません)。

Pasqal Cloud Services

HPC管理者スコープ

PCSの使用に際して、HPC管理者側で必要な特別なセットアップはありません。

HPCユーザースコープ

ユーザーは環境変数に追加のアクセス詳細情報を指定することが求められます。 現時点では以下が含まれます:

  • ターゲットとするPCSリソース(FRESNEL、EMU_FRESNEL、EMU_MPS)
  • 認証トークン