一键导入
log-diagnosis-pd-link-establishment
PD实例建链失败的日志诊断。当P节点与D节点之间的KVCache链路建立失败、卡住或反复重试时,通过日志定位根因。触发词:建链失败、建链卡住、link failed、建链超时、Link exception、内存注册失败、PD链路异常。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
PD实例建链失败的日志诊断。当P节点与D节点之间的KVCache链路建立失败、卡住或反复重试时,通过日志定位根因。触发词:建链失败、建链卡住、link failed、建链超时、Link exception、内存注册失败、PD链路异常。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | log-diagnosis-pd-link-establishment |
| description | PD实例建链失败的日志诊断。当P节点与D节点之间的KVCache链路建立失败、卡住或反复重试时,通过日志定位根因。触发词:建链失败、建链卡住、link failed、建链超时、Link exception、内存注册失败、PD链路异常。 |
| parent | log-diagnosis-framework |
PD实例建链是指Prefill(P)节点与Decode(D)节点之间建立KVCache传输链路的过程。建链由RouterImpl发起,经Config模块配置,由SeparateDeploymentWorker执行,底层调用LLMDataDist完成。
涉及仓库/组件:
典型异常表现:
关联问题:建链是缩P保D的下游环节,缩P保D流程中新D实例加入后需要建链。如果是缩P保D场景触发的建链失败,先查 log-diagnosis-shrink-p-reserve-d。
| 入口日志 | 组件 | 含义 | grep 命令 |
|---|---|---|---|
Link failed, error code is | mindie-llm | 底层建链返回失败 | grep "Link failed, error code" $LOG_DIR/*.log |
Link exception from | mindie-llm | 建链过程网络异常 | grep "Link exception" $LOG_DIR/*.log |
Mem status query failed | mindie-llm | 内存注册失败 | grep "Mem status query failed" $LOG_DIR/*.log |
Max query attempts reached | mindie-llm | 内存注册轮询超上限 | grep "Max query attempts reached" $LOG_DIR/*.log |
query link status failed | mindie-llm | 链路状态查询失败 | grep "query link status failed" $LOG_DIR/*.log |
failed_links=[1-9] | mindie-server | 有失败链路 | grep "failed_links=[1-9]" $LOG_DIR/*.log |
确认问题类型:如果入口日志命中,说明建链阶段出问题,继续诊断。
[入口] 建链相关错误日志出现
│
├── 阶段A: 配置与角色设置
│ ├── 有 "start to set PD link/unlink info" → 配置下发正常 ✓
│ │ ├── 有 "PD switch is True" → PD开关开启 ✓ → 继续建链流程
│ │ ├── 有 "PD switch is False" → PD开关关闭 → 检查是否本就应该关闭
│ │ └── 有 "Do not need to link and unlink" → 无需建链 → 确认角色和配置
│ └── 无配置下发日志 → 配置阶段异常 ✗ → 故障A1: 配置未下发
│
├── 阶段B: 解链(旧链路清理)
│ ├── 有 "Destroy all clusters kvcache link start" → 开始解链 ✓
│ │ ├── 有 "Destroy all clusters kvcache link finish" → 解链完成 ✓ → 继续建链
│ │ ├── 有 "Batch unlink results" 含失败项 → 批量解链部分失败 → 故障B1: 解链部分失败
│ │ └── 有 "process DMI unlink failed" → DMI解链失败 ✗ → 故障B2: DMI解链失败
│ └── 无解链日志 → 跳过解链(可能无旧链路)→ 继续建链
│
├── 阶段C: 底层建链调用
│ ├── 有 "Link succeeded with status: SUCCESS" → 建链成功 ✓ → 继续内存注册
│ ├── 有 "Link failed, error code is" → 建链失败 ✗ → 故障C1: 底层建链返回错误码
│ ├── 有 "Link exception from" → 建链异常 ✗ → 故障C2: 建链网络异常
│ ├── 有 "Link already exists" → 链路已存在 → 故障C3: 重复建链
│ └── 无任何Link结果日志 → 建链未执行 ✗ → 故障C4: 建链未触发
│
├── 阶段D: 内存注册轮询
│ ├── 有 "Query completed in" → 内存注册成功 ✓ → 继续状态确认
│ ├── 有 "Mem status query failed" → 内存注册失败 ✗ → 故障D1: 内存注册失败
│ ├── 有 "Max query attempts reached" → 轮询超限 → 故障D2: 内存注册超时
│ └── 有 "Querying mem status" 但无完成/失败 → 卡在轮询 ✗ → 故障D3: 内存注册卡住
│
├── 阶段E: 状态确认
│ ├── 有 "add_to_success" → 建链成功 ✓ → 继续角色就绪
│ ├── 有 "add_to_failed" → 建链失败 → 回查阶段C/D
│ ├── 有 "query link status result" 含waitting/running → 链路未完成 → 回查卡在哪
│ └── 有 "query link status failed" → 查询接口异常 ✗ → 故障E1: 状态查询失败
│
└── 阶段F: 角色就绪
├── 有 "Setting role status to READY" → 建链全部完成 ✓ → 诊断结束
├── 有 "Processing link status" 但无READY → 有链路未完成 → 回查
└── 无 "Processing link status" → 状态轮询未启动 ✗ → 故障F1: 状态轮询未启动
| 步骤 | 检查日志 | 预期结果 | 异常处理 | 下一阶段 |
|---|---|---|---|---|
| A.1 | grep "start to set PD link/unlink info" $LOG_DIR/*.log | 配置下发开始 | 无→检查postRole是否成功发送到llm侧 | 阶段B |
| A.2 | grep "PD switch is|PD remote link/unlink info|PD remote attr info|PD remote policy info" $LOG_DIR/*.log | PD开关和配置信息 | switch=False→检查角色配置是否正确 | 阶段B |
| A.3 | grep "Do not need to link and unlink|do not link with remote" $LOG_DIR/*.log | 无需建链时出现 | 如果不应出现→检查角色和rank配置 | 阶段B |
| A.4 | grep "Reset PD role finish|Is remote dp group across|role:.*tp_p|using link map" $LOG_DIR/*.log | 角色和并行配置 | link map异常→检查配置文件 | 阶段B |
| 步骤 | 检查日志 | 预期结果 | 异常处理 | 下一阶段 |
|---|---|---|---|---|
| B.1 | grep "start to process DMI link scenario|Destroy all clusters kvcache link start" $LOG_DIR/*.log | DMI建链流程启动,先解链 | 无解链→可能无旧链路,正常跳过 | 阶段C |
| B.2 | grep "Batch destroy clusters start|Batch unlink results" $LOG_DIR/*.log | 批量解链执行和结果 | 结果含失败项→检查失败的cluster_id | 阶段C |
| B.3 | grep "Destroy all clusters kvcache link finish|process DMI unlink failed" $LOG_DIR/*.log | 解链完成或失败 | DMI解链失败→旧链路残留,可能影响新建链 | 阶段C |
| 步骤 | 检查日志 | 预期结果 | 异常处理 | 下一阶段 |
|---|---|---|---|---|
| C.1 | grep "Create all clusters kvcache links start" $LOG_DIR/*.log | 新建链流程启动 | 无→解链阶段异常未完成,回查阶段B | 阶段D |
| C.2 | grep "Link params cluster_rank_info" $LOG_DIR/*.log | 建链参数准备完成 | 无→建链参数生成失败 | 阶段D |
| C.3 | grep "Link succeeded|Link failed|Link exception|Link already exists" $LOG_DIR/*.log | 建链结果 | 见决策树各分支 | 阶段D |
| C.4 | grep "add_to_waitting|add_to_running|add_to_failed" $LOG_DIR/*.log | 建链状态流转 | 直接failed→底层问题 | 阶段D |
| 步骤 | 检查日志 | 预期结果 | 异常处理 | 下一阶段 |
|---|---|---|---|---|
| D.1 | grep "Querying mem status" $LOG_DIR/*.log | 有轮询记录 | 无→建链可能未到running阶段 | 阶段E |
| D.2 | grep "Query completed in|Mem status query failed|Max query attempts" $LOG_DIR/*.log | 轮询结果 | 失败→见故障D1/D2 | 阶段E |
| D.3 | grep "add_to_success|add_to_failed" $LOG_DIR/*.log | 最终状态 | 全failed→确认是内存注册问题还是底层link问题 | 阶段E |
| D.4 | grep "Failed to unlink|Unlink failed" $LOG_DIR/*.log | 解链清理结果 | 解链失败→资源可能泄漏 | 阶段E |
| 步骤 | 检查日志 | 预期结果 | 异常处理 | 下一阶段 |
|---|---|---|---|---|
| E.1 | grep "global rank.*enter query link status" $LOG_DIR/*.log | 状态查询启动 | 无→查询未启动,检查RouterImpl | 阶段F |
| E.2 | grep "query link status result|QueryPDLinkStatus" $LOG_DIR/*.log | 查询结果 | "failed"→回查阶段C/D | 阶段F |
| E.3 | grep "Processing link status" $LOG_DIR/*.log | 链路状态汇总 | running/waitting>0→仍在进行中,等待 | 阶段F |
| 步骤 | 检查日志 | 预期结果 | 异常处理 | 下一阶段 |
|---|---|---|---|---|
| F.1 | grep "All links completed successfully|Setting role status to READY" $LOG_DIR/*.log | 角色就绪 | 无→有链路未完成,回查 | 完成 |
| F.2 | grep "Engine started and ready to accept requests" $LOG_DIR/*.log | 服务可用 | 无→引擎未启动,检查LlmEngine | 完成 |
| 日志现象 | 根因 | 修复方法 | 优先级 |
|---|---|---|---|
Link failed, error code is {code} | LLMDataDist底层返回错误码 | 根据错误码查表:检查rank_table、IP映射、对端进程 | P0 |
Link exception from {local} to {remote} | 网络异常(连接中断/超时) | 检查RDMA状态、网络连通性、防火墙 | P0 |
Mem status query failed 无retry | 对端NPU内存注册失败 | 登录对端检查NPU状态、内存使用 | P0 |
Max query attempts reached 后requeueing | 对端响应慢 | 检查对端负载、网络延迟、kv_link_timeout配置 | P1 |
Link already exists | 重复建链 | 检查是否解链不彻底,先手动解链再重建 | P2 |
process DMI unlink failed | 旧链路清理失败 | 检查底层资源状态,可能需重启 | P1 |
query link status failed | 状态查询接口异常 | 检查LLMManager和底层连接 | P1 |
Batch unlink results 含失败项 | 批量解链部分失败 | 逐个检查失败cluster_id对应的链路 | P1 |
| 无"Create all clusters kvcache links start" | 解链阶段未完成或配置错误 | 回查解链阶段和PD配置 | P0 |
add_to_waitting 后无 add_to_running | 窗口线程未处理 | 检查_fill_window_worker线程是否存活 | P0 |
有add_to_running但无Querying mem status | 处理窗口线程未启动 | 检查_process_window_worker线程是否存活 | P0 |
现象:无"start to set PD link/unlink info" 根因:postRole请求未到达Config模块,或Config模块未解析 排查:
grep "enter process pdRole" $LOG_DIR/*.log — 确认pdRole入口是否到达grep "POST /v2/role" $LOG_DIR/*.log — 确认HTTP请求是否到达现象:Link failed, error code is {code}
根因:LLMDataDist底层建链失败,具体原因看错误码
排查:
cat /path/to/rank_table.jsonps aux | grep mindie,npu-smi info/var/log/llmdatadist/*.log现象:Link exception from {local_ip} to {remote_ip}: {exception}
根因:网络连接中断、超时或RDMA异常
排查:
ping {remote_ip}、traceroute {remote_ip}ibv_devinfo、rdma link showiptables -L -niperf3 -c {remote_ip}dmesg | grep -i network现象:Link already exists with status: ALREADY_LINK
根因:链路已存在,可能是上次建链未解链
排查:
现象:有"Create all clusters kvcache links start"但无Link相关日志 根因:SeparateDeploymentWorker未执行建链,或队列未处理 排查:
add_to_waitting是否有记录现象:Mem status query failed for {remote_ip}, no retry.
根因:对端NPU内存状态异常,无法完成内存注册
排查:
npu-smi infonpu-smi det -t usages -i 0dmesg | grep "Out of memory"cat /proc/driver/npu/infodmesg | grep -i "memory\|register"现象:Max query attempts reached for {remote_ip}, requeueing
根因:对端响应慢,内存注册未在预期时间内完成
排查:
top、iostat -x 1ping -c 10 {remote_ip}grep "Querying mem status" $LOG_DIR/*.log现象:有"Querying mem status"持续输出但无完成/失败 根因:_process_window_worker卡在轮询循环 排查:
现象:query link status failed
根因:QueryPDLinkStatus接口异常
排查:
grep "QueryPDLinkStatus" $LOG_DIR/*.log — 检查查询接口lsof | grep mindie现象:建链成功后无"Processing link status"汇总 根因:RouterImpl的定时查询未启动 排查:
grep "global rank.*enter query link status" $LOG_DIR/*.log# 变量设置
LOG_DIR=/var/log/mindie # 根据实际环境修改
# 1. 建链整体状态
grep -E "Link (succeeded|failed|exception|already exists)|add_to_(success|failed|running|waitting)" $LOG_DIR/*.log
# 2. 内存注册状态
grep -E "Querying mem status|Query completed|Mem status query failed|Max query attempts" $LOG_DIR/*.log
# 3. 链路状态查询
grep -E "query link status|Processing link status|QueryPDLinkStatus" $LOG_DIR/*.log
# 4. 解链状态
grep -E "Destroy all clusters|Batch (destroy|unlink)|process DMI unlink" $LOG_DIR/*.log
# 5. PD配置
grep -E "PD (switch|remote|link/unlink)|start to set PD" $LOG_DIR/*.log
# 6. 角色就绪
grep -E "Setting role status to READY|Engine started and ready" $LOG_DIR/*.log
# 7. 快速统计建链成功/失败数
grep -c "add_to_success" $LOG_DIR/*.log
grep -c "add_to_failed" $LOG_DIR/*.log
| 关联问题 | 关联方向 | 对应 Skill |
|---|---|---|
| 缩P保D流程异常 | 上游 | log-diagnosis-shrink-p-reserve-d |
| Pull KV失败 | 下游 | - |
| NPU硬件故障 | 上游 | - |
| RDMA网络异常 | 并发 | - |
从代码仓提取指定特性的关键日志,生成「日志定位指南」Markdown(正文三层快速定位+分阶段+卡点速查,附录含特性链路全量日志表与 Mermaid)。不产出 CSV/9列表格关系图。触发词:整理{特性}日志定位指南、生成{特性}日志定位指南、从代码整理{特性}定位指南。
日志标准规范的适配器层。根据外部标准文档执行日志质量检查,调用 scan / rewrite / write 能力。触发词:日志标准、日志规范、日志质量标准、log standard、log quality、制定日志规范。
Controller 精度告警触发的实例「自杀」(terminate) 失败日志诊断。当 precision auto-recovery 应杀 P/D 却未杀、terminate_instance_for_recovery 失败、或 Recovery/NodeManager stop 报错时, 按 Coordinator→Controller→Recovery→NodeManager 链路定位根因。触发词:controller自杀、自杀失败、 terminate失败、precision-auto-recover、精度告警恢复、terminate_instance、Recovery:、实例终止失败、 auto-recovery failed、add_alarm、0xFC001107。
大 EP 场景启动失败/拉不起来的日志诊断。当 Controller 或 Coordinator 无法到达 MindIE-MS coordinator is ready,或长期 not ready 时,按 cmotor 启动五阶段定位;PD 分离卡在就绪前则下钻 mindie-llm 建链。触发词:大EP拉不起来、大EP启动失败、大EP启动卡住、coordinator not ready、coordinator is ready、MindIE-MS coordinator is not ready、大EP起不来。
MindIE/cmotor 日志诊断调度器。接收 MindIE/PyMotor/cmotor 相关日志,自动判断问题方向并调度对应子 skill 诊断。触发词:日志诊断、日志分析、日志定位、故障定位、MindIE日志、PyMotor日志、大EP拉不起来、coordinator not ready。
将不合规的日志改写为符合 log-quality-standard 的版本。输入扫描报告,输出每条日志的修改前后对比(diff)和具体修改建议。触发词:重写日志、改写日志、日志整改、修复日志。