【ChatGLM3】第三代大语言模型多GPU部署指南

关于ChatGLM3

ChatGLM3智谱AI清华大学KEG实验室联合发布的新一代对话预训练模型。在第二代ChatGLM的基础之上,

  • 更强大的基础模型: ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。在语义、数学、推理、代码、知识等不同角度的数据集上测评显示,ChatGLM3-6B-Base 具有在 10B 以下的基础模型中最强的性能。
  • 更完整的功能支持: ChatGLM3-6B 采用了全新设计的 Prompt 格式,除正常的多轮对话外。同时原生支持工具调用(Function Call)、代码执行(Code Interpreter)和 Agent 任务等复杂场景。
  • 更全面的开源序列: 除了对话模型 ChatGLM3-6B 外,还开源了基础模型 ChatGLM3-6B-Base、长文本对话模型 ChatGLM3-6B-32K。以上所有权重对学术研究完全开放,在填写问卷进行登记后亦允许免费商业使用。

关于部署前的准备

  • 可以参考两篇文章
    • 如果有GPU资源,可以参考【ChatGLM2-6B】从0到1部署GPU版本
    • 如果只有CPU服务器,可以参考【ChatGLM2-6B】在只有CPU的Linux服务器上进行部署
  • 本文主要针对ChatGLM第三代模型ChatGLM3-6B进行部署,假设你已经成功部署过ChatGLM系列其它版本

ChatGLM3模型开源列表

模型介绍上下文token数
ChatGLM3-6B第三代 ChatGLM 对话模型。ChatGLM3-6B 采用了全新设计的 Prompt 格式,除正常的多轮对话外。同时原生支持工具调用(Function Call)、代码执行(Code Interpreter)和 Agent 任务等复杂场景。8K
ChatGLM3-6B-base第三代ChatGLM基座模型。ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。在语义、数学、推理、代码、知识等不同角度的数据集上测评显示,ChatGLM3-6B-Base 具有在 10B 以下的基础模型中最强的性能。8K
ChatGLM3-6B-32k第三代ChatGLM长上下文对话模型。在ChatGLM3-6B的基础上进一步强化了对于长文本的理解能力,能够更好的处理最多32K长度的上下文。32K

本文以ChatGLM3-6B-base为例进行部署,因为作者想体验长文本处理的效果

创建Python虚拟环境

  • conda创建虚拟环境: conda create --name ChatGLM3 python=3.10.6 -y
  • –name 后面ChatGLM3为创建的虚拟环境名称
  • python=之后输入自己想要的python版本
  • -y表示后面的请求全部为yes,这样就不用自己每次手动输入yes了。
  • 激活虚拟环境: conda activate ChatGLM3

下载ChatGLM3代码仓库

git clone https://github.com/THUDM/ChatGLM3
cd ChatGLM3
# 使用 pip 安装依赖
pip install -r requirements.txt

下载模型

使用git命令下载

# 在ChatGLM3目录下创建THUDM,把模型文件放在THUDM目录里面
mkdir THUDM
cd THUDM
git lfs install
git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b-32k.git
# 也可以根据自己的需要下载其它模型
#git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b-base.git
#git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git

主要是其中的7个模型文件,比较大,下载时间稍长,约12G

  1.4K Dec  6 15:36 config.json2.4K Dec  6 15:36 configuration_chatglm.py40 Dec  6 15:36 configuration.json55K Dec  6 15:36 modeling_chatglm.py4.1K Dec  6 15:36 MODEL_LICENSE1.8G Dec  6 15:38 pytorch_model-00001-of-00007.bin1.9G Dec  6 15:41 pytorch_model-00002-of-00007.bin1.8G Dec  6 15:44 pytorch_model-00003-of-00007.bin1.7G Dec  6 15:47 pytorch_model-00004-of-00007.bin1.9G Dec  6 15:50 pytorch_model-00005-of-00007.bin1.8G Dec  6 15:52 pytorch_model-00006-of-00007.bin1005M Dec  6 15:54 pytorch_model-00007-of-00007.bin20K Dec  6 15:54 pytorch_model.bin.index.json15K Dec  6 15:54 quantization.py5.0K Dec  6 15:36 README.md12K Dec  6 15:54 tokenization_chatglm.py244 Dec  6 15:54 tokenizer_config.json995K Dec  6 15:54 tokenizer.model

修改脚本

分别以web端浏览器访问和API访问两种最常用的场景进行脚本修改

浏览器访问脚本修改

  • 复制一份web_demo2.pyChatGLM3目录
cp basic_demo/web_demo2.py ./web_demo2_32k.py
  • 修改MODEL_PATH路径
# 尽量使用绝对路径,这样可以避从Huggingface下载模型
MODEL_PATH = os.environ.get('MODEL_PATH', '/ChatGLM3/THUDM/chatglm3-6b-32k')
  • 使用2GPU加载模型
@st.cache_resource
def get_model():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改为你实际的显卡数量import syssys.path.append('./openai_api_demo')from utils import load_model_on_gpusmodel = load_model_on_gpus(MODEL_PATH, num_gpus=2)return tokenizer, model
  • 修改默认最大token数
# 设置max_length、top_p和temperature
max_length = st.sidebar.slider("max_length", 0, 32768, 32768, step=1)
  • 启动大模型服务
# 后台方式运行,退出终端后服务不会停止运行
nohup streamlit run web_demo2_32k.py &
  • 浏览器访问效果截图
    在这里插入图片描述

在这里插入图片描述

API访问脚本修改

  • 复制一份openai_api_demo/openai_api.pyChatGLM3目录
cp openai_api_demo/openai_api.py ./openai_api_32k.py
  • 修改导入包路径
import sys
sys.path.append('./openai_api_demo')
from utils import process_response, generate_chatglm3, generate_stream_chatglm3
  • 修改MODEL_PATH路径
# 尽量使用绝对路径,这样可以避从Huggingface下载模型
MODEL_PATH = os.environ.get('MODEL_PATH', '/ChatGLM3/THUDM/chatglm3-6b-32k')
  • 使用2GPU加载模型
if __name__ == "__main__":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()# Multi-GPU support, use the following two lines instead of the above line, num gpus to your actual number of graphics cardsimport syssys.path.append('./openai_api_demo')from utils import load_model_on_gpusmodel = load_model_on_gpus(MODEL_PATH, num_gpus=2)else:  # CPU, Intel GPU and other GPU can use Float16 Precision Onlymodel = AutoModel.from_pretrained(MODEL_PATH, trust_remote_code=True).float().to(DEVICE).eval()uvicorn.run(app, host='0.0.0.0', port=8000, workers=1)
  • 启动大模型服务
# 后台方式运行,退出终端后服务不会停止运行
nohup python openai_api_32k.py &
  • API访问测试
curl -X POST "http://127.0.0.1:8000/v1/chat/completions" \
-H "Content-Type: application/json" \
-d "{\"model\": \"chatglm3-6b\", \"messages\": [{\"role\": \"system\", \"content\": \"You are ChatGLM3, a large language model trained by Zhipu.AI. Follow the user's instructions carefully. Respond using markdown.\"}, {\"role\": \"user\", \"content\": \"你好,给我讲一个故事,大概100字\"}], \"stream\": false, \"max_tokens\": 100, \"temperature\": 0.8, \"top_p\": 0.8}"

大模型响应示例

{"model":"chatglm3-6b","object":"chat.completion","choices":[{"index":0,"message":{"role":"assistant","content":"有一天,在一个遥远的王国里,有一个勇敢的年轻人名叫杰克。他听说王国里有一座神秘的城堡,里面藏着传说中的宝藏。于是,杰克带着他的忠实伙伴——一只忠诚的狗一起踏上了寻找宝藏的旅程。\n\n他们跋山涉水,历经千辛万苦,终于来到了那座城堡。城堡的大门紧闭,门前还有一条恶龙在守护着。杰克并没有退缩,他知道这是他实现梦想的机会。","name":null,"function_call":null},"finish_reason":"stop"}],"created":1702003224,"usage":{"prompt_tokens":54,"total_tokens":154,"completion_tokens":100}}

总结

  • 经过测试对比,ChatGLM3ChatGLM2强大了很多很多,可以在一定程度上满足商用
  • ChatGLM系列大模型的迭代速度还是比较快的,可以感受到研究人员的努力
  • 一款优秀的具有自主知识产权的国产大模型,数据安全有保障,有活跃的社区,有越来越丰富的文档资料
  • 希望ChatGLM可以早日超越ChatGPT

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/223574.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三年没回家过年,你的羽绒服准备好了吗?

2023进入尾声,这一年,我们在“阳康”之后重新出发,找回了烟火气,和错过几年的山水重逢,向往远方的同时也更爱眼前的点滴,逐渐重建起对美好生活的期待。 把生活态度投射到社媒上,出圈的热点话题…

Notepad++插件:格式化JSON

一、问题描述 最近有这么一串json字符串: 你想看吗? 是不是觉得密密匝匝滴,很不想看呢? 下面是经过处理的json字符串: 你喜欢哪种格式的json字符串展示呢? 反正我喜欢已经格式化的,也就是第二…

金蝶云星空和旺店通·企业奇门单据接口对接

金蝶云星空和旺店通企业奇门单据接口对接 对接源平台:旺店通企业奇门 慧策(原旺店通)是一家技术驱动型智能零售服务商,基于云计算PaaS、SaaS模式,以一体化智能零售解决方案,帮助零售企业数字化智能化升级,实…

基于单片机的电阻、电容、电感测试仪(论文+源码)

1.系统设计 1)控制部分:本设计以单片机为核心,采用89C52单片机,利用其管脚的特殊功能以及所具备的中断系统,定时/计数器和LCD显示功能等。在本设计中,采用LCD1602液晶显示:本设计中有1个CD4502、3个LM555、…

每日汇评:黄金阻力最小路径显示上行

周五早间,金价正盘整超过2030美元的周涨幅; 美联储确认鸽派政策转向,美元和美国国债收益率双双下挫; 在有利的技术面下,金价仍面临上行风险 ; 周五早盘,金价在1930美元上方窄幅波动,…

弹性搜索引擎Elasticsearch:本地部署与远程访问指南

🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、Cpolar杂谈 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言系统环境1. Windows 安装Elasticsearch2. 本地访问Elasticsearch3. Windows 安装…

FM30H12G N通道沟槽电源MOS管 封装形式PDFN5*6

FM30H12G 是一款 N通道沟槽电源的场效应管(MOS管),封装形式:PDFN5*6。 来百度APP畅享高清图片 FM30H12G应用: 1、液晶电视 2、笔记本 3、电梯 4、感应加热 5、电动工具

圈子社交文化系统,了解生活,更了解你!APP小程序H5三端源码交付,支持二开!

在这个快节奏的时代,圈子社交系统成为了我生活中不可或缺的一部分。通过这个系统,我不仅可以结识到志同道合的朋友,还可以参与各种有趣的活动和发布自己的心情和见解。在这个圈子里,我感受到了无限的可能性和温暖的人性。 首先&am…

劲松中西医结合医院专家在线解读:宫颈HPV感染后多久会发病

宫颈HPV感染后多久会发病,一般没有具体时间。因为宫颈HPV感染后,受到多种因素的影响,每个人的发展速度和病情严重程度都有所不同。 一般而言,HPV感染后需要较长时间才能引起宫颈病变。在这个过程中,病毒会与宫颈细胞结…

流控制传输协议SCTP

前言 流控制传输协议(Stream Control Transmission Protocol,SCTP)是一种在网络连接两端同时传输多个数据流的协议。SCTP和TCP类似,都是通过确认机制实现数据传输的安全性。二者最大的区别是,SCTP是多宿主&#xff08…

day36算法训练|贪心part05

435. 无重叠区间 我来按照右边界排序&#xff0c;从左向右记录非交叉区间的个数。最后用区间总数减去非交叉区间的个数就是需要移除的区间个数了。图源&#xff1a;代码随想录 class Solution { public:// 按照区间右边界排序static bool cmp (const vector<int>& a…

面试题:SpringBoot 如何自定义自己的条件注解与自动配置?

文章目录 前言自定义条件注解自定义自动配置 前言 Spring Boot的核心功能就是为整合第三方框架提供自动配置&#xff0c;而本文则带着大家实现了自己的自动配置和Starter&#xff0c;一旦真正掌握了本文的内容&#xff0c;就会对Spring Boot产生“一览众山小”的感觉。 自定义…

ArcGIS Maps SDK for JS:关闭地图边框(v4.27)

1 问题描述 近期&#xff0c;将ArcGIS Api for JS v4.16更新到了ArcGIS Maps SDK for JS v4.27&#xff0c;原本去除地图的css代码失效了。v4.27需要用.esri-view-surface--touch-none::after控制边框属性。 下面为没有关闭地图边框的效果图。&#xff08;亮色版地图为黑色边…

LeetCode-42. 接雨水【栈 数组 双指针 动态规划 单调栈】

LeetCode-42. 接雨水【栈 数组 双指针 动态规划 单调栈】 题目描述&#xff1a;解题思路一&#xff1a;单调栈&#xff0c;维护一个单调递减栈。每当遇到当前元素大于栈顶元素就出栈&#xff0c;在出栈时更新答案。当遇到出栈的情况&#xff0c;若单调栈栈左边有一个元素则必有…

基于深度学习的Python+OpenCV的甲骨文相似度评估系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介1. 数据获取2. 深度学习模型训练3. 图像相似度评估4. 结果展示 二、功能三、系统四. 总结 一项目简介 基于深度学习的PythonOpenCV的甲骨文相似度评估系统&…

Vue前端与后端放在一起的搭建方式

1.首先把后端项目搭建好 去到项目的存放位置 2.然后cmd黑窗口输入命令创建vue项目 3.创建成功后回到后端项目进行合并 3.1在File处选择Project Structure 3.2选择模块 3.3找到自己的vue项目 3.4疯狂next最后create 3.5选择Apply并确定OK&#xff0c;恭喜您创建成功了 二、启动…

C# URL参数编码

string s "lw123abc测试信息&#xff01;#&#xffe5;%……&*&#xff08;&#xff09;——"; Console.WriteLine("原数据:\t\t" s); String s2 Uri.EscapeDataString(s);//Uri.EscapeDataString() 编码 Console.WriteLine("Hexdata:\t&qu…

一文读懂Java中的设计模式——适配器模式,对于兼容不同系统特别适用!

适配器模式概念 适配器&#xff08;变压器&#xff09;模式&#xff1a;这种模式的核心是当你想实现一个接口但又不想实现所有接口方法&#xff0c;只想去实现一部分方法时&#xff0c;就用默认的适配器模式&#xff0c;他的方法是在接口和具体实现类中添加一个抽象类&#xf…

升级Doris集群——2.0.1.1到2.0.3版本

之前安装的Doris版本官方说不太稳定&#xff0c;所以我们可以对其进行升级 1.关闭所有节点 2.下载2.0.3版本的Doris安装包&#xff0c;将旧版本的bin和lib目录替换为 对应新版本bin和lib目录&#xff0c;按照非master节点到master节点&#xff0c;be—broker—fe的顺序进行替…

Intewell-Hyper I_V2.0.0_release版本正式发布

新型工业操作系统_Intewell-Hyper I_V2.0.0_release版本正式发布 软件发布版本信息 版本号&#xff1a;V2.0.0 版本发布类型&#xff1a;release正式版本 版本特点 1.建立Intewell-Hyper I基线版本 版本或修改说明 基于Intewell-Lin V2.3.0_release版本&#xff1a; 1.Devel…