ChatGLM & LangChain
参考: 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模型了,并且可以问答,能不能做一个像钢铁侠里贾维斯一样的机器人呢。有如下几点需求
- 能回答基本问题,如果回答不了则使用搜索引擎,分析并得到结果,并进行迭代。
- 能处理网上的信息, 并更新迭代。
- 能主动问询。
- 。。。。
思维过程:
- 以我现在的硬件设施无法训练模型。
- 使用知识库?chatgpt好像是这样的原理,一个大语言模型,不断完善的知识库,构成了现在的chatgpt。
- 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搭建运行环境,模型从宿主机挂载进容器。
- 拉取仓库 & 进入目录
$ git clone https://github.com/chatchat-space/Langchain-Chatchat.git
$ cd Langchain-Chatchat
- 安装全部依赖(有点慢)
$ pip install -r requirements.txt
$ pip install -r requirements_api.txt
$ pip install -r requirements_webui.txt
- 下载模型
$ git lfs install
$ git clone https://huggingface.co/THUDM/chatglm2-6b
$ git clone https://huggingface.co/moka-ai/m3e-base
如果chatglm2-6b已经下载,不用重复下载。
- 初始化配置文件
$ python copy_config_example.py
使用上述命令后需要到configs/model_config.py文件中修改模型的地址,其他没有下载的模型注释掉,只保留 chatglm2-6b 和m3e-base这两个模型的地址。
- 初始化知识库
$ python init_database.py --recreate-vs
- 按照以下命令启动项目
$ python startup.py -a
总结
- 现阶段openai gpt4出来了,而且有一个gpt builder可以使用,可以用自己的知识库打造一个专业机器人,更方便快捷而且不占用自己的硬件。
- 花了一个星期研究和部署,暂时结束,后续有时间再研究。
--完--
- 原文作者: 留白
- 原文链接: https://zfunnily.github.io/2023/11/chatglm/
- 更新时间:2024-04-16 01:01:05
- 本文声明:转载请标记原文作者及链接