Skip to content

Commit e966ae0

Browse files
committed
build : on Mac OS enable Metal by default
1 parent 69fdbb9 commit e966ae0

File tree

2 files changed

+51
-40
lines changed

2 files changed

+51
-40
lines changed

CMakeLists.txt

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ endif()
3636
# Option list
3737
#
3838

39+
if (APPLE)
40+
set(LLAMA_METAL_DEFAULT ON)
41+
else()
42+
set(LLAMA_METAL_DEFAULT OFF)
43+
endif()
44+
3945
# general
4046
option(LLAMA_STATIC "llama: static link libraries" OFF)
4147
option(LLAMA_NATIVE "llama: enable -march=native flag" OFF)
@@ -76,7 +82,7 @@ option(LLAMA_CUDA_F16 "llama: use 16 bit floats for some
7682
set(LLAMA_CUDA_KQUANTS_ITER "2" CACHE STRING "llama: iters./thread per block for Q2_K/Q6_K")
7783
option(LLAMA_HIPBLAS "llama: use hipBLAS" OFF)
7884
option(LLAMA_CLBLAST "llama: use CLBlast" OFF)
79-
option(LLAMA_METAL "llama: use Metal" OFF)
85+
option(LLAMA_METAL "llama: use Metal" ${LLAMA_METAL_DEFAULT})
8086
option(LLAMA_MPI "llama: use MPI" OFF)
8187
option(LLAMA_K_QUANTS "llama: use k-quants" ON)
8288
option(LLAMA_QKK_64 "llama: use super-block size of 64 for k-quants" OFF)
@@ -158,6 +164,31 @@ if (APPLE AND LLAMA_ACCELERATE)
158164
endif()
159165
endif()
160166

167+
if (LLAMA_METAL)
168+
find_library(FOUNDATION_LIBRARY Foundation REQUIRED)
169+
find_library(METAL_FRAMEWORK Metal REQUIRED)
170+
find_library(METALKIT_FRAMEWORK MetalKit REQUIRED)
171+
172+
message(STATUS "Metal framework found")
173+
174+
set(GGML_SOURCES_METAL ggml-metal.m ggml-metal.h)
175+
176+
add_compile_definitions(GGML_USE_METAL)
177+
#add_compile_definitions(GGML_METAL_NDEBUG)
178+
179+
# get full path to the file
180+
#add_compile_definitions(GGML_METAL_DIR_KERNELS="${CMAKE_CURRENT_SOURCE_DIR}/")
181+
182+
# copy ggml-metal.metal to bin directory
183+
configure_file(ggml-metal.metal bin/ggml-metal.metal COPYONLY)
184+
185+
set(LLAMA_EXTRA_LIBS ${LLAMA_EXTRA_LIBS}
186+
${FOUNDATION_LIBRARY}
187+
${METAL_FRAMEWORK}
188+
${METALKIT_FRAMEWORK}
189+
)
190+
endif()
191+
161192
if (LLAMA_BLAS)
162193
if (LLAMA_STATIC)
163194
set(BLA_STATIC ON)
@@ -293,29 +324,6 @@ if (LLAMA_CUBLAS)
293324
endif()
294325
endif()
295326

296-
if (LLAMA_METAL)
297-
find_library(FOUNDATION_LIBRARY Foundation REQUIRED)
298-
find_library(METAL_FRAMEWORK Metal REQUIRED)
299-
find_library(METALKIT_FRAMEWORK MetalKit REQUIRED)
300-
301-
set(GGML_SOURCES_METAL ggml-metal.m ggml-metal.h)
302-
303-
add_compile_definitions(GGML_USE_METAL)
304-
#add_compile_definitions(GGML_METAL_NDEBUG)
305-
306-
# get full path to the file
307-
#add_compile_definitions(GGML_METAL_DIR_KERNELS="${CMAKE_CURRENT_SOURCE_DIR}/")
308-
309-
# copy ggml-metal.metal to bin directory
310-
configure_file(ggml-metal.metal bin/ggml-metal.metal COPYONLY)
311-
312-
set(LLAMA_EXTRA_LIBS ${LLAMA_EXTRA_LIBS}
313-
${FOUNDATION_LIBRARY}
314-
${METAL_FRAMEWORK}
315-
${METALKIT_FRAMEWORK}
316-
)
317-
endif()
318-
319327
if (LLAMA_MPI)
320328
cmake_minimum_required(VERSION 3.10)
321329
find_package(MPI)

Makefile

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# Define the default target now so that it is always the first target
22
BUILD_TARGETS = main quantize quantize-stats perplexity embedding vdot train-text-from-scratch convert-llama2c-to-ggml simple save-load-state server embd-input-test gguf llama-bench baby-llama beam-search tests/test-c.o
33

4+
ifndef LLAMA_NO_METAL
5+
BUILD_TARGETS += metal
6+
endif
7+
48
# Binaries only useful for tests
59
TEST_TARGETS = tests/test-llama-grammar tests/test-grammar-parser tests/test-double-float tests/test-grad0 tests/test-opt tests/test-quantize-fns tests/test-quantize-perf tests/test-sampling tests/test-tokenizer-0-llama tests/test-tokenizer-0-falcon tests/test-tokenizer-1
610

@@ -235,14 +239,24 @@ endif
235239
endif
236240

237241
ifndef LLAMA_NO_ACCELERATE
238-
# Mac M1 - include Accelerate framework.
239-
# `-framework Accelerate` works on Mac Intel as well, with negliable performance boost (as of the predict time).
242+
# Mac OS - include Accelerate framework.
243+
# `-framework Accelerate` works both with Apple Silicon and Mac Intel
240244
ifeq ($(UNAME_S),Darwin)
241245
CFLAGS += -DGGML_USE_ACCELERATE
242246
LDFLAGS += -framework Accelerate
243247
endif
244248
endif # LLAMA_NO_ACCELERATE
245249

250+
ifndef LLAMA_NO_METAL
251+
# By default - use GPU acceleration on Mac OS
252+
ifeq ($(UNAME_S),Darwin)
253+
CFLAGS += -DGGML_USE_METAL #-DGGML_METAL_NDEBUG
254+
CXXFLAGS += -DGGML_USE_METAL
255+
LDFLAGS += -framework Foundation -framework Metal -framework MetalKit
256+
OBJS += ggml-metal.o
257+
endif
258+
endif # LLAMA_NO_METAL
259+
246260
ifdef LLAMA_MPI
247261
CFLAGS += -DGGML_USE_MPI -Wno-cast-qual
248262
CXXFLAGS += -DGGML_USE_MPI -Wno-cast-qual
@@ -352,17 +366,10 @@ ggml-cuda.o: ggml-cuda.cu ggml-cuda.h
352366
$(HIPCC) $(CXXFLAGS) $(HIPFLAGS) -x hip -c -o $@ $<
353367
endif # LLAMA_HIPBLAS
354368

355-
ifdef LLAMA_METAL
356-
CFLAGS += -DGGML_USE_METAL #-DGGML_METAL_NDEBUG
357-
CXXFLAGS += -DGGML_USE_METAL
358-
LDFLAGS += -framework Foundation -framework Metal -framework MetalKit
359-
OBJS += ggml-metal.o
360-
endif # LLAMA_METAL
361-
362-
ifdef LLAMA_METAL
369+
ifndef LLAMA_NO_METAL
363370
ggml-metal.o: ggml-metal.m ggml-metal.h
364371
$(CC) $(CFLAGS) -c $< -o $@
365-
endif # LLAMA_METAL
372+
endif # LLAMA_NO_METAL
366373

367374
ifdef LLAMA_MPI
368375
ggml-mpi.o: ggml-mpi.c ggml-mpi.h
@@ -475,11 +482,7 @@ baby-llama: examples/baby-llama/baby-llama.cpp ggml.o llama.o common.o $(OBJS)
475482
beam-search: examples/beam-search/beam-search.cpp build-info.h ggml.o llama.o common.o $(OBJS)
476483
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
477484

478-
ifneq '' '$(or $(filter clean,$(MAKECMDGOALS)),$(LLAMA_METAL))'
479-
BUILD_TARGETS += metal
480-
endif
481-
482-
ifdef LLAMA_METAL
485+
ifndef LLAMA_NO_METAL
483486
metal: examples/metal/metal.cpp ggml.o $(OBJS)
484487
$(CXX) $(CXXFLAGS) $^ -o $@ $(LDFLAGS)
485488
endif

0 commit comments

Comments
 (0)