当前位置:   article > 正文

昇腾glm3大模型lora微调及推理_mindspore chatglm3

mindspore chatglm3

模型介绍

ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的新一代对话预训练模型。ChatGLM3-6B 是 ChatGLM3 系列中的开源模型,在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6B 引入了如下特性:更强大的基础模型,更完整的功能支持,更全面的开源序列

一、环境背景

  • 昇腾910b
  • 驱动版本,23.0.1
  • cann: 7.0.0
  • mindspore:2.2.11
  • mindformers:dev
  • mindpet:1.0.4

二、生成RANK_TABLE_FILE

运行mindformers/tools/hccl_tools.py生成RANK_TABLE_FILE的json文件

# 运行如下命令,生成当前机器的RANK_TABLE_FILE的json文件
python ./mindformers/tools/hccl_tools.py --device_num "[4,8)"
  • 1
  • 2

RANK_TABLE_FILE 单机8卡参考样例:

{
    "version": "1.0",
    "server_count": "1",
    "server_list": [
        {
            "server_id": "192.168.0.225",
            "device": [
                {
                    "device_id": "4",
                    "device_ip": "29.147.146.80",
                    "rank_id": "0"
                },
                {
                    "device_id": "5",
                    "device_ip": "29.147.10.62",
                    "rank_id": "1"
                },
                {
                    "device_id": "6",
                    "device_ip": "29.147.158.139",
                    "rank_id": "2"
                },
                {
                    "device_id": "7",
                    "device_ip": "29.147.47.244",
                    "rank_id": "3"
                }
            ],
            "host_nic_ip": "reserve"
        }
    ],
    "status": "completed"
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

三、权重下载

本仓库提供已经转换完成的预训练权重用于微调/推理,用户可自行从下方链接拉取后直接使用。

下载链接:

权重:https://ascend-repo-modelzoo.obs.cn-east-2.myhuaweicloud.com/MindFormers/glm32k/glm32k.ckpt

词表:https://ascend-repo-modelzoo.obs.cn-east-2.myhuaweicloud.com/MindFormers/glm32k/tokenizer.model

linux可用如下命令下载:

#!/bin/bash
mkdir -p ckpt/rank_0
cd ./ckpt/rank_0
wget https://ascend-repo-modelzoo.obs.cn-east-2.myhuaweicloud.com/MindFormers/glm32k/glm32k.ckpt
wget https://huggingface.co/THUDM/chatglm3-6b-32k/tree/main/tokenizer.model
cd ../..
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

四、数据集处理

将LongBench数据集格式转换为AdGen数据集格式,以便复用mindformers的ADGenDataLoader来转换为微调使用的数据样式。启动命令:

cd research/glm32k
python glm32k_preprocess.py \
--data_path INPUT_DATA_PATH \
--output_path OUTPUT_PATH \
--prompt_config_file PROMPT_PATH
  • 1
  • 2
  • 3
  • 4
  • 5

根据我们的文件路径,执行下面的转换命令

python glm32k_preprocess.py --data_path /data/datasets/Longbench/data --output_path /data/datasets/Longbench/new_data --prompt_config_file /data/datasets/Longbench/dataset2prompt.json
  • 1
# 参数说明
INPUT_DATA_PATH: 原始longbench数据所处的文件夹路径
OUTPUT_PATH:转换格式后的数据存储路径
PROMPT_PATH:longbench中不同数据对应的prompt
  • 1
  • 2
  • 3
  • 4

注意

五、全参微调

全参微调需要多卡启动,以LongBench数据集为例,给出了默认配置文件research/glm32k/run_glm32k.yaml

当前模型已支持使用Flash Attention算法进行全参微调,请参考 Flash Attention使用文档

  • step 1. 修改research/glm32k/run_glm32k.yaml中相关配置
output_dir: './output' # path to save checkpoint/strategy
load_checkpoint: './output/transformed_checkpoint/'          # 添加预训练权重路径
auto_trans_ckpt: False
only_save_strategy: False
resume_training: False
use_parallel: True
run_mode: 'finetune'
# dataset
train_dataset: &train_dataset
  data_loader:
    type: ADGenDataLoader
    dataset_dir: "/path/to/AdvertiseGen/train.json"
    shuffle: True
    phase: "train"
    version: 3
    origin_columns: ["content", "summary"]
  tokenizer:
    type: ChatGLM3Tokenizer
    vocab_file: "/path/to/tokenizer.model"                   # 添加字典文件
  max_source_length: 30720                                   # 长序列源数据长度
  max_target_length: 2047                                    # 长序列目标数据长度
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

注意:长序列模型的训练,max_source_length和max_target_length数值较大,需要根据实际业务数据设置对应数值

  • step 2. 启动微调任务,按照以下步骤启动:

-[x] 1: 根据服务器节点数等信息,修改相应的配置。

# 以glm-6b-32k模型为例,默认配置单机8卡,如果节点数有变,需要修改相应的配置。
# 配置文件路径:./research/glm32k/run_glm32k.yaml
parallel_config:
  data_parallel: 2
  model_parallel: 1
  pipeline_stage: 4
  micro_batch_num: 8
  vocab_emb_dp: True
  gradient_aggregation_group: 4
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

-[x] 2: 执行运行脚本。

cd research
bash run_singlenode.sh \
"python glm32k/run_glm32k.py \
--config glm32k/run_glm32k.yaml \
--run_mode finetune \
--train_dataset /path/to/train.json \
--use_parallel True" \
path/to/rank_table_file [0,8] 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

六、微调性能

1、昇腾910bnpu 内存及AIcore占用:

b8f929dff04e716e9335497d8f13a70.png

2、内存占用

内存占用稳定在250G左右, 下面是运行微调和微调后的内存对比:
微调中,占用294G左右:
dd93293b4b366903a21591d815cfe41.png

微调后, 系统及其他内存占用40G左右:

18f02820c3a96caa6bb0c0d320a78c1.png

3、耗时

我们进行了一轮微调,耗时10个小时左右。

七、glm3模型推理及验证

1、修改配置文件

注意

  • 目前可以根据实际业务调整yaml文件中的seq_length参数以降低推理时延(如设置seq_length=4096,最高到4096), 需要修改默认参数值,改为4096, 默认为32768。

在启动前,请先行在配置文件run_glm32k.yaml中将processor.tokenizer.vocab_file的路径配置为实际路径;如果使用增量推理,需要在配置文件中将model.model_config.use_past值设置为True。例如:

processor:
  return_tensors: ms
  tokenizer:
    ...
    vocab_file: '/path/tokenizer.model'  # 修改为实际路径
    ...
model:
  model_config:
    ...
    use_past: True
    ...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

注意:目前长序列的增量推理所需的IFA算子还未适配,等待海思算子版本上新后再适配使用,所以use_past目前需设置为False

2、 基于generate接口的推理

  • 代码见research/glm32k/infer_generate.py
  • 启动命令:
python infer_generate.py --checkpoint_path CKPT_PATH --device_id DEVICE_ID --user_query "晚上睡不着应该怎么办"

# 参数说明
checkpoint_path: 权重文件夹路径
device_id: NPU卡号
user_query: 用户输入问题

输出结果:
output:
[gMASK]sop<|user|>
 晚上睡不着应该怎么办<|assistant|>
 晚上睡不着,可以参考下述建议:
1. 建立规律的睡眠时间表:每天在相同的时间上床和起床,有助于身体建立规律的睡眠时间表,更容易入睡。
2. 创造舒适的睡眠环境:确保睡眠环境舒适,安静,黑暗,凉爽,有助于入睡。
3. 避免刺激性物质:避免饮用咖啡因和酒精等刺激性物质,这些物质会影响睡眠。
4. 放松身心:在睡前放松身心,例如泡个热水澡,听些轻柔的音乐,读本书等,有助于入睡。
5. 避免使用电子设备:在睡前避免使用电子设备,例如手机,平板电脑等,这些设备发出的蓝光会抑制睡眠激素的分泌,影响睡眠。
6. 锻炼身体:适度的锻炼身体有助于睡眠,但避免在睡前进行剧烈运动。
如果以上方法都无法解决问题,建议咨询医生或专业睡眠专家,获得更具体的建议和治疗方案。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/613787
推荐阅读
相关标签
  

闽ICP备14008679号