mirror of
https://github.com/ollama/ollama.git
synced 2025-11-10 20:07:38 +01:00
* DRY out the runner lifecycle code Now that discovery uses the runners as well, this unifies the runner spawning code into a single place. This also unifies GPU discovery types with the newer ml.DeviceInfo * win: make incremental builds better Place build artifacts in discrete directories so incremental builds don't have to start fresh * Adjust sort order to consider iGPUs * handle cpu inference oom scenarios * review comments
72 lines
1.7 KiB
Go
72 lines
1.7 KiB
Go
package discover
|
|
|
|
import (
|
|
"log/slog"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/ollama/ollama/format"
|
|
"github.com/ollama/ollama/ml"
|
|
)
|
|
|
|
type memInfo struct {
|
|
TotalMemory uint64 `json:"total_memory,omitempty"`
|
|
FreeMemory uint64 `json:"free_memory,omitempty"`
|
|
FreeSwap uint64 `json:"free_swap,omitempty"` // TODO split this out for system only
|
|
}
|
|
|
|
// CPU type represents a CPU Package occupying a socket
|
|
type CPU struct {
|
|
ID string `cpuinfo:"processor"`
|
|
VendorID string `cpuinfo:"vendor_id"`
|
|
ModelName string `cpuinfo:"model name"`
|
|
CoreCount int
|
|
EfficiencyCoreCount int // Performance = CoreCount - Efficiency
|
|
ThreadCount int
|
|
}
|
|
|
|
func LogDetails(devices []ml.DeviceInfo) {
|
|
for _, dev := range devices {
|
|
var libs []string
|
|
for _, dir := range dev.LibraryPath {
|
|
if strings.Contains(dir, filepath.Join("lib", "ollama")) {
|
|
libs = append(libs, filepath.Base(dir))
|
|
}
|
|
}
|
|
typeStr := "discrete"
|
|
if dev.Integrated {
|
|
typeStr = "iGPU"
|
|
}
|
|
slog.Info("inference compute",
|
|
"id", dev.ID,
|
|
"library", dev.Library,
|
|
"compute", dev.Compute(),
|
|
"name", dev.Name,
|
|
"description", dev.Description,
|
|
"libdirs", strings.Join(libs, ","),
|
|
"driver", dev.Driver(),
|
|
"pci_id", dev.PCIID,
|
|
"type", typeStr,
|
|
"total", format.HumanBytes2(dev.TotalMemory),
|
|
"available", format.HumanBytes2(dev.FreeMemory),
|
|
)
|
|
}
|
|
// CPU inference
|
|
if len(devices) == 0 {
|
|
dev, _ := GetCPUMem()
|
|
slog.Info("inference compute",
|
|
"id", "cpu",
|
|
"library", "cpu",
|
|
"compute", "",
|
|
"name", "cpu",
|
|
"description", "cpu",
|
|
"libdirs", "ollama",
|
|
"driver", "",
|
|
"pci_id", "",
|
|
"type", "",
|
|
"total", format.HumanBytes2(dev.TotalMemory),
|
|
"available", format.HumanBytes2(dev.FreeMemory),
|
|
)
|
|
}
|
|
}
|