gpu_linux.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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 CudartMgmtName = "libcudart.so*"
  40. var NvcudaMgmtName = "libcuda.so*"
  41. var NvmlMgmtName = "" // not currently wired on linux
  42. var OneapiMgmtName = "libze_intel_gpu.so"
  43. func GetCPUMem() (memInfo, error) {
  44. var mem memInfo
  45. var total, available, free, buffers, cached uint64
  46. f, err := os.Open("/proc/meminfo")
  47. if err != nil {
  48. return mem, err
  49. }
  50. defer f.Close()
  51. s := bufio.NewScanner(f)
  52. for s.Scan() {
  53. line := s.Text()
  54. switch {
  55. case strings.HasPrefix(line, "MemTotal:"):
  56. _, err = fmt.Sscanf(line, "MemTotal:%d", &total)
  57. case strings.HasPrefix(line, "MemAvailable:"):
  58. _, err = fmt.Sscanf(line, "MemAvailable:%d", &available)
  59. case strings.HasPrefix(line, "MemFree:"):
  60. _, err = fmt.Sscanf(line, "MemFree:%d", &free)
  61. case strings.HasPrefix(line, "Buffers:"):
  62. _, err = fmt.Sscanf(line, "Buffers:%d", &buffers)
  63. case strings.HasPrefix(line, "Cached:"):
  64. _, err = fmt.Sscanf(line, "Cached:%d", &cached)
  65. default:
  66. continue
  67. }
  68. if err != nil {
  69. return mem, err
  70. }
  71. if total > 0 && available > 0 {
  72. mem.TotalMemory = total * format.KibiByte
  73. mem.FreeMemory = available * format.KibiByte
  74. return mem, nil
  75. }
  76. }
  77. mem.TotalMemory = total * format.KibiByte
  78. mem.FreeMemory = (free + buffers + cached) * format.KibiByte
  79. return mem, nil
  80. }