MIGraphX推理框架第七章-性能分析

第五章介绍了MIGraphX的模型序列化,可以在此跳转进行 回顾

性能分析工具migraphx-driver

migraphx提供了性能分析工具migraphx-driver,该工具在migraphx安装目录下的bin文件中。具体使用方法如下:

migraphx-driver perf [--enable-offload-copy] [-h] [--batch] [--input-dim] [-n] [--fp16] [--gpu/--cpu] --onnx

参数说明:

  • --enable-offload-copy:设置offload_copy模式,默认需要添加该选项
  • -h:显示帮助文档
  • --batch:batchsize ,一般不用手动指定,程序会根据onnx文件中的输入大小自动识别,如果你的onnx文件中没有指定batchsize,则需要设置该选项
  • --input-dim:设置模型输入shape,如果需要使用不同的shape进行推理,则需要设置–input-dim参数
  • -n:迭代次数,比如-n 10表示迭代10次计算平均耗时,如果没有指定,默认值为100
  • --fp16:表示使用FP16模式,如果没有指定,则默认使用FP32模式
  • --gpu/--cpu:–gpu表示以gpu模式运行,–cpu表示以cpu模式运行,如果没有指定,默认采用gpu模式
  • --onnx:指定onnx模型文件路径

resnet50性能分析

对batchsize为32的resnet50以fp16模式进行性能测试:

/opt/dtk/bin/migraphx-driver perf --enable-offload-copy --fp16 --onnx ./resnet50.onnx

输出的结果中首先是模型的编译的计算图

然后在计算图后面会显示计算图中每一条指令执行的时间:

Allocating params ...
Running performance report ...
main:@0 = check_context::migraphx::version_1::gpu::context -> float_type,{},{}:0.00269076ms,0.00632856%
main:@1 = hip::hip_allocate_memory[shape=float_type,{38535168},{1},id=main:scratch]->float_type,{38535168},{1}:0.00169618ms, 0.00395935%
...

每条指令的后面会显示该指令的耗时以及占所有指令耗时的百分比,根据每一条指令的执行时间我们可以更加 精细的对模型每个算子的性能进行分析。

最后会输出整个模型的性能分析结果:

Summary:
gpu::convolution: 22.6576ms / 49 = 0.4624ms,53.2898%
hip::copy_to_gpu: 15.1687ms / 1 = 15.1687ms, 35.6762%
gpu::code_object::add_relu_kernel: 1.82899ms / 37 = 0.0494323ms,4.30172%
...
gpu::code_object::add_convert_kernel: 0.0202363ms / 1 = 0.0202363ms, 0.0545102%
step: 0.00539336ms / 3 = 0.00179779ms, 0.0145281%
reshape: 0.00331784ms / 2 = 0.00165892ms, 0.00893724%
hip::sync_stream: 0.00318896ms / 1 = 0.00318896ms, 0.00859008%
check_context::migraphx::version_1::gpu::context: 0.00221422ms / 1 =
0.00221422ms, 0.00596443%
@param: 0.00196368ms / 1 = 0.00196368ms, 0.00528955%
hip::hip_allocate_memory: 0.00177054ms / 1 = 0.00177054ms, 0.00476929%
flatten: 0.0015631ms / 1 = 0.0015631ms, 0.00421051%
Batch size: 32
Rate: 975.796/sec
Total time: 32.7937ms
Total instructions time: 37.1238ms
Overhead time: 0.189906ms, -4.33002ms
Overhead: 1%, -13%
  • Summary后面表示每个算子的耗时,比如gpu::convolution:
  1. 22.6576ms表示模型中所有卷积算子的耗时
  2. 49表示模型中卷积算子的调用次数
  3. 0.4624ms表示每个卷积算子的平均耗时
  4. 53.2898%表示卷积算子的耗时占total instructions time的比例
  • Summary中的hip::copy_to_gpu表示数据从Host拷贝到Device的耗 时,hip::copy_from_gpu表示数据从Device拷贝到Host的耗时。
  • Total time表示整个模型的耗时(n次求平均)
  • Rate表示每秒处理的数据量,Rate=1000.0/total time*batchsize
  • Total instructions time是每个算子耗时的求和,由于在计算每个算子的耗时的时候加入了同步,所以total instructions time是要大于total time的。
  • Overhead time表示的是额外开销,是除了算子执行之外的耗时,比如遍历计算图的耗时,这里注意overhead time后面有两个数值,前面一个表示实际测试出来的额外开销,后面的表示total time-total instruction time,由于 total instruction time大于total time所以会产生负值。overhead表示额外的开销占据total time的比例。
  • 通常使用total time或者rate来表示模型的实际推理性能

如果想要调整输入shape,可以通过指定–input-dim参数的方式实现:

/opt/dtk/bin/migraphx-driver perf --enable-offload-copy --input-dim @input 64 3 224 224 --fp16 --onnx ./resnet50.onnx

其中@input表示onnx的输入节点名,后面的64 3 224 224表示输入shape,格式为NCHW。注意:命令行中所有参数中间以空格分隔。

你可能感兴趣的:(#,MIGraphX推理框架,python,linux,人工智能,c++,深度学习,性能优化)