diff --git a/docs/mindspore/source_zh_cn/mindformers/usage/pre_training.md b/docs/mindspore/source_zh_cn/mindformers/usage/pre_training.md index 43e2f84adbd2b8cd8bc14da6af3237edc414e19d..d6aaa3765c09060c079307b75715e1810ba733cb 100644 --- a/docs/mindspore/source_zh_cn/mindformers/usage/pre_training.md +++ b/docs/mindspore/source_zh_cn/mindformers/usage/pre_training.md @@ -1,3 +1,184 @@ # 预训练 +## 概述 + +预训练是指在大规模未标注数据上训练模型,使其能够捕捉语言的广泛特性。通过预训练,模型可以学习到词汇、句法和语义等方面的知识,这些知识在下游任务中可以被微调,以实现特定任务的优化。 + +## MindFormers的预训练目标 + +MindFormers框架的预训练目标是帮助开发者快速、便捷地构建和训练基于Transformer架构的预训练模型。它通过优化的训练流程、丰富的模型库和高效的分布式训练支持,帮助用户在各种NLP任务中实现高效的模型开发。 + +## 数据集 + +### 数据集下载 + +MindFormers提供**Wiki103**作为[预训练](#预训练)数据集,**alpaca**作为[微调](#微调)数据集。 + +| 数据集名称 | 适用模型 | 适用阶段 | 下载链接 | +|:--------|:--------------------------:|:--------:|:-------------------------------------------------------------------------------:| +| Wikitext2 | llama2-7b
llama2-13b
llama2-70b | Pretrain | [Link](https://gitee.com/link?target=https%3A%2F%2Fascend-repo-modelzoo.obs.cn-east-2.myhuaweicloud.com%2FMindFormers%2Fdataset%2Fwikitext-2%2Fwikitext-2-v1.zip) | +| alpaca | llama2-7b
llama2-13b
llama2-70b | Finetune | [Link](https://github.com/tatsu-lab/stanford_alpaca/blob/main/alpaca_data.json) | + +### 数据预处理 + +- **Wiki103 数据预处理** + + 使用`research/llama3/llama_preprocess.py`对下载后的数据进行预处理,并生成Mindrecord数据。 + + ```shell + python llama_preprocess.py \ + --dataset_type wiki \ + --input_glob /{path}/wiki.train.tokens \ + --model_file /{path}/tokenizer.model \ + --seq_length 8192 \ + --output_file /{path}/wiki8192.mindrecord + + # 参数说明 + dataset_type: 预处理数据类型 + input_glob: 输入下载后wiki.train.tokens的文件路径 + model_file: 模型tokenizer.model文件路径 + seq_length: 输出数据的序列长度 + output_file: 输出文件的保存路径 + ``` +- **alpaca 数据预处理** + + 1. 执行`mindformers/tools/dataset_preprocess/llama/alpaca_converter.py`,使用fastchat工具添加prompts模板,将原始数据集转换为多轮对话格式。 + + ```shell + python alpaca_converter.py \ + --data_path /{path}/alpaca_data.json \ + --output_path /{path}/alpaca-data-conversation.json + + # 参数说明 + data_path: 输入下载的文件路径 + output_path: 输出文件的保存路径 + ``` + + 2. 执行`research/llama3/llama_preprocess.py`,生成Mindrecord数据,将带有prompt模板的数据转换为mindrecord格式。 + + ```shell + # 此工具依赖fschat工具包解析prompt模板, 请提前安装fschat >= 0.2.13 python = 3.9 + python llama_preprocess.py \ + --dataset_type qa \ + --input_glob /{path}/alpaca-data-conversation.json \ + --model_file /{path}/tokenizer.model \ + --seq_length 8192 \ + --output_file /{path}/alpaca-fastchat8192.mindrecord + + # 参数说明 + dataset_type: 预处理数据类型 + input_glob: 转换后的alpaca的文件路径 + model_file: 模型tokenizer.model文件路径 + seq_length: 输出数据的序列长度 + output_file: 输出文件的保存路径 + ``` + +> 数据处理时候注意bos,eos,pad等特殊`ids`要和配置文件中`model_config`里保持一致。 + +## 单机单卡训练 + +以下内容将以Llama2-7b为例,展示如何在单卡的配置下进行训练。 + +### 启动训练 + +``` +# 运行run_mindformer.py的入参会覆盖模型配置文件中的参数 +python run_mindformer.py --config configs/llama2/pretrain_llama2_7b.yaml --run_mode train +``` + +## 单机多卡训练 + +``` +# 1. 单机多卡快速启动方式,默认8卡启动 +bash scripts/msrun_launcher.sh "run_mindformer.py \ + --config {CONFIG_PATH} \ + --run_mode {train/finetune/eval/predict}" + +# 2. 单机多卡快速启动方式,仅设置使用卡数即可 +bash scripts/msrun_launcher.sh "run_mindformer.py \ + --config {CONFIG_PATH} \ + --run_mode {train/finetune/eval/predict}" WORKER_NUM + +# 3. 单机多卡自定义启动方式 +bash scripts/msrun_launcher.sh "run_mindformer.py \ + --config {CONFIG_PATH} \ + --run_mode {train/finetune/eval/predict}" \ + WORKER_NUM MASTER_PORT LOG_DIR JOIN CLUSTER_TIME_OUT +``` + +以下内容将以Llama2-7b为例,展示如何在单机8卡的配置下进行分布式训练。 + +### 启动训练 + +使用`msrun`命令启动训练脚本: + +```bash +bash scripts/msrun_launcher.sh "run_mindformer.py \ + --config configs/llama2/pretrain_llama2_7b.yaml \ + --train_dataset_dir /{path}/wiki4096.mindrecord \ + --use_parallel True \ + --run_mode train" 8 +``` + +## 多机多卡训练 + +多机多卡执行脚本进行分布式训练需要分别在不同节点运行脚本,并将参数MASTER\_ADDR设置为主节点的ip地址, 所有节点设置的ip地址相同,不同节点之间仅参数NODE\_RANK不同。 + +``` +# 多机多卡自定义启动方式 + bash scripts/msrun_launcher.sh "run_mindformer.py \ + --config {CONFIG_PATH} \ + --run_mode {train/finetune/eval/predict}" \ + WORKER_NUM LOCAL_WORKER MASTER_ADDR MASTER_PORT NODE_RANK LOG_DIR JOIN CLUSTER_TIME_OUT +``` + +以Llama2-13b为例,进行2机16卡的预训练。 + +### 配置文件修改 + +根据实际使用的节点数和设备数,修改配置文件`configs/llama2/pretrain_llama2_7b.yaml`: + +```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`。 + +### 启动多机多卡训练 + +分别在不同节点运行以下脚本,并将参数`MASTER_ADDR`设置为主节点的IP地址。所有节点使用相同的IP地址设置,不同节点之间仅`NODE_RANK`参数不同。 + +- 主节点(节点0)启动脚本: + +```bash +bash scripts/msrun_launcher.sh "run_mindformer.py \ + --config {CONFIG_PATH} \ + --train_dataset_dir /{path}/wiki4096.mindrecord \ + --use_parallel True \ + --run_mode {train}" \ + 16 8 {ip_addr} 8118 0 output/msrun_log False 300 +``` + +- 从节点(节点1)启动脚本,仅修改`NODE_RANK`参数: + +```bash +bash scripts/msrun_launcher.sh "run_mindformer.py \ + --config {CONFIG_PATH} \ + --train_dataset_dir /{path}/wiki4096.mindrecord \ + --use_parallel True \ + --run_mode {train}" \ + 16 8 {ip_addr} 8118 1 output/msrun_log False 300 +``` + +## 更多信息 + +更多关于不同模型的训练示例,请访问[MindFormers已支持模型库](https://gitee.com/mindspore/mindformers#/mindspore/mindformers/blob/r1.2.0/docs/model_cards/llama2.md)。 + +--- [![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_zh_cn/mindformers/usage/pre_training.md) \ No newline at end of file