From df2680b4b936de82ab8e86d3fe69524b872531c5 Mon Sep 17 00:00:00 2001 From: Daniel Hiltgen Date: Fri, 14 Feb 2025 15:55:33 -0800 Subject: [PATCH] Wire up system info log for new engine (#9123) --- kvcache/causal_test.go | 4 +++ ml/backend.go | 1 + ml/backend/ggml/ggml.go | 59 +++++++++++++++++++++++++++++++---- runner/ollamarunner/runner.go | 3 +- 4 files changed, 60 insertions(+), 7 deletions(-) diff --git a/kvcache/causal_test.go b/kvcache/causal_test.go index 0b614df06..874e47433 100644 --- a/kvcache/causal_test.go +++ b/kvcache/causal_test.go @@ -305,6 +305,10 @@ func (b *testBackend) NewContext() ml.Context { return &testContext{} } +func (b *testBackend) SystemInfo() string { + return "not implemented" +} + type testContext struct{} func (c *testContext) Zeros(dtype ml.DType, shape ...int) ml.Tensor { diff --git a/ml/backend.go b/ml/backend.go index 0e99ab5a8..aebf86f76 100644 --- a/ml/backend.go +++ b/ml/backend.go @@ -23,6 +23,7 @@ type Backend interface { Config() Config Get(name string) Tensor NewContext() Context + SystemInfo() string } var backends = make(map[string]func(*os.File) (Backend, error)) diff --git a/ml/backend/ggml/ggml.go b/ml/backend/ggml/ggml.go index 6a727a60c..5ba36361e 100644 --- a/ml/backend/ggml/ggml.go +++ b/ml/backend/ggml/ggml.go @@ -1,11 +1,27 @@ package ggml -// #cgo CPPFLAGS: -I${SRCDIR}/ggml/include -// #include -// #include -// #include "ggml.h" -// #include "ggml-cpu.h" -// #include "ggml-backend.h" +/* +#cgo CPPFLAGS: -I${SRCDIR}/ggml/include +#include +#include +#include "ggml.h" +#include "ggml-cpu.h" +#include "ggml-backend.h" +static struct ggml_backend_feature * getBackendFeatures(void *fp, ggml_backend_reg_t reg) {return ((ggml_backend_get_features_t)(fp))(reg);} +static struct ggml_backend_feature * getNextBackendFeatures(struct ggml_backend_feature * feature) { return &feature[1];} + +typedef enum {COMP_UNKNOWN,COMP_GCC,COMP_CLANG} COMPILER; +COMPILER inline get_compiler() { +#if defined(__clang__) + return COMP_CLANG; +#elif defined(__GNUC__) + return COMP_GCC; +#else + return UNKNOWN_COMPILER; +#endif +} + +*/ import "C" import ( @@ -626,3 +642,34 @@ func (t *Tensor) Conv2D(ctx ml.Context, t2 ml.Tensor, s0, s1, p0, p1, d0, d1 int t: C.ggml_conv_2d(ctx.(*Context).ctx, t.t, t2.(*Tensor).t, C.int(s0), C.int(s1), C.int(p0), C.int(p1), C.int(d0), C.int(d1)), } } + +func (b *Backend) SystemInfo() string { + var compiler string + switch C.get_compiler() { + case C.COMP_UNKNOWN: + compiler = "cgo(unknown_compiler)" + case C.COMP_GCC: + compiler = "cgo(gcc)" + case C.COMP_CLANG: + compiler = "cgo(clang)" + } + + var s string + for i := range C.ggml_backend_reg_count() { + reg := C.ggml_backend_reg_get(i) + fName := C.CString("ggml_backend_get_features") + defer C.free(unsafe.Pointer(fName)) + get_features_fn := C.ggml_backend_reg_get_proc_address(reg, fName) + if get_features_fn != nil { + s += C.GoString(C.ggml_backend_reg_name(reg)) + s += " : " + for features := C.getBackendFeatures(get_features_fn, reg); features.name != nil; features = C.getNextBackendFeatures(features) { + s += C.GoString(features.name) + s += " = " + s += C.GoString(features.value) + s += " | " + } + } + } + return s + compiler +} diff --git a/runner/ollamarunner/runner.go b/runner/ollamarunner/runner.go index d5a3b3407..6d45050c8 100644 --- a/runner/ollamarunner/runner.go +++ b/runner/ollamarunner/runner.go @@ -813,6 +813,8 @@ func (s *Server) loadModel( panic(err) } + slog.Info("system", "info", s.model.Backend().SystemInfo() /* "threads", *threads */) + // TODO(jessegross): LoRA loading if lpath.String() != "" { panic("loras are not yet implemented") @@ -881,7 +883,6 @@ func Execute(args []string) error { }) slog.SetDefault(slog.New(handler)) slog.Info("starting ollama engine") - // TODO(jessegross): Some system info would be useful server := &Server{ batchSize: *batchSize,