Model Weight Reshard Planner And Runtime Binding#
mooncake-reshard plans an address-free conversion between complete model
weight placements, then binds the selected logical regions to immutable
runtime snapshots. It does not inspect framework runtime objects or submit a
transfer.
Inputs and Output#
The source is either a complete WeightPlacementManifest or a committed
StoredWeightManifest snapshot. The target is a complete
WeightPlacementManifest. Both sides must identify the same resource,
revision, and weight generation.
The public APIs are:
plan_placement_transfer(source_placement, target_placement);plan_placement_transfer_to_local_target(source_placement, target_placement, target_participant_id);plan_stored_transfer_to_target_placement(source_manifest, target_placement).
Each API returns a LogicalTransferPlan. It contains only canonical tensor
descriptors, selected placement participants, and logical regions. It contains
no GPU address, endpoint, allocation range, lease, or backend handle.
bind_logical_transfer_plan(logical_plan, target_bindings, ...) is the second
public step. It accepts typed WeightRuntimeBindingManifest values and returns
a TransferPlan with selected runtime fragments, binding attestations, and
executor projections. A Store source is represented by a persistent
StoredFragmentSnapshot; a live runtime executor carries an ephemeral
RuntimeFragmentSnapshot for each selected fragment.
For a Store source, TransferPlan retains the authoritative canonical
StoredWeightManifest and its StoredManifestIdentity.content_sha256. Each selected
operation source is revalidated against that committed manifest during plan
construction and restore. The selected-fragment cache is derived state, so a
coordinated operation/cache mutation cannot redirect a plan to another Store
object.
N-D Regions#
Each TransferRegion represents one source/target N-D box overlap. It records
the overlap offset and shape, source and target base byte offsets, contiguous
inner_bytes, outer loop counts, and source/target byte strides.
The planner preserves a compact strided representation. It does not expand a
cross-dimension overlap into one operation per row or element. PlanningLimits
bounds the total number of regions and any later segment expansion fails closed
when it exceeds the configured limit.
Parallel Semantics#
TP changes logical boxes. The same overlap algorithm handles split, merge, and source/target sharding on different dimensions.
PP is explicit framework-provided tensor or layer ownership. Regions are grouped by source and target PP owner and optional pipeline stage; the planner does not infer ownership from a tensor name or layer-count formula.
EP is represented by a logical expert coordinate. Independent expert allocations remain independent logical fragments and are never packed or all-gathered by the planner.
DP does not change tensor geometry. A
ReplicatedAxis(kind="dp")uses a complete source replica. AnOwnershipAxis(kind="dp")routes each tensor through its declared owner and does not require every tensor on every DP rank.
All four axes are resolved by one logical-box plan, rather than by model-wide per-axis conversion passes.
Supported axes and Store API selection#
The current ParallelTopology and ParallelRank types contain TP, PP, EP, and
DP only. CP (context parallelism) is not a supported axis, and SplitAxis
accepts only TP and EP. N-D logical planning therefore does not imply support
for arbitrary named parallel strategies or CP-aware KV-cache layouts.
Store callers use the manifest-backed weight snapshot lifecycle for these
multi-axis weight placements. Legacy *_with_tp methods remain available for
ordinary TP tensor objects, but there are no corresponding CP/DP/EP/PP method
factories or *_with_config tensor methods. The former public
*_with_parallelism family was removed by
PR #3772.
See Choosing a Parallel Tensor IO API
for entry points and the distinction between parallel topology and Store
replication configuration.
Validation#
Placement construction validates the complete participant set, tensor descriptors, topology, and logical coverage before planning. Planning then fails closed when source and target tensor identity, dtype, shape, layout fingerprint, ownership, or coverage differ.
A StoredWeightManifest source is retained as an immutable logical snapshot. Its
canonical identity and selected stored fragments are revalidated whenever a
logical plan is constructed or reconstructed. This proves that the plan still
refers to the same Store snapshot; it does not make Store persistence or
runtime loading part of this layer.
Coverage validation uses an ordered interval scan for 1-D inputs and a
coordinate-compressed sweep for 2-D inputs, both with O(N log N) behavior.
For 3-D and higher logical boxes, exact intersection remains supported under an
explicit pairwise-comparison budget; inputs that exceed it fail closed rather
than making validation work unbounded.
Runtime Binding#
Binding rechecks the exact source and target placement identities, placement digests, participant selection, runtime fragment geometry, device/allocation bounds, lease generation, and declared alias scope. It rejects a reconstructed logical plan with incomplete target coverage, forged Store fragments, or conflicting physical target ranges.
The returned TransferPlan is a bound, attested snapshot. It has no execute
or submit operation. RuntimeBindingAttestation stores owner-free
RuntimeBindingEvidence: view geometry, worker/endpoint/device, backing
allocation range, lease, and generation. Framework allocation owners remain at
the runtime submission boundary, where a later Transfer Engine executor
acquires its allocation guard and revalidates bindings atomically with
submission.
Transfer Engine lowering, DMA submission, Store persistence/lifecycle, and framework activation remain outside this phase. Framework adapters own model semantics and conversion into canonical manifests; Mooncake core does not infer those semantics from framework objects or parameter names.
Reproducible Contract Benchmark#
The following opt-in benchmark measures only Python-side planning and binding contracts. It creates synthetic manifests and runtime bindings but does not allocate GPU memory, contact Store, or submit work to Transfer Engine:
PYTHONPATH=mooncake-reshard/python \
python mooncake-reshard/benchmarks/runtime_binding.py
The fixed topology is source TP4/PP1/EP1/DP2 to target
TP8/PP2/EP2/DP1: 8 source fragments, 8 target fragments, and 8 logical
operations. Only the selected source DP replica appears in the bound executor
projection. It reports medians for logical planning, runtime binding,
TransferPlan revalidation, pickle serialization and restore, binding peak
memory, and a 128-region/16,384-segment physical-validation workload. It also
compares selected and complete source projections, and records accepted and
rejected logical and physical segment budgets. Results are metadata costs only
and must not be interpreted as TE, Store, G2G, or serving end-to-end
throughput.
Store Adapter Boundary#
This phase does not accept Store with_parallelism metadata or Store keys as a
planner input. A future Store adapter must translate one committed Store
snapshot into a complete canonical StoredWeightManifest or
WeightPlacementManifest, including tensor identity and descriptor, every
logical fragment’s offset, shape, object range, and all TP, PP, EP, and DP
semantics. If Store metadata cannot represent any required fact, the adapter
must reject that snapshot; it must not infer a tensor layout from a key,
parameter name, rank, or mode="full" reconstruction.
In particular, the current Store validate_parallelism_spec() representation
accepts a TP split_dim, but an EP axis requires an expert_id and rejects a
split_dim. It cannot losslessly encode a planner
SplitAxis(kind="ep", dim=0). A Store-backed source with that layout is
therefore unsupported until the Store encoding is extended or the adapter has
an additional authoritative canonical manifest. This is an explicit
fail-closed limitation, not a request for the adapter to materialize or
all-gather a full tensor.