mirror of
https://github.com/ggerganov/llama.cpp.git
synced 2024-12-27 22:59:24 +01:00
5931c1f233
* ggml : add support for dynamic loading of backends --------- Co-authored-by: Georgi Gerganov <ggerganov@gmail.com>
105 lines
3.2 KiB
CMake
105 lines
3.2 KiB
CMake
if (NOT EXISTS $ENV{ROCM_PATH})
|
|
if (NOT EXISTS /opt/rocm)
|
|
set(ROCM_PATH /usr)
|
|
else()
|
|
set(ROCM_PATH /opt/rocm)
|
|
endif()
|
|
else()
|
|
set(ROCM_PATH $ENV{ROCM_PATH})
|
|
endif()
|
|
|
|
list(APPEND CMAKE_PREFIX_PATH ${ROCM_PATH})
|
|
list(APPEND CMAKE_PREFIX_PATH "${ROCM_PATH}/lib64/cmake")
|
|
|
|
# CMake on Windows doesn't support the HIP language yet
|
|
if (WIN32)
|
|
set(CXX_IS_HIPCC TRUE)
|
|
else()
|
|
string(REGEX MATCH "hipcc(\.bat)?$" CXX_IS_HIPCC "${CMAKE_CXX_COMPILER}")
|
|
endif()
|
|
|
|
if (CXX_IS_HIPCC)
|
|
if (LINUX)
|
|
if (NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
|
|
message(WARNING "Only LLVM is supported for HIP, hint: CXX=/opt/rocm/llvm/bin/clang++")
|
|
endif()
|
|
|
|
message(WARNING "Setting hipcc as the C++ compiler is legacy behavior."
|
|
" Prefer setting the HIP compiler directly. See README for details.")
|
|
endif()
|
|
else()
|
|
# Forward AMDGPU_TARGETS to CMAKE_HIP_ARCHITECTURES.
|
|
if (AMDGPU_TARGETS AND NOT CMAKE_HIP_ARCHITECTURES)
|
|
set(CMAKE_HIP_ARCHITECTURES ${AMDGPU_TARGETS})
|
|
endif()
|
|
cmake_minimum_required(VERSION 3.21)
|
|
enable_language(HIP)
|
|
endif()
|
|
|
|
find_package(hip REQUIRED)
|
|
find_package(hipblas REQUIRED)
|
|
find_package(rocblas REQUIRED)
|
|
|
|
message(STATUS "HIP and hipBLAS found")
|
|
|
|
file(GLOB GGML_HEADERS_ROCM "../ggml-cuda/*.cuh")
|
|
list(APPEND GGML_HEADERS_ROCM "../../include/ggml-cuda.h")
|
|
|
|
file(GLOB GGML_SOURCES_ROCM "../ggml-cuda/*.cu")
|
|
file(GLOB SRCS "../ggml-cuda/template-instances/fattn-wmma*.cu")
|
|
list(APPEND GGML_SOURCES_ROCM ${SRCS})
|
|
file(GLOB SRCS "../ggml-cuda/template-instances/mmq*.cu")
|
|
list(APPEND GGML_SOURCES_ROCM ${SRCS})
|
|
|
|
if (GGML_CUDA_FA_ALL_QUANTS)
|
|
file(GLOB SRCS "../ggml-cuda/template-instances/fattn-vec*.cu")
|
|
list(APPEND GGML_SOURCES_ROCM ${SRCS})
|
|
add_compile_definitions(GGML_CUDA_FA_ALL_QUANTS)
|
|
else()
|
|
file(GLOB SRCS "../ggml-cuda/template-instances/fattn-vec*q4_0-q4_0.cu")
|
|
list(APPEND GGML_SOURCES_ROCM ${SRCS})
|
|
file(GLOB SRCS "../ggml-cuda/template-instances/fattn-vec*q8_0-q8_0.cu")
|
|
list(APPEND GGML_SOURCES_ROCM ${SRCS})
|
|
file(GLOB SRCS "../ggml-cuda/template-instances/fattn-vec*f16-f16.cu")
|
|
list(APPEND GGML_SOURCES_ROCM ${SRCS})
|
|
endif()
|
|
|
|
ggml_add_backend_library(ggml-hip
|
|
${GGML_HEADERS_ROCM}
|
|
${GGML_SOURCES_ROCM}
|
|
)
|
|
|
|
# TODO: do not use CUDA definitions for HIP
|
|
target_compile_definitions(ggml PUBLIC GGML_USE_CUDA)
|
|
|
|
add_compile_definitions(GGML_USE_HIP)
|
|
|
|
if (GGML_HIP_UMA)
|
|
add_compile_definitions(GGML_HIP_UMA)
|
|
endif()
|
|
|
|
if (GGML_CUDA_FORCE_MMQ)
|
|
add_compile_definitions(GGML_CUDA_FORCE_MMQ)
|
|
endif()
|
|
|
|
if (GGML_CUDA_FORCE_CUBLAS)
|
|
add_compile_definitions(GGML_CUDA_FORCE_CUBLAS)
|
|
endif()
|
|
|
|
if (GGML_CUDA_NO_PEER_COPY)
|
|
add_compile_definitions(GGML_CUDA_NO_PEER_COPY)
|
|
endif()
|
|
|
|
if (CXX_IS_HIPCC)
|
|
set_source_files_properties(${GGML_SOURCES_ROCM} PROPERTIES LANGUAGE CXX)
|
|
target_link_libraries(ggml-hip PRIVATE hip::device)
|
|
else()
|
|
set_source_files_properties(${GGML_SOURCES_ROCM} PROPERTIES LANGUAGE HIP)
|
|
endif()
|
|
|
|
if (GGML_STATIC)
|
|
message(FATAL_ERROR "Static linking not supported for HIP/ROCm")
|
|
endif()
|
|
|
|
target_link_libraries(ggml-hip PRIVATE ggml-base hip::host roc::rocblas roc::hipblas)
|