Nahs / examples /nash_exp /CPU_VALIDATION.md
AnhLD2610's picture
Add files using upload-large-folder tool
b29a766 verified
|
Raw History Blame Contribute Delete
6.17 kB
# CPU validation record
Date: 2026-09-20 (Asia/Bangkok).
No model weights or benchmark datasets were loaded. No GPU experiment was run.
Round 2 was implemented and its disabled-launcher guard was tested; the round
itself was not executed.
From `verl-0.7.0/examples/nash_exp`, the full test command was:
```bash
/tmp/nash-diagnostic-b-venv/bin/python3 -m pytest -q tests/diagnostic_b
```
Actual result after the author settings and boxed-answer revision: **172 passed, 10 warnings in 12.73 seconds**. The ten CVXPY
warnings report an inaccurate solver status on numerical fixtures. They are
preserved; accepted solutions must separately satisfy the declared feasibility,
certificate, and objective-gap checks. No test was skipped or weakened.
The suite covers population-standard-deviation advantages, exact original-token
segmentation, output-head/autograd identity, temperature differentiation,
held-out denominator and token-sum normalization, collision-power degeneracy and
tie-breaking, matched feasible controls, a strict Nash/Linear witness, support
identities, held-out isolation, paired prompt-cluster uncertainty, schema and
prompt validation, symbolic equivalence and parse failures, one shared generation
engine, request-level resume, cache corruption/mismatch checks, resource
preflight, configuration gates, and single-file failure logging.
The DelTA revision additionally checks the Appendix-F proxy against each
sampled output row's autograd derivative, sharing hidden coordinates across
different token IDs, weighted response/segment aggregation, production proxy
Grams and cross products, original-token prediction alignment, held-out token
sums and all-draw normalization, feature-cache geometry and checksum rejection,
geometry-specific preflight memory estimates, report labels, rejection of mixed
geometries, and reuse of generated responses when switching feature backends.
The original full-head reference and production-backend tests still pass.
The boxed-answer revision checks that the shipped prompt adds the same boxed
instruction to DAPO and held-out questions, preserves earlier DAPO messages and
the original dataset rows, and excludes reference answers. Real Math-Verify CPU
tests check nested fractions, symbolic equivalence, rejection of unboxed numbers,
selection of the final box, malformed final boxes without fallback, and escaped
LaTeX braces. Missing-setting tests now build explicitly unresolved fixtures;
they still check that configuration validation runs before external imports.
These additional checks passed:
```bash
ruff check diagnostic_b tests/diagnostic_b
ruff format --check diagnostic_b tests/diagnostic_b
python3 -m mypy --follow-imports=skip diagnostic_b
python3 -m compileall -q diagnostic_b tests/diagnostic_b
bash -n scripts/run_diagnostic_b_round1_gpu.sh scripts/run_diagnostic_b_round2_gpu.sh
```
Ruff used the parent veRL configuration. Mypy reported no issues in 14 source
files under the repository's existing configuration; that configuration ignores
errors by default outside its selected veRL modules, so this is not a claim of
strict static type coverage. Shell syntax and Python compilation checks passed.
An actual standalone CPU smoke run also completed:
```bash
/tmp/nash-diagnostic-b-venv/bin/python3 -m diagnostic_b \
--cpu-smoke --output-dir /tmp/nash-diagnostic-b-delta-smoke --resume
```
It produced compressed shared caches, direction records, CSV/JSON/Markdown/LaTeX
tables, PDF/PNG figures, and a report labeled `round_cpu_smoke`. The three-panel
scatter was visually inspected and both axes name the DelTA token-gradient proxy.
These are synthetic fixture outputs, not Qwen
results. The CLI tests additionally run smoke/resume in fresh subprocesses while
blocking imports of all model/dataset loading libraries and verify unchanged
rollout hashes and modification times on resume.
The isolated test environment used Python 3.10.12, CPU PyTorch 2.14.0+cpu,
NumPy 2.2.6, SciPy 1.15.3, CVXPY 1.7.5, Clarabel 0.11.1, pandas 2.3.3,
PyArrow 25.0.1, matplotlib 3.10.9, pytest 9.1.1, Ruff 0.12.2, mypy 1.17.0,
and Math-Verify 0.8.0. This environment was created under `/tmp`; the project
does not depend on that path for server execution.
The author selected seed 42, `sungyub/dapo-math-17k-verl`, the boxed prompt,
Math-Verify boxed-answer scoring, radius coefficient 0.4, and a requested response
cap of 32768. Dataset metadata resolved the training revision to
`3cf5c112137795c1f1d5fdae7c747871b26840a4`; no full dataset was downloaded.
A real CLI dry run with the updated Round-1 YAML stopped before external loading
with only the response/context conflict: a 32768-token response cap leaves no
space for a prompt inside the fixed 32768-token context. The requested value is
preserved pending the author's choice of a smaller fixed response cap or an
explicit remaining-context policy. Its log is
`/tmp/nash-author-settings-dry-run/diagnostic_b_round1.log`.
Real vLLM/Transformers execution, benchmark schema snapshots, memory peaks,
throughput, and measured correlations still require the author's server run.
Preflight records and checks the actual server configuration before costly
generation begins.
## Server setup validation
The simplified `scripts/setup_server.sh` has two offline Bash tests in
`tests/diagnostic_b/test_server_setup.py`: **2 passed in 1.32 seconds**.
They cover the Python 3.10 environment request, ordered editable/requirements/
vLLM/FlashAttention installs, the exact requested wheel URL, paths with spaces,
activation, reuse of an existing environment, and retry after a failed wheel
download. Package installation and wget are mocked; the Bash script runs normally.
Ruff and shell syntax checks passed. No GPU packages were installed locally.
The earlier metadata-only dependency resolution covered editable veRL, root and
experiment requirements and vLLM 0.11.0 with the existing server constraints. It
selected PyTorch 2.8.0+cu128, torchvision 0.23.0+cu128, torchaudio 2.8.0+cu128,
Transformers 4.57.6 and NumPy 1.26.4 for Python 3.10. This did not test the newly
requested FlashAttention wheel's binary imports or GPU runtime compatibility.