聊聊ChatGLM6B的微调脚本及与Huggingface的关联

这篇具有很好参考价值的文章主要介绍了聊聊ChatGLM6B的微调脚本及与Huggingface的关联。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文首先分析微调脚本trainer.sh的内容,再剖析ChatGLM是如何与Huggingface平台对接,实现transformers库的API直接调用ChatGLM模型,最后定位到了ChatGLM模型的源码文件。

脚本分析

微调脚本:

PRE_SEQ_LEN=128
LR=2e-2

CUDA_VISIBLE_DEVICES=0 python3 main.py \
    --do_train \
    --train_file AdvertiseGen/train.json \
    --validation_file AdvertiseGen/dev.json \
    --prompt_column content \
    --response_column summary \
    --overwrite_cache \
    --model_name_or_path THUDM/chatglm-6b \
    --output_dir output/adgen-chatglm-6b-pt-$PRE_SEQ_LEN-$LR \
    --overwrite_output_dir \
    --max_source_length 64 \
    --max_target_length 64 \
    --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

脚本配置项分析:

  1. PRE_SEQ_LEN=128: 定义了序列长度为128。这个参数通常用于设置输入序列的最大长度。
  2. LR=2e-2: 定义了学习率为0.02。学习率是模型训练中的一个重要超参数,它决定了模型参数更新的幅度。
  3. CUDA_VISIBLE_DEVICES=0: 这个环境变量用于设置哪些GPU将被TensorFlow框架使用。在这个脚本中,只使用了第一个GPU(索引为0)。
  4. python3 main.py: 这一行开始执行主训练脚本main.py。
  5. --do_train: 这个标志告诉脚本执行训练过程。
  6. --prompt_column content: 这个标志指定了输入列的名称,这里称为content。这是模型接收的输入列的名称。
  7. --response_column summary: 这个标志指定了输出列的名称,这里称为summary。这是模型需要生成的输出列的名称。
  8. --model_name_or_path THUDM/ChatGLM-6b: 这个标志指定了预训练模型的名称或路径。这里使用的是名为THUDM/ChatGLM-6b的预训练模型。
  9. --output_dir output/adgen-ChatGLM-6b-pt-$PRE_SEQ_LEN-$LR: 这个标志指定了输出目录。目录名为output/adgen-ChatGLM-6b-pt-128-0.02,其中128和0.02分别由$PRE_SEQ_LEN和$LR变量替换。
  10. --per_device_train_batch_size 1: 这个标志设置了每个设备上的训练批次大小为1。
  11. --per_device_eval_batch_size 1: 这个标志设置了每个设备上的评估批次大小为1。
  12. --gradient_accumulation_steps 16: 这个标志设置了梯度累积的步数为16。这意味着在每个更新步骤中,会将最近16个步骤的梯度相加。
  13. --max_steps 3000: 这个标志设置了训练过程中的最大步数为3000。
  14. --save_steps 1000: 这个标志设置了保存模型检查点的步数为1000。这意味着每1000个步骤后,将保存一次模型的状态。
  15. --learning_rate $LR: 这个标志设置了学习率为之前定义的LR变量(0.02)。
  16. --pre_seq_len $PRE_SEQ_LEN: 这个标志设置了序列长度为之前定义的PRE_SEQ_LEN变量(128)。

在官方的微调文档中,用的是ADGEN数据集,其格式也就是上述的--prompt_column content--response_column summary配置项决定的。而最终保存在output_dir配置项指定的目录下有多个checkpoint文件,其生成频率就是由save_steps配置项决定。

main.py

main文件中,依赖了trainer_seq2seq.py,而这又依赖了trainer.py文件。trainer.py文件则是直接copy自transformers库的同名文件。

transformers库的

目前的大模型都会对接到transformers库中,通过transformers库简化调用开发。AI模型的对接,遵循HuggingFace平台的要求。整个ChatGLM系列的推理、训练、微调都可以直接调用transformers库的API。常用的是如下三句:

from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()

huggingface平台与ChatGLM

在ChatGLM的部署过程中,需要在huggingface平台上下载模型参数以及配置初始化文件。而这些配置文件,transformers库的API能够调用的原因。
聊聊ChatGLM6B的微调脚本及与Huggingface的关联
聊聊ChatGLM6B的微调脚本及与Huggingface的关联
比较重要的,就是圈出来的三个。config.json文件中,配置了模型的基本信息以及transformers API的调用关系:

{
  "_name_or_path": "THUDM/chatglm-6b",
  "architectures": [
    "ChatGLMModel"
  ],
  "auto_map": {
    "AutoConfig": "configuration_chatglm.ChatGLMConfig",
    "AutoModel": "modeling_chatglm.ChatGLMForConditionalGeneration",
    "AutoModelForSeq2SeqLM": "modeling_chatglm.ChatGLMForConditionalGeneration"
  },
  "bos_token_id": 130004,
  "eos_token_id": 130005,
  "mask_token_id": 130000,
  "gmask_token_id": 130001,
  "pad_token_id": 3,
  "hidden_size": 4096,
  "inner_hidden_size": 16384,
  "layernorm_epsilon": 1e-05,
  "max_sequence_length": 2048,
  "model_type": "chatglm",
  "num_attention_heads": 32,
  "num_layers": 28,
  "position_encoding_2d": true,
  "torch_dtype": "float16",
  "transformers_version": "4.23.1",
  "use_cache": true,
  "vocab_size": 130528
}

如上的auto_map配置项。configuration_chatglm文件是该config文件的类表现形式。
modeling_chatglm.py文件是源码文件,ChatGLM对话模型的所有源码细节都在该文件中。我之前一直没找到ChatGLM的源码,就是神经网络的相关代码,经过一波的分析,终于是定位到了。所以在config文件中会配置AutoModel API直接取调用modeling_chatglm.ChatGLMForConditionalGeneration文章来源地址https://www.toymoban.com/news/detail-776385.html

到了这里,关于聊聊ChatGLM6B的微调脚本及与Huggingface的关联的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 聊聊ChatGLM-6B的源码分析

    基于ChatGLM-6B第一版,要注意还有ChatGLM2-6B以及ChatGLM3-6B 转载请备注出处:https://www.cnblogs.com/zhiyong-ITNote/ 作用:在微调时(以P-Tuning V2为例),方法训练时冻结模型的全部参数,只激活PrefixEncoder的参数。 其源码如下,整体来看是比较简单的。 为什么源码注释中会说到MLP?定位

    2024年02月03日
    浏览(36)
  • 聊聊ChatGLM-6B源码分析(二)

    基于ChatGLM-6B第一版,要注意还有ChatGLM2-6B以及ChatGLM3-6B 转载请备注出处:https://www.cnblogs.com/zhiyong-ITNote/ 官方的描述是 处理权重初始化的抽象类,以及下载和加载预训练模型的接口。 如下是GLM模型的掩码结构,在此抽象类中,由 get_masks 函数处理 GLM模型中位置编码是2D的,有

    2024年02月02日
    浏览(43)
  • 聊聊 从源码来看ChatGLM-6B的模型结构

    基于ChatGLM-6B第一版,要注意还有ChatGLM2-6B以及ChatGLM3-6B ChatGLM是transformer架构的神经网络模型,因此从transformer结构入手,分析其源码结构。 transformer结构: 转载请备注出处:https://www.cnblogs.com/zhiyong-ITNote/ ChatGLM-6B的位置编码采用的旋转位置编码(RoPB)实现。其源码: ChatGLM-6B采用

    2024年02月03日
    浏览(42)
  • 学习实践ChatGLM-6B(部署+运行+微调)

    该模型基于 General Language Model (GLM) 架构,具有 62 亿参数。 注:结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 ChatGLM-6B可以实现的能力这是一个对话机器人,所以基本的问答,系统都支持。 官方提供的使用实例: 自我认知

    2023年04月18日
    浏览(39)
  • ChatGLM2-6B微调实践-QLora方案

    申请阿里云GPU服务器: CentOS 7.6 64 Anaconda3-2023.07-1-Linux-x86_64 Python 3.11.5 GPU NVIDIA A10(显存24 G/1 core) CPU 8 vCore/30G 安装Anaconda、CUDA、PyTorch 参考:ChatGLM2-6B微调实践-P-Tuning方案 项目部署 准备数据集 准备我们自己的数据集,分别生成训练文件和测试文件这两个文件,放在项目dat

    2024年02月07日
    浏览(57)
  • windows下实现对chatGLM-6B的微调

    默认读者已成功部署chatGLM-6B,如果没有部署完毕,请参阅下列文章(同为笔者所写) https://blog.csdn.net/Asunazhang/article/details/130094252?spm=1001.2014.3001.5502 打开cmd切换至虚拟环境,调用下列代码安装依赖。 3.1 下载数据集 从 https://link.zhihu.com/?target=https%3A//cloud.tsinghua.edu.cn/f/b3f119a008

    2024年02月04日
    浏览(41)
  • 自然语言处理 微调ChatGLM-6B大模型

    bert的主要任务是随机的去除掉某个单词,使用上下文将其预测出来(相当于完形填空任务); GPT的主要任务是根据前面一句话,预测下面的内容; GLM结合了bert的强大双向注意力与gpt的强大生成能力两种能力,被nask的地方使用单向注意力,未被mask的地方使用双向注意力 预测

    2024年02月09日
    浏览(52)
  • 【ChatGLM3-6B】Docker下部署及微调

    安装好了docker 安装好了NVIDIA 显卡16G 新建一个文件夹,用来存放下载下来的ChatGLM3代码和模型 右键,打开一个git窗口,拉取模型(会很慢,耐心等待) 地址: https://modelscope.cn/models/ZhipuAI/chatglm3-6b/summary 右键,打开一个git窗口,拉取源代码 地址:https://github.com/THUDM/ChatGLM3 或

    2024年02月04日
    浏览(48)
  • ChatGLM2-6B在Windows下的微调

    1、ChatGLM2-6B! 我跑通啦!本地部署+微调(windows系统):这是最关键的一篇文章,提供了Windows下的脚本 2、LangChain + ChatGLM2-6B 搭建个人专属知识库:提供了基本的训练思路。 1、已完成ChatGLM2-6B的部署,假设部署位置为D:_ChatGPTlangchain-chatglm_testChatGLM2-6B 2、部署环境 Windows 10 专业

    2024年02月13日
    浏览(58)
  • (二)ChatGLM-6B模型部署以及ptuning微调详细教程

    下面是官方原话, 选择他的原因完全是因为可以消费级电脑上使用,更强的130B模型看https://github.com/THUDM/GLM-130B ChatGLM-6B 是一个 开源 的、支持 中英双语 的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合 模型量化 技术,用户可以在 消费级的显卡 上进行

    2024年02月07日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包