跟踪目标程序

更新时间:
复制为 MD 格式

1. PPU活动跟踪

asys支持同时采集HGGCCUDA的跟踪信息,允许通过asysCUDA应用采集跟踪数据,通过-t选项指定要抓取的跟踪项。如果不指定跟踪项,默认采集 hggc,hgtx,acdnn,acblas选项--trace支持的各个PPU相关跟踪项,参见如下表格:

-t支持的跟踪项

采集内容

hggc

HGGC runtime/driver API的执行时间以及调用栈信息

CUDA runtime/driver API的执行时间以及调用栈信息

PPU执行信息:kernel/memcpy/memset

HGGC/CUDA APIPPU执行关联关系

acdnn

cuDNN API: 执行时间信息

acblas

cuBLAS API: 执行时间信息

hgvideo

HG-Encode API的执行时间

HG-ACVID API的执行时间

HG-JPEG API的执行时间

PPU执行信息:video编解码

video APIPPU执行关联关系

pccl

PCCL 通信过程各阶段的执行时间

跟踪项hggcHGGC/CUDA的跟踪采集范围,可通过--hggc-trace-set控制开启哪些子跟踪项,支持指定多个子集,通过","分隔,例如--hggc-trace-set=kernel-activity,kernel-api:

HGGC跟踪子集

采集内容

kernel-activity

采集PPU上执行kernel相关信息

memory-activity

采集PPUmemory操作相关信息

kernel-api

采集CPUkernel相关API执行信息

memory-api

采集CPUmemory相关API执行信息

default-set

默认值,包含可指定的跟踪子集,以及其他HGGC/CUDA跟踪信息

若希望精确地禁止跟踪项hggc中采集某些API,可通过配置ASIGHT_HGGC_TRACE_BLACKLIST环境变量,指定被禁止的API列表,多个API名称通过","分隔,例如:export ASIGHT_HGGC_TRACE_BLACKLIST=cudaEventQuery,cuEventQuery

1.1 DevicePPU活动

1.1.1 PPU Activity

依赖的asys采集选项:--trace hggc

采集到的报告在GUI工具打开后,可按照以下层级展示PPU的工作情况,如下图所示:

image

为方便查看,同一个时间线会绘制在多行中,例如上图中的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等,如下图所示:

image

1.1.2 PPU Graph

依赖的asys采集选项:--trace hggc

Timeline View支持Graph时间线的独立显示,方便对graph的执行情况进行分析。如果报告中有graph信息,在stream节点下会显示graph节点,具体层级为:

  • Graph Group

    • Graph

      • Graph Exec

对于graph时间线,会显示其Graph IDGraph Exec ID,如下图所示:

image

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

image

1.1.3 PPU Video

依赖的asys采集选项:--trace hgvideo

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

image

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

image

1.2 HostAPI调用情况

1.2.1 HGGC API

依赖的asys采集选项:--trace hggc

线程节点下会显示HGGC的调用情况,可查看HGGCKernel的分发时间,以及内存操作的启动时间:

image

1.2.2 ACDNN

依赖的asys采集选项:--trace acdnn

开启采集后,线程节点下会显示ACDNN的时间线:

image

1.2.3 ACBLAS

依赖的asys采集选项:--trace acblas

开启采集后,线程节点下会显示ACBLAS的时间线:

image

1.2.4 Video API

依赖的asys采集选项:--trace hgvideo

开启后,Video API的调用情况如下所示,包括Encode API、Decode API、HGJPEG API:

image

1.3 Host APIDevice Activity的相互跳转

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

image

上图点击cudaLaunchKernel,在Device上执行的kernel被关联高亮。可利用右键菜单中的Go to Host API或者Go to Device Activity进行相互跳转。

1.4 HGGC Launch APIKernel名字的切换

可以通过Tools->Options->Systems Profile->HGGC API Name Mode来切换launch API名字的显示方式:

  • 显示Host API名字

  • 显示启动的Kernel的名字

1.5 PPU Activity之间的依赖关系

PPU上不同stream上的kernel之间可能通过cudaEventRecordcudaStreamtWait,建立起执行的依赖关系,Timeline View支持该依赖关系的显示可以通过PPU Activity时间线或相关Event API时间线的右键菜单显示依赖:

image

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

image

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

image

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。

image

image

2. PPU Metrics跟踪

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

image

同一类别的metrics以分组的形式显示,支持OverlayStacked两种汇总显示方式。可通过--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表示只采集设备01的运行指标:

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 counterHGML 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();
}

依次pushLoopDoProcesses两个HGTX range,最内层的DoProcess()函数调用了一些HGGC API。通过如下命令采集hgtx:

asys profile -t hgtx -o test_report sample

在采集报告后,在GUI中显示如下:

image

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

image

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的时间线:

image

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的活动情况:

image

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

image

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

image

Tips:CPU Sampling的采样率较高,会增加报告文件的尺寸。如果对CPU采样不感兴趣,可以在asys命令行中传入-s none关闭采样。

5.2 线程调度情况

依赖以下2个采集选项之一:

  • --sample process-tree:采集进程树。

  • --sample system-wide:采集系统所有进程。

开启CPU采样的线程时间线如下所示:

image

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

image

从上到下依次为:

  • CPU利用率:CPU资源利用情况。

  • CPU核心:当前线程在哪个核心上调度,其颜色与CPU核心节点的label颜色对应。

  • 线程状态,分为4种:

    • 运行中image

    • 未调度image

    • 等待中image

  • 正在调用OSRTimage

  • Backtrace采样点:代表采样点,其tooltip中有详细的调用栈信息

将鼠标悬停在item上会有更详细的信息显示。

在未开启CPU采样,但开启了OSRT采集时,Asight Systems支持利用OSRT的执行情况估算线程状态,将OSRT中执行的时间片视为CPU空闲;将OSRT外执行的时间片视为CPU忙碌,如下图所示:

image

此时线程状态分为两种:

  • 可能运行中image

  • 可能等待中image

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

image

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

image

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帧)。

可将鼠标悬停时间线上查看调用栈:

image

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帧)。

调用栈如下所示:

image

6.3 采集ACDNN/ACBLAS调用栈

使用如下命令采集ACDNNACBLAS跟踪,并采集调用栈信息:

asys profile -t acdnn,acblas --acompute-backtrace-threshold 80000 python /test_script/ops/test_linear.py
  • -t acdnn,acblas开启ACDNNACBLAS跟踪。

  • --acompute-backtrace-threshold 80000采集ACDNNACBLAS API调用栈,触发调用栈采集的API运行时长门限,单位纳秒(ns)。

调用栈如下所示:

image

7. 内存使用情况跟踪

7.1 分析PPU内存使用情况

asys支持采集应用程序对设备内存的使用情况,采集申请、释放设备内存时的调用栈信息,并通过汇总调用栈信息提供设备内存使用统计信息。可通过--hggc-memory-usage选项使能对内存使用的采集,例如:

asys profile -t hggc --hggc-memory-usage true python test_linear.py

当开启内存用量跟踪时,Asight Systems会在时间轴上显示PPU内存的使用情况,可以对内存用量进行分析,如下图所示:

image

Device memory usage行中显示了程序运行过程中PPU内存的用量,功能包括:

  • 支持与CUDA/HGGC API的关联显示。

  • 支持Callstack。

  • 支持在Events View中显示内存分配/释放事件。

PPU内存申请失败时,会以小红点的形式在Device memory usage行显示:

image

GUIDevice 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侧内存使用的变化情况:

image

支持显示两种内存用量:

  • 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的设备内存使用汇总信息,如下图所示:

image

上图中,展示了Pinned内存随时间变化的情况,tooltip中显示了本次内存变化的分配/释放情况,以及调用栈信息。Pinned内存同样支持在Events View中显示。在GUIHost 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中展示调用栈情况:

image

可通过--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调用栈展示完整调用链路。

image

image

可通过--python-backtrace=hggc进行使能,并通过--python-backtrace-depth控制采集调用栈深度,目前asys python backtrace支持的跟踪项为:

  • hggc

    例如:

    asys profile --python-backtrace=hggc python launch.py
    
  • device 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的形式展示:

image

可通过--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内指定方法可混合使用,若指定逻辑发生冲突,则按最后一次指定方法进行采集。

例如:采集pythontorch模块下所有函数,并设置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

时间线如下图所示:

image

PCCL的时间线按照channel进行分类,channel中按照pipeline分类。

10. RDMA网卡运行指标跟踪

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

image

支持显示的内容有

  • 网络接收速度

  • 网络发送速度

  • 网络接收包尺寸

  • 网络发送包尺寸

  • 网络接收CNP速率

  • 网络发送CNP速率

  • Send Wait

在框选时间范围时,tooltip中会显示所选时间范围内的平均网络传输速度,如下图所示:

image

可通过--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_perf

Note:受RDMA驱动接口影响,实际采样能力频率可能无法达到最高值,当设置采样频率超过实际采样频率最高值时,将以实际采样频率最高值进行采集。