Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Docs] AndSonder Add 可视化静态图自动并行时序图使用文档 #53

Merged
merged 6 commits into from
Dec 18, 2023

Conversation

AndSonder
Copy link
Collaborator

No description provided.

…ade/UsageDocs/1-visualize-flow-parallel-timing-diagram-in-static-graph-mode.md
Copy link
Contributor

@From00 From00 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@@ -0,0 +1,119 @@
# 可视化静态图自动并行时序图工具使用手册

由于当下大模型的训练时间较长,分布式训练时序图的可视化对于调试和分析模型的训练过程非常重要。当下没有工具能够直接给出各个GPU设备上不同Job的运行区间,本可视化工具用来实现这个功能。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

背景描述需要改下:

  1. 这个工具展现的是流水并行的时序图,而不是分布式训练的时序图。
  2. 由于当下大模型的训练时间较长,分布式训练时序图的可视化对于调试和分析模型的训练过程非常重要。这句话因果逻辑并不明显,在小模型时代,profiler也一样是非常重要的性能分析手段。
  3. 当下没有工具能够直接给出各个GPU设备上不同Job的运行区间,这个说法也是很容易让人产生困惑的。大多数人习惯使用nsight做GPU性能profiler,看到这里的第一反应会是nsight就是这种工具,所以这里建议描述清楚为什么不使用nsight而需要新开发一套工具,新开发的工具相比nsight有哪些优势?


## 1. 生成时序图数据

本工具将可视化功能集成到了命令行参数中,以下以 PaddleNLP 中 LLama 训练脚本为例:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这个工具是一个通用的工具,不是只给LLama用的,文档面向的也是想用这个工具分析自己性能的用户,而不是在使用PaddleNLP跑LLama模型的用户,所以应该着重介绍通过Paddle框架如何调用这个工具,而不是在PaddleNLP中如何调用。
当然,在介绍如何基于Paddle调用的基础上,可以再简单介绍下PaddleNLP的LLama模型通过命令行的方式封装了更易用的接口。

然后在任意一台机器上运行可视化脚本并指定 `--log_dir` 参数为 `log_dir` 目录以及开启 `--multi_machine` 参数即可。

```bash
python python/paddle/distributed/auto_parallel/static/profiler_helper_static.py --devices 0,1 --log_dir /home/workspace/PaddleNLP/llm/llama/output/llama_7b_pp2_mp4_st_log/multi_machine_logs --multi_machine
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这个工具是面向流水并行场景,主要关注流水并行子图的实际编排和调度状况,在对子图进行分析后,下一步更细粒度的问题分析仍然需要通过nsight进行。在文档建议说明下使用场景和一般流程。

@AndSonder AndSonder requested a review from From00 December 8, 2023 07:19
@@ -0,0 +1,164 @@
# 可视化静态图流水并行时序图工具使用手册

飞桨框架提供了流水并行时序图可视化工具,可以对模型运行过程中流水并行信息进行收集、统计和展示。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
飞桨框架提供了流水并行时序图可视化工具,可以对模型运行过程中流水并行信息进行收集、统计和展示。
飞桨框架提供了流水并行时序图可视化工具,可以对模型运行过程中流水并行子图的调度信息进行收集、统计和展示。

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done


飞桨框架提供了流水并行时序图可视化工具,可以对模型运行过程中流水并行信息进行收集、统计和展示。

虽然当下已经存在GPU性能profiler工具如nsight,但当前尚未有一款工具直接提供了在不同GPU设备上执行的各个任务(Job)的精准运行时间区间。nsight等工具是在cpu上打断点,但是由于GPU程序的异步性,cpu端的断点往往无法精准的统计GPU任务的运行区间。
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

虽然在GPU设备上可以使用Nsight工具对模型进行性能分析和优化,但在分布式流水并行场景下Nsight工具存在以下不足:

  1. 由于GPU程序的异步运行特性,在CPU端针对流水并行子图添加的NVTX标记无法直接与GPU端实际的算子执行区间相对应。在分析流水并行任务时,往往需要从一长串的kernel执行中人工找出每个流水子图的起始和终止算子,才能还原模型实际的流水并行情况。
  2. 流水并行任务往往跨多个机器执行,完整的模型被切分成多个子图,分配给多台机器运行。nsight工具只能单独对每台机器上的调度信息进行采集和展现,无法集中呈现多机之间流水并行的调度全貌。

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

PaddleNLP下,本工具将可视化功能集成到了命令行参数中,以下以 PaddleNLP 中 LLama 训练脚本为例:

```bash
task_name="llama_7b_pp2_mp4_st"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这个脚本启动命令是内部实验使用的,对外建议直接基于PaddleNLP仓库里向用户推荐的运行方式去演示如何开启profiler。

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PaddleNLP llama 的 readme 里面目前只有推荐的动态图启动命令,我仿造readme补充了一些使用前的准备

python -u -m paddle.distributed.launch \
--gpus "0,1,2,3" \
--log_dir "output/$task_name""_log" \
run_pretrain_auto.py \
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

现在PaddleNLP上这个脚本位置更新了,需要改成auto_parallel/run_pretrain_auto.py

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Copy link
Contributor

@From00 From00 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@From00 From00 merged commit 71fca6a into PFCCLab:main Dec 18, 2023
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants