双N卡完美运行ChatGLM3

写在前面

之前ChatGLM推出3了,奈何自身条件不允许,CPU运行半天出不来结果,索性放弃。幸好这次拿到了朋友的机器,虽然显存不高,但是双卡共16G也满足运行的最低要求,于是乎准备研究一波,尝试双卡部署一下。

之前已经装好了环境,参考:使用Tesla P4 双卡配置torch机器学习环境

环境配置

关于ChatGLM3不过多介绍了,支持工具回调,支持代码执行,是我挺喜欢的一个开源模型,这次直接给出了技术文档 lslfd0slxc.feishu.cn/wiki/HIj5wV...(文档内容不做截图因为有水印)

先下载源码

bash 复制代码
git clone https://github.com/THUDM/ChatGLM3.git

然后装一下requirements.txt,因为之前已经装好了torch,所以注释掉

bash 复制代码
pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

太慢了,加上国内源

随后,基础环境装好了。

ChatGLM3给了多种运行方式,其中包含基础demo(basic_demo目录下)和综合demo(包含工具执行,代码解释的综合性demo,在composite_demo)

这里我先以方便双卡运行为主,运行basic_demo

关于综合Demo可以参考,本篇不提及:github.com/THUDM/ChatG...

题外话:运行web_demo.py发现丢了个mdtex2html的库,装一下

bash 复制代码
pip3 install mdtex2html -i https://pypi.tuna.tsinghua.edu.cn/simple

项目运行

因为网络问题无法访问到huggingface,所以我准备使用魔塔社区的模型仓库来下载与逆行,要简单修改一下来源,通过transformers库中的方法找的是huggingface的模型,

这里参考魔塔社区的README.md

www.modelscope.cn/models/Zhip...

简单修改为 modelscope的方法,先下载modelscope库

bash 复制代码
pip3 install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple

然后如下是修改后的 1-20行代码

python 复制代码
import os
from modelscope import AutoModel, AutoTokenizer
import gradio as gr
import mdtex2html
from utils import load_model_on_gpus
import torch

MODEL_PATH = os.environ.get('MODEL_PATH', 'ZhipuAI/chatglm3-6b')
TOKENIZER_PATH = os.environ.get("TOKENIZER_PATH", MODEL_PATH)
DEVICE = 'cuda' if torch.cuda.is_available() else 'cpu'

tokenizer = AutoTokenizer.from_pretrained(TOKENIZER_PATH, trust_remote_code=True)
if 'cuda' in DEVICE: # AMD, NVIDIA GPU can use Half Precision
    model = AutoModel.from_pretrained(MODEL_PATH, trust_remote_code=True).to(DEVICE).eval()
else: # CPU, Intel GPU and other GPU can use Float16 Precision Only
    model = AutoModel.from_pretrained(MODEL_PATH, trust_remote_code=True).float().to(DEVICE).eval()

# 多显卡支持,使用下面两行代替上面一行,将num_gpus改为你实际的显卡数量
from utils import load_model_on_gpus
model = load_model_on_gpus("ZhipuAI/chatglm3-6b", num_gpus=2)

如图,总共改了三个地方:

  1. transformers改为modelscope
  2. 模型的仓库由THUDM/chatglm3-6b 修改为ZhipuAI/chatglm3-6b
  3. 打开了多显卡支持的注释,注释了原来的mode加载方式,同时修改仓库名称

同时,因为load_model_on_gpus函数是utils.py中实现的,我们也需要把utils.py中的transformers改为modelscope,如图所示

然后执行,接下来就是漫长的等待

然后就正常执行了,这个时候我们可以再开一个窗口执行如下命令来查看显卡的情况

bash 复制代码
watch -n 1 nvidia-smi

可以看到,已经分配到两个卡了,完美运行

使用

浏览器访问服务器地址

很快啊,几秒钟就回复了,为啥我要从这里看呢?

因为前端报错了,估计是在插入DOM节点的时候出问题了。疑似是gradio的问题(个人猜测)。

总结

虽然最后的结果展示有点小失败,但是整体上是成功的,我完全可以自己写个web,通过接口的方式进行调用。

踩坑结果:本次终于可以用上ChatGLM3,同时搞定了多卡执行,学到了很多。

终于凑足了能低配完美运行的资源了,这可比之前我mps推理的时候,20分钟回复你好强多了。

相关推荐
IT古董37 分钟前
【漫话机器学习系列】181.没有免费的午餐定理(NFL)
人工智能·机器学习
视觉&物联智能2 小时前
【杂谈】-大型语言模型对具身人工智能发展的推动与挑战
人工智能·搜索引擎·语言模型·大模型·llm·具身人工智能
Yan-英杰3 小时前
DeepSeek-R1模型现已登录亚马逊云科技
java·大数据·人工智能·科技·机器学习·云计算·deepseek
呵呵哒( ̄▽ ̄)"5 小时前
线性代数:分块矩阵,秩,齐次线性,非齐次线性的解相关经典例题
线性代数·机器学习·矩阵
Blossom.1186 小时前
《探索边缘计算:重塑未来智能物联网的关键技术》
人工智能·深度学习·神经网络·物联网·机器学习·计算机视觉·边缘计算
yolo大师兄7 小时前
【YOLO系列(V5-V12)通用数据集-火灾烟雾检测数据集】
人工智能·深度学习·yolo·目标检测·机器学习
liruiqiang057 小时前
循环神经网络 - 机器学习任务之同步的序列到序列模式
网络·人工智能·rnn·深度学习·神经网络·机器学习
Elastic 中国社区官方博客9 小时前
Elasticsearch:使用机器学习生成筛选器和分类标签
大数据·人工智能·elasticsearch·机器学习·搜索引擎·ai·分类
求知呀10 小时前
最直观的 Cursor 使用教程
前端·人工智能·llm
simplify2010 小时前
【译】通用奖励建模的推理时扩展:综合概述
llm·deepseek