Browse Source
Merge pull request #2116 from dhiltgen/cc_50_80
Add support for CUDA 5.0 cards
jmorganca/options
Daniel Hiltgen
2 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with
15 additions and
6 deletions
-
docs/development.md
-
gpu/gpu.go
-
llm/generate/gen_common.sh
-
llm/generate/gen_linux.sh
-
llm/generate/gen_windows.ps1
|
|
|
@ -50,7 +50,8 @@ development and runtime packages. |
|
|
|
Typically the build scripts will auto-detect CUDA, however, if your Linux distro |
|
|
|
or installation approach uses unusual paths, you can specify the location by |
|
|
|
specifying an environment variable `CUDA_LIB_DIR` to the location of the shared |
|
|
|
libraries, and `CUDACXX` to the location of the nvcc compiler. |
|
|
|
libraries, and `CUDACXX` to the location of the nvcc compiler. You can customize |
|
|
|
set set of target CUDA architectues by setting `CMAKE_CUDA_ARCHITECTURES` (e.g. "50;60;70") |
|
|
|
|
|
|
|
Then generate dependencies: |
|
|
|
|
|
|
|
|
|
|
|
@ -30,8 +30,8 @@ type handles struct { |
|
|
|
var gpuMutex sync.Mutex |
|
|
|
var gpuHandles *handles = nil |
|
|
|
|
|
|
|
// With our current CUDA compile flags, 5.2 and older will not work properly
|
|
|
|
const CudaComputeMajorMin = 6 |
|
|
|
// With our current CUDA compile flags, older than 5.0 will not work properly
|
|
|
|
var CudaComputeMin = [2]C.int{5, 0} |
|
|
|
|
|
|
|
// Possible locations for the nvidia-ml library
|
|
|
|
var CudaLinuxGlobs = []string{ |
|
|
|
@ -142,7 +142,7 @@ func GetGPUInfo() GpuInfo { |
|
|
|
if cc.err != nil { |
|
|
|
slog.Info(fmt.Sprintf("error looking up CUDA GPU compute capability: %s", C.GoString(cc.err))) |
|
|
|
C.free(unsafe.Pointer(cc.err)) |
|
|
|
} else if cc.major >= CudaComputeMajorMin { |
|
|
|
} else if cc.major > CudaComputeMin[0] || (cc.major == CudaComputeMin[0] && cc.minor >= CudaComputeMin[1]) { |
|
|
|
slog.Info(fmt.Sprintf("CUDA Compute Capability detected: %d.%d", cc.major, cc.minor)) |
|
|
|
resp.Library = "cuda" |
|
|
|
} else { |
|
|
|
|
|
|
|
@ -39,6 +39,9 @@ init_vars() { |
|
|
|
*) |
|
|
|
;; |
|
|
|
esac |
|
|
|
if [ -z "${CMAKE_CUDA_ARCHITECTURES}" ] ; then |
|
|
|
CMAKE_CUDA_ARCHITECTURES="50;52;61;70;75;80" |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
git_module_setup() { |
|
|
|
|
|
|
|
@ -135,7 +135,7 @@ if [ -d "${CUDA_LIB_DIR}" ]; then |
|
|
|
if [ -n "${CUDA_MAJOR}" ]; then |
|
|
|
CUDA_VARIANT=_v${CUDA_MAJOR} |
|
|
|
fi |
|
|
|
CMAKE_DEFS="-DLLAMA_CUBLAS=on ${COMMON_CMAKE_DEFS} ${CMAKE_DEFS}" |
|
|
|
CMAKE_DEFS="-DLLAMA_CUBLAS=on -DLLAMA_CUDA_FORCE_MMQ=on -DCMAKE_CUDA_ARCHITECTURES=${CMAKE_CUDA_ARCHITECTURES} ${COMMON_CMAKE_DEFS} ${CMAKE_DEFS}" |
|
|
|
BUILD_DIR="${LLAMACPP_DIR}/build/linux/${ARCH}/cuda${CUDA_VARIANT}" |
|
|
|
EXTRA_LIBS="-L${CUDA_LIB_DIR} -lcudart -lcublas -lcublasLt -lcuda" |
|
|
|
build |
|
|
|
|
|
|
|
@ -25,6 +25,11 @@ function init_vars { |
|
|
|
} |
|
|
|
$script:GZIP=(get-command -ea 'silentlycontinue' gzip).path |
|
|
|
$script:DUMPBIN=(get-command -ea 'silentlycontinue' dumpbin).path |
|
|
|
if ($null -eq $env:CMAKE_CUDA_ARCHITECTURES) { |
|
|
|
$script:CMAKE_CUDA_ARCHITECTURES="50;52;61;70;75;80" |
|
|
|
} else { |
|
|
|
$script:CMAKE_CUDA_ARCHITECTURES=$env:CMAKE_CUDA_ARCHITECTURES |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
function git_module_setup { |
|
|
|
@ -151,7 +156,7 @@ if ($null -ne $script:CUDA_LIB_DIR) { |
|
|
|
} |
|
|
|
init_vars |
|
|
|
$script:buildDir="${script:llamacppDir}/build/windows/${script:ARCH}/cuda$script:CUDA_VARIANT" |
|
|
|
$script:cmakeDefs += @("-DLLAMA_CUBLAS=ON", "-DLLAMA_AVX=on") |
|
|
|
$script:cmakeDefs += @("-DLLAMA_CUBLAS=ON", "-DLLAMA_AVX=on", "-DCMAKE_CUDA_ARCHITECTURES=${script:CMAKE_CUDA_ARCHITECTURES}") |
|
|
|
build |
|
|
|
install |
|
|
|
cp "${script:CUDA_LIB_DIR}/cudart64_*.dll" "${script:buildDir}/lib" |
|
|
|
|