MinT-2M Reproduction Levels

July 24, 2026 ยท View on GitHub

The complete deployment and execution procedure is runbook.md. This file defines what each command proves.

Level 1: local contracts

python3 -m pip install -r requirements/test-cpu.txt
make check

This validates page ownership, replay bookkeeping, GRPO math, global-CP merge contracts, worker hooks, run tooling, and release metadata without loading the model.

The sanitized external validation receipts are locally inspectable without GPU dependencies:

python3 -m json.tool evidence/online_grpo_2m.json >/dev/null
python3 -m json.tool evidence/gradient_parity_32k.json >/dev/null

They establish the recorded exact-2M online update and 32K engineering parity, not reproducibility from this checkout. Their raw artifacts, runtime, model, dataset, and source binding remain external; see glm52_2m_validation.md.

Level 2: 2M payload construction

make payload-2m

This constructs deterministic Python request data for 2,097,152 tokens. It does not contact a service or serialize a complete HTTP request, and it does not run prefix capture, forward, backward, or an optimizer.

Level 3: direct-Ray plan and prerequisite proof

Generate a plan without connecting to Ray, then run the training deployment doctor. Keep a separate validation deployment for the legacy fixture-set used by the kernel/NCCL promotion stages:

export TRAINING_DEPLOYMENT_FILE=/etc/mint2m/nvidia-training.json
export VALIDATION_DEPLOYMENT_FILE=/etc/mint2m/nvidia-validation.json
make doctor-run DEPLOYMENT_FILE="$TRAINING_DEPLOYMENT_FILE"
make direct-plan TRAINING_DEPLOYMENT_FILE="$TRAINING_DEPLOYMENT_FILE" \
  INSTANCE_NONCE=nvidia-review-0001

Plan success proves only explicit 4x8 placement, unique names, configuration identity, timeout, and ownership scope. It does not create actors. Candidate execution is enabled, but make direct-train still requires a passed run-scope doctor before Ray initialization.

The profile also binds the historical fresh-actor optimizer values. Each worker must observe Adam/LR 1e-4/constant schedule and the remaining reviewed fields from the actual backend optimizer before the step; unavailable or conflicting values fail the run before weights are updated.

The checked-in candidate runner refuses altered plan/parent identities and marks a receipt passed only after validating all 32 rank reports, placement, artifacts, optimizer invariants, unchanged source, and cleanup. Missing runtime, licensing, or input prerequisites stop the current checkout before Ray without disabling the reviewed backend implementation.

Once the external image, authorization, fixture, and 32x H20 gates are accepted, the same training flow can be run as one command:

mint2m-nvidia-run \
  --deployment "$TRAINING_DEPLOYMENT_FILE" \
  --instance-nonce "nvidia-$(date -u +%Y%m%dT%H%M%SZ)"

# Source-checkout equivalent:
make nvidia-run \
  TRAINING_DEPLOYMENT_FILE="$TRAINING_DEPLOYMENT_FILE" \
  INSTANCE_NONCE="nvidia-$(date -u +%Y%m%dT%H%M%SZ)" \
  PLAN_FILE=/outputs/mint2m/direct-plan.json \
  OWNERSHIP_FILE=/outputs/mint2m/ownership.json

The 2M profile is machine-readable at configs/run/glm52_2m_grpo_cp32.json.

Level 3a: doctor, single-GPU kernel, and 32-GPU NCCL receipts

For the first three promotion stages, use a release-owner supplied validation plan and keep all generated evidence outside the checkout:

export VALIDATION_PLAN=/operator/input/validation-plan.json
export VALIDATION_RUN_ID="$(python3 -c 'import uuid; print(uuid.uuid4())')"
export EVIDENCE_DIR="/operator/evidence/$VALIDATION_RUN_ID"
export TILELANG_CACHE_DIR=/operator/cache/tilelang
export NCCL_MASTER_PORT=29500
export NCCL_SOCKET_IFNAME=eth0
# Optional example; omit when no explicit HCA selector is required.
# export NCCL_IB_HCA=mlx5_0

make doctor-validation \
  VALIDATION_DEPLOYMENT_FILE="$VALIDATION_DEPLOYMENT_FILE" \
  VALIDATION_PLAN="$VALIDATION_PLAN" \
  VALIDATION_RUN_ID="$VALIDATION_RUN_ID" \
  EVIDENCE_DIR="$EVIDENCE_DIR"
make kernel-smoke \
  VALIDATION_PLAN="$VALIDATION_PLAN" \
  VALIDATION_RUN_ID="$VALIDATION_RUN_ID" \
  EVIDENCE_DIR="$EVIDENCE_DIR" \
  CUDA_DEVICE=0 TILELANG_CACHE_DIR="$TILELANG_CACHE_DIR"
make nccl-smoke \
  VALIDATION_DEPLOYMENT_FILE="$VALIDATION_DEPLOYMENT_FILE" \
  VALIDATION_PLAN="$VALIDATION_PLAN" \
  VALIDATION_RUN_ID="$VALIDATION_RUN_ID" \
  EVIDENCE_DIR="$EVIDENCE_DIR" \
  NCCL_MASTER_PORT="$NCCL_MASTER_PORT" \
  NCCL_SOCKET_IFNAME="$NCCL_SOCKET_IFNAME" \
  NCCL_IB_HCA="${NCCL_IB_HCA:-}"

The plan binds source/runtime-lock/image identities, and the TileLang cache is an explicit precompiled input. Doctor writes the four doctor-* files; kernel writes kernel-smoke.json, kernel-ranks.json, kernel-artifacts.json, and kernel-validation.json. NCCL requires that exact parent and writes nccl-smoke.json, nccl-ranks.json, nccl-artifacts.json, and nccl-validation.json. Exit 0 means the complete identity-bound bundle was accepted. Exit 2 means blocked or invalid prerequisites and must stop the chain. Promotion remains ordered doctor -> kernel -> NCCL -> actor -> 32K -> 64K -> 2M.

For NCCL, start the four target Ray worker cluster processes themselves inside the same immutable image digest with GPU devices attached. Each target advertises mint2m_image_<64hex>=1 (digest hex without sha256:); Ray supplies its node:<ip> resource. The launcher permits unrelated nodes, but each deployment target IP must have exactly one live Ray record, exactly 8 GPUs, at least 8 CPUs, and both node and digest resources before placement. Every bundle binds those two resources. NCCL actors do not use runtime_env.image_uri, avoiding a nested Ray 2.51.1 Podman launch without GPU flags.

Make NCCL_MASTER_PORT (default 29500) reachable over the required NCCL_SOCKET_IFNAME, and set optional NCCL_IB_HCA only when the fabric needs an explicit selector. The deployment's absolute runtime_identity path must resolve in the driver and at the same path inside every target worker cluster image with the same bytes. CLI pre/post hashes and all 32 rank hashes must agree. The bounded run is expected to take 5-10 minutes on a healthy cluster after image pull; a blocked attempt can consume the fixed launcher timeout. Rank, collective, runtime, fabric, and cleanup acceptance are independent; a process exit alone is insufficient. The launcher performs automatic cleanup, while a hard driver loss requires explicit cleanup of only the mint2m-nccl-$VALIDATION_RUN_ID namespace before retrying.

There is currently no live 32-GPU NCCL receipt in this checkout. 5.4 implementation does not make the release runnable; this level is a reproducible operator contract until current-tree H20 evidence and the other release gates pass. The candidate actor path is checked in and enabled for those validation runs.

Level 4: ordered numerical correctness

The required promotion order is doctor, single-GPU kernels, 32-GPU NCCL, direct actor materialization, 32K parity, 64K parity, then 2M. The commands are not advertised as runnable until authorization, the immutable image, approved fixtures, and current-tree evidence are accepted. The predecessor private commands remain available only as legacy-parity-* targets for internal comparison:

make legacy-preflight-all PREFLIGHT_PROFILE=configs/run/glm52_32k_grpo_cp32.json
GLM52_CONFIRM_LIVE=1 make legacy-parity-forward-32k \
  RUN_DIR=artifacts/parity-forward ROLLOUT_JSON=/shared/real-rollout.json
make legacy-preflight-all PREFLIGHT_PROFILE=configs/run/glm52_32k_grpo_cp32.json
GLM52_CONFIRM_LIVE=1 make legacy-parity-gradient-32k \
  RUN_DIR=artifacts/parity-gradient ROLLOUT_JSON=/shared/real-rollout.json

The full gate compares every trainable LoRA shard and exits nonzero when any logprob, loss, gradient cosine, relative-L2, zero-mask, or nonfinite threshold fails. After 32K passes, run the corresponding parity-forward-64k and parity-gradient-64k targets with the 64K profile and rollout. A 2M execution run is not a substitute for these bounded correctness gates.

Rollout fixture contract

{
  "prompt_tokens": [1, 2, 3],
  "responses": [[10, 11, 12], [20, 21, 22]],
  "rewards": [-1.0, 1.0],
  "old_logprobs": [[-2.0, -3.0], [-2.5, -3.5]],
  "ref_logprobs": [[-2.1, -3.1], [-2.6, -3.6]]
}

Every response must contain at least three tokens for the active-clip parity case, and token-level old/reference arrays must contain response_tokens - 1 values. The fixture must match the exact policy and base-model revision used to produce it.