gpu_linux.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package gpu
  2. import (
  3. "bufio"
  4. "fmt"
  5. "os"
  6. "strings"
  7. "github.com/ollama/ollama/format"
  8. )
  9. var CudartGlobs = []string{
  10. "/usr/local/cuda/lib64/libcudart.so*",
  11. "/usr/lib/x86_64-linux-gnu/nvidia/current/libcudart.so*",
  12. "/usr/lib/x86_64-linux-gnu/libcudart.so*",
  13. "/usr/lib/wsl/lib/libcudart.so*",
  14. "/usr/lib/wsl/drivers/*/libcudart.so*",
  15. "/opt/cuda/lib64/libcudart.so*",
  16. "/usr/local/cuda*/targets/aarch64-linux/lib/libcudart.so*",
  17. "/usr/lib/aarch64-linux-gnu/nvidia/current/libcudart.so*",
  18. "/usr/lib/aarch64-linux-gnu/libcudart.so*",
  19. "/usr/local/cuda/lib*/libcudart.so*",
  20. "/usr/lib*/libcudart.so*",
  21. "/usr/local/lib*/libcudart.so*",
  22. }
  23. var NvmlGlobs = []string{}
  24. var NvcudaGlobs = []string{
  25. "/usr/local/cuda*/targets/*/lib/libcuda.so*",
  26. "/usr/lib/*-linux-gnu/nvidia/current/libcuda.so*",
  27. "/usr/lib/*-linux-gnu/libcuda.so*",
  28. "/usr/lib/wsl/lib/libcuda.so*",
  29. "/usr/lib/wsl/drivers/*/libcuda.so*",
  30. "/opt/cuda/lib*/libcuda.so*",
  31. "/usr/local/cuda/lib*/libcuda.so*",
  32. "/usr/lib*/libcuda.so*",
  33. "/usr/local/lib*/libcuda.so*",
  34. }
  35. var OneapiGlobs = []string{
  36. "/usr/lib/x86_64-linux-gnu/libze_intel_gpu.so*",
  37. "/usr/lib*/libze_intel_gpu.so*",
  38. }
  39. var (
  40. CudartMgmtName = "libcudart.so*"
  41. NvcudaMgmtName = "libcuda.so*"
  42. NvmlMgmtName = "" // not currently wired on linux
  43. OneapiMgmtName = "libze_intel_gpu.so"
  44. )
  45. func GetCPUMem() (memInfo, error) {
  46. var mem memInfo
  47. var total, available, free, buffers, cached, freeSwap uint64
  48. f, err := os.Open("/proc/meminfo")
  49. if err != nil {
  50. return mem, err
  51. }
  52. defer f.Close()
  53. s := bufio.NewScanner(f)
  54. for s.Scan() {
  55. line := s.Text()
  56. switch {
  57. case strings.HasPrefix(line, "MemTotal:"):
  58. _, err = fmt.Sscanf(line, "MemTotal:%d", &total)
  59. case strings.HasPrefix(line, "MemAvailable:"):
  60. _, err = fmt.Sscanf(line, "MemAvailable:%d", &available)
  61. case strings.HasPrefix(line, "MemFree:"):
  62. _, err = fmt.Sscanf(line, "MemFree:%d", &free)
  63. case strings.HasPrefix(line, "Buffers:"):
  64. _, err = fmt.Sscanf(line, "Buffers:%d", &buffers)
  65. case strings.HasPrefix(line, "Cached:"):
  66. _, err = fmt.Sscanf(line, "Cached:%d", &cached)
  67. case strings.HasPrefix(line, "SwapFree:"):
  68. _, err = fmt.Sscanf(line, "SwapFree:%d", &freeSwap)
  69. default:
  70. continue
  71. }
  72. if err != nil {
  73. return mem, err
  74. }
  75. }
  76. mem.TotalMemory = total * format.KibiByte
  77. mem.FreeSwap = freeSwap * format.KibiByte
  78. if available > 0 {
  79. mem.FreeMemory = available * format.KibiByte
  80. } else {
  81. mem.FreeMemory = (free + buffers + cached) * format.KibiByte
  82. }
  83. return mem, nil
  84. }