mirror of
https://github.com/Helldez/BigMoeOnEdge.git
synced 2026-10-19 07:23:46 +00:00
docs(changelog): close 0.24.0
Some checks failed
Some checks failed
Dates the section, and puts it back in the order the file's own header claims to follow: Added, Changed, Fixed, with the two Fixed blocks the release accumulated merged into one. No entry is added, removed or reworded.
This commit is contained in:
parent
47924565c1
commit
74ba18f53d
1 changed files with 21 additions and 23 deletions
44
CHANGELOG.md
44
CHANGELOG.md
|
|
@ -4,29 +4,7 @@ All notable changes to this project are documented here. The format follows
|
||||||
[Keep a Changelog](https://keepachangelog.com/), and the project aims to follow
|
[Keep a Changelog](https://keepachangelog.com/), and the project aims to follow
|
||||||
Semantic Versioning.
|
Semantic Versioning.
|
||||||
|
|
||||||
## [0.24.0] - unreleased
|
## [0.24.0] - 2026-09-07
|
||||||
|
|
||||||
### Fixed
|
|
||||||
- **A tied output head left half the biggest dense weight reading the model's mmap.** When a gguf
|
|
||||||
carries no `output.weight`, llama.cpp builds the output head from the token embedding table, and
|
|
||||||
the model then holds **two** `ggml_tensor` objects, identically named, over the same file bytes.
|
|
||||||
The capture pass recorded weights in a map keyed by name, so it kept one of them, and
|
|
||||||
`--dense-weights anon` / `ahwb` rebound that one: the twin went on reading the mmap for the whole
|
|
||||||
run. On a model past RAM that is the output projection — a tensor whose per-token cost rivals all
|
|
||||||
the routed experts together — served by page faults from flash, which is precisely what those two
|
|
||||||
policies exist to prevent. Gemma is in this case, and so is any architecture that ties its
|
|
||||||
embeddings.
|
|
||||||
|
|
||||||
The capture now records every distinct leaf object, deduplicated by address, and the dense policy
|
|
||||||
folds tensors over one file range into a single entry with an alias list, rebinding them all onto
|
|
||||||
the same buffer. Bytes are still read once and memory is still allocated once — on the gemma4
|
|
||||||
gate, the same 70 anon buffers as before — and every byte-identity gate passes unchanged. The
|
|
||||||
same fix is what makes the mapping releasable on those models rather than a crash.
|
|
||||||
|
|
||||||
What this is worth in throughput is **not measured**. The mechanism is certain, the size of it is
|
|
||||||
not: it depends on how much of the mapped table the kernel was still holding, which on a phone
|
|
||||||
under reclaim is a different story from a desktop with room to spare. Gemma-4-26B on the test
|
|
||||||
phone is the cell that would price it, and it is owed.
|
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
- **`--release-mmap`: hand back the model file's mapping after load, which on Windows is worth
|
- **`--release-mmap`: hand back the model file's mapping after load, which on Windows is worth
|
||||||
|
|
@ -183,6 +161,26 @@ Semantic Versioning.
|
||||||
measurements in the PR (#179).
|
measurements in the PR (#179).
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
- **A tied output head left half the biggest dense weight reading the model's mmap.** When a gguf
|
||||||
|
carries no `output.weight`, llama.cpp builds the output head from the token embedding table, and
|
||||||
|
the model then holds **two** `ggml_tensor` objects, identically named, over the same file bytes.
|
||||||
|
The capture pass recorded weights in a map keyed by name, so it kept one of them, and
|
||||||
|
`--dense-weights anon` / `ahwb` rebound that one: the twin went on reading the mmap for the whole
|
||||||
|
run. On a model past RAM that is the output projection — a tensor whose per-token cost rivals all
|
||||||
|
the routed experts together — served by page faults from flash, which is precisely what those two
|
||||||
|
policies exist to prevent. Gemma is in this case, and so is any architecture that ties its
|
||||||
|
embeddings.
|
||||||
|
|
||||||
|
The capture now records every distinct leaf object, deduplicated by address, and the dense policy
|
||||||
|
folds tensors over one file range into a single entry with an alias list, rebinding them all onto
|
||||||
|
the same buffer. Bytes are still read once and memory is still allocated once — on the gemma4
|
||||||
|
gate, the same 70 anon buffers as before — and every byte-identity gate passes unchanged. The
|
||||||
|
same fix is what makes the mapping releasable on those models rather than a crash.
|
||||||
|
|
||||||
|
What this is worth in throughput is **not measured**. The mechanism is certain, the size of it is
|
||||||
|
not: it depends on how much of the mapped table the kernel was still holding, which on a phone
|
||||||
|
under reclaim is a different story from a desktop with room to spare. Gemma-4-26B on the test
|
||||||
|
phone is the cell that would price it, and it is owed.
|
||||||
- A sharded catalog entry (DeepSeek V4 Flash, Qwen3.8-Flash-Next) read as on-device as soon as its
|
- A sharded catalog entry (DeepSeek V4 Flash, Qwen3.8-Flash-Next) read as on-device as soon as its
|
||||||
first shard landed, which is the smallest file of the set and arrives seconds into the download:
|
first shard landed, which is the smallest file of the set and arrives seconds into the download:
|
||||||
the row lost its progress bar, a Run on the incomplete set failed at load, and if the download
|
the row lost its progress bar, a Run on the incomplete set failed at load, and if the download
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue