本地搭建 LocalAI 部署大模型(CPU版本)

5,414 阅读2分钟

一、概述

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… , 我的服务器没有符合这里的要求,能跑起来,就是响应有点慢。

image.png

二、这次搭建用的配置

腾讯云轻量服务器,没有GPU。

image.png

三、安装部署

我所有脚本目录在/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

目录结构

image.png

3、docker compose 安装

备注:默认是8080端口映射,8080被占用的话,在docker-compose.yaml修改其他端口。

.envhttps://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 值越低,生成的文本越保守和一致,更加符合模型的训练数据;

仅是测试使用,返回的结果内容,不太理想以及默认是返回英文内容。

image.png

image.png

image.png

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