赞
踩
ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的新一代对话预训练模型。
由于大语言模型参数量较大,对资源的算力需求高,而CPU资源有限,所以需要采用GPU去进行训练。
安装NVIDIA驱动以及CUDA Toolkit 11.8,地址如下:https://developer.nvidia.com/cuda-11-8-0-download-archive?target_os=Linux。选择对应的安装包进行下载并安装
安装PyTorch,到此地址https://pytorch.org/get-started/locally/并根据本机硬件选择的版本
安装 torch 和其他依赖项。使用 conda 安装。
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
安装NVIDIA驱动和CUDA Toolkit,让系统识别GPU,安装PyTorch框架,利用GPU来加速深度学习模型训练,安装torch和依赖库,为在Python中使用PyTorch提供软件环境支持,完成这三步就可以在Linux系统中利用GPU来进行深度学习开发和训练工作了。
确保安装了与你的 CUDA 版本兼容的 torch 版本。按如下步骤验证是否已经安装正确,如果是以下结果,则安装正确,否则根据提示进行对应的修复
torch.cuda.is_available()
(py3.10) D:\ChatGLM3>python
>>> import torch
>>> print(torch.version)
2.1.2
>>> torch.cuda.is_available()
True
Anaconda3类似虚拟环境的管理,如果后面需要多玩几个AI的项目,可以避免环境冲突。
的开源平台,对于数据科学家和机器学习工程师来说是一个很好的选择
让系统全局识别并使用Anaconda环境下的各种程序和工具。配置Anaconda环境变量主要是为了让系统能够找到并使用Anaconda安装的程序和工具。
具体来说,需要在Path环境变量中添加以下Anaconda目录路径:
1. Anaconda安装目录,比如D:\Anaconda3。
添加此路径虽然不是必须的,但可以让系统直接找到Anaconda目录下的其他文件。
2. Anaconda安装目录下的Scripts文件夹路径,比如D:\Anaconda3\Scripts。
这是因为Anaconda内置的命令行工具如conda、python等都安装在这个Scripts文件夹中。添加此路径后,就可以在任何地方直接通过命令行调用这些工具。
3. Anaconda安装目录下的Library\bin文件夹路径,比如D:\Anaconda3\Library\bin。
Library\bin文件夹中包含了Anaconda安装的一些系统程序和库文件。添加此路径可以让系统找到并加载这些程序。
4. Anaconda安装目录下的Library\mingw-w64\bin文件夹路径,比如D:\Anaconda3\Library\mingw-w64\bin。
mingw-w64包含了Windows系统下的编译工具等,配置此路径可以让系统找到这些编译相关的程序和库文件。
5. Anaconda安装目录下的Library\usr\bin文件夹路径,比如D:\Anaconda3\Library\usr\bin。
usr目录下也包含一些系统程序,配置此路径目的和上面Library\bin类似,让系统找到并加载其中的程序。
所以总的来说,配置这几个Anaconda相关路径到Path环境变量中,可以让系统全局识别并调用Anaconda内置的命令行工具和程序,从而方便我们使用Anaconda环境。
打开命令提示符,输入conda --version或conda info查看当前conda版本信息。
如果提示conda不是内部或外部命令,那就是Anaconda的环境变量没配置好,需要重新检查一下。
打开终端powershell,安装并创建一个新的chatglm3的虚拟环境,有助于后续隔离不同的项目依赖项。
conda create -n chatglm3-6b python=3.11
activate chatglm3-6b
安装激活后进入该虚拟环境进行项目部署
从 GitHub 克隆 ChatGLM3-6B 模型仓库到当前路径下。
git clone https://github.com/THUDM/ChatGLM3
cd ChatGLM3
安装git大型文件仓库,运行git lfs install来初始化Git LFS,然后从 Hugging Face Hub 将模型下载到本地
git lfs install
git clone https://huggingface.co/THUDM/chatglm3-6b
- 源码:包含模型的整个代码框架、网络结构定义、训练/评估脚本等。它记录了模型的整体设计和实现细节。
- 预训练模型:只包含经过训练后的模型参数权重文件。它记录了模型在特定数据集上的学习结果。
- 源码可以让用户了解模型的设计思路,修改和优化模型结构。但需要自行训练才能得到模型。预训练模型直接提供了经过训练的模型参数,可以直接加载使用,但不了解训练细节和不能修改模型结构。
- 本地部署ChatGLM3模型时,需要同时下载源码和预训练模型文件: 源码是必须的,它包含模型结构定义、预测脚本等需要的代码实现。预训练模型文件也是必须的,因为我们需要加载这个已经训练好的模型来进行预测。
在项目目录中,安装模型所需的依赖项。
pip install -r requirements.txt
分别配置模型路径以及模型的代码内核jupyter内核。
set IPYKERNEL=chatglm-6b-demo
因为在Code Interpreter: 代码解释器模式时,模型是在一个 Jupyter 环境中执行代码并获取结果,以完成复杂任务,因此需要定义jupyter内核在本项目的虚拟环境。
这样的话只有当环境变量为chatglm3_demo的情况下,Notebook才会使用我们定制的这个kernel运行,保证代码执行环境的一致性。
Jupyter Notebook支持多种编程语言,每个语言都对应一个kernel。当我们启动一个Notebook时,它会根据环境变量ipykernel来选择使用哪个kernel。
设置ipykernel为chatglm3_demo,意味着这个Notebook将使用名为chatglm3_demo的kernel运行。这可能是一个自定义开发的kernel,专门为这个项目定制。
比如我们可能开发了一个chatbot项目,里面包含了一些机器学习模型训练和预测等代码。为了区分这个项目使用的Notebook与其他项目,我们就新建一个名为chatglm3_demo的kernel,并设置环境变量ipykernel指向它。
这样一来,只有在这个环境变量设置为chatglm3_demo的情况下,Notebook才会使用我们定制的这个kernel运行,保证代码执行环境的一致性。
streamlit界面的模型代码
进入composite_demo路径下用streamlit命令执行代码运行main.py这个脚本即可。
streamlit run main.py
bugs:
在运行模型过程中可能会存在一些bug,主要就是两个库没有安装,transformer库和dartet这两个库:
chatglm模型采用Transformer结构,即采用编码器-解码器框架进行搭建,其运行环境是Dart语言,需要在运行chatglm的环境中先安装dartet库,以支持chatglm源码中对机器学习功能的调用。
QAnything (Question and Answer based on Anything) 是网易推出的致力于支持任意格式文件或数据库的本地知识库问答系统,可断网安装使用。
必要项 | 最低要求 |
---|---|
NVIDIA GPU Memory | >= 16GB |
NVIDIA Driver 版本 | >= 525.105.17 |
CUDA 版本 | >= 12.0 |
docker compose 版本 | >=1.27.4 |
在之前的项目中,cuda以及nvdia driver都是下载最新版本的,均满足要求,只需要下载docker-compose即可。
安装docker-compose并放置到windows目录下,同时需要启动docker软件,因为docker-compose使用需要依赖docker
conda create -n qanything python=3.11
activate qanything
git clone https://github.com/netease-youdao/QAnything.git
cd QAnything
#从git数据仓库下载模型数据
git lfs install #初始化仓库:会修改仓库的配置,将超大文件类型设置为使用Git LFS管理。执行这个命令后,该仓库中的超大文件就会使用Git LFS来追踪和版本控制,不再直接保存在Git对象数据库中。
git clone https://www.modelscope.cn/netease-youdao/qanything_models.git
unzip qanything_models/models.zip # in root directory of the current project #在根目录下解压模型
#安装modelscope库,从魔塔社区进行sdk下载模型数据到指定路径
modelscope install
from modelscope import snapshot_download
download_path = 'D:/Qanything'
model_dir = snapshot_download('netease-youdao/QAnything',cache_dir=download_path)
在Windows系统下(更改cuda到适合的设备)
vim docker-compose-windows.yaml # change CUDA_VISIBLE_DEVICES to your gpu device id
error:docker-credential-desktop not installed or not available in PATH
由于我们是之前安装的docker,然后再安装的docker-compose,所以在安装了docker-compose之后,导致.docker/config.json文件中配置不对,即credsStore而不是credstore。只需更改~/.docker/config.json中的credsStore,修改为credStore即可
运行docker-compose-windows.yaml文件即可
docker-compose -f docker-compose-windows.yaml up -d
# docker-compose up -d
启动服务成功后可直接打开前端页面进行使用:http://localhost:5052/qanything
#端口映射错误:8777与5052端口可能出现被占用的情况
netstat -t | grep 8777 # 查找8777端口是否被占用(listen状态即为被占用状态)
netstat -t | grep 5052 # 查找5052端口是否被占用
netstat -plent #查找各端口使用情况以及pid,若pid为-,则是内核进程
kill -9 pid #即杀死该进程(内核进程可能为反应)
#选择其他方式:编辑docker-compose-windows.yml文件,修改映射端口为其他未占用端口,例如port(8888:8777)
下载ubuntu软件(windows发行版),作为wsl环境的prompt进行代码编译
sudo passwd su root #进入root账户
cd /mnt/Qanything #进入下载的项目目录下
sudo apt-get install docker-compose #安装docker-compose
# 若无法定位docker-compose软件包,则可尝试更新apt-get库:sudo apt-get update
bash run.sh #运行sh文件
安装nvidia-container-toolkit
#添加密钥 distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - #若出现错误apt-key is deprecated 则可能是ubuntu系统为启用cuda仓库,需要执行以下命令来启用(注意使用的ubuntu系统,本机使用的是2021版本) sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ /" #添加软件源 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 #安装软件 sudo apt-get install -y nvidia-container-toolkit #重启docker服务 sudo systemctl restart docker
#端口映射错误:8777与5052端口可能出现被占用的情况
netstat -t | grep 8777 # 查找8777端口是否被占用(listen状态即为被占用状态)
netstat -t | grep 5052 # 查找5052端口是否被占用
netstat -plent #查找各端口使用情况以及pid,若pid为-,则是内核进程
kill -9 pid #即杀死该进程(内核进程可能为反应)
#选择其他方式:编辑docker-compose.yml文件,修改映射端口为其他未占用端口,例如8888:8777
启动服务后可直接打开前端页面进行使用:http://{主机ip}:5052/qanything
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。