1. 前言¶
1.1. 版权声明¶
以下条款适用于所有访问燧原产品和服务相关文档的用户或阅读者(以下统称“您”),本文档包括本文档提供的信息属于上海燧原科技股份有限公司和/或其子公司(以下统称“燧原”)或其许可方所有,且燧原保留不经通知随时对本文档信息或对本文档所述任何产品和服务做出修改的权利。本文档所含信息和本文档所引用燧原其他信息均“按原样”提供。燧原不担保信息、文本、图案、链接或本文档内所含其他项目的准确性或完整性。燧原不对本文档所述产品的可销售性、所有权、不侵犯知识产权、准确性、完整性、稳定性或特定用途适用性做任何暗示担保、保证。燧原可不经通知随时对本文档或本文档所述产品或服务做出更改,但不承诺因此更新本文档。
在任何情况下,燧原不对因使用或未使用本文档而导致的任何损害(包括但不限于利润损失、业务中断和信息损失等损害)承担任何责任。除非另行书面同意,燧原不对本文档承担任何责任,不论该责任因任何原因而产生或基于任何侵权理论。
本文档所列的规格参数、性能数据和等级基于特定芯片或计算机系统或组件测试所得。经该等测试,本文档所示结果反映了燧原产品在上述测试环境中的性能表现。测试系统配置及软硬件版本、环境变量等的任何变化都会影响产品或服务的实际性能,如产品或服务的实际效果与本文档描述存在差异的,均属正常现象。燧原不担保测试本文档中每种产品或服务的所有参数的准确性和稳定性。您自行承担对本文档中产品或服务是否适合并适用于您计划的应用进行评估以及进行必要测试的责任。您的使用环境、系统配置、产品设计等特性可能会影响燧原产品或服务的质量和可靠性并导致超出本文档范围的额外或不同的情况和/或要求,燧原对此不做任何担保或承担任何责任。
燧原®、Enflame ®和本文档中显示的其他所有商标、标志是上海燧原科技股份有限公司或其许可方申请和/或注册的商标。本文档并未明示或暗示地授予您任何专利、版权、商标、集成电路布图设计、商业秘密或任何其他燧原或其许可方知识产权的权利或许可。
本文档为燧原或其许可方版权所有并受全世界版权法律和条约条款的保护。未经燧原或其许可方的事先书面许可,任何人不可以任何方式复制、修改、出版、上传、发布、传输或分发本文档。为免疑义,除了允许您按照本文档要求使用本文档相关信息外,燧原或其许可方不授予其他任何明示或暗示的权利或许可。
本文档可能保留有与第三方网站或网址的链接,访问这些链接将由您自己作出决定,燧原并不保证这些链接上所提供的任何信息、数据、观点、图片、陈述或建议的准确性、完整性、充分性和可靠性。燧原提供这些链接仅仅在于提供方便,并不表示燧原对这些信息的认可和推荐,也不是用于宣传或广告目的。
您同意在使用本文档及其内容时,遵守国家法律法规、社会公共道德。您不得利用本文档及其内容从事制作、查阅、复制和传播任何违法、侵犯他人权益等扰乱社会秩序、破坏社会稳定的行为,亦不得利用本文档及其内容从事任何危害或试图危害计算机系统及网络安全的活动。
您同意,与您访问或使用本文档相关的所有事项,应根据中华人民共和国法律解释、理解和管辖。您同意,中国上海市有管辖权的法院具有相关的管辖权。
燧原对本文档享有最终解释权。
1.2. 版本记录¶
: 版本记录
时间 | 版本 | 作者 |
---|---|---|
2022-1-18 | tosprof 2022.03 版本用户手册 | Enflame Tech |
2022-6-14 | tosprof 2022.06 版本用户手册 | Enflame Tech |
2022-9-28 | tosprof 2022.09 版本用户手册 | Enflame Tech |
2023-3-28 | tosprof 2023.03 版本用户手册 | Enflame Tech |
1.3. 名词解释¶
: 名词解释
术语 | 说明 |
---|---|
GCU | Deep Thinking Unit,面向深度学习领域推出的张量处理器。 |
DMA | Direct Memory Access,是专门用于存储访问的硬件。 |
DTE | Data Transformation Engine,数据转换引擎。 |
SIP | 可扩展的智能处理器,GCU计算单元。 |
CQM | Command Queue Micro-Control-Unit,GCU内部控制处理器。 |
TS | Tops Scheduler,GCU 内部控制处理器。 |
Profiling Meta | 在软件栈执行过程中,编译期搜集的数据,主要是指在Factor/LLIR两层搜集的Profiling行为的描述信息。 |
Profiling Data | 在软件栈执行过程中,编译期搜集的数据,主要是指在通过硬件回报的Profiling行为的时间信息。 |
VPD | visual profiler data,可用于visual profiler打开的文件格式。 |
1.4. 概述¶
topsprof分析工具使您能够从命令行收集和查看分析数据。topsprof支持在CPU和GCU上收集与tops相关的活动的时间线,包括内核执行、内存传输、内存集和tops API调用以及tops内核的事件或指标。分析选项通过命令行选项提供给topsprof。收集分析数据后,分析结果显示在控制台中,也可以保存以供topsprof或Tops Visual Profiler以后查看。
1.5. 使用方法¶
topsprof [options] [application] [application-arguments]
options需要以 --
或者 -
开头,示例 --print-api-summary
,-print-api-summary
。
options带参数可以用使用空格或者等号隔开,示例 --flag xxx
和 --flag=xxx
效果是等同的。
2. 命令行选项¶
2.1. GCU 采集选项¶
: GCU 采集选项
选项 | 参数 | 默认值 | 说明 |
---|---|---|---|
profile-from-start | on,off | on | 在启动时启用/禁用采集。如果禁用,稍后可以另启动一个topsprof进行控制。此选项不对api trace起作用。 |
query-activities | N/A | N/A | 列出设备所有活动。 |
query-trace | N/A | N/A | 列出设备所有的trace域。 |
enable-activities | {format activity string} | operator,memcpy | 采集指定的活动。 |
export-activities | {filename} | N/A | 以json格式导出设备活动到文件。 |
import-activities | {filename} | N/A | 从json格式文件导入设备活动。 |
2.2. CPU 采集选项¶
: CPU 采集选项
选项 | 参数 | 默认值 | 说明 |
---|---|---|---|
trace | {format domain string} | topstx,runtime | 采集指定domain的trace。 |
topstx-domain-include | {format domain string} | N/A | 如果使用trace指定的domain包含topstx,可以用topstx-domain-include指定采集自定义的domain的trace。 |
topstx-max-bytes-size | {size} | 4096B | 限制采集api trace时字节流或字符串的长度,包括domain名称、string类型的message、string或byte类型的payload、category/thread/device名称、以及注册的string等,超出则截断,数据范围是 1 ~ 1024 * 1024 B。 |
cpu-profiling-callstack | N/A | N/A | 开启cpu堆栈采集,依赖perf工具,详情请参考附录。 |
cpu-profiling-frequency | {frequency} | 100Hz | 设置cpu堆栈采集频率,数据范围是 1 ~ 100 Hz。 |
cpu-utilization | N/A | N/A | 开启cpu使用率采集,依赖perf工具,详情请参考附录。 |
memory-utilization | N/A | N/A | 开启cpu内存采集。 |
utilization-frequency | {frequency} | 100Hz | 设置 memory-utilization 和 utilization-frequency 采集频率,数据范围是 1 ~ 100 Hz。 |
kernel-callstack | N/A | N/A | 开启kernel堆栈采集,依赖内核工具ftrace。 |
kernel-callstack-filter | {filter} | current | 开启kernel堆栈采集过滤, "all", "kmd", "current", 或"abc,def,ghi" |
2.3. 打印选项¶
: 打印选项
选项 | 参数 | 默认值 | 说明 |
---|---|---|---|
print-gcu-summary | N/A | N/A | 输出GCU数据的汇总报表。 |
print-gcu-trace | N/A | N/A | 输出GCU数据并按时间排序。 |
print-summary | N/A | N/A | 输出采集数据汇总报表。注意:如果没有指明打印格式,默认按此格式输出。 |
print-summary-per-gcu | N/A | N/A | 输出采集数据汇总报表,并按设备区分。 |
quiet | N/A | N/A | 安静模式,不做任何输出。 |
print-app-log | N/A | N/A | 运行时打印应用输出。 |
2.4. 输入输出选项¶
: 输入输出选项
选项 | 参数 | 默认值 | 说明 |
---|---|---|---|
export-profile | {filename} | N/A | 导出采集数据。 |
export-visual-profiler | {directory} | N/A | 导出采集数据,稍后可以在visual profiler中打开。 |
import-profile | {filename} | N/A | 导入采集数据,可导入前一次export-profile或export-visual-profiler输出的数据。 |
export-rawdata | {filename} | N/A | 导出原始数据。 |
import-rawdata | {filename} | N/A | 导入原始数据。 |
export-csv | {filename} | N/A | 以csv格式导出测试结果。 |
visual-profiler-merge-from | {directory} | N/A | 选择一个目录,合并目录中的所有文件,目录中的所有文件都会被视为visual profiler(vpd)格式。 |
visual-profiler-merge-to | {filename} | N/A | 合并多个visual profiler(vpd)格式,到一个文件,通过visual-profiler-merge-from指定输入项。 |
log-file | {filename} | N/A | 开启后topsprof 所有输出会保存到文件。如果文件不存在,会自动创建。 |
force-overwrite | N/A | N/A | 强制重写模式(已存在的文件会被覆盖)。 |
help | N/A | N/A | 打印帮助信息。 |
version | N/A | N/A | 打印版本信息。 |
debug | N/A | N/A | 运行时会打印调试信息。 |
debug-dump | N/A | N/A | 运行时会打印调试信息,并在当前目录生成dump文件供调试。 |
2.5. 控制选项¶
: 控制选项
选项 | 参数 | 默认值 | 说明 |
---|---|---|---|
session | {string} | N/A | 标记一个已存在的session。session名称只能是英文字符、数字、‘-’或‘_’。 |
session-new | {string} | {pid} | 创建一个新的session,可用于控制标记。session名称只能是英文字符、数字、‘-’或‘_’。 |
session-list | N/A | N/A | 列出系统上存在的session。 |
start | N/A | N/A | 启动采集,用于控制一个之前启动的topsprof进程,使用session可指定进程。 |
stop | N/A | N/A | 停止采集,用于控制一个之前启动的topsprof进程,使用session可指定进程。 |
cancel | N/A | N/A | 撤销采集,用于控制一个之前启动的topsprof进程,使用session可指定进程。 |
2.6. 高级选项¶
: 高级选项
选项 | 参数 | 默认值 | 说明 |
---|---|---|---|
reset | N/A | N/A | 重置topsprof内部状态,并删除profiler配置文件(~/. |
2.7. 选项说明¶
冲突选项¶
以下每行内的选项不能同时使用:
import-rawdata, import-profile
import-profile, export-profile, export-visual-profiler
export-profile, export-visual-profiler
enable-activities, import-activities
print-api-summary, print-gcu-summary, print-summary, print-summary-per-gcu
session, session-new
单独使用选项¶
以下选项只能单独使用:
export-activities, query-activities, plugin-list, help, version, reset, session-list
控制选项¶
以下选项只能单独或配合session使用:
start, stop, cancel
启动应用采集限制项¶
以下选项只能启动应用采集时使用:
profile-from-start, import-activities, enable-activities, trace, topstx-domain-include, export-rawdata, print-app-log, cpu-profiling-callstack, cpu-profiling-frequency, cpu-utilization, memory-utilization, utilization-frequency, session-new
3. 采集模式¶
topsprof可以运行在以下任意一种模式中。
3.1. 统计模式¶
统计模式是topsprof的默认模式。在此模式,topsprof对每一个gcu算子或api输出一行结果。对每一行结果topsprof会输出最大值、最小值、平均值、调用信息等统计参数。topsprof输出会增加前缀 =={pid}==, {pid} 是被采集的应用程序进程id。 示例:
$ topsprof --enable-activities operator ./simpleElemwiseAdd
==499== TOPSPROF is profiling process 499, session: 451, command: ./simpleElemwiseAdd
==499== Acquiring tasks...
==499== Got task list
[03-15-30] LOCAL: success connect to server
==499== TOPSPROF is attach task 50000, session: 451
[03-15-30] LOCAL: profile agent config done: 11000
[03-15-30] LOCAL: profile agent created: 12000
ok echo
process profile data[==========================================] 100% 0.015s
==499== Time(%) Time Calls Avg Min Max Name
==499== GCU activities:
==499== 86.86% 56.61ms 1 56.61ms 56.61ms 56.61ms scalar_add(float*, float*, float*, unsigned long)
==499== 13.12% 8.55ms 1 8.55ms 8.55ms 8.55ms vector_add(float*, float*, float*, unsigned long)
==499== 0.02% 13.44us 1 13.44us 13.44us 13.44us warm_up()
==499== Accumulate Time 65.17ms, Total Calls 3
==499== Total Time 636.73ms
==499==
==499== CPU activities:
==499== does not contain cpu kernel data.
==499== RUNTIME activities:
==499== 36.19% 171.85ms 5 34.37ms 11.53ms 122.74ms Stream_Synchronize
==499== 25.82% 122.58ms 3 40.86ms 28.77us 122.51ms TSStream_LaunchKernel
==499== 25.78% 122.38ms 1 122.38ms 122.38ms 122.38ms TSExecutor_ProfilerInit
==499== 3.11% 14.77ms 5 2.95ms 64.77us 4.14ms StreamExecutor_GetOrCreateHostMemObj
==499== 1.74% 8.27ms 2 4.14ms 4.09ms 4.19ms TSStream_MemcpyH2D
==499== 1.42% 6.72ms 18 373.40us 2.88us 1.94ms Context_SubmitTSStreamSyncTask
==499== 1.41% 6.72ms 2 3.36ms 3.28ms 3.44ms TSStream_MemcpyD2H
==499== 1.39% 6.60ms 95 69.46us 2.25us 2.25ms MemoryMgr_CreateBo
==499== 1.29% 6.10ms 95 64.24us 1.41us 2.24ms Driver_BoAlloc
==499== 1.21% 5.73ms 17 336.88us 23.70us 2.25ms MemoryMgr_AllocHost
==499== 0.21% 1.00ms 79 12.66us 2.77us 234.90us MemoryMgr_AllocDevice
==499== 0.10% 459.01us 3 153.00us 9.03us 432.70us Stream_LaunchKernelAsync
==499== 0.06% 299.12us 94 3.18us 1.31us 37.49us OsInterface_DtuMmap
==499== 0.06% 294.41us 2 147.20us 100.83us 193.58us StreamExecutor_MemcpyH2DSync
==499== 0.04% 200.26us 12 16.69us 461.00ns 41.31us TSStream_AutoReleaseResource
==499== 0.03% 165.10us 4 41.28us 23.45us 63.52us TSStream_CommandEmitWithReleaseFunc
==499== 0.03% 155.92us 4 38.98us 10.29us 82.41us TSStream_RecordEvent
==499== 0.03% 150.41us 33 4.56us 2.60us 22.78us MappedQueue_Emit
==499== 0.03% 130.98us 10 13.10us 8.81us 37.77us TSStream_DoHostCallback
==499== 0.02% 92.20us 4 23.05us 13.92us 40.88us TSStream_ProfilerTraceMemcpyInfo
==499== 0.01% 52.31us 3 17.44us 1.26us 41.60us TSExecutor_GetCachedOrCreateResourceBundle
==499== 0.01% 26.15us 4 6.54us 300.00ns 13.15us Stream_RecordEventAsync
==499== 0.00% 17.02us 3 5.67us 2.94us 10.69us Stream_LaunchKernel_CaptureParam
==499== 0.00% 15.32us 2 7.66us 2.62us 12.69us Stream_MemcpyH2DAsync
==499== 0.00% 6.46us 2 3.23us 2.79us 3.68us Stream_MemcpyD2HAsync
==499== 0.00% 4.15us 4 1.04us 280.00ns 2.01us Stream_DoHostCallbackAsync
==499== 0.00% 3.69us 3 1.23us 952.00ns 1.50us Stream_UpdateImplicitParameter
==499== Accumulate Time 474.79ms, Total Calls 509
==499==
3.2. 跟踪模式¶
跟踪模式提供一个时间轴显示发生的活动和持续时间,每次调用会显示为一行。topsprof输出会增加前缀 =={pid}==, {pid} 是被采集的应用程序进程id。 示例:
$ topsprof --enable-activities operator --print-gcu-trace ./simpleElemwiseAdd
==880== TOPSPROF is profiling process 880, session: 832, command: ./simpleElemwiseAdd
==880== Acquiring tasks...
==880== Got task list
[03-17-42] LOCAL: success connect to server
==880== TOPSPROF is attach task 50000, session: 832
[03-17-42] LOCAL: profile agent config done: 11000
[03-17-42] LOCAL: profile agent created: 12000
ok echo
process profile data[==========================================] 100% 0.014s
==880== Start Duration Node Name Name
==880== GCU trace:
==880== 0.00ns 13.32us warm_up()
==880== 424.48ms 56.61ms scalar_add(float*, float*, float*, unsigned long)
==880== 629.17ms 8.54ms vector_add(float*, float*, float*, unsigned long)
==880== Accumulate Time 65.16ms, Total Calls 3
==880== Total Time 637.72ms
4. 采集控制¶
4.1. Session¶
topsprof启动应用时,会创建一个新session或者加入已有的session。
start/stop/cancel通过--session
,指定要控制topsprof进程。当前系统只存在一个session时,可以省略session选项。
topsprof --session-list
会列出当前系统所有session。
4.2. 查询采集项¶
选项query-activities可用来查询可控制的采集项。 示例:
$ topsprof --query-activities
==== User Activities:
Memcpy,Memcpy_cdte,Memcpy_sdte,Operator
4.3. 使用字符串控制¶
topsprof支持使用kernel profiling流程采集数据。kernel profiling流程不依赖于编译期收集数据,支持factor和topscc程序,支持采集GCU kernel、ODTE、CDTE和SDTE信息。选项enable-activities的规则如下: 可指定的activities包括Operator、Memcpy、Memcpy_cdte、Memcpy_sdte,指定多个时用逗号分隔。 指定Operator表示采集GCU kernel;指定Memcpy表示采集ODTE;指定Memcpy_cdte表示采集CDTE;指定Memcpy_sdte表示采集SDTE。 若需要采集CDTE或SDTE信息,对于factor程序,编译时需要export以下的环境变量:
export ENFLAME_GENERATE_PROFILE_META=true
对于topscc程序,使用topscc编译时需添加-fgcu-generate-profile-meta参数。注意:采集 Memcpy_sdte、Memcpy_cdte 会较大增加算子运行时候的采集性能信息的Overhead,导致算子整体运行时间变长,建议根据实际情况,开启该选项。
示例:
指定采集GCU kernel和ODTE
--enable-activities Operator,Memcpy
选项trace及topstx-domain-include指定要采集trace events的domians,指定多个时用逗号分隔。其中trace指定已定义的domains;当trace指定的domains包含topstx时,可以用topstx-domain-include指定自定义的domains。
示例:
采集RUNTIME和TOPSPROFILER的trace events
--trace runtime,topsprofiler
4.4. 使用json文件控制¶
选项export-activities可以导出json格式文件,用于编辑。json文件是树形节点,最末尾节点的type为activity。设置此节点isCheck项为true,即可开启相关采集项。随后使用import-activities可以导入编辑后的json文件,用于采集项控制。
4.5. 采集控制¶
首先启动一个topsprof用于采集,之后在另外的终端再开启topsprof进行控制;支持start/stop/cancel。 一个常见的用法是先启动应用不采集,等合适时机手动开启采集,示例:
topsprof --profile-from-start off --enable-activities operator python xxx
等合适时机,启动新终端输入
topsprof start
5. 输出¶
5.1. Export/Import¶
选项export-profile可以用来生成结果文件;可以使用import-profile选项导入topsprof。 选项export-visual-profiler可以用来生成供visual-profiler使用的结果文件;可以用visual-profiler打开,也可以使用import-profile选项导入生成的vpd文件。 选项export-rawdata可以用来导出采集的原始数据;可以使用import-rawdata选项将原始数据导入topsprof。
5.2. 打印应用输出¶
启用选项print-app-log可以同时打印应用输出。
6. 分布式¶
6.1. 分布式启动采集¶
分布式支持通过mpirun和python ddp启动topsprof,示例如下:
mpirun [mpirun-arguments] topsprof [options] [application] [application-arguments]</br>
python -m torch.distributed.launch -no-python [python-arguments] topsprof [options] [application] [application-arguments]
6.2. 合并输出结果¶
通过分布式调用,topsprof会为每个进程生成一份vpd文件;用户需要在运行结束后,将所有文件复制到一个文件夹,并调用topsprof进行合并。
topsprof --visual-profiler-merge-from {directory} --visual-profiler-merge-to {filename}
7. 附录¶
7.1. perf工具说明¶
perf是linux系统中提供的性能分析工具,常见的发行版都能提供安装;topsprof部分采集功能依赖perf。 topsprof会直接调用perf xxx进行分析,请确保perf在系统路径PATH中能够查找到。
ubuntu安装¶
sudo apt-get install linux-tools-common
sudo apt-get install linux-tools-"$(uname -r)"
sudo apt-get install linux-tools-generic
centos安装¶
yum install perf
从源码编译¶
git clone git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git
cd linux/tools/perf
git checkout xxx #系统对应的内核版本
make
sudo make install
7.2. release note¶
2022.03 首次发布 2022.06 版本发布 2022.09 版本发布
增加visual-profiler-merge-from、visual-profiler-merge-to选项
2023.03 版本发布
增加T2x系列加速卡AOT & HostProgram profiling support
增加S60系列launch kernel profiling support