本地部署 ChatGLM2-6B

本地部署 ChatGLM2-6B

  • 1. 什么是 ChatGLM2-6B
  • 2. Github 地址
  • 3. 安装 Miniconda3
  • 4. 创建虚拟环境
  • 5. 安装 ChatGLM2-6B
  • 6. 启动 ChatGLM2-6B
  • 7. 访问 ChatGLM2-6B
  • 8. API部署
  • 9. OpenAI 格式的流式 API 部署
  • 10. 命令行部署
  • 11. ChatGLM2-6B 的推理参数含义

1. 什么是 ChatGLM2-6B

ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本,在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上,ChatGLM2-6B 引入了如下新特性:

  1. 更强大的性能:基于 ChatGLM 初代模型的开发经验,我们全面升级了 ChatGLM2-6B 的基座模型。ChatGLM2-6B 使用了 GLM 的混合目标函数,经过了 1.4T 中英标识符的预训练与人类偏好对齐训练,评测结果显示,相比于初代模型,ChatGLM2-6B 在 MMLU(+23%)、CEval(+33%)、GSM8K(+571%) 、BBH(+60%)等数据集上的性能取得了大幅度的提升,在同尺寸开源模型中具有较强的竞争力。
  2. 更长的上下文:基于 FlashAttention 技术,我们将基座模型的上下文长度(Context Length)由 ChatGLM-6B 的 2K 扩展到了 32K,并在对话阶段使用 8K 的上下文长度训练,允许更多轮次的对话。但当前版本的 ChatGLM2-6B 对单轮超长文档的理解能力有限,我们会在后续迭代升级中着重进行优化。
  3. 更高效的推理:基于 Multi-Query Attention 技术,ChatGLM2-6B 有更高效的推理速度和更低的显存占用:在官方的模型实现下,推理速度相比初代提升了 42%,INT4 量化下,6G 显存支持的对话长度由 1K 提升到了 8K。
  4. 更开放的协议:ChatGLM2-6B 权重对学术研究完全开放,在获得官方的书面许可后,亦允许商业使用。如果您发现我们的开源模型对您的业务有用,我们欢迎您对下一代模型 ChatGLM3 研发的捐赠。

2. Github 地址

https://github.com/THUDM/ChatGLM2-6B

3. 安装 Miniconda3

下载 Conda 安装脚本,

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

运行安装脚本,

bash Miniconda3-latest-Linux-x86_64.sh

按提示操作。当提示是否初始化 Conda 时,输入 “yes”,

在这里插入图片描述

安装完成后,关闭当前终端并打开新终端,这将激活 Conda,

sudo su - root

更新 Conda 至最新版本,

conda update conda

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

4. 创建虚拟环境

conda create -n chatglm2 python==3.10.6 -y
conda activate chatglm2

5. 安装 ChatGLM2-6B

git clone --recursive https://github.com/THUDM/ChatGLM2-6B; cd ChatGLM2-6B
pip install -r requirements.txt

6. 启动 ChatGLM2-6B

streamlit run web_demo2.py

7. 访问 ChatGLM2-6B

使用浏览器打开 http://localhost:8501/

在这里插入图片描述

问它一个问题,清华大学在哪?

在这里插入图片描述

8. API部署

运行仓库中的 api.py,

python api.py

默认部署在本地的 8000 端口,通过 POST 方法进行调用,

curl -X POST "http://127.0.0.1:8000" \-H 'Content-Type: application/json' \-d '{"prompt": "你好", "history": []}'

得到的返回值为,

{"response": "你好👋!我是人工智能助手 ChatGLM2-6B,很高兴见到你,欢迎问我任何问题。","history": [["你好","你好👋!我是人工智能助手 ChatGLM2-6B,很高兴见到你,欢迎问我任何问题。"]],"status": 200,"time": "2023-07-08 16:18:00"
}

9. OpenAI 格式的流式 API 部署

可以作为任意基于 ChatGPT 的应用的后端,比如 ChatGPT-Next-Web。

运行仓库中的 openai_api.py,

python openai_api.py

进行 API 调用的示例代码为,

import openai
if __name__ == "__main__":openai.api_base = "http://localhost:8000/v1"openai.api_key = "none"for chunk in openai.ChatCompletion.create(model="chatglm2-6b",messages=[{"role": "user", "content": "你好"}],stream=True):if hasattr(chunk.choices[0].delta, "content"):print(chunk.choices[0].delta.content, end="", flush=True)

10. 命令行部署

运行仓库中 cli_demo.py,

python cli_demo.py

程序会在命令行中进行交互式的对话,在命令行中输入指示并回车即可生成回复。

输入 clear 可以清空对话历史,输入 stop 终止程序。

11. ChatGLM2-6B 的推理参数含义

  • Maximum length 参数
    基于 FlashAttention 技术,我们将基座模型的上下文长度(Context Length)由 ChatGLM-6B 的 2K 扩展到了 32K,并在对话阶段使用 8K 的上下文长度训练,允许更多轮次的对话。但当前版本的 ChatGLM2-6B 对单轮超长文档的理解能力有限,我们会在后续迭代升级中着重进行优化。

  • Top P 参数
    Top P 参数是指在生成文本等任务中,选择可能性最高的前 P 个词的概率累加和。这个参数被称为 Top P,也称为 Nucleus Sampling。
    例如,如果将 Top P 参数设置为 0.7,那么模型会选择可能性排名超过 70% 的词进行采样。这样可以保证生成的文本准确性较高,但可能会缺之多样性。相反,如果将 Top P 参教设置为 0.3,则会选择可能性超过 30% 的词进行采样,这可能会导致生成义本的准确性下降,但能够更好地增加多样性。

  • Temperature 参数
    Temperature 参数通常用于调整 softmax 函数的输出,用于增加或减少模型对不类别的置信度。具体来说,softmax 函数将模型对每个类别的预测转换为概率分布。Temperature 参数可以看作是一个缩放因子,它可以增加或减少 softmax 函数输出中每个类别的置信度。
    比如将 Temperature 设置为 0.05 和 0.95 的主要区别在于,T=0.05 会使得模型更加自信,更加倾向于选择概率最大的类别作为输出,而 T=0.95 会使得模型更加不确定,更加倾向于输出多个类别的概率值较大。

完结!

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

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

相关文章

时间序列预测 | Matlab基于自回归移动平均模型(ARMA模型)时间序列预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列预测 | Matlab基于自回归移动平均模型(ARMA模型)时间序列预测,单列数据输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% 清空环境变量 w…

[Visual Studio 报错] error 找不到指定的 SDK“Microsoft

[Visual Studio 2022 报错] error : 找不到指定的 SDK“Microsoft.NET.Sdk.Web” 问题描述: 在新电脑上安装了VS2022,打开现有项目的解决方案后的时候报了这个错,所有projet文件都加载失败,如图所示: 报错分析及解决 打开项目配…

Mongo可视化工具studio 3t无限试用

文章目录 前言一、下载二、使用步骤1.下载后,无脑下一步安装好2.开始无限试用 总结 前言 mongodb可以说是比较流行的nosql数据库了,它灵活多变的存储,为项目中后续可能的变更提供了极大的便利性,工欲善其事必先利其器,今天推荐一款mongo的可视化工具: studio 3t 一、下载 各版…

Go语言程序设计(十五)接口

一、接口的概念 简单地说,Interface是一组Method的组合,可以通过Interface来定义对象的一组行为。如果某个对象实现了某个接口的所有方法,就表示它实现了该“接口”,无须显式地在该类型上添加接口说明。 假设定义了两个对象Teacher和…

qt信号与槽

信号与槽的概念: 1>信号:信号就是信号函数,可以是组件自身提供,也可以是用户自己定义,自定义时,需要类体的signals权限下进行定义,该函数是一个不完整的函数,只有声明&#xff0…

【FFMPEG】AVFilter使用流程

流程图 核心类 AVFilterGraph ⽤于统合这整个滤波过程的结构体 AVFilter 滤波器,滤波器的实现是通过AVFilter以及位于其下的结构体/函数来维护的 AVFilterContext ⼀个滤波器实例,即使是同⼀个滤波器,但是在进⾏实际的滤波时,也…

【已解决】Couldn‘t find a tree builder with the features you requested: lxml

这是一个常见于Python爬虫代码的报错。 报错代码: soup BeautifulSoup(r.text, xml) 报错原因: BeautifulSoup的解析方法之一,xml,需要安装好lxml库才行 解决办法: 安装 lxml 库即可。 pip install lxml 安装好…

【私有云】网络虚拟化

前言 大家好,我是秋意零。 之前一直对 OpenStack 网络很陌生与神奇啊,不知道它是如何实现的,网络结构是怎样的。不过,今天介绍的是网络虚拟化,它在 OpenStack 中及云计算中是非常重要的概念,是理解 OpenS…

Basic of Solidity (solidity基础)

目录 1.first contract 申明编译器版本 定义合约 合约构造函数 定义变量 定义函数 2.data type 值类型(Value Types) 引用类型(Reference Types) 映射类型(Mapping Types) Solidity是一种用于编写…

接口性能优化技巧

背景 我负责的系统在去年初就完成了功能上的建设,然后开始进入到推广阶段。随着推广的逐步深入,收到了很多好评的同时也收到了很多对性能的吐槽。 刚刚收到吐槽的时候,我们的心情是这样的: 当越来越多对性能的吐槽反馈到我们这里的…

智安网络|网络安全威胁多样化和复杂化,防护任务日益艰巨

随着数字化和网络化的加速发展,人们面临的网络安全问题日益增多。由于网络安全威胁的多样性和复杂性,网络安全防护变得越来越困难。 一. 网络安全威胁的复杂性 网络安全威胁种类繁多,主要包括病毒、木马、蠕虫、间谍软件、恶意软件、黑客攻击…

基于单片机指纹考勤系统的设计与实现

功能介绍 以51单片机作为主控系统;利用指纹采集模块存储打卡信息;12864显示当前考勤信息,时间 ;如果迟到 语音播报 您已迟到;按键进行注册指纹、删除指纹、设置当前时间和签到时间、查询打卡等;具有掉电保存…