news 2026/9/19 5:28:20

oam-tools 项目 msprof 采集通用命令完全指南:从参数解析到实战采集

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
oam-tools 项目 msprof 采集通用命令完全指南:从参数解析到实战采集

oam-tools 项目 msprof 采集通用命令完全指南:从参数解析到实战采集

【免费下载链接】oam-tools本项目为开发者提供故障定位工具,包含故障信息收集,软硬件信息展示,AI core error报错分析等能力,提升故障问题定位效率,文档可在昇腾社区搜索“故障处理简介”(选择社区版)。项目地址: https://gitcode.com/cann/oam-tools

导读

msprof是 CANN oam-tools 开源仓库中面向昇腾 AI 处理器的性能数据采集命令行工具,支持AI 任务运行性能数据(如算子耗时、AI Core 利用率、HBM 带宽)与AI 处理器系统数据(如芯片功耗、温度、频率)的采集与自动解析。本文以 docs/zh/profiling/msprof_cmd/general_collect_commands.md 为骨架,完整讲解 msprof 采集通用命令的两种命令格式、app参数传参方式、options参数(--output--type--environment--storage-limit--help)的取值与约束,并结合本仓库src/msprof/collector/dvvp/msprofbin/src/input_parser.cpp等源码,说明每个参数在底层的校验逻辑与默认行为。读完本文,你将掌握在任意目录下使用 msprof 采集并解析性能数据、正确控制数据落盘位置与老化策略的完整实战能力。

msprof 采集通用命令概述

在 oam-tools 项目中,msprof 的命令行实现位于 src/msprof/collector/dvvp/msprofbin,核心入口为InputParser(input_parser.cpp)。msprof 提供的性能采集能力包括:

  • AI 任务运行性能数据:采集被采集程序(如推理/训练应用)运行期间在 AI 处理器上产生的算子、通信、任务级性能数据;
  • AI 处理器系统数据:采集芯片设备级的系统运行状态数据。

msprof采集通用命令是所有这些性能数据采集的公共基础:它解决的是"性能数据采集时的基本信息"问题,包括参数说明、AI 任务文件(app)的指定方式、数据存放路径(--output)、自定义环境变量(--environment)等。换言之,无论你最终要采集哪类性能数据(AI 任务数据、msproftx 数据还是 AI 处理器系统数据),都需要先掌握本节介绍的通用命令格式与通用参数。

适用芯片范围:文档标注支持 ascend950、A3、910b、910、310p、310b 等昇腾芯片形态,具体以你当前安装的 msprof 版本支持的硬件为准。

命令格式:两种传入用户程序的方式

登录运行环境后,可以在任意目录下执行 msprof 命令。msprof 支持两种命令格式:

方式一(推荐):在 msprof 命令末尾,直接传入用户程序或执行脚本。

msprof [options] <app>

方式二:通过--application参数传入用户程序或执行脚本。

msprof [options] --application=<app>

两种方式的差异并不只是书写习惯:从源码看,二者走的是不同的参数解析路径。方式一(末尾直接跟<app>)由CheckUserCmdValid(input_parser.cpp)处理,将程序路径切分为app_dir(程序所在目录)与app(程序名)后存入采集参数;方式二(--application)则由CheckAppValid/GetAppParam(input_parser.cpp)处理,会把--application="..."中第一个空格前的部分识别为程序路径、空格后的部分识别为程序参数(app_parameters)。

方式二还额外支持解释器形式的命令,例如bash xx.sh argspython xx.py argspython -m xx args/usr/bin/python xx.py args等——源码中Utils::IsAppName(cmdPath)判断失败后会进入解释器分支(input_parser.cpp),此时要求必须携带脚本或模块参数,否则报错an interpreter (python/bash/sh) requires a script or module argument

下文举例时,为避免信息冗余,均采用方式一进行示例。

app 参数说明:如何指定被采集程序

app参数用于传入用户执行程序及相关参数,支持二进制可执行程序与执行脚本两种形态。

方式一配置示例(命令末尾直接传程序)

在 msprof 命令末尾传入二进制执行程序和程序参数:

msprof --output=/home/projects/output /home/projects/main parameter1 parameter2

在 msprof 命令末尾传入执行脚本和脚本参数:

msprof --output=/home/projects/output /home/projects/run.sh parameter1 parameter2

方式二配置示例(--application 参数传程序)

使用--application参数传入二进制执行程序和程序参数:

msprof --application="/home/projects/main parameter1 parameter2 ..."

使用--application参数传入执行脚本和脚本参数(训练场景):

msprof --application="/home/projects/run.sh parameter1 parameter2 ..."

使用注意与安全约束

[!NOTE]说明

  • 若 parameter 中存在异常符号时将无法识别参数,因此推荐使用方式一传入用户程序。使用方式一时,若配置的用户程序命令中存在"配置参数值需要加引号"的情况,请将命令写入 Shell 脚本后,通过执行 Shell 脚本的方式在 msprof 命令上添加用户程序命令。
  • 不建议配置其他用户目录或其他用户可写目录下的 AI 任务,避免提权风险;不建议配置删除文件或目录、修改密码、提权命令等有安全风险的高危操作;应避免使用pmupload作为程序名称。
  • 采集全部性能数据、采集 AI 任务运行时性能数据或采集 msproftx 数据时,本参数必选。采集 AI 处理器系统数据时,本参数可选。采集 Host 侧系统数据时,本参数可选

这些约束在源码中同样有对应实现:PreCheckApp(input_parser.cpp)会对 app 名称合法性、路径存在性、是否为软链接、是否具备可执行权限(OSAL_X_OK)、是否为目录等逐一校验;CheckAppParamValid则限制--application参数总长度不超过MAX_APP_LEN(input_parser.cpp)。

options 参数说明:五大通用参数详解

--output:性能数据存放路径

--output=<path>为可选参数,指定收集到的性能数据的存放路径。

  • 该参数优先级高于ASCEND_WORK_PATH环境变量,具体请参见《环境变量参考》(CANN 社区环境变量参考文档)。
  • 路径中不能包含特殊字符,包括:
"\n", "\\n", "\f", "\\f", "\r", "\\r", "\b", "\\b", "\t", "\\t", "\v", "\\v", "\u007F", "\\u007F", "\"", "\\\"", "'", "\'", "\\", "\\\\", "%", "\\%", ">", "\\>", "<", "\\<", "|", "\\|", "&", "\\&", "$", "\\$", ";", "\\;", "`", "\\`"
  • 在 msprof 命令末尾添加 AI 任务执行命令来传入用户程序或执行脚本时,默认落盘在当前目录
  • 配置--application参数添加 AI 任务执行命令来传入用户程序或执行脚本时,默认落盘在 AI 任务文件所在目录

源码层面的校验逻辑非常完整。CheckOutputValid(input_parser.cpp)依次执行:相对路径转绝对路径 → 检查路径最大长度 → 调用Utils::CheckPathWithInvalidChar检查非法字符 →CreateDir创建目录 → 校验目录是否为目录、是否可写(OSAL_W_OK)→ 最终通过CanonicalizePath得到规范化绝对路径写入result_dir。因此如果--output指定的目录无写权限或路径含特殊字符,命令会直接报错拒绝执行,而不是静默失败。

--type:性能数据解析结果文件格式

--type=<type>为可选参数,设置性能数据解析结果文件格式,即选择 msprof 命令行执行采集后自动解析的结果文件格式,取值为:

  • text:解析为.json.csv格式的文件和.db格式文件(msprof_时间戳.db)。默认为 text
  • db:仅解析为一个汇总所有性能数据的.db格式文件(msprof_时间戳.db),使用 MindStudio Insight 工具展示。

该参数在源码中的常量定义为TEXT_EXPORT_TYPE = "text"DB_EXPORT_TYPE = "db"(input_parser.cpp)。CheckExportType(input_parser.cpp)对取值做严格校验,非text/db时直接报错Argument --type: invalid value。因此当你计划用 MindStudio Insight 做可视化分析时,应显式指定--type=db;需要.json/.csv便于脚本化处理时使用默认的text即可。

--environment:采集时的自定义环境变量

--environment=<env>为可选参数,用于在采集时向运行环境注入需要的自定义环境变量。

  • 不建议使用其他用户的目录覆盖原有环境变量,避免提权风险。
  • 配置格式为:
--environment="${envKey}=${envValue}" --environment="${envKey1}=${envValue1};${envKey2}=${envValue2}"

即支持单个变量赋值,也支持用分号;分隔的多个变量同时注入。源码中CheckEnvironmentValid(input_parser.cpp)将参数原样保存到params_->app_env,后续由采集框架在拉起用户程序时注入对应环境。

--storage-limit:落盘目录容量上限与文件老化

--storage-limit=<limit-value>为可选参数,指定落盘目录允许存放的最大文件容量。当性能数据文件在磁盘中即将占满本参数设置的最大存储空间,或剩余磁盘总空间即将被占满时(总空间剩余 <= 20MB),则会将磁盘内最早的文件进行老化删除处理

  • 取值范围[200, 4294967295],单位为 MB,例如--storage-limit=200MB,默认未配置本参数。
  • 未配置本参数时,采集前如果磁盘可用空间小于 20MB,则不落盘数据。

该参数的实现证据非常充分:

  • 取值校验CheckStorageLimitValid(input_parser.cpp)与ParamValidation::CheckStorageLimit(param_validation.cpp)校验单位必须为MB,且数值必须在[STORAGE_LIMIT_DOWN_THD, UINT32_MAX](即 200MB ~ 4294967295MB)区间内,非法时提示valid range is %dMB~%uMB
  • 老化机制:文件老化删除实现在 file_ageing.cpp,其中STORAGE_RESERVED_VOLUME被定义为(STORAGE_LIMIT_DOWN_THD / 10) << 20,即 20MB 的磁盘保留阈值;当--storage-limit未配置(limit 为 0)时,默认以磁盘可用空间为上限,若可用空间不足 20MB 则记录日志"Data will not be collected",拒绝落盘采集。需要说明的是,FileAgeing::Init中对 MINI 类型平台会打印"The MINI_TYPE platform does not support file ageing",即该老化能力存在平台形态限制,实际以你所部署的产物平台为准。

--help:帮助提示

--help为可选参数,输出 msprof 命令的帮助信息。源码中帮助项定义为{"storage-limit", "Specify the output directory volume. range 200MB ~ 4294967295MB."}(input_parser.cpp)等一整套参数说明列表,实际执行msprof --help即可查看完整参数清单。

使用示例:一次完整的采集与自动解析

登录运行环境,在任意路径下执行以下命令:

msprof --output=/home/projects/output /home/projects/MyApp/out/main

命令含义拆解:

  • --output=/home/projects/output:指定性能数据结果文件落盘目录;
  • /home/projects/MyApp/out/main:通过方式一传入的被采集二进制程序(app)。

msprof 命令执行完成后,会自动解析并导出性能数据结果文件,默认导出.json.csv.dbmsprof_时间戳.db)三种格式的结果。.db格式性能数据的详细字段说明,请参见本仓库文档 docs/en/msaicerr/README.md 之外的 msprof 相关章节,以及仓库中 msprof 采集器源码 src/msprof/collector/dvvp/msprof 目录下的数据定义;如需使用 MindStudio Insight 查看,可在命令中加入--type=db

组合实战:一个兼顾落盘与容量的采集命令

将上述参数组合,一个典型的"训练脚本 + 自定义环境变量 + 容量限制 + db 格式输出"采集命令如下:

msprof \ --output=/home/projects/output \ --type=db \ --environment="ASCEND_GLOBAL_LOG_LEVEL=1;ASCEND_SLOG_PRINT_TO_STDOUT=0" \ --storage-limit=1024MB \ /home/projects/run.sh parameter1 parameter2

各参数作用一览:

参数取值示例说明
--output/home/projects/output结果落盘目录,优先级高于ASCEND_WORK_PATH,路径不得含特殊字符
--typetext(默认)/db自动解析结果格式;db供 MindStudio Insight 展示
--environmentKEY1=v1;KEY2=v2采集时注入的自定义环境变量,分号分隔多个
--storage-limit200MB~4294967295MB落盘目录容量上限,超出后老化删除最早文件
--help-查看完整参数帮助

常见问题与排查建议

  1. 程序参数含引号/特殊符号无法识别:改用方式一,或把完整命令写入 Shell 脚本后通过执行脚本方式传入。
  2. --output报"contains invalid character"或"permission denied":路径含特殊字符或无写权限,检查输出目录后重试;源码中对应CheckPathWithInvalidCharOsalAccess2(..., OSAL_W_OK)校验(input_parser.cpp)。
  3. --type传入非 text/db 报 invalid valueCheckExportType仅接受textdb两个取值(input_parser.cpp)。
  4. --storage-limit非法:确认单位为MB且取值在[200, 4294967295]区间内,非法时提示valid range is 200MB~4294967295MB(param_validation.cpp)。
  5. app 是软链接或无可执行权限PreCheckApp会拒绝软链接(IsSoftLink)与无OSAL_X_OK权限的程序,请使用真实路径并确保程序可执行(input_parser.cpp)。

延伸阅读

  • 本文关联文档:docs/zh/profiling/msprof_cmd/general_collect_commands.md
  • 命令参数解析核心实现:src/msprof/collector/dvvp/msprofbin/src/input_parser.cpp
  • 参数取值与范围校验:src/msprof/collector/dvvp/common/validation/param_validation.cpp
  • 文件老化删除机制:src/msprof/collector/dvvp/transport/file_ageing.cpp
  • 其他 msprof 采集命令文档:docs/zh/profiling/msprof_cmd/msprof_cmd.md、docs/zh/profiling/msprof_cmd/host_system_data.md、docs/zh/profiling/msprof_cmd/processorai_accelerator_system_data.md

【免费下载链接】oam-tools本项目为开发者提供故障定位工具,包含故障信息收集,软硬件信息展示,AI core error报错分析等能力,提升故障问题定位效率,文档可在昇腾社区搜索“故障处理简介”(选择社区版)。项目地址: https://gitcode.com/cann/oam-tools

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 5:27:46

PSO-SA混合算法提升图像分割准确率至92%

1. 项目背景与核心思路图像分割是计算机视觉领域的基础任务之一&#xff0c;它的目标是将图像划分为若干个具有特定语义的区域。传统方法如阈值分割、边缘检测等往往难以处理复杂场景&#xff0c;而智能优化算法为解决这一问题提供了新思路。我在实际工业质检项目中发现&#x…

作者头像 李华
网站建设 2026/9/19 5:27:29

Mac PHP开发环境新范式:FlyEnv原生环境操作系统

1. 项目概述&#xff1a;为什么Mac PHP开发者需要FlyEnv&#xff0c;而不是继续“手搓”环境&#xff1f;在Mac上搭PHP开发环境这件事&#xff0c;我干了整整八年——从MAMP Pro试用期到期后手配ApachePHPMySQL&#xff0c;到Homebrew装完又卸、卸完又装的循环&#xff0c;再到…

作者头像 李华
网站建设 2026/9/19 5:26:03

Java原生AI Agent生产级实战:从规划到状态一致性

1. 这不是玩具项目&#xff0c;是能写进简历的Java AI Agent实战现场“Java人永不言弃”——这句话在AI浪潮席卷全行业的今天&#xff0c;已经不是一句情怀口号&#xff0c;而是无数Java工程师用代码硬刚出来的生存宣言。我带过三届校招面试&#xff0c;每年都有大量Java应届生…

作者头像 李华
网站建设 2026/9/19 5:25:45

Open UI5源码解析:SelectionDetailsFacade如何构建表格插件友好选区

最近在查“源代码”相关的资料&#xff0c;搜出来一堆量化主图、小游戏脚本&#xff0c;真正能沉淀下来的东西不多。于是我决定回到自己最常用的 Open UI5 底层&#xff0c;把 sap.ui.table 里那个总被忽略的 SelectionDetailsFacade.js 完整读一遍。这个文件不大&#xff0c;却…

作者头像 李华
网站建设 2026/9/19 5:23:36

金属表面划痕检测实战:光照、预处理与三层判定

1. 为什么“5分钟搞定”在工业检测里是个危险的幻觉刚入行那会儿&#xff0c;我也信过“5分钟搞定”这种话。直到在产线上连续三天被同一块不锈钢板上的微米级划痕逼到凌晨两点——Halcon界面里那个看似简单的edges_sub_pix算子&#xff0c;参数调了27次&#xff0c;边缘还是时…

作者头像 李华