Download docs/BOUNDARIES.md from Snapkitty/tensor-roll: direct link, hf CLI and curl.
- Browser
- Download file 11.9 kB
-
https://huggingface.co/Snapkitty/tensor-roll/resolve/main/docs/BOUNDARIES.md
- Command line
-
hf download hf://Snapkitty/tensor-roll/docs/BOUNDARIES.md
-
curl -L -o BOUNDARIES.md https://huggingface.co/Snapkitty/tensor-roll/resolve/main/docs/BOUNDARIES.md
Tensor Roll β process / IR boundaries
Copyright (C) 2026 SnapKitty Collective β AGPLv3.
This document states exactly where one execution domain ends and another begins. There are three boundaries that matter; none of them is a wrapper around an existing framework, and none of them is invented.
1. Classical dispatch boundary: TensorRoll β GEMM vs quantum candidate
Location: tensor_roll/core.py β dispatch_matmul() and
evaluate_options() / qsim_encode_for_roll.
The recursive operator TensorRoll(T, axis, depth, rank, quantum_policy)
partitions a tensor and evaluates candidate representations per leaf.
Ordinary candidates (PRESERVE / QUANTIZE / FACTORIZE / MERGED / ROUTED /
RECONSTRUCTED / PRUNED) execute as NumPy on CPU and every report labels
them backend: cpu-numpy.
A leaf is eligible for the quantum path only when all of these hold:
quantum_policy != "off"(CLI:roll --quantum-policy, default fordemoisexplore),- the leaf block has at most
QUANTUM_ELIGIBLE_MAX = 256elements (8 qubits β an honest near-term register size), - a qsim encoder is supplied.
Eligible leaves gain QUANTUM-ENCODED / RECONSTRUCTED / ROUTED candidates
whose numbers come from the real statevector simulator in
tensor_roll/qsim.py. Their reports are labeled
backend: qsim-classical, device: cpu (statevector simulator).
That label is the boundary: it is classical linear algebra (complex128
statevectors, explicit unitary application, Born-rule sampling), never a
QPU, and it never claims to be one.
On a machine with the NVIDIA CUDA-Q toolchain, the same kernel family in
cudaq/tensor_roll_kernels.py can execute for real
(run_smoke() targets qpp-cpu); on this machine the import fails and the
module prints unavailable instead of pretending.
2. CUDA-Q β Q# boundary: serialized trace artifact (real, not an API)
There is no direct CUDA-Q β Q# linkage β the two toolchains do not share
an in-process API, and inventing one would be fabrication. The real
boundary is a serialized artifact produced by tensor_roll/boundary.py:
trace_for_kernel(kernel, n_qubits, angles, depth)builds the gate-level IR: the exact gate sequence (ry/cnot/measure/reset) that bothcudaq/tensor_roll_kernels.pyandqsharp/TensorRoll.qsimplement. Each gate carries its QIR op name (__quantum__qis__ry__body, β¦) so the trace maps 1:1 onto QIR when both vendor toolchains are present.write_trace(path, ...)writes{sha256, trace}JSON: schema version, kernel name, qubit count, shots, the gate list, the measurement counts, producer label, and timestamp.read_trace(path)refuses the file if the SHA-256 does not match or the schema is wrong.counts_to_amplitudes(trace)is the shared classical reconstruction estimator (amplitude = sqrt(count/shots)) β classical by construction on every side of the boundary.
Data flow:
CUDA-Q process (cudaq/tensor_roll_kernels.py)
β executes kernels (needs CUDA-Q toolchain + target)
βΌ
boundary.json {gates, counts, sha256} <-- the boundary: a file
β²
Q# toolchain (qsharp/TensorRoll.qs)
β implements the same gate sequence; reads/writes the artifact
tensor-roll qkernel writes qkernel/boundary.json on every run and
immediately re-reads it to prove the round trip. Corrupt the file and the
reader rejects it β verified by the test suite.
What is NOT claimed: at no point does tensor-roll convert CUDA-Q objects to Q# objects in memory. The handoff is serialization, honestly labeled.
3. Sandbox boundary: supervisor β untrusted child
Location: tensor_roll/sandbox.py, exercised by tensor-roll sandbox.
- The child runs in its own session/process group (
start_new_session), with rlimits (address space, CPU, file size, process count), a filtered environment (onlyPATH/LANG/TZ/HOMEsurvive), andcwdpinned to a jail directory. - Policy: absolute paths must resolve inside the jail; the binary must be
on an allowlist or not on the denylist (deny wins). Network namespaces
are entered via
unshare(CLONE_NEWNET)when the kernel permits it β probed at startup and reported (netns_available=True/False); on this machine the probe passes, soqkernel-adjacent untrusted code genuinely loses network access. - Every spawn, policy verdict, timeout, and signal is appended as JSONL to
sandbox/audit.log.
Signals: on timeout the supervisor kills the whole process group
(killpg(SIGKILL)), then reaps strays the same way. The audit log records
which.
4. What runs where (summary table)
| Component | Executes on | Label in reports |
|---|---|---|
| Tensor math, training, search | NumPy / CPU | cpu-numpy |
| Quantum kernel candidates | classical statevector sim | qsim-classical |
| CUDA-Q kernels | NVIDIA toolchain (absent here) | unavailable here |
| Q# operations | Q# toolchain (absent here) | unavailable here |
| CUDA-Q β Q# handoff | serialized boundary.json |
sha256-verified |
| Untrusted subprocesses | sandboxed child | audit-logged |
If a row says unavailable, no number was invented for it β the CLI
prints unavailable and the docs say what hardware would change that
(see docs/ARCHITECTURE.md).
Integration state (failure-resolution audit, 2026-09-29)
Finding: file-mediated. The CUDA-Q β Q# handoff in this repository is a
checksummed serialized JSON trace artifact on disk β not a direct in-process
API, not live QIR/MLIR bitcode exchange, and not process-to-process RPC.
Vendor-toolchain execution on this machine is additionally source-only:
CUDA, CUDA-Q, and Q# all probe UNAVAILABLE here, so no vendor kernel has
ever executed on this box. The file artifact itself round-trips for real
(tensor-roll qkernel writes qkernel/boundary.json and re-reads it;
test_trace_roundtrip corrupts it and watches the reader refuse).
Candidates considered and rejected:
- direct β rejected.
tensor_roll/boundary.pystates the two toolchains "do not share an in-process API", and no code path converts CUDA-Q objects to Q# objects in memory. - IR-mediated (true QIR/MLIR bitcode) β rejected for this machine.
boundary.pynotes "True QIR/MLIR bitcode exchange requires both vendor toolchains installed"; neither is installed, so the QIR op names carried on each gate (__quantum__qis__ry__body, β¦) are a mapping specification, not an executed exchange. - process-mediated β rejected. No live RPC exists between a CUDA-Q process and a Q# process; the handoff is a file both sides can write/read.
- file-mediated β ACCEPTED. Evidence below.
- source-only β true of execution on this machine (see probes), but
the integration mechanism itself is richer than source-only: the trace
artifact is really written, checksummed, read, and verified on every
qkernelrun via theqsim-classicalpath.
File/line evidence (from tensor_roll/doctor.py::integration_state()):
tensor_roll/boundary.py:7β "an in-process API. The real boundary used by tensor-roll is a serialized," [no direct linkage; artifact, not API]tensor_roll/boundary.py:8β "checksummed, versioned artifact containing:" [integrity-checked artifact]tensor_roll/boundary.py:20β "True QIR/MLIR bitcode exchange requires both vendor toolchains installed;" [true QIR/MLIR exchange needs toolchains]tensor_roll/boundary.py:57βdef trace_for_kernel(...)[gate IR constructor: the single source of truth both kernel families implement]tensor_roll/boundary.py:102βdef write_trace(...)[trace is WRITTEN to disk as{sha256, trace}JSON]tensor_roll/boundary.py:130βdef read_trace(...)[trace is READ from disk; checksum/schema mismatch raises]tensor_roll/cli.py:291βbpath = os.path.join(wdir, "qkernel", "boundary.json")[CLI writes the file artifact]tensor_roll/cli.py:296βback = BD.read_trace(bpath)[CLI verifies the round trip immediately]cudaq/tensor_roll_kernels.py:9β "These kernels are NOT executed by the tensor-roll CLI on machines without" [the CUDA-Q toolchain]cudaq/tensor_roll_kernels.py:28β_HAS_CUDAQ = False[toolchain-absent fallback path]qsharp/TensorRoll.qs:13β "NOTE: not compiled or executed in this repository's test environment" [source-only on this machine]
Live probes on this machine (tensor-roll doctor, 2026-09-29):
- CUDA: UNAVAILABLE β no nvidia-smi on PATH, no
/dev/nvidia*devices. - CUDA-Q: UNAVAILABLE β no toolchain (
ModuleNotFoundErrorfrom a neutral directory; the repo-localcudaq/directory is a namespace package of kernel source, not the NVIDIA toolchain). - Q#: UNAVAILABLE β no toolchain and no
dotnet; the repo-localqsharp/directory is operation source, not an installed toolchain. - GPU: NONE. CPU (NumPy) executes for real and passes.
What would change this determination: installing the NVIDIA CUDA-Q toolchain and a Q# toolchain would move the execution rows from source-only to executed, but the integration state would remain file-mediated until a real QIR/MLIR bitcode handoff (not just a JSON trace carrying QIR op names) is demonstrated between the two toolchains.
Failure-resolution modules (2026-09-29)
Out-of-core boundary (tensor_roll/ooc.py)
The streaming path never confuses "addressable" with "in RAM":
- A
VirtualManifestcarries shapes, dtypes, and byte offsets only.reader()raisesRuntimeErrorβ there is no silent path from a virtual manifest to weight data. MappedTensor.viewis annp.memmapview;TensorWindow.datamaterializes only the window.RollWorkspaceaccounts the logical working set against an explicit ceiling and raisesMemoryBudgetExceededpast it. Measured: virtual 30B planning peaks at 35MB RSS β the bound is demonstrated, not asserted.StudentWriterchecksums every emitted tensor (SHA-256);verify()re-hashes on resume and refuses mismatches. Checkpoints are JSON + SHA-256 with atomic replace; corruption is refused, never loaded.- The
.npzrepack path reads one array at a time into the shard format;.safetensorsis windowed in place via mmap with zero copy.
Planner boundary (tensor_roll/planner.py)
plan()lands the allocation on the requested target (β€ 8.0B by default) and never above the 8.5B hard cap. Sensitivity is measured from sampled windows (calibrate_sensitivity) or documented as uniform 0.5 when no data exists β the planner degrades to a uniform ratio rather than inventing sensitivity.- The 30B STRUCTURAL SCALE TEST label is load-bearing: it certifies storage addressing and planning under bounded RAM, and explicitly does not certify model quality. Actual 30B weights: NOT TESTED.
Fidelity boundary (tensor_roll/fidelity.py)
divergence_trace()measures on teacher-forced contexts so model divergence is isolated from context drift; free-run agreement (the 3/24 number) is reported separately and never mixed with it.fidelity_aware_select()applies the divergence penalty uniformly to every decision class from measured (sensitivity, reconstruction error). Quantum-gated options are scored from their own qsim-measured errors β the penalty cannot prefer or punish a backend beyond what the measurements say.- Ablations replace student components with shape-aligned teacher weights and report Ξagreement/ΞKL; components that cannot be aligned are skipped and reported as skipped, not zeroed.
INT4 boundary (tensor_roll/quant.py)
- Scheme choice (per-tensor / per-channel / group-wise) is the argmin of measured MSE per tensor, never a hard-coded default.
recovery_train()reports PPL before training, after training, and after requantization; "improved" is a measured boolean, not a claim.