From 6193f6b5aa1fe15f367cf13e58b1bf4fd7fba506 Mon Sep 17 00:00:00 2001 From: Sonder <55493212+AndSonder@users.noreply.github.com> Date: Wed, 8 Nov 2023 03:19:12 -0600 Subject: [PATCH] [WeeklyReport] AndSonder 2023.10.25~2023.11.8 (#52) * add weekly report * update * update * Add memtor comments --------- Co-authored-by: chenruibiao --- .../[WeeklyReport]2023.10.25~2023.11.8.md | 109 ++++++++++++++++++ ...5f4151a8169ece30a7cffc08bd18ba8de84145.png | Bin 0 -> 47879 bytes 2 files changed, 109 insertions(+) create mode 100644 WeeklyReports/10_AndSonder/[WeeklyReport]2023.10.25~2023.11.8.md create mode 100644 WeeklyReports/10_AndSonder/images/60c8cc0153930143cf308972005f4151a8169ece30a7cffc08bd18ba8de84145.png diff --git a/WeeklyReports/10_AndSonder/[WeeklyReport]2023.10.25~2023.11.8.md b/WeeklyReports/10_AndSonder/[WeeklyReport]2023.10.25~2023.11.8.md new file mode 100644 index 00000000..d79367d2 --- /dev/null +++ b/WeeklyReports/10_AndSonder/[WeeklyReport]2023.10.25~2023.11.8.md @@ -0,0 +1,109 @@ +### 姓名 + +卢畅 + +### 实习项目 + +静态图半自动并行执行架构升级 + +### 本周工作 + +当下没有工具能够直接给出各个GPU设备上不同Job的运行区间,因此我们需要设计一个可视化工具来实现这个功能。 + +本周的主要工作依然和可视化工具有关,主要工作内容如下: + +1. **添加用命令行控制可视化工具相关逻辑** + +为了方便用户使用,我们需要添加一个命令行参数,用于控制可视化工具的开关。我们将其命名为 `Distributed.pipeline.auto_parallel_profiler` ,默认为 `False` ,当用户将其设置为 `True` 时,可视化工具将会被启用。使用实例代码如下: + +```bash +nsys profile --stats=true -t cuda,nvtx -o 1.3B_st --capture-range=cudaProfilerApi --force-overwrite true \ +python -m paddle.distributed.launch --log_dir $log_dir --devices "0,1,2,3" \ + ./tools/auto.py \ + -c ./ppfleetx/configs/nlp/gpt/auto/pretrain_gpt_1.3B_dp8.yaml \ + ... + -o Distributed.pipeline.auto_parallel_profiler=1 \ + ... + -o Profiler_auto.nvprof_start=0 \ + -o Profiler_auto.nvprof_end=5 \ +``` + +其中 `Profiler_auto.nvprof_start` 和 `Profiler_auto.nvprof_end` 用于控制可视化工具的起始和结束时间,单位为分钟。在上面的例子中,可视化工具将会在第0分钟开始,第5分钟结束。这样的设计方案符合之前nsys用户的使用习惯。 + +2. **为可视化工具添加Step行** + +在可视化工具中,添加训练部署的Step行,用于标记训练的阶段。该方案的实现思路为,利用原有Paddle nsight相关代码在每个Step开始和结束时候将时间信息打印出来,然后利用python脚本将其解析出来,最后将其添加到可视化工具中。 + + +```c++ +// paddle/fluid/platform/device/gpu/cuda/cuda_profiler.cc + ... + eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII; + eventAttrib.message.ascii = name.c_str(); + + if (FLAGS_auto_parallel_profiler) { + struct timeval time_now {}; + gettimeofday(&time_now, nullptr); + double push_time = (time_now.tv_sec * 1000) + (time_now.tv_usec / 1000.0); + VLOG(0) << "NVTX range push: " << name + << ", time: " << std::to_string(push_time); + } + dynload::nvtxRangePushEx(&eventAttrib); +} +``` + +由于在C++端无法直接获得Step的信息,因此我们需要在python端添加相关代码,具体实现代码如下: + +```python +def process_step_log(log_data, device_id): + start_pattern = r'.*?NVTX range push: (\d+), time: (\d+.\d+)' + end_pattern = r'.*?NVTX range pop, time: (\d+.\d+)' + start_matches = re.findall(start_pattern, log_data) + end_matches = re.findall(end_pattern, log_data) + + step_info = [] + for start_match, stop_match in zip(start_matches, end_matches): + step_id, start_time = start_match + stop_time = stop_match + if int(step_id) >= len(step_info): + for _ in range(int(step_id) - len(step_info) + 1): + step_info.append([float('inf'), 0]) + step_info[int(step_id)] = [start_time, stop_time] + return step_info +``` + +添加Step行后的可视化效果如下: + +![picture 1](images/60c8cc0153930143cf308972005f4151a8169ece30a7cffc08bd18ba8de84145.png) + + +3. **修复Job开始时间和结束时间统计不准确的逻辑bug** + +在本周的工作中,我发现了一些代码中的逻辑bug,主要为使用之前使用的 cpu 时间加 cuda event 之间的差值来计算 cuda 时间,这样的计算方式是不准确的,因为每个任务开始的时间准确来说应该是第一个计算算子开始的时间,而不是 `RunImpl` 开始的时间。同理最后一个任务结束的时间也应该是最后一个算子结束的时间,而不是 `RunImpl` 结束的时间。因此我们需要修改代码,将 `RunImpl` 开始和结束的时间改为第一个算子开始和最后一个算子结束的时间。 + +此外我使用了`cudaStreamAddCallback`替换了之前的`cudaEventRecord`。在回调函数中统计了每个Job的开始和结束时间,这样的实现方式更加准确。因为`cudaStreamAddCallback`所添加的回调函数是插入到stream的任务队列中的,当callback之前的任务都执行完毕后,才会执行callback函数,因此我们可以在callback函数中统计Job的开始和结束时间。 + +4. **比对可视化结果与nsight输出的结果** + +为了验证可视化工具的正确性,我将可视化工具的输出结果与nsight的输出结果进行了比对,发现可视化工具的输出结果和nsight的输出结果一致,因此可视化工具的正确性得到了验证。 + +5. **完善使用文档** + +为了方便用户使用,我写了一个使用文档,用于指导用户如何使用可视化工具。 + +6. **确定了多机可视化方案** + +我和导师讨论了多机可视化的方案,最终确定了为可视化脚本添加多机的选项。在开启多机选项时,用户需要按照要求将不同机器上的可视化脚本的输出文件合并到一个文件夹中,然后运行脚本,脚本会自动将不同机器上的log信息合并到一起并生成可视化结果。 + +### 下周工作 + +1、编码实现多机可视化方案 + +2、完善可视化工具的使用文档 + +3、适配新IR + + +### 导师点评 +流水并行调度序列的可视化对大模型性能优化至关重要,卢畅本周将可视化工具做了具体落地实现,在测试遇到问题时能独立思考并寻找解决方案,展现出了较强的解决问题能力。 +一个优秀的项目,需要充分考虑功能的完备性、通用性和易用性,同时还要考虑代码的性能、可维护性和可扩展性,这其中将涉及许多精细的优化和打磨。期待在功能跑通的基础上,后续能继续深入完善,为飞桨静态图半自动并行打造一个好用的流水并行可视化工具。 \ No newline at end of file diff --git a/WeeklyReports/10_AndSonder/images/60c8cc0153930143cf308972005f4151a8169ece30a7cffc08bd18ba8de84145.png b/WeeklyReports/10_AndSonder/images/60c8cc0153930143cf308972005f4151a8169ece30a7cffc08bd18ba8de84145.png new file mode 100644 index 0000000000000000000000000000000000000000..a0ce1279df1ae02069a0d87e3031bed3b6f553e9 GIT binary patch literal 47879 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 z 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 R{q_~~BP}ius1*I`|6gzthN1uf literal 0 HcmV?d00001