Expand description
The training source: materialise a spec into a local tree, then build it there. Never build from a mount, and never lose an mtime. The training source: a spec, a local tree, a build.
A box that compiles its own training binary links against the exact libtorch it holds, which is what makes the ABI match by construction rather than by manifest discipline. It needs the tree on LOCAL disk first: cargo fingerprints by stat’ing every source file on every invocation, so building over a network mount pays that latency thousands of times before a line compiles, and the attribute caching that would fix the latency makes cargo miss real changes and hand back a stale binary.
So a mount is a transport for the fetch, never a compile location, and every spec lands the same way: materialise into a local directory, then build there. One code path, which is why the dev loop is exercised by the production path instead of being a second mode.
The fetch must preserve mtimes. A copy that stamps every file
fresh makes cargo rebuild everything, so the loop silently degrades
to cold builds while still looking incremental. rsync -a preserves
them; a git fetch plus checkout only writes what changed. Both
behave, and nothing else here is allowed to.
Structs§
- Built
- A built training binary and the directory it expects as cwd.
- Manifest
- The controller’s answer to “what is this run”, written beside the source it published and read by every box that fetches it.
Enums§
- Source
- Where a source tree comes from.
Constants§
- MANIFEST_
FILE - File name of the run manifest, at the root of a published tree.
Functions§
- build
- Build the tree and hand back the binary.
- build_
env - The environment a build recipe gets: the same names an
fdl.ymlcommands.runline already relies on, so a recipe that works there works here. - check_
build - Run the recipe for the compile alone, no artifact check — the shape
an extra publish gate wants: its
CARGO_TARGET_DIRpoints somewhere thebin:convention does not, and success IS its whole verdict. - materialize
- Put the tree at
dest, preserving mtimes. Idempotent by construction: both resolvers are incremental refreshes, so a re-dial costs the changed files and nothing else. - parse
- Parse a source spec.