昇腾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数据集链接:Longbench
  • prompt_config_file链接:prompt_config_file
  • 具体Longbench数据集介绍请参见官网地址

五、全参微调

全参微调需要多卡启动,以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_datasetdata_loader:type: ADGenDataLoaderdataset_dir: "/path/to/AdvertiseGen/train.json"shuffle: Truephase: "train"version: 3origin_columns: ["content", "summary"]tokenizer:type: ChatGLM3Tokenizervocab_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: 2model_parallel: 1pipeline_stage: 4micro_batch_num: 8vocab_emb_dp: Truegradient_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: mstokenizer:...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. 锻炼身体:适度的锻炼身体有助于睡眠,但避免在睡前进行剧烈运动。
如果以上方法都无法解决问题,建议咨询医生或专业睡眠专家,获得更具体的建议和治疗方案。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年全新靠谱的FTP替代升级解决方案

随着企业规模的扩大和业务的多元化&#xff0c;传统的TCP协议在数据传输效率上逐渐显现出局限性。TCP协议虽然以其稳定性和可靠性被广泛应用&#xff0c;但在面对大规模数据传输时&#xff0c;其性能瓶颈逐渐成为企业发展的阻碍。同时&#xff0c;基于TCP的应用协议如Telnet、F…

mysql不区分大小写配置

一、背景 在默认情况下&#xff0c;MySQL是大小写敏感的。这意味着在查询表名、列名或关键字时&#xff0c;必须精确匹配大小写。然而&#xff0c;在某些情况下&#xff0c;我们可能希望数据库忽略大小写&#xff0c;以便更方便地进行操作。 一、查看当前设置 show variables l…

Spring Boot 学习(1)——环境搭建

一只老辣鸟的自我救赎 不科普&#xff0c;简单记录学习过程。 开发环境约束&#xff1a; jdk1.8 Spring Boot 1.5.9 Spring 4.3.13 Maven 3.3.3 Intellij IDEA 2017 【脑瓜灵光的开发环境随意&#xff0c;不灵光尽量按上述约束设置。看了好些教程总…

Ros安装编译Navigation

mkdir ros_nav_ws/src -p cd ros_nav_ws/src git clone https://github.com/ros-planning/navigation.git cd .. catkin_make 编译过程中可能出现的错误 error1&#xff1a;Could NOT find SDL (missing: SDL_LIBRARY SDL_INCLUDE_DIR) solution&#xff1a;安装所缺少的依赖…

Protobuf 二进制文件学习及解析

0. 简介 protobuf也叫protocol buffer是google 的一种数据交换的格式&#xff0c;它独立于语言&#xff0c;独立于平台。google 提供了多种语言的实现&#xff1a;java、c#、c、go 和 python&#xff0c;每一种实现都包含了相应语言的编译器以及库文件。 由于它是一种二进制的…

【图论】【树】 【拓扑排序】2603. 收集树中金币

本文涉及知识点 图论 树 拓扑排序 LeetCode 2603. 收集树中金币 给你一个 n 个节点的无向无根树&#xff0c;节点编号从 0 到 n - 1 。给你整数 n 和一个长度为 n - 1 的二维整数数组 edges &#xff0c;其中 edges[i] [ai, bi] 表示树中节点 ai 和 bi 之间有一条边。再给你…

Vue 大文件切片上传实现指南包会,含【并发上传切片,断点续传,服务器合并切片,计算文件MD5,上传进度显示,秒传】等功能

Vue 大文件切片上传实现指南 背景 在Web开发中&#xff0c;文件上传是一个常见的功能需求&#xff0c;尤其是当涉及到大文件上传时&#xff0c;为了提高上传的稳定性和效率&#xff0c;文件切片上传技术便显得尤为重要。通过将大文件切分成多个小块&#xff08;切片&#xff0…

提效提速的快捷回复工具

在数字化交流日益增长的今天&#xff0c;客服工作显得尤为重要。为了提升对话质量和回复速度&#xff0c;同时减少重复劳动&#xff0c;我同事给我介绍了一款快捷回复工具&#xff0c;叫做客服宝聊天助手。我用了几天真心觉得好好用&#xff0c;今天特地分享这个软件给你们&…

【编译lombok问题】已解决:编译突然找不到符号问题-get/set找不到符号

一、场景&#xff1a;编译突然找不到符号 报错信息&#xff1a; 找不到符号 符号&#xff1a;方法getName() 二、原因&#xff1a; 没有使用lombok支持的编译器 三、解决方法&#xff1a; 打开File-Settings&#xff0c;按以下步骤进行设置&#xff1b; 修改&#xff1a;-Djp…

QuartusII联合Modelsim仿真中最好不要将tb文件设置为顶层,以避免compile错误

QuartusII联合Modelsim仿真中最好不要将tb文件设置为顶层&#xff0c;以避免compiler错误 1&#xff0c;QuartusII下的rtl文件、sim文件如下显示。2&#xff0c;将rtl文件中任一个置于顶层&#xff0c;都不会影响sim仿真输出。3&#xff0c;将tb.v文件置于顶层&#xff0c;comp…

windows无法使用hadoop报错:系统找不到路径

在windows下安装hadoop-3.1.4,进行环境变量配置后&#xff0c;打开window命令行窗口测试hadoop命令&#xff0c;报错&#xff0c;如图所示&#xff1a; 方案&#xff1a;由于JAVA_HOME路径有空格导致&#xff0c;可修改hadoop下\etc\hadoop\hadoop_env.cmd文档中set JAVA_HOME以…

VTK| VTK可视化流程+圆锥示例

要想入门vtk&#xff0c;了解vtk的可视化流程是非常有必要的。 VTK可视化流程 VTK可视化流程主要分为数据处理和渲染两个过程&#xff0c;有一张不错的可视化流程图把这个过程理解为一个舞台剧。 VTKVS运行圆锥示例 先来运行一个简单的示例代码来理解VTK运作的过程&#xff…