再度进化,ChatGLM2-6B详细学习实践记录与资料分享

news2024/11/17 3:42:19

ChatGLM-6B是清华大学基础研究团队前一段时间开源出来的大模型,一经推出就得到了广泛的使用和推广,在我前面的博文中结合我自己的学习实践经历,已经详细的总结记录了一下,感兴趣或者是有需要的朋友可以自行获取即可,如下所示:

《ChatGLM-6B详细学习实践记录与资料分享》

感兴趣的话可以自行查阅即可。

ChatGLM-6B官方项目地址在这里,如下所示:

 目前已经超过了31k的star量了。

ChatGLM2-6B是清华大学基础研究团队推出的ChatGLM-6B的升级迭代版本,官方项目地址在这里,如下所示:

 可以看到:推出一周左右的时间就已经收获到了将近10k的star量,还是不错的。

官方介绍的ChatGLM2-6B升级版本主要从四个维度进行了升级,但是依旧保持了初代模型对话流畅、部署门槛低等优秀的特性,接下来就四个升级特性进行说明:

一、更加强大的性能

基于 ChatGLM 初代模型的开发经验,我们全面升级了 ChatGLM2-6B 的基座模型。ChatGLM2-6B 使用了 GLM 的混合目标函数,经过了 1.4T 中英标识符的预训练与人类偏好对齐训练,评测结果显示,相比于初代模型,ChatGLM2-6B 在 MMLU(+23%)、CEval(+33%)、GSM8K(+571%) 、BBH(+60%)等数据集上的性能取得了大幅度的提升,在同尺寸开源模型中具有较强的竞争力。

ChatGLM2-6B使用了GLM加购的目标函数,官方同样开源了GLM架构,项目地址在这里,如下所示:

 GLM是一个用自回归填空目标预训练的通用语言模型,可以在各种自然语言理解和生成任务中进行微调。官方发表的学术论文如下:
《GLM: General Language Model Pretraining with Autoregressive Blank Infilling》

 感兴趣的话可以自行研读。

官方同时开放了对应基于GLM架构开发的各种预训练模型权重如下所示:

NameParamsLanguageCorpusObjectiveFileConfig
GLM-Base110MEnglishWiki+BookTokenglm-base-blank.tar.bz2model_blocklm_base.sh
GLM-Large335MEnglishWiki+BookTokenglm-large-blank.tar.bz2model_blocklm_large.sh
GLM-Large-Chinese335MChineseWuDaoCorporaToken+Sent+Docglm-large-chinese.tar.bz2model_blocklm_large_chinese.sh
GLM-Doc335MEnglishWiki+BookToken+Docglm-large-generation.tar.bz2model_blocklm_large_generation.sh
GLM-410M410MEnglishWiki+BookToken+Docglm-1.25-generation.tar.bz2model_blocklm_1.25_generation.sh
GLM-515M515MEnglishWiki+BookToken+Docglm-1.5-generation.tar.bz2model_blocklm_1.5_generation.sh
GLM-RoBERTa335MEnglishRoBERTaTokenglm-roberta-large-blank.tar.bz2model_blocklm_roberta_large.sh
GLM-2B2BEnglishPileToken+Sent+Docglm-2b.tar.bz2model_blocklm_2B.sh
GLM-10B10BEnglishPileToken+Sent+DocDownloadmodel_blocklm_10B.sh
GLM-10B-Chinese10BChineseWuDaoCorporaToken+Sent+DocDownloadmodel_blocklm_10B_chinese.sh

二、更长的上下文

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

flash-attention项目官方地址在这里,如下所示:

 对应的论文如下所示:

《FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness》

 三、更加高效的推理

基于 Multi-Query Attention 技术,ChatGLM2-6B 有更高效的推理速度和更低的显存占用:在官方的模型实现下,推理速度相比初代提升了 42%,INT4 量化下,6G 显存支持的对话长度由 1K 提升到了 8K。

关于Multi-Query Attention技术原理细节可以查阅论文,如下所示:

《Fast Transformer Decoding: One Write-Head is All You Need》

 这里我还没有去看过所以就不再多讲了。

四、更加开放的协议

ChatGLM2-6B 权重对学术研究完全开放,在获得官方的书面许可后,亦允许商业使用。如果您发现我们的开源模型对您的业务有用,我们欢迎您对下一代模型 ChatGLM3 研发的捐赠。

这一点我的理解主要是关于商业授权使用上面ChatGLM系列的模型迈出了更大的一步,给开发者提供了更大的使用空间和操作自由。

在最初项目发布的时候是只提供了模型加载推理使用的源代码,后续在7月4日的时候官方团队发布了ChatGLM2-6B的P-Tuning v2源码,可以帮助开发者开发构建自己的大模型项目了。

想要运行整个项目,需要首先搭建环境, 安装命令如下所示:

pip install protobuf transformers==4.30.2 cpm_kernels torch>=2.0 gradio mdtex2html sentencepiece accelerate

简单的实例调用代码如下所示:

from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm2-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)

结果输出如下所示:

晚上睡不着可能会让你感到焦虑或不舒服,但以下是一些可以帮助你入睡的方法:

1. 制定规律的睡眠时间表:保持规律的睡眠时间表可以帮助你建立健康的睡眠习惯,使你更容易入睡。尽量在每天的相同时间上床,并在同一时间起床。
2. 创造一个舒适的睡眠环境:确保睡眠环境舒适,安静,黑暗且温度适宜。可以使用舒适的床上用品,并保持房间通风。
3. 放松身心:在睡前做些放松的活动,例如泡个热水澡,听些轻柔的音乐,阅读一些有趣的书籍等,有助于缓解紧张和焦虑,使你更容易入睡。
4. 避免饮用含有咖啡因的饮料:咖啡因是一种刺激性物质,会影响你的睡眠质量。尽量避免在睡前饮用含有咖啡因的饮料,例如咖啡,茶和可乐。
5. 避免在床上做与睡眠无关的事情:在床上做些与睡眠无关的事情,例如看电影,玩游戏或工作等,可能会干扰你的睡眠。
6. 尝试呼吸技巧:深呼吸是一种放松技巧,可以帮助你缓解紧张和焦虑,使你更容易入睡。试着慢慢吸气,保持几秒钟,然后缓慢呼气。

如果这些方法无法帮助你入睡,你可以考虑咨询医生或睡眠专家,寻求进一步的建议。

官方开放出来的权重下载地址在这里,如下所示:

 整体项目下载后,将下载到的权重等文件对应存放后就可以执行web_demo.py模块启动web对话页面了,如下所示:

 当然了基于官方提供的代码也是可以进行微调开发训练的,这里我们来看下ptuning目录,如下所示:

 这里train.sh就是训练的脚本,如下所示:

PRE_SEQ_LEN=128
LR=2e-2
NUM_GPUS=1

torchrun --standalone --nnodes=1 --nproc-per-node=$NUM_GPUS main.py \
    --do_train \
    --train_file AdvertiseGen/train.json \
    --validation_file AdvertiseGen/dev.json \
    --preprocessing_num_workers 10 \
    --prompt_column content \
    --response_column summary \
    --overwrite_cache \
    --model_name_or_path THUDM/chatglm2-6b \
    --output_dir output/adgen-chatglm2-6b-pt-$PRE_SEQ_LEN-$LR \
    --overwrite_output_dir \
    --max_source_length 64 \
    --max_target_length 128 \
    --per_device_train_batch_size 1 \
    --per_device_eval_batch_size 1 \
    --gradient_accumulation_steps 16 \
    --predict_with_generate \
    --max_steps 3000 \
    --logging_steps 10 \
    --save_steps 1000 \
    --learning_rate $LR \
    --pre_seq_len $PRE_SEQ_LEN \
    --quantization_bit 4

这是Linux系统下可以使用的,我这里是在windows平台下做的实验,所以需要对其进行改造处理,最终命令如下所示:

python main.py --do_train --train_file dataset/train.json --validation_file dataset/test.json --preprocessing_num_workers 10 --prompt_column content --response_column summary --overwrite_cache --model_name_or_path ChatGLM2-6B --output_dir output/chatglm2-6b-pt --overwrite_output_dir --max_source_length 64 --max_target_length 128 --per_device_train_batch_size 1 --per_device_eval_batch_size 1 --gradient_accumulation_steps 16 --predict_with_generate --max_steps 3000 --logging_steps 10 --save_steps 1000 --learning_rate 2e-2 --pre_seq_len 128 --quantization_bit 4

如果说你在运行的时候报错比如ChatGLM模型没有prefix_encoder之类的属性错误的话基本上都是代码的问题,解决办法就是重新线上拉取最新的代码覆盖本地的代码就行了。

全部处理完成后终端输入上述的命令即可启动训练,训练过程日志输出如下所示:

 接下来就是漫长的等待了,按照往初代模型的训练经验来说,基本上是一天左右的时间能够出来结果,后面再继续研究吧。

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

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

相关文章

【Linux】-Linux基本指令

作者:学Java的冬瓜 博客主页:☀冬瓜的主页🌙 专栏:【Linux】 分享: 屋檐如悬崖 风铃如沧海 我等燕归来 时间被安排 演一场意外 你悄然走开 故事在城外 浓雾散不开 看不清对白 你听不出来 风声不存在 是我在感慨 梦想来是谁在窗台 …

初步尝试调试postgresql源码

准备用VS2005和postgresql 8.x或9.0,搭建源码调试环境; 不成功;结果如下; 把下面文件中用#连着注释掉7行,然后加上一句 $self->{vcver} 8.00; 得到上面结果;如果不改的话上面的结果也没有;…

恒生电子探路金融大模型

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 近日,恒生电子和旗下子公司恒生聚源正式发布基于大语言模型技术打造的数智金融新品:金融智能助手光子和全新升级的智能投研平台WarrenQ。此外,恒生电子金融行业大模型LightGPT也首次对外亮…

硬件电路设计--运算放大器(三)应用一

文章目录 前言示例1示例2 一、反向比例反向比例改进版对平衡电阻R的讨论 二、同向比例三、电压跟随器四、加法运算电路4.1 反向加法电路4.2 同加法电路4.3 特殊应用 五、减法运算电路六、积分电路七、微分电路八、对数和指数运算电路8.1 对数8.2 指数 九、测量放大电路&#xf…

基于matlab根据一系列图像估计单个校准相机的轨迹(附源码)

一、前言 视觉里程计是通过分析一系列图像来确定相机的位置和方向的过程。视觉里程计用于各种应用,例如移动机器人、自动驾驶汽车和无人机。此示例说明如何根据一系列图像估计单个校准相机的轨迹。 此示例演示如何从一系列二维视图估计校准相机的轨迹。此示例使用…

常用字符串处理方法汇总--Pandas

字符串处理只能在Series上进行,不可以在DataFrame上操作,只能对字符串进行处理,不能对整数、日期进行处理 1. 元素统计 1.1 str.count() 1.1.1 函数功能 统计Series中每个元素中包含pat的次数 1.1.2 函数语法 Series.str.count(pat, fl…

美日韩限制光刻机供应,中国正式亮剑,外媒:轮到美芯被卡脖子了

这几年美国频频对中国芯片采取措施,今年以来美国更是变本加厉,联合荷兰和日本限制对中国出售光刻机等芯片设备,试图将中国的芯片工艺限制在45纳米以上,近日我国商务部联合海关等部门宣布对镓、锗等稀有金属实施出口限制&#xff0…

Python实现某只股票的MACD、KDJ指标的单双金叉点判定

金叉理论介绍 在股票K线图中,短期的收盘价均线向上穿越长期均线即为金叉,但如果长期均线向下或变缓,同时短期均线向上穿越就不能称之为金叉。 对于MACD指标,若差离值线由下向上突破移动平均线,即DIF值前一天小于DEA值…

MySQL库表操作的作业

1.创建数据库 create database Market; mysql> show databases; -------------------- | Database | -------------------- | information_schema | | Market | | db1 | | mysql | | performance_schema | | …

消息队列 - RocketMQ

1. 名词解释和概念 NameServer: 是一个无状态节点,可集群部署,节点之间无任何信息同步用于服务注册和发现,为 MQ 集群提供服务协调与治理记录并维护 Topic 和 Broker 的信息为生产者和消费者提供 Topic 的路由信息 无状态和有状…

On the Properties of Neural Machine Translation: Encoder–DecoderApproaches

摘要 Neural machine translation : 神经机器翻译。 神经机器翻译模型经常包含编码器和解码器:an encoder and a decoder. 编码器: 从一个变长输入序列中提取固定长度的表示。a fixed-length representation. 解码器:从表示中…

抖音SEO矩阵系统源码开发部署(二)技术搭建+二次开发

抖音SEO矩阵系统源码开发 是一项技术密集型工作,需要对大数据处理、人工智能等领域有深入了解。该系统开发过程中需要用到多种编程语言,如Java、Python等。同时,需要使用一些框架和技术,如Hadoop、Spark、PyTorch等,以…

第五章 运输层【计算机网络】

第五章 运输层【计算机网络】 前言推荐第五章 运输层5.1运输层协议概述5.1.1 进程之间的通信5.1.2运输层的两个主要协议5.1.3运输层的端口 5.2用户数据报协议UDP5.2.1UDP概述5.2.2UDP的首部格式 5.3传输控制协议TCP概述5.3.1TCP最主要的特点5.3.2TCP的连接 5.4可靠传输的工作原…

手写操作系统--进入保护模式的开篇

之前我们讲的主引导扇区以及内核加载器等内容。都是在实模式下运行的。在实模式下寻址范围仅有1M,是远远不够我们用的。我们想要更大的内存空间,就得进入保护模式,实模式是一个历史遗留问题,本身是没有这个名字的。是因为有了保护…

【算法集训之线性表篇】Day 01

文章目录 题目知识点补充思路分析代码实现运行结果 题目 01.从顺序表中删除具有最小值元素(假设唯一)并返回被删元素的值。空出位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。 知识点补充 顺序表的特点是逻辑…

CRM系统中AI如何进行销售线索评分?有什么好处(上)

每个公司的TOP销售都是精明的猎手。他们善于从大量潜在客户中挑出最可能购买的,把最好的时间、精力和资源给到高意向客户。意向度差一些的排在后面,在资源分配上也会降低。现在,您可以通过AI来进行线索评分,可以说CRM销售线索评分…

SIP 协议的主要流程

目录 SIP 协议的呼叫模型图 基本呼叫建立流程 基本呼叫拆除流程 经过代理的呼叫建立流程 经过代理的呼叫拆除流程 SIP 协议在软交换 SoftX3000(华为推出的一个支持sip协议的交换机设备) 流程图 SIP 协议的呼叫模型图 MGC 负责将 PSTN 前向信令映射…

ETHERNET/IP转MODBUS-TCP协议网关

远创智控YC-EIP-TCP 是自主研发的一款 ETHERNET/IP 从站功能的通讯网关。该产品主要功能是将各种 MODBUS-TCP 设备接入到 ETHERNET/IP 网络中。 本网关连接到 ETHERNET/IP 总线中做为从站使用,连接到 MODBUS-TCP 总线中做为主站(客户端)或从站…

淘上拼/拼上拼/抖上拼分别是什么意思(操作玩法是怎样的及数据采集代码举例)

拼多多店群玩法最常见的就是淘上拼、拼上拼、抖上拼这三种,但是很多的商家都不了解这三种玩法是什么意思,更别提操作了,本期小编就来为你们详细介绍一下。 淘上拼: 传统玩法:通过蓝海词,采集类目爆款商品数…

若依前端,菜单栏切换时刷新问题[页面菜单切换时,页面总是重新刷新,导致页面输入的查询参数重载清空]...

前端页面菜单切换时,页面总是重新刷新,导致页面输入的查询参数重载清空 这样切换时,页面就刷新了,解决方法在这里 1,页面代码,这里指定name name: "Item", 注意 name的首字母必须大写 2&#xff…