【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.json
  2.4K Dec  6 15:36 configuration_chatglm.py
    40 Dec  6 15:36 configuration.json
   55K Dec  6 15:36 modeling_chatglm.py
  4.1K Dec  6 15:36 MODEL_LICENSE
  1.8G Dec  6 15:38 pytorch_model-00001-of-00007.bin
  1.9G Dec  6 15:41 pytorch_model-00002-of-00007.bin
  1.8G Dec  6 15:44 pytorch_model-00003-of-00007.bin
  1.7G Dec  6 15:47 pytorch_model-00004-of-00007.bin
  1.9G Dec  6 15:50 pytorch_model-00005-of-00007.bin
  1.8G Dec  6 15:52 pytorch_model-00006-of-00007.bin
 1005M Dec  6 15:54 pytorch_model-00007-of-00007.bin
   20K Dec  6 15:54 pytorch_model.bin.index.json
   15K Dec  6 15:54 quantization.py
  5.0K Dec  6 15:36 README.md
   12K Dec  6 15:54 tokenization_chatglm.py
   244 Dec  6 15:54 tokenizer_config.json
  995K 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 sys
    sys.path.append('./openai_api_demo')
    from utils import load_model_on_gpus
    model = 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 cards
        import sys
        sys.path.append('./openai_api_demo')
        from utils import load_model_on_gpus
        model = load_model_on_gpus(MODEL_PATH, num_gpus=2)

    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()
    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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HttpComponents: 领域对象的设计

1. HTTP协议 1.1 HTTP请求 HTTP请求由请求头、请求体两部分组成,请求头又分为请求行(request line)和普通的请求头组成。通过浏览器的开发者工具,我们能查看请求和响应的详情。 下面是一个HTTP请求发送的完整内容。 POST https://track.abc.com/v4/tr…

JFlash烧写单片机bin/hex文件

1,安装压 JLink_Windows_V660c,官网可下载; 2,打开刚刚安装的 J-Flash V6.60c 选择创建新工程“Create a new project”,然后点击StartJ-Flash 点击之后跳出Select device框,选择TI 选择TI后&#xff0c…

SpringBoot 项目将jar 部署在服务器引用外部 配置文件

SpringBoot 官方给出了四种方式引用外部配置文件的方式 在jar包的同一目录下建一个config文件夹,然后把配置文件放到这个文件夹下(最常用)直接把配置文件放到jar包的同级目录在classpath下建一个config文件夹,然后把配置文件放进去在classpath下直接放配…

git操作:使用vscode集成

git操作方式 其实git操作一般有三种方式 分别是终端命令行,开发工具集成,专业的git可视化工具 我前面几章说的都是git的命令行操作,今天这篇文章主要是针对开发工具vscode集成git操作进行演示 说明一下,这里之所以选择vscode,是因为本人用的就是vscode,每个开发工具基本都有…

JAVA实现敏感词高亮或打码过滤:sensitive-word

练手项目中实现发表文章时检测文章是否带有敏感词,以及对所有敏感词的一键过滤功能 文章目录 效果预览实现步骤 效果预览 随便复制一篇内容到输入框 机器审核文章存在敏感词,弹消息提示并进入人工审核阶段(若机器审核通过,则无需审…

MATLAB基础运算

矩阵和数字相乘 就是矩阵里面每个元素跟这个数字乘一遍 矩阵和矩阵相乘 能不能相乘,需要前面矩阵的列数等于后面矩阵的行数,出来的矩阵大小是前面矩阵的行数*后面矩阵的列数。 所以大家会发现,矩阵相乘如果前后调转了,结果会完全…

STM32的BKP与RTC简介

芯片的供电引脚 引脚表橙色的是芯片的供电引脚,其中VSS/VDD是芯片内部数字部分的供电,VSSA/VDDA是芯片内部模拟部分的供电,这4组以VDD开头的供电都是系统的主电源,正常使用时,全部都要接3.3V的电源上,VBAT是…

无人机巡检中台揭秘,无人机管控平台助力巡查无人机巡检方案落地

随着无人机智能巡检的飞速发展,巡查无人机应用场景也日益多元,无人机巡检方案被频繁落地到工业生产及巡检巡逻业务中。而无人机管控平台应运而生,成为推动无人机智能巡检的关键工具。那我们一起来看一下无人机管控平台的作用: 一、…

vue3递归组件---树形组件

第一种方式&#xff0c;直接自己调用自己 Tree.vue <template><div class"tree"><div v-for"(item, index) in data" :key"item.name">每一层 {{ item.name }}<Tree v-if"item?.children?.length" :dataitem…

el-table 跨页多选

步骤一 在<el-table>中:row-key"getRowKeys"和selection-change"handleSelectionChange" 在<el-table-column>中type"selection"那列&#xff0c;添加:reserve-selection"true" <el-table:data"tableData"r…

记录 | 使用samba将ubuntu文件夹映射到windows实现共享文件夹

一、ubuntu配置 1. 安装 samba samba 是在 Linux 和 UNIX 系统上实现 SMB 协议的一个免费软件&#xff0c;由服务器及客户端程序构成。SMB&#xff08;Server Messages Block&#xff0c;信息服务块&#xff09;是一种在局域网上共享文件和打印机的一种通信协议。 sudo apt-…

使用 Axios 进行网络请求的全面指南

使用 Axios 进行网络请求的全面指南 本文将向您介绍如何使用 Axios 进行网络请求。通过分步指南和示例代码&#xff0c;您将学习如何使用 Axios 库在前端应用程序中发送 GET、POST、PUT 和 DELETE 请求&#xff0c;并处理响应数据和错误。 准备工作 在开始之前&#xff0c;请…

鸿蒙原生应用开发——分布式数据对象

01、什么是分布式数据对象 在可信组网环境下&#xff0c;多个相互组网认证的设备将各自创建的对象加入同一个 sessionId&#xff0c;使得加入的多个数据对象之间可以同步数据&#xff0c;也就是说&#xff0c;当某一数据对象属性发生变更时&#xff0c;其他数据对象会检测到这…

使用 Kubernetes 为 CI/CD 流水线打造高效可靠的临时环境

介绍 在不断发展的科技世界中&#xff0c;快速构建高质量的软件至关重要。在真实环境中测试应用程序是及早发现和修复错误的关键。但是&#xff0c;在真实环境中设置 CI/CD 流水线进行测试可能既棘手又昂贵。 Kubernetes 是一个流行的容器编排平台&#xff0c;提供临时环境解决…

后端返回base64文件前端如何下载

1.后端返回base64格式文件 2.前端代码 <style lang"less" scoped> import "./style/common.less";.table-div-a {color: #409EFF;text-decoration: underline;cursor: pointer; } </style><template><div class"template-con…

WPF仿网易云搭建笔记(1):项目搭建

文章目录 前言项目地址动态样式组合样式批量样式覆盖Prism新建UserControler修改Material Design 笔刷收放列表可以滚动的StackPanel列表点击展开或折叠 实现效果 前言 今天接着继续细化代码&#xff0c;把整体框架写出来 项目地址 WPF仿网易云 Gitee仓库 动态样式 【WPF】C#…

使用Pytorch实现Grad-CAM并绘制热力图

这篇是我对哔哩哔哩up主 霹雳吧啦Wz 的视频的文字版学习笔记 感谢他对知识的分享 看一下这个main cnn.py的文件 那这里我为了方便 就直接从官方的torch vision这个库当中导入一些我们常用的model 比如说我这里的例子是采用的mobile net v3 large这个模型 然后这里我将pretrain设…

融合科技,升级医疗体验——医院陪诊服务的技术创新

随着科技的迅猛发展&#xff0c;医疗服务领域也在积极借助技术手段提升患者体验。本文将探讨如何利用先进的技术代码&#xff0c;将医院陪诊服务推向新的高度。 1. 医疗预约系统的实现 # 通过Python代码实现医疗预约系统 class MedicalAppointment:def __init__(self, patie…

持续集成交付CICD:使用Maven命令下载Nexus制品

目录 一、实验 1.Maven安装 2.Nexus搭建公共组仓库及Maven全局配置文件 3.使用Maven命令下载Nexus制品 一、实验 1.Maven安装 &#xff08;1&#xff09;CentOS环境安装步骤 tar -xf apache-maven-3.8.6-bin.tar.gz #解压 mv apache-maven-3.8.6 /usr/local/maven #移动…

django与数据库交互关于当前时间的坑

背景 在线上服务中使用时间进行数据库操作时发现异常&#xff0c;而在本地环境无法成功复现此问题&#xff0c;导致难以进行故障排查。 核心问题 view.py class XxxViewSet(viewsets.ModelViewSet):queryset Xxx.objects.with_status().order_by("status", &quo…