Skip to content

Commit db2cb04

Browse files
committed
add hip
1 parent 710822f commit db2cb04

21 files changed

+193
-195
lines changed

.devops/nix/package.nix

+1-1
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ effectiveStdenv.mkDerivation (finalAttrs: {
173173
(cmakeBool "GGML_NATIVE" false)
174174
(cmakeBool "GGML_BLAS" useBlas)
175175
(cmakeBool "GGML_CUDA" useCuda)
176-
(cmakeBool "GGML_HIPBLAS" useRocm)
176+
(cmakeBool "GGML_HIP" useRocm)
177177
(cmakeBool "GGML_METAL" useMetalKit)
178178
(cmakeBool "GGML_VULKAN" useVulkan)
179179
(cmakeBool "GGML_STATIC" enableStatic)

.github/workflows/build.yml

+4-4
Original file line numberDiff line numberDiff line change
@@ -405,13 +405,13 @@ jobs:
405405
- name: Build with native CMake HIP support
406406
id: cmake_build
407407
run: |
408-
cmake -B build -S . -DCMAKE_HIP_COMPILER="$(hipconfig -l)/clang" -DGGML_HIPBLAS=ON
408+
cmake -B build -S . -DCMAKE_HIP_COMPILER="$(hipconfig -l)/clang" -DGGML_HIP=ON
409409
cmake --build build --config Release -j $(nproc)
410410
411411
- name: Build with legacy HIP support
412412
id: cmake_build_legacy_hip
413413
run: |
414-
cmake -B build2 -S . -DCMAKE_C_COMPILER=hipcc -DCMAKE_CXX_COMPILER=hipcc -DGGML_HIPBLAS=ON
414+
cmake -B build2 -S . -DCMAKE_C_COMPILER=hipcc -DCMAKE_CXX_COMPILER=hipcc -DGGML_HIP=ON
415415
cmake --build build2 --config Release -j $(nproc)
416416
417417
ubuntu-22-cmake-sycl:
@@ -1014,7 +1014,7 @@ jobs:
10141014
run: |
10151015
$env:HIP_PATH=$(Resolve-Path 'C:\Program Files\AMD\ROCm\*\bin\clang.exe' | split-path | split-path)
10161016
$env:CMAKE_PREFIX_PATH="${env:HIP_PATH}"
1017-
cmake -G "Unix Makefiles" -B build -S . -DCMAKE_C_COMPILER="${env:HIP_PATH}\bin\clang.exe" -DCMAKE_CXX_COMPILER="${env:HIP_PATH}\bin\clang++.exe" -DGGML_HIPBLAS=ON -DCMAKE_BUILD_TYPE=Release -DGGML_RPC=ON
1017+
cmake -G "Unix Makefiles" -B build -S . -DCMAKE_C_COMPILER="${env:HIP_PATH}\bin\clang.exe" -DCMAKE_CXX_COMPILER="${env:HIP_PATH}\bin\clang++.exe" -DGGML_HIP=ON -DCMAKE_BUILD_TYPE=Release -DGGML_RPC=ON
10181018
cmake --build build -j ${env:NUMBER_OF_PROCESSORS}
10191019
10201020
windows-latest-cmake-hip-release:
@@ -1050,7 +1050,7 @@ jobs:
10501050
run: |
10511051
$env:HIP_PATH=$(Resolve-Path 'C:\Program Files\AMD\ROCm\*\bin\clang.exe' | split-path | split-path)
10521052
$env:CMAKE_PREFIX_PATH="${env:HIP_PATH}"
1053-
cmake -G "Unix Makefiles" -B build -S . -DCMAKE_C_COMPILER="${env:HIP_PATH}\bin\clang.exe" -DCMAKE_CXX_COMPILER="${env:HIP_PATH}\bin\clang++.exe" -DGGML_HIPBLAS=ON -DCMAKE_BUILD_TYPE=Release -DAMDGPU_TARGETS=${{ matrix.gpu_target }} -DGGML_RPC=ON
1053+
cmake -G "Unix Makefiles" -B build -S . -DCMAKE_C_COMPILER="${env:HIP_PATH}\bin\clang.exe" -DCMAKE_CXX_COMPILER="${env:HIP_PATH}\bin\clang++.exe" -DGGML_HIP=ON -DCMAKE_BUILD_TYPE=Release -DAMDGPU_TARGETS=${{ matrix.gpu_target }} -DGGML_RPC=ON
10541054
cmake --build build -j ${env:NUMBER_OF_PROCESSORS}
10551055
md "build\bin\rocblas\library\"
10561056
cp "${env:HIP_PATH}\bin\hipblas.dll" "build\bin\"

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -819,7 +819,7 @@ ifdef GGML_HIPBLAS
819819
GGML_CUDA_MMV_Y ?= 1
820820
GGML_CUDA_KQUANTS_ITER ?= 2
821821

822-
MK_CPPFLAGS += -DGGML_USE_HIPBLAS -DGGML_USE_CUDA
822+
MK_CPPFLAGS += -DGGML_USE_HIP -DGGML_USE_CUDA
823823

824824
ifdef GGML_HIP_UMA
825825
MK_CPPFLAGS += -DGGML_HIP_UMA

cmake/llama-config.cmake.in

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ set(LLAMA_SHARED_LIB @BUILD_SHARED_LIBS@)
66
set(GGML_BLAS @GGML_BLAS@)
77
set(GGML_CUDA @GGML_CUDA@)
88
set(GGML_METAL @GGML_METAL@)
9-
set(GGML_HIPBLAS @GGML_HIPBLAS@)
9+
set(GGML_HIP @GGML_HIPS@)
1010
set(GGML_ACCELERATE @GGML_ACCELERATE@)
1111
set(GGML_VULKAN @GGML_VULKAN@)
1212
set(GGML_VULKAN_CHECK_RESULTS @GGML_VULKAN_CHECK_RESULTS@)

docs/build.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ You can download it from your Linux distro's package manager or from here: [ROCm
230230
- Using `CMake` for Linux (assuming a gfx1030-compatible AMD GPU):
231231
```bash
232232
HIPCXX="$(hipconfig -l)/clang" HIP_PATH="$(hipconfig -R)" \
233-
cmake -S . -B build -DGGML_HIPBLAS=ON -DAMDGPU_TARGETS=gfx1030 -DCMAKE_BUILD_TYPE=Release \
233+
cmake -S . -B build -DGGML_HIP=ON -DAMDGPU_TARGETS=gfx1030 -DCMAKE_BUILD_TYPE=Release \
234234
&& cmake --build build --config Release -- -j 16
235235
```
236236
On Linux it is also possible to use unified memory architecture (UMA) to share main memory between the CPU and integrated GPU by setting `-DGGML_HIP_UMA=ON`.
@@ -247,7 +247,7 @@ You can download it from your Linux distro's package manager or from here: [ROCm
247247
```bash
248248
HIPCXX="$(hipconfig -l)/clang" HIP_PATH="$(hipconfig -p)" \
249249
HIP_DEVICE_LIB_PATH=<directory-you-just-found> \
250-
cmake -S . -B build -DGGML_HIPBLAS=ON -DAMDGPU_TARGETS=gfx1030 -DCMAKE_BUILD_TYPE=Release \
250+
cmake -S . -B build -DGGML_HIP=ON -DAMDGPU_TARGETS=gfx1030 -DCMAKE_BUILD_TYPE=Release \
251251
&& cmake --build build -- -j 16
252252
```
253253
@@ -259,7 +259,7 @@ You can download it from your Linux distro's package manager or from here: [ROCm
259259
- Using `CMake` for Windows (using x64 Native Tools Command Prompt for VS, and assuming a gfx1100-compatible AMD GPU):
260260
```bash
261261
set PATH=%HIP_PATH%\bin;%PATH%
262-
cmake -S . -B build -G Ninja -DAMDGPU_TARGETS=gfx1100 -DGGML_HIPBLAS=ON -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release
262+
cmake -S . -B build -G Ninja -DAMDGPU_TARGETS=gfx1100 -DGGML_HIP=ON -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release
263263
cmake --build build
264264
```
265265
Make sure that `AMDGPU_TARGETS` is set to the GPU arch you want to compile for. The above example uses `gfx1100` that corresponds to Radeon RX 7900XTX/XT/GRE. You can find a list of targets [here](https://llvm.org/docs/AMDGPUUsage.html#processors)

ggml/CMakeLists.txt

+2-1
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ endif()
116116

117117
# ggml core
118118
set(GGML_SCHED_MAX_COPIES "4" CACHE STRING "ggml: max input copies for pipeline parallelism")
119+
option(GGML_CPU "ggml: enable CPU backend" ON)
119120

120121
# 3rd party libs / backends
121122
option(GGML_ACCELERATE "ggml: enable Accelerate framework" ON)
@@ -141,7 +142,7 @@ option(GGML_CUDA_NO_VMM "ggml: do not try to use CUDA VMM"
141142
option(GGML_CUDA_FA_ALL_QUANTS "ggml: compile all quants for FlashAttention" OFF)
142143
option(GGML_CUDA_GRAPHS "ggml: use CUDA graphs (llama.cpp only)" ${GGML_CUDA_GRAPHS_DEFAULT})
143144

144-
option(GGML_HIPBLAS "ggml: use hipBLAS" OFF)
145+
option(GGML_HIP "ggml: use HIP" OFF)
145146
option(GGML_HIP_UMA "ggml: use HIP unified memory architecture" OFF)
146147
option(GGML_VULKAN "ggml: use Vulkan" OFF)
147148
option(GGML_VULKAN_CHECK_RESULTS "ggml: run Vulkan op checks" OFF)

ggml/include/ggml-cuda.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
extern "C" {
88
#endif
99

10-
#ifdef GGML_USE_HIPBLAS
10+
#ifdef GGML_USE_HIP
1111
#define GGML_CUDA_NAME "ROCm"
1212
#define GGML_CUBLAS_NAME "hipBLAS"
1313
#elif defined(GGML_USE_MUSA)

ggml/src/CMakeLists.txt

+1-110
Original file line numberDiff line numberDiff line change
@@ -29,115 +29,6 @@ endif()
2929
unset(GGML_EXTRA_LIBS_PRIVATE)
3030
unset(GGML_EXTRA_LIBS_PUBLIC)
3131

32-
if (GGML_HIPBLAS)
33-
if (NOT EXISTS $ENV{ROCM_PATH})
34-
if (NOT EXISTS /opt/rocm)
35-
set(ROCM_PATH /usr)
36-
else()
37-
set(ROCM_PATH /opt/rocm)
38-
endif()
39-
else()
40-
set(ROCM_PATH $ENV{ROCM_PATH})
41-
endif()
42-
43-
list(APPEND CMAKE_PREFIX_PATH ${ROCM_PATH})
44-
list(APPEND CMAKE_PREFIX_PATH "${ROCM_PATH}/lib64/cmake")
45-
46-
# CMake on Windows doesn't support the HIP language yet
47-
if (WIN32)
48-
set(CXX_IS_HIPCC TRUE)
49-
else()
50-
string(REGEX MATCH "hipcc(\.bat)?$" CXX_IS_HIPCC "${CMAKE_CXX_COMPILER}")
51-
endif()
52-
53-
if (CXX_IS_HIPCC)
54-
if (LINUX)
55-
if (NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
56-
message(WARNING "Only LLVM is supported for HIP, hint: CXX=/opt/rocm/llvm/bin/clang++")
57-
endif()
58-
59-
message(WARNING "Setting hipcc as the C++ compiler is legacy behavior."
60-
" Prefer setting the HIP compiler directly. See README for details.")
61-
endif()
62-
else()
63-
# Forward AMDGPU_TARGETS to CMAKE_HIP_ARCHITECTURES.
64-
if (AMDGPU_TARGETS AND NOT CMAKE_HIP_ARCHITECTURES)
65-
set(CMAKE_HIP_ARCHITECTURES ${AMDGPU_TARGETS})
66-
endif()
67-
cmake_minimum_required(VERSION 3.21)
68-
enable_language(HIP)
69-
endif()
70-
71-
find_package(hip REQUIRED)
72-
find_package(hipblas REQUIRED)
73-
find_package(rocblas REQUIRED)
74-
75-
message(STATUS "HIP and hipBLAS found")
76-
77-
file(GLOB GGML_HEADERS_ROCM "ggml-cuda/*.cuh")
78-
list(APPEND GGML_HEADERS_ROCM "../include/ggml-cuda.h")
79-
80-
file(GLOB GGML_SOURCES_ROCM "ggml-cuda/*.cu")
81-
list(APPEND GGML_SOURCES_ROCM "ggml-cuda.cu")
82-
file(GLOB SRCS "ggml-cuda/template-instances/fattn-wmma*.cu")
83-
list(APPEND GGML_SOURCES_ROCM ${SRCS})
84-
file(GLOB SRCS "ggml-cuda/template-instances/mmq*.cu")
85-
list(APPEND GGML_SOURCES_ROCM ${SRCS})
86-
87-
if (GGML_CUDA_FA_ALL_QUANTS)
88-
file(GLOB SRCS "ggml-cuda/template-instances/fattn-vec*.cu")
89-
list(APPEND GGML_SOURCES_ROCM ${SRCS})
90-
add_compile_definitions(GGML_CUDA_FA_ALL_QUANTS)
91-
else()
92-
file(GLOB SRCS "ggml-cuda/template-instances/fattn-vec*q4_0-q4_0.cu")
93-
list(APPEND GGML_SOURCES_ROCM ${SRCS})
94-
file(GLOB SRCS "ggml-cuda/template-instances/fattn-vec*q8_0-q8_0.cu")
95-
list(APPEND GGML_SOURCES_ROCM ${SRCS})
96-
file(GLOB SRCS "ggml-cuda/template-instances/fattn-vec*f16-f16.cu")
97-
list(APPEND GGML_SOURCES_ROCM ${SRCS})
98-
endif()
99-
100-
list(APPEND GGML_CDEF_PUBLIC GGML_USE_CUDA)
101-
102-
add_compile_definitions(GGML_USE_HIPBLAS)
103-
add_compile_definitions(GGML_CUDA_DMMV_X=${GGML_CUDA_DMMV_X})
104-
add_compile_definitions(GGML_CUDA_MMV_Y=${GGML_CUDA_MMV_Y})
105-
add_compile_definitions(K_QUANTS_PER_ITERATION=${GGML_CUDA_KQUANTS_ITER})
106-
107-
if (GGML_HIP_UMA)
108-
add_compile_definitions(GGML_HIP_UMA)
109-
endif()
110-
111-
if (GGML_CUDA_FORCE_DMMV)
112-
add_compile_definitions(GGML_CUDA_FORCE_DMMV)
113-
endif()
114-
115-
if (GGML_CUDA_FORCE_MMQ)
116-
add_compile_definitions(GGML_CUDA_FORCE_MMQ)
117-
endif()
118-
119-
if (GGML_CUDA_FORCE_CUBLAS)
120-
add_compile_definitions(GGML_CUDA_FORCE_CUBLAS)
121-
endif()
122-
123-
if (GGML_CUDA_NO_PEER_COPY)
124-
add_compile_definitions(GGML_CUDA_NO_PEER_COPY)
125-
endif()
126-
127-
if (CXX_IS_HIPCC)
128-
set_source_files_properties(${GGML_SOURCES_ROCM} PROPERTIES LANGUAGE CXX)
129-
list(APPEND GGML_EXTRA_LIBS_PRIVATE hip::device)
130-
else()
131-
set_source_files_properties(${GGML_SOURCES_ROCM} PROPERTIES LANGUAGE HIP)
132-
endif()
133-
134-
if (GGML_STATIC)
135-
message(FATAL_ERROR "Static linking not supported for HIP/ROCm")
136-
endif()
137-
138-
list(APPEND GGML_EXTRA_LIBS_PUBLIC hip::host roc::rocblas roc::hipblas)
139-
endif()
140-
14132
function(get_flags CCID CCVER)
14233
set(C_FLAGS "")
14334
set(CXX_FLAGS "")
@@ -354,12 +245,12 @@ function(ggml_add_backend backend)
354245
endif()
355246
endfunction()
356247

357-
set(GGML_CPU ON)
358248
ggml_add_backend(CPU)
359249
ggml_add_backend(AMX)
360250
ggml_add_backend(BLAS)
361251
ggml_add_backend(CANN)
362252
ggml_add_backend(CUDA)
253+
ggml_add_backend(HIP)
363254
ggml_add_backend(Kompute)
364255
ggml_add_backend(METAL)
365256
ggml_add_backend(RPC)

ggml/src/ggml-amx/CMakeLists.txt

+3-6
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
11
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 11.0)
2-
else()
3-
set(GGML_AMX OFF PARENT_SCOPE)
4-
message(WARNING "AMX requires gcc version > 11.0. Turning off GGML_AMX.")
5-
endif()
6-
7-
if (GGML_AMX)
82
message(STATUS "Using AMX")
93

104
file(GLOB GGML_HEADERS_AMX "*.h")
@@ -104,4 +98,7 @@ if (GGML_AMX)
10498
endif()
10599

106100
target_compile_options(ggml-amx PRIVATE ${ARCH_FLAGS})
101+
else()
102+
set(GGML_AMX OFF PARENT_SCOPE)
103+
message(WARNING "AMX requires gcc version > 11.0. Turning off GGML_AMX.")
107104
endif()

0 commit comments

Comments
 (0)