Skip to content

PennyLane Backline: QPM Prototype - allocate QEC controllers, decoders and transports per reservation - #1

Closed
josephleekl wants to merge 8 commits into
mainfrom
backline-qpm
Closed

josephleekl wants to merge 8 commits into
mainfrom
backline-qpm

Conversation

@josephleekl

@josephleekl josephleekl commented Oct 8, 2026 •

Copy link
Copy Markdown
Owner

Adds svc_backline_qpm, a QPM service (backline-local) that grants quantum reservations and also allocates the classical QEC resources a program requests: controller, decoder and transport. For each reservation it starts a catalyst-executor with those components loaded. The program compiles locally with Catalyst and runs on the executor named in the returned placement. No changes to QFw core services.

  • svc_qpm.py: UTIL_QPM subclass. reserve handles three request types:
    • no resource_intent: quantum-only reservation (the qfw-slurm gateway path);
    • for_reservation + resource_intent: classical request against an existing reservation. It must be active and not yet placed, and come from the same owner and job;
    • resource_intent only: quantum and classical in one call.
  • matcher.py:
    • Matches a versioned resource intent against the site inventory, in order: QEC code → controller → decoder, transport and latency → free capacity.
    • Rejects with reason codes (unsupported-qec-code, no-matching-controller, capacity-exhausted, …).
    • Returns a placement: controller device, decoder symbol and library, transport, executor address.
  • inventory.yaml: default inventory with a CPU controller on null.qubit, the CPU Steane decoder from the Catalyst wheel, and memcpy. Override with QFW_BACKLINE_INVENTORY.
  • executors.py:
    • Starts one catalyst-executor per reservation, with the Catalyst runtime, controller-device and decoder plugins.
    • Stops it on release, expiry, shutdown, SIGTERM or process exit, killing the whole process group.
  • svc_qrc.py: refuses QRI execution calls, since programs run on the placement, not through QRI.
  • qpm_selection.py, local-services.yaml, site-services.yaml: register provider backline and the backline-local service.
  • Limitations:
    • One executor per reservation, on the QPM host.
    • memcpy only; RDMA endpoints are rejected.
    • One classical request per reservation.

Dependencies

  • No other PR has to merge first. Deploying it on the cluster is the companion QFw-SLURM-Cluster PR (Backline QPM node and --qpu=backline-local).

A client-executed QPM. reserve() matches a resource_intent against the
site inventory, commits the reservation through UTIL_QPM, and returns the
placement the client builds its Backline nodes from. get_reservation()
carries the placement while the reservation is active; release() and
expiry free the inventory entries. Execution calls are refused.

No changes to QFw core.
@josephleekl josephleekl changed the title Backline qpm Add Backline QPM: allocate QEC controllers, decoders and transports per reservation Oct 9, 2026
@josephleekl josephleekl changed the title Add Backline QPM: allocate QEC controllers, decoders and transports per reservation Add Backline QPM Prototype: allocate QEC controllers, decoders and transports per reservation Oct 20, 2026
@josephleekl josephleekl changed the title Add Backline QPM Prototype: allocate QEC controllers, decoders and transports per reservation PennyLane Backline: QPM Prototype - allocate QEC controllers, decoders and transports per reservation Oct 20, 2026
@josephleekl

Copy link
Copy Markdown
Owner Author

Moved to openQSE#159

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant