diff --git a/docs/mindformers/docs/source_zh_cn/example/compare_with_mindspeed/compare_with_mindspeed.md b/docs/mindformers/docs/source_zh_cn/example/compare_with_mindspeed/compare_with_mindspeed.md new file mode 100644 index 0000000000000000000000000000000000000000..5df2c605466a03bc8813c2c117a138682fcead92 --- /dev/null +++ b/docs/mindformers/docs/source_zh_cn/example/compare_with_mindspeed/compare_with_mindspeed.md @@ -0,0 +1,255 @@ +本文介绍mindspeed-llm和mindformers两种训练框架的测试比对 + +# 1. mindspeed-llm测试流程 + +## 1.1 环境安装 + +```bash + # 使能环境变量 + source /usr/local/Ascend/ascend-toolkit/set_env.sh + source /usr/local/Ascend/nnal/atb/set_env.sh + + # 安装MindSpeed加速库 + git clone https://gitee.com/ascend/MindSpeed.git + cd MindSpeed + git checkout 2c085cc9 # checkout commit from MindSpeed core_r0.8.0 in 2025.04.01 + pip install -r requirements.txt + pip3 install -e . + cd .. + + # 准备MindSpeed-LLM及Megatron-LM源码 + git clone https://gitee.com/ascend/MindSpeed-LLM.git + cd MindSpeed-LLM + mkdir logs + mkdir model_from_hf + mkdir dataset + mkdir ckpt + cd .. + git clone https://github.com/NVIDIA/Megatron-LM.git # megatron从github下载,请确保网络能访问 + cd Megatron-LM + git checkout core_r0.8.0 + cp -r megatron ../MindSpeed-LLM/ + cd ../MindSpeed-LLM + git checkout 2.1.0 + + # 安装torch、torchvision及apex + # 安装 torch-2.1.0 + pip install torch==2.1.0 + # 安装torch_npu依赖 + pip install pyyaml + pip install setuptools==65.7.0 + # 安装torch_npu + pip3 install torch-npu==2.1.0.post8 + + # 若使用pip命令安装失败,请使用下载链接或进入PyTorch官方网站进行查询下载对应版本。 + pip install torch_npu-2.1.0*-cp38-cp38m-linux_aarch64.whl + + # 安装对应版本的torchvision + pip install torchvision==0.16.0 + + # 安装apex for Ascend 参考 https://gitee.com/ascend/apex + git clone -b master https://gitee.com/ascend/apex.git + # 进入昇腾适配的APEX源码目录,执行命令编译生成二进制安装包(支持Python3.7-3.10) + cd apex + # 容器内git clone不了可以在容器外进行,然后把build.sh中的git clone注释掉 + bash scripts/build.sh --python=3.8 + # 执行如下命令安装。 + cd apex/dist + # 在本例中为apex-0.1+ascend-cp38-cp38-linux_aarch64.whl + pip install apex-0.1_ascend-*.whl + + pip install -r requirements.txt # 安装其余依赖库 +``` + +## 1.2 权重下载及转换 + +### 1.2.1 权重准备 + +hugging_face下载Qwen2.5-1.5B模型。 + +### 1.2.2 权重转换 + +```bash +bash examples/mcore/qwen25/ckpt_convert_qwen25_hf2mcore.sh +``` + +根据需要修改脚本中的如下参数 +【--target-tensor-parallel-size】 + +指明需要切分的TP数量,默认为1 + +【--target-pipeline-parallel-size】 + +指明需要切分的PP数量,默认为1 + +【--use-mcore-models】 + +设置是否转换为Megatron-Mcore权重,若不指定,则默认转换为Megatron-Legacy权重 + +【--model-type-hf】 + +huggingface模型类别,默认为llama2,目前支持的模型见 [model_cfg.json](https://gitee.com/ascend/ModelLink/blob/master/modellink/tasks/checkpoint/model_cfg.json) + +【--tokenizer-model】 + +需要指明到具体的分词器模型文件,如 tokenizer.model、tokenizer.json、qwen.tiktoken、None等,具体取决于huggingface中词表文件的格式形式 + +【--params-dtype】 + +指定权重转换后的权重精度模式,默认为fp16,如果源格式文件为bf16,则需要对应设置为bf16,影响推理或评估结果 + +## 1.3 数据集处理 + +### 1.3.1 数据下载 + +我们使用了内部工业领域专业数据 +您可以使用自己需要的数据集,例如可以简单使用alpaca数据集。 + +### 1.3.2 预训练数据集处理方法 + +```bash +# 请按照您的真实环境修改 set_env.sh 路径 +source /usr/local/Ascend/ascend-toolkit/set_env.sh + +python ./preprocess_data.py \ + --input /path/to/dataset \ + --tokenizer-name-or-path /path/to/your/model \ + --tokenizer-type PretrainedFromHF \ + --handler-name SharegptStyleInstructionHandler \ + --output-prefix ./dataset/train \ + --workers 4 \ + --log-interval 1000 +``` + +【--input】 + +可以直接输入到数据集目录或具体文件,如果是目录,则处理全部文件, 支持 .parquet \ .csv \ .json \ .jsonl \ .txt \ .arrow 格式, 同一个文件夹下的数据格式需要保持一致 + +【--tokenizer-name-or-path】 + +指定分词器的名称或路径。这里使用的是本地路径,指向一个预训练的模型或分词器。 + +【--tokenizer-type】 + +指定分词器的类型。这里使用的是`PretrainedFromHF`,分词器是从Hugging Face预训练的。 + +【--handler-name】 +我们使用的数据集格式为shareGPT,故使用SharegptStyleInstructionHandler,如果您使用alpaca数据集,请使用AlpacaStyleInstructionHandler + +【--output-prefix】 + +指定输出文件的前缀。预处理后的数据将被保存在这个路径下,文件名将以`train`开头。 + +【--workers】 + +指定用于预处理的并发工作进程数。这里设置为4,意味着将有4个进程并行工作以提高预处理速度。 + +【--log-interval】 + +设置日志记录的间隔。这里设置为1000,意味着每处理1000条记录后,将记录一次日志信息。 + +如果正确执行,将会在./dataset下生成一些以train为前缀的idx、bin等数据集文件 + +## 1.4.大模型预训练启动 + +### 1.4.2 配置预训练参数 + +mcore分支的预训练脚本保存在 example/mcore 中各模型文件夹下:pretrain_xxx_xx.sh。本例是转换成mcore,因此使用的训练脚本为 + +./MindSpeed-LLM/examples/mcore/glm4/pretrain_glm4_9b_8k_ptd.sh + +编辑脚本进行路径配置:包括**权重保存路径**、**权重加载路径**、**词表路径**、**数据集路径** + +```yaml +# 根据实际情况配置权重保存、权重加载、词表、数据集路径 + CKPT_SAVE_DIR="./ckpt/glm-4-9b" #权重保存路径 + CKPT_LOAD_DIR="./model_weights/glm-4-9b-mcore/" #权重加载路径 + TOKENIZER_MODEL="./model_from_hf/glm-4-9b" #词表路径 + DATA_PATH="./dataset/train_text_document" #数据集路径(此处意思为数据列表,并非一般的文件夹路径) +``` + +本例为单机单卡运行,则在脚本中设置为: + +```yaml + NPUS_PER_NODE=1 + MASTER_ADDR=localhost + MASTER_PORT=6000 + NNODES=1 + NODE_RANK=0 + WORLD_SIZE=$(($GPUS_PER_NODE * $NNODES)) +``` + +启动命令: + +```bash +bash ./MindSpeed-LLM/examples/mcore/glm4/pretrain_glm4_9b_8k_ptd.sh +``` + +# 2. mindformers测试流程 + +## 2.1 环境搭建 +安装2.6.0 mindspore + +```bash +pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/2.6.0/MindSpore/unified/aarch64/mindspore-2.6.0-cp311-cp311-linux_aarch64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple +``` + +安装1.5.0 mindformers 及相关环境 + +```bash +git clone -b v1.5.0 https://gitee.com/mindspore/mindformers.git +cd mindformers +bash build.sh +``` + +## 2.2 数据转换 + +使用内部工业数据微调数据集 +您可将其替换为公共数据集alpaca + +注意,您应当将数据集里的每一行数据按如下格式处理: + +```json +{ + "type": "chatml", + "conversations": [ + { + "from": "human", + "value": "Give three tips for staying healthy." + }, + { + "from": "gpt", + "value": "1.Eat a balanced diet and make sure to include plenty of fruits and vegetables. \n2. Exercise regularly to keep your body active and strong. \n3. Get enough sleep and maintain a consistent sleep schedule." + } + ] +}, +``` + +生成MindRecord格式数据集 + +```bash +python mindformers/tools/dataset_preprocess/glm/glm_preprocess.py \ + --input_glob /path/to/dataset \ + --vocab_file /path/tokenizer.model \ + --seq_length 8192 \ + --output_file /path/alpaca-messages.mindrecord +``` + +## 2.3 启动训练 + +```bash +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 +``` + +# 3. 训练效果比对 + +性能比对: +![alt text](image.png) + +精度比对: +![alt text](image-1.png)