FAQ & 已知问题

更新时间:
复制为 MD 格式

FAQ

1. 减小报告尺寸

推荐将采集的报告尺寸控制在200MB以内,可以采用以下办法减小报告尺寸:

  • 尽量将报告文件控制在< 200MB。

  • 关闭CPU采样:使用选项-s none

  • 延迟启动采集,控制采样时间:使用-y-d

  • 通过事件触发采集:使用-c指定触发方式。

  • 通过--trace-rotation选项配合--duration选项进行报告文件轮转采集。

  • 采集类似mpirun方式启动应用时,使用--process-rank-include指定只采集部分Rank进程的跟踪数据。

对于已采集到的大尺寸报告,可在Asight Systems GUI中通过File-> Open Advanced...自定义查看报告的部分内容:

  • 约束加载部分报告的比例(如只加载前50%的跟踪数据)。

  • 不解析指定类型的跟踪数据(如忽略CPU调度信息跟踪数据)。

重要

使用加载部分报告功能打开配置capture range的报告文件时,或者打开采集时间较短的报告文件时,若部分加载比例较低,可能打开报告后无跟踪数据,请尝试扩大部分加载的比例。

2. 启动应用后采集多份报告

在应用启动后,可通过以下方法采集多份报告:

可通过asys launch启动应用,随后通过asys start/stop启动采集,例如:

asys launch -t hggc cuda_test
asys start
asys stop
asys start
asys stop

若应用程序中包含多个capture range的插桩,可以通过--capture-range-end repeat-shutdown:N多次触发采集,例如通过capture range事件触发生成3个报告文件:

asys profile --capture-range-end repeat-shutdown:3 python test_linear.py 

可通过asys profile子命令的--duration--trace-rotation选项,通过报告文件轮转的方式,周期性地生成报告文件,例如每30秒生成一个报告文件,保留最近的3份报告文件:

asys profile --duration 30 --trace-rotation 3 --output test_report_%t python test_linear.py 

可通过asys attach子命令多次附着到目标应用的方式,采集多份报告,例如多次采集PID94644的进程跟踪数据,可多次执行命令:

asys attach -o report_%i 94644

3. 通过事件触发跟踪采集

asys支持以事件触发的方式进行采集,例如:

asys profile -c hgtx -p msg python test_linear.py 

事件支持NVTXprofilerStart/Stop两种标记,下面给出了一些添加事件标记的例子:

Pytorch框架中增加NVTX范围信息:

import torch.cuda.nvtx as nvtx

nvtx.range_push("msg")
...
nvtx.range_pop()

C/C++应用增加NVTX标记:

#include <nvtx3/nvToolsExt.h>

nvtxRangePushA("msg");
...
nvtxRangePop();

Pytorch框架中增加profilerStart/Stop标记:

torch.cuda.cudart().cudaProfilerStart()
...
torch.cuda.cudart().cudaProfilerStop()

4. 采集OSRT信息查看CPU线程挂起的原因

通过采集OSRT信息可以查看CPU线程挂起的原因。

指定采集OSRT跟踪:跟踪选项-t参数增加osrt。

  • 可通过--osrt-threshold选项指定采集门限。

  • 可通过--osrt-backtrace-threshold指定调用栈回溯门限。

5. 使用asys采集mpirun等多机多卡应用

对于需要在多个计算节点的多个PPU上运行的应用程序,运行时常常通过mpirun/deepspeed等方式进行启动,asys采集此类应用程序时,可通过以下两种方式采集跟踪数据,以mpirun应用为例:

  • 使用多节点跟踪采集模式(推荐):

    • 通过asys启动mpirun应用,通过--multi-node-mode mpirun使能多节点跟踪采集模式,每个节点生成一份报告文件。

  • 不使用多节点采集模式:

    • 单节点方式:通过asys启动mpirun应用,本节点的所有进程跟踪数据记录到一份报告文件,其他节点不采集跟踪数据。

    • 多节点方式:通过mpirun应用启动asys,每个节点的每个应用(通常对应一个Rank / 一个PPU)跟踪数据记录到一个报告文件。

单节点方式和多节点方式的使用方法举例如下,采集单节点跟踪信息,汇总生成一份报告文件:

asys profile mpirun –np 4 cuda_test

多个节点采集,每个应用程序生成一份报告文件,可使用-o选项%h%p根据host namePID生成报告名称,避免报告重名问题。可使用-o选项通过环境变量生成报告名称,例如通过mpirun启动的应用程序,-o选项可通过%q{OMPI_COMM_WORLD_RANK}在报告名称中包含Rank ID。

mpirun -np 4 asys profile -o report_%h_%p cuda_test

在使用单节点方式采集跟踪数据时,由于所有进程的跟踪数据记录到同一份报告文件,跟踪数据量可能巨大,若希望只采集部分进程的跟踪数据,可通过--process-rank-include选项指定需要采集的进程的Rank ID,多个Rank ID之间通过逗号","拼接,例如只采集Rank ID02的进程的跟踪数据:

asys profile --process-rank-include 0,2 mpirun –np 4 cuda_test

可通过--process-ppu-include选项指定采集的PPU设备ID列表,多个PPU设备ID之间通过逗号,拼接,例如只采集使用PPU设备ID02的进程的跟踪数据:

asys profile --process-ppu-include 0,2 mpirun –np 4 cuda_test

6. 采集包含fork的应用程序

若发现采集的应用程序的子进程跟踪缺失,可能是由于应用程序调用了fork函数,且fork后没有执行exec启动其他应用程序,asys默认在forkexec前不采集跟踪数据,若希望采集fork后子进程的跟踪数据,需要通过--trace-fork-before-exec使能此场景的跟踪采集:

asys profile --trace-fork-before-exec true cuda_test

7. 没有采集到设备内存使用信息

应用程序可能仅在初始化阶段申请设备内存,后续运行过程中无内存申请、释放动作,请检查asys选项:

  • 若存在-c--capture-range选项,或存在-y--delay选项,尝试删除以抓取启动阶段跟踪数据。

  • 若使用asys start或者asys attach方式在应用运行过程中采集,尝试更换为asys profile方式采集包含应用程序初始化阶段的跟踪数据。

8. 安装SSH服务

Ubuntu操作系统安装SSH服务步骤参考如下:

# install openssh service
sudo apt-get update
sudo apt-get install openssh-server

# edit ssh service config to modify SSH port / environment / authentication
# vi /etc/ssh/sshd_config

# restart ssh service
sudo service ssh restart

CentOS操作系统安装SSH服务步骤参考如下:

# install openssh service
sudo yum install openssh-server

# edit ssh service config to modify SSH port / environment / authentication
# vi /etc/ssh/sshd_config

# restart ssh service
sudo systemctl restart sshd.service

使用Docker场景需配置转发dockerSSH端口到主机端口,以SSH使用22端口为例,若转发到主机的50022端口,需在docker启动命令中添加如下选项:

--expose=22 -p 50022:22

9. 清理asys运行环境

若发现asys运行异常,请尝试如下步骤清理asys运行环境:

  • 运行asys sessions list检查是否有长时间未结束的session,可通过asys shutdown --session xxx命令停止相关session。

  • 运行ps -aux | grep traced | grep -v grep | awk '{print $2}' | xargs kill停止asys相关后台服务后,再次尝试运行asys。

  • 重新安装PPU-SDK。

10. asys采集完成应用未停止

在指定--duration或者--capture-range选项时,在采集停止时,asys默认发送SIGTERM停止应用。如果应用程序中包含SIGTERM的处理且未及时停止,可能导致应用程序asys采集结束后无法停止,请尝试:

  • 指定选项--kill 9,asys将发送不可拦截的信号SIGKILL停止应用。

11. 采集Tensorflow Eager模式应用跟踪不完整

若发现asys采集TensorFlow Eager模式应用的跟踪数据不完整,可添加选项--flush-on-context-synchronize true,使能asys在每次HGGC context / stream同步时保存数据,配置后asys采集性能开销将会增大:

asys profile --flush-on-context-synchronize true cuda_test

12. Linux上开启Timeline ViewAlt平移快捷键

Linux平台上,如果Alt + 滚轮被全局缩放功能占用,可以通过以下办法关闭全局缩放,释放Alt键:

在终端中, 执行:

xfconf-query -c xfwm4 -p /general/zoom_desktop -s false

可以用xfconf-query -c xfwm4 -p /general/zoom_desktop来检查其值是否为false。

13. 采集Heap内存使用量和进程内存占用量不同

asys支持通过如下选项采集进程在CPU侧的内存使用:

  • --heap-memory-usage:采集进程的动态分配内存使用量,比如通过malloc / new等方式动态分配的内存。

  • --host-memory-sampling:采样进程的实际物理内存使用量,比如通过Linuxtop命令查看进程的RES列内存占用大小。

asys采集到的进程的动态分配内存使用量实际物理内存使用量受到如下因素影响,内存使用量可能有较大差异:

  • 受到C库内存缓存优化机制以及内存碎片化的影响,内存可能被进程持有而不是被操作系统回收,导致实际物理内存使用量显著高于动态分配内存使用量

  • 受到操作系统内存分页机制和惰性内存分配策略影响,通过malloc等方式分配但未访问的内存不会分配实际物理内存,导致实际物理内存使用量显著低于动态分配内存使用量

14. 没有采集到使用Ray框架应用的跟踪数据

asys的默认采集模式不支持采集Ray框架应用的跟踪数据,需要通过--multi-node-mode ray选项使能多节点跟踪采集模式,每个节点生成一份报告文件:

asys profile --multi-node-mode ray -f true -o qwen_vllm bash eval_llm_infer.sh

已知问题

  • PPU SDK v1.0.0:asys采集PtoP memcpy耗时可能不准确。

  • PPU SDK v1.0.0:PCIe Read ThroughputPCIe Write Throughput仅统计PPU主动发起的transaction。

  • PPU SDK v1.1.0:显示hgMemAllocFromPoolAsyncPPU内存使用量可能大于实际值。

  • PPU SDK v1.1.0:asys采集CPU backtrace可能导致PPU KMD驱动崩溃。

  • PPU SDK v1.2.0:asys采集过程可能丢失部分HGGC memset跟踪数据。

  • PPU SDK v1.2.0:asys采集包含pthread_yield应用的OSRT跟踪时可能失败退出。

  • PPU SDK v1.2.0:asys analyze分析ppu_gapsppu_time_util结果不准确。

  • PPU SDK v1.2.0:asys采集memcpy HtoH跟踪数据不准确。

  • PPU SDK v1.2.0:capture range使能时,通过Timeline中的HGGC Kernel生成acu命令不准确。

  • PPU SDK v1.2.0:asys采集的ICN利用率指标低于实际值。

  • PPU SDK v1.2.0:asys采集的PCIe利用率指标低于实际值。

  • PPU SDK v1.2.0:asys采集包含订阅hgpti的应用程序时可能崩溃。

  • PPU SDK v1.2.0:asys采集包含HtoH memcpyHGGC graph时可能结果不正确,需要配置export HGGC_GRAPH_FORCE_DYNAMIC=1规避问题。

  • PPU SDK v1.3.0:asys只支持在page size4KB的系统中运行。

  • PPU SDK v1.3.0:asys采集的PPU运行频率不准确。

  • PPU SDK v1.4.0:asys attach目前不支持Ubuntu22.04及更新版本的操作系统。

  • PPU SDK v1.5.0:asys不支持采集使用v0.2.12版本Python NVTX库应用的NVTX跟踪。

  • PPU SDK v1.6.0:asys采样Python应用调用栈可能导致Python资源泄露,进而导致PPU内存资源耗尽,可通过--python-sampling false关闭采样功能。

  • PPU SDK v1.6.0:asys使能ray框架多节点跟踪采集模式时,若ray框架通过runtime_env配置了env_vars,将会导致程序错误退出。

  • asys采集过程中通过Ctrl + C中断采集,采集结束阶段跟踪可能不会写入报告文件。

  • asys不支持在Linux Kernel 4.1以下的操作系统中采集CPU调用栈信息。

  • asys采集过程可能导致HGGC stream synchronize耗时明显变长。

  • 应用程序编译需包含-pthread选项,否则可能导致asys运行崩溃。

  • asys attach可能导致某些应用卡住或者崩溃。

  • asys attach不支持采集在attach之前已经实例化的legacy HGGC graph相关跟踪信息。

  • asys采集RDMA网卡数据吞吐量低于实际值。

  • asys仅支持在ftrace时钟设置为boottime时钟的环境采集CPU线程切换信息。

  • asys采集使能PyTorch Profiler功能的应用时,Pytorch Profiler将无法采集到数据。