ChatGLM3-6B模型介绍及微调

news2024/11/16 6:55:51

文章目录

  • ChatGLM3-6B的强大特性
    • 更强大的基础模型
    • 更完整的功能支持
    • 更全面的开源序列
  • ChatGLM3-6B的部署
    • basic版部署
    • 集成版部署
  • ChatGLM3-6B-base 微调
  • ChatGLM3-6B-chat 微调
    • 多轮对话微调
    • 单轮对话微调

ChatGLM3-6B的强大特性

项目地址:https://github.com/THUDM/ChatGLM3
ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的新一代(第三代)对话预训练模型。ChatGLM3-6B 是 ChatGLM3 系列中的开源模型,在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6B 引入了如下特性:

  • 更强大的基础模型
  • 更完整的功能支持
  • 更全面的开源序列

更强大的基础模型

ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。在语义、数学、推理、代码、知识等不同角度的数据集上测评显示,ChatGLM3-6B-Base 具有在 10B 以下的基础模型中最强的性能。其在44个中英文公开数据集测试国内第一。

ChatGLM3-6B-Base在不同数据集上的的性能展示图
在这里插入图片描述
ChatGLM3-6B-Base在不同数据上的具体效果

ModelGSM8KMATHBBHMMLUC-EvalCMMLUMBPPAGIEval
ChatGLM2-6B-Base32.46.533.747.951.750.0--
Best Baseline52.113.145.060.163.562.247.545.8
ChatGLM3-6B-Base72.325.766.161.469.067.552.453.7

Best Baseline:

Best Baseline 指的是截止 2023年10月27日、模型参数在 10B 以下、在对应数据集上表现最好的预训练模型,不包括只针对某一项任务训练而未保持通用能力的模型。

对不同数据集采用的测试方式的区别:

对 ChatGLM3-6B-Base 的测试中,BBH 采用 3-shot 测试,需要推理的 GSM8K、MATH 采用 0-shot CoT 测试,MBPP 采用 0-shot 生成后运行测例计算 Pass@1 ,其他选择题类型数据集均采用 0-shot 测试。

更完整的功能支持

ChatGLM3-6B 采用了全新设计的 Prompt 格式,在不影响模型通用能力的情况下,全面增强ChatGLM3-6B的能力。此外,除正常的多轮对话外。同时原生支持工具调用(Function Call)、代码执行(Code Interpreter)和 Agent 任务等复杂场景。
在这里插入图片描述

更全面的开源序列

除了对话模型 ChatGLM3-6B 外,还开源了基础模型 ChatGLM3-6B-Base、长文本对话模型 ChatGLM3-6B-32K。以上所有权重对学术研究完全开放,在填写问卷进行登记后亦允许免费商业使用

ModelSeq LengthDownload
ChatGLM3-6B8kHuggingFace | ModelScope
ChatGLM3-6B-Base8kHuggingFace | ModelScope
ChatGLM3-6B-32K32kHuggingFace | ModelScope

ChatGLM3-6B的部署

ChatGLM3-6B提供了两种不同的部署方式,第一种只有Chat 对话模式,第二种将对话模式,工具模型和代码解释器模型进行了集成。

  • Chat: 对话模式,在此模式下可以与模型进行对话。
  • Tool: 工具模式,模型除了对话外,还可以通过工具进行其他操作。
  • Code Interpreter: 代码解释器模式,模型可以在一个 Jupyter 环境中执行代码并获取结果,以完成复杂任务。

在这里插入图片描述
可以通过在 tool_registry.py 中注册新的工具来增强模型的能力。
在这里插入图片描述
模型能够执行更为复杂的任务,例如绘制图表、执行符号运算等等。模型会根据对任务完成情况的理解自动地连续执行多个代码块,直到任务完成。在这里插入图片描述

basic版部署

basic 版可以在七月GPU上进行部署,模型文件已下载,相关环境已配置。
模型文件路径:/data/sim_chatgpt
chatglm3-6b环境

# 激活conda环境
source activate
# 进入对应的conda环境
conda activate chatglm3-6b

1、下载代码仓库

git clone https://github.com/THUDM/ChatGLM3
cd ChatGLM3

如果遇到下载不下来的情况,有两种方法:
第一种是先仓库代码下载到本地解压后,传到服务器上;

在这里插入图片描述

第二种是在码云上搜索最新的ChatGLM3进行下载。

在这里插入图片描述
通过命令行方式下载下来,如:

git clone https://gitee.com/aqua/ChatGLM3
cd ChatGLM3

修改文件路径及设置

修改 basic_demo 下的web_demo.py和web_demo2.py
只需要将模型路径修改为 /data/sim_chatgpt 即可。

cd basic_demo
vi web_demo.py
vi web_demo2.py

MODEL_PATH = os.environ.get(‘MODEL_PATH’, ‘/data/sim_chatgpt/chatglm3-6b’)

注意:需要将web_demo.py中launch()函数中设置share=True,server_name=“0.0.0.0”,以便可以在浏览器打开。

部署推理

基于 Gradio 的网页版 demo:

python web_demo.py

在这里插入图片描述

基于 Streamlit 的网页版 demo:

streamlit run web_demo2.py

网页版 demo 会运行一个 Web Server,并输出地址。在浏览器中打开输出的地址即可使用。 经测试,基于 Streamlit 的网页版 Demo 会更流畅。
在这里插入图片描述

集成版部署

集成版由于会用到julyter内核,故可以在AutoDL平台上进行部署,建议选择显存32G的V100或4090进行操作,方便后面进行微调。

集成版的相关文件在 composite_demo 路径下。

下载仓库代码

git clone https://gitee.com/aqua/ChatGLM3
cd ChatGLM3

安装git-lfs

# 先安装git(如已安装可忽略)
sudo apt-get install git
# 安装apt-get源
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
# 安装git-lfs
sudo apt-get install git-lfs
# 初始化git-lfs
git lfs install

# 另外还可以# 更换 pypi 源加速库的安装
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

下载模型文件
可以从 modelscope(魔塔社区)上下载,下载前可以开启AutoDL上的[学术加速],下载模型速度会更快。(https://www.autodl.com/docs/network_turbo/)

# 开启学术加速
source /etc/network_turbo
# 下载chatglm3-6b模型文件
git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git

取消学术加速
如果不再需要建议关闭学术加速,因为该加速可能对正常网络造成一定影响

unset http_proxy && unset https_proxy

配置环境

# 激活conda环境
source activate
# 新建chatglm3-demo的conda环境
conda create -n chatglm3-demo python=3.11
# 进入chatglm3-demo的conda环境
conda activate chatglm3-demo
# 进入指定路径
cd composite_demo
# 安装相关依赖
pip install -r requirements.txt

安装jupyter内核
Code Interpreter模式需要jupyter内核

ipython kernel install --name chatglm3-demo --user

在运行代码前需要设置模型路径

export MODEL_PATH='/root/autodl-tmp/chatglm3-6b'

部署推理

streamlit run main.py --server.port=6006

之后就可以从命令行中看到 demo 的地址,但从这里无法打开,需要在我的实例中点击自定义服务访问打开。(AutoDL为了安全只提供了6006端口,且需要实名认证后才会开放,没有实名认证的点击下图中的自定义服务即可完成实名认证)。
在这里插入图片描述

ChatGLM3-6B-base 微调

base模型不具备对话能力,仅能够生成单轮回复。如果你希望使用多轮对话模型,使用Chat模型进行微调。官方对 Base版提供的是基于Lora的微调。

下载 ChatGLM3-6B-base 模型

# 从modelscope下载chatglm3-6b-base模型
git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b-base.git

由于Lora微调需要peft框架,故这里新建一个基于chatglm3-base的环境。

conda create -n chatglm3-base python=3.11
conda activate chatglm3-base
cd ChatGLM3
pip install -r requirements.txt
cd finetune_basemodel
pip install -r requirements.txt

数据下载
数据使用斯坦福的alpaca_data数据。

下载链接:https://github.com/tatsu-lab/stanford_alpaca/blob/main/alpaca_data.json

[
{
“instruction”: “Give three tips for staying healthy.”,
“input”: “”,
“output”: “1.Eat a balanced diet and make sure to include plenty of fruits and vegetables. \n2. Exercise regularly to keep your body active and strong. \n3. Get enough sleep and maintain a consistent sleep schedule.”
},
…]

下载后对数据进行格式转换

python ./scripts/formate_alpaca2jsonl.py

转换后,context是对话的上文,也就是模型的输入,target是对话的下文,也就是模型的输出。
{“context”: “hello”, “target”: “hi,I am ChatGLM3”}

修改微调文件

# 修改文件
vi ./scripts/finetune_lora.sh  

根据GPU情况修改GPU的数量,这里我们设置为1
NUM_GPUS=1
修改模型路径
BASE_MODEL_PATH=/root/autodl-tmp/chatglm3-6b-base

执行微调命令

# 修改文件
bash ./scripts/finetune_lora.sh  

在这里插入图片描述
显存占用情况如下:约占22G显存。
在这里插入图片描述
微调结束后会生成下面的lora权重文件。
在这里插入图片描述
推理

python inference.py --model "/root/autodl-tmp/chatglm3-6b-base" ----lora-path output

ChatGLM3-6B-chat 微调

相关脚本在 finetune_basemodel_demo 下。
官方提供了针对多轮对话和单轮对话的微调过程,同时都包含全量微调和P-tuning V2 的微调方法。

多轮对话微调

多轮对话微调数据格式

[
  {
    "conversations": [
      {
        "role": "system",
        "content": "<system prompt text>"
      },
      {
        "role": "user",
        "content": "<user prompt text>"
      },
      {
        "role": "assistant",
        "content": "<assistant response text>"
      }, 
       // ... Muti Turn
      {
        "role": "user",
        "content": "<user prompt text>"
      },
      {
        "role": "assistant",
        "content": "<assistant response text>"
      }
    ]
  }
  // ...
]

这里使用 ToolAlpaca 数据集
需要先将数据下载下来,运行下面代码对下载的数据集进行格式转换

python ./scripts/format_tool_alpaca.py --path "train_data.json"

在这里插入图片描述
修改微调脚本

vi ./scripts/finetune_pt_multiturn.sh

修改模型路径
BASE_MODEL_PATH=/root/autodl-tmp/chatglm3-6b

执行基于P-Tuning v2微调代码

bash ./scripts/finetune_pt_multiturn.sh

在这里插入图片描述
显存占用情况如下:约占16G显存。
在这里插入图片描述
部署推理
对于 P-Tuning v2 微调,可以使用以下方式进行部署

cd ../composite_demo
MODEL_PATH="/root/autodl-tmp/chatglm3-6b" PT_PATH="path to p-tuning checkpoint" streamlit run main.py

单轮对话微调

相关脚本在 finetune_chatmodel_demo 下。
对于输入-输出格式,样例采用如下输入格式

[
  {
    "prompt": "<prompt text>",
    "response": "<response text>"
  }
  // ...
]

使用 AdvertiseGen 数据集来进行微调,下载后将解压后的 AdvertiseGen 目录放到本目录下。

python ./scripts/format_advertise_gen.py --path "AdvertiseGen/train.json"

修改微调脚本

vi ./scripts/finetune_pt.sh

修改模型路径
BASE_MODEL_PATH=/root/autodl-tmp/chatglm3-6b

执行微调脚本

bash ./scripts/finetune_pt.sh

在这里插入图片描述
显存占用情况如下:约占22G显存。
在这里插入图片描述
推理

python inference.py \
    --tokenizer /root/autodl-tmp/chatglm3-6b \
    --model "path to finetuned model checkpoint" 

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

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

相关文章

基于node 安装express后端脚手架

1.首先创建文件件 2.在文件夹内打开终端 npm init 3.安装express: npm install -g express-generator注意的地方&#xff1a;这个时候安装特别慢,最后导致不成功 解决方法&#xff1a;npm config set registry http://registry.npm.taobao.org/ 4.依次执行 npm install -g ex…

shopify商城开发 引用谷歌字体库 fonts.google.com

引用谷歌字体库 https://fonts.google.com/ <link rel"preconnect" href"https://fonts.googleapis.com"> <link rel"preconnect" href"https://fonts.gstatic.com" crossorigin> <link href"https://fonts.goo…

详细了解云堡垒机的作用,提高企业数据信息安全

随着上云企业的不断增加&#xff0c;云上数据安全性成为企业面临的重要问题。为了保障企业的核心数据安全&#xff0c;越来越多的企业采购了云堡垒机来提升数据安全性。今天我们就来详细了解一下云堡垒机的作用&#xff0c;以及如何提高企业数据安全。 一、云堡垒机定义 云堡垒…

LabVIEW进行癌症预测模型研究

LabVIEW进行癌症预测模型研究 癌症是一种细胞异常增生的疾病。随着年龄的增长&#xff0c;细胞分裂速度放缓&#xff0c;但癌细胞会失去控制地不断分裂&#xff0c;形成可能良性或恶性的肿瘤。 2012年的国际癌症数据显示&#xff0c;新发癌症病例和癌症相关死亡人数有所增加。…

springboot使用EasyExcel导入数据

springboot使用EasyExcel导入数据 1. 引入依赖 <!-- Easy Excel --> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.2.1</version> </dependency>2. 建立对应实体类 假如…

多线程JUC 第2季 CAS的作用介绍

一 CAS作用介绍 1.1 CAS作用 CAS有3个操作数&#xff0c;位置内存值V&#xff0c;旧的预期值A&#xff0c;要修改的更新值B&#xff0c;如果内存值V和预期值相同则&#xff0c;内存值改为B&#xff0c;否则什么都不做。当它重来重试的这种行为称为-自旋。 CAS是一条cpu的原…

为什么越来越多的人从事软件测试行业?

1.市场需求增加&#xff1a;随着数字化转型和互联网的普及&#xff0c;各行各业都需要高质量、稳定可靠的软件来支持其业务运作。因此&#xff0c;对软件测试人员的需求也随之增加。同时&#xff0c;新兴技术的发展&#xff0c;如物联网、大数据、区块链、人工智能等&#xff0…

git学习笔记03(小滴课堂)

详解分支的基本操作 创建分支&#xff1a; 查看分支&#xff1a; 切换分支&#xff1a; git branch 中星号是当前分支。 idea中也更新了。 提交上去。 我们新建个分支&#xff1a; 我们新建分支是复制当前分支&#xff0c;而不是直接复制的主分支。 我们切换回主分支&#xf…

Bounding boxes augmentation for object detection

Different annotations formats Bounding boxes are rectangles that mark objects on an image. There are multiple formats of bounding boxes annotations. Each format uses its specific representation of bouning boxes coordinates 每种格式都使用其特定的边界框坐标…

51单片机控制1602LCD显示屏输出两行文字一

51单片机控制1602LCD显示屏输出两行文字一 1.概述 这篇文章介绍1602型号显示屏的基础知识&#xff0c;以及使用单片机控制它输出两行内容。 2.1602基础知识 1602 液晶显示模块是一种通用的工业液晶显示模块&#xff0c;专门用来显示字母、数字、符号等的点阵型液晶显示模块…

C++智能指针介绍

引言 为了充分利用RAII思想&#xff0c;C 11开始引入了智能指针&#xff0c;本文介绍RAII以及三种智能指针&#xff1a; std::unique_ptrstd::shared_ptrstd::weak_ptr 除此之外&#xff0c;本文还会介绍智能指针的常用创建方法&#xff1a; std::make_uniquestd::make_sha…

微信小程序:用map()将对象数组中的某一项组合成新数组

使用分析 使用map()方法来遍历 info 数组中的每个元素&#xff0c;并整合每一个对象中的某一项进行新数组的重组 效果展示 这里是查询对象数组中的全部name值 原始数据 提取出name的数组 核心代码 var infos items.map(item > item.name); 完整代码&#xff08;用微信小程…

iOS按钮控件UIButton使用

1.在故事板中添加按钮控件,步聚如下: 同时按钮Shift+Commad+L在出现在控件库中选择Button并拖入View Controller Scene中 将控件与变量btnSelect关联 关联后空心变实心 如何关联?直接到属性窗口拖按钮变量到控件上,出现一条线,然后松开,这样就关联成功了 关联成功后属性窗口…

Redis HyperLogLog 数据结构模型统计

HyperLogLog HyperLogLog 不是一种新的数据结构 &#xff0c; 本质上是字符串类型。 是一种基数算法。 通过 HyperLogLog 可以节省内存空间&#xff0c;并完成独立总数的统计。 HyperLogLog 数据结构可用于仅使用少量恒定内存来计算集合中的唯一元素&#xff0c;具体而言&…

Web开发:VS2022列表导出CSV中文乱码问题(已解决)

目录 一、问题重现 二、解决方案 1.新建一个EXCEL文档 2.点击数据-点击导入&#xff08;生成的文件&#xff09;-设置中文格式 一、问题重现 使用VS2022 DEBUG导出列表时&#xff0c;打开CSV文件发现中文乱码 二、解决方案 1.新建一个EXCEL文档 2.点击数据-点击导入&…

新手选电视盒子什么牌子好?内行分享最新电视盒子排名

新手们在面对众多品牌和机型时难免不知道如何挑选电视盒子&#xff0c;电视盒子的品质良莠不齐&#xff0c;究竟电视盒子什么牌子好&#xff1f;我身为从业人员&#xff0c;身边朋友在挑选电视盒子时都会咨询我的意见&#xff0c;我特意整理了业内最新发布的热门电视盒子排名TO…

选择销售技巧培训机构注意事项

选择销售技巧培训机构注意事项 随着市场竞争的日益激烈&#xff0c;销售技巧对于企业的成功至关重要。为了提升销售团队的技能&#xff0c;许多企业选择投资于销售技巧培训机构。然而&#xff0c;在选择培训机构时&#xff0c;有几个关键因素需要考虑。本文将介绍选择销售技巧…

亚马逊云科技re_Invent 2023产品体验:亚马逊云科技产品应用实践 王炸产品Amazon Q,你的AI助手

本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 意料之中 2023年9月25日&#xff0c;亚马逊宣布与 Anthropic 正式展开战略合作&#x…

详解接口测试

目录 什么是接口&#xff1f; 接口协议的类型 接口测试是什么 HTTP接口的测试用例设计 HTTP接口的测试方法 什么是接口&#xff1f; 在面向对象编程中&#xff0c;接口是一个抽象的概念&#xff0c;用于定义类应该具有的方法和属性。一个类可以实现一个或多个接口&#xf…

如何解决掉你的u盘装不进去文件大小过大的文件

目录 前言1.解决方案2.原因2.1查看自己u盘格式2.2不同格式2.3分配单元大小作用 &#x1f44d; 点赞&#xff0c;你的认可是我创作的动力&#xff01; ⭐️ 收藏&#xff0c;你的青睐是我努力的方向&#xff01; ✏️ 评论&#xff0c;你的意见是我进步的财富&#xff01; 前言…