mirror of
https://github.com/ollama/ollama.git
synced 2026-07-10 17:54:12 +00:00
* llama-server followups Misc fixes for #16031 - Add back dropped ROCm build flag for multi-GPU support on windows - Fix amdhip64_*.dll version detection for "latest" selection - Fix embeddings API for consistent normalize behavior with prior versions * ci: set up for automated llama.cpp update testing * reduce batch for fa-disabled, and constrained vram * mlx: fix v3 load bug on m5 Imagegen was incorrectly loading v3 first. This DRYs out the loading code so imagegen gets the same new v4/v3 selection logic. * fix reload bug on embedding models * bump version * steer user how to enable iGPU when disabled |
||
|---|---|---|
| .. | ||
| CMakeLists.txt | ||
| compile.go | ||
| doc.go | ||
| generate_wrappers.go | ||
| mlx.c | ||
| mlx.go | ||
| mlx.h | ||
| mlx_dynamic.c | ||
| mlx_dynamic.h | ||
| mlx_error_handler.c | ||
| mlx_error_handler.h | ||
| mlx_test.go | ||
| README.md | ||
MLX Memory Management
| This package will get consolidated with x/ml/backend/mlx in the future.
Automatic Tracking
All arrays are automatically tracked when created. On Eval(), non-kept arrays are freed.
API
result := mlx.Matmul(x, w) // arrays automatically tracked
mlx.Eval(result) // free non-kept, eval result (auto-kept)
Key Functions
mlx.Eval(outputs...)- free non-kept arrays, then evaluate (outputs auto-kept)mlx.AsyncEval(outputs...)- async version of Eval (outputs auto-kept)mlx.Keep(arrays...)- mark arrays to survive cleanup (for weights, caches)array.Free()- mark array for cleanup on next Eval
Loop Pattern
for step := 0; step < maxTokens; step++ {
logits := model.Forward(token, caches)
oldToken := token
token = sample(logits)
// Keep cache state across iterations
for _, c := range caches {
mlx.Keep(c.State()...)
}
oldToken.Free() // mark for cleanup
mlx.AsyncEval(token) // frees old, evals new
}
Notes
Eval()andAsyncEval()auto-keep their outputsFree()marks for cleanup - actual free happens during next Eval- Use
Keep()for weights and cache state that must survive multiple Eval cycles - Arrays created inside compiled closures are managed by MLX, not tracked