启动任务
概述
MindSpore Transformers提供了一键启动脚本run_mindformer.py
和分布式任务拉起脚本msrun_launcher.sh
。
run_mindformer.py
脚本用于在单卡上拉起任务,其提供了预训练、微调和推理任务的一键启动能力;msrun_launcher.sh
脚本用于在单机多卡或多机多卡上拉起分布式任务,其通过msrun工具在每张卡上拉起任务。
run_mindformer一键启动脚本
在MindSpore Transformers代码根目录下,使用Python执行run_mindformer.py
脚本拉起任务,脚本支持的参数如下。当可选参数未设置或设置为None
时,取yaml配置文件中的同名配置。
基础参数
参数 |
参数说明 |
取值说明 |
适用场景 |
---|---|---|---|
|
任务yaml配置文件的路径。 |
str,必选 |
预训练/微调/推理 |
|
设置后端执行模式。 |
int,可选, |
预训练/微调/推理 |
|
设置执行设备ID,其值必须在可用设备范围内。 |
int,可选 |
预训练/微调/推理 |
|
设置后端执行设备,MindSpore Transformers仅支持在 |
str,可选 |
预训练/微调/推理 |
|
设置模型的运行模式,可选 |
str,可选 |
预训练/微调/推理 |
|
加载的权重文件或文件夹路径,详细使用方式参考权重转换功能。 |
str,可选 |
预训练/微调/推理 |
|
是否开启并行模式。 |
bool,可选 |
预训练/微调/推理 |
|
覆盖已使用的配置中的部分设置,xxx=yyy格式的键值对将被合并到配置文件中。该参数已废弃,下个版本删除。 |
str,可选 |
预训练/微调/推理 |
|
设置保存日志、权重、切分策略等文件的路径。 |
str,可选 |
预训练/微调/推理 |
|
外挂代码所在目录的绝对路径。比如research目录下的模型目录。 |
str,可选 |
预训练/微调/推理 |
|
远程保存url,所有输出文件都将传输并存储在此处。该参数已废弃,下个版本删除。 |
str,可选 |
预训练/微调/推理 |
|
设置全局种子,详情可参考mindspore.set_seed。 |
int,可选 |
预训练/微调/推理 |
|
Hugging Face AutoTokenizer是否信任远程代码。 |
bool,可选 |
预训练/微调/推理 |
权重切分
参数 |
参数说明 |
取值说明 |
适用场景 |
---|---|---|---|
|
权重的策略文件路径。 |
str,可选 |
预训练/微调/推理 |
|
是否开启在线权重自动转换功能,详情可参考权重转换功能。 |
bool,可选 |
预训练/微调/推理 |
|
负责权重转换的进程数。 |
int,可选 |
预训练/微调/推理 |
|
是否仅保存切分策略文件。 |
bool,可选,为 |
预训练/微调/推理 |
|
要加载的分布式策略文件的路径。该参数已废弃,下个版本删除。 |
str,可选 |
预训练/微调/推理 |
训练
参数 |
参数说明 |
取值说明 |
适用场景 |
---|---|---|---|
|
是否开启边训练边评估功能。该参数已废弃,下个版本删除。 |
bool,可选 |
预训练/微调 |
|
评估的数据集目录。该参数已废弃,下个版本删除。 |
bool,可选 |
预训练/微调 |
|
预训练/微调的数据集目录。 |
str,可选 |
预训练/微调 |
|
是否开启断点续训功能,详情可参考断点续训功能。 |
bool,可选 |
预训练/微调 |
|
是否使用profile分析。该参数已废弃,下个版本删除。 |
bool,可选 |
预训练/微调 |
|
训练轮次。 |
int,可选 |
预训练/微调 |
|
批处理数据的样本数。 |
int,可选 |
预训练/微调 |
|
梯度累积步数。 |
int,可选 |
预训练/微调 |
|
是否使用下沉模式。该参数已废弃,下个版本删除。 |
bool,可选 |
预训练/微调 |
|
使用的数据集样本数量。 |
int,可选 |
预训练/微调 |
推理
参数 |
参数说明 |
取值说明 |
适用场景 |
---|---|---|---|
|
推理的输入数据。 |
str,可选,可以是推理的输入(单batch推理)或包含多行文本的txt文件路径(多batch推理)。 |
推理 |
|
模型推理输入对应模态。该参数已废弃,下个版本删除。 |
str,可选 |
推理 |
|
推理的LoRA ID。该参数已废弃,下个版本删除。 |
str,可选 |
推理 |
|
多batch推理的batch_size大小。 |
int,可选 |
推理 |
|
推理选择token时是否使用随机采样。 |
int,可选, |
推理 |
分布式任务拉起脚本
分布式任务拉起脚本msrun_launcher.sh
位于scripts/
目录下,可根据输入的参数自动使用msrun命令启动分布式多进程任务。该脚本有如下几种使用方式:
默认使用单机8卡运行:
bash msrun_launcher.sh [EXECUTE_ORDER]
在单机上仅指定卡数快速运行:
bash msrun_launcher.sh [EXECUTE_ORDER] [WORKER_NUM]
单机自定义运行:
bash msrun_launcher.sh [EXECUTE_ORDER] [WORKER_NUM] [MASTER_PORT] [LOG_DIR] [JOIN] [CLUSTER_TIME_OUT]
多机自定义运行:
bash msrun_launcher.sh [EXECUTE_ORDER] [WORKER_NUM] [LOCAL_WORKER] [MASTER_ADDR] [MASTER_PORT] [NODE_RANK] [LOG_DIR] [JOIN] [CLUSTER_TIME_OUT]
脚本的参数说明如下:
参数 |
参数说明 |
取值说明 |
---|---|---|
|
要分布式执行的Python脚本命令参数。 |
str,必选,设置为包含要执行的Python脚本和脚本参数的字符串 |
|
参与分布式任务的Worker进程总数。 |
int,可选,默认值: |
|
当前节点上拉起的Worker进程数。 |
int,可选,默认值: |
|
指定Scheduler的IP地址或者主机名。 |
str,可选,默认值: |
|
指定Scheduler绑定端口号。 |
int,可选,默认值: |
|
当前节点的索引。 |
int,可选,默认值: |
|
Worker以及Scheduler日志输出路径。 |
str,可选,默认值: |
|
msrun是否等待Worker以及Scheduler退出。 |
bool,可选,默认值: |
|
集群组网超时时间,单位为秒。 |
int,可选,默认值: |
任务启动教程
下面以Qwen2.5-0.5B微调为例,进行单卡、单机和多机任务使用方式说明。
单卡
在MindSpore Transformers代码根目录下执行Python脚本,进行单卡微调。命令中的路径需替换为真实路径。
python run_mindformer.py \
--register_path research/qwen2_5 \
--config research/qwen2_5/finetune_qwen2_5_0_5b_8k.yaml \
--use_parallel False \
--run_mode finetune \
--train_dataset_dir ./path/alpaca-data.mindrecord
单机
在MindSpore Transformers代码根目录下执行msrun启动脚本,进行单机微调。命令中的路径需替换为真实路径。
bash scripts/msrun_launcher.sh "run_mindformer.py \
--register_path research/qwen2_5 \
--config research/qwen2_5/finetune_qwen2_5_0_5b_8k.yaml \
--run_mode finetune \
--train_dataset_dir ./path/alpaca-data.mindrecord "
多机
以Qwen2.5-0.5B为例,进行2机16卡微调。
根据使用节点数等信息,修改相应的配置文件
research/qwen2_5/finetune_qwen2_5_0_5b_8k.yaml
:parallel_config: data_parallel: 2 model_parallel: 4 pipeline_stage: 2 micro_batch_num: 16 vocab_emb_dp: True gradient_aggregation_group: 4
如使用节点数和卡数改变需要修改
data_parallel
、model_parallel
、pipeline_stage
满足实际运行的卡数device_num=data_parallel×model_parallel×pipeline_stage
,同时满足micro_batch_num >= pipeline_stage
。执行msrun启动脚本:
多机多卡执行脚本进行分布式任务需要分别在不同节点运行脚本,并将参数
MASTER_ADDR
设置为主节点的ip地址,所有节点设置的ip地址相同,不同节点之间仅参数NODE_RANK
不同,各个参数位置含义参见msrun快速启动。# 节点0作为主节点, {ip_addr}处填写节点0实际ip, 总共16卡且每个节点8卡 bash scripts/msrun_launcher.sh "run_mindformer.py \ --register_path research/qwen2_5 \ --config research/qwen2_5/finetune_qwen2_5_0_5b_8k.yaml \ --train_dataset_dir /{path}/wiki4096.mindrecord \ --run_mode finetune" \ 16 8 {ip_addr} 8118 0 output/msrun_log False 300 # 节点1,{ip_addr}处填写节点0实际ip,节点0与节点1启动命令仅参数NODE_RANK不同 bash scripts/msrun_launcher.sh "run_mindformer.py \ --register_path research/qwen2_5 \ --config research/qwen2_5/finetune_qwen2_5_0_5b_8k.yaml \ --train_dataset_dir /{path}/wiki4096.mindrecord \ --run_mode finetune" \ 16 8 {ip_addr} 8118 1 output/msrun_log False 300