profiler_cn.rst 7.4 KB
Newer Older
T
Tink_Y 已提交
1 2 3 4 5 6 7 8 9
#################
 fluid.profiler
#################



.. _cn_api_fluid_profiler_cuda_profiler:

cuda_profiler
H
1207  
Hao Wang 已提交
10
-------------------------------
T
Tink_Y 已提交
11

H
Hao Wang 已提交
12
.. py:function:: paddle.fluid.profiler.cuda_profiler(output_file, output_mode=None, config=None)
T
Tink_Y 已提交
13 14


15
CUDA分析器。通过CUDA运行时应用程序编程接口对CUDA程序进行性能分析。分析结果将以键-值对格式或逗号分隔的格式写入output_file。用户可以通过output_mode参数设置输出模式,并通过配置参数设置计数器/选项。默认配置是[' gpustarttimestamp ', ' gpustarttimestamp ', ' gridsize3d ', ' threadblocksize ', ' streamid ', ' enableonstart 0 ', ' conckerneltrace ']。然后,用户可使用 `NVIDIA Visual Profiler <https://developer.nvidia.com/nvidia-visual-profiler>`_ 工具来加载这个输出文件以可视化结果。
T
Tink_Y 已提交
16 17 18 19 20


参数:
  - **output_file** (string) – 输出文件名称, 输出结果将会写入该文件
  - **output_mode** (string) – 输出格式是有 key-value 键值对 和 逗号的分割的格式。格式应该是' kvp '或' csv '
T
tink2123 已提交
21
  - **config** (list of string) – 参考"Compute Command Line Profiler User Guide" 查阅 profiler options 和 counter相关信息
T
Tink_Y 已提交
22 23

抛出异常:
T
tink2123 已提交
24
    - ``ValueError`` -  如果 ``output_mode`` 不在 ['kvp', 'csv'] 中
T
Tink_Y 已提交
25 26 27 28 29


**代码示例**


R
RaindragonD 已提交
30
.. code-block:: python
31

T
Tink_Y 已提交
32 33
    import paddle.fluid as fluid
    import paddle.fluid.profiler as profiler
R
RaindragonD 已提交
34
    import numpy as np
T
Tink_Y 已提交
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49

    epoc = 8
    dshape = [4, 3, 28, 28]
    data = fluid.layers.data(name='data', shape=[3, 28, 28], dtype='float32')
    conv = fluid.layers.conv2d(data, 20, 3, stride=[1, 1], padding=[1, 1])

    place = fluid.CUDAPlace(0)
    exe = fluid.Executor(place)
    exe.run(fluid.default_startup_program())

    output_file = 'cuda_profiler.txt'
    with profiler.cuda_profiler(output_file, 'csv') as nvprof:
        for i in range(epoc):
            input = np.random.random(dshape).astype('float32')
            exe.run(fluid.default_main_program(), feed={'data': input})
50

T
Tink_Y 已提交
51 52 53 54 55 56
    # 之后可以使用 NVIDIA Visual Profile 可视化结果





H
1207  
Hao Wang 已提交
57 58 59



T
Tink_Y 已提交
60 61 62 63

.. _cn_api_fluid_profiler_profiler:

profiler
H
1207  
Hao Wang 已提交
64
-------------------------------
T
Tink_Y 已提交
65

H
Hao Wang 已提交
66
.. py:function:: paddle.fluid.profiler.profiler(state, sorted_key=None, profile_path='/tmp/profile')
T
Tink_Y 已提交
67 68 69 70

profile interface 。与cuda_profiler不同,此profiler可用于分析CPU和GPU程序。默认情况下,它记录CPU和GPU kernel,如果想分析其他程序,可以参考教程来在c++代码中添加更多代码。


71
如果 state== ' All ',在profile_path 中写入文件 profile proto 。该文件记录执行期间的时间顺序信息。然后用户可以看到这个文件的时间轴,请参考 `这里 <../advanced_usage/development/profiling/timeline_cn.html>`_
T
Tink_Y 已提交
72 73

参数:
T
tink2123 已提交
74 75 76
  - **state** (string) –  profiling state, 取值为 'CPU' 或 'GPU',  profiler 使用 CPU timer 或GPU timer 进行 profiling. 虽然用户可能在开始时指定了执行位置(CPUPlace/CUDAPlace),但是为了灵活性,profiler不会使用这个位置。
  - **sorted_key** (string) – 如果为None,prfile的结果将按照事件的第一次结束时间顺序打印。否则,结果将按标志排序。标志取值为"call"、"total"、"max"、"min" "ave"之一,根据调用着的数量进行排序。total表示按总执行时间排序,max 表示按最大执行时间排序。min 表示按最小执行时间排序。ave表示按平均执行时间排序。
  - **profile_path** (string) –  如果 state == 'All', 结果将写入文件 profile proto.
77

T
Tink_Y 已提交
78
抛出异常:
T
tink2123 已提交
79
  - ``ValueError`` – 如果state 取值不在 ['CPU', 'GPU', 'All']中. 如果 sorted_key 取值不在 ['calls', 'total', 'max', 'min', 'ave']
80

T
Tink_Y 已提交
81 82
**代码示例**

R
RaindragonD 已提交
83
.. code-block:: python
84

T
Tink_Y 已提交
85
    import paddle.fluid.profiler as profiler
R
RaindragonD 已提交
86
    import numpy as np
T
Tink_Y 已提交
87

R
RaindragonD 已提交
88 89 90 91 92 93 94 95 96 97 98 99 100
    epoc = 8
    dshape = [4, 3, 28, 28]
    data = fluid.layers.data(name='data', shape=[3, 28, 28], dtype='float32')
    conv = fluid.layers.conv2d(data, 20, 3, stride=[1, 1], padding=[1, 1])

    place = fluid.CPUPlace()
    exe = fluid.Executor(place)
    exe.run(fluid.default_startup_program())

    with profiler.profiler('CPU', 'total', '/tmp/profile') as prof:
        for i in range(epoc):
            input = np.random.random(dshape).astype('float32')
            exe.run(fluid.default_main_program(), feed={'data': input})
T
Tink_Y 已提交
101 102 103



H
1207  
Hao Wang 已提交
104 105 106



T
Tink_Y 已提交
107 108 109 110

.. _cn_api_fluid_profiler_reset_profiler:

reset_profiler
H
1207  
Hao Wang 已提交
111
-------------------------------
T
Tink_Y 已提交
112 113 114 115 116 117 118

.. py:function:: paddle.fluid.profiler.reset_profiler()

清除之前的时间记录。此接口不适用于 ``fluid.profiler.cuda_profiler`` ,它只适用于 ``fluid.profiler.start_profiler`` , ``fluid.profiler.stop_profiler`` , ``fluid.profiler.profiler`` 。

**代码示例**

R
RaindragonD 已提交
119
.. code-block:: python
120

T
Tink_Y 已提交
121
    import paddle.fluid.profiler as profiler
R
RaindragonD 已提交
122
    with profiler.profiler('CPU', 'total', '/tmp/profile'):
T
Tink_Y 已提交
123 124 125 126 127 128 129 130
    for iter in range(10):
        if iter == 2:
            profiler.reset_profiler()
        # ...




H
1207  
Hao Wang 已提交
131 132 133



T
Tink_Y 已提交
134 135 136 137

.. _cn_api_fluid_profiler_start_profiler:

start_profiler
H
1207  
Hao Wang 已提交
138
-------------------------------
T
Tink_Y 已提交
139 140 141 142

.. py:function:: paddle.fluid.profiler.start_profiler(state)

激活使用 profiler, 用户可以使用 ``fluid.profiler.start_profiler`` 和 ``fluid.profiler.stop_profiler`` 插入代码
143
不能使用 ``fluid.profiler.profiler``
T
Tink_Y 已提交
144 145


146
如果 state== ' All ',在profile_path 中写入文件 profile proto 。该文件记录执行期间的时间顺序信息。然后用户可以看到这个文件的时间轴,请参考 `这里 <../advanced_usage/development/profiling/timeline_cn.html>`_
T
Tink_Y 已提交
147 148

参数:
T
tink2123 已提交
149
  - **state** (string) – profiling state, 取值为 'CPU' 或 'GPU' 或 'All', 'CPU' 代表只分析 cpu. 'GPU' 代表只分析 GPU . 'All' 会产生 timeline.
T
Tink_Y 已提交
150 151

抛出异常:
T
tink2123 已提交
152
  - ``ValueError`` – 如果state 取值不在 ['CPU', 'GPU', 'All']中
T
Tink_Y 已提交
153 154 155

**代码示例**

R
RaindragonD 已提交
156
.. code-block:: python
157

T
Tink_Y 已提交
158 159 160 161 162 163 164 165 166 167 168 169 170 171
    import paddle.fluid.profiler as profiler

    profiler.start_profiler('GPU')
    for iter in range(10):
        if iter == 2:
            profiler.reset_profiler()
        # except each iteration
    profiler.stop_profiler('total', '/tmp/profile')

                # ...




H
1207  
Hao Wang 已提交
172 173 174



T
Tink_Y 已提交
175 176 177 178

.. _cn_api_fluid_profiler_stop_profiler:

stop_profiler
H
1207  
Hao Wang 已提交
179
-------------------------------
T
Tink_Y 已提交
180

T
Tink_Y 已提交
181
.. py:function:: paddle.fluid.profiler.stop_profiler(sorted_key=None, profile_path='/tmp/profile')
T
Tink_Y 已提交
182 183

停止 profiler, 用户可以使用 ``fluid.profiler.start_profiler`` 和 ``fluid.profiler.stop_profiler`` 插入代码
184
不能使用 ``fluid.profiler.profiler``
T
Tink_Y 已提交
185 186

参数:
T
tink2123 已提交
187 188
  - **sorted_key** (string) – 如果为None,prfile的结果将按照事件的第一次结束时间顺序打印。否则,结果将按标志排序。标志取值为"call"、"total"、"max"、"min" "ave"之一,根据调用着的数量进行排序。total表示按总执行时间排序,max 表示按最大执行时间排序。min 表示按最小执行时间排序。ave表示按平均执行时间排序。
  - **profile_path** (string) - 如果 state == 'All', 结果将写入文件 profile proto.
189

T
Tink_Y 已提交
190 191

抛出异常:
T
tink2123 已提交
192
  - ``ValueError`` – 如果state 取值不在 ['CPU', 'GPU', 'All']中
T
Tink_Y 已提交
193 194 195

**代码示例**

R
RaindragonD 已提交
196
.. code-block:: python
197

T
Tink_Y 已提交
198 199 200 201 202 203 204 205 206 207 208
    import paddle.fluid.profiler as profiler

    profiler.start_profiler('GPU')
    for iter in range(10):
        if iter == 2:
            profiler.reset_profiler()
            # except each iteration
    profiler.stop_profiler('total', '/tmp/profile')



H
1207  
Hao Wang 已提交
209 210 211



T
Tink_Y 已提交
212