From a447a083f2169e2a3c975cb5951d8b0b0dcddb04 Mon Sep 17 00:00:00 2001 From: Daniel Hiltgen Date: Sat, 20 Jan 2024 12:15:50 -0800 Subject: [PATCH] Add compute capability 5.0, 7.5, and 8.0 --- docs/development.md | 3 ++- gpu/gpu.go | 5 ++--- llm/generate/gen_common.sh | 3 +++ llm/generate/gen_linux.sh | 2 +- llm/generate/gen_windows.ps1 | 7 ++++++- 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/docs/development.md b/docs/development.md index 5369f5a8..04599f6c 100644 --- a/docs/development.md +++ b/docs/development.md @@ -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: diff --git a/gpu/gpu.go b/gpu/gpu.go index 06d022fe..61821b5d 100644 --- a/gpu/gpu.go +++ b/gpu/gpu.go @@ -29,9 +29,8 @@ type handles struct { var gpuMutex sync.Mutex var gpuHandles *handles = nil -// With our current CUDA compile flags, older than 5.2 will not work properly -// 5.0: CUDA error: no kernel image is available for execution on the device -var CudaComputeMin = [2]C.int{5, 2} +// 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{ diff --git a/llm/generate/gen_common.sh b/llm/generate/gen_common.sh index d1e64d7d..4762e185 100644 --- a/llm/generate/gen_common.sh +++ b/llm/generate/gen_common.sh @@ -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() { diff --git a/llm/generate/gen_linux.sh b/llm/generate/gen_linux.sh index f00d717c..507c54c8 100755 --- a/llm/generate/gen_linux.sh +++ b/llm/generate/gen_linux.sh @@ -125,7 +125,7 @@ if [ -d "${CUDA_LIB_DIR}" ]; then if [ -n "${CUDA_MAJOR}" ]; then CUDA_VARIANT=_v${CUDA_MAJOR} fi - CMAKE_DEFS="-DLLAMA_CUBLAS=on -DLLAMA_CUDA_FORCE_MMQ=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 diff --git a/llm/generate/gen_windows.ps1 b/llm/generate/gen_windows.ps1 index 109b8602..e7fac03a 100644 --- a/llm/generate/gen_windows.ps1 +++ b/llm/generate/gen_windows.ps1 @@ -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 { @@ -128,7 +133,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"