You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

远程使用Intel VTune性能分析时,.sh脚本启动成功但目标应用未启动的问题咨询

排查VTune远程启动脚本但目标应用未运行的问题

结合你提供的脚本内容和VTune远程性能分析的常见问题,我整理了几个可能的原因和对应的排查思路:

  • VTune未追踪到MPI衍生的子进程
    当你用VTune启动shell脚本时,它默认只会监控脚本这个父进程,但mpirun会衍生出大量子进程(你的命令是启动108个进程)。如果VTune的配置没有开启追踪所有子进程,它可能无法识别到main程序的启动,导致看起来“目标应用未正常启动”,但实际上进程可能已经在后台运行了。
    排查:在VTune的启动配置里,找到“Advanced”选项,勾选“Trace child processes”;或者换用附加模式——先手动在远程节点上执行脚本启动main,再用VTune附加到对应的main进程上。

  • 远程环境的路径/环境变量与预期不符
    VTune远程执行脚本时,加载的环境变量可能和你手动登录时不一样(比如不会自动加载~/.bashrc~/.profile)。脚本里的MPIRUN路径、SRC_DIR/ROOT_DIR可能出现错误:

    • 比如MPIRUN=/opt/intel/oneapi/mpi/latest/bin/,结尾多了斜杠,执行$MPIRUN/mpirun会变成/opt/intel/oneapi/mpi/latest/bin//mpirun,虽然多数系统能识别,但也可能导致问题;
    • 另外,VTune启动脚本时的工作目录可能不是你预期的脚本所在目录,导致SRC_DIR=$(pwd)获取的路径错误,进而$SRC_DIR/main找不到可执行文件。
      排查:在脚本开头添加source ~/.bashrc(如果你的MPI环境变量是在bashrc里配置的),或者在脚本里增加路径打印:
      echo "MPIRUN path: $MPIRUN/mpirun"
      echo "Main path: $SRC_DIR/main"
      echo "Data path: $ROOT_DIR/data/ipcc_gauge_24_72"
      
      查看amplex-python的输出,确认这些路径是否正确。
  • MPI启动参数或UCX配置存在问题
    你的mpirun命令里指定了-host 1ibHost,3ibHost,需要确认:

    1. 这两个主机名在远程节点上能正确解析(比如ping 1ibHost是否能通);
    2. VTune使用的远程用户是否有免密SSH登录这两个节点的权限;
    3. UCX_TLS=ud_verbs,ud_mlx5的配置是否适配当前的网络设备——如果节点的MLX5网卡驱动未正确加载,或者UCX库版本不兼容,会导致mpirun无法正常启动main进程,但mpirun本身可能返回0的退出码,让脚本看起来执行成功。
      排查:手动在远程节点上执行脚本里的mpirun命令,看是否能正常启动main;如果启动失败,查看MPI的错误日志(可以加--debug参数让mpirun输出更详细的日志)。
  • 脚本缺少错误检查,掩盖了启动失败
    你的脚本里没有对mpirun的执行结果做校验,哪怕mpirun启动main失败,脚本也会正常退出,amplex-python只会显示“脚本启动成功”,而不会告诉你main没起来。
    排查:修改脚本,增加错误检查逻辑:

    set -e  # 让脚本在命令执行失败时立即退出
    $MPIRUN/mpirun -n 108 -host 1ibHost,3ibHost -env UCX_TLS=ud_verbs,ud_mlx5 $SRC_DIR/main 0.005 $ROOT_DIR/data/ipcc_gauge_24_72 24 24 24 72 8 8 8 18
    # 或者单独检查退出码
    if [ $? -ne 0 ]; then
        echo "mpirun启动main失败,退出码: $?"
        exit 1
    fi
    

    这样如果启动失败,amplex-python会看到脚本的错误输出,更容易定位问题。

  • 远程节点的资源或权限限制
    启动108个进程需要足够的CPU和内存资源,如果远程节点资源不足,main进程可能被OOM Killer杀掉;另外,VTune的远程用户是否有足够的权限在节点上启动这么多进程,或者是否有防火墙限制跨节点的MPI通信,也可能导致启动失败。
    排查:查看远程节点的系统日志(比如/var/log/messagesdmesg),看是否有OOM Killer的记录;检查节点之间的防火墙规则,确保MPI通信的端口(默认是UCX使用的端口)是开放的。

内容的提问来源于stack exchange,提问作者TCJ

火山引擎 最新活动