一、概述
LocalAI 是一个用于本地推理的,与OpenAI API 规范兼容的REST API, 它允许使用消费级硬件在本地或本地运行模型,支持与ggml格式兼容的多个模型系列。支持CPU。
文档地址:localai.io/howtos/
模型示例文档地址: localai.io/howtos/easy…
代码仓库:https://github.com/go-skynet/LocalAI
基于 CPU的配置要求。localai.io/howtos/easy… , 我的服务器没有符合这里的要求,能跑起来,就是响应有点慢。
二、这次搭建用的配置
腾讯云轻量服务器,没有GPU。
三、安装部署
我所有脚本目录在/opt/websrv/program/LocalAI。
接着创建目录/opt/websrv/program/LocalAI
1、镜像
官方镜像在https://quay.io/repository/go-skynet/local-ai?tab=tags。
CPU版本镜像: quay.io/go-skynet/local-ai:latest
试过 `quay.io/go-skynet/local-ai:master`,`.env`配置`REBUILD=true`会报`absl`相关的错误,暂时没有去解决。
下载quay.io的镜像实在太慢,接近14G,可以试下https://dockerproxy.com/。下载好后,可以重命名镜像,推送到自己的镜像仓库,以后要用,还能下载快些。
2、下载模型
与 LocalAI 兼容的模型必须以 ggml 格式进行量化.
我只测试过luna-ai-llama2-uncensored.Q4_0.gguf,其他模型还没有测试过。
luna-ai-llama2-uncensored.Q4_0.gguf,这个模型是官方文档里提到的,链接(需要特殊下载):huggingface.co/TheBloke/Lu…
luna-ai-llama2-uncensored.Q4_0.gguf放到 models目录。
接着:
touch lunademo-chat.tmpl
touch lunademo-completion.tmpl
touch lunademo.yaml
在"lunademo-chat.tmpl"
{{.Input}}
ASSISTANT:
在文件 lunademo-completion.tmpl
Complete the following sentence: {{.Input}}
在文件 lunademo.yaml:
backend: llama
context_size: 2000
f16: true ## If you are using cpu set this to false
gpu_layers: 4
name: lunademo
parameters:
model: luna-ai-llama2-uncensored.Q4_0.gguf
temperature: 0.2
top_k: 40
top_p: 0.65
roles:
assistant: 'ASSISTANT:'
system: 'SYSTEM:'
user: 'USER:'
template:
chat: lunademo-chat
completion: lunademo-completion
备注: 修改模型,要docker compose restart
目录结构
3、docker compose 安装
备注:默认是8080端口映射,8080被占用的话,在docker-compose.yaml修改其他端口。
.env用https://github.com/go-skynet/LocalAI里的,修改地方:
## 去掉注释
THREADS=2
MODELS_PATH=/models
DEBUG=true
REBUILD=true
## 增加
CMAKE_ARGS="-DLLAMA_F16C=OFF -DLLAMA_AVX512=OFF -DLLAMA_AVX2=OFF -DLLAMA_AVX=OFF -DLLAMA_FMA=OFF"
docker-compose.yaml 用https://github.com/go-skynet/LocalAI里的。为了用域名,我自己稍改造了。
然后一键启动
docker compose up -d
4、 测试
curl http://你的域名/v1/chat/completions -H "Content-Type: application/json" -d '{
"model": "lunademo",
"messages": [{"role": "user", "content": "How are you?"}],
"temperature": 0.9
}'
其中:
model:指定要使用的特定语言模型;prompt:用于指定生成文本的起始提示或开头文本。也就是你要提的问题;temperature:用于控制生成文本的多样性。temperature值越高,生成的文本越随机和多样化,但可能会牺牲一些准确性。相反,temperature值越低,生成的文本越保守和一致,更加符合模型的训练数据;
仅是测试使用,返回的结果内容,不太理想以及默认是返回英文内容。
3、其他方式运行:docker run 运行
docker run -d -p 8080:8080 \
-e DEBUG=true -e MODELS_PATH=/models -e THREADS=2 -e REBUILD=true -e CMAKE_ARGS="-DLLAMA_F16C=OFF -DLLAMA_AVX512=OFF -DLLAMA_AVX2=OFF -DLLAMA_AVX=OFF -DLLAMA_FMA=OFF" -v $PWD/models:/models quay.io/go-skynet/local-ai:latest