github地址
https://github.com/go-skynet/LocalAI
docker images地址
注意是非docker官网,而是自部署的docker镜像地址
https://quay.io/repository/go-skynet/local-ai?tab=info
🤖 免费、开源的 OpenAI 替代方案。自托管、社区驱动、本地优先。在消费级硬件上运行的 OpenAI 的直接替代品。无需 GPU。运行 ggml、gguf、GPTQ、onnx、TF 兼容模型:llama、llama2、rwkv、whisper、vicuna、koala、cerebras、falcon、dolly、starcoder 等
简而言之:
-
本地 OpenAI 替代 REST API。拥有自己的数据。
-
无需 GPU。也不需要互联网接入
-
可选,GPU 加速可在llama.cpp兼容的 LLM 中使用。另请参阅构建部分。
-
支持多种型号
-
🏃 第一次加载后,它会将模型加载到内存中以加快推理速度
-
⚡ 不进行 shell-out,而是使用 C++ 绑定来实现更快的推理和更好的性能
本文理解
-
可以本地离线自部署的替代OpenAI的方案(也就是ChatGpt的本地替代方案)
-
无需要GPU,在消费级的设备上也可以尝试和使用(显卡GPU是大多数AI项目的基本前提)(本文就是在没有GPUI的零刻小主机上测试)
-
支持多种第三方AI大模型,选用最适合自己的,也可以进行开发和测试自己的大型语言模型应用
可以用来创建自己的聊天机器人等
重要说明
下载并运行需要网络下载10GB以上的依赖,请确保有足够的空间和流量
使用git拉取项目
因为需要它的docker-compose.yml文件和.env配置文件
git clone https://github.com/go-skynet/LocalAI.git
进入到项目文件夹
本文修改端口为3052
version: '3.6'
services:
api:
image: quay.io/go-skynet/local-ai:latest
build:
context: .
dockerfile: Dockerfile
ports:
- 3052:8080
env_file:
- ./.env
volumes:
- ./models:/models:cached
- ./images/:/tmp/generated/images/
command: ["/usr/bin/local-ai" ]
开放端口
sudo ufw allow 3052
拉取镜像并启动服务
docker-compose up
看下下图提示后说明成功
官网使用文档
https://localai.io/basics/getting_started/index.html
访问IP:端口
因为LocalAI提供的是REST API不是WEB UI,所以会报错
要么使用API方式请求,要么结合其他WEB UI来使用
如何使用web ui
https://localai.io/faq/
示例部分提供了 localai-webui 和 chatbot-ui,可以按照说明进行设置。然而,由于 LocalAI 是一个 API,您已经可以将其插入到为 OpenAI API 提供 UI 接口的现有项目中。github 上已经有几个,并且应该已经与 LocalAI 兼容(因为它模仿 OpenAI API)
这里我尝试使用ChatGPT-Next-Web
因为它的描述里也写明可以使用LocalAI
参考文章
《HomeLab迷你小主机(x86):Docker部署开源跨平台ChatGPT应用Next-Web》
本文再次部署第二个next-web
填写内网ip地址
一直报错
{
"error": true,
"message": "Failed to fetch"
}
查看控制台才发现是跨域
不同端口导致的跨域
设置frp域名代理
设置nginx跨域配置
# 允许请求地址跨域 * 做为通配符
add_header 'Access-Control-Allow-Origin' '*';
# 设置请求方法跨域
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
# 设置是否允许 cookie 传输
add_header 'Access-Control-Allow-Credentials' 'true';
# 设置请求头 这里为什么不设置通配符 * 因为不支持
add_header 'Access-Control-Allow-Headers' 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,X-Data-Type,X-Requested-With,X-Data-Type,X-Auth-Token';
但是还是不行
因为post请求会发送一个预检请求
对于预检请求要单独做处理,预检成功后才会真正开始post请求数据
nginx需要加上
这样跨域问题就解决了
# 设置 options 请求处理
if ( $request_method = 'OPTIONS' ) {
return 200;
}
发起请求,遇到错误
localai rpc error: code = unavailable desc = connection error: desc = "transport: error while dialing: dial tcp 127.0.0.1:33425: connect: connection refused"
参考文章
https://github.com/go-skynet/LocalAI/issues/771
可能是因为内存不足,也可能是没有模型
https://localai.io/basics/getting_started/
官方示例luna-ai-llama2模型使用
模型约3.6GB
下载模型到文件夹
wget https://huggingface.co/TheBloke/Luna-AI-Llama2-Uncensored-GGUF/resolve/main/luna-ai-llama2-uncensored.Q4_0.gguf -O models/luna-ai-llama2
把配置文件移动到指定文件夹
cp -rf prompt-templates/getting_started.tmpl models/luna-ai-llama2.tmpl
最终的文件
测试请求
curl http://localhost:3052/v1/models
结果
{"object":"list","data":[{"id":"luna-ai-llama2","object":"model"}]}(base) root@dsx2016:/home/dsx2016#
发起实际请求
curl http://localhost:3052/v1/chat/completions -H "Content-Type: application/json" -d '{
"model": "luna-ai-llama2",
"messages": [{"role": "user", "content": "How are you?"}],
"temperature": 0.9
}
依然报错
rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial tcp 127.0.0.1:46571: connect: connection refused"
下载ggml-gp4all-j模型
wget https://gpt4all.io/models/ggml-gpt4all-j.bin -O models/ggml-gpt4all-j
执行命令
cp -rf prompt-templates/ggml-gpt4all-j.tmpl models/
测试模型
curl http://localhost:3052/v1/models
测试效果
curl http://localhost:3052/v1/chat/completions -H "Content-Type: application/json" -d '{ "model": "ggml-gpt4all-j", "messages": [{"role": "user", "content": "How are you?"}], "temperature": 0.9 }'
放弃治疗
改天换个大内存标配x86服务器试试
避免总是内存不足或者没有GPU导致各种奇奇怪怪的报错
END.
觉得本文还行,不妨顺手点赞和收藏,下期见。
推荐阅读
《HomeLab迷你小主机(x86):Docker部署开源机器翻译LibreTranslate》
《HomeLab迷你小主机(x86):Docker部署开源AI相册应用PhotoPrism(支持树莓派部署)》
《HomeLab迷你小主机(x86):Docker部署开源跨平台ChatGPT应用Next-Web》
☕ 朋友,都看到这了,确定不关注一下么? 👇