Skip to content

Commit 2cdf6b7

Browse files
authored
Merge pull request #53 from junjihashimoto/feature/llmc
Add a test with llm.c
2 parents 85302c1 + 596277b commit 2cdf6b7

5 files changed

Lines changed: 1318 additions & 8 deletions

File tree

experimental/kernels/Makefile

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
CXX=clang++
2+
CC=clang++
23
GPUCPP ?= $(PWD)/../..
34
LIBDIR ?= $(GPUCPP)/third_party/lib
45
LIBSPEC ?= . $(GPUCPP)/source
@@ -9,21 +10,68 @@ ifeq ($(shell $(CXX) -std=c++17 -x c++ -E -include array - < /dev/null > /dev/nu
910
else
1011
STDLIB := -stdlib=libc++
1112
endif
12-
FLAGS=-std=c++17 $(STDLIB) -I$(GPUCPP) -I$(GPUCPP)/third_party/headers -L$(GPUCPP)/third_party/lib run.cpp -ldl -ldawn
13+
14+
CXXFLAGS=-std=c++17 -I$(GPUCPP) -I$(GPUCPP)/third_party/headers -I. -Iunittest_llmc
15+
CFLAGS=-Ofast -march=native -I. -Iunittest_llmc
16+
17+
LDFLAGS=$(STDLIB) -L$(GPUCPP)/third_party/lib -ldl -ldawn
18+
FLAGS=$(CXXFLAGS) $(LDFLAGS)
19+
20+
ifeq ($(shell [ -d /opt/homebrew/opt/libomp/lib ] && echo "exists"), exists)
21+
CFLAGS += -Xclang -fopenmp -DOMP -I/opt/homebrew/opt/libomp/include
22+
LDFLAGS += -L/opt/homebrew/opt/libomp/lib -lomp
23+
$(info ✓ OpenMP found)
24+
else
25+
$(info ✗ OpenMP not found)
26+
endif
1327

1428
run: ./build/$(TARGET) dawnlib
1529
$(LIBSPEC) && ./build/$(TARGET)
1630

31+
run_llm.c: ./build/test_gpt2 dawnlib
32+
$(LIBSPEC) && $<
33+
llm.c:
34+
if [ ! -d llm.c ]; then git clone git@github.com:karpathy/llm.c.git ; fi
35+
36+
gpt2_124M.bin: llm.c
37+
if [ ! -f $@ ]; then ./llm.c/dev/download_starter_pack.sh ; \
38+
ln -s ./llm.c/gpt2_124M.bin ; \
39+
ln -s ./llm.c/gpt2_124M_debug_state.bin ; \
40+
fi
41+
42+
build/test_gpt2: llm.c build/unittest_kernels.o gpt2_124M.bin
43+
mkdir -p build
44+
sed -i -e 's/void encoder_forward(/void ENCODER_FORWARD_CPU(/g' llm.c/train_gpt2.c
45+
sed -i -e 's/void layernorm_forward(/void LAYERNORM_FORWARD_CPU(/g' llm.c/train_gpt2.c
46+
sed -i -e 's/void matmul_forward(/void MATMUL_FORWARD_CPU(/g' llm.c/train_gpt2.c
47+
sed -i -e 's/void attention_forward(/void ATTENTION_FORWARD_CPU(/g' llm.c/train_gpt2.c
48+
sed -i -e 's/void gelu_forward(/void GELU_FORWARD_CPU(/g' llm.c/train_gpt2.c
49+
sed -i -e 's/void residual_forward(/void RESIDUAL_FORWARD_CPU(/g' llm.c/train_gpt2.c
50+
sed -i -e 's/void softmax_forward(/void SOFTMAX_FORWARD_CPU(/g' llm.c/train_gpt2.c
51+
sed -i -e 's/void crossentropy_forward(/void CROSSENTROPY_FORWARD_CPU(/g' llm.c/train_gpt2.c
52+
sed -i -e 's/void encoder_backward(/void ENCODER_BACKWARD_CPU(/g' llm.c/train_gpt2.c
53+
sed -i -e 's/void layernorm_backward(/void LAYERNORM_BACKWARD_CPU(/g' llm.c/train_gpt2.c
54+
sed -i -e 's/void matmul_backward(/void MATMUL_BACKWARD_CPU(/g' llm.c/train_gpt2.c
55+
sed -i -e 's/void attention_backward(/void ATTENTION_BACKWARD_CPU(/g' llm.c/train_gpt2.c
56+
sed -i -e 's/void gelu_backward(/void GELU_BACKWARD_CPU(/g' llm.c/train_gpt2.c
57+
sed -i -e 's/void residual_backward(/void RESIDUAL_BACKWARD_CPU(/g' llm.c/train_gpt2.c
58+
sed -i -e 's/void crossentropy_softmax_backward(/void CROSSENTROPY_SOFTMAX_BACKWARD_CPU(/g' llm.c/train_gpt2.c
59+
grep -q "^#include \"unittest_kernels.h\"" llm.c/train_gpt2.c || sed -i '1i#include \"unittest_kernels.h\"' llm.c/train_gpt2.c
60+
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ llm.c/test_gpt2.c build/unittest_kernels.o
61+
62+
build/unittest_kernels.o: unittest_llmc/unittest_kernels.cpp unittest_llmc/unittest_kernels.h kernels.h
63+
mkdir -p build && $(CXX) $(CXXFLAGS) -DNDEBUG -c -o $@ $<
64+
1765
dawnlib: $(if $(wildcard $(GPUCPP)/third_party/lib/libdawn.so $(GPUCPP)/third_party/lib/libdawn.dylib),,run_setup)
1866

1967
run_setup: check-python
2068
cd $(GPUCPP) && python3 setup.py
2169

2270
build/$(TARGET): run.cpp
23-
mkdir -p build && $(CXX) $(FLAGS) -DNDEBUG -o ./build/$(TARGET)
71+
mkdir -p build && $(CXX) $(FLAGS) -DNDEBUG -o $@ $<
2472

2573
debug: run.cpp
26-
mkdir -p build && $(CXX) $(FLAGS) -g -o ./build/$(TARGET)
74+
mkdir -p build && $(CXX) $(FLAGS) -g -o ./build/$(TARGET) $<
2775

2876
clean:
2977
read -r -p "This will delete the contents of build/*. Are you sure? [CTRL-C to abort] " response && rm -rf build/*

0 commit comments

Comments
 (0)