mirror of
https://github.com/mudler/LocalAI.git
synced 2024-12-24 06:46:39 +00:00
a670318a9f
* auto select cpu variant Signed-off-by: Sertac Ozercan <sozercan@gmail.com> * remove cuda target for now Signed-off-by: Sertac Ozercan <sozercan@gmail.com> * fix metal Signed-off-by: Sertac Ozercan <sozercan@gmail.com> * fix path Signed-off-by: Sertac Ozercan <sozercan@gmail.com> * cuda Signed-off-by: Sertac Ozercan <sozercan@gmail.com> * auto select cuda Signed-off-by: Sertac Ozercan <sozercan@gmail.com> * update test Signed-off-by: Sertac Ozercan <sozercan@gmail.com> * select CUDA backend only if present Signed-off-by: mudler <mudler@localai.io> * ci: keep cuda bin in path Signed-off-by: mudler <mudler@localai.io> * Makefile: make dist now builds also cuda Signed-off-by: mudler <mudler@localai.io> * Keep pushing fallback in case auto-flagset/nvidia fails There could be other reasons for which the default binary may fail. For example we might have detected an Nvidia GPU, however the user might not have the drivers/cuda libraries installed in the system, and so it would fail to start. We keep the fallback of llama.cpp at the end of the llama.cpp backends to try to fallback loading in case things go wrong Signed-off-by: mudler <mudler@localai.io> * Do not build cuda on MacOS Signed-off-by: mudler <mudler@localai.io> * cleanup Signed-off-by: Sertac Ozercan <sozercan@gmail.com> * Apply suggestions from code review Signed-off-by: Ettore Di Giacinto <mudler@users.noreply.github.com> --------- Signed-off-by: Sertac Ozercan <sozercan@gmail.com> Signed-off-by: Ettore Di Giacinto <mudler@users.noreply.github.com> Signed-off-by: mudler <mudler@localai.io> Co-authored-by: Ettore Di Giacinto <mudler@users.noreply.github.com> Co-authored-by: mudler <mudler@localai.io>
767 lines
31 KiB
Makefile
767 lines
31 KiB
Makefile
GOCMD=go
|
|
GOTEST=$(GOCMD) test
|
|
GOVET=$(GOCMD) vet
|
|
BINARY_NAME=local-ai
|
|
|
|
# llama.cpp versions
|
|
GOLLAMA_STABLE_VERSION?=2b57a8ae43e4699d3dc5d1496a1ccd42922993be
|
|
CPPLLAMA_VERSION?=dc685be46622a8fabfd57cfa804237c8f15679b8
|
|
|
|
# gpt4all version
|
|
GPT4ALL_REPO?=https://github.com/nomic-ai/gpt4all
|
|
GPT4ALL_VERSION?=27a8b020c36b0df8f8b82a252d261cda47cf44b8
|
|
|
|
# go-rwkv version
|
|
RWKV_REPO?=https://github.com/donomii/go-rwkv.cpp
|
|
RWKV_VERSION?=661e7ae26d442f5cfebd2a0881b44e8c55949ec6
|
|
|
|
# whisper.cpp version
|
|
WHISPER_CPP_VERSION?=4ef8d9f44eb402c528ab6d990ab50a9f4f666347
|
|
|
|
# bert.cpp version
|
|
BERT_VERSION?=6abe312cded14042f6b7c3cd8edf082713334a4d
|
|
|
|
# go-piper version
|
|
PIPER_VERSION?=9d0100873a7dbb0824dfea40e8cec70a1b110759
|
|
|
|
# stablediffusion version
|
|
STABLEDIFFUSION_VERSION?=4a3cd6aeae6f66ee57eae9a0075f8c58c3a6a38f
|
|
|
|
# tinydream version
|
|
TINYDREAM_VERSION?=c04fa463ace9d9a6464313aa5f9cd0f953b6c057
|
|
|
|
export BUILD_TYPE?=
|
|
export STABLE_BUILD_TYPE?=$(BUILD_TYPE)
|
|
export CMAKE_ARGS?=
|
|
|
|
CGO_LDFLAGS?=
|
|
CGO_LDFLAGS_WHISPER?=
|
|
CUDA_LIBPATH?=/usr/local/cuda/lib64/
|
|
GO_TAGS?=
|
|
BUILD_ID?=
|
|
|
|
TEST_DIR=/tmp/test
|
|
|
|
TEST_FLAKES?=5
|
|
|
|
RANDOM := $(shell bash -c 'echo $$RANDOM')
|
|
|
|
VERSION?=$(shell git describe --always --tags || echo "dev" )
|
|
# go tool nm ./local-ai | grep Commit
|
|
LD_FLAGS?=
|
|
override LD_FLAGS += -X "github.com/go-skynet/LocalAI/internal.Version=$(VERSION)"
|
|
override LD_FLAGS += -X "github.com/go-skynet/LocalAI/internal.Commit=$(shell git rev-parse HEAD)"
|
|
|
|
OPTIONAL_TARGETS?=
|
|
|
|
OS := $(shell uname -s)
|
|
ARCH := $(shell uname -m)
|
|
GREEN := $(shell tput -Txterm setaf 2)
|
|
YELLOW := $(shell tput -Txterm setaf 3)
|
|
WHITE := $(shell tput -Txterm setaf 7)
|
|
CYAN := $(shell tput -Txterm setaf 6)
|
|
RESET := $(shell tput -Txterm sgr0)
|
|
|
|
# Default Docker bridge IP
|
|
E2E_BRIDGE_IP?=172.17.0.1
|
|
|
|
ifndef UNAME_S
|
|
UNAME_S := $(shell uname -s)
|
|
endif
|
|
|
|
ifeq ($(OS),Darwin)
|
|
|
|
ifeq ($(OSX_SIGNING_IDENTITY),)
|
|
OSX_SIGNING_IDENTITY := $(shell security find-identity -v -p codesigning | grep '"' | head -n 1 | sed -E 's/.*"(.*)"/\1/')
|
|
endif
|
|
|
|
# on OSX, if BUILD_TYPE is blank, we should default to use Metal
|
|
ifeq ($(BUILD_TYPE),)
|
|
BUILD_TYPE=metal
|
|
# disable metal if on Darwin and any other value is explicitly passed.
|
|
else ifneq ($(BUILD_TYPE),metal)
|
|
CMAKE_ARGS+=-DLLAMA_METAL=OFF
|
|
export LLAMA_NO_ACCELERATE=1
|
|
endif
|
|
|
|
ifeq ($(BUILD_TYPE),metal)
|
|
# -lcblas removed: it seems to always be listed as a duplicate flag.
|
|
CGO_LDFLAGS += -framework Accelerate
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(BUILD_TYPE),openblas)
|
|
CGO_LDFLAGS+=-lopenblas
|
|
export WHISPER_OPENBLAS=1
|
|
endif
|
|
|
|
|
|
ifeq ($(BUILD_TYPE),cublas)
|
|
CGO_LDFLAGS+=-lcublas -lcudart -L$(CUDA_LIBPATH)
|
|
export LLAMA_CUBLAS=1
|
|
export WHISPER_CUDA=1
|
|
CGO_LDFLAGS_WHISPER+=-L$(CUDA_LIBPATH)/stubs/ -lcuda
|
|
endif
|
|
|
|
ifeq ($(BUILD_TYPE),hipblas)
|
|
ROCM_HOME ?= /opt/rocm
|
|
ROCM_PATH ?= /opt/rocm
|
|
LD_LIBRARY_PATH ?= /opt/rocm/lib:/opt/rocm/llvm/lib
|
|
export CXX=$(ROCM_HOME)/llvm/bin/clang++
|
|
export CC=$(ROCM_HOME)/llvm/bin/clang
|
|
# llama-ggml has no hipblas support, so override it here.
|
|
export STABLE_BUILD_TYPE=
|
|
export WHISPER_HIPBLAS=1
|
|
GPU_TARGETS ?= gfx900,gfx90a,gfx1030,gfx1031,gfx1100
|
|
AMDGPU_TARGETS ?= "$(GPU_TARGETS)"
|
|
CMAKE_ARGS+=-DLLAMA_HIPBLAS=ON -DAMDGPU_TARGETS="$(AMDGPU_TARGETS)" -DGPU_TARGETS="$(GPU_TARGETS)"
|
|
CGO_LDFLAGS += -O3 --rtlib=compiler-rt -unwindlib=libgcc -lhipblas -lrocblas --hip-link -L${ROCM_HOME}/lib/llvm/lib
|
|
endif
|
|
|
|
ifeq ($(BUILD_TYPE),metal)
|
|
CGO_LDFLAGS+=-framework Foundation -framework Metal -framework MetalKit -framework MetalPerformanceShaders
|
|
export LLAMA_METAL=1
|
|
export WHISPER_METAL=1
|
|
endif
|
|
|
|
ifeq ($(BUILD_TYPE),clblas)
|
|
CGO_LDFLAGS+=-lOpenCL -lclblast
|
|
export WHISPER_CLBLAST=1
|
|
endif
|
|
|
|
# glibc-static or glibc-devel-static required
|
|
ifeq ($(STATIC),true)
|
|
LD_FLAGS=-linkmode external -extldflags -static
|
|
endif
|
|
|
|
ifeq ($(findstring stablediffusion,$(GO_TAGS)),stablediffusion)
|
|
# OPTIONAL_TARGETS+=go-stable-diffusion/libstablediffusion.a
|
|
OPTIONAL_GRPC+=backend-assets/grpc/stablediffusion
|
|
endif
|
|
|
|
ifeq ($(findstring tinydream,$(GO_TAGS)),tinydream)
|
|
# OPTIONAL_TARGETS+=go-tiny-dream/libtinydream.a
|
|
OPTIONAL_GRPC+=backend-assets/grpc/tinydream
|
|
endif
|
|
|
|
ifeq ($(findstring tts,$(GO_TAGS)),tts)
|
|
# OPTIONAL_TARGETS+=go-piper/libpiper_binding.a
|
|
# OPTIONAL_TARGETS+=backend-assets/espeak-ng-data
|
|
PIPER_CGO_CXXFLAGS+=-I$(CURDIR)/sources/go-piper/piper/src/cpp -I$(CURDIR)/sources/go-piper/piper/build/fi/include -I$(CURDIR)/sources/go-piper/piper/build/pi/include -I$(CURDIR)/sources/go-piper/piper/build/si/include
|
|
PIPER_CGO_LDFLAGS+=-L$(CURDIR)/sources/go-piper/piper/build/fi/lib -L$(CURDIR)/sources/go-piper/piper/build/pi/lib -L$(CURDIR)/sources/go-piper/piper/build/si/lib -lfmt -lspdlog -lucd
|
|
OPTIONAL_GRPC+=backend-assets/grpc/piper
|
|
endif
|
|
|
|
ALL_GRPC_BACKENDS=backend-assets/grpc/huggingface
|
|
ALL_GRPC_BACKENDS+=backend-assets/grpc/bert-embeddings
|
|
ALL_GRPC_BACKENDS+=backend-assets/grpc/llama-cpp-avx
|
|
ALL_GRPC_BACKENDS+=backend-assets/grpc/llama-cpp-avx2
|
|
ALL_GRPC_BACKENDS+=backend-assets/grpc/llama-cpp-fallback
|
|
ALL_GRPC_BACKENDS+=backend-assets/grpc/llama-ggml
|
|
ALL_GRPC_BACKENDS+=backend-assets/grpc/gpt4all
|
|
ALL_GRPC_BACKENDS+=backend-assets/grpc/rwkv
|
|
ALL_GRPC_BACKENDS+=backend-assets/grpc/whisper
|
|
ALL_GRPC_BACKENDS+=backend-assets/grpc/local-store
|
|
ALL_GRPC_BACKENDS+=$(OPTIONAL_GRPC)
|
|
|
|
GRPC_BACKENDS?=$(ALL_GRPC_BACKENDS) $(OPTIONAL_GRPC)
|
|
TEST_PATHS?=./api/... ./pkg/... ./core/...
|
|
|
|
# If empty, then we build all
|
|
ifeq ($(GRPC_BACKENDS),)
|
|
GRPC_BACKENDS=$(ALL_GRPC_BACKENDS)
|
|
endif
|
|
|
|
ifeq ($(BUILD_API_ONLY),true)
|
|
GRPC_BACKENDS=
|
|
endif
|
|
|
|
.PHONY: all test build vendor get-sources prepare-sources prepare
|
|
|
|
all: help
|
|
|
|
## BERT embeddings
|
|
sources/go-bert.cpp:
|
|
git clone --recurse-submodules https://github.com/go-skynet/go-bert.cpp sources/go-bert.cpp
|
|
cd sources/go-bert.cpp && git checkout -b build $(BERT_VERSION) && git submodule update --init --recursive --depth 1
|
|
|
|
sources/go-bert.cpp/libgobert.a: sources/go-bert.cpp
|
|
$(MAKE) -C sources/go-bert.cpp libgobert.a
|
|
|
|
## go-llama.cpp
|
|
sources/go-llama.cpp:
|
|
git clone --recurse-submodules https://github.com/go-skynet/go-llama.cpp sources/go-llama.cpp
|
|
cd sources/go-llama.cpp && git checkout -b build $(GOLLAMA_STABLE_VERSION) && git submodule update --init --recursive --depth 1
|
|
|
|
sources/go-llama.cpp/libbinding.a: sources/go-llama.cpp
|
|
$(MAKE) -C sources/go-llama.cpp BUILD_TYPE=$(STABLE_BUILD_TYPE) libbinding.a
|
|
|
|
## go-piper
|
|
sources/go-piper:
|
|
git clone --recurse-submodules https://github.com/mudler/go-piper sources/go-piper
|
|
cd sources/go-piper && git checkout -b build $(PIPER_VERSION) && git submodule update --init --recursive --depth 1
|
|
|
|
sources/go-piper/libpiper_binding.a: sources/go-piper
|
|
$(MAKE) -C sources/go-piper libpiper_binding.a example/main piper.o
|
|
|
|
## GPT4ALL
|
|
sources/gpt4all:
|
|
git clone --recurse-submodules $(GPT4ALL_REPO) sources/gpt4all
|
|
cd sources/gpt4all && git checkout -b build $(GPT4ALL_VERSION) && git submodule update --init --recursive --depth 1
|
|
|
|
sources/gpt4all/gpt4all-bindings/golang/libgpt4all.a: sources/gpt4all
|
|
$(MAKE) -C sources/gpt4all/gpt4all-bindings/golang/ libgpt4all.a
|
|
|
|
## RWKV
|
|
sources/go-rwkv.cpp:
|
|
git clone --recurse-submodules $(RWKV_REPO) sources/go-rwkv.cpp
|
|
cd sources/go-rwkv.cpp && git checkout -b build $(RWKV_VERSION) && git submodule update --init --recursive --depth 1
|
|
|
|
sources/go-rwkv.cpp/librwkv.a: sources/go-rwkv.cpp
|
|
cd sources/go-rwkv.cpp && cd rwkv.cpp && cmake . -DRWKV_BUILD_SHARED_LIBRARY=OFF && cmake --build . && cp librwkv.a ..
|
|
|
|
## stable diffusion
|
|
sources/go-stable-diffusion:
|
|
git clone --recurse-submodules https://github.com/mudler/go-stable-diffusion sources/go-stable-diffusion
|
|
cd sources/go-stable-diffusion && git checkout -b build $(STABLEDIFFUSION_VERSION) && git submodule update --init --recursive --depth 1
|
|
|
|
sources/go-stable-diffusion/libstablediffusion.a: sources/go-stable-diffusion
|
|
CPATH="$(CPATH):/usr/include/opencv4" $(MAKE) -C sources/go-stable-diffusion libstablediffusion.a
|
|
|
|
## tiny-dream
|
|
sources/go-tiny-dream:
|
|
git clone --recurse-submodules https://github.com/M0Rf30/go-tiny-dream sources/go-tiny-dream
|
|
cd sources/go-tiny-dream && git checkout -b build $(TINYDREAM_VERSION) && git submodule update --init --recursive --depth 1
|
|
|
|
sources/go-tiny-dream/libtinydream.a: sources/go-tiny-dream
|
|
$(MAKE) -C sources/go-tiny-dream libtinydream.a
|
|
|
|
## whisper
|
|
sources/whisper.cpp:
|
|
git clone https://github.com/ggerganov/whisper.cpp sources/whisper.cpp
|
|
cd sources/whisper.cpp && git checkout -b build $(WHISPER_CPP_VERSION) && git submodule update --init --recursive --depth 1
|
|
|
|
sources/whisper.cpp/libwhisper.a: sources/whisper.cpp
|
|
cd sources/whisper.cpp && $(MAKE) libwhisper.a
|
|
|
|
get-sources: sources/go-llama.cpp sources/gpt4all sources/go-piper sources/go-rwkv.cpp sources/whisper.cpp sources/go-bert.cpp sources/go-stable-diffusion sources/go-tiny-dream
|
|
|
|
replace:
|
|
$(GOCMD) mod edit -replace github.com/donomii/go-rwkv.cpp=$(CURDIR)/sources/go-rwkv.cpp
|
|
$(GOCMD) mod edit -replace github.com/ggerganov/whisper.cpp=$(CURDIR)/sources/whisper.cpp
|
|
$(GOCMD) mod edit -replace github.com/ggerganov/whisper.cpp/bindings/go=$(CURDIR)/sources/whisper.cpp/bindings/go
|
|
$(GOCMD) mod edit -replace github.com/go-skynet/go-bert.cpp=$(CURDIR)/sources/go-bert.cpp
|
|
$(GOCMD) mod edit -replace github.com/M0Rf30/go-tiny-dream=$(CURDIR)/sources/go-tiny-dream
|
|
$(GOCMD) mod edit -replace github.com/mudler/go-piper=$(CURDIR)/sources/go-piper
|
|
$(GOCMD) mod edit -replace github.com/mudler/go-stable-diffusion=$(CURDIR)/sources/go-stable-diffusion
|
|
$(GOCMD) mod edit -replace github.com/nomic-ai/gpt4all/gpt4all-bindings/golang=$(CURDIR)/sources/gpt4all/gpt4all-bindings/golang
|
|
$(GOCMD) mod edit -replace github.com/go-skynet/go-llama.cpp=$(CURDIR)/sources/go-llama.cpp
|
|
|
|
dropreplace:
|
|
$(GOCMD) mod edit -dropreplace github.com/donomii/go-rwkv.cpp
|
|
$(GOCMD) mod edit -dropreplace github.com/ggerganov/whisper.cpp
|
|
$(GOCMD) mod edit -dropreplace github.com/ggerganov/whisper.cpp/bindings/go
|
|
$(GOCMD) mod edit -dropreplace github.com/go-skynet/go-bert.cpp
|
|
$(GOCMD) mod edit -dropreplace github.com/M0Rf30/go-tiny-dream
|
|
$(GOCMD) mod edit -dropreplace github.com/mudler/go-piper
|
|
$(GOCMD) mod edit -dropreplace github.com/mudler/go-stable-diffusion
|
|
$(GOCMD) mod edit -dropreplace github.com/nomic-ai/gpt4all/gpt4all-bindings/golang
|
|
$(GOCMD) mod edit -dropreplace github.com/go-skynet/go-llama.cpp
|
|
|
|
prepare-sources: get-sources replace
|
|
$(GOCMD) mod download
|
|
|
|
## GENERIC
|
|
rebuild: ## Rebuilds the project
|
|
$(GOCMD) clean -cache
|
|
$(MAKE) -C sources/go-llama.cpp clean
|
|
$(MAKE) -C sources/gpt4all/gpt4all-bindings/golang/ clean
|
|
$(MAKE) -C sources/go-rwkv.cpp clean
|
|
$(MAKE) -C sources/whisper.cpp clean
|
|
$(MAKE) -C sources/go-stable-diffusion clean
|
|
$(MAKE) -C sources/go-bert.cpp clean
|
|
$(MAKE) -C sources/go-piper clean
|
|
$(MAKE) -C sources/go-tiny-dream clean
|
|
$(MAKE) build
|
|
|
|
prepare: prepare-sources $(OPTIONAL_TARGETS)
|
|
|
|
clean: ## Remove build related file
|
|
$(GOCMD) clean -cache
|
|
rm -f prepare
|
|
rm -rf ./sources
|
|
rm -rf $(BINARY_NAME)
|
|
rm -rf release/
|
|
rm -rf backend-assets/*
|
|
$(MAKE) -C backend/cpp/grpc clean
|
|
$(MAKE) -C backend/cpp/llama clean
|
|
rm -rf backend/cpp/llama-* || true
|
|
$(MAKE) dropreplace
|
|
$(MAKE) protogen-clean
|
|
rmdir pkg/grpc/proto || true
|
|
|
|
clean-tests:
|
|
rm -rf test-models
|
|
rm -rf test-dir
|
|
rm -rf core/http/backend-assets
|
|
|
|
## Build:
|
|
build: prepare backend-assets grpcs ## Build the project
|
|
$(info ${GREEN}I local-ai build info:${RESET})
|
|
$(info ${GREEN}I BUILD_TYPE: ${YELLOW}$(BUILD_TYPE)${RESET})
|
|
$(info ${GREEN}I GO_TAGS: ${YELLOW}$(GO_TAGS)${RESET})
|
|
$(info ${GREEN}I LD_FLAGS: ${YELLOW}$(LD_FLAGS)${RESET})
|
|
CGO_LDFLAGS="$(CGO_LDFLAGS)" $(GOCMD) build -ldflags "$(LD_FLAGS)" -tags "$(GO_TAGS)" -o $(BINARY_NAME) ./
|
|
|
|
build-minimal:
|
|
BUILD_GRPC_FOR_BACKEND_LLAMA=true GRPC_BACKENDS="backend-assets/grpc/llama-cpp" GO_TAGS=none $(MAKE) build
|
|
|
|
build-api:
|
|
BUILD_GRPC_FOR_BACKEND_LLAMA=true BUILD_API_ONLY=true GO_TAGS=none $(MAKE) build
|
|
|
|
dist:
|
|
STATIC=true $(MAKE) backend-assets/grpc/llama-cpp-avx2
|
|
ifeq ($(OS),Darwin)
|
|
$(info ${GREEN}I Skip CUDA build on MacOS${RESET})
|
|
else
|
|
$(MAKE) backend-assets/grpc/llama-cpp-cuda
|
|
endif
|
|
$(MAKE) build
|
|
mkdir -p release
|
|
# if BUILD_ID is empty, then we don't append it to the binary name
|
|
ifeq ($(BUILD_ID),)
|
|
cp $(BINARY_NAME) release/$(BINARY_NAME)-$(OS)-$(ARCH)
|
|
else
|
|
cp $(BINARY_NAME) release/$(BINARY_NAME)-$(BUILD_ID)-$(OS)-$(ARCH)
|
|
endif
|
|
|
|
osx-signed: build
|
|
codesign --deep --force --sign "$(OSX_SIGNING_IDENTITY)" --entitlements "./Entitlements.plist" "./$(BINARY_NAME)"
|
|
|
|
## Run
|
|
run: prepare ## run local-ai
|
|
CGO_LDFLAGS="$(CGO_LDFLAGS)" $(GOCMD) run ./
|
|
|
|
test-models/testmodel.ggml:
|
|
mkdir test-models
|
|
mkdir test-dir
|
|
wget -q https://huggingface.co/TheBloke/orca_mini_3B-GGML/resolve/main/orca-mini-3b.ggmlv3.q4_0.bin -O test-models/testmodel.ggml
|
|
wget -q https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.en.bin -O test-models/whisper-en
|
|
wget -q https://huggingface.co/mudler/all-MiniLM-L6-v2/resolve/main/ggml-model-q4_0.bin -O test-models/bert
|
|
wget -q https://cdn.openai.com/whisper/draft-20220913a/micro-machines.wav -O test-dir/audio.wav
|
|
wget -q https://huggingface.co/mudler/rwkv-4-raven-1.5B-ggml/resolve/main/RWKV-4-Raven-1B5-v11-Eng99%2525-Other1%2525-20230425-ctx4096_Q4_0.bin -O test-models/rwkv
|
|
wget -q https://raw.githubusercontent.com/saharNooby/rwkv.cpp/5eb8f09c146ea8124633ab041d9ea0b1f1db4459/rwkv/20B_tokenizer.json -O test-models/rwkv.tokenizer.json
|
|
cp tests/models_fixtures/* test-models
|
|
|
|
prepare-test: grpcs
|
|
cp -rf backend-assets core/http
|
|
cp tests/models_fixtures/* test-models
|
|
|
|
test: prepare test-models/testmodel.ggml grpcs
|
|
@echo 'Running tests'
|
|
export GO_TAGS="tts stablediffusion debug"
|
|
$(MAKE) prepare-test
|
|
HUGGINGFACE_GRPC=$(abspath ./)/backend/python/sentencetransformers/run.sh TEST_DIR=$(abspath ./)/test-dir/ FIXTURES=$(abspath ./)/tests/fixtures CONFIG_FILE=$(abspath ./)/test-models/config.yaml MODELS_PATH=$(abspath ./)/test-models \
|
|
$(GOCMD) run github.com/onsi/ginkgo/v2/ginkgo --label-filter="!gpt4all && !llama && !llama-gguf" --flake-attempts $(TEST_FLAKES) --fail-fast -v -r $(TEST_PATHS)
|
|
$(MAKE) test-gpt4all
|
|
$(MAKE) test-llama
|
|
$(MAKE) test-llama-gguf
|
|
$(MAKE) test-tts
|
|
$(MAKE) test-stablediffusion
|
|
|
|
prepare-e2e:
|
|
mkdir -p $(TEST_DIR)
|
|
cp -rfv $(abspath ./tests/e2e-fixtures)/gpu.yaml $(TEST_DIR)/gpu.yaml
|
|
test -e $(TEST_DIR)/ggllm-test-model.bin || wget -q https://huggingface.co/TheBloke/CodeLlama-7B-Instruct-GGUF/resolve/main/codellama-7b-instruct.Q2_K.gguf -O $(TEST_DIR)/ggllm-test-model.bin
|
|
docker build --build-arg GRPC_BACKENDS="$(GRPC_BACKENDS)" --build-arg IMAGE_TYPE=core --build-arg BUILD_TYPE=$(BUILD_TYPE) --build-arg CUDA_MAJOR_VERSION=11 --build-arg CUDA_MINOR_VERSION=7 --build-arg FFMPEG=true -t localai-tests .
|
|
|
|
run-e2e-image:
|
|
ls -liah $(abspath ./tests/e2e-fixtures)
|
|
docker run -p 5390:8080 -e MODELS_PATH=/models -e THREADS=1 -e DEBUG=true -d --rm -v $(TEST_DIR):/models --gpus all --name e2e-tests-$(RANDOM) localai-tests
|
|
|
|
run-e2e-aio:
|
|
@echo 'Running e2e AIO tests'
|
|
$(GOCMD) run github.com/onsi/ginkgo/v2/ginkgo --flake-attempts 5 -v -r ./tests/e2e-aio
|
|
|
|
test-e2e:
|
|
@echo 'Running e2e tests'
|
|
BUILD_TYPE=$(BUILD_TYPE) \
|
|
LOCALAI_API=http://$(E2E_BRIDGE_IP):5390/v1 \
|
|
$(GOCMD) run github.com/onsi/ginkgo/v2/ginkgo --flake-attempts 5 -v -r ./tests/e2e
|
|
|
|
teardown-e2e:
|
|
rm -rf $(TEST_DIR) || true
|
|
docker stop $$(docker ps -q --filter ancestor=localai-tests)
|
|
|
|
test-gpt4all: prepare-test
|
|
TEST_DIR=$(abspath ./)/test-dir/ FIXTURES=$(abspath ./)/tests/fixtures CONFIG_FILE=$(abspath ./)/test-models/config.yaml MODELS_PATH=$(abspath ./)/test-models \
|
|
$(GOCMD) run github.com/onsi/ginkgo/v2/ginkgo --label-filter="gpt4all" --flake-attempts 5 -v -r $(TEST_PATHS)
|
|
|
|
test-llama: prepare-test
|
|
TEST_DIR=$(abspath ./)/test-dir/ FIXTURES=$(abspath ./)/tests/fixtures CONFIG_FILE=$(abspath ./)/test-models/config.yaml MODELS_PATH=$(abspath ./)/test-models \
|
|
$(GOCMD) run github.com/onsi/ginkgo/v2/ginkgo --label-filter="llama" --flake-attempts 5 -v -r $(TEST_PATHS)
|
|
|
|
test-llama-gguf: prepare-test
|
|
TEST_DIR=$(abspath ./)/test-dir/ FIXTURES=$(abspath ./)/tests/fixtures CONFIG_FILE=$(abspath ./)/test-models/config.yaml MODELS_PATH=$(abspath ./)/test-models \
|
|
$(GOCMD) run github.com/onsi/ginkgo/v2/ginkgo --label-filter="llama-gguf" --flake-attempts 5 -v -r $(TEST_PATHS)
|
|
|
|
test-tts: prepare-test
|
|
TEST_DIR=$(abspath ./)/test-dir/ FIXTURES=$(abspath ./)/tests/fixtures CONFIG_FILE=$(abspath ./)/test-models/config.yaml MODELS_PATH=$(abspath ./)/test-models \
|
|
$(GOCMD) run github.com/onsi/ginkgo/v2/ginkgo --label-filter="tts" --flake-attempts 1 -v -r $(TEST_PATHS)
|
|
|
|
test-stablediffusion: prepare-test
|
|
TEST_DIR=$(abspath ./)/test-dir/ FIXTURES=$(abspath ./)/tests/fixtures CONFIG_FILE=$(abspath ./)/test-models/config.yaml MODELS_PATH=$(abspath ./)/test-models \
|
|
$(GOCMD) run github.com/onsi/ginkgo/v2/ginkgo --label-filter="stablediffusion" --flake-attempts 1 -v -r $(TEST_PATHS)
|
|
|
|
test-stores: backend-assets/grpc/local-store
|
|
mkdir -p tests/integration/backend-assets/grpc
|
|
cp -f backend-assets/grpc/local-store tests/integration/backend-assets/grpc/
|
|
$(GOCMD) run github.com/onsi/ginkgo/v2/ginkgo --label-filter="stores" --flake-attempts 1 -v -r tests/integration
|
|
|
|
test-container:
|
|
docker build --target requirements -t local-ai-test-container .
|
|
docker run -ti --rm --entrypoint /bin/bash -ti -v $(abspath ./):/build local-ai-test-container
|
|
|
|
## Help:
|
|
help: ## Show this help.
|
|
@echo ''
|
|
@echo 'Usage:'
|
|
@echo ' ${YELLOW}make${RESET} ${GREEN}<target>${RESET}'
|
|
@echo ''
|
|
@echo 'Targets:'
|
|
@awk 'BEGIN {FS = ":.*?## "} { \
|
|
if (/^[a-zA-Z_-]+:.*?##.*$$/) {printf " ${YELLOW}%-20s${GREEN}%s${RESET}\n", $$1, $$2} \
|
|
else if (/^## .*$$/) {printf " ${CYAN}%s${RESET}\n", substr($$1,4)} \
|
|
}' $(MAKEFILE_LIST)
|
|
|
|
.PHONY: protogen
|
|
protogen: protogen-go protogen-python
|
|
|
|
.PHONY: protogen-clean
|
|
protogen-clean: protogen-go-clean protogen-python-clean
|
|
|
|
.PHONY: protogen-go
|
|
protogen-go:
|
|
mkdir -p pkg/grpc/proto
|
|
protoc -Ibackend/ --go_out=pkg/grpc/proto/ --go_opt=paths=source_relative --go-grpc_out=pkg/grpc/proto/ --go-grpc_opt=paths=source_relative \
|
|
backend/backend.proto
|
|
|
|
.PHONY: protogen-go-clean
|
|
protogen-go-clean:
|
|
$(RM) pkg/grpc/proto/backend.pb.go pkg/grpc/proto/backend_grpc.pb.go
|
|
$(RM) bin/*
|
|
|
|
.PHONY: protogen-python
|
|
protogen-python: autogptq-protogen bark-protogen coqui-protogen diffusers-protogen exllama-protogen exllama2-protogen mamba-protogen petals-protogen rerankers-protogen sentencetransformers-protogen transformers-protogen parler-tts-protogen transformers-musicgen-protogen vall-e-x-protogen vllm-protogen
|
|
|
|
.PHONY: protogen-python-clean
|
|
protogen-python-clean: autogptq-protogen-clean bark-protogen-clean coqui-protogen-clean diffusers-protogen-clean exllama-protogen-clean exllama2-protogen-clean mamba-protogen-clean petals-protogen-clean sentencetransformers-protogen-clean rerankers-protogen-clean transformers-protogen-clean transformers-musicgen-protogen-clean parler-tts-protogen-clean vall-e-x-protogen-clean vllm-protogen-clean
|
|
|
|
.PHONY: autogptq-protogen
|
|
autogptq-protogen:
|
|
$(MAKE) -C backend/python/autogptq protogen
|
|
|
|
.PHONY: autogptq-protogen-clean
|
|
autogptq-protogen-clean:
|
|
$(MAKE) -C backend/python/autogptq protogen-clean
|
|
|
|
.PHONY: bark-protogen
|
|
bark-protogen:
|
|
$(MAKE) -C backend/python/bark protogen
|
|
|
|
.PHONY: bark-protogen-clean
|
|
bark-protogen-clean:
|
|
$(MAKE) -C backend/python/bark protogen-clean
|
|
|
|
.PHONY: coqui-protogen
|
|
coqui-protogen:
|
|
$(MAKE) -C backend/python/coqui protogen
|
|
|
|
.PHONY: coqui-protogen-clean
|
|
coqui-protogen-clean:
|
|
$(MAKE) -C backend/python/coqui protogen-clean
|
|
|
|
.PHONY: diffusers-protogen
|
|
diffusers-protogen:
|
|
$(MAKE) -C backend/python/diffusers protogen
|
|
|
|
.PHONY: diffusers-protogen-clean
|
|
diffusers-protogen-clean:
|
|
$(MAKE) -C backend/python/diffusers protogen-clean
|
|
|
|
.PHONY: exllama-protogen
|
|
exllama-protogen:
|
|
$(MAKE) -C backend/python/exllama protogen
|
|
|
|
.PHONY: exllama-protogen-clean
|
|
exllama-protogen-clean:
|
|
$(MAKE) -C backend/python/exllama protogen-clean
|
|
|
|
.PHONY: exllama2-protogen
|
|
exllama2-protogen:
|
|
$(MAKE) -C backend/python/exllama2 protogen
|
|
|
|
.PHONY: exllama2-protogen-clean
|
|
exllama2-protogen-clean:
|
|
$(MAKE) -C backend/python/exllama2 protogen-clean
|
|
|
|
.PHONY: mamba-protogen
|
|
mamba-protogen:
|
|
$(MAKE) -C backend/python/mamba protogen
|
|
|
|
.PHONY: mamba-protogen-clean
|
|
mamba-protogen-clean:
|
|
$(MAKE) -C backend/python/mamba protogen-clean
|
|
|
|
.PHONY: petals-protogen
|
|
petals-protogen:
|
|
$(MAKE) -C backend/python/petals protogen
|
|
|
|
.PHONY: petals-protogen-clean
|
|
petals-protogen-clean:
|
|
$(MAKE) -C backend/python/petals protogen-clean
|
|
|
|
.PHONY: rerankers-protogen
|
|
rerankers-protogen:
|
|
$(MAKE) -C backend/python/rerankers protogen
|
|
|
|
.PHONY: rerankers-protogen-clean
|
|
rerankers-protogen-clean:
|
|
$(MAKE) -C backend/python/rerankers protogen-clean
|
|
|
|
.PHONY: sentencetransformers-protogen
|
|
sentencetransformers-protogen:
|
|
$(MAKE) -C backend/python/sentencetransformers protogen
|
|
|
|
.PHONY: sentencetransformers-protogen-clean
|
|
sentencetransformers-protogen-clean:
|
|
$(MAKE) -C backend/python/sentencetransformers protogen-clean
|
|
|
|
.PHONY: transformers-protogen
|
|
transformers-protogen:
|
|
$(MAKE) -C backend/python/transformers protogen
|
|
|
|
.PHONY: transformers-protogen-clean
|
|
transformers-protogen-clean:
|
|
$(MAKE) -C backend/python/transformers protogen-clean
|
|
|
|
.PHONY: parler-tts-protogen
|
|
parler-tts-protogen:
|
|
$(MAKE) -C backend/python/parler-tts protogen
|
|
|
|
.PHONY: parler-tts-protogen-clean
|
|
parler-tts-protogen-clean:
|
|
$(MAKE) -C backend/python/parler-tts protogen-clean
|
|
|
|
.PHONY: transformers-musicgen-protogen
|
|
transformers-musicgen-protogen:
|
|
$(MAKE) -C backend/python/transformers-musicgen protogen
|
|
|
|
.PHONY: transformers-musicgen-protogen-clean
|
|
transformers-musicgen-protogen-clean:
|
|
$(MAKE) -C backend/python/transformers-musicgen protogen-clean
|
|
|
|
.PHONY: vall-e-x-protogen
|
|
vall-e-x-protogen:
|
|
$(MAKE) -C backend/python/vall-e-x protogen
|
|
|
|
.PHONY: vall-e-x-protogen-clean
|
|
vall-e-x-protogen-clean:
|
|
$(MAKE) -C backend/python/vall-e-x protogen-clean
|
|
|
|
.PHONY: vllm-protogen
|
|
vllm-protogen:
|
|
$(MAKE) -C backend/python/vllm protogen
|
|
|
|
.PHONY: vllm-protogen-clean
|
|
vllm-protogen-clean:
|
|
$(MAKE) -C backend/python/vllm protogen-clean
|
|
|
|
## GRPC
|
|
# Note: it is duplicated in the Dockerfile
|
|
prepare-extra-conda-environments: protogen-python
|
|
$(MAKE) -C backend/python/autogptq
|
|
$(MAKE) -C backend/python/bark
|
|
$(MAKE) -C backend/python/coqui
|
|
$(MAKE) -C backend/python/diffusers
|
|
$(MAKE) -C backend/python/vllm
|
|
$(MAKE) -C backend/python/mamba
|
|
$(MAKE) -C backend/python/sentencetransformers
|
|
$(MAKE) -C backend/python/rerankers
|
|
$(MAKE) -C backend/python/transformers
|
|
$(MAKE) -C backend/python/transformers-musicgen
|
|
$(MAKE) -C backend/python/parler-tts
|
|
$(MAKE) -C backend/python/vall-e-x
|
|
$(MAKE) -C backend/python/exllama
|
|
$(MAKE) -C backend/python/petals
|
|
$(MAKE) -C backend/python/exllama2
|
|
|
|
prepare-test-extra: protogen-python
|
|
$(MAKE) -C backend/python/transformers
|
|
$(MAKE) -C backend/python/diffusers
|
|
|
|
test-extra: prepare-test-extra
|
|
$(MAKE) -C backend/python/transformers test
|
|
$(MAKE) -C backend/python/diffusers test
|
|
|
|
backend-assets:
|
|
mkdir -p backend-assets
|
|
ifeq ($(BUILD_API_ONLY),true)
|
|
touch backend-assets/keep
|
|
endif
|
|
|
|
backend-assets/espeak-ng-data: sources/go-piper sources/go-piper/libpiper_binding.a
|
|
mkdir -p backend-assets/espeak-ng-data
|
|
@cp -rf sources/go-piper/piper-phonemize/pi/share/espeak-ng-data/. backend-assets/espeak-ng-data
|
|
|
|
backend-assets/gpt4all: sources/gpt4all sources/gpt4all/gpt4all-bindings/golang/libgpt4all.a
|
|
mkdir -p backend-assets/gpt4all
|
|
@cp sources/gpt4all/gpt4all-bindings/golang/buildllm/*.so backend-assets/gpt4all/ || true
|
|
@cp sources/gpt4all/gpt4all-bindings/golang/buildllm/*.dylib backend-assets/gpt4all/ || true
|
|
@cp sources/gpt4all/gpt4all-bindings/golang/buildllm/*.dll backend-assets/gpt4all/ || true
|
|
|
|
backend-assets/grpc: protogen-go replace
|
|
mkdir -p backend-assets/grpc
|
|
|
|
backend-assets/grpc/bert-embeddings: sources/go-bert.cpp sources/go-bert.cpp/libgobert.a backend-assets/grpc
|
|
CGO_LDFLAGS="$(CGO_LDFLAGS)" C_INCLUDE_PATH=$(CURDIR)/sources/go-bert.cpp LIBRARY_PATH=$(CURDIR)/sources/go-bert.cpp \
|
|
$(GOCMD) build -ldflags "$(LD_FLAGS)" -tags "$(GO_TAGS)" -o backend-assets/grpc/bert-embeddings ./backend/go/llm/bert/
|
|
|
|
backend-assets/grpc/gpt4all: sources/gpt4all sources/gpt4all/gpt4all-bindings/golang/libgpt4all.a backend-assets/gpt4all backend-assets/grpc
|
|
CGO_LDFLAGS="$(CGO_LDFLAGS)" C_INCLUDE_PATH=$(CURDIR)/sources/gpt4all/gpt4all-bindings/golang/ LIBRARY_PATH=$(CURDIR)/sources/gpt4all/gpt4all-bindings/golang/ \
|
|
$(GOCMD) build -ldflags "$(LD_FLAGS)" -tags "$(GO_TAGS)" -o backend-assets/grpc/gpt4all ./backend/go/llm/gpt4all/
|
|
|
|
backend-assets/grpc/huggingface: backend-assets/grpc
|
|
$(GOCMD) build -ldflags "$(LD_FLAGS)" -tags "$(GO_TAGS)" -o backend-assets/grpc/huggingface ./backend/go/llm/langchain/
|
|
|
|
backend/cpp/llama/llama.cpp:
|
|
LLAMA_VERSION=$(CPPLLAMA_VERSION) $(MAKE) -C backend/cpp/llama llama.cpp
|
|
|
|
INSTALLED_PACKAGES=$(CURDIR)/backend/cpp/grpc/installed_packages
|
|
INSTALLED_LIB_CMAKE=$(INSTALLED_PACKAGES)/lib/cmake
|
|
ADDED_CMAKE_ARGS=-Dabsl_DIR=${INSTALLED_LIB_CMAKE}/absl \
|
|
-DProtobuf_DIR=${INSTALLED_LIB_CMAKE}/protobuf \
|
|
-Dutf8_range_DIR=${INSTALLED_LIB_CMAKE}/utf8_range \
|
|
-DgRPC_DIR=${INSTALLED_LIB_CMAKE}/grpc \
|
|
-DCMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES=${INSTALLED_PACKAGES}/include
|
|
build-llama-cpp-grpc-server:
|
|
# Conditionally build grpc for the llama backend to use if needed
|
|
ifdef BUILD_GRPC_FOR_BACKEND_LLAMA
|
|
$(MAKE) -C backend/cpp/grpc build
|
|
_PROTOBUF_PROTOC=${INSTALLED_PACKAGES}/bin/proto \
|
|
_GRPC_CPP_PLUGIN_EXECUTABLE=${INSTALLED_PACKAGES}/bin/grpc_cpp_plugin \
|
|
PATH="${INSTALLED_PACKAGES}/bin:${PATH}" \
|
|
CMAKE_ARGS="${CMAKE_ARGS} ${ADDED_CMAKE_ARGS}" \
|
|
LLAMA_VERSION=$(CPPLLAMA_VERSION) \
|
|
$(MAKE) -C backend/cpp/${VARIANT} grpc-server
|
|
else
|
|
echo "BUILD_GRPC_FOR_BACKEND_LLAMA is not defined."
|
|
LLAMA_VERSION=$(CPPLLAMA_VERSION) $(MAKE) -C backend/cpp/${VARIANT} grpc-server
|
|
endif
|
|
|
|
backend-assets/grpc/llama-cpp-avx2: backend-assets/grpc
|
|
cp -rf backend/cpp/llama backend/cpp/llama-avx2
|
|
$(MAKE) -C backend/cpp/llama-avx2 purge
|
|
$(info ${GREEN}I llama-cpp build info:avx2${RESET})
|
|
CMAKE_ARGS="$(CMAKE_ARGS) -DLLAMA_AVX=on -DLLAMA_AVX2=on -DLLAMA_AVX512=off -DLLAMA_FMA=on -DLLAMA_F16C=on" $(MAKE) VARIANT="llama-avx2" build-llama-cpp-grpc-server
|
|
cp -rfv backend/cpp/llama-avx2/grpc-server backend-assets/grpc/llama-cpp-avx2
|
|
|
|
backend-assets/grpc/llama-cpp-avx: backend-assets/grpc
|
|
cp -rf backend/cpp/llama backend/cpp/llama-avx
|
|
$(MAKE) -C backend/cpp/llama-avx purge
|
|
$(info ${GREEN}I llama-cpp build info:avx${RESET})
|
|
CMAKE_ARGS="$(CMAKE_ARGS) -DLLAMA_AVX=on -DLLAMA_AVX2=off -DLLAMA_AVX512=off -DLLAMA_FMA=off -DLLAMA_F16C=off" $(MAKE) VARIANT="llama-avx" build-llama-cpp-grpc-server
|
|
cp -rfv backend/cpp/llama-avx/grpc-server backend-assets/grpc/llama-cpp-avx
|
|
|
|
backend-assets/grpc/llama-cpp-fallback: backend-assets/grpc
|
|
cp -rf backend/cpp/llama backend/cpp/llama-fallback
|
|
$(MAKE) -C backend/cpp/llama-fallback purge
|
|
$(info ${GREEN}I llama-cpp build info:fallback${RESET})
|
|
CMAKE_ARGS="$(CMAKE_ARGS) -DLLAMA_AVX=off -DLLAMA_AVX2=off -DLLAMA_AVX512=off -DLLAMA_FMA=off -DLLAMA_F16C=off" $(MAKE) VARIANT="llama-fallback" build-llama-cpp-grpc-server
|
|
cp -rfv backend/cpp/llama-fallback/grpc-server backend-assets/grpc/llama-cpp-fallback
|
|
# TODO: every binary should have its own folder instead, so can have different metal implementations
|
|
ifeq ($(BUILD_TYPE),metal)
|
|
cp backend/cpp/llama-fallback/llama.cpp/build/bin/default.metallib backend-assets/grpc/
|
|
endif
|
|
|
|
backend-assets/grpc/llama-cpp-cuda: backend-assets/grpc
|
|
cp -rf backend/cpp/llama backend/cpp/llama-cuda
|
|
$(MAKE) -C backend/cpp/llama-cuda purge
|
|
$(info ${GREEN}I llama-cpp build info:cuda${RESET})
|
|
CMAKE_ARGS="$(CMAKE_ARGS) -DLLAMA_AVX=on -DLLAMA_AVX2=off -DLLAMA_AVX512=off -DLLAMA_FMA=off -DLLAMA_F16C=off -DLLAMA_CUDA=ON" $(MAKE) VARIANT="llama-cuda" build-llama-cpp-grpc-server
|
|
cp -rfv backend/cpp/llama-cuda/grpc-server backend-assets/grpc/llama-cpp-cuda
|
|
|
|
backend-assets/grpc/llama-ggml: sources/go-llama.cpp sources/go-llama.cpp/libbinding.a backend-assets/grpc
|
|
CGO_LDFLAGS="$(CGO_LDFLAGS)" C_INCLUDE_PATH=$(CURDIR)/sources/go-llama.cpp LIBRARY_PATH=$(CURDIR)/sources/go-llama.cpp \
|
|
$(GOCMD) build -ldflags "$(LD_FLAGS)" -tags "$(GO_TAGS)" -o backend-assets/grpc/llama-ggml ./backend/go/llm/llama-ggml/
|
|
|
|
backend-assets/grpc/piper: sources/go-piper sources/go-piper/libpiper_binding.a backend-assets/grpc backend-assets/espeak-ng-data
|
|
CGO_CXXFLAGS="$(PIPER_CGO_CXXFLAGS)" CGO_LDFLAGS="$(PIPER_CGO_LDFLAGS)" LIBRARY_PATH=$(CURDIR)/sources/go-piper \
|
|
$(GOCMD) build -ldflags "$(LD_FLAGS)" -tags "$(GO_TAGS)" -o backend-assets/grpc/piper ./backend/go/tts/
|
|
|
|
backend-assets/grpc/rwkv: sources/go-rwkv.cpp sources/go-rwkv.cpp/librwkv.a backend-assets/grpc
|
|
CGO_LDFLAGS="$(CGO_LDFLAGS)" C_INCLUDE_PATH=$(CURDIR)/sources/go-rwkv.cpp LIBRARY_PATH=$(CURDIR)/sources/go-rwkv.cpp \
|
|
$(GOCMD) build -ldflags "$(LD_FLAGS)" -tags "$(GO_TAGS)" -o backend-assets/grpc/rwkv ./backend/go/llm/rwkv
|
|
|
|
backend-assets/grpc/stablediffusion: sources/go-stable-diffusion sources/go-stable-diffusion/libstablediffusion.a backend-assets/grpc
|
|
CGO_LDFLAGS="$(CGO_LDFLAGS)" CPATH="$(CPATH):$(CURDIR)/sources/go-stable-diffusion/:/usr/include/opencv4" LIBRARY_PATH=$(CURDIR)/sources/go-stable-diffusion/ \
|
|
$(GOCMD) build -ldflags "$(LD_FLAGS)" -tags "$(GO_TAGS)" -o backend-assets/grpc/stablediffusion ./backend/go/image/stablediffusion
|
|
|
|
backend-assets/grpc/tinydream: sources/go-tiny-dream sources/go-tiny-dream/libtinydream.a backend-assets/grpc
|
|
CGO_LDFLAGS="$(CGO_LDFLAGS)" LIBRARY_PATH=$(CURDIR)/go-tiny-dream \
|
|
$(GOCMD) build -ldflags "$(LD_FLAGS)" -tags "$(GO_TAGS)" -o backend-assets/grpc/tinydream ./backend/go/image/tinydream
|
|
|
|
backend-assets/grpc/whisper: sources/whisper.cpp sources/whisper.cpp/libwhisper.a backend-assets/grpc
|
|
CGO_LDFLAGS="$(CGO_LDFLAGS) $(CGO_LDFLAGS_WHISPER)" C_INCLUDE_PATH=$(CURDIR)/sources/whisper.cpp LIBRARY_PATH=$(CURDIR)/sources/whisper.cpp \
|
|
$(GOCMD) build -ldflags "$(LD_FLAGS)" -tags "$(GO_TAGS)" -o backend-assets/grpc/whisper ./backend/go/transcribe/
|
|
|
|
backend-assets/grpc/local-store: backend-assets/grpc
|
|
$(GOCMD) build -ldflags "$(LD_FLAGS)" -tags "$(GO_TAGS)" -o backend-assets/grpc/local-store ./backend/go/stores/
|
|
|
|
grpcs: prepare $(GRPC_BACKENDS)
|
|
|
|
DOCKER_IMAGE?=local-ai
|
|
DOCKER_AIO_IMAGE?=local-ai-aio
|
|
IMAGE_TYPE?=core
|
|
BASE_IMAGE?=ubuntu:22.04
|
|
|
|
docker:
|
|
docker build \
|
|
--build-arg BASE_IMAGE=$(BASE_IMAGE) \
|
|
--build-arg IMAGE_TYPE=$(IMAGE_TYPE) \
|
|
--build-arg GO_TAGS="$(GO_TAGS)" \
|
|
--build-arg MAKEFLAGS="$(DOCKER_MAKEFLAGS)" \
|
|
--build-arg BUILD_TYPE=$(BUILD_TYPE) \
|
|
-t $(DOCKER_IMAGE) .
|
|
|
|
docker-aio:
|
|
@echo "Building AIO image with base $(BASE_IMAGE) as $(DOCKER_AIO_IMAGE)"
|
|
docker build \
|
|
--build-arg BASE_IMAGE=$(BASE_IMAGE) \
|
|
--build-arg MAKEFLAGS="$(DOCKER_MAKEFLAGS)" \
|
|
-t $(DOCKER_AIO_IMAGE) -f Dockerfile.aio .
|
|
|
|
docker-aio-all:
|
|
$(MAKE) docker-aio DOCKER_AIO_SIZE=cpu
|
|
$(MAKE) docker-aio DOCKER_AIO_SIZE=cpu
|
|
|
|
docker-image-intel:
|
|
docker build \
|
|
--build-arg BASE_IMAGE=intel/oneapi-basekit:2024.1.0-devel-ubuntu22.04 \
|
|
--build-arg IMAGE_TYPE=$(IMAGE_TYPE) \
|
|
--build-arg GO_TAGS="none" \
|
|
--build-arg MAKEFLAGS="$(DOCKER_MAKEFLAGS)" \
|
|
--build-arg BUILD_TYPE=sycl_f32 -t $(DOCKER_IMAGE) .
|
|
|
|
docker-image-intel-xpu:
|
|
docker build \
|
|
--build-arg BASE_IMAGE=intel/oneapi-basekit:2024.1.0-devel-ubuntu22.04 \
|
|
--build-arg IMAGE_TYPE=$(IMAGE_TYPE) \
|
|
--build-arg GO_TAGS="none" \
|
|
--build-arg MAKEFLAGS="$(DOCKER_MAKEFLAGS)" \
|
|
--build-arg BUILD_TYPE=sycl_f32 -t $(DOCKER_IMAGE) .
|
|
|
|
.PHONY: swagger
|
|
swagger:
|
|
swag init -g core/http/app.go --output swagger
|