release: v0.5.0 — version bump + changelog - #88
Conversation
Two user-facing features landed since v0.4.1, so this is a minor bump: - #80 CPU-offloaded training for plain Gefen (CPU-resident stepping, DeepSpeed ZeRO-2/3 CPU-offload, FSDP2 CPUOffloadPolicy). - #83 GefenDCPState, a new public export making plain Gefen's FSDP2 optimizer state reshardable across world sizes (closes #81). Both are additive; the CUDA same-device step path and the native state_dict/load_state_dict path are unchanged.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughWalkthroughThe package version is bumped from 0.4.1 to 0.5.0. The changelog adds release notes for CPU-offloaded training, tensor learning rates, reshardable checkpoints, and async saving, while revising the 0.4.1 entry. Changes0.5.0 Release Metadata
Estimated code review effort: 1 (Trivial) | ~5 minutes Possibly related issues
Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9fba8de239
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Addresses the Codex review on #88. All three findings were verified against the code and tests before fixing; all three were valid. - Restore the [0.4.1] section to its as-released text. #83 wrote its GefenDCPState entry into the already-published 0.4.1 section, which shipped on 2026-07-15 from e986963 -- a commit that contains no src/gefen/dcp.py. gefen-x==0.4.1 on PyPI has no GefenDCPState, so the attribution was wrong and my 0.5.0 entry duplicated it. GefenDCPState is now credited to 0.5.0 only, and the 0.4.1 section is byte-identical to e986963:CHANGELOG.md. - Drop the "resume across a device move is bit-exact" claim. The cross-device test (test_cpu_resident_step.py) asserts state co-location and a finite continuation, not bit-exactness, and test_cpu_vs_cuda_nonfused_parity documents that CPU/CUDA bit-exactness is not achievable because the grad^2 reductions use different accumulation orders. Now described as a correct, numerically close continuation. - Qualify "the CUDA same-device step path is unchanged". Values stay bit-identical, but #80 scalarizes a tensor lr on the non-fused, non-capturable path, and _lr_scalar re-reads via .item() whenever the lr tensor's identity or _version changes. An in-place LR scheduler on a CUDA tensor lr therefore now costs one D2H sync per step on that path. Documented as an explicit behavior change with the float-lr workaround.
|
Thanks — all three findings verified against the code and tests, all three valid. Fixed in 3e1656f. P2: duplicated
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: bc71da351c
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a588184275
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
With nonzero weight decay the non-fused tensor-LR path computes 1 - lr*wd on the host in double precision rather than as tensor arithmetic in the LR dtype, so the update is numerically equivalent, not bit-identical (a float16 LR rounds 1 - tiny to 1.0 on the old device path). The LR value itself is still exact.
Release prep for v0.5.0. Version bump + changelog only — no source changes.
Two user-facing features landed since v0.4.1, and #83 adds a new public export, so semver says minor:
CPUOffloadPolicyGefenDCPState— new public export making plain Gefen's FSDP2 optimizer state reshardable across world sizes (closes #81)Both are additive. The CUDA same-device step path and the native
state_dict/load_state_dictpath are unchanged.#87 (CI duplicate-run fix) also landed since v0.4.1 but is infrastructure-only with no user-facing effect, so it is intentionally not in the changelog.
Verified locally
gefen_x-0.5.0-py3-none-any.whl.Verify tag matches package versionstep reproduced verbatim against that wheel:tag=0.5.0 package=0.5.0→ pass.twine check→ passed.v0.5.0→prerelease=false(reaches the PyPI gate);v0.5.0.dev1→prerelease=true(stops at TestPyPI).Release sequence after this merges
.dev1commit off this one (version = "0.5.0.dev1"), taggedv0.5.0.dev1and pushed tofork— not merged, matching the v0.4.1 pattern. Stops at TestPyPI.scripts/release_gpu_gate.sh v0.5.0.dev1locally on two idle 3090s, zero skips.testpypi— that approval is the attestation the GPU gate passed for that exact artifact.v0.5.0on the merged commit → full pipeline → GPU gate again → approvetestpypi+pypi.0.5.0, namedv0.5.0, from this changelog entry.Summary by CodeRabbit
New Features
Bug Fixes
Chores