参考: https://www.luckzym.com/posts/e95da08c/#more

环境准备

  • Win11

  • linux 子系统 wsl2

  • Ubuntu22.04子系统

  • Docker for windows

  • ChatGLM 项目模型下载

  • 显卡 4070 12G

  • 内存 16G*2

  • cpu 13600kf

nvidia-docker安装

https://juejin.cn/s/windows%20nvidia-docker%E5%AE%89%E8%A3%85

# Add the package repositories
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
  sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
  sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update

# Install nvidia-docker2 and reload the Docker daemon configuration
sudo apt-get install -y nvidia-docker2

需要修改文件 /etc/docker/daemon.json runtimes

$ cat /etc/docker/daemon.json 
{
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

我虽然用的是Docker for window,但是是docker运行在ubuntu子系统中。可以在子系统中修改,也可以在Docker for window 中的设置 Docker Engine中修改上述内容。

重启docker

sudo pkill -SIGHUP dockerd

运行 GPU 容器:请在命令行中运行以下命令

$ docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi

docker-compose & Dockerfile

version: "3.9"
services:
  nvidia:
    build: .        # 告诉Docker Compose在当前目录中查找Dockerfile并构建镜像
    runtime: nvidia # 启用nvidia-container-runtime作为Docker容器的参数,从而实现对GPU的支持
    container_name: chatglm-6b
    environment:
      - NVIDIA_VISIBLE_DEVICES=all  # 设置所有可用的GPU设备
    ports:
      - "22:22"         # port for ssh
      - "80:80"         # port for Web
      - "8000:8000"     # port for API
    tty: true           # 创建一个伪终端以保持容器运行状态
    # 添加一个和宿主机连接的路径
    volumes:
      - ./:/data

下载模型 & 克隆仓库

参考: https://github.com/THUDM/ChatGLM2-6B#%E4%BB%8E%E6%9C%AC%E5%9C%B0%E5%8A%A0%E8%BD%BD%E6%A8%A1%E5%9E%8B 需要科学上网,从云盘下载的模型,在回答问题上是乱说的。所以还是得从 huggingface 下载模型

$ git clone https://huggingface.co/THUDM/chatglm2-6b

云盘模型地址: https://cloud.tsinghua.edu.cn/d/674208019e314311ab5c/

将模型下载到本地之后,将以上代码中的 THUDM/chatglm2-6b 替换为你本地的 chatglm2-6b 文件夹的路径,即可从本地加载模型。

运行

进入镜像

$ docker exec it -name chatglm-6b /bin/bash

安装依赖

pip install -r requirements.txt

修改webdemo.py的 模型文件目录 & 启动ui界面

$ vi web_demo.py
tokenizer = AutoTokenizer.from_pretrained("模型目录/chatglm2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("模型目录/chatglm2-6b", trust_remote_code=True, device='cuda')

$ python web_demo.py

后续

我在想,已经有AI模型了,并且可以问答,能不能做一个像钢铁侠里贾维斯一样的机器人呢。有如下几点需求

  1. 能回答基本问题,如果回答不了则使用搜索引擎,分析并得到结果,并进行迭代。
  2. 能处理网上的信息, 并更新迭代。
  3. 能主动问询。
  4. 。。。。

思维过程:

  1. 以我现在的硬件设施无法训练模型。
  2. 使用知识库?chatgpt好像是这样的原理,一个大语言模型,不断完善的知识库,构成了现在的chatgpt。
  3. langchain-chatchat 现有项目使用模型+知识库的解决方案。

部署 langchain-chatchat

docker一键部署

$ docker run -d --gpus all -p 80:8501 registry.cn-beijing.aliyuncs.com/chatchat/chatchat:0.2.7

这是比较简单的方式, 环境和模型都在里面了。不过镜像有点大40G左右

自己使用docker搭建运行环境,模型从宿主机挂载进容器。

  1. 拉取仓库 & 进入目录
$ git clone https://github.com/chatchat-space/Langchain-Chatchat.git
$ cd Langchain-Chatchat
  1. 安装全部依赖(有点慢)
$ pip install -r requirements.txt 
$ pip install -r requirements_api.txt
$ pip install -r requirements_webui.txt  
  1. 下载模型
$ git lfs install
$ git clone https://huggingface.co/THUDM/chatglm2-6b
$ git clone https://huggingface.co/moka-ai/m3e-base

如果chatglm2-6b已经下载,不用重复下载。

  1. 初始化配置文件
$ python copy_config_example.py

使用上述命令后需要到configs/model_config.py文件中修改模型的地址,其他没有下载的模型注释掉,只保留 chatglm2-6b 和m3e-base这两个模型的地址。

  1. 初始化知识库
$ python init_database.py --recreate-vs
  1. 按照以下命令启动项目
$ python startup.py -a

总结

  1. 现阶段openai gpt4出来了,而且有一个gpt builder可以使用,可以用自己的知识库打造一个专业机器人,更方便快捷而且不占用自己的硬件。
  2. 花了一个星期研究和部署,暂时结束,后续有时间再研究。

--完--