缘起
在给自己的服务器安装了一个显卡后,我就想充分利用这块显卡,于是我就想到了部署一个大语言模型。这样就不用每月订阅付费的ChatGPT了。毕竟有时我用ChatGPT的频率并不高,每月20美元的订阅费用有点贵。如果可以自己部署一个私有的大语言模型,一来是可以使用各种大语言模型,不会局限于ChatGPT,二来即使开源的大语言模型效果不如付费版的ChatGTP,也可以使用OpenAI的API调用ChatGPT的接口,可以达到和使用ChatGPT付费版差不多的效果,但每月的费用应该用不到20美元。
前提
- 已有一个服务器,或者本地电脑
- 已安装了Docker和docker-compose
- 若有显卡,已安装了相关驱动
前置知识
大语言模型(LLM)是一种基于深度学习的自然语言处理模型,它可以生成自然语言文本。大语言模型的训练需要大量的计算资源,因此通常需要在显卡上进行训练。目前,有很多开源的大语言模型,如GPT-2、GPT-3、T5等。这些模型都是基于Transformer架构的,它们在自然语言处理任务上取得了很好的效果。
要想自己部署一个大语言模型,一般需要三个组件:
- 训练好的模型:是一些公司或者研究机构训练好的大语言模型,一般以PyTorch或TensorFlow的模型文件的形式保存。模型文件通常很大,需要几GB到几十GB的存储空间。一般根据自己的显卡显存大小来选择,例如很多模型是7B的,表示模型的参数有7亿个,一般可以在8GB显存的显卡上运行。
- 运行模型的框架:是一个可以加载模型文件,并在显卡上运行模型的程序。这里我们使用ollama,它可以加载各种模型文件,并允许用户训练、微调、部署大模型。
- 用户交户的前端界面:是一个可以与用户交互的界面,用户可以输入文本,模型会生成回复。这里我们使用LobeChat,它是一个基于Web的用户交互界面,可以与ollama集成。
ollama
ollama是一个开源的大语言模型框架,它可以加载各种模型文件,并允许用户训练、微调、部署大模型。ollama支持PyTorch和TensorFlow的模型文件,可以在CPU和GPU上运行。ollama提供了一个RESTful API,用户可以通过HTTP请求调用模型。
ollama支持Windows、Linux和macOS系统,可以在本地电脑或者服务器上运行,也可以在Docker容器中运行。这里我们使用Docker容器运行ollama。
安装
我们使用Docker容器来部署ollama,用我们在文章“容器(2):docker最佳实践指南——docker-compose和Portainer”中介绍的方法,将ollama部署在Docker容器中。
-
在
~/docker
目录下创建一个子目录ollama
,用于存放ollama的相关文件。 -
在
~/docker/ollama
目录下创建docker-compose.yml
文件,用于定义ollama的配置。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
services: ollama: container_name: ollama image: ollama/ollama environment: - OLLAMA_ORIGINS=* - OLLAMA_HOST=0.0.0.0 - OLLAMA_MODELS=/root/.ollama/models ports: - "11434:11434" deploy: resources: reservations: devices: - driver: nvidia capabilities: ["gpu"] count: all volumes: - ollama:/root/.ollama restart: always volumes: ollama:
-
运行
docker-compose up -d
命令启动ollama容器。
使用
ollama中常用的命令有:
ollama train
:用于训练模型。ollama pull
:用于下载预训练模型。ollama serve
:用于启动ollama服务。
-
我们可以通过
docker exec -it ollama bash
命令进入ollama容器,然后执行命令。 -
首先我们需要下载一个预训练模型,例如我们可以下载一个llama3.1模型:
1
ollama pull llama3.1
当然也有很多其他模型,你可以在ollama模型库中查看。
-
然后我们测试是否可以使用这个模型:
1 2 3 4 5 6 7
curl http://127.0.0.1:11434/api/generate -d '{ "model": "llama3.1", "prompt": "Why is the sky blue?", "options": { "num_ctx": 4096 } }'
我们向通过ollama提供的RESTful API发送一个HTTP POST请求,问llama3.1模型为什么天空是蓝色的。如果我们部署的ollama运行良好的话,llama3.1会返回一个JSON格式的响应,包含生成的文本。
LobeChat
LobeChat是一个基于Web的用户交互界面,可以与ollama集成。用户可以在LobeChat中输入文本,ollama会生成回复。LobeChat提供了一个简单的界面,用户可以在浏览器中使用。
LobeChat还支持语音合成、图片识别、多模态、插件等功能,用户可以通过LobeChat与ollama进行多种交互。
安装
LobeChat是一个基于Node.js的应用程序,可以在各种操作系统上运行。我们可以使用Docker容器来部署LobeChat。
-
在
~/docker
目录下创建一个子目录lobe-chat
,用于存放LobeChat的相关文件。 -
在
~/docker/lobe-chat
目录下创建docker-compose.yml
文件,用于定义LobeChat的配置。1 2 3 4 5 6 7 8 9
services: lobe-chat: container_name: lobe-chat image: lobe-chat/lobe-chat environment: - OLLAMA_URL=http://127.0.0.1:11434 ports: - "3000:3000" restart: always
-
运行
docker-compose up -d
命令启动LobeChat容器。
使用
在完成上述步骤后,我们可以在浏览器中访问http://localhost:3000
,即可进入LobeChat的界面(第一次打开这个页面可能需要等待几十秒完成初始化):
然后,我们就可以利用LobeChat与ollama进行交互了,就像使用ChatGPT一样。需要注意的是,我们需要选择在ollama中已经下载的模型。例如上面我们下载了Llama3.1 8B模型,我们就可以在LobeChat中选择Llama3.1模型。
配置其他模型
LobeChat还支持其他很多模型,例如Open AI,Google的Gemini,通义千问等。我们可以点击左上角的头像,在菜单中选择“设置”,打开设置页面,然后选择“语言模型”选项卡,即可看到所有支持的模型。你可以选择开启或关闭某个模型,也可以填入模型需要的API Key来使用这些模型。
远程访问
如果想要在远程也能使用LobeChat,你可以根据之前的文章“从公网访问个人网站——Nginx反向代理配置”中介绍的方法,用Nginx设置一个反向代理,和你的域名绑定,然后通过域名访问LobeChat。