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

模型介绍

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)"

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"
}

三、权重下载

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

下载链接:

权重: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 ../..

四、数据集处理

将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

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

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
# 参数说明
INPUT_DATA_PATH: 原始longbench数据所处的文件夹路径
OUTPUT_PATH:转换格式后的数据存储路径
PROMPT_PATH:longbench中不同数据对应的prompt

注意

五、全参微调

全参微调需要多卡启动,以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                                    # 长序列目标数据长度

注意:长序列模型的训练,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

-[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、昇腾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
    ...

注意:目前长序列的增量推理所需的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. 锻炼身体:适度的锻炼身体有助于睡眠,但避免在睡前进行剧烈运动。
如果以上方法都无法解决问题,建议咨询医生或专业睡眠专家,获得更具体的建议和治疗方案。

  • 18
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
将大模型glm3部署到笔记本本地CPU可能会面临一些挑战。首先,大模型意味着它的大小和复杂度较大,在本地的笔记本CPU上可能无法完全支持。因此,在部署之前,我们需要确保笔记本的处理能力和内存足以支持该模型的运行。 在部署大模型glm3之前,我们还需要提前进行一些准备工作。首先,我们需要安装和配置适当的软件环境,例如R或Python的科学计算库。其次,我们需要下载并导入所需的数据集和训练好的模型参数。 在将大模型glm3部署到笔记本本地CPU上时,我们需要注意以下几点: 1. 内存管理:由于大模型的复杂性和大小,可能会占用较大的内存空间。因此,我们需要注意内存的管理,确保足够的内存可用,并及时释放不需要的内存。 2. CPU资源分配:大模型的训练和推断过程可能会占用大量的CPU资源。在部署之前,我们可以通过限制其他应用程序的资源使用来提供更多的CPU资源给模型运行。 3. 模型优化:为了在本地CPU上更高效地运行大模型glm3,我们可以考虑一些模型优化策略,例如模型压缩、并行计算等。这些策略可以帮助减少模型的大小和计算复杂度,提高模型的性能。 4. 计算效率:大模型的训练和推断过程需要大量的计算资源。在部署之前,我们可以尝试使用更高效的算法或技术来减少计算的时间和资源消耗。 总结而言,将大模型glm3部署到笔记本本地CPU需要我们考虑资源管理、模型优化和计算效率等方面。在合理利用资源和采用适当的优化策略下,我们可以在本地CPU上成功部署和运行大模型glm3。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值