Repository navigation
♻️ Centralize QDMI Slurm integration in a shared playground - #2599
Conversation
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
|
@burgholzer requesting early feedback (not a full review yet) |
There was a problem hiding this comment.
Thanks @flowerthrower 🙏🏼 Finally managed to take this for a spin. You'll find the output of that below and in the other PRs of this stack. I feel pretty confident that this should not need too many more iterations. I hope the feedback generally makes sense (to you, and also your agent).
🤖 AI text below 🤖
Early feedback on 6ca99547, consolidated across this stack with separate design, Docker, and Slurm reviews.
The ownership boundaries are sensible: Core owns static selection and the shared fixture; the standalone SPANK component transports configuration; providers own their installation, catalogues, credentials, and workloads. Keep the standalone build, source-only GPL boundary, distinct reference options, job identity, and daemon-environment isolation.
The main recommendations are to narrow injection to the same single local unit license supported by Core, decouple provider compilation from the changing Core image, and reduce repeated or ineffective fixture checks. The inline comments give concrete changes and the coverage to retain. The single-license recommendation deliberately reduces supported injection behavior; it should be documented as such.
For the operations guide, describe the actual deployment roles:
- Submission/login nodes need Slurm clients and the matching SPANK module/configuration.
- Compute nodes need
slurmd, cgroup v2, SPANK, and the selected workload environment. Use consistent numeric identities and readable catalogue/library paths, either through shared storage or identical installations. - The controller owns scheduling and cluster-wide license counts; it does not need provider SDKs. Persistent accounting can use
slurmdbd, but the fixture's local static licenses do not require it. - Provider credentials remain part of the job context.
One pre-existing correction fits this guide cleanup: SelectTypeParameters=CR_CPU does not provide the allocation-based RAM enforcement described here. Use an appropriate CR_*_Memory configuration when enabling those memory constraints (SchedMD reference). Describe the privileged Docker setup as a fixture for rootful Docker on a disposable Linux cgroup-v2 host.
I would keep the inexpensive runner tests and the failure/cleanup checks. Provider wheels in native mode are also intentional: the Python adapters need them while the catalogue selects the native library. Avoid expanding this into a new provider-image framework.
Validation for this review: the 22 lightweight runner tests passed at this head. Source inspection and focused probes support the specific findings; no full Docker cluster rerun was performed. This is early design feedback, not an approval or a request-changes review.
|
@coderabbitai review |
✅ Action performedReview finished.
|
📝 Summary
|
🤖 AI text below 🤖
Description
Provide a shared HPCQC playground in
examples/slurm: login submission, scalable classical and quantum access nodes, and persistent SlurmDBD/MariaDB accounting. Every QAN connects to all configured devices through QDMI. One environment and catalogue serve all implementations; shared application files connect classical and quantum workflow stages.Keep scheduler policy in the playground. A bounded, quiet Python probe uses the ordinary QDMI API to update license-only reservations. Operational devices admit new allocations; failed checks withhold their licenses. User and monitor credentials remain separate. Availability is a snapshot, and controller communication failures require administrator attention.
Docker builds the checked-out MQT Core source with setup-mlir and installs additional PyPI, Git, or local-source packages through uv. The private MQT Core wheel uses version 4.1.0 and includes Qiskit/PennyLane extras. Device wheels provide their native libraries and catalogues, so no separate native mode or catalogue-generation callback is needed. Build tools stay outside the runtime image. Linux Docker Engine and macOS Docker Desktop use the same setup.
One Slurm guide covers cluster startup, device configuration, job submission, monitoring, accounting, and site deployment. Its topology shows the shared filesystem, QDMI interface, and individual device connectors. Single-device jobs derive their catalogue ID from one local Slurm license; applications using several devices pass explicit IDs to independent driver sessions. The scientific workload remains a separate application.
API removal: MQT Core 4.0 shipped
mqt.core.qdmi.slurm.open_device_from_license()andqdmi::slurm::openDeviceFromLicense()/qdmi/Slurm.hpp. Callers must pass their device ID tobuiltin_driver.open_device(id)orqdmi::builtin_driver::openDevice(id)and request the matching Slurm license. The native checker, Python entry point, adapters, and their dedicated build/test machinery are removed. No SPANK plugin is required.Closes #2310, closes #2311, closes #2312. Addresses #2360 and supersedes the SPANK direction in #2366/#2313; incorporates #2600/#2601. IQM #265 and Braket #237 use the shared deployment. Richer readiness studies and release pins remain separate.
Validation
974e4fdc8561bd92b241c207546331ba9b4deb3a; all three PR bases are current.Codex assisted implementation, specialist review, tests, and documentation. Human review and acceptance are pending.
Checklist
If PR contains AI-assisted content:
🤖 *AI text below* 🤖(titles are exempt).