# LLM Deploy Planner 汇报材料
## 一、它是什么
LLM Deploy Planner 是一个 **Prompt-based 智能规划工具**,帮助规划 LLM 模型的推理部署方案。
```mermaid
graph LR
A[用户需求] --> B[LLM Deploy Planner]
B --> C[调用 llm-mem-estimator]
C --> D[生成部署方案]
```
---
## 二、工作原理
### 2.1 核心流程(5步法)
```mermaid
flowchart TD
A[收集用户输入] --> B[PD策略决策]
B --> C[遍历并行策略组合]
C --> D[验证显存约束]
D --> E[选择最优配置输出]
```
**输入信息**:
- 模型名称(Qwen-72B、Kimi-K2.5 等)
- 硬件配置(显存大小、单机卡数)
- 业务场景(RL、在线推理、Agent 等)
- 性能目标(TPS优先 / 时延优先)
### 2.2 PD 策略决策逻辑
```mermaid
flowchart TD
A{模型规模} -->|≤8B| E[PD混部]
A -->|>8B| B{业务场景}
B -->|RL/数据生产/Agent| E
B -->|在线推理/RAG| C{长度不平衡度}
C -->|imbalance < 0.7| E
C -->|≥0.7| F[PD分离]
```
**长度不平衡度计算**:
```
α = S_in / (S_in + k × S_out)
imbalance = max(α, 1-α)
```
### 2.3 与其他组件的协作
```mermaid
graph TD
subgraph llm_deploy_planner[LLM Deploy Planner]
P1[收集需求] --> P2[决策PD策略]
P2 --> P3[遍历并行策略]
P3 --> P4[调用llm-mem-estimator]
end
subgraph llm_mem_estimator[llm-mem-estimator skill]
M1[接收TP/EP/DP参数]
M1 --> M2[计算显存占用]
M2 --> M3[返回验证结果]
end
P4 --> M1
M3 --> P4
style llm_deploy_planner fill:#e1f5fe
style llm_mem_estimator fill:#fff3e0
```
---
## 三、能做什么(优点)
| 能力 | 说明 |
|------|------|
| **PD 混部/分离自动决策** | 根据场景、长度比自动选择最优部署模式 |
| **并行策略智能遍历** | 自动尝试 TP×EP×DP 组合,找到可行配置 |
| **xPyD 实例数计算** | PD 分离时输出具体实例配比(如 4P1D) |
| **多硬件支持** | H100-80GB、A100-80GB、Ascend-910B-64GB 等 |
| **Fallback 机制** | llm-mem-estimator 不可用时仍能手动估算 |
**实际效果**:
- 有 skill 辅助:Pass Rate **100%**
- 无 skill 辅助:Pass Rate **83.3%**(MoE 模型易出错)
---
## 四、什么不能做(局限性)
| 限制 | 说明 |
|------|------|
| **仅支持推理** | 不能用于模型训练场景 |
| **依赖 llm-mem-estimator** | 该 skill 不可用时,估算精度下降 |
| **约束条件复杂** | TP/EP/DP 必须是2的幂,EP ≤ MoE expert数 |
| **Decode 实例数固定** | PD 分离时 Decode 实例数 y=1,不可调 |
| **无动态调整** | 不支持运行时根据负载动态调整配置 |
---
## 五、输出示例
规划完成后输出标准 Markdown 报告,包含:
- 输入摘要
- PD 策略决策理由
- 显存分析明细
- 并行策略配置(TP/EP/DP/实例数)
- 实现注意事项
---
## 六、llm-mem-estimator 核心原理
### 6.1 模型配置获取方式
```mermaid
flowchart TD
A[用户输入] --> B{选择输入方式}
B -->|HuggingFace| C[从HuggingFace下载元数据]
B -->|本地权重目录| D[从本地safetensors提取]
B -->|预定义YAML| E[直接加载YAML配置]
C --> F[根据weight_mapping_rules.yaml
映射分类权重]
D --> F
F --> G[YAML配置]
E --> G
style C fill:#e3f2fd
style D fill:#fff3e0
style E fill:#e8f5e9
```
**三种输入方式最终都生成/使用同一个 YAML 配置文件**:
| 来源 | CLI参数 | 说明 |
|------|---------|------|
| HuggingFace | `--model Qwen/Qwen2-72B` | 在线下载 + weight_mapping_rules 分类 → YAML |
| 本地权重 | `--local /path/to/weights` | 本地提取 + weight_mapping_rules 分类 → YAML |
| 预定义YAML | `--config configs/models/Kimi-K2.5.yaml` | 直接使用 |
**weight_mapping_rules.yaml 的核心作用**:
- 将**原始权重名称**(如 `model.layers.0.self_attn.q_proj.weight`)
- 按**规则映射**为标准的**模块类型**(embedding、attention、ffn_moe、ffn_dense、norm等)
- 支持自定义 YAML 直接定义,绕过此规则
### 6.2 权重分类与并行策略映射
显存估算的核心:**不同层的权重应用不同的并行策略**
```mermaid
graph TD
subgraph 模型权重分类
E1[Embedding层] --> TP1[TP切分]
E2[Attention层] --> TP2[TP切分]
E3[FFN MoE层] --> EP1[EP切分]
E4[FFN Dense层] --> TP3[TP切分]
E5[共享专家] --> REP[全复制]
E6[Norm层] --> REP2[全复制]
end
style E1 fill:#e3f2fd
style E2 fill:#e3f2fd
style E3 fill:#fff3e0
style E4 fill:#e3f2fd
style E5 fill:#f3e5f5
style E6 fill:#f3e5f5
```
**典型映射规则**(来自 `weight_mapping_rules.yaml`):
| 权重类型 | 默认并行策略 | 说明 |
|----------|-------------|------|
| Embedding | TP | 词表维度切分 |
| Attention (Q/K/V/O) | TP | 注意力权重按TP切分 |
| FFN MoE Experts | **EP** | MoE专家按EP切分(关键!) |
| FFN Dense | TP | 前馈网络按TP切分 |
| 共享专家 | Replicated | 所有卡复制一份 |
| Norm层 | Replicated | 归一化层全复制 |
### 6.3 显存估算公式
```
总显存 = 权重(Weights) + KV Cache + 激活值(Activation) + 系统预留(2GB)
```
```mermaid
graph TD
A[总显存] --> B[权重 Weights
按并行策略切分]
A --> C[KV Cache
序列长度×层数×维度]
A --> D[激活值
batch×seq×hidden×系数]
A --> E[系统预留
2GB]
B --> B1[TP切分: /TP]
B --> B2[EP切分: /EP]
C --> C1[TP/CP切分]
```
### 6.4 并行策略显存分布
**约束公式**:`TP × DP = EP = 总卡数`
```mermaid
graph TD
subgraph 并行策略
TP["TP 张量并行"] --> A["切分注意力FFN权重"]
PP["PP 流水线并行"] --> B["切分层"]
EP["EP 专家并行"] --> C["切分MoE专家"]
CP["CP 上下文并行"] --> D["切分KV Cache和激活"]
DP["DP 数据并行"] --> E["全复制"]
end
TP --> F["显存减少至1/TP"]
EP --> G["显存减少至1/EP"]
PP --> H["显存减少至1/PP"]
CP --> I["主要影响KV Cache"]
```
### 6.5 PD 分离场景
```mermaid
flowchart LR
A[Prefill阶段] -->|prompt处理| B[激活系数 1.25]
A -->|序列长度| C[prompt_len + gen_len]
D[Decode阶段] -->|token生成| E[激活系数 12.5]
D -->|序列长度| F[固定 seq_len=1]
```
| 阶段 | 激活系数 | 序列长度 |
|------|----------|----------|
| Prefill/混部 | 1.25 | prompt_len + gen_len |
| Decode | 12.5 | 1 (固定) |
### 6.6 支持的注意力架构
| 类型 | 说明 |
|------|------|
| MHA | 多头注意力 |
| MQA | 多查询注意力 |
| GQA | 分组查询注意力 |
| MLA | DeepSeek专用潜在注意力 |
| SWA | 滑动窗口注意力 |
---
## 七、技术栈
```
LLM Deploy Planner (SKILL.md - Prompt驱动)
↓ 调用
llm-mem-estimator (GPU显存估算Skill)
↓ 调用
脚本层 (Python/YAML配置)
```