msprof-mcp 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- msprof_mcp-0.1.0/.gitignore +12 -0
- msprof_mcp-0.1.0/.python-version +1 -0
- msprof_mcp-0.1.0/PKG-INFO +101 -0
- msprof_mcp-0.1.0/README.md +89 -0
- msprof_mcp-0.1.0/pyproject.toml +22 -0
- msprof_mcp-0.1.0/src/msprof_mcp/__init__.py +0 -0
- msprof_mcp-0.1.0/src/msprof_mcp/server.py +58 -0
- msprof_mcp-0.1.0/src/msprof_mcp/tools/__init__.py +0 -0
- msprof_mcp-0.1.0/src/msprof_mcp/tools/csv_analyze.py +886 -0
- msprof_mcp-0.1.0/src/msprof_mcp/tools/json_analyze.py +421 -0
- msprof_mcp-0.1.0/src/msprof_mcp/tools/msprof_analyze_cmd.py +34 -0
- msprof_mcp-0.1.0/src/msprof_mcp/tools/trace_view/__init__.py +1 -0
- msprof_mcp-0.1.0/src/msprof_mcp/tools/trace_view/connection_manager.py +338 -0
- msprof_mcp-0.1.0/src/msprof_mcp/tools/trace_view/perfetto_tool.py +525 -0
- msprof_mcp-0.1.0/src/msprof_mcp/tools/trace_view/query_helpers.py +198 -0
- msprof_mcp-0.1.0/src/msprof_mcp/tools/trace_view/trace_view_analyze.py +179 -0
- msprof_mcp-0.1.0/uv.lock +1060 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.13
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: msprof-mcp
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: MCP server for Ascend Profiler (msprof) analysis
|
|
5
|
+
Author-email: Wei Zhang <example@example.com>
|
|
6
|
+
Requires-Python: >=3.10
|
|
7
|
+
Requires-Dist: mcp[cli]>=1.26.0
|
|
8
|
+
Requires-Dist: msprof-analyze>=8.2.0
|
|
9
|
+
Requires-Dist: pandas>=2.0.0
|
|
10
|
+
Requires-Dist: perfetto>=0.16.0
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
|
|
13
|
+
# msprof mcp
|
|
14
|
+
|
|
15
|
+
## 简介
|
|
16
|
+
msprof mcp 是一个基于 Model Context Protocol (MCP) 的服务器,旨在为大语言模型 (LLM) 提供分析 Ascend PyTorch Profiler 采集性能数据的能力。通过一系列内置工具,它可以帮助用户快速定位性能瓶颈、分析算子耗时、查看通信开销以及进行 Trace 数据的深度查询。
|
|
17
|
+
|
|
18
|
+
## 目录结构
|
|
19
|
+
```
|
|
20
|
+
msprof_mcp/
|
|
21
|
+
├── server.py # MCP 服务器入口,负责注册和分发工具调用
|
|
22
|
+
├── tools/
|
|
23
|
+
│ ├── msprof_analyze_cmd.py # 封装 msprof-analyze 命令行工具
|
|
24
|
+
│ ├── csv_analyze.py # CSV 格式性能数据分析工具 (Kernel Details, Op Statistic)
|
|
25
|
+
│ ├── json_analyze.py # JSON 格式性能数据分析工具 (Profiler Info, Communication)
|
|
26
|
+
│ └── trace_view/ # Trace View 深度分析工具集
|
|
27
|
+
│ ├── trace_view_analyze.py # Trace View 分析入口
|
|
28
|
+
│ ├── perfetto_tool.py # Perfetto SQL 查询核心逻辑
|
|
29
|
+
│ ├── connection_manager.py # 数据库连接管理
|
|
30
|
+
│ └── query_helpers.py # SQL 查询辅助函数
|
|
31
|
+
└── README.md
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## MCP 能力说明
|
|
35
|
+
|
|
36
|
+
本服务提供以下核心能力,支持多维度性能数据分析。您可以直接在对话中使用自然语言(如示例 Prompt)来调用这些工具。
|
|
37
|
+
|
|
38
|
+
### 1. 总体分析 (msprof-analyze)
|
|
39
|
+
|
|
40
|
+
| 工具名称 | 描述 | 示例 Prompt |
|
|
41
|
+
| :--- | :--- | :--- |
|
|
42
|
+
| `msprof_analyze_advisor` | 调用 `msprof-analyze advisor` 提供全方位性能建议(计算/调度瓶颈)。 | "分析 `/path/to/data` 目录下的性能数据,找出主要瓶颈。" |
|
|
43
|
+
|
|
44
|
+
### 2. TimeLine 分析 (trace_view)
|
|
45
|
+
|
|
46
|
+
| 工具名称 | 描述 | 示例 Prompt |
|
|
47
|
+
| :--- | :--- | :--- |
|
|
48
|
+
| `analyze_overlap` | 分析计算、通信与调度的重叠情况,判断负载特征(计算/通信密集型)。 | "分析 `/path/to/trace_view.json` 的计算和通信重叠情况。" |
|
|
49
|
+
| `find_slices` | 搜索 Trace 中的特定 Slice(算子/函数),支持模糊匹配和时间范围过滤。 | "在 `/path/to/trace_view.json` 中查找所有 'MatMul' 算子。" |
|
|
50
|
+
| `execute_sql_query` | 执行自定义 SQL 查询,支持 Slice/Thread/Process 等表的深度分析。 | "对 `/path/to/trace_view.json` 执行 SQL 查询,统计耗时超过 1ms 的 Slice 数量。" |
|
|
51
|
+
|
|
52
|
+
### 3. 算子性能分析 (CSV)
|
|
53
|
+
|
|
54
|
+
| 工具名称 | 描述 | 示例 Prompt |
|
|
55
|
+
| :--- | :--- | :--- |
|
|
56
|
+
| `analyze_kernel_details` | 分析 `kernel_details.csv`,提供耗时分布、Top N 算子、设备分布等。 | "分析 `/path/to/kernel_details.csv`,列出耗时最长的 10 个算子。" |
|
|
57
|
+
| `get_operator_details` | 查询特定算子(按名称或类型)的详细执行信息。 | "从 `/path/to/kernel_details.csv` 中获取 'FlashAttention' 算子的详细信息。" |
|
|
58
|
+
| `analyze_op_statistic` | 分析 `op_statistic.csv`,提供调用次数、总耗时及 Core 类型分布。 | "统计 `/path/to/op_statistic.csv` 中的算子调用次数和总耗时。" |
|
|
59
|
+
| `get_op_type_details` | 查询特定类型算子或 Core 类型算子的详细统计数据。 | "查看 `/path/to/op_statistic.csv` 中所有 'AI_CORE' 类型的算子统计。" |
|
|
60
|
+
| `search_csv_by_field` | 通用 CSV 字段搜索工具,支持按列值过滤。 | "在 `/path/to/file.csv` 的 'Name' 列中搜索包含 'Conv' 的行。" |
|
|
61
|
+
|
|
62
|
+
### 4. 通信性能分析 (JSON)
|
|
63
|
+
|
|
64
|
+
| 工具名称 | 描述 | 示例 Prompt |
|
|
65
|
+
| :--- | :--- | :--- |
|
|
66
|
+
| `analyze_communication` | 分析 `communication_matrix.json`,识别 P2P/集合通信瓶颈及慢链路。 | "分析 `/path/to/communication_matrix.json`,找出带宽利用率低的链路。" |
|
|
67
|
+
| `analyze_communication_trace` | 分析 `communication.json`,提供通信操作的时间分解(Transit, Wait)和带宽详情。 | "分析 `/path/to/communication.json`,查看通信操作的等待时间分布。" |
|
|
68
|
+
|
|
69
|
+
### 5. 配置信息查询
|
|
70
|
+
|
|
71
|
+
| 工具名称 | 描述 | 示例 Prompt |
|
|
72
|
+
| :--- | :--- | :--- |
|
|
73
|
+
| `get_profiler_config` | 获取 `profiler_info.json` 中的配置信息(版本、软硬件环境)。 | "读取 `/path/to/profiler_info.json`,查看 Profiler 配置版本。" |
|
|
74
|
+
|
|
75
|
+
## 集成方法
|
|
76
|
+
|
|
77
|
+
### 场景一:集成到 Cherry Studio
|
|
78
|
+
在 Cherry Studio 的 MCP 配置 JSON 中添加如下配置:
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"mcpServers": {
|
|
83
|
+
"msprof-mcp": {
|
|
84
|
+
"name": "msprof_mcp",
|
|
85
|
+
"description": "msprof mcp server",
|
|
86
|
+
"baseUrl": "",
|
|
87
|
+
"command": "uv",
|
|
88
|
+
"args": [
|
|
89
|
+
"run",
|
|
90
|
+
"server.py"
|
|
91
|
+
],
|
|
92
|
+
"env": {},
|
|
93
|
+
"isActive": true,
|
|
94
|
+
"type": "stdio",
|
|
95
|
+
"registryUrl": "",
|
|
96
|
+
"timeout": "6000",
|
|
97
|
+
"longRunning": true
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
```
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# msprof mcp
|
|
2
|
+
|
|
3
|
+
## 简介
|
|
4
|
+
msprof mcp 是一个基于 Model Context Protocol (MCP) 的服务器,旨在为大语言模型 (LLM) 提供分析 Ascend PyTorch Profiler 采集性能数据的能力。通过一系列内置工具,它可以帮助用户快速定位性能瓶颈、分析算子耗时、查看通信开销以及进行 Trace 数据的深度查询。
|
|
5
|
+
|
|
6
|
+
## 目录结构
|
|
7
|
+
```
|
|
8
|
+
msprof_mcp/
|
|
9
|
+
├── server.py # MCP 服务器入口,负责注册和分发工具调用
|
|
10
|
+
├── tools/
|
|
11
|
+
│ ├── msprof_analyze_cmd.py # 封装 msprof-analyze 命令行工具
|
|
12
|
+
│ ├── csv_analyze.py # CSV 格式性能数据分析工具 (Kernel Details, Op Statistic)
|
|
13
|
+
│ ├── json_analyze.py # JSON 格式性能数据分析工具 (Profiler Info, Communication)
|
|
14
|
+
│ └── trace_view/ # Trace View 深度分析工具集
|
|
15
|
+
│ ├── trace_view_analyze.py # Trace View 分析入口
|
|
16
|
+
│ ├── perfetto_tool.py # Perfetto SQL 查询核心逻辑
|
|
17
|
+
│ ├── connection_manager.py # 数据库连接管理
|
|
18
|
+
│ └── query_helpers.py # SQL 查询辅助函数
|
|
19
|
+
└── README.md
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## MCP 能力说明
|
|
23
|
+
|
|
24
|
+
本服务提供以下核心能力,支持多维度性能数据分析。您可以直接在对话中使用自然语言(如示例 Prompt)来调用这些工具。
|
|
25
|
+
|
|
26
|
+
### 1. 总体分析 (msprof-analyze)
|
|
27
|
+
|
|
28
|
+
| 工具名称 | 描述 | 示例 Prompt |
|
|
29
|
+
| :--- | :--- | :--- |
|
|
30
|
+
| `msprof_analyze_advisor` | 调用 `msprof-analyze advisor` 提供全方位性能建议(计算/调度瓶颈)。 | "分析 `/path/to/data` 目录下的性能数据,找出主要瓶颈。" |
|
|
31
|
+
|
|
32
|
+
### 2. TimeLine 分析 (trace_view)
|
|
33
|
+
|
|
34
|
+
| 工具名称 | 描述 | 示例 Prompt |
|
|
35
|
+
| :--- | :--- | :--- |
|
|
36
|
+
| `analyze_overlap` | 分析计算、通信与调度的重叠情况,判断负载特征(计算/通信密集型)。 | "分析 `/path/to/trace_view.json` 的计算和通信重叠情况。" |
|
|
37
|
+
| `find_slices` | 搜索 Trace 中的特定 Slice(算子/函数),支持模糊匹配和时间范围过滤。 | "在 `/path/to/trace_view.json` 中查找所有 'MatMul' 算子。" |
|
|
38
|
+
| `execute_sql_query` | 执行自定义 SQL 查询,支持 Slice/Thread/Process 等表的深度分析。 | "对 `/path/to/trace_view.json` 执行 SQL 查询,统计耗时超过 1ms 的 Slice 数量。" |
|
|
39
|
+
|
|
40
|
+
### 3. 算子性能分析 (CSV)
|
|
41
|
+
|
|
42
|
+
| 工具名称 | 描述 | 示例 Prompt |
|
|
43
|
+
| :--- | :--- | :--- |
|
|
44
|
+
| `analyze_kernel_details` | 分析 `kernel_details.csv`,提供耗时分布、Top N 算子、设备分布等。 | "分析 `/path/to/kernel_details.csv`,列出耗时最长的 10 个算子。" |
|
|
45
|
+
| `get_operator_details` | 查询特定算子(按名称或类型)的详细执行信息。 | "从 `/path/to/kernel_details.csv` 中获取 'FlashAttention' 算子的详细信息。" |
|
|
46
|
+
| `analyze_op_statistic` | 分析 `op_statistic.csv`,提供调用次数、总耗时及 Core 类型分布。 | "统计 `/path/to/op_statistic.csv` 中的算子调用次数和总耗时。" |
|
|
47
|
+
| `get_op_type_details` | 查询特定类型算子或 Core 类型算子的详细统计数据。 | "查看 `/path/to/op_statistic.csv` 中所有 'AI_CORE' 类型的算子统计。" |
|
|
48
|
+
| `search_csv_by_field` | 通用 CSV 字段搜索工具,支持按列值过滤。 | "在 `/path/to/file.csv` 的 'Name' 列中搜索包含 'Conv' 的行。" |
|
|
49
|
+
|
|
50
|
+
### 4. 通信性能分析 (JSON)
|
|
51
|
+
|
|
52
|
+
| 工具名称 | 描述 | 示例 Prompt |
|
|
53
|
+
| :--- | :--- | :--- |
|
|
54
|
+
| `analyze_communication` | 分析 `communication_matrix.json`,识别 P2P/集合通信瓶颈及慢链路。 | "分析 `/path/to/communication_matrix.json`,找出带宽利用率低的链路。" |
|
|
55
|
+
| `analyze_communication_trace` | 分析 `communication.json`,提供通信操作的时间分解(Transit, Wait)和带宽详情。 | "分析 `/path/to/communication.json`,查看通信操作的等待时间分布。" |
|
|
56
|
+
|
|
57
|
+
### 5. 配置信息查询
|
|
58
|
+
|
|
59
|
+
| 工具名称 | 描述 | 示例 Prompt |
|
|
60
|
+
| :--- | :--- | :--- |
|
|
61
|
+
| `get_profiler_config` | 获取 `profiler_info.json` 中的配置信息(版本、软硬件环境)。 | "读取 `/path/to/profiler_info.json`,查看 Profiler 配置版本。" |
|
|
62
|
+
|
|
63
|
+
## 集成方法
|
|
64
|
+
|
|
65
|
+
### 场景一:集成到 Cherry Studio
|
|
66
|
+
在 Cherry Studio 的 MCP 配置 JSON 中添加如下配置:
|
|
67
|
+
|
|
68
|
+
```json
|
|
69
|
+
{
|
|
70
|
+
"mcpServers": {
|
|
71
|
+
"msprof-mcp": {
|
|
72
|
+
"name": "msprof_mcp",
|
|
73
|
+
"description": "msprof mcp server",
|
|
74
|
+
"baseUrl": "",
|
|
75
|
+
"command": "uv",
|
|
76
|
+
"args": [
|
|
77
|
+
"run",
|
|
78
|
+
"server.py"
|
|
79
|
+
],
|
|
80
|
+
"env": {},
|
|
81
|
+
"isActive": true,
|
|
82
|
+
"type": "stdio",
|
|
83
|
+
"registryUrl": "",
|
|
84
|
+
"timeout": "6000",
|
|
85
|
+
"longRunning": true
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
```
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "msprof-mcp"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "MCP server for Ascend Profiler (msprof) analysis"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
requires-python = ">=3.10"
|
|
7
|
+
dependencies = [
|
|
8
|
+
"mcp[cli]>=1.26.0",
|
|
9
|
+
"perfetto>=0.16.0",
|
|
10
|
+
"pandas>=2.0.0",
|
|
11
|
+
"msprof-analyze>=8.2.0",
|
|
12
|
+
]
|
|
13
|
+
authors = [
|
|
14
|
+
{ name = "Wei Zhang", email = "example@example.com" }
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
[project.scripts]
|
|
18
|
+
msprof-mcp = "msprof_mcp.server:main"
|
|
19
|
+
|
|
20
|
+
[build-system]
|
|
21
|
+
requires = ["hatchling"]
|
|
22
|
+
build-backend = "hatchling.build"
|
|
File without changes
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
|
|
2
|
+
"""
|
|
3
|
+
FastMCP server entry point.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import logging
|
|
7
|
+
from mcp.server.fastmcp import FastMCP
|
|
8
|
+
from .tools.msprof_analyze_cmd import msprof_analyze_advisor
|
|
9
|
+
from .tools.trace_view.trace_view_analyze import TraceViewAnalyzeTool
|
|
10
|
+
from .tools.csv_analyze import KernelDetailsAnalyzer, OpStatisticAnalyzer, GenericCsvAnalyzer
|
|
11
|
+
from .tools.json_analyze import ProfilerInfoAnalyzer, CommunicationMatrixAnalyzer
|
|
12
|
+
# Import other tools here as needed in the future
|
|
13
|
+
|
|
14
|
+
logging.basicConfig(level=logging.INFO)
|
|
15
|
+
logger = logging.getLogger(__name__)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def create_server() -> FastMCP:
|
|
19
|
+
# Create an MCP server
|
|
20
|
+
mcp = FastMCP("msprof_mcp")
|
|
21
|
+
|
|
22
|
+
# Register tools
|
|
23
|
+
mcp.tool()(msprof_analyze_advisor)
|
|
24
|
+
|
|
25
|
+
# Initialize trace view analysis tool and register its methods
|
|
26
|
+
trace_view_tool = TraceViewAnalyzeTool()
|
|
27
|
+
mcp.tool()(trace_view_tool.find_slices)
|
|
28
|
+
mcp.tool()(trace_view_tool.execute_sql_query)
|
|
29
|
+
mcp.tool()(trace_view_tool.analyze_overlap)
|
|
30
|
+
|
|
31
|
+
# Initialize CSV analysis tools and register their methods
|
|
32
|
+
csv_analyzer = KernelDetailsAnalyzer()
|
|
33
|
+
mcp.tool()(csv_analyzer.analyze_kernel_details)
|
|
34
|
+
mcp.tool()(csv_analyzer.get_operator_details)
|
|
35
|
+
|
|
36
|
+
op_stat_analyzer = OpStatisticAnalyzer()
|
|
37
|
+
mcp.tool()(op_stat_analyzer.analyze_op_statistic)
|
|
38
|
+
mcp.tool()(op_stat_analyzer.get_op_type_details)
|
|
39
|
+
|
|
40
|
+
generic_csv_analyzer = GenericCsvAnalyzer()
|
|
41
|
+
mcp.tool()(generic_csv_analyzer.get_csv_info)
|
|
42
|
+
mcp.tool()(generic_csv_analyzer.search_csv_by_field)
|
|
43
|
+
|
|
44
|
+
profiler_info_analyzer = ProfilerInfoAnalyzer()
|
|
45
|
+
mcp.tool()(profiler_info_analyzer.get_profiler_config)
|
|
46
|
+
|
|
47
|
+
comm_matrix_analyzer = CommunicationMatrixAnalyzer()
|
|
48
|
+
mcp.tool()(comm_matrix_analyzer.analyze_communication)
|
|
49
|
+
|
|
50
|
+
return mcp
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def main():
|
|
54
|
+
mcp = create_server()
|
|
55
|
+
mcp.run(transport="stdio")
|
|
56
|
+
|
|
57
|
+
if __name__ == "__main__":
|
|
58
|
+
main()
|
|
File without changes
|