本地部署 ChatGLM2-6B

news2024/9/23 1:25:08

本地部署 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.coloradmin.cn/o/732713.html

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

相关文章

JS Node 模块化解释:AMD、UMD、CommonJS、 ESM

一、前言 传统方式下&#xff0c;JS 若想引入其它 JS 文件时&#xff0c;通常使用 <script> 语法来完成&#xff0c;然而引入的 JS 往往易于造成命名污染&#xff0c;为了解决这问题&#xff0c;模块化 开发的概念逐渐浮现。 本文将以完整的 Demo 将各大模块模块的概念…

树莓派(香橙派)交叉编译

目录 1、交叉编译是什么 2、为什么要交叉编译&#xff1f; 3、交叉编译需要用到什么工具&#xff1f; 4、&#xff08;香橙派&#xff09;交叉编译工具链的安装 5、 交叉编译服务端客户端 6、 带wiringPi库的交叉编译如何进行 1、交叉编译是什么 交叉编译是在一个平台上生…

叠加态和超级定位:量子世界的奇特现象

亲爱的读者&#xff0c; 欢迎回到我们的量子力学系列文章。在前几篇文章中&#xff0c;我们介绍了量子力学的起源、基本概念以及波函数作为描述量子世界的数学工具。今天&#xff0c;我们将深入探索量子力学中的奇特现象&#xff0c;包括叠加态和超级定位。 在量子力学中&…

sklearn高级功能

包括构造数据集、正则化、交叉验证 1.构造数据集 from sklearn import datasets import matplotlib.pyplot as plt #构造数据 #用函数来建立 100 个 sample&#xff0c;有一个 feature&#xff0c;和一个 target&#xff0c;这样比较方便可视化。 X, y datasets.make_regres…

Python开发项目基于大数据的反电信诈骗管理系统设计与实现

博主介绍&#xff1a;擅长Java、微信小程序、Python、Android等&#xff0c;专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案例…

行为型模式-策略模式(一)

今天就说一说设计模式中的策略模式&#xff0c;从名字来讲&#xff0c;意思就是&#xff0c;对应不同的情况&#xff0c;就有一种解决问题的办法&#xff0c;不同的情况&#xff0c;就有不同的应对方法&#xff0c;这就是策略模式&#xff0c;非常的智能化。 也可以参考菜鸟 …

leetcode 876.链表的中间结点(快慢指针问题)

⭐️ 往期相关文章 &#x1f4ab; 链接1&#xff1a;leetcode 206.反转链表 &#x1f4ab; 链接2&#xff1a;leetcode 203.移除链表元素 &#x1f4ab; 链接3&#xff1a;数据结构-手撕单链表代码详解 ⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;链表的中间结点 …

手把手教大家实现 npm 包,并发布 npm 仓库,搭建文档(一)

我就知道你会点进来看看&#xff0c;吹牛逼的&#xff0c;哈哈&#xff0c;不过呢&#xff0c;我正在朝着这个方向前进&#xff0c;希望大家给我鼓励鼓励&#xff0c;希望点击进来小伙伴点点赞&#xff0c;点点关注。 说实话&#xff0c;写这个项目的目的&#xff0c;从我自己…

ModaHub魔搭社区:阿里云CTO周靖人:魔搭社区将成为中国最大的“大模型自由市场”

7月7日消息&#xff0c;阿里云CTO周靖人在上海世界人工智能大会上宣布了阿里云的发展计划。 他表示&#xff0c;阿里云将致力于推动中国大模型生态的繁荣&#xff0c;并为大模型创业公司提供全方位的支持。阿里云魔搭社区已经聚集了180万AI开发者和900多个优质AI模型&#xff0…

springboot---定时任务实现

定时任务 1. scheduled注解实现1.1. 用法1.2. 参数详解1.2.1. cron1.2.2. zone1.2.3. fixedDelay1.2.4. fixedDelayString1.2.5. fixedRate1.2.6. fixedRateString1.2.7. initialDelay1.2.8. initialDelayString 1.3. 示例 1. scheduled注解实现 1.1. 用法 任意类中创建一个方…

ASL-QPSO|改进量子粒子群自适应算法及其实现(Matlab)

作者在前面的文章中介绍了量子粒子群算法&#xff0c;量子粒子群算法不但继承粒子群算法的优点&#xff0c;还有它自身计算模型更加简洁&#xff0c;控制参数更少等更加突出的优势&#xff0c;但依然存在着一定的局限性。 例如也会存在着早熟收敛的问题&#xff0c;随着迭代次数…

金属工件表面粗糙度测量方法概述

引言: 在加工零件等的表面上,存在着不同高低、深度和间隙凹凸等的复杂形状。其中,深度且间隔较小的表面坑洼不平被称为表面粗糙度。 产品外包装、汽车仪表盘或是触摸屏等加工零件表面的“闪闪发亮”“粗糙无光泽”等外观区别,就源自这个表面粗糙度的差异。 此外,拿在手里…

Linux分布式应用 Zabbix监控软件 概述 安装

zabbix 是什么&#xff1f; ●zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 ●zabbix 能监视各种网络参数&#xff0c;保证服务器系统的安全运营&#xff1b;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 ●…

ESP32(掌控板) 内置图片与动画显示

ESP32&#xff08;掌控板&#xff09; 内置图片与动画显示 本程序实现了对Mind的MicroPython库内置的图片和动画的显示。Mind上的MicroPython库由于在显示上采用缓存形式&#xff0c;不易出现屏幕闪烁&#xff0c;但对数字显示的支持较差。本程序通过机械按键进入图片选择界面&…

我的华为玩机技巧携手晤对科技,共探创意玩法与新可能

众所周知&#xff0c;华为作为全球领先的智能手机品牌&#xff0c;一直以来致力于提供最好的用户体验&#xff0c;而“我的华为”App&#xff0c;作为华为设备出厂自带的默认应用之一&#xff0c;为华为用户提供丰富的功能&#xff0c;涵盖HarmonyOS 升级、服务、玩机技巧、花粉…

Django学习笔记

Django学习笔记 初识Django安装Django创建Django项目APP启动Django快速上手再写一个页面templates模板静态文件 模板语法请求和相应登录案例 数据库操作安装第三方模块ORM Django官网 : https://docs.djangoproject.com/en/4.2/Django中文文档参考网站&#xff1a;https://yiyi…

java 并发 随笔7 ThreadLocal源码走读

0. 刚刚见了下老朋友&#xff0c;桌球撞起来的感觉很爽 可以看到 Thread 是内部是维护了局部变量的(thread-local-map) 1. 源码走读 很多的细节都在代码块中备注了 package java.lang;// 现在回来起来&#xff0c;很多经验不太丰富的人之所以在接触、学习java.lang.thread的…

初识定时任务

了解定时任务 我们在开发系统的时候&#xff0c;常常会遇到需要定时的去执行一些业务&#xff0c;例如&#xff1a;定时备份数据库、定时生成报告、定时发送通知、定时批处理等各种自动化操作。 那此时我们就需要通过使用定时任务来完成这些业务需求。并且在日常的开发中定时任…

【从删库到跑路】一文带你明白MySQL数据库的 事务 操作

&#x1f38a;专栏【MySQL】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 文章目录 &#x1f354;事务⭐简介⭐普通操作——不使用事务&#x1f3…

深入流行推荐引擎第一部分:推荐系统基础

深入流行推荐引擎第一部分&#xff1a;推荐系统基础 1. 推荐引擎及其类型什么是推荐引擎&#xff1f;基于内容的推荐&#xff08;Content-Based Recommendations&#xff09;协作推荐&#xff08;Collaborative Recommendations&#xff09;混合动力推荐&#xff08;Hybrid Rec…