跟踪目标程序
1. PPU活动跟踪
asys支持同时采集HGGC和CUDA的跟踪信息,允许通过asys对CUDA应用采集跟踪数据,通过-t选项指定要抓取的跟踪项。如果不指定跟踪项,默认采集 hggc,hgtx,acdnn,acblas,选项--trace支持的各个PPU相关跟踪项,参见如下表格:
-t支持的跟踪项 | 采集内容 |
hggc | HGGC runtime/driver API的执行时间以及调用栈信息 CUDA runtime/driver API的执行时间以及调用栈信息 PPU执行信息:kernel/memcpy/memset HGGC/CUDA API和PPU执行关联关系 |
acdnn | cuDNN API: 执行时间信息 |
acblas | cuBLAS API: 执行时间信息 |
hgvideo | HG-Encode API的执行时间 HG-ACVID API的执行时间 HG-JPEG API的执行时间 PPU执行信息:video编解码 video API和PPU执行关联关系 |
pccl | PCCL 通信过程各阶段的执行时间 |
跟踪项hggc对HGGC/CUDA的跟踪采集范围,可通过--hggc-trace-set控制开启哪些子跟踪项,支持指定多个子集,通过","分隔,例如--hggc-trace-set=kernel-activity,kernel-api:
HGGC跟踪子集 | 采集内容 |
kernel-activity | 采集PPU上执行kernel相关信息 |
memory-activity | 采集PPU上memory操作相关信息 |
kernel-api | 采集CPU上kernel相关API执行信息 |
memory-api | 采集CPU上memory相关API执行信息 |
default-set | 默认值,包含可指定的跟踪子集,以及其他HGGC/CUDA跟踪信息 |
若希望精确地禁止跟踪项hggc中采集某些API,可通过配置ASIGHT_HGGC_TRACE_BLACKLIST环境变量,指定被禁止的API列表,多个API名称通过","分隔,例如:export ASIGHT_HGGC_TRACE_BLACKLIST=cudaEventQuery,cuEventQuery。
1.1 Device端PPU活动
1.1.1 PPU Activity
依赖的asys采集选项:--trace hggc
采集到的报告在GUI工具打开后,可按照以下层级展示PPU的工作情况,如下图所示:

为方便查看,同一个时间线会绘制在多行中,例如上图中的add_kernel除了在其本行内显示外,还在Kernels,Stream等多行中绘制。如果Context下有多个Stream,则会显示[All Stream]行,其中显示了所有Stream的汇总信息。
Tips:如果Device下只有一个Context,则不显示Context节点,直接显示其下面的Stream节点。同理,如果Context下只有一个Stream,Stream节点也被隐藏。
PPU的节点名字前显示了当前节点占其父节点的时间占比,以stream节点为例,具体规则如下:
stream时间占比 = 100.0 * stream耗时 / context耗时
stream耗时 = stream内的所有事件的时间总和
context耗时 = context内的所有事件的时间总和所以50.3% Stream 8代表该Stream内所有事件时间占Context内所有事件时间的50.3%。
Tips:Kernels下面的Kernel HGTX节点的百分比计算方式是例外,其百分比计算的分母不是其父节点,而是Stream节点。
Tips:在进行filter后,PPU节点的时间占比会根据filter的范围重新计算,并且重新排序。
PPU Device行汇总了整个设备的活动情况,分为上下两层显示,上层为Kernel执行,下层为内存操作。用不同的颜色区分内存操作类型,如:HtoD/DtoH/DtoD,Pinned/Pageable等,如下图所示:

1.1.2 PPU Graph
依赖的asys采集选项:--trace hggc
Timeline View支持Graph时间线的独立显示,方便对graph的执行情况进行分析。如果报告中有graph信息,在stream节点下会显示graph节点,具体层级为:
Graph Group
Graph
Graph Exec
对于graph时间线,会显示其Graph ID和Graph Exec ID,如下图所示:

在device行上也会显示graph的汇总信息

1.1.3 PPU Video
依赖的asys采集选项:--trace hgvideo
asys还支持采集PPU 上的Video Activity数据,并在时间轴上显示相关时间线,帮助分析video处理性能。如下图所示:

在stream节点下会有video节点,显示当前stream下的所有Video Activity,并且与kernel时间线一样,会汇总到device节点中。在选择时间范围时,tooltip中会有Video Activity的时间占比,如下图所示:

1.2 Host端API调用情况
1.2.1 HGGC API
依赖的asys采集选项:--trace hggc
线程节点下会显示HGGC的调用情况,可查看HGGC中Kernel的分发时间,以及内存操作的启动时间:

1.2.2 ACDNN
依赖的asys采集选项:--trace acdnn
开启采集后,线程节点下会显示ACDNN的时间线:

1.2.3 ACBLAS
依赖的asys采集选项:--trace acblas
开启采集后,线程节点下会显示ACBLAS的时间线:

1.2.4 Video API
依赖的asys采集选项:--trace hgvideo
开启后,Video API的调用情况如下所示,包括Encode API、Decode API、HGJPEG API:

1.3 Host API与Device Activity的相互跳转
Asight Systems支持显示Host API与Device Activity之间的关联关系,并且支持二者之间的相互跳转:

上图点击cudaLaunchKernel,在Device上执行的kernel被关联高亮。可利用右键菜单中的Go to Host API或者Go to Device Activity进行相互跳转。
1.4 HGGC Launch API与Kernel名字的切换
可以通过Tools->Options->Systems Profile->HGGC API Name Mode来切换launch API名字的显示方式:
显示Host API名字
显示启动的Kernel的名字
1.5 PPU Activity之间的依赖关系
PPU上不同stream上的kernel之间可能通过cudaEventRecord和cudaStreamtWait,建立起执行的依赖关系,Timeline View支持该依赖关系的显示可以通过PPU Activity时间线或相关Event API时间线的右键菜单显示依赖:

对于通过event相关API产生依赖的时间线,Timeline View利用橙色曲线表示二者之间的依赖关系,如下图所示:

与依赖无关的时间线会被置为灰色,鼠标悬停在曲线上时会显示当前依赖的细节。点击曲线后,与该依赖路径相关的时间线会被高亮相同stream上的kernel的依赖关系以及对default stream的依赖用绿色曲线表示:

Tips:依赖关系由报告中的跟踪数据计算生成,若多个线程操作HGGC stream存在竞争,依赖关系显示可能不准确。
1.6 深入分析单个kernel
当某一个kernel的性能不符合预期并且想要深入分析该kernel时,在Timeline View中选中该kernel,通过右键菜单->Analyze the Selected Kernel with Asight Compute可以复制生成Asight Compute报告的命令,在Compute命令行工具中使用该命令即可生成Compute报告,然后在Compute GUI工具中进一步分析该kernel。


2. PPU Metrics跟踪
asys支持周期采集设备运行时的各类指标数据(metric),例如资源利用率、IO吞吐速率等指标,并在Asight Systems GUI中展示各类指标随时间的变化情况:

同一类别的metrics以分组的形式显示,支持Overlay和Stacked两种汇总显示方式。可通过--ppu-metrics-device选项指定asys采集的设备列表,可通过--ppu-metrics-device all指定采集所有设备,例如:
asys profile -t hggc --ppu-metrics-device all python test_linear.py使用默认的metrics set,采集所有device。可通过--ppu-metrics-set选项指定采集的指标集合,例如--ppu-metrics-set throughput采集IO吞吐速率相关指标集合:
asys profile -t hggc --ppu-metrics-device all --ppu-metrics-set throughput python test_linear.py可通过--ppu-metrics-device help选项查询当前可指定的设备列表,可指定多个设备,通过,分隔,比如--ppu-metrics-device 0,1表示只采集设备0和1的运行指标:
root@02892cb56ba5:~# asys profile --ppu-metrics-device help
Possible --ppu-metrics-device values are:
all: Select all supported PPUs
none: Disable PPU Metrics [Default]
device ID list: comma separated device ID list(eg.: 0,1)
Available PPU metrics sampling devices are:
0: PPU, PCI Bus ID: 00000000:10:00.0
1: PPU, PCI Bus ID: 00000000:11:00.0
2: PPU, PCI Bus ID: 00000000:CE:00.0
3: PPU, PCI Bus ID: 00000000:CF:00.0设备的各类指标是周期采集的,默认采集频率为每秒采集1000次(1kHz),可通过--ppu-metrics-frequency设置采集指标数据的频率,例如--ppu-metrics-frequency 10000设置采集频率为10kHz。
asys支持采集众多设备指标种类,由于设备性能数据采集的容量限制,每次可采集的指标种类受限。asys提供了若干预设的采集指标集合,可通过--ppu-metrics-set help选项查看支持的指标集合:
root@02892cb56ba5:~# asys profile --ppu-metrics-set help
Possible --ppu-metrics-set values are:
---------------- ---------------------------------------- --------------------------------------------
Identifier Description Enabled Metrics
---------------- ---------------------------------------- --------------------------------------------
summary Collect clock / memory / CU activity / ce__cycles_elapsed.avg.per_second
Bus throughput information. ce__cycles_active.avg.pct_of_peak_sustained_elapsed
gd__dispatch_count.avg.pct_of_peak_sustained_elapsed
ce__warps_active_accumulated.avg.pct_of_peak_sustained_elapsed
ce__warps_inactive_cu_active_accumulated.avg.pct_of_peak_sustained_elapsed
ce__warps_inactive_cu_idle_accumulated.avg.pct_of_peak_sustained_elapsed
cu__cycles_active.avg.pct_of_peak_sustained_elapsed
cu__ws_issue_active.avg.pct_of_peak_sustained_elapsed
cu__we_pipe_tensor_cycles_active.avg.pct_of_peak_sustained_elapsed
dram__exclude_hbm_bytes_read.sum.pct_of_peak_sustained_elapsed
dram__exclude_hbm_bytes_write.sum.pct_of_peak_sustained_elapsed
...
throughput Collect DRAM / PCIe / ICN link kvd__transaction_hit_rate.pct
throughput information. ksd__transaction_hit_rate.pct
l2__transaction_hit_rate.pct
dram__exclude_hbm_bytes_read.sum.pct_of_peak_sustained_elapsed
dram__exclude_hbm_bytes_write.sum.pct_of_peak_sustained_elapsed
pcie__read_bytes.avg.pct_of_peak_sustained_elapsed
pcie__write_bytes.avg.pct_of_peak_sustained_elapsed
icnltx__bytes.sum.pct_of_peak_sustained_elapsed
icnlrx__bytes.sum.pct_of_peak_sustained_elapsed
...asys支持自定义采集的指标列表,可通过--ppu-metrics-list help选项查看asys支持的指标说明信息:
root@02892cb56ba5:~# asys profile --ppu-metrics-list help
Possible --ppu-metrics-list values are:
ce__cycles_active.avg
Display Name:
ce__cycles_active.avg
Unit: cycle
Description:
# of cycles active on CE across CEs
...
kvd__transaction_hit_rate.pct
Display Name:
kvd__transaction_hit_rate.pct
Unit: %
Description:
(%) hit rate of KVD cacheable requests
...
可通过--ppu-metrics-list指定自定义的指标列表,指标通过“,”分隔。通过--ppu-metrics-list指定的指标和通过--ppu-metrics-set指定的指标集合将合并采集。例如--ppu-metrics-list ce__cycles_active.avg,kvd__transaction_hit_rate.pct指定采集CE利用率和KVD cache命中情况:
asys profile -t hggc --ppu-metrics-device all --ppu-metrics-set none --ppu-metrics-list ce__cycles_active.avg,kvd__transaction_hit_rate.pct python test_linear.py由于设备性能数据采集的容量限制,通过--ppu-metrics-list指定自定义的指标列表时,需要确保采集的指标不超过设备容量限制,可通过--check-ppu-metrics-list检查指标列表,指标通过","分隔:
root@02892cb56ba5:~# asys profile --check-ppu-metrics-list ce__cycles_active.avg,kvd__transaction_hit_rate.pct,pu__we_average_warps_issue_stalled_compute_sfu_raw_per_issue_active.ratio
Check sampling metrics list result: PASS.
Metrics list is suitable for PPU sampling capacity.Tips:asys采集设备运行指标可能由于PPU性能数据采集资源被其他应用占用而导致失败,可能由于如下原因导致无法采集设备运行指标数据:
其他asys应用正在采集设备运行指标数据。
其他acu应用正在采集跟踪数据。
DCGM正在采集性能分析指标,可通过执行
dcgmi profile --pause暂停DCGM采集。可通过PPU-SMI查询PPU performance counter和HGML GPM服务的繁忙状态。
ppu-smi -q查询PPU performance counter工作状态。ppu-smi gpm --get-sample-state查询HGML GPM服务是否使能(使能将会占用PPU performance counter)。可通过
ppu-smi gpm -s 0暂停HGML GPM服务的输出,暂停其对PPU performance counter的占用。
3. HGTX跟踪
Asight Systems支持对HGTX的追踪,可以通过HGTX标注时间线,并且支持自定义Domain,支持push/pop,start/end API。下面展示了一个使用HGTX的例子:
#include <nvtx3/nvToolsExt.h>
for (int index = 0; index < 1000; ++index) {
nvtxRangePushA("Loop");
nvtxRangePushA("DoProcess");
DoProcess();
nvtxRangePop();
...
nvtxRangePop();
}依次push进Loop和DoProcesses两个HGTX range,最内层的DoProcess()函数调用了一些HGGC API。通过如下命令采集hgtx:
asys profile -t hgtx -o test_report sample在采集报告后,在GUI中显示如下:

上图中可以看出,外层NVTX的时间线在上层,内层NVTX显示在下层。Loop的时间线包括DoProcess的时间线,DoProcess的时间线又包括最内层调用的CUDA API的时间线。Asight支持采集并显示用户指定的颜色:

4. OS Runtime跟踪
通过采集OSRT信息可以查看CPU线程挂起的原因,如pthread_mutex_lock/ sleep等。要采集OSRT,需要在跟踪选项-t参数中增加osrt:
可通过
--osrt-threshold选项指定采集门限。可通过
--osrt-backtrace-threshold指定调用栈回溯门限。
例如:
asys profile -t osrt --osrt-backtrace-threshold 80000 python /test_script/ops/test_linear.py通过GUI查看OSRT的时间线:

5. CPU与线程活动跟踪
Asight Systems支持采集线程在CPU各核心的调度情况,asys支持通过--sample 或者 -s选项,采集应用程序在系统各CPU上的执行情况,并支持周期性采集CPU执行调用栈信息,以及通过汇总调用栈信息提供函数耗时统计信息。
例如:采集CPU执行信息,指定调用栈采集周期:
asys profile -s process-tree -b dwarf --sample-period 2000000 python test_linear.py-s process-tree采集本应用进程及其子孙进程的CPU调度跟踪。-b dwarf开启采集CPU执行调用栈信息,默认开启,可省略。--sample-period 2000000指定每个CPU调用栈采集的周期,单位为CPU执行cycle数。--sample-backtrace-depth指定CPU sampling调用栈深度,默认为24。
Tips:
开启CPU执行信息采样将会使报告大小显著增加,
--sample-period设置越小,对应用程序的影响越大。通过
--sample-period选项指定的采集周期可能受操作系统限制,小于设定的采集频率。通过
--sample-period指定较短的采样周期时,部分采样点可能因为吞吐能力原因被忽略。
5.1 CPU活动情况
依赖以下2个采集选项之一:
--sample process-tree:采集进程树。--sample system-wide:采集系统所有进程。
开启CPU采样后,可查看CPU的活动情况:

上图中CPU Group行显示了整体CPU活动的情况,下面每个节点分别代表了各核心的工作负载,Timeline占比高的部分代表该时间段该核心繁忙,空白的部分代表该时间段该核心空闲。主进程的活动情况用深蓝色表示,子进程的活动用黑色表示。左侧的CPU核心节点有一个代表其颜色的label,该label将在线程行中使用。在Timeline的tooltip中会显示当前CPU具体在执行哪个进程和线程:

通过右键菜单中的"Go to Thread Row"功能,可以跳转至相应的线程行:

Tips:CPU Sampling的采样率较高,会增加报告文件的尺寸。如果对CPU采样不感兴趣,可以在asys命令行中传入-s none关闭采样。
5.2 线程调度情况
依赖以下2个采集选项之一:
--sample process-tree:采集进程树。--sample system-wide:采集系统所有进程。
开启CPU采样的线程时间线如下所示:

线程行的子节点显示了各类API的调用,线程行中展示了其在CPU各核心上的执行情况,分为4个子行:

从上到下依次为:
CPU利用率:CPU资源利用情况。
CPU核心:当前线程在哪个核心上调度,其颜色与CPU核心节点的label颜色对应。
线程状态,分为4种:
运行中

未调度

等待中

正在调用OSRT

Backtrace采样点:代表采样点,其tooltip中有详细的调用栈信息
将鼠标悬停在item上会有更详细的信息显示。
在未开启CPU采样,但开启了OSRT采集时,Asight Systems支持利用OSRT的执行情况估算线程状态,将OSRT中执行的时间片视为CPU空闲;将OSRT外执行的时间片视为CPU忙碌,如下图所示:

此时线程状态分为两种:
可能运行中

可能等待中

在仅开启backtrace采样时,线程行会显示采样点:

可以在GUI下方的Function View中查看应用程序中函数耗时统计信息:

6. API调用栈跟踪
asys支持采集HGGC/CUDA/OSRT/ACDNN/ACBLAS/CUDNN/CUBLAS相关API的调用栈信息,可以指定仅对运行时长超过指定门限的API采集调用栈信息,并且可控制调用栈回溯的最大深度。开启调用栈跟踪后,可以在GUI中的Function View中查看函数调用的火焰图/冰川图,以及Top Down/Bottom Up/Flat表格。
6.1 采集HGGC调用栈
使用如下命令采集HGGC跟踪,并采集调用栈信息:
asys profile -t hggc --hggcbacktrace all:1000 --hggc-backtrace-depth 24 python test_linear.py-t hggc开启hggc跟踪。--hggcbacktrace all:1000采集所有HGGC跟踪的调用栈,触发调用栈采集的API运行时长门限,单位纳秒(ns)。--hggc-backtrace-depth 24HGGC调用栈最大回溯深度(24帧)。
可将鼠标悬停时间线上查看调用栈:

6.2 采集OSRT调用栈
使用如下命令采集OSRT跟踪,并采集调用栈信息:
asys profile -t osrt --osrt-backtrace-threshold 80000 --osrt-backtrace-depth 24 python /test_script/ops/test_linear.py-t osrt开启osrt跟踪。--osrt-backtrace-threshold 80000采集OSRT API调用栈,触发调用栈采集的API运行时长门限,单位纳秒(ns)。--osrt-backtrace-depth 24OSRT调用栈最大回溯深度(24帧)。
调用栈如下所示:

6.3 采集ACDNN/ACBLAS调用栈
使用如下命令采集ACDNN和ACBLAS跟踪,并采集调用栈信息:
asys profile -t acdnn,acblas --acompute-backtrace-threshold 80000 python /test_script/ops/test_linear.py
-t acdnn,acblas开启ACDNN和ACBLAS跟踪。--acompute-backtrace-threshold 80000采集ACDNN和ACBLAS API调用栈,触发调用栈采集的API运行时长门限,单位纳秒(ns)。
调用栈如下所示:

7. 内存使用情况跟踪
7.1 分析PPU内存使用情况
asys支持采集应用程序对设备内存的使用情况,采集申请、释放设备内存时的调用栈信息,并通过汇总调用栈信息提供设备内存使用统计信息。可通过--hggc-memory-usage选项使能对内存使用的采集,例如:
asys profile -t hggc --hggc-memory-usage true python test_linear.py当开启内存用量跟踪时,Asight Systems会在时间轴上显示PPU内存的使用情况,可以对内存用量进行分析,如下图所示:

Device memory usage行中显示了程序运行过程中PPU内存的用量,功能包括:
支持与CUDA/HGGC API的关联显示。
支持Callstack。
支持在Events View中显示内存分配/释放事件。
当PPU内存申请失败时,会以小红点的形式在Device memory usage行显示:

在GUI的Device Memory View中可以查看Top Down/Bottom Up/Flat表格。
Tips:
可通过
--hggc-backtrace-depth选项控制调用栈采集深度,默认采集24帧,例如--hggc-backtrace-depth 50指定最多回溯50帧调用栈。进程结束时HGGC析构释放设备内存不在本功能的采集范围。
7.2 分析Host内存使用情况
asys支持周期采样应用程序对CPU侧系统内存的使用情况。可通过--host-memory-sampling选项使能系统内存使用采样,通过--host-memory-sampling-frequency控制采样频率,例如:
asys profile -t hggc --host-memory-sampling true --host-memory-sampling-frequency 500 python test_linear.py
通过采样进程的系统内存使用数据,可以在Asight Systems GUI中查看每个进程的CPU侧内存使用的变化情况:

支持显示两种内存用量:
Resident set size:实际的物理内存用量。
Water mark:采集过程中物理内存用量的峰值。
Tips:asys支持采集本应用程序进程树(根进程和子孙进程)的系统内存使用,当系统级跟踪采集使能时(-s system-wide),采集系统内存使用功能将不生效。
7.3 分析Pinned内存使用情况
asys支持采集应用程序对锁页内存(pinned memory)的使用情况,采集申请、释放锁页内存时的调用栈信息,并通过汇总调用栈信息提供锁页内存使用统计信息。当启用--hggc-memory-usage设备内存和--host-memory-samplingCPU侧系统内存选项时将默认开启锁页内存采集,例如:
asys profile -t hggc --hggc-memory-usage true --host-memory-sampling true python test_linear.py
通过采集锁页内存使用,可以在Asight Systems GUI中查看每个进程锁页使用随时间的变化情况,并可查看应用程序中各个API的设备内存使用汇总信息,如下图所示:

上图中,展示了Pinned内存随时间变化的情况,tooltip中显示了本次内存变化的分配/释放情况,以及调用栈信息。Pinned内存同样支持在Events View中显示。在GUI的Host Pinned Memory View中可以查看Top Down/Bottom Up/Flat表格。
Tips:
可通过
--hggc-backtrace-depth选项控制调用栈采集深度,默认采集24帧,例如--hggc-backtrace-depth 50指定最多回溯50帧调用栈。进程结束时HGGC析构释放锁页内存不在本功能的采集范围内。
8. Python跟踪
8.1 采集Python调用栈
8.1.1 周期采集Python调用栈 (Python Sampling)
asys支持周期采集Python脚本运行时的调用栈,包含函数名、文件名、行号,并在Asight Systems GUI中展示调用栈情况:

可通过--python-sampling选项使能Python backtrace周期采集,通过--python-sampling-frequency控制采样频率,asys将周期采集python脚本内的调用栈情况。例如:
asys profile --python-sampling true --python-sampling-frequency 1000 python launch.py
--python-sampling true使能Python backtrace周期采集,默认为true。--python-sampling-frequency 1000控制采样频率,范围为1Hz - 1kHz,默认为每秒采集500次(500Hz)。--python-backtrace-depth指定python sampling调用栈深度,默认为24。
8.1.2 采集特定事件时Python调用栈(Python Backtrace)
asys支持在跟踪特定事件时,采集当前的Python调用栈,并结合C调用栈展示完整调用链路。


可通过--python-backtrace=hggc进行使能,并通过--python-backtrace-depth控制采集调用栈深度,目前asys python backtrace支持的跟踪项为:
hggc
例如:
asys profile --python-backtrace=hggc python launch.pydevice memory / pinned memory
例如:
asys profile --hggc-memory-usage=true --host-memory-sampling=true --python-backtrace=hggc python launch.py
Note:
asys Python 调用栈采集目前只支持Python 3.8-3.12 版本。
暂时不支持使用别名的Python解释器(非官方的python/python3名称)启动应用场景的Python调用栈采集。
8.2 采集Python函数 (Python Functions Trace)
asys支持在不修改Python源码的情况下采集Python函数执行信息,并以HGTX range的形式展示:

可通过--python-functions-trace选项以不同的模式指定函数,指定模式如下:
python-functions-trace参数选项 | 采集内容 |
none | 默认值,不进行采集 |
all | 采集python内所有函数 |
module:<module_name> | 采集当前模块下所有函数,可以指定父模块,多个模块之间通过,分隔,例如:module:torch,threading |
<json_file> | 根据json内指定的函数进行采集 |
可以通过--python-functions-threshold触发python函数采集的API运行时长门限,单位纳秒(ns),默认80000ns。通过json指定有如下三种方法:
只填写module模块,默认采集当前模块下所有函数(模块可以是父模块,例如指定'torch',则'torch.nn'下所有函数都进行采集)。
[ { "module": "torch.nn.functional" }, { "module": "threading" } ]填写指定module模块(完整层级模块名)下的functions函数名列表,可自定义domain(默认值为'Python Hgtx')。
[ { "module": "torch.nn.functional", "domain": "Torch Domain", "functions": ["sigmoid","log_softmax"] } ]在指定模块下的函数名列表中,可以对function函数名进行属性覆盖,若function内指定module,则覆盖父module,若function内指定domain,则该函数将在多个domain中进行展示。
[ { "module": "torch.nn.functional", "domain": "Parent Domain", "functions": ["sigmoid", {"function": "Adadelta.step", "module": "torch.optim.adadelta", "domain": "Child Domain"}] } ]
上述json内指定方法可混合使用,若指定逻辑发生冲突,则按最后一次指定方法进行采集。
例如:采集python内torch模块下所有函数,并设置API运行时长门限为1000ns:
asys profile --python-functions-trace module:torch --python-functions-threshold 1000 python xx.py
Note:
asys python function trace只支持Python 3.8及之后版本。
多线程场景下,子线程从创建到被采集可能存在延时。
__main__模块下函数不支持指定。
应用程序在fork前后阶段,函数采集可能不准确。
9. PCCL活动跟踪
asys支持采集PCCL的活动事件,可以查看PCCL的活动情况,通过-t pccl开启采集,例如:
asys profile -t pccl hggc python test_pccl.py时间线如下图所示:

PCCL的时间线按照channel进行分类,channel中按照pipeline分类。
10. RDMA网卡运行指标跟踪
asys支持周期采集系统内RDMA网卡的运行指标,如收发字节数,收发包数平均大小,拥塞控制等信息,并在Asight Systems GUI中展示网卡各类指标随时间的变化情况:

支持显示的内容有
网络接收速度
网络发送速度
网络接收包尺寸
网络发送包尺寸
网络接收CNP速率
网络发送CNP速率
Send Wait
在框选时间范围时,tooltip中会显示所选时间范围内的平均网络传输速度,如下图所示:

可通过--nic-metrics选项使能网卡指标采集,asys将采集系统内所有网卡设备的运行情况,并在GUI显示活跃的网卡设备。例如:
asys profile --nic-metrics true ./all_reduce_perf--nic-metrics true使能网卡运行指标采集
可通过--nic-device-include选项指定网卡设备过滤的设备名称匹配正则表达式规则,多个正则表达式规则通过,连接。若网卡名称匹配任意一个指定的规则,该网卡将会被使能采集。例如:
asys profile --nic-metrics true --nic-device-include "bond" ./all_reduce_perf--nic-device-include "bond":采集名称中包含bond的网卡设备指标。
asys profile --nic-metrics true --nic-device-include "bond,eth" ./all_reduce_perf--nic-device-include "bond":采集名称中包含bond或者eth的网卡设备指标。
可通过--nic-metrics-frequency选项控制采样频率,范围为1Hz - 100kHz,默认为1kHz。
asys profile --nic-metrics true --nic-metrics-frequency 10000 ./all_reduce_perfNote:受RDMA驱动接口影响,实际采样能力频率可能无法达到最高值,当设置采样频率超过实际采样频率最高值时,将以实际采样频率最高值进行采集。




