Serge让你在本地运行LLaMa模型🦙

什么是 Serge ?

Serge 是基于 llama.cpp 运行 Alpaca 模型的聊天界面。完全自托管,不需要 API 密钥。适合 4GB RAM 并且能在 CPU 上运行。

什么是 LLaMA ?

LLaMA 是一种机器学习算法,全称为 Laplacian Regularized Least Squares for Multiple Kernel Learning。它是一种多核学习方法,可以用于处理多个核函数的数据集,以提高分类或回归的准确性。LLaMA 算法利用拉普拉斯正则化技术来平衡不同核函数的贡献,从而提高分类或回归的性能。LLaMA 算法已经在许多领域得到了广泛的应用,包括生物信息学、图像识别、自然语言处理等。

什么是 llama.cpp

llama.cpp 是在 C/C++ 中移植的 FacebookLLaMA 模型。

什么是 Alpaca 模型 ?

Alpaca 模型是一种基于深度学习的自然语言处理模型,它可以用于文本分类、情感分析、问答系统等任务。Alpaca 模型采用了一种特殊的网络结构,称为“路径卷积神经网络”( Path Convolutional Neural Network,PCNN),该网络结构可以同时处理词序列和句法树,从而提高了模型的性能。此外,Alpaca 模型还使用了一种叫做“自适应注意力”( Adaptive Attention)的机制,可以自动地调整不同单词的权重,从而更好地捕捉句子的意义。Alpaca 模型已经在多个自然语言处理任务上取得了优秀的表现,成为了该领域中的一个重要研究方向之一。

老苏试了下,4GB 内存有点够呛,尤其是你的群晖还跑了其他的服务,如果有 8GB可以试试,不需要 GPU 还是不错的,虽然运算速度慢点

注意事项

CPU

目前 Serge 需要与 AVX2 指令兼容的 CPU ,老苏猜测应该是因为 MongoDB 的缘故。官方给的检测命令是:

1
2
# 检测 cpu 是否支持 AVX2
lscpu | grep avx2

但是在群晖上,并没有 lscpu,所以老苏咨询了 ChatGPT ,他给老苏提供了下面的命令, 请用SSH 客户端登录到群晖后,在命令行中运行

1
2
# 检测 cpu 是否支持 AVX2
cat /proc/cpuinfo | grep avx2

如果输出包含 avx2,则表示您的 CPU 支持 AVX2。如果未找到 avx2,则表示您的 CPU 不支持 AVX2

内存

如果您的模型没有足够的可用内存,llama 就会崩溃,下面是官方提供的数据:

  • 7B 需要大约 4.5GB 的空闲 RAM
  • 13B 需要大约 12GB 的空闲RAM
  • 30B 需要大约 20GB 的空闲RAM

安装

ghcr.io 镜像下载

官方的镜像没有发布在 docker hub,而是在 ghcr.io,所以直接用命令行来安装。

SSH 客户端中依次执行下面的命令

1
2
# 下载镜像
docker pull ghcr.io/nsarrazin/serge:latest

如果没有科学上网,很可能会拉不动,可以试试 docker 代理网站:https://dockerproxy.com/,但是会多几个步骤

1
2
3
4
5
6
7
8
# 如果拉不动的话加个代理
docker pull ghcr.dockerproxy.com/nsarrazin/serge:latest

# 重命名镜像(如果是通过代理下载的)
docker tag ghcr.dockerproxy.com/nsarrazin/serge:latest ghcr.io/nsarrazin/serge:latest

# 删除代理镜像(如果是通过代理下载的)
docker rmi ghcr.dockerproxy.com/nsarrazin/serge:latest

当然代理网站也不是什么时候都好使,有时候也会报错,例如下面👇这样的

1
Error response from daemon: received unexpected HTTP status: 500 Internal Server Error

所以有一个稳定的科学上网环境还是很重要的

docker cli 安装

现在可以开始运行了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 新建文件夹 serge 和 子目录
mkdir -p /volume2/docker/serge/{data,weights}

# 进入 serge 目录
cd /volume2/docker/serge

# 运行容器
docker run -d \
--restart unless-stopped \
--name serge \
-p 8018:8008 \
-v $(pwd)/data:/data/db \
-v $(pwd)/weights:/usr/src/app/weights \
ghcr.io/nsarrazin/serge:latest

docker compose 安装

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
version: '3'

services:
serge:
image: ghcr.io/nsarrazin/serge:latest
container_name: serge
restart: unless-stopped
ports:
- 8018:8008
volumes:
- ./data:/data/db
- ./weights:/usr/src/app/weights
- /etc/localtime:/etc/localtime:ro

然后执行下面的命令

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 serge 和 子目录
mkdir -p /volume2/docker/serge/{data,weights}

# 进入 serge 目录
cd /volume2/docker/serge

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:8018 就能看到主界面

首先要点 Download model下载模型

老苏下了 gpt4all ,文件大小和 7B7B-native 是一样的,估摸着内存占用应该是一样的,但具体有什么区别老苏不清楚 🤦‍♂️

下载速度挺快的,日志中看不到具体的下载地址

点左侧的 Home 回到首页

聊天之前,可以设置模型的参数,但是说实话,老苏也不明白这些该如何设置,所以就保持了默认的

点紫色的 Start a new chat 开始聊天

老苏问了第一个问题 你支持中文吗?

感觉一下就把天给聊死了,这接下来怎么聊呢?老苏的英文水平也就能说个 What's you name?How are you?How old are you?

老苏的机器是 4G 内存的, CPU 也比较古老,所以每个问题都需要很长时间才会有应答,差不多每个问题也就一顿饭的功夫吧 😁

昨晚装好之后,第一个问题是中文的,其实难道也不大,但还是直接把机器给整的没响应了,早上起来一看重启了,估计是资源耗尽了吧,有兴趣的话,你也可以试试

参考文档

nsarrazin/serge: A web interface for chatting with Alpaca through llama.cpp. Fully dockerized, with an easy to use API.
地址:https://github.com/nsarrazin/serge

https://serge.chat
地址:https://serge.chat/

[P] Serge, a self-hosted app for running LLaMa models (Alpaca) entirely locally, no remote API needed. : MachineLearning
地址:https://www.reddit.com/r/MachineLearning/comments/11yvbzc/p_serge_a_selfhosted_app_for_running_llama_models/