【大模型系列 04】Chat-GLM-6B for PyTorch 昇腾迁移

源码链接

https://gitee.com/ascend/ModelZoo-PyTorch/tree/master/PyTorch/built-in/foundation/ChatGLM-6B

Chat-GLM-6B for PyTorch

概述

简述

ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。本仓支持P-Tuning v2 和全参数fintune。

  • 参考实现:

    url=https://github.com/THUDM/ChatGLM-6B
    commit_id=27b04bce90b34e719375576cc67ff5374bb2f38a
    url=https://huggingface.co/THUDM/chatglm-6b/tree/v0.1.0
    commit_id=f83182484538e663a03d3f73647f10f89878f438
    
  • 适配昇腾 AI 处理器的实现:

    url=https://gitee.com/ascend/ModelZoo-PyTorch.git
    code_path=PyTorch/built-in/foundation
    

准备训练环境

准备环境

默认配置需要每张卡有60G以上空闲内存。

  • 当前模型支持的 PyTorch 版本和已知三方库依赖如下表所示。

    表 1 版本支持表

    Torch_Version三方库依赖版本
    PyTorch 1.11deepspeed 0.6.0
  • 环境准备指导。

    请参考《Pytorch框架训练环境准备》。

  • 安装依赖。

    1. 安装基础依赖

    在模型源码包根目录下执行命令,安装模型对应PyTorch版本需要的依赖。

    pip install -r requirements.txt  # PyTorch1.11版本
    
    1. 安装deepspeed_npu插件
    # adaptor分支
    git clone https://gitee.com/ascend/DeepSpeed.git
    cd Deepspeed
    pip3 install ./
    

准备数据集

  1. 获取数据集。

    ADGEN 数据集任务为根据输入(content)生成一段广告词(summary)。

    Google Drive 或者 Tsinghua Cloud 下载处理好的 ADGEN 数据集,将解压后的 AdvertiseGen 目录放到ptuning目录下。
    数据集参考目录如下

    ├── AdvertiseGen
          ├──train.json
          ├──dev.json
    

准备模型权重

  1. 获取语言识别模型和预训练权重

    用户从链接自行获取模型文件(除了modeling_chatglm.py)和8份权重文件(pytorch_model-0000*-of-00008.bin
    ),并放于model目录下,微调依赖该模型权重。
    model参考目录如下

    ├── model
          ├──config.json
          ├──configuration_chatglm.py
          ├──ice_text.model
          ├──pytorch_model-00001-of-00008.bin
          ├──pytorch_model-00002-of-00008.bin
          ├──pytorch_model-00003-of-00008.bin
          ├──pytorch_model-00004-of-00008.bin
          ├──pytorch_model-00005-of-00008.bin
          ├──pytorch_model-00006-of-00008.bin
          ├──pytorch_model-00007-of-00008.bin
          ├──pytorch_model-00008-of-00008.bin
          ├──pytorch_model.bin.index.json
          ├──quantization.py
          ├──test_modeling_chatglm.py
          ├──tokenization_chatglm.py
          ├──tokenizer_config.json
    

开始训练

训练模型

  1. 进入解压后的源码包根目录。

    cd /${模型文件夹名称}
    

    修改ptuning目录下的env_npu.sh,修改引用的环境变量位置。

  2. 运行训练脚本。

    该模型P-Tuning v2支持单机单卡,全参数fintune支持单机8卡。

    • P-Tuning v2

      启动P-Tuning v2。

      bash ptuning/train.sh
      
    • 全参数finetune

      启动8卡微调。
      可以用deepspeed.json配置deepspeed参数,目前默认使用zero1

      bash ptuning/ds_train_fintune.sh 
      

    模型训练参数说明如下。

    公共参数:
    --max_source_length                       //处理后句子长度
    --max_target_length                       //目标数据长度
    --per_device_train_batch_size             //每卡训练批次大小
    --gradient_accumulation_steps             //梯度更新步数
    --max_steps                               //最大训练步数
    --logging_steps                           //打印信息步数
    --save_steps                              //保存参数步数
    --learning_rate                           //学习率
    

    训练完成后,权重文件保存在当前路径下,并输出模型训练相关信息。

训练结果展示

表 1 训练结果展示表

NAMESamplesPerSecIterationsDataTypeTorch_VersionCard
Finetune -NPU18045000fp161.11A100
Finetune -GPU20275000fp161.11910B

说明:P-Tuning v2性能待补充

版本说明

变更

2023.6.25:首次发布。

FAQ

  1. 报错提示deepspeed.py需要版本大于等于0.6.5

    # 关闭版本检测。
    # 若遇到该报错
    pip show transformers
    # 复制Location路径
    # 使用fix文件夹下的deepspeed.py替换路径下transformers/deepspeed.py
    
  2. 报错提示tranining_args.py没有cuda

    # 自动替换无法替换三方库中的文件。
    # 若遇到该报错
    pip show transformers
    # 复制Location路径
    # 使用fix文件夹下的tranining_args.py替换路径下transformers/tranining_args.py
    
  3. 报错checkpoint.py

    # 1.11版本适配问题,新版本已修复。
    # 若遇到该报错
    pip show torch_npu
    # 复制Location路径
    # 使用fix文件夹下的checkpoint.py替换路径下torch_npu/utils/checkpoint.py
    
    
  4. 加载参数阶段有卡死现象

    删除root下的cache目录,重新运行
    
    
  5. 单卡阶段报embedding_dense_grad算子错误

    enbedding当前版本,不支持动静合一,静态有部分shape不支持
    # 若遇到该报错
    修改main.py文件
    torch.npu.set_compile_mode(jit_compile=False)
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要下载 Chat-GLM-6B-Int4 模型文件和相应的配置文件。然后,你需要在你的 Linux 系统上安装 PyTorch 和 Transformers 库。你可以使用以下命令安装这两个库: ``` pip install torch pip install transformers ``` 接下来,你需要编写一个 Python 脚本来部署 Chat-GLM-6B-Int4 模型。你可以使用以下代码作为脚本的基础: ```python import torch from transformers import GPT2Tokenizer, GPT2LMHeadModel # 加载模型和分词器 tokenizer = GPT2Tokenizer.from_pretrained('chat-glm-6b-int4/config') model = GPT2LMHeadModel.from_pretrained('chat-glm-6b-int4/model') # 指定设备 device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model.to(device) # 对话循环 while True: # 获取用户输入 user_input = input("You: ") # 把用户输入转换成模型的输入格式 input_ids = tokenizer.encode(user_input, return_tensors='pt').to(device) # 在模型上生成回复 output = model.generate(input_ids, max_length=1000, do_sample=True, temperature=0.7) response = tokenizer.decode(output[0], skip_special_tokens=True) # 输出回复 print("Chat-GLM-6B-Int4: " + response) ``` 在这个脚本中,我们首先加载 Chat-GLM-6B-Int4 模型和相应的分词器。然后,我们检查可用的设备并将模型移动到相应的设备上。最后,我们开始一个对话循环,其中用户输入被转换为模型的输入格式,并在模型上生成回复。回复被解码并输出给用户。 注意,这个脚本只是一个基础示例,你需要根据你的具体需求进行修改。例如,你可能需要添加一个 Web 接口来允许用户通过浏览器与 Chat-GLM-6B-Int4 进行交互。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值