Repository navigation
Conversation
|
@giladgd Ran it on the GB10. The CUDA build works and every inference test passes. 27 of 357 fail, and as far as I can tell none of them are about arm64 or CUDA. Details below so you can judge for yourself. Tested EnvironmentBuild and detection
ResultsEverything that actually runs a model passes: chat sessions, function calling, LoRA, embeddings, reranking, parallel sequences, structured decisions, token prediction, sequence state, chunking, async load. So the binary is good and the kernels are correct on sm_121. Also worth noting that The 27 failures, grouped by what I think causes them0/ A timezone-dependent test. Not arm64.
The test passes 1/ A token metadata difference. Probably not arm64.
The expectation is hardcoded to 2/ A snapshot pinned to other hardware.
A recorded constant rather than a prediction-versus-reality check. The prediction-versus-reality tests in the same file pass. 3/ GPU layer and context resolution. This is the one that is genuinely about unified memory.
The failing cases are named OfferHappy to re-run any of this, run a subset, or try a patch. The repo is still checked out with all 13 test models cached, so a re-run is quick now. On the self hosted runner, I am working through what it would take to do it safely. I will follow up. |
|
@hassanhabib Thank you very much for running the testsuite :) The results of some of the tests come out a bit differently across different GPU backends and machine configurations (and also Another thing that I'd love if you could do is to run these commands inside the repo: node ./dist/cli/cli.js inspect measure hf:giladgd/gemma-4-31B-it-GGUF:Q4_K_M
node ./dist/cli/cli.js inspect measure hf:giladgd/gpt-oss-20b-GGUF/gpt-oss-20b.MXFP4.ggufThose commands will help me to figure out whether |
|
@giladgd No Both The short versionModel weight estimates are good. Context estimates are consistently under, and the error grows the fewer layers are on the GPU. Median error of estimated versus actual context VRAM, grouped by how much of the model was offloaded:
Model VRAM for comparison, across all rows:
Every context row on gemma is negative, from -0.8% at the tightest to -78.6% at the loosest. On gpt-oss the range is -20.0% to +2.9%. A hypothesis, offered as a hypothesisI have not read the estimation code, so treat this as a direction rather than a diagnosis. The error being monotonic in offload fraction, and present in both models at different magnitudes, looks like context memory for non-offloaded layers being attributed to CPU RAM rather than to VRAM. On a discrete GPU that attribution is correct and invisible. On this part there is one coherent pool, so If that is what is happening, the fix is probably about which pool context is charged to when Why the direction of the error matters hereUnderestimating is the dangerous direction on a unified memory machine, and I can give you a concrete example from today. While these measurements were running, the pool reached 99.58% and the kernel OOM killer fired. It did not kill the GPU process in isolation, because there is no separate VRAM to run out of. It killed the largest resident process on the machine and took the desktop session with it. On a discrete card, overshooting gives you a CUDA allocation failure that a program can catch. Here it gives you a dead process chosen by the kernel. That seems like an argument for erring high on unified parts, though you will have a better sense than I do of what that costs elsewhere. Sample rowsgemma-4-31B, 26 of 61 layers: gpt-oss-20b, 25 of 25 layers: One outlier worth a look: a gemma model row at 31 layers reports -74.04% on model VRAM, well outside the -2% to -5% the rest of them sit in. Raw outputThe full tables are 587 rows for gemma and 249 for gpt-oss. Happy to paste them here, put them in a gist, or pull out any slice you want. Tell me which is easiest for you. The checkout and all the test models are still on the machine, so re-runs are quick now. |
Description of change
Fixes #651
Pull-Request Checklist
masterbranchnpm run formatto apply eslint formattingnpm run testpasses with this changeFixes #0000