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

简介: 本文将基于阿里云 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)即可访问服务。


相关文章
|
5月前
|
XML Ubuntu Linux
部署08---扩展-Win10配置WSL(Ubuntu)环境,WSL系统是什么意思,是Windows系统上的一个子系统, xml的一大特点是直链系统,直接链接你的CPU,硬盘和内存,如何用 WSL部署
部署08---扩展-Win10配置WSL(Ubuntu)环境,WSL系统是什么意思,是Windows系统上的一个子系统, xml的一大特点是直链系统,直接链接你的CPU,硬盘和内存,如何用 WSL部署
|
3月前
|
算法 测试技术 AI芯片
CPU反超NPU,llama.cpp生成速度翻5倍!LLM端侧部署新范式T-MAC开源
【9月更文挑战第7天】微软研究院提出了一种名为T-MAC的创新方法,旨在解决大型语言模型在资源受限的边缘设备上高效部署的问题。T-MAC通过查表法在CPU上实现低比特LLM的高效推理,支持混合精度矩阵乘法,无需解量化。其通过位级查表实现统一且可扩展的解决方案,优化数据布局和重用率,显著提升了单线程和多线程下的mpGEMV及mpGEMM性能,并在端到端推理吞吐量和能效方面表现出色。然而,表量化和快速聚合技术可能引入近似和数值误差,影响模型准确性。论文详见:[链接](https://www.arxiv.org/pdf/2407.00088)。
183 10
|
4月前
|
SQL 存储 缓存
什么?部署ClickHouse的服务器CPU利用率100%了?
什么?部署ClickHouse的服务器CPU利用率100%了?
|
4月前
|
人工智能 云计算 数据中心
云计算演进问题之阿里云自研CPU倚天710的部署如何解决
云计算演进问题之阿里云自研CPU倚天710的部署如何解决
|
4月前
|
弹性计算 固态存储 ice
阿里云服务器2核16G、4核32G、8核64G配置不同ECS实例规格收费标准和CPU性能差异
2024年阿里云提供2核16G、4核32G及8核64G等多种服务器配置,用户可根据需求选择不同实例规格如内存型r8i、通用算力型u1等。以华北2(北京)为例,2核16G月费从286.2至385.99元不等;4核32G为572.4至771.97元;8核64G则在1144.8至1543.94元区间。公网带宽与系统盘(如ESSD云盘)亦有多样化选择与价格方案。长期租赁可享折扣,具体价格请访问阿里云官网确认。
170 7
|
5月前
|
存储 弹性计算 固态存储
阿里云服务器CPU内存配置怎么选?ECS实例规格有啥区别?
阿里云服务器配置选择需考虑ECS实例规格、CPU内存、公网带宽与系统盘。个人开发者或中小企业推荐轻量应用服务器或ECS经济型e实例(2核2G3M带宽,99元/年),适合搭建低流量网站。企业用户应选择企业级独享型如通用算力型u1、计算型c7或通用型g7实例,至少2核4G内存起,推荐5M公网带宽以平衡成本与性能。系统盘推荐ESSD云盘以获得更好的性能。更多详情及链接参见原文。
122 3
|
5月前
|
NoSQL Redis 开发工具
Redis性能优化问题之检查 Redis 实例是否启用了透明大页机制,如何解决
Redis性能优化问题之检查 Redis 实例是否启用了透明大页机制,如何解决
|
4月前
|
开发框架 JavaScript Java
【Azure 应用服务】Azure App Service多实例中,出现某一个实例CPU居高不下的情况,如何重启单个实例呢?
【Azure 应用服务】Azure App Service多实例中,出现某一个实例CPU居高不下的情况,如何重启单个实例呢?
|
4月前
|
人工智能 PyTorch 算法框架/工具
AI计算机视觉笔记二:基于YOLOV5的CPU版本部署openvino
本文档详细记录了YOLOv5模型在CPU环境下的部署流程及性能优化方法。首先,通过设置Python虚拟环境并安装PyTorch等依赖库,在CPU环境下成功运行YOLOv5模型的示例程序。随后,介绍了如何将PyTorch模型转换为ONNX格式,并进一步利用OpenVINO工具包进行优化,最终实现模型在CPU上的高效运行。通过OpenVINO的加速,即使是在没有GPU支持的情况下,模型的推理速度也从约20帧每秒提高到了50多帧每秒,显著提升了性能。此文档对希望在资源受限设备上部署高性能计算机视觉模型的研究人员和工程师具有较高的参考价值。
|
6月前
|
监控 Serverless 应用服务中间件
Serverless 应用引擎操作报错合集之使用自定义镜像部署GPU服务时,报错 "CPU is required but not provided",是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。