---
title: 解析结果
description: "ms_service_profiler.parse解析生成的结果如下。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/devaids/Profiling/mindieprofiling_0011.html
sourcePath: /source/zh/canncommercial/900/devaids/Profiling/mindieprofiling_0011.html
indexId: 03a001e89ddbce01c7696327a7bdfd908f8fb2f9764e87e07d70a4a921f03c0f73
---
# 解析结果

ms_service_profiler.parse解析生成的结果如下。


**表1 采集domain域与解析结果对照表**

| 解析结果 | 采集domain域 |
| --- | --- |
| profiler.db | "Schedule" |
| chrome\_tracing.json | 无强制限制。若要查看请求间flow event，需采集"Request"。 |
| batch.csv | "Schedule" |
| kvcache.csv | "KVCache" |
| request.csv | "Request" |
| forward.csv | "Schedule" |
| pd\_split\_communication.csv | "Communication" |
| pd\_split\_kvcache.csv | "KVCache" |
| coordinator.csv | "Coordinator" |
| {host\_name}\_eplb\_{i}\_summed\_hot\_map\_by\_expert.png | "eplb\_observe" |
| {host\_name}\_eplb\_{i}\_summed\_hot\_map\_by\_rank.png | "eplb\_observe" |
| {host\_name}\_eplb\_{i}\_summed\_hot\_map\_by\_model\_expert.png | "eplb\_observe" |
| {host\_name}\_balance\_ratio.png | "eplb\_observe" |


上表中未列出acl_prof_task_time_level、aclDataTypeConfig和aclprofAicoreMetrics参数采集数据的解析结果，这三个参数的详细结果介绍请参见采集数据说明和op_summary（算子详细信息），但具体采集结果请以实际情况为准。其中op_statistic_*.csv和op_summary_*.csv文件会在--output-path参数指定目录下的PROF_XXX目录落盘；而其他由这三个参数采集的性能数据文件仍保存在prof_dir参数指定路径的PROF_XXX/mindstudio_profiler_output目录下。


包括如下文件：

#### profiler.db

用于生成可视化折线图的SQLite数据库文件。

其中含有下述数据库表，具体作用如下：


**表2 profiler.db**

| Table名称 | 含义 |
| --- | --- |
| batch | 用于在MindStudio Insight展示batch表格数据。 |
| decode\_gen\_speed | 用于生成decode阶段，服务化数据不同时刻吞吐的token平均时延折线图。 |
| first\_token\_latency | 用于生成服务化框架首token时延折线图。 |
| kvcache | 用于生成服务化kvcache显存使用情况折线图可视化。 |
| prefill\_gen\_speed | 用于生成prefill阶段，服务化数据不同时刻吞吐的token平均时延折线图。 |
| req\_latency | 用于生成服务化框架请求端到端时延使用折线图。 |
| request\_status | 用于生成服务化采集数据不同时刻请求状态折线图。 |
| request | 用于在MindStudio Insight展示请求表格数据。 |
| batch\_exec | 用于反映batch和模型执行关系对应表。 |
| batch\_req | 用于反映batch和请求对应关系表。 |
| data\_table | 用于在MindStudio Insight展示表格数据。 |
| counter | 用于在trace图显示counter类数据。 |
| flow | 用于在trace图显示flow类数据。 |
| process | 用于在trace图显示二级泳道数据。 |
| thread | 用于在trace图显示三级泳道数据。 |
| slice | 用于在trace图显示色块数据。 |
| pd\_split\_kvcache | 用于在MindStudio Insight展示PD分离场景下D节点拉取kvcache表格数据（只在PD分离场景下涉及）。 |
| pd\_split\_communication | 用于在MindStudio Insight展示PD分离场景下PD节点通信的表格数据（只在PD分离场景下涉及）。 |
| ep\_balance | 记录DeepSeek专家模型服务化推理时，基于MSPTI采集的GroupedMatmul算子负载不均的分析结果。 |
| moe\_analysis | 记录DeepSeek专家模型服务化推理时，基于MSPTI采集的MoeDistributeCombine算子和MoeDistributeDispatch算子快慢卡分析结果。 |
| data\_link | 用于在trace图显示forward的时候支持单击rid显示请求输入长度信息。 |


PD分离部署场景及概念详细介绍请参见《MindIE Motor开发指南》中的“集群服务部署 > PD分离服务部署”章节。

此文件主要用于可视化阶段连接Grafana展示图像，不对各表项细节做具体解释说明。


#### chrome_tracing.json

记录推理服务化请求trace数据，可使用不同可视化工具进行查看，详细介绍请参见数据可视化。


#### batch.csv

记录服务化推理batch为粒度的详细数据。


**表3 batch.csv**

| 字段 | 说明 |
| --- | --- |
| name | 用于区分组batch和执行batch。 name为batchFrameworkProcessing表示组batch；name为modelExec表示执行batch。 |
| res\_list | batch组合情况。 |
| start\_time | 组batch或执行batch的开始时间。 |
| end\_time | 组batch或执行batch的结束时间。 |
| batch\_type | batch中的请求状态（prefill和decode）。 |
| during\_time(ms) | 执行时间，单位ms。 |
| prof\_id | 标识不同的卡。对于相同的卡，该字段值相同。 |
| total\_batch\_size | 记录组batch过程中的总batch大小。 |
| total\_blocks | 记录KVCache总内存块的数量，从原始TotalBlocks获取。 |
| used\_blocks | 记录调度后实际占用内存块的数量，计算方式total\_blocks \- free\_blocks。 |
| free\_blocks | 记录调度执行后剩余可用内存块的数量，从原始FreeBlocksAfter字段获取。 |
| blocks\_allocated | 记录本次调度操作消耗的KVCache资源，计算方式FreeBlocksBefore \- FreeBlocksAfter。 |
| blocks\_freed | 记录的是本次调度操作释放的KVCache资源，计算方式FreeBlocksAfter \- FreeBlocksBefore。 |
| kvcache\_usage\_rate | 计算本次调度过程中KVCache的内存使用百分比，计算方式used\_blocks / total\_blocks。 |
| prefill\_batch\_size | 记录调度过程中prefill阶段的batch大小。 |
| decode\_batch\_size | 记录调度过程中decode阶段的batch大小。 |
| prefill\_scheduled\_tokens | 记录调度过程中prefill占用的token数。 |
| decode\_scheduled\_tokens | 记录调度过程中decode占用的token数。 |
| total\_scheduled\_tokens | 记录调度过程中的总token数。 |
| dp\_rank | 标识batch的DP信息。对于相同的DP域，该字段值相同。 |


#### kvcache.csv

记录推理过程的显存使用情况。


**表4 kvcache.csv**

| 字段 | 说明 |
| --- | --- |
| domain | 标注KVCache事件。 |
| name | 具体改变显存使用的方法。 |
| start\_time | 发生显存使用情况变更的时间。 |
| total\_blocks | 记录KVCache总内存块的数量，从原始TotalBlocks获取。 |
| used\_blocks | 记录调度后实际占用内存块的数量，计算方式total\_blocks \- free\_blocks。 |
| free\_blocks | 记录调度执行后剩余可用内存块的数量，从原始FreeBlocksAfter字段获取。 |
| blocks\_allocated | 记录本次调度操作消耗的KVCache资源，计算方式FreeBlocksBefore \- FreeBlocksAfter。 |
| blocks\_freed | 记录本次调度操作释放的KVCache资源，计算方式FreeBlocksAfter \- FreeBlocksBefore。 |
| kvcache\_usage\_rate | 计算本次调度过程中KVCache的内存使用百分比，计算方式used\_blocks / total\_blocks。 |


#### request.csv

记录服务化推理请求为粒度的详细数据。


**表5 request.csv**

| 字段 | 说明 |
| --- | --- |
| http\_rid | HTTP请求ID。 |
| start\_datetime | 请求到达的时间。 |
| recv\_token\_size | 请求的输入长度。 |
| reply\_token\_size | 请求的输出长度。 |
| execution\_time(ms) | 请求端到端耗时，单位ms。 |
| queue\_wait\_time(ms) | 请求在整个推理过程中在队列中等待的时间，这里包括waiting状态和pending状态的时间，单位ms。 |
| first\_token\_latency(ms) | 首Token时延，单位ms。 |
| cache\_hit\_rate | 缓存命中率。 |


#### forward.csv

记录服务化推理模型前向执行过程的详细数据。


**表6 forward.csv**

| 字段 | 说明 |
| --- | --- |
| name | 标注forward事件，代表模型前向执行过程。 |
| relative\_start\_time(ms) | 每台机器上forward与第一个forward之间的时间。 |
| start\_time | forward的开始时间。 |
| end\_time | forward的结束时间。 |
| during\_time(ms) | forward的执行时间，单位ms。 |
| bubble\_time(ms) | forward之间的空泡时间，单位ms。 |
| batch\_size | forward处理的请求数量。 |
| batch\_type | forward中的请求状态。 |
| forward\_iter | 不同卡上forward的迭代序号。 |
| dp\_rank | 标识forward的DP信息，相同DP域该列的值相同。 |
| prof\_id | 标识不同卡，相同的卡该列的值相同。 |
| hostname | 标识不同机器，相同机器该列的值相同。 |


#### pd_split_communication.csv

PD分离部署场景通信类数据。PD分离部署场景属于多机多卡（集群）场景之一，需要在2时使用共享配置文件。

PD分离部署场景及概念详细介绍请参见《MindIE Motor开发指南》中的“集群服务部署 > PD分离服务部署”章节。


**表7 pd_split_communication.csv**

| 字段 | 说明 |
| --- | --- |
| rid | 请求ID。 |
| http\_req\_time(ms) | 请求到达时间，单位ms。 |
| send\_request\_time(ms) | P节点开始向D节点发送请求时间，单位ms。 |
| send\_request\_succ\_time(ms) | 请求发送成功时间，单位ms。 |
| prefill\_res\_time(ms) | prefill执行完成时间，单位ms。 |
| request\_end\_time(ms) | 请求执行完毕的时间，单位ms。 |


#### pd_split_kvcache.csv

记录PD分离推理过程的KVCache在PD节点间的传输情况。PD分离部署场景属于多机多卡（集群）场景之一，需要在数据采集时使用共享配置文件。

PD分离部署场景及概念详细介绍请参见《MindIE Motor开发指南》中的“集群服务部署 > PD分离服务部署”章节。


**表8 pd_split_kvcache.csv**

| 字段 | 说明 |
| --- | --- |
| domain | 标注PullKVCache事件。 |
| rank | 设备ID。 |
| rid | 请求ID。 |
| block\_tables | block\_tables信息。 |
| seq\_len | 请求长度。 |
| during\_time(ms) | KVCache从P节点传输到D节点的执行时间，单位ms。 |
| start\_datetime(ms) | KVCache从P节点传输到D节点的开始时间，显示为具体日期，单位ms。 |
| end\_datetime(ms) | KVCache从P节点传输到D节点的结束时间，显示为具体日期，单位ms。 |
| start\_time(ms) | KVCache从P节点传输到D节点的开始时间，显示为时间戳，单位ms。 |
| end\_time(ms) | KVCache从P节点传输到D节点的结束时间，显示为时间戳，单位ms。 |


#### coordinator.csv

记录PD分离推理过程的请求分发到各个节点数量变化情况。PD分离部署场景属于多机多卡（集群）场景之一，需要在数据采集时使用共享配置文件。

PD分离部署场景及概念详细介绍请参见《MindIE Motor开发指南》中的“集群服务部署 > PD分离服务部署”章节。


**表9 coordinator.csv**

| 字段 | 说明 |
| --- | --- |
| time | 请求数量变化的时刻。 |
| address | 分发给节点的地址。格式为：IP地址:端口号。 |
| node\_type | 节点的类型。prefill或decode。 |
| add\_count | 当前节点增加的请求数量。 |
| end\_count | 当前节点结束的请求数量。 |
| running\_count | 当前节点正在运行的请求数量。 |


#### ep_balance.csv

记录DeepSeek专家模型服务化推理时，基于MSPTI采集的GroupedMatmul算子负载不均的分析结果。

只要有ep_balance分析能力对应的数据，执行解析命令，结果目录下默认会生成该分析结果的热力图图1，图中横轴为各个Device对应的Process ID，纵轴为模型的Decoder Layer层。图中像素点越亮说明耗时越久，各行色差越大说明负载不均现象越明显。


**表10 ep_balance.csv**

| 字段 | 说明 |
| --- | --- |
| <Process ID>（行表头） | 该文件中的行表头显示的是各个Device运行时的进程ID。 |
| <Decoder Layer>（列取值） | 该文件中的列取值为各个Device运行的模型Decoder Layer层的序号。 |


图1 ep_balance.png


#### moe_analysis.csv

记录DeepSeek专家模型服务化推理时，基于MSPTI采集的MoeDistributeCombine算子和MoeDistributeDispatch算子快慢卡分析结果。

只要有moe_analysis分析能力对应的数据，执行解析命令，结果目录下默认会生成该分析结果的箱型图图2，图中横轴为各个Device对应的Process ID，纵轴为耗时之和。图中展示耗时之和的均值和上下2.5%分位点，各个卡之间差距越大，上下分位点间隔越远，说明快慢卡现象越明显。


**表11 moe_analysis.csv**

| 字段 | 说明 |
| --- | --- |
| Dataset | 对应Device的Process ID。 |
| Mean | 该Device上MoeDistributeCombine算子和MoeDistributeDispatch算子的耗时之和的平均值。 |
| CI Lower | 该Device上MoeDistributeCombine算子和MoeDistributeDispatch算子之和的下2.5%分位数。 |
| CI Upper | 该Device上MoeDistributeCombine算子和MoeDistributeDispatch算子之和的上2.5%分位数。 |


图2 moe_analysis.png


#### request_status.csv

统计服务化推理过程中，各个时刻的请求状态（处于waiting、running或swapped状态的请求个数）。可以根据统计的数据，绘制折线图，反映请求状态的变化趋势。


**表12 request_status.csv**

| 字段 | 说明 |
| --- | --- |
| hostuid | 节点ID。 |
| pid | 进程ID。 |
| timestamp(ms) | 时间戳，单位ms。 |
| relative\_timestamp(ms) | 相对时间戳，单位ms。 |
| waiting | 处于waiting状态的请求个数。 |
| running | 处于running状态的请求个数。 |
| swapped | 处于swapped状态的请求个数。 |


#### {host_name}_eplb_{i}_summed_hot_map_by_expert.png

专家热点信息热力图，图3中的像素点可以根据右侧图例的亮度判断，亮度越高代表热度越高。

- host_name表示所在的设备名称。
- i表示MindIE开启动态负载均衡场景时，服务化profiling采集周期内，负载均衡表更新的次数；不开启动态负载均衡时，i为0。

图3 热力图

横轴为专家编号，纵轴代表模型的moe层。

专家编号为模型实例中，Rank_id从小到大排序，每个Rank内按照顺序进行编号，例如16张卡，每张卡17个专家，专家编号为42的专家代表Rank_2（第三张卡）的expert_7（第8个专家）。


#### {host_name}_eplb_{i}_summed_hot_map_by_rank.png

专家热点信息热力图，图4中的像素点可以根据右侧图例的亮度判断，亮度越高代表热度越高。

- host_name表示所在的设备名称。
- i表示MindIE开启动态负载均衡场景时，服务化profiling采集周期内，负载均衡表更新的次数；不开启动态负载均衡时，i为0。

图4 热力图

横轴为Rank_ID，纵轴代表模型的moe层。


#### {host_name}_eplb_{i}_summed_hot_map_by_model_expert.png

专家热点信息热力图，图5中的像素点可以根据右侧图例的亮度判断，亮度越高代表热度越高。

- host_name表示所在的设备名称。
- i表示MindIE开启动态负载均衡场景时，服务化profiling采集周期内，负载均衡表更新的次数；不开启动态负载均衡时，i为0。
- 该图需要开启MindIE的动态负载均衡特性才会生成。

图5 热力图

横轴为模型的专家编号，其中共享专家编号排列在最后，纵轴代表模型的MoE层。


#### {host_name}_balance_ratio.png

专家负载不均折线图，图6从时间维度上展示模型专家负载不均的程度。

图6 专家负载不均折线图

横坐标tokens num表示模型推理的轮数，纵坐标balance ratio表示基于专家热度使用标准差统计得出的模型负载不均的程度。

图中红色虚线表示模型在该时刻发生了专家负载均衡表的变化，对应的横坐标表示系统的本地时间。因为不同设备上的本地时间存在误差，模型运行时各个卡的任务流也会存在不同步的现象，展示的时间是取均值的结果，建议用户在采集前确保所有设备的本地时间保持同步。
