Featured image of post 使用ollama和LobeChat在本地或者服务器上部署私有的大语言模型

使用ollama和LobeChat在本地或者服务器上部署私有的大语言模型

使用ollama和LobeChat在本地或者服务器上部署私有的大语言模型,替代ChatGPT

缘起

在给自己的服务器安装了一个显卡后,我就想充分利用这块显卡,于是我就想到了部署一个大语言模型。这样就不用每月订阅付费的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容器中。

  1. ~/docker目录下创建一个子目录ollama,用于存放ollama的相关文件。

  2. ~/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:
    
  3. 运行docker-compose up -d命令启动ollama容器。

使用

ollama中常用的命令有:

  • ollama train:用于训练模型。
  • ollama pull:用于下载预训练模型。
  • ollama serve:用于启动ollama服务。
  1. 我们可以通过docker exec -it ollama bash命令进入ollama容器,然后执行命令。

  2. 首先我们需要下载一个预训练模型,例如我们可以下载一个llama3.1模型:

    1
    
    ollama pull llama3.1
    

    当然也有很多其他模型,你可以在ollama模型库中查看。

  3. 然后我们测试是否可以使用这个模型:

    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。

  1. ~/docker目录下创建一个子目录lobe-chat,用于存放LobeChat的相关文件。

  2. ~/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
    
  3. 运行docker-compose up -d命令启动LobeChat容器。

使用

在完成上述步骤后,我们可以在浏览器中访问http://localhost:3000,即可进入LobeChat的界面(第一次打开这个页面可能需要等待几十秒完成初始化):

LobeChat Init

然后,我们就可以利用LobeChat与ollama进行交互了,就像使用ChatGPT一样。需要注意的是,我们需要选择在ollama中已经下载的模型。例如上面我们下载了Llama3.1 8B模型,我们就可以在LobeChat中选择Llama3.1模型。

LobeChat

配置其他模型

LobeChat还支持其他很多模型,例如Open AI,Google的Gemini,通义千问等。我们可以点击左上角的头像,在菜单中选择“设置”,打开设置页面,然后选择“语言模型”选项卡,即可看到所有支持的模型。你可以选择开启或关闭某个模型,也可以填入模型需要的API Key来使用这些模型。

LobeChat Settings

远程访问

如果想要在远程也能使用LobeChat,你可以根据之前的文章“从公网访问个人网站——Nginx反向代理配置”中介绍的方法,用Nginx设置一个反向代理,和你的域名绑定,然后通过域名访问LobeChat。

comments powered by Disqus