源码构建
源码构建
LocalAI 可以作为容器镜像或单个可移植二进制文件构建。请注意,某些模型架构可能需要 Python 库,这些库不包括在二进制文件中。二进制文件仅包含用 Go 和 C++ 编写的核心后端。
LocalAI 的可扩展架构允许您添加自己的后端,可以用任何语言编写,因此容器镜像还包含运行所有可用后端(例如,为了运行允许从文本生成图像和视频的 Diffusers 后端)所需的 Python 依赖项。
在某些情况下,您可能希望从源代码重新构建 LocalAI(例如,利用 Apple Silicon 加速),或者构建带有您自己的后端的自定义容器镜像。本节包含有关如何从源代码构建 LocalAI 的说明。
在本地构建 LocalAI
要求
要在本地构建 LocalAI,您需要以下要求:
- Golang >= 1.21
- Cmake/make
- GCC
- GRPC
要安装依赖项,请按照以下说明操作:
# Apple
brew install abseil cmake go grpc protobuf protoc-gen-go protoc-gen-go-grpc python wget
# Debian
apt install cmake golang libgrpc-dev make protobuf-compiler-grpc python3-grpc-tools
# From source
make ... BUILD_GRPC_FOR_BACKEND_LLAMA=true build
构建
使用 make
构建 LocalAI:
git clone https://github.com/go-skynet/LocalAI
cd LocalAI
make build
这将生成二进制文件 local-ai
以下是可以用于自定义构建的变量的列表:
变量名 | 默认值 | 描述 |
---|---|---|
BUILD_TYPE | None | 构建类型。可用:cublas , openblas , clblas , metal , hipblas , sycl_f16 , sycl_f32 |
GO_TAGS | tts stablediffusion | Go 标签。可用:stablediffusion , tts |
CLBLAST_DIR | 指定 CLBlast 目录 | |
CUDA_LIBPATH | 指定 CUDA 库路径 | |
BUILD_API_ONLY | false | 设置为 true 以仅构建 API(不会构建后端) |
CPU flagset 兼容性
LocalAI 使用基于 ggml 和 llama.cpp 的不同后端来运行模型。如果您的 CPU 不支持常见的指令集,您可以在构建期间禁用它们:
CMAKE_ARGS="-DGGML_F16C=OFF -DGGML_AVX512=OFF -DGGML_AVX2=OFF -DGGML_AVX=OFF -DGGML_FMA=OFF" make build
要在容器镜像中生效,您需要设置 REBUILD=true
:
docker run quay.io/go-skynet/localai
docker run --rm -ti -p 8080:8080 -e DEBUG=true -e MODELS_PATH=/models -e THREADS=1 -e REBUILD=true -e CMAKE_ARGS="-DGGML_F16C=OFF -DGGML_AVX512=OFF -DGGML_AVX2=OFF -DGGML_AVX=OFF -DGGML_FMA=OFF" -v $PWD/models:/models quay.io/go-skynet/local-ai:latest
容器镜像
要求:
- Docker 或 podman,或容器引擎
要在本地构建 LocalAI
容器镜像,可以使用 docker
,例如:
# 构建镜像
docker build -t localai .
docker run localai
有一些构建参数可用于自定义构建:
变量名 | 默认值 | 描述 |
---|---|---|
IMAGE_TYPE | extras | 构建类型。可用:core , extras |
示例:在 mac 上构建
在 Mac(M1、M2 或 M3)上构建是可行的,但您可能需要使用 brew
安装一些先决条件。
以下是一个 mac 用户测试并确认可行的示例。请注意,这不会使用 Docker 来运行服务器:
从 App Store 安装 xcode
(用于 metalkit)
# 安装构建依赖项
brew install abseil cmake go grpc protobuf wget protoc-gen-go protoc-gen-go-grpc
# 克隆仓库
git clone https://github.com/go-skynet/LocalAI.git
cd LocalAI
# 构建二进制文件
make build
# 下载 phi-2 到 models/
wget https://huggingface.co/TheBloke/phi-2-GGUF/resolve/main/phi-2.Q2_K.gguf -O models/phi-2.Q2_K
# 使用示例中的模板
cp -rf prompt-templates/ggml-gpt4all-j.tmpl models/phi-2.Q2_K.tmpl
# 运行 LocalAI
./local-ai --models-path=./models/ --debug=true
# 现在 API 可通过 localhost:8080 访问
curl http://localhost:8080/v1/models
curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{
"model": "phi-2.Q2_K",
"messages": [{"role": "user", "content": "How are you?"}],
"temperature": 0.9
}'
mac 故障排除
如果遇到关于缺少实用程序 metal 的错误,请从 App Store 安装
Xcode
。安装 Xcode 后,如果您收到 xcrun 错误
'xcrun: error: unable to find utility "metal", not a developer tool or in PATH'
,可能是因为在安装 Xcode 命令行工具之前安装了 Xcode,前者指向了不完整的 SDK。
# 打印 /Library/Developer/CommandLineTools,如果提前安装了命令行工具
xcode-select --print-path
# 指向完整的 SDK
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
如果完成操作缓慢,请确保模型 yaml 中的
gpu-layers
与使用的模型的层数相匹配(或者简单地使用一个高数字,例如 256)。如果遇到编译错误:
error: only virtual member functions can be marked 'final'
,请重新安装所有必要的 brew 包,清理构建,然后重试。
# 重新安装构建依赖项
brew reinstall abseil cmake go grpc protobuf wget
make clean
make build
要求:OpenCV,Gomp
图像生成需要在构建期间设置 GO_TAGS=stablediffusion
:
make GO_TAGS=stablediffusion build
构建带有文本转语音支持
要求:piper-phonemize
文本转语音支持是实验性的,需要在构建期间设置 GO_TAGS=tts
:
make GO_TAGS=tts build
加速
OpenBLAS
软件加速。
要求:OpenBLAS
make BUILD_TYPE=openblas build
CuBLAS
Nvidia 加速。
要求:Nvidia CUDA toolkit
注意:CuBLAS 支持是实验性的,尚未在真实硬件上测试。请报告您发现的任何问题!
make BUILD_TYPE=cublas build
更多详细信息可在上游 PR 中找到:https://github.com/ggerganov/llama.cpp/pull/1412
Hipblas (AMD GPU with ROCm on Arch Linux)
包:
pacman -S base-devel git rocm-hip-sdk rocm-opencl-sdk opencv clblast grpc
库链接:
export CGO_CFLAGS="-I/usr/include/opencv4"
export CGO_CXXFLAGS="-I/usr/include/opencv4"
export CGO_LDFLAGS="-L/opt/rocm/hip/lib -lamdhip64 -L/opt/rocm/lib -lOpenCL -L/usr/lib -lclblast -lrocblas -lhipblas -lrocrand -lomp -O3 --rtlib=compiler-rt -unwindlib=libgcc -lhipblas -lrocblas --hip-link"
构建:
make BUILD_TYPE=hipblas GPU_TARGETS=gfx1030
ClBLAS
AMD/Intel GPU 加速。
要求:OpenCL,CLBlast
make BUILD_TYPE=clblas build
指定 CLBlast 目录:CLBLAST_DIR
Intel GPU 加速
Intel GPU 加速通过 SYCL 支持。
要求:Intel oneAPI Base Toolkit(参见 also llama.cpp setup installations instructions)
make BUILD_TYPE=sycl_f16 build # for float16
make BUILD_TYPE=sycl_f32 build # for float32
Metal (Apple Silicon)
make build
# mac 上自动使用正确的构建类型 (BUILD_TYPE=metal)
# 设置模型配置文件中的 `gpu_layers: 256`(或等于模型层数)和 `f16: true`
Windows 兼容性
确保为运行的容器提供足够的资源。参见 https://github.com/go-skynet/LocalAI/issues/2
示例
还有更高级的构建选项可用,例如仅构建单个后端。
仅构建单个后端
您可以通过设置 GRPC_BACKENDS
环境变量来控制要构建的后端。例如,仅构建 llama-cpp
后端:
make GRPC_BACKENDS=backend-assets/grpc/llama-cpp build
默认情况下,会构建所有后端。
指定 llama.cpp 版本
要使用特定版本的 llama.cpp 构建,请将 CPPLLAMA_VERSION
设置为标签或所需的 sha:
CPPLLAMA_VERSION=<sha> make build