From fb08733d9008306d7831bf0a5c0aff281dbff148 Mon Sep 17 00:00:00 2001 From: yuxing <2818499974@qq.com> Date: Tue, 1 Jul 2025 17:19:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9tinker=20readme=E2=80=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- profiler/msprof_analyze/tinker/ReadMe.md | 113 ++++++------------ .../tinker/profiler/gen_model_structure.py | 2 +- 2 files changed, 39 insertions(+), 76 deletions(-) diff --git a/profiler/msprof_analyze/tinker/ReadMe.md b/profiler/msprof_analyze/tinker/ReadMe.md index 6222590222d..fb60d9d9e3e 100644 --- a/profiler/msprof_analyze/tinker/ReadMe.md +++ b/profiler/msprof_analyze/tinker/ReadMe.md @@ -11,17 +11,11 @@ Tinker大模型并行策略自动寻优系统(后称Tinker),根据提供 1. 配置训练框架相关环境:请确保使用当前环境已安装/配置`CANN套件`、`训练框架依赖库`、`megatron`、`mindspeed加速库`等依赖(Tinker运行需求训练框架能力); - | 软件及版本 | ModelLink 1.0.RC3 (1.2) | ModelLink 1.0.RC2 (1.1) | ModelLink 1.0.RC1 (1.0) | - |-----------|-------------------------|-------------------------|-------------------------| - | Python | 3.8 | 3.8 | 3.8 | - | driver | Ascend HDK 24.1.RC3 | Ascend HDK 24.1.RC2 | Ascend HDK 24.1.RC1 | - | firmware | Ascend HDK 24.1.RC3 | Ascend HDK 24.1.RC2 | Ascend HDK 24.1.RC1 | - | CANN | CANN 8.0.RC3 | CANN 8.0.RC2 | CANN 8.0.RC1 | - | torch | 2.1.0、2.2.0 | 2.1.0、2.2.0 | 2.1.0 | - | torch_npu | release v6.0.RC3 | release v6.0.RC2 | release v6.0.RC1 | - | mindspeed | git checkout 4ea42a23 | git checkout 2b0edd | git checkout 224ae35 | - - 其他依赖安装步骤请参考训练框架readme + | 软件及版本 | ModelLink 1.0.RC3 (1.2) | ModelLink 1.0.RC2 (1.1) | ModelLink 1.0.RC1 (1.0) | Modellink 1.0.0 (MindSpeed-LLM 1.0.0) | Modellink 2.0.0 (MindSpeed-LLM 2.0.0) | + |-----------|-------------------------|-------------------------|-------------------------|---------------------------------------|---------------------------------------| + | mindspeed | git checkout 4ea42a23 | git checkout 2b0edd | git checkout 224ae35 | git checkout 969686ff | git checkout 2.0.0_core_r0.8.0 | + + python, driver, firmware, CANN, torch, torch_npu以及其他依赖安装步骤请参考训练框架(MindSpeed-LLM) readme 2. 准备`待优化训练脚本`:配置待优化的`.sh`训练脚本,特别是词表文件(TOKENIZER_PATH或TOKENIZER_MODEL)和数据文件(DATA_PATH)路径配置(Tinker寻优时需要对齐用户实际训练时的模型(训练配置)); @@ -42,55 +36,56 @@ Tinker大模型并行策略自动寻优系统(后称Tinker),根据提供 【命令示例】请修改入参后运行 ```shell -python /xxx/tinker/tinker_auto_parallel.py --mode all --config_path /xxx/tinker/parameter_config.json --model_name qwen15 --model_size 7b -sh ./pretrain_qwen15_7b_ptd.sh -v 1.1 -gbs 32 -nodes 1 -n 8 -mem 57000 --cpus 10 +python /xxx/tinker/tinker_auto_parallel.py --mode all --config_path /xxx/tinker/parameter_config.json +python /xxx/tinker/tinker_auto_parallel.py --mode all --pretrain_script_path /xxx/xxx.sh --output_dir /xxx/results ... ``` -【必需参数】 - `--mode`:位置参数,推荐使用一键运行(all)功能,此外支持性能测量(profile),策略寻优(search),模拟仿真(simulate)三种模式 -- `--config`:位置参数,用于指定配置文件路径,默认配置文件位于tinker/parameter_config.json +- 默认全量参数位于 /xxx/tinker/utils/constant.py +- `--config_path`:(可选) 位置参数,用于指定配置文件路径,默认配置文件位于/xxx/tinker/parameter_config.json。使用该参数会覆盖原始路径/xxx/tinker/utils/constant.py。客户可以在config_path里调整参数。 - `--is_full_tune`:布尔值,标记是否为全参微调任务,默认为False,程序会通过脚本路径中关键字`tune` `full`检测,自动赋值,用户无需感知 -【profile模式参数】 +以下三种模式参数可以在config_path里做修改也可以直接加入命令行 +【profile模式参数】 - `--model_name`: 位置参数,用于标识模型名称 - `--model_size`: 位置参数,用于标识模型尺寸 -- `-sh`: 指定`待优化脚本` -- `-v`: 指定使用的ModelLink框架版本,可选`1.2` `1.1` `1.0` `1.0.0`分别对应`1.0.RC3` `1.0.RC2` `1.0.RC1` `1.0.0`(可选,默认值1.1) -- `--save_path`: 指定采集数据存放路径(可选,默认为`./profiled_data`) -- `--prof_tp`: 指定要采集profiling数据的TP值(可选,默认全部TP) -- `--prof_sp`: 指定要采集profiling数据的SP值(可选,默认全部SP) -- `--max_mbs`: 指定最大micro batch size(可选,默认值65536) -- `--task_id`: 指定profiling数据保存路径的自定义后缀(可选,默认为空'') +- `--pretrain_script_path`: 指定`待优化脚本` +- `--version`: 指定使用的ModelLink框架版本,可选`1.2` `1.1` `1.0` `1.0.0` `2.0.0`分别对应`1.0.RC3` `1.0.RC2` `1.0.RC1` `1.0.0` `2.0.0`(可选,默认值1.1) - `--max_npu`: 指定最大npu数(可选,默认值8) +运行后,Tinker会在`./profiled_data`下生成形如`profiled_data_xxx`的测量数据文件夹,内含若干`.csv`文件以及运行日志 + 【search模式参数】 -- `-profiled`: 指定性能数据所在路径,也可以只传入文件夹名称,Tinker会在`./profiled_data`路径下寻找该文件夹(一键运行模式时不需要该参数) -- `-gbs` `-nodes` `-n`: 分别指定数据批尺寸、节点数量、单节点计算卡数 -- `-mem`: 指定内存上限(单位MB,仅算子内存占用,64G内存推荐设定57000,性能摸高时可设定60000;32G内存推荐设定25000,性能摸高时可设定27000) -- `-cpus`: 指定多进程加速计算时使用的进程数(可选,默认值5) +- `--profiled_data_path`: 指定性能数据所在路径,也可以只传入文件夹名称,Tinker会在`./profiled_data`路径下寻找该文件夹(一键运行模式时不需要该参数) +- `--global_batch_size` `--num_nodes` `--num_npus_per_node`: 分别指定数据批尺寸、节点数量、单节点计算卡数 +- `--memory_limit`: 指定内存上限(单位MB,仅算子内存占用,64G内存推荐设定57000,性能摸高时可设定60000;32G内存推荐设定25000,性能摸高时可设定27000) +- `--cpus`: 指定多进程加速计算时使用的进程数(可选,默认值5) - `--output_dir`: 指定输出结果路径(可选,默认为`./results`) +运行完成后,Tinker会在results文件夹中生成类似`qwen15-7b-gbs32-56000-1nodes8npus-2024-11-18-01-50-38`的文件夹,其中`.log`为运行日志,`config`文件夹存放命令行参数结果。 + 【simulate模式参数】 -- `-profiled`: 指定性能数据所在路径,也可以只传入文件夹名称,Tinker会在`./profiled_data`路径下寻找该文件 -- `-gbs` `-nodes` `-n`: 分别指定数据尺寸、节点数量、单节点计算卡数 +- `--profiled_data_path`: 指定性能数据所在路径,也可以只传入文件夹名称,Tinker会在`./profiled_data`路径下寻找该文件 +- `--global_batch_size` `--num_nodes` `--num_npus_per_node`: 分别指定数据尺寸、节点数量、单节点计算卡数 - `--simu_tp`: 指定tp值(可选,默认值1) - `--simu_pp`: 指定pp值(可选,默认值1) - `--simu_ep`: 指定ep值(可选,默认值1) - `--simu_sp`: 指定sp值(可选,默认值0) - `--zero`: 指定ZeRO模式(0关或1开) -- `-mbs`: 指定micro batch size +- `--micro_batch_size`: 指定micro batch size - `--num_layer_list`: 模型分层列表,例如4,4,4,4 - `--recompute`: 是否开启重计算(0关或1开) -- `-d`: 是否展示详细开销信息 +- `--detail`: 是否展示详细开销信息 【注意】 -1. mode、config以外的其它参数均为tinker工具使能的相关运行参数,手动指定后会覆盖config.json中的默认参数 +1. mode、config以外的其它参数均为tinker工具使能的相关运行参数,手动指定后会覆盖parameter_config.json中的默认参数 -2. 使能tinker工具时可选择在命令中指定相关参数,也可以选择直接将参数写入config.json中并指定为config参数对应的配置文件 +2. 使能tinker工具时可选择在命令中指定相关参数,也可以选择直接将参数写入parameter_config.json中并指定为config参数对应的配置文件 3. 一键运行模式需要profile模式参数和search模式参数,其余模式只需要对应参数 @@ -105,21 +100,16 @@ python /xxx/tinker/tinker_auto_parallel.py --mode all --config_path /xxx/tinker/ "model_size": null, "pretrain_script_path": null, "version": "1.1", - "save_path": "./profiled_data", - "prof_tp": null, - "prof_sp": null, - "max_mbs": 65536, - "task_id": "", "max_npu": 8 }, "search": { "profiled_data_path": null, "global_batch_size": null, "num_nodes": null, - "num_npus_per_node": null, + "num_npus_per_node": 8, "cpus": 5, "memory_limit": 57000, - "output_dir": null, + "output_dir": "./results", "pretrain_script_path_search": null }, "simulate": { @@ -127,7 +117,7 @@ python /xxx/tinker/tinker_auto_parallel.py --mode all --config_path /xxx/tinker/ "num_layers": null, "global_batch_size": null, "num_nodes": null, - "num_npus_per_node": null, + "num_npus_per_node": 8, "simu_tp": 1, "simu_pp": 1, "simu_ep": 1, @@ -139,46 +129,14 @@ python /xxx/tinker/tinker_auto_parallel.py --mode all --config_path /xxx/tinker/ } } ``` -# 附录 - -## 性能测量 - -【命令示例】 - -```shell -python /xxx/tinker/tinker_auto_parallel.py --mode profile --config_path /xxx/tinker/parameter_config.json --model_name qwen15 --model_size 7b -sh ./pretrain_qwen15_7b_ptd.sh -v 1.1 -``` - -运行后,Tinker会在`./profiled_data`下生成形如`profiled_data_xxx`的测量数据文件夹,内含若干`.csv`文件以及运行日志 - -## 策略寻优 - -【命令示例】请修改入参后运行 - -```shell -python /xxx/tinker/tinker_auto_parallel.py --mode search --config_path /xxx/tinker/parameter_config.json -profiled profiled-data-qwen15-7b-241026-165956 -gbs 32 -nodes 1 -n 8 -mem 57000 --cpus 10 -``` - -运行完成后,Tinker会在results文件夹中生成类似`qwen15-7b-gbs32-56000-1nodes8npus-2024-11-18-01-50-38`的文件夹,其中`.log`为运行日志,`config`文件夹存放命令行参数结果。 - - -## 仿真模式 - - -【命令示例】请修改入参后运行 - -```shell -python /xxx/tinker/tinker_auto_parallel.py --mode simulate --config_path /xxx/tinker/parameter_config.json -profiled profiled-data-qwen15-7b-241026-165956 --num_nodes 1 --num_npus_per_node 8 --simu_tp 2 --simu_pp 4 --simu_sp 1 --zero 0 -mbs 4 --num_layer_list 8,8,8,4 --recompute 1 --global_batch_size 64 -``` - -## FAQ +# FAQ 1. 性能测量中Tinker对训练脚本依赖的说明 Tinker测量数据时会处理、储存指定的训练脚本并部分运行。请确保正确填写`TOKENIZER_PATH`,`DATA_PATH`(可参考ModelLink ReadMe填写)。Tinker在处理脚本时,会删除torchrun逻辑、并行策略、预训练权重存取相关命令行参数,然后将其他模型、训练相关参数存放于`GPT_ARGS`中。具体剔除的参数包括: ``` - --tensor-model-parallel-size 2 - --pipeline-model-parallel-size 2 + --tensor-model-parallel-size + --pipeline-model-parallel-size --sequence-parallel --context-parallel-size --num-layers-per-virtual-pipeline-stage @@ -188,6 +146,11 @@ python /xxx/tinker/tinker_auto_parallel.py --mode simulate --config_path /xxx/ti --num-layer-list --save --load + --context-parallel-algo + --ulysses-degree-in-cp + --cp-attention-mask-type + --use-cp-send-recv-overlap + --kv-head-repeat-before-uly-alltoall ``` 2. 策略寻优中设定内存上限`-mem`推荐值的解释:当前推荐值为经验值。Tinker仅预测torch算子占用内存开销,因此设定`-mem`时需注意预留CANN、HCCL等组件的内存开销,并避免极端内存使用带来的反复内存搬移带来的性能降低。 diff --git a/profiler/msprof_analyze/tinker/profiler/gen_model_structure.py b/profiler/msprof_analyze/tinker/profiler/gen_model_structure.py index 67eeda9859f..7110c2dd8a2 100644 --- a/profiler/msprof_analyze/tinker/profiler/gen_model_structure.py +++ b/profiler/msprof_analyze/tinker/profiler/gen_model_structure.py @@ -35,7 +35,7 @@ DEL_PARAM_IN_GPT_ARGS = [ '--context-parallel-size ', '--num-layers-per-virtual-pipeline-stage ', '--use-distributed-optimizer ', '--overlap-param-gather ', '--num-layer-list ', '--load ', '--save ', '--recompute-granularity ', - '--recompute-method ', '--recompute-num-layers ', '--context-parallel-size ', '--context-parallel-algo ', + '--recompute-method ', '--recompute-num-layers ', '--context-parallel-algo ', '--ulysses-degree-in-cp ', '--cp-attention-mask-type ', '--use-cp-send-recv-overlap ', '--kv-head-repeat-before-uly-alltoall ' ] -- Gitee