Repository navigation
Support source-based AutoML installation and development branches - #291
Conversation
Signed-off-by: Ramanathan Arunachalam <rarunachalam@nvidia.com>
Signed-off-by: Ramanathan Arunachalam <rarunachalam@nvidia.com>
lfengad
left a comment
There was a problem hiding this comment.
A few concerns about backward compatibility of the existing AutoML controller launch path. Details inline.
Keep controller startup observation opt-in, validate allocation and action inputs before helper execution, and make bootstrap failure/signal exits explicit without EX_TEMPFAIL requeue signaling. Preserve direct exec and the run/resume allowlist. Clarify the compatible core version, source access, immutable provenance, and wheel alternative in the missing-engine diagnostic and guides. Validated 46 local shell/process scenarios, 14 existing CPU adapter tests, CLI help and missing-engine diagnostics, structural planning, both full GitHub pre-commit configurations, frozen lock consistency, skill discovery, and 50 local documentation links. No SLURM allocations, GPU training, or paid calls were launched. Signed-off-by: Ramanathan Arunachalam <rarunachalam@nvidia.com>
|
New conflicts might be resolved. Thanks! |
Retain main's pinned uv 0.11.29 resolver, dependency constraints, and lockfile while preserving the reviewed AutoML source-install instructions and compatible core extras. Keep the existing CLI and controller lifecycle changes unchanged. Validation: 117 AutoML/helper tests, changed-file base and standard pre-commit checks, offline uv lock check, CLI help, shell syntax, source archive and wheel builds, and semantic dependency/lock comparisons passed. Signed-off-by: Ramanathan Arunachalam <rarunachalam@nvidia.com>
|
Thanks for the PR. Two things I'd like confirmed before merge. 1.
2. This template was only added in #288 (2026-10-17), so there is little prior usage, but anyone who copied it already would see differences:
|
Document commit-pinned installs, isolation of historical development-wheel environments, and the existing build-specific H100 SFT evidence. Preserve zero-padded decimal allocation caps without changing CLI argv or weakening cap guards. Add 69 observer and batch-process regression cases and a CPU-only GitHub workflow. Validation: 172 helper tests in a fresh minimal venv, 14 Framework adapter tests, and 28 installed-core tests passed; changed-file pre-commit, Ruff, lock, shell syntax, and documentation-link checks passed. No GPU or SLURM jobs launched. Signed-off-by: Ramanathan Arunachalam <rarunachalam@nvidia.com>
|
Addressed in 1b1c1bd. Replying point by point to the new review: 1. Core version and reproducibility
2. Batch compatibility and observer coverage
Validation: 172 helper tests (including 69 new cases) passed using the CI command in a fresh Python 3.12 venv with only pytest/jsonschema and their dependencies; 14 adapter tests and 28 installed-core tests also passed. Changed-file pre-commit, Ruff, lock consistency, shell syntax, and documentation-link checks passed. The new observer/batch tests use mocked scheduler/controller children; no new GPU/SLURM jobs were launched for this revision. |
|
Related follow-up to #277 / remaining coverage from #155: automatic HF export for LoRA runs. I checked the latest head ( This matters when LoRA is enabled together with this callback—for example, the VideoPhy Edge experiment already enables automatic HF export ( Could you please cover this as well, either here if appropriate or in a small follow-up PR? #155 contains a proposed callback-side implementation that could be adapted to the current LoRA utilities rather than duplicating the core LoRA support. Suggested coverage:
This is a code-path finding, not a new GPU reproduction. It is inherited from the current base, not introduced by this source-install/setup PR; a separately tracked fix would be fine. |
|
Hi @ramanathan831, while syncing this repo with i4 we found a small issue in The learning-rate backoff takes effect one update late when a scheduler is present. In In the scheduler branch of The existing tests don't catch it because Suggested fix (we verified it in i4): also rescale the current param-group rates in that branch. schedulers = _real_schedulers(scheduler)
previous_scale = self._lr_scale
...
if schedulers:
for sched, bases in zip(schedulers, self._base_lrs):
sched.base_lrs = [base * self._lr_scale for base in bases]
# The scheduler already stepped for this update, so its next recompute comes
# after it. Rescale the current rates too, so the backoff applies right away.
for opt in _real_optimizers(optimizer):
for group in opt.param_groups:
group["lr"] = group["lr"] * self._lr_scale / previous_scale
returnAnd a regression test that follows the trainer's order. It fails without the fix: def test_lr_backoff_applies_to_the_next_update():
model, optimizer, scheduler, callback = _harness()
def trainer_step(grad_scale): # ImaginaireTrainer order
for parameter in model.parameters():
parameter.grad = torch.full_like(parameter, grad_scale)
callback.on_before_optimizer_step(model, optimizer, scheduler, None)
optimizer.step()
scheduler.step()
callback.on_before_zero_grad(model, optimizer, scheduler)
optimizer.zero_grad(set_to_none=True)
for _ in range(20):
trainer_step(0.01)
trainer_step(10.0)
assert callback.rollbacks == 1
# The rate the next optimizer.step() uses, before any further scheduler.step().
assert optimizer.param_groups[0]["lr"] == pytest.approx(0.01 * 0.8 * 0.5)The callback is disabled by default, so only runs that enable it are affected. Thanks! |
|
Confirmed the delayed-backoff report, and implemented the fix in #307 (45be0ce). The guard now updates both scheduler base rates and the current optimizer-group rates by Both existing step helpers now follow the actual trainer order. Before changing the implementation, three new cases failed: constant schedule, decaying schedule, and multiple optimizers/groups. After the fix, all 17 rollback tests pass, including an optimizer pre-step hook that records the rate actually consumed by the next update. The tests also cover recovery and the no-scheduler path, and now join the existing L0 CI selection. Changed-file Ruff, both pre-commit configurations, and Pyrefly passed. These are optimizer/callback regression tests, not a new full training run. The callback remains disabled by default. As suggested, this is a separate follow-up against main because the bug is inherited from #277 rather than introduced by #291. |
|
Confirmed the automatic LoRA export report, and implemented the fix in #308 (7a54b49). The separate offline exporter already merges adapters; the gap was the automatic callback. The callback-side approach from #155 is adapted to the current Validation covers each requested point:
The tests use a tiny randomly initialized Qwen2 model and local safetensors; this is not a full WTS/VLM training rerun or remote-upload qualification. The inherited training fix is in its own follow-up, keeping #291 focused on source installation. |
lfengad
left a comment
There was a problem hiding this comment.
Approving this PR. Please track the automatic LoRA HF-export merging gap raised in #291 (comment) as a separate follow-up; it is inherited from the base and is not a blocker for this source-install/setup change.
|
Following up on the approval review: #308 is the separate follow-up for the automatic LoRA HF-export gap, targeting The follow-up covers the requested behavior: merge LoRA/RSLoRA updates into independent dense export tensors, omit the corresponding adapter-only keys, preserve live training weights and ordinary non-LoRA exports, and keep FSDP collectives ordered consistently across ranks. See the implementation and coverage reply. I rechecked the saved results against that exact head: the 2026-10-23 CI reproduction passed all 23 focused CPU cases and both two-rank H100 export/reload cases. The broader GPU-workflow selection recorded 769 passes; its sole failure was the separate |
Summary
NVIDIA-TAO/tao-automl'spackages/automl-coresource installation the documented AutoML setup, usingmainby default with an explicit named-development-branch override. A published core wheel and a persistent TAO checkout are not prerequisites.mainor a user-supplied development branch. Preserve resolved commits/build identities for existing experiments; never silently fall back to another branch or upgrade on resume.nvidia-automl-core==0.1.0, without changing either repository's package version. Explain why the separately publishednvidia-tao-automlapplication is not the same distribution.gepa==0.1.2requirement directly in Framework's prompt extra, update the lockfile, and retain explicit post-sync installation /uv run --no-syncso ordinary Framework setup does not fetch AutoML source.Validation
codex/repository-neutral-automlatbd21cbd3a6aa24e3277c0d232dab1614f935c03e: confirmednvidia-automl-core==0.1.0, recorded Git provenance, and compatible core/GEPA dependencies.python -m pytest -o addopts='' --confcutdir=tests/automl tests/automl— 14 passed.git diff --checkpassed.Scope
This is package/setup/skill validation, not GPU end-to-end validation. No training jobs, paid LLM requests, or full CUDA-environment installation were run for this change. No new unit-test suite or package release is introduced. Optional CPU-startup observer assets and backward-compatible controller-template guards are included; this PR does not change the core search/recovery-ledger implementation.
Review follow-up (2832a95)
AUTOML_STARTUP_HELPER. An opted-in failure never falls back silently.run/resume; handle bootstrap signals/failures without leaking EX_TEMPFAIL into site automatic-requeue policies.