ascend_profiling.rst 3.87 KB
Newer Older
jerrrrry's avatar
jerrrrry committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
在昇腾设备上基于FSDP后端进行数据采集
====================================

Last updated: 07/24/2025.

这是一份在昇腾设备上基于FSDP后端使用GRPO或DAPO算法进行数据采集的教程。

配置
----

复用verl/trainer/config/ppo_trainer.yaml中的配置项控制采集的模式和步数,
通过verl/trainer/config/npu_profile/npu_profile.yaml中的配置项控制例如采集等级等参数。

全局采集控制
~~~~~~~~~~~~

通过 ppo_trainer.yaml 中的参数控制采集步数和模式:

-  trainer.profile_steps:
   该参数可以设置为一个包含采集步数的列表,例如[2,
   4], 意味着将会采集第二步和第四步。如果该参数为null,则代表不进行采集
-  actor_rollout_ref.profiler:
   控制采集的ranks和模式

   -  all_ranks:设为True代表对所有rank进行采集
   -  ranks:当all_ranks不为True时,
      通过ranks参数控制需要采集的rank,该参数设置为一个包含采集rank的列表, 例如[0,
      1]
   -  discrete:
      控制采集的模式。当该参数设置为False,代表采集端到端的数据;当该参数设置为True,代表采用离散模式分训练阶段采集数据

通过 npu_profile.yaml 中的参数控制具体采集行为:

-  save_path:采集数据的存放路径
-  roles: 采集的角色,下列为可选项

   -  rollout_generate:采集rollout的generate_sequences阶段
   -  actor_compute_log_prob:采集actor的compute_log_prob阶段
   -  actor_update:采集actor的update_actor阶段
   -  ref_compute_log_prob:采集ref的compute_ref_log_prob阶段
   -  all: 采集以上所有阶段

-  level:采集等级,可选项为level_none、level0、level1和level2

   -  level_none:不采集所有Level层级控制的数据,即关闭profiler_level
   -  level0:采集上层应用数据、底层NPU数据以及NPU上执行的算子信息
   -  level1:在level0的基础上多采集CANN层AscendCL数据和NPU上执行的AI
      Core性能指标信息
   -  level2:在level1的基础上多采集CANN层Runtime数据以及AI CPU

-  record_shapes:是否记录张量形状
-  with_memory:是否启用内存分析
-  with_npu:是否采集device侧性能数据
-  with_cpu:是否采集host侧性能数据
-  with_module:是否记录框架层python调用栈信息
-  with_stack:是否记录算子调用栈信息
-  analysis:是否自动解析数据

示例
----

禁用采集
~~~~~~~~

.. code:: yaml

       trainer:
           profile_steps: null # disable profile

端到端采集
~~~~~~~~~~

.. code:: yaml

       trainer:
           profile_steps: [1, 2, 5]
       actor_rollout_ref:
            profiler:
                discrete: False
                all_ranks: True


离散模式采集
~~~~~~~~~~~~

.. code:: yaml

       trainer:
           profile_steps: [1, 2, 5]
       actor_rollout_ref:
            profiler:
                discrete: True
                all_ranks: False
                ranks: [0, 1]


离散模式采集actor
~~~~~~~~~~~~~~~~~~

.. code:: yaml

       trainer:
           profile_steps: [1, 2, 5]
           npu_profile:
                options:
                    roles: ["actor_compute_log_prob", "actor_update"]
       actor_rollout_ref:
            profiler:
                discrete: True
                all_ranks: False
                ranks: [0, 1]


可视化
------

采集后的数据存放在用户设置的save_path下,可通过 `MindStudio Insight <https://www.hiascend.com/document/detail/zh/mindstudio/80RC1/GUI_baseddevelopmenttool/msascendinsightug/Insight_userguide_0002.html>`_ 工具进行可视化。

如果analysis参数设置为False,采集之后需要进行离线解析:

.. code:: python

    import torch_npu
    # profiler_path请设置为"localhost.localdomain_<PID>_<timestamp>_ascend_pt"目录的上一级目录
    torch_npu.profiler.profiler.analyse(profiler_path=profiler_path)