AMD CPU 实例部署 ChatGLM-6B(ZenDNN)

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 本文将基于阿里云 AMD 服务器g8a和 ChatGLM-6B 大模型,快速搭建出个人版聊天机器人。

一、背景介绍

ChatGLM-6B 是有清华大学开源的、支持中英双语对话的大语言模型,该模型基于 General Language Model(GLM)架构,具有 62 亿参数,并针对中文问答和对话进行了优化,可以生成符合人类偏好的回答。ChatGLM-6B 具备基本的中文问答能力,可以部署为一个聊天机器人。官方提供了几个使用实例:自我认知、提纲写作、文案写作、邮件助手、信息抽取、角色扮演、评论比较以及旅游向导等。

本文将基于阿里云 AMD 服务器和 ChatGLM-6B 大模型,快速搭建出个人版聊天机器人。

特别提醒

阿里云不对第三方模型 ChatGLM-6B 的合法性、安全性、准确性进行任何保证,阿里云不对由此引发的任何损害承担责任。ChatGLM-6B 的代码依照 Apache-2.0 协议开源,ChatGLM-6B 模型权重的使用遵循 Model License。您应自觉遵守第三方模型的用户协议、使用规范和相关法律法规,并就使用第三方模型的合法性、合规性自行承担相关责任。


二、创建 ECS 实例

创建 ECS 实例时需要根据模型的大小对实例规格进行选择。根据官方文档中对 CPU 部署的说明,ChatGLM-6B 大概需要 32GB 内存,为了保证模型运行的稳定,实例规格至少需要选择 ecs.g8a.4xlarge(64GB 内存)。同时,整个 ChatGLM-6B 模型下载完会占用 26GB 的存储空间,为了保证运行环境能顺利安装,存储盘至少需要 100GB。最后,为了保证环境安装以及模型下载的速度,实例带宽分配 100Mbps。

实例操作系统选择 Alibaba Cloud Linux 3.2104 LTS 64 位。


三、部署流程

1.软件安装配置

在部署 ChatGLM-6B 之前,需要安装一些必备软件,以及 Python 3.8(系统自带的 Python 版本为 3.6,不满足部署 ChatGLM-6B 的最低版本要求)。

# yum install tmux git git-lfs wget curl gcc gcc-c++ \
tar unzip hwloc python38

安装完成后需要指定系统默认的 Python 版本为 3.8,有多种方法可以实现,这里使用 update-alternatives 命令,需要根据提示选择上一步安装的 Python 3.8。

# update-alternatives --config python

随后需要更新对应版本的 pip,方便后续部署 Python 环境。

# python -m ensurepip --upgrade
# python -m pip install --upgrade pip

后续下载预训练模型需要启用 Git LFS 的支持。

# git lfs install

2.下载源码与模型

下载 GitHub 项目源码,以及预训练模型。ChatGLM-6B 模型权重对学术研究完全开放,免费商用需填写 问卷 登记。这里的模型下载仅作为演示,不承担任何法律责任。

下载预训练模型耗时较长,且成功率受网络情况波动较大,建议在 tmux 中运行。

# git clone https://github.com/THUDM/ChatGLM-6B.git
# git clone https://huggingface.co/THUDM/chatglm-6b

下载完毕后,当前目录如下所示。

# ls -l
total 8
drwxr-xr-x 3 root root 4096 Jul 19 13:24 chatglm-6b
drwxr-xr-x 9 root root 4096 Jul 19 12:34 ChatGLM-6B

3.部署运行环境

Python 的运行环境使用 pip 进行安装。由于后续安装的 ZenDNN 要求使用 CPU 版本的 PyTorch,所以需要手动安装所有依赖。

注意 pip 对应的 Python 版本,使用 pip -V 查看。系统自带 Python 版本过低,与依赖包版本不兼容。

# pip install protobuf transformers==4.27.1 cpm_kernels gradio \
mdtex2html sentencepiece accelerate streamlit streamlit-chat
# pip install torch==1.12.0+cpu torchvision==0.13.0+cpu \
--extra-index-url https://download.pytorch.org/whl/cpu

下载安装 ZenDNN。

解压完成后务必进入 ZenDNN 目录进行操作。

# wget https://download.amd.com/developer/eula/zendnn/zendnn-4-0/pytorch-end-user-license/PT_v1.12_ZenDNN_v4.0_Python_v3.8.zip
# unzip PT_v1.12_ZenDNN_v4.0_Python_v3.8.zip
# cd PT_v1.12_ZenDNN_v4.0_Python_v3.8/
# source scripts/PT_ZenDNN_setup_release.sh

ZenDNN 的安装日志中明确说明了,需要我们针对硬件平台显式设置两个环境变量 OMP_NUM_THREADSGOMP_CPU_AFFINITY

# cat > /etc/profile.d/env.sh <<EOF
export OMP_NUM_THREADS=\$(nproc --all)
export GOMP_CPU_AFFINITY=0-\$(( \$(nproc --all) - 1 ))
EOF
# source /etc/profile

4.模型调用

运行环境安装完毕后,可以直接在 Python 解释器中调用模型进行测试。

# python
>>> from transformers import AutoTokenizer, AutoModel
>>> tokenizer = AutoTokenizer.from_pretrained("/root/chatglm-6b", trust_remote_code=True)
>>> model = AutoModel.from_pretrained("/root/chatglm-6b", trust_remote_code=True).float()
>>> model = model.eval()
>>> response, history = model.chat(tokenizer, "你好", history=[])
>>> print(response)
你好👋!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。
>>> response, history = model.chat(tokenizer, "晚上睡不着应该怎么办", history=history)
>>> print(response)
以下是一些可能有助于改善睡眠质量的建议:
1. 保持舒适的睡眠环境:确保房间安静、黑暗、凉爽和舒适,并尽可能减少噪音和干扰。
2. 放松身心:在睡前进行一些放松活动,如冥想、深呼吸、瑜伽或温水泡脚等,有助于缓解压力和焦虑。
3. 避免刺激性物质:避免饮用含咖啡因的饮料,如咖啡、茶和可乐,以及食用过多糖分和高脂肪的食物。
4. 限制屏幕时间:睡前避免使用手机、平板电脑和其他电子设备,因为这些设备会发出蓝光,可能会干扰睡眠。
啜饮一杯温牛奶或食用一些含丰富蛋白质和碳水化合物的食物,如面包或饼干,有助于提供身体所需的营养和能量。
如果这些方法不能改善睡眠质量,建议咨询医生或睡眠专家。

5.部署命令行 Demo

ChatGLM-6B 源码中提供了命令行 Demo,可以通过命令行实现模型交互。命令行 Demo 中可以输入问题对模型提问,或者输入 clear 清除对话历史,输入 stop 退出程序。

# cd ChatGLM-6B
# sed -i 's?THUDM/chatglm-6b?/root/chatglm-6b?g' cli_demo.py
# sed -i 's/.half().cuda()/.float()/g' cli_demo.py
# python cli_demo.py

6.部署网页版 Demo

ChatGLM-6B 源码中提供了网页版 Demo,可以进行部署实现网页交互。

# cd ChatGLM-6B
# sed -i 's?THUDM/chatglm-6b?/root/chatglm-6b?g' web_demo.py
# sed -i 's/.half().cuda()/.float()/g' web_demo.py
# sed -i 's/share=False/share=True/g' web_demo.py
# python web_demo.py
...
Running on local URL:  http://127.0.0.1:7860
Running on public URL: https://5d485bf0e420b5be3f.gradio.live
...

运行成功后,打开命令回显信息中的公开链接(public URL)就能够访问部署的服务。

该网页 Demo 会将所有网络请求经过 Gradio 服务器转发,在国内访问较为缓慢,体验较差。可以部署基于 Streamlit 的网页版 Demo。

# cd ChatGLM-6B
# sed -i 's?THUDM/chatglm-6b?/root/chatglm-6b?g' web_demo2.py
# sed -i 's/.half().cuda()/.float()/g' web_demo2.py
# streamlit run web_demo2.py --server.port 7860
...
  Network URL: http://<ECS INTERNAL IP>:7860
  External URL: http://<ECS EXTERNAL IP>:7860
...

部署完成后可以通过外部链接(External URL)访问服务。

访问服务前需要在实例的安全组中添加端口(7860)规则。具体操作参见 添加安全组规则

四、自动化部署

除了手动进行部署 ChatGLM-6B 大模型之外,本文还提供了 自动部署脚本,可以实现一键部署运行。

# wget https://static-aliyun-doc.oss-cn-hangzhou.aliyuncs.com/file-manage-files/zh-CN/20230804/bfkf/deploy_chatglm-6b.sh
# chmod +x deploy_chatglm-6b.sh
# ./deploy_chatglm-6b.sh

脚本运行中会下载模型文件,耗时较长。运行时请保持网络连接,或者使用 tmux 等工具保持脚本的运行。脚本出现下图的回显信息,则说明脚本运行完毕,服务已经在后台运行了,此时通过外部链接(External URL)即可访问服务。


相关文章
|
6月前
|
Oracle 关系型数据库 Linux
解决在linux服务器上部署定时自动查找cpu,内存,磁盘使用量,并将查询结果写入数据库的脚本,只能手动运行实现插库操作
问题描述:将脚本名命名为mortior.sh(以下简称mo),手动执行脚本后查询数据库,表中有相应的信息,放入自动执行队列中,脚本被执行,但是查询数据库,并没有新增数据。
44 0
|
7月前
|
人工智能 并行计算 openCL
魔搭+Xinference 平台:CPU,GPU,Mac-M1多端大模型部署
随着 Llama2 的开源,以及通义千问、百川、智谱等国内大模型的问世,很多用户有了本地部署去尝试大模型的需求,然而硬件的需求阻碍了很多人的尝试,并不是所有人都拥有一块英伟达显卡的,所以 Llama2 问世不久,大神 Andrej Karpathy 的一个 weekend project 爆火——llama2.c。
魔搭+Xinference 平台:CPU,GPU,Mac-M1多端大模型部署
|
8月前
|
存储 弹性计算 Linux
阿里云服务器实例规格CPU内存带宽系统盘等配置选择注意事项
在购买阿里云服务器时,实例规格、CPU、内存、带宽和系统盘等配置都是重要的,合理选择这些配置不仅能够更好地满足我们的需求,提高服务器的性能和稳定性。同时还能尽可能的节约购买成本,本文将对阿里云服务器实例规格CPU内存带宽系统盘等配置选项进行详细解释,并提供一些选择建议及注意事项,以供参考。
803 0
阿里云服务器实例规格CPU内存带宽系统盘等配置选择注意事项
|
2月前
|
存储 缓存 PHP
阿里云服务器实例、CPU内存、带宽、操作系统选择参考
对于使用阿里云服务器的用户来说,云服务器的选择和使用非常重要,如果实例、内存、CPU、带宽等配置选择错误,可能会影响到自己业务在云服务器上的计算性能及后期运营状况,本文为大家介绍一下阿里云服务器实例、CPU内存、带宽、操作系统的选择注意事项,以供参考。
阿里云服务器实例、CPU内存、带宽、操作系统选择参考
|
2月前
|
存储 监控 Linux
Linux 使用getrusage系统调用获取cpu信息:一个C++实例分析
Linux 使用getrusage系统调用获取cpu信息:一个C++实例分析
50 0
|
6月前
|
存储 Linux Docker
跨cpu架构部署容器技术点:怎样修改Linux 的内核版本
在使用Docker 进行跨平台部署之后,我们还可以尝试进行跨架构部署。 从X86 架构上移植到 aarch64 上。
202 0
|
2月前
|
弹性计算 固态存储 调度
阿里云服务器部署配置选择全攻略,ECS实例规格、CPU内存配置
阿里云服务器部署配置选择全攻略,ECS实例规格、CPU内存配置,CPU内存、公网带宽和系统盘怎么选择?个人用户选择轻量应用服务器或ECS通用算力型u1云服务器,企业用户选择ECS计算型c7、通用型g7云服务器,阿里云百科分享阿里云服务器配置选择方法
|
4月前
|
文字识别 编译器 C++
win10 PaddleOCR c++ cpu部署
win10 PaddleOCR c++ cpu部署
121 0
|
5月前
|
并行计算 Linux 计算机视觉
DeepFace【部署 04】轻量级人脸识别和面部属性分析框架deepface使用Docker部署CPU+GPU两个版本及cuDNN安装
DeepFace【部署 04】轻量级人脸识别和面部属性分析框架deepface使用Docker部署CPU+GPU两个版本及cuDNN安装
215 0
|
5月前
|
存储 Linux Docker
Docker【部署 04】Docker Compose下载安装及实例Milvus Docker compose(CPU)使用说明分享
Docker【部署 04】Docker Compose下载安装及实例Milvus Docker compose(CPU)使用说明分享
336 0

热门文章

最新文章