A proof of concept for driving an HPC-hosted quantum computer from your laptop using FirecREST v2, meaning no SSH and no hand-written batch scripts.
Usually, the QPU backend sits behind a HPC Scheduler (SLURM) and the traditional workflow is ssh->module load->write sbatch->sbatch->view result->download results for analysis. This PoC hides the HPC side actions to ideally work as python->create session->create adapter->create backend->backend.run->view result. It is powered by FirecREST which is a REST API on top of the HPC system.
ffic is the shorthand name for this meaning FiQCi FirecREST IQM Client meaning that this is targeting specifically integration with IQM Client and FiQCi quantum computers available through the LUMI Supercomputer.
git clone https://github.com/JMuff22/firecrest-fiqci.git
cd firecrest-fiqci
uv sync --extra qiskit --extra notebookThe qiskit extra pulls in Qiskit, the circuit IR this PoC serializes on the
client. The targeted QC client libraries e.g iqm-client, are not installed by this project — they
come from the fiqci-vtt-qiskit module that the SLURM job loads.
Put your FirecREST personal access token in a .env next to the notebook:
FIRECREST_TOKEN=...
Then submit a Bell state to Q50:
import os
from qiskit import QuantumCircuit
from ffic import FirecrestSession, QiskitAdapter, QuantumBackend, SbatchConfig, StaticTokenAuth
session = FirecrestSession(
url="https://api.lumi.csc.fi/v1",
auth=StaticTokenAuth(os.environ["FIRECREST_TOKEN"]),
system_name="lumi",
account="project_xxx",
working_dir="/scratch/project_xxx/<user>/firecrest",
api_version="2.5.2",
)
adapter = QiskitAdapter(device="Q50", module="fiqci-vtt-qiskit",
device_url_env="Q50_CORTEX_URL", quantum_computer="q50")
backend = QuantumBackend(session, adapter, SbatchConfig(partition="q_fiqci"))
circuit = QuantumCircuit(2, 2); circuit.h(0); circuit.cx(0, 1); circuit.measure_all()
job = await backend.submit_circuits([circuit], shots=1000)
print(await job.result())The full end-to-end demonstration lives in examples/bell_circuit.ipynb.