6、ChatGLM3-6B 部署实践

news2024/11/19 1:32:40

一、ChatGLM3-6B介绍与快速入门

  ChatGLM3 是智谱AI和清华大学 KEG 实验室在2023年10月27日联合发布的新一代对话预训练模型。ChatGLM3-6B 是 ChatGLM3 系列中的开源模型,免费下载,免费的商业化使用。

  该模型在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6B 引入了如下特性:ChatGLM 3 GitHub

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

  性能层面,ChatGLM3-6B在10B范围内性能最强,推理能力直逼GPT-3.5;功能层面,ChatGLM3-6B重磅更新多模态功能、代码解释器功能、联网功能以及Agent优化功能四项核心功能,全线逼近GPT-4!

在这里插入图片描述
  AI Agent(人工智能代理)是一个能够自主执行任务或达成目标的系统或程序,能够围绕复杂问题进行任务拆解,规划多步执行步骤;能够实时围绕自动编写的代码进行debug;能够根据人类意见反馈修改答案,实时积累修改对话,并进行阶段性微调等等,具有很强的决策和执行能力。那ChatGLM3-6B模型开放的Function calling能力,是大语言模型推理能力和复杂问题处理能力的核心体现,是本次ChatGLM 3模型最为核心的功能迭代,也是ChatGLM 3模型性能提升的有力证明。

在这里插入图片描述

  开源模型列表:

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

二、本地部署

  大模型部署整体来看并不复杂,且官方一般都会提供标准的模型部署流程,但很多人在部署过程中会遇到各种各样的问题,很难成功部署,主要是因为这个过程会涉及非常多依赖库的安装和更新及根据本地的
安装情况,需要适时的调整代码逻辑。除此之外也有一定的硬件要求,总的来说还是具有一定的部署和使用门槛。

2.1 环境配置

  首先看系统要求。目前开源的大模型都支持在Windows、Linux和Mac上部署运行。但在应用开发领域中,Linux 系统通常被优先选择而不是 Windows,主要原因是Linux 系统具有强大的包管理系统(如 apt, yum, pacman),允许开发者轻松安装、更新和管理软件包,这比 Windows 操作系统上的软件安装和管理更加方便快捷。同时Linux系统与多种编程语言和开发工具的兼容性较好,尤其是一些开源工具,仅支持在Linux系统上使用。整体来看,在应用运行方面对硬件的要求较低,且在处理多任务时表现出色,所以被广泛认为是一个非常稳定和可靠的系统,特别是对于服务器和长时间运行的应用。

  Linux 操作系统有许多不同的发行版,每种发行版都有其特定的特点和用途,如CentOS、Ubuntu和Debian等。 CentOS 是一种企业级的 Linux 发行版,以稳定性和安全性著称。它是 RHEL(Red Hat Enterprise Linux)的免费替代品,与 RHEL 完全兼容,适用于服务器和企业环境。而Ubuntu,是最受欢迎的 Linux 发行版之一,其优势就是对用户友好和很强的易用性,其图形化界面都适合大部分人的习惯。

  所以,在实践大模型时,强烈建议大家使用Ubuntu系统。同时,本教程也是针对Ubuntu 22.04 桌面版系统来进行ChatGLM3-6B模型的部署和运行的。
  关于硬件的需求,ChatGLM3-6B支持GPU运行(需要英伟达显卡)、CPU运行以及Apple M系列芯片运行。其中GPU运行需要至少6GB以上显存(4Bit精度运行模式下),而CPU运行则需要至少32G的内存。而由于Apple M系列芯片是统一内存架构,因此最少需要13G内存即可运行。其中CPU运行模式下内存占用过大且运行效率较低,因此我们也强调过,GPU模式部署才能有效的进行大模型的学习实践。

查看显卡

nvidia-smi

在这里插入图片描述
查看conda版本

conda --version

conda 4.10.3
conda create --name chatglm3_test python=3.11
conda activate chatglm3_test

2.2 在虚拟环境中安装Pytorch

pytorch网址:
https://pytorch.org/get-started/previous-versions/

在这里插入图片描述

conda install pytorch==2.2.0 torchvision==0.17.0 torchaudio==2.2.0 pytorch-cuda=12.1 -c pytorch -c nvidia
import torch
print(torch.cuda.is_available())

2.3 下载ChatGLM3的项目文件

  ChatGLM3的代码库和相关文档存储在 GitHub 这个在线平台上。GitHub 是一个广泛使用的代码托管平台,它提供了版本控制和协作功能。

  要下载ChatGLM3-6B的项目文件,需要进入ChatGLM3的Github:https://github.com/THUDM/ChatGLM3

在这里插入图片描述
  在 GitHub 上将项目下载到本地通常有两种主要方式:克隆 (Clone) 和 下载 ZIP 压缩包。

  克隆 (Clone)是使用 Git 命令行的方式。我们可以克隆仓库到本地计算机,从而创建仓库的一个完整副本。这样做的好处是我们可以跟踪远程仓库的所有更改,并且可以提交自己的更改。如果要克隆某一个仓库,可以使用如下命令:

git clone <repository-url>   # 其中 <repository-url> 是 GitHub 仓库的 URL。

  推荐使用克隆 (Clone)的方式。对于ChatGLM3这个项目来说,我们首先在GitHub上找到其仓库的URL。

#source /etc/network_turbo
git clone https://github.com/THUDM/ChatGLM3.git

2.4 升级pip版本

  pip 是 Python 的一个包管理器,用于安装和管理 Python 软件包。允许从 Python Package Index(PyPI)和其他索引中安装和管理第三方库和依赖。一般使用 pip 来安装、升级和删除 Python 软件包。除此之外,pip 自动处理 Python 软件包的依赖关系,确保所有必需的库都被安装。在Python环境中,尽管我们是使用conda来管理虚拟环境,但conda是兼容pip环境的,所以使用pip下载必要的包是完全可以的。

  我们建议在执行项目的依赖安装之前升级 pip 的版本,如果使用的是旧版本的 pip,可能无法安装一些最新的包,或者可能无法正确解析依赖关系。升级 pip 很简单,只需要运行命令如下命令:

python -m pip install --upgrade pip 

2.5 使用pip安装ChatGLM运行的项目依赖**

  一般项目中都会提供 requirements.txt这样一个文件,该文件包含了项目运行所必需的所有 Python 包及其精确版本号。使用这个文件,可以确保在不同环境中安装相同版本的依赖,从而避免了因版本不一致导致的问题。我们可以借助这个文件,使用pip一次性安装所有必需的依赖,而不必逐个手动安装,大大提高效率。命令如下:

pip install -r requirements.txt

2.6 从Hugging Face下载ChatGLM3模型权重

  经过Step 5的操作过程,我们下载到的只是ChatGLM3-6B的一些运行文件和项目代码,并不包含ChatGLM3-6B这个模型。这里我们需要进入到 Hugging Face 下载。Hugging Face 是一个丰富的模型库,开发者可以上传和共享他们训练好的机器学习模型。这些模型通常是经过大量数据训练的,并且很大,因此需要特殊的存储和托管服务。

  不同于GitHub,GitHub 仅仅是一个代码托管和版本控制平台,托管的是项目的源代码、文档和其他相关文件。同时对于托管文件的大小有限制,不适合存储大型文件,如训练好的机器学习模型。相反,Hugging Face 专门为此类大型文件设计,提供了更适合大型模型的存储和传输解决方案。

在这里插入图片描述

在这里插入图片描述
  Git Large File Storage(Git LFS)是一种用于处理大文件的工具,在 Hugging Face 下载大模型时,通常需要安装 Git LFS,主要的原因是:Git 本身并不擅长处理大型文件,因为在 Git 中,每次我们提交一个文件,它的完整内容都会被保存在 Git 仓库的历史记录中。但对于非常大的文件,这种方式会导致仓库变得庞大而且低效。而 Git LFS, 就不会直接将它们的内容存储在仓库中。相反,它存储了一个轻量级的“指针”文件,它本身非常小,它包含了关于大型文件的信息(如其在服务器上的位置),但不包含文件的实际内容。当我们需要访问或下载这个大型文件时,Git LFS 会根据这个指针去下载真正的文件内容。

  实际的大文件存储在一个单独的服务器上,而不是在 Git 仓库的历史记录中。所以如果不安装 Git LFS 而直接从 Hugging Face 或其他支持 LFS 的仓库下载大型文件,通常只会下载到一个包含指向实际文件的指针的小文件,而不是文件本身。

因为文件很大所以下载会很慢,建议在files页面直接点击下载单个文件,最后在整理在一起
在这里插入图片描述

三、运行ChatGLM3-6B模型的方式

3.1基于命令行的交互式对话

cd basic_demo/
ls
cli_batch_request_demo.py  cli_demo.py  cli_demo_bad_word_ids.py  web_demo_gradio.py  web_demo_streamlit.py

  在启动前,我们仅需要进行一处简单的修改,因为我们已经把ChatGLM3-6B这个模型下载到了本地,所以需要修改一下模型的加载路径。

vim cli_demo.py 

在这里插入图片描述
  修改完成后,直接使用python cli_demp.py即可启动,如果启动成功,就会开启交互式对话,如果输入stop 可以退出该运行环境。

在这里插入图片描述
在这里插入图片描述

3.2 在指定虚拟环境的Jupyter Lab中运行

我们在部署Chatglm3-6B模型之前,创建了一个chatglme3_test虚拟环境来支撑该模型的运行。除了在终端中使用命令行启动,同样可以在Jupyter Lab环境中启动这个模型。具体的执行过程如下:

  首先,在终端中找到需要加载的虚拟环境,使用如下命令可以查看当前系统中一共存在哪些虚拟环境:

conda env list

# conda environments:
#
base                  *  /root/miniconda3
chatglm3_test            /root/miniconda3/envs/chatglm3_test

  这里可以看到我们之前创建的chatglm3_test虚拟环境,需要使用如下命令进入该虚拟环境:

# 这里的`env_name`就是需要进入的虚拟环境名称
conda activate `env_name`

  在该环境中安装ipykernel软件包。这个软件包将允许Jupyter Notebook使用特定环境的Python版本。运行以下命令:

conda install ipykernel

  将该环境添加到Jupyter Notebook中。运行以下命令:

# 这里的env_name 替换成需要使用的虚拟环境名称
python -m ipykernel install --user --name=yenv_name --display-name="Python(env_name)"

#python -m ipykernel install --user --name=llm --display-name="Python(chatglm3_test)"

  执行完上述过程后,在终端输入jupyter lab 启动。

如果提示:The port 8888 is already in use, trying another port.
您可以在命令行中使用 -p 或 --port 选项,后面跟着您想要使用的端口号。例如,如果您想要使用端口 8889,您可以这样启动 JupyterLab:jupyter lab --port 8889

  打开后就可以看到,当前环境下我们已经可以使用新的虚拟环境创建Notebook。
在这里插入图片描述
  基本调用流程也比较简单,官方也给出了一个实例:

  只需要从transformers中加载AutoTokenizer 和 AutoModel,指定好模型的路径即可。tokenizer这个词大家应该不会很陌生,可以简单理解我们在之前使用gpt系列模型的时候,使用tiktoken库帮我们把输入的自然语言,也就是prompt按照一种特定的编码方式来切分成token,从而生成API调用的成本。但在Transform中tokenizer要干的事会更多一些,它会把输入到大语言模型的文本,包在tokenizer中去做一些前置的预处理,会将自然语言文本转换为模型能够理解的格式,然后拆分为 tokens(如单词、字符或子词单位)等操作。

  而对于模型的加载来说,官方的代码中指向的路径是THUDM/chatglm3-6b,表示可以直接在云端加载模型,所以如果我们没有下载chatglm3-6b模型的话,直接运行此代码也是可以的,只不过第一次加载会很慢,耐心等待即可,同时需要确保当前的网络是联通的(必要的情况下需要开梯子)。

  因为我们已经将ChatGLM3-6B的模型权重下载到本地了,所以此处可以直接指向我们下载的Chatglm3-6b模型的存储路径来进行推理测试。

from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True).half().cuda()
model = model.eval()
response, history = model.chat(tokenizer, "你好", history=[])
print(response)
response, history = model.chat(tokenizer, "晚上睡不着应该怎么办", history=history)
print(response)

  对于其他参数来说,model 有一个eval模式,就是评估的方法,模型基本就是两个阶段的事,一个是训练,一个是推理,计算的量更大,它需要把输入的值做一个推理,如果是一个有监督的模型,那必然存在一个标签值,也叫真实值,这个值会跟模型推理的值做一个比较,这个过程是正向传播。差异如果很大,就说明这个模型的能力还远远不够,既然效果不好,就要调整参数来不断地修正,通过不断地求导,链式法则等方式进行反向传播。当模型训练好了,模型的参数就不会变了,形成一个静态的文件,可以下载下来,当我们使用的时候,就不需要这个反向传播的过程,只需要做正向的推理就好了,此处设置 model.eval()就是说明这个过程。而trust_remote_code=True 表示信任远程代码(如果有), device=‘cuda’ 表示将模型加载到CUDA设备上以便使用GPU加速,这两个就很好理解了。

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

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

相关文章

GPT2从放弃到入门(四)

引言 体验地址&#xff1a;https://huggingface.co/spaces/greyfoss/gpt2-chatbot 上篇文章我们通过Gradio作为前端轻松地连接到训练好的Chatbot&#xff0c;本文介绍如何分享你创建好的模型给你的朋友。 当你训练好的模型推送到Huggingface Hub上后&#xff0c;其实还可以进一…

How to convert .py to .ipynb in Ubuntu 22.04

How to convert .py to .ipynb in Ubuntu 22.04 jupyter nbconvertp2j 最近看到大家在用jupyter notebook&#xff0c;我也试了一下&#xff0c;感觉还不错&#xff0c;不过&#xff0c;也遇到了一些问题&#xff0c;比方说&#xff0c;我有堆的.py文件&#xff0c;如果要一个一…

YOLOv8融入低照度图像增强算法---传统算法篇

YOLOv8n原图检测YOLOv8n增强后检测召回率和置信度都有提升 前言 这篇博客讲讲低照度,大家都催我出一些内容,没想到这么多同学搞这个,恰好我也做过这方面的一些工作,那今天就来讲解一些方法,低照度的图像增强大体分“传统算法”和“深度学习算法”; 目前低照度的图像增…

sqlite3嵌入式开发板命令行方式使用

如何在编译嵌入式版本的sqlite3&#xff0c;请看我上一篇文章 sqlite3 交叉编译-CSDN博客 一、sqlite3命令行方式使用 假如我将编译好的嵌入式的sqlite3放置在如下路径&#xff1a; 进入bin目录进行操作 1.运行sqlite3 运行sqlite3有两种方式 1&#xff09;直接在内存里面…

Wireshark使用相关

1.wireshark如何查看RST包 tcp.flags.reset1 RST表示复位&#xff0c;用来异常的关闭连接&#xff0c;在TCP的设计中它是不可或缺的。发送RST包关闭连接时&#xff0c;不必等缓冲区的包都发出去&#xff08;不像上面的FIN包&#xff09;&#xff0c;直接就丢弃缓存区的包发送R…

Fastgpt 无法启动或启动后无法正常使用的讨论(启动失败、用户未注册等问题这里)

FastGPT 是一个基于 LLM 大语言模型的知识库问答系统&#xff0c;提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排&#xff0c;从而实现复杂的问答场景&#xff01; FastGPT是非常实用并且相当厉害的个人知识库AI项目&#xff0c;项目是非常…

【Ubuntu】文件和目录的增、删、改、查操作

这里写目录标题 (一)文件和目录类命令的使用1、目录与文件的增加&#xff08;1&#xff09;目录的增加 :&#xff08;2&#xff09;文件的增加 2、目录与文件的删除&#xff08;1&#xff09;目录和文件的删除 3、目录与文件的修改&#xff08;1&#xff09;mv命令 4、目录与文…

数字孪生在教学培训的应用场景

数字孪生技术在教学培训领域的应用场景非常广泛&#xff0c;它通过创建一个真实世界的虚拟副本&#xff0c;为教育和培训提供了全新的方法和手段。以下是一些具体的应用场景&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#…

景顺长城:《重塑与创造——2024 ai+洞察报告》

近期&#xff0c;景顺长城发布了《重塑与创造——2024 ai洞察报告》,报告深入探讨了人工智能&#xff08;AI&#xff09;产业的发展现状、未来趋势以及对各行业的潜在影响。报告认为&#xff0c;AI产业发展是多层次、多浪潮的&#xff0c;目前我们处于第二阶段但未来将持续伴随…

Kibana的安装(Linux版)

Kibana是一个针对Elasticsearch的开源分析及可视化平台&#xff0c;用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana&#xff0c;可以通过各种图表进行高级数据分析及展示。 Kibana让海量数据更容易理解。它操作简单&#xff0c;基于浏览器的用户界面可以快速创…

3-iperf3 使用什么工具可以检测网络带宽、延迟和数据包丢失率等网络性能参数呢?

(1)iperf3简介 1.iperf3简介 2.用途&#xff08;特点&#xff09; 3.下载iperf3地址 &#xff08;2&#xff09;实战 1.iperf3参数 &#xff08;1&#xff09;通用参数&#xff08;客户端和服务器端都是适用的&#xff09; &#xff08;2&#xff09;客户端参数 实验1&…

鸿蒙生态专访——对话华为HDE坚果

hi, 大家好, 我是徐小夕. 之前在趣谈前端和大家分享了很多前端工程化, 可视化和低代码的技术实践, 今天又到了《小夕朋友圈》专访时刻, 我会定期采访国内外优秀的开源作者, 独立开发者和创业者, 分享他们的学习成长经验和独立产品开发经验, 让更多热爱技术的小伙伴建立技术自信…

机器学习笔记(3)—多变量线性回归

多变量线性回归&#xff08;LinearRegression witMultiple Variables&#xff09; 前言多变量线性回归多维特征多变量梯度下降特征和多项式回归正规方程 Normal Equation正规方程及不可逆性&#xff08;选&#xff09; 代码实例and计算梯度下降法的一些实例 总结 前言 我们在前…

【C语言】预处理编译链接调试技巧详解

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;C语言_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.预处理 1.1 预定义符号 1.2 #define 1.2.1 #define 定义标识符 1.2.2 #define 定义宏 1.2.3 #define 替换规则 1.2.4 #和## …

cleanmymac x试用期结束会扣费吗?

CleanMyMac X试用期结束后&#xff0c;如果您选择继续使用该应用程序&#xff0c;则需要购买许可证&#xff0c;否则可能会被扣费。为了避免不必要的扣费&#xff0c;建议您在试用期结束前做出决定&#xff0c;如果不打算继续使用&#xff0c;请及时删除该应用程序。 CleanMyMa…

前端html常用标签 笔记

一、基础 开始标签 结束标签 大部分是成对出现的标签&#xff0c;这个是空标签(/放在最后&#xff0c;/可以省掉) 缩进 向后Tab 、前向ShiftTab 红的就是元素属性 标签可以使内容有一些特殊的表现: 给body颜色后&#xff1a; h1 span(连起来) 标签&#xff1a; 标题h1 h2 h3 …

edga 0x800704cf错误码(同步失败)

edga 0x800704cf错误码(同步失败) 执行此操作需要 Internet。 你似乎没有连接到 Internet。请检查你的连接&#xff0c;然后再试一次。 0x800704cf 发送反馈 取消windows键R&#xff0c; 输入services.msc 进入本地服务管理&#xff0c; 重启 Microsoft Account Sign-in Assi…

力扣爆刷第105天之CodeTop100五连刷11-15

力扣爆刷第105天之CodeTop100五连刷11-15 文章目录 力扣爆刷第105天之CodeTop100五连刷11-15一、5. 最长回文子串二、33. 搜索旋转排序数组三、102. 二叉树的层序遍历四、200. 岛屿数量五、121. 买卖股票的最佳时机 一、5. 最长回文子串 题目链接&#xff1a;https://leetcode…

设计模式-装饰者模式在Java中使用实例-打印发票装饰抬头和脚注

场景 设计模式-装饰者模式在Java中的使用示例&#xff1a; 设计模式-装饰者模式在Java中的使用示例_java装饰者模式例子-CSDN博客 上面装饰器的调用示例如下 AbstarctComputer computer;//要买1台电脑computer new BaseComputer();//加一个内存条computer new MemoryDecor…

企业计算机服务器中了rmallox勒索病毒怎么办,rmallox勒索病毒解密流程步骤

在网络技术飞速发展的时代&#xff0c;越来越多的企业离不开网络办公&#xff0c;通过网络开展各项工作业务成为企业的常态&#xff0c;这也被国外众多黑客组织盯上的原因&#xff0c;近期&#xff0c;网络勒索病毒攻击的事件频发&#xff0c;越来越多的企业开始重视企业数据安…