MindStudio Profiler 性能调优特性分析与设计说明书
| 所属SIG组: | mstt-sig |
| 落入版本: | MindStudio 26.0.0 |
| 设计人员: | chenhao |
| 日期: | 2026.01.21 |
您对"本文档"的复制,使用,修改及分发受知识共享(Creative Commons)署名—相同方式共享4.0国际公共许可协议(以下简称"CC BY-SA 4.0")的约束。 为了方便用户理解,您可以通过访问https://creativecommons.org/licenses/by-sa/4.0/了解CC BY-SA 4.0的概要 (但不是替代)。 CC BY-SA 4.0的完整协议内容您可以访问如下网址获取:https://creativecommons.org/licenses/by-sa/4.0/legalcode。
改版记录
| 日期 | 修订版本 | 修订描述 | 作者 | 审核 |
|---|---|---|---|---|
| 2026.01.21 | 1.0 | 初稿完成 | chenhao | chenhao |
| 2026.01.28 | 1.1 | 增加aclgraph场景下的性能调优章节 | chenhao | chenhao |
- 1.特性概述
- 2.需求场景分析
- 3.特性/功能实现原理(可分解出来多个Use Case)
- 4.支持aclGraph场景下的性能数据的分析和呈现
- 5.可靠性&可用性设计
- 6.特性非功能性质量属性相关设计
- 7.数据结构设计(可选)
1.特性概述
简述本产品 / 特性背景信息,简单概括本方案,对客户的价值、要达成的目的,并说明本文档包含的主要内容、适用范围等。
1.1范围
简述特性主要包含哪些功能点
1.2特性需求列表
表X:特性需求列表
| 需求编号 | 需求名称 | 特性描述 | 备注 |
|---|---|---|---|
| 1 | 支持AclGraph场景性能调优 | 采集算子shape/format/dtype等属性 | AclGraph场景下Capture和Replay阶段都支持采集 |
2.需求场景分析
2.1特性需求来源与价值概述
aclgraph场景内置框架(PyTorch等)下发流程中,对模型性能调优需要分析算子性能,需要支持对于aclgraph场景下的性能分析和呈现。
2.2特性场景分析
Pytorch框架下模型性能调优场景需使用该能力,以支撑模型性能分析。
2.3特性影响分析
NA
2.3.1硬件限制
| 产品类型 | 支持情况 |
|---|---|
| Atlas A3系列训练/推理产品 | 支持 |
| Atlas A2系列训练/推理产品 | 支持 |
2.3.2技术限制
操作系统:linux
编程语言:C / Python
2.3.3对License的影响分析
NA
2.3.4对系统性能规格的影响分析
性能数据解析所需的内存大小需要是采集到的性能数据大小的10倍以上。
2.3.5对系统可靠性规格的影响分析
NA
2.3.6对系统兼容性的影响分析
新数据格式处理,属于新增特性功能,无版本兼容性问题。
2.3.7与其他重大特性的交互性,冲突性的影响分析
NA
2.4同类社区/商用软件实现方案分析
NA
3.特性/功能实现原理(可分解出来多个Use Case)
3.1目标
支持模型算子性能数据的解析及呈现,支持模型性能调优分析优化。
3.2总体方案
性能调优工具主要包括性能数据采集解析、性能数据分析、性能数据可视化呈现三大部分。性能数据采集涉及算子开发、推理(在线推理和离线推理)、训练场景(不同的训练框架采集方式不同,如:MindSpore、PyTorch、TensorFlow等);性能数据解析包括在线解析和离线解析;性能数据可视化形式有csv表格形式、json的chrome trace或者perfetto可视化呈现、Tensorboard可视化呈现、MindStudio Insight可视化呈现方式。
离线推理场景,训练后的模型,通过量化、压缩,通过ATC进行模型转换,然后使用mindx SDK或者acl的api接口,用户直接进行应用程序开发,开发好的应用程序通过msprof拉起,可以获取对应的性能数据。
PyTorch/MindSpore训练场景,用户可以通过框架提供的profiler接口使能昇腾的profiler功能,采集、解析、呈现,采集的性能数据包括CANN软件栈、昇腾硬件和框架相关的性能数据,三类性能数据统一解析,最后在MindInsight可视化界面进行性能数据可视化呈现。
TensorFlow训练场景,用户可以通过环境变量或者修订配置参数方式使能昇腾的profiler功能,进行性能数据的采集、解析、呈现,采集的性能数据仅包括CANN软件栈、昇腾硬件的性能数据,当前还无法采集TensorFlow训练框架的性能数据,性能数据统一解析,最后输出的性能数据有两种格式:分别是csv格式支持表格形式进行分析和json格式支持chrome trace或者perfetto可视化呈现。
大模型训练,昇腾profiler的使能方式参考MindSpore、PyTorch、TensorFlow、PaddlePaddle等的使能方式,主要区别是大模型存在大规模集群,集群场景下多卡多节点的性能分析比单卡复杂,需要能提供集群中各单卡核心性能数据的统计分析,方便性能调优人员快速在千卡中识别出性能瓶颈的卡,还有一个比较重要的点是集群场景的通信性能分析需要结合通信域进行多卡联合分析,比如PP切分下,需要按照stage的划分,分析stage与stage间通信性能数据的情况,确认bubble是否合理等。
性能数据采集解析流程:

图1:msprof性能数据采集解析流程方案图
① 用户通过输入命令行参数调用二进制程序msprof进行性能数据的采集或解析,涉及parse / export等命令参数。
② 离线解析模块自动拉起进程进行性能数据的分类、挑拣及调度,数据由采集落磁盘。
③ 离线解析模块经过数据分拣调度模块拉起进程,进行二进制数据的翻译解释、性能数据之间的关联和依赖。处理完的数据内容统一由数据交互模块进行数据读写DB入库。
④ 离线解析模块通过查询并得到计算后入库的性能数据,并将必要的数据转换成用户可视化呈现的结果。目前主要包含数据汇总表格和timeline trace文件。
性能数据可视化呈现部分不在此章节单独呈现。
4.支持aclGraph场景下的性能数据的分析和呈现
4.1设计思路
aclGraph场景下,支持在模型Capture阶段和Replay阶段使能Profiling都支持数据的解析和呈现,可支撑算子性能分析。
4.2约束条件
需要26.0.0及后续版本包配套(Torch包、CANN、HDK包)
4.3详细实现(从用户入口的模块级别或进程级别消息序列图)

图2:aclgraph 软件栈业务流程介绍
业务流程实际仍然为单算子流下发,算子不感知是否为aclgraph模式下的Capture阶段,而Runtime通过Capture接口使能范围捕获相应的算子任务进行构图,对Capture捕获的算子进行后续replay执行 如上图2,在接口范围内包含 matmul 和 cast算子,被捕获后在replay阶段反复执行。
4.4子系统间接口(主要覆盖模块接口定义)
| 接口信息 | 接口描述 |
|---|---|
| 接口原型 | 缓存开关控制设置接口定义函数 rtError_t aclrtsStreamSetAttribute(rtStream_t stm, rtStreamAttr stmAttrId, rtStreamAttrValue_t *attrValue) |
| 接口参数 | rtStream_t :stream对象 stmAttrId:绑定stream的属性id,key值 rtStreamAttrValue_t ,绑定stream的value值 |
| 接口返回值 | 错误码 |
| 接口信息 | 接口描述 |
|---|---|
| 接口原型 | 缓存状态获取接口定义函数 rtError_t aclrtsStreamGetAttribute(rtStream_t stm, rtStreamAttr stmAttrId, rtStreamAttrValue_t *attrValue) |
| 接口参数 | rtStream_t :stream对象 stmAttrId:绑定stream的属性id,key值 rtStreamAttrValue_t ,绑定stream的value值 |
| 接口返回值 | 错误码 |
| 接口信息 | 接口描述 |
|---|---|
| 接口原型 | 申请内存,把info信息按照size拷贝到最后下发的task上进行缓存 rtError_t aclrtsCacheLastTaskOPInfo(void * infoPtr, uint32_t infoSize) |
| 接口参数 | infoPtr:需要缓存的任务信息 infoSize:需要缓存的任务信息字节大小 |
| 接口返回值 | 错误码 |
4.5子系统详细设计
1、PyTorch框架侧在aclmdlRICaptureBegin时调用aclrtsStreamSetAttribute 开启流的缓存功能。
2、算子在kernelLaunch后,通过aclrtsStreamGetAttribute 获取stream缓存状态,如果是缓存使能,组装信息通过aclrtsCacheLastTaskOPInfo下发给runtime缓存。如果开关未使能则不下发缓存。
3、runtime采用线程变量,按照线程记录本线程的最后下发task的streamid和taskid,把下发的信息根据大小申请内存拷贝一份缓存。
4、PyTorch框架侧在调用aclmdlRICaptureEnd时,先调用aclrtsStreamSetAttribute 关闭缓存。
5、Runtime在关闭缓存时,需要将隐式堆积的stream和主动添加的stream状态都关闭。如果在end时没有关闭,则只需主动关闭隐式堆积的stream和主动添加的stream状态,已使能的stream状态保持不变。
6、Runtime在后续replay时如果profiling开启,随原有的缓存数据上报信息给profiling。
7、最后随model销毁的时候销毁缓存信息。
4.6DFX属性设计
4.6.1性能设计
msprof数据解析模块只处理数据格式并做输出呈现,性能影响可控。
4.6.2升级与扩容设计
NA
4.6.3异常处理设计
NA
4.6.4资源管理相关设计
当前特性在内存使用上需要额外的空间,性能数据解析所需的内存大小应为采集到的性能数据大小的10倍以上,磁盘占用视具体数据量而定。
4.6.5小型化设计
NA
4.6.6可测性设计
NA
4.6.7 安全设计
4.6.7.1 安全设计确认
参考安全设计checklist进行确认
| 安全属性 | 检查项 | 检查项详细说明 | 是否涉及 | 是否满足 |
|---|---|---|---|---|
| 访问通道控制 | 是否新增侦听端口 | 新增侦听端口需刷新通信矩阵 | 否 | |
| 访问通道控制 | 是否新增进程或组件间通信 | 新增进程或组件间通信刷新通信矩阵 | 否 | |
| 访问通道控制 | 是否新增认证方式 | 新增认证方式需刷新通信矩阵及产品文档 | 否 | |
| 权限控制 | 是否涉及创建文件或目录 | 创建文件或目录须显式指定文件或目录的访问权限 | 否 | |
| 权限控制 | 账号权限是否满足“权限最小化原则” | 系统中各账号应赋予最小权限 | 否 | |
| 权限控制 | 是否存在用户权限提升 | 禁止出现用户非法权限提升 | 否 | |
| 未公开接口 | 是否新增GUC参数 | 新增GUC参数需刷新产品文档 | 否 | |
| 未公开接口 | 是否新增或修改函数、视图、系统表 | 新增或修改函数、视图、系统表需刷新产品文档,考虑权限控制 | 否 | |
| 未公开接口 | 是否新增SQL语法 | 新增SQL语法需刷新产品文档,支持记录审计日志 | 否 | |
| 未公开接口 | 是否新增内部工具 | 新增内部工具需刷新产品文档 | 否 | |
| 未公开接口 | 脚本中是否存在注释代码 | Shell/Python等解释性语言禁止注释代码,注释代码需要删除 | 否 | |
| 未公开接口 | 是否存在隐藏命令、参数、端口等接入方式 | 对于现网维护期间不会使用的命令/参数、端口等接入方式(包括但不限于产品的生产、调测、维护用途),必须删除(如通过编译宏) | 否 | |
| 未公开接口 | 系统是否存在隐藏后门 | 禁止系统预留任何的未公开账号,所有账号必须可被系统管理,并在资料中予以说明 | 否 | |
| 未公开接口 | 禁止在产品对外部用户发布的软件(包含软件包/补丁包)中提供破解类、网络嗅探类工具。 | 1、禁止在产品对外部用户发布的软件(包含软件包/补丁包)中提供可修改任意用户口令、具有“口令破解能力”(指口令暴力破解、利用系统/算法漏洞恶意破解口令)、对包含敏感数据的文件(如包含密钥的配置文件、数据库)进行解密的功能或工具。2、禁止在系统中保留第三方的网络嗅探工具tcpdump、gdb、strace、readelf网络、进程调试工具,cpp、gcc、dexdump、mirror、JDK开发/编译工具和仅在调测阶段使用的自研调试工具/脚本(例如:仅在调试阶段使用的加解密脚本、调测功能、可以提权的命令),由于业务需要必须保留的,需要进行严格的访问控制。同时在资料中说明保留的原因、使用的场景、风险。 | 否 | |
| 敏感数据保护 | 认证凭据不允许明文存储在系统中,应该加密保护。 | 认证凭据(如口令/私钥等)不允许明文存储在系统中,应该加密保护。 | 否 | |
| 敏感数据保护 | 用于敏感数据传输加密的密钥,不能硬编码在代码中。 | 禁止口令和密钥硬编码。 | 否 | |
| 敏感数据保护 | 是否明文打印口令或密钥等敏感信息 | 禁止在系统中存储的日志、调试信息、错误提示及ps命令等信息打印明文敏感信息(口令/私钥/预共享密钥)。 | 否 | |
| 敏感数据保护 | 是否明文回显口令 | 禁止明文回显口令。 | 否 | |
| 敏感数据保护 | 是否使用第三方和开源软件的缺省口令 | 禁止使用第三方和开源软件的缺省口令,参考安全设计指南第1.5章节。 | 否 | |
| 敏感数据保护 | 是否将密码明文存储在配置文件中 | 明文密码不允许写入配置文件(命令行工具安装部署及使用时必需配置密码的场景除外)。 | 否 | |
| 敏感数据保护 | 是否使用不安全的加密算法 | 禁止使用私有的或业界已知不安全的加密算法。推荐加密算法安全设计指南6.2章节。 | 否 | |
| 敏感数据保护 | 口令等敏感信息是否使用安全的传输通道 | 在非信任网络之间进行敏感信息传输须采用安全传输通道或者加密后传输。参考安全设计指南第10章。 | 否 | |
| 敏感数据保护 | 内存中口令或密钥等敏感信息使用后是否销毁 | 内存中的口令或密钥等信息使用完毕后立即清0。 | 否 | |
| 敏感数据保护 | 密码算法中使用到的随机数必须是密码学意义上的安全随机数。 | 密码算法中使用到的随机数必须是密码学意义上的安全随机数,参考安全设计指南6.3章节。 | 否 | |
| 敏感数据保护 | 资料中是否存在不安全的示例 | 资料中的示例需要是安全的,对用户进行正确的引导,若示例中存在潜在的风险,要在资料中进行说明。 | 否 | |
| 认证 | 是否提供认证机制 | 新系统需要提供认证机制并缺省开启。 | 否 | |
| 认证 | 认证是否在服务端进行 | 认证处理过程需要在服务端进行。 | 否 | |
| 认证 | 认证失败后服务端是否返回有效信息 | 认证失败后,服务端返回信息不能提供详细的、可用于判断具体错误原因的提示。 | 否 | |
| 外部参数校验 | 是否对外部输入进行合法性校验 | 1、使用外部输入数据作为循环终止条件、数组下标、内存分配大小参数等,可能导致系统出现死循环、缓冲区溢出、内存越界、拒绝服务等一系列行为。2、文件路径等外部输入应进行合法性校验,防止注入风险 | 是 | 是 |
| 三方件引入 | 是否新引入三方组件 | 1.新增三方组件需要通过安全编译选项、病毒、漏洞、开源片段引用、license合规、开源组件扫描,参考版本发布网络安全质量要求。2.新增三方组件需保证来源可信。 | 否 |
4.6.7.2 敏感数据分析
1. 敏感数据清单
敏感数据的具体范围取决于系统具体的应用场景,设计者应根据风险进行分析和判断。典型的敏感数据包括认证凭据(如口令)、密钥等内容。
| 数据字段 | 备注/说明 | 数据字段敏感度 | 关联处理模块 | 强制的操作 | 禁止的操作 |
|---|---|---|---|---|---|
| 管理员账号/密码 | 系统管理员的账号和密码 | 高 | 登录/认证 | 加密传输/加密存储/匿名化等 | 回显/日志等 |
| ... | ... | ... | ... | ... | ... |
2. 敏感操作检查
1)生命周期维度 对于识别出的敏感数据,我们需要完整地识别出数据的生命周期,识别“产生、使用、传输、持久化和销毁”的过程,以避免后续风险识别过程中无意的疏漏。 2)高风险处理过程 识别对敏感数据的处理过程中,是否有高风险的处理。典型的高风险处理包括:“打印”,“回显”,“存储”,“硬编码”,以及“不安全算法”。从信息处理的角度出发,这些高风险的处理过程在处理敏感数据时,容易产生安全漏洞,需要详细检查,对于识别到的多个敏感数据均需要进行检查,敏感数据检查矩阵如下:
例如,在典型的Web系统中,识别到的敏感数据(管理员账号/密码)在其生命周期的检查结果如下:
- 产生:由管理员首次登录系统设置密码
- 使用:管理员登录系统时使用密码进行认证
- 传输:管理员在客户端输入登录密码后,密码通过网络传输至服务端
- 持久化:管理员首次设置密码后,服务端将密码持久化在后端数据库中
- 销毁:超过一定周期后,强制管理员修改密码,将旧密码删除
| 产生 | 使用 | 传输 | 持久化 | 销毁 | |
|---|---|---|---|---|---|
| 打印 | 不涉及 | 使用过程中不会将密码进行任何形式的打印 | 安全传输通道下不需要加密;非安全传输通道下加密传输 | 不涉及 | 销毁过程不打印密码,但需记录操作日志 |
| 回显 | 在客户端密文回显,口令显示为********* | 不涉及 | 不涉及 | 不涉及 | 不涉及 |
| 存储 | 用户输入设置密码后,会通过安全加密算法将密码加密保存至后端数据库 | 同【产生】 | 不涉及 | 后端数据库加密存储 | 从后端数据库 表中删除对应密码 |
| 硬编码 | 不涉及 | 不涉及 | 不涉及 | 不涉及 | 不涉及 |
| 不安全算法 | 使用安全算法(AES256)加密 | 使用时内存中解密 | 非安全传输通道使用安全加密算法 | 同【产生】 | 不涉及 |
4.6.7.3 设计实现
不涉及会话管理、身份认证、密码密钥、拒绝服务、信息泄露、硬件等安全维度
文件权限: 落盘文件最小权限640、目录750
常规通用文件校验:软链接、文件权限及属组、文件读写校验文件大小、数量等
注入攻击: 无命令注入、日志注入的风险,命令执行及日志打印过程已做过安全字符串拦截,CSV注入在文件写入前校验攻击字符
敏感信息: Profiling数据不涉及敏感信息,同时敏感词通过工具扫描防护
DoS攻击: Profiling数据采集本地工具,不涉及服务通信发起交互,无攻击风险
未公开接口通过工具扫描排查,已满足不涉及未公开接口及公网地址
编译选项通过扫描工具识别,编译选项满足要求
4.7系统外部接口
数据解析模块交互接口为文件类接口,不涉及组件外部接口调用。
4.8自测用例设计
基于Capture、Replay两个阶段的性能数据的采集和解析进行设计测试用例,主要包含:
- Capture阶段、Replay阶段的Profiling使能情况
- 数据解析呈现的性能数据的交付件字段完整性
5.可靠性&可用性设计
5.1冗余设计
数据解析模块主要使用CPU和内存资源,不涉及镜像备份、参数备份等策略。
5.2故障管理
数据解析模块属于开发态工具,属于离线模块,只涉及故障定位,有日志维测记录错误信息。
5.3过载控制设计
离线数据解析模块功能,不涉及在线态的过载控制设计。
5.4升级不中断业务
NA
5.5人因差错设计
离线数据解析模块,不涉及在线态的操作记录、状态记录及人员操作权限划分等。
5.6故障预测预防设计
数据解析模块支持预防策略:
- 磁盘剩余空间检测,当磁盘容量低于整体的90%时,提示磁盘空间不足,告警打印提示
- 数据库插入上限条数设置,超过提示插入失败,无法继续插入,告警打印提示
6.特性非功能性质量属性相关设计
6.1可测试性
基于Capture、Replay两个阶段的性能数据的采集和解析进行设计测试用例,主要包含:
- Capture阶段、Replay阶段的Profiling使能情况
- 数据解析呈现的性能数据的交付件字段完整性
6.2可服务性
NA
6.3可演进性
NA
6.4开放性
重点描述特性的对外接口开放性,包括接口的规范性,比如符合 SQL:2011 标准。
6.5兼容性
功能版本兼容采用组件间版本号识别,版本号变更前及变更后分别处理
6.6可伸缩性/可扩展性
NA
6.7可维护性
性能数据解析日志(log文件)、预期的数据生产交付件及内容正确
6.8资料
参考下表,评估特性会涉及到的各类资料的修改点,并说明具体修改点。
| 类别 | 手册名称 | 是否涉及(Y/N) | 具体修改或新增内容简述 |
|---|---|---|---|
| 白皮书 | 技术白皮书 | N | XX章节新增XX技术 |
| 产品文档 | 产品描述 | Y | 技术指标刷新为XX |
| 特性描述 | Y | 新增XX特性 | |
| 编译指导书 | Y | XXX | |
| 安装指南 | Y | 安装集群章节需刷新XX场景 | |
| 管理员指南 | N | XXX | |
| 开发者指南 (包括开发教程、SQL参考、系统表和系统视图、GUC参数说明、错误码说明、API参考等) | Y | 在XX章节增加XXX功能 | |
| 工具参考 | Y | 新增XX工具 | |
| 术语表 | Y | 新增术语XX | |
| 入门 | 简易教程 | N | XXX |
7.数据结构设计(可选)
NA