Repository navigation
Conversation
|
Carried this on a layer-split, low-RAM machine — it works there too, even though the PR Setup: 2× RTX 5060 Ti 16 GB, layer split (
Decode unchanged, as you report. (The whole-box start gain is smaller than your Q2_0-resident No conflicts carrying it on v0.1.39 except one trivial block in |
3177bd0 to
cc190ca
Compare
|
Thanks for running it on a split setup, that's a case I couldn't test. You're right: the first card's fill goes through the same loop, so it gets the read-ahead; only the other cards' fills (the per-stage loop) don't. I've fixed the description. Also rebased onto v0.1.39. Same |
On Linux every load phase read its files one page fault (one 128 KB readahead) at a time, so a cold start spent most of its time waiting on the drive at queue depth ~2. A new platform::advise_willneed asks the kernel for a range in 128 KiB steps (WILLNEED reads at most one readahead window per call), and is called before the weight load, the native dense upload, the profile fill (256 pairs ahead, STRATA_FILL_AHEAD), the peer tier's fill (--peer-device), the resident RAM copy and the MTP draft files. STRATA_READ_AHEAD=0 turns it off. Each phase logs its time. Gen3 NVMe, RTX 5090, 32 GB, Q2_0 resident at 262K: ready in 70 s, was ~920 s. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
cc190ca to
0173fc4
Compare
|
Numbers for the peer fill that went into the last push (
That's still well below the main fill's 3.2 GB/s through the same read-ahead, so something else in that loop (probably the async copy to the second card from pageable memory) is the next limit. I haven't dug into it. |
…me them The native output head (437 MB) and the token embedding (260 MiB) were copied out of the mapped GGUF one page fault at a time, and strata-vision's projector (907 MB) went through llama.cpp's sequential reads, all before the server was ready. Each now asks for its bytes ahead (the vision encoder honours STRATA_READ_AHEAD=0 too), and the head, the embedding, the projector load, the encoder warm-up and the pinned cache complement log their times. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Pushed one more commit (
Same box, IQ3_XXS resident + vision + |
|
Feedback (rig: 4 x RTX 5080 16 GB (PCIe Gen3, one card at x8), Linux, IQ3_S, 262K context, int8 K/V with
|
|
Merged in 0.1.40: read-ahead at startup on Linux (STRATA_READ_AHEAD=0 turns it off). The cold start numbers and the split-machine run are in the release notes. |
…ne rollback, Linux read-ahead and THP (Niko1221#735 Niko1221#769 Niko1221#670 Niko1221#699 Niko1221#771)
…ne rollback, Linux read-ahead and THP (Niko1221#735 Niko1221#769 Niko1221#670 Niko1221#699 Niko1221#771)
On Linux every startup read went to the drive one ~128 KB request at a time (page faults through the mmap, or plain freads with the default readahead), so a cold start sat at queue depth ~2 for about fifteen minutes. Most of it was "filling the GPU's expert cache" at 30-39 MB/s from an NVMe that does ~3 GB/s with a deep queue. Windows already has an unbuffered, overlapped read path for this (
set_unbuffered/read_direct); on Linuxset_unbufferedreturns false, so these reads went through the page cache one fault at a time.This asks the kernel for the pages ahead of each read (madvise / posix_fadvise WILLNEED, in 128 KiB steps because WILLNEED only reads one readahead window per call) for the weights, the native dense matrices, the profile fill (256 pairs ahead), the peer tier's fill (
--peer-device), the resident RAM copy, the MTP draft files, the native output head and token embedding, and strata-vision's projector.STRATA_READ_AHEAD=0turns it all off, and each phase now logs how long it took.Ryzen 9 9950X, RTX 5090, 32 GB DDR5, Gen3 NVMe, Ubuntu (kernel 7.0), v0.1.38, cold page cache:
Only tested on Linux with CUDA. On Windows the new helper is a no-op (the unbuffered path covers it), and I haven't compiled it on Windows or HIP. With a layer split, the first card's fill gets the read-ahead (q8atnight measured it below); the other cards' fills don't yet.