模型分析 Skill
适用范围
- 支持:
- Decoder-only LLM
- VLM 文本主干分析(仅 LLM/文本路径)
- 不支持:
- 既非 transformers 也非模型目录内
modeling_*.py的实现 - 多模态生成模型(图像/视频/语音生成)
- 既非 transformers 也非模型目录内
必需输入
- 模型路径或模型仓库标识
config.json- 可选:模型目录内
modeling_*.py、model.safetensors.index.json - 若本地缺少上述文件,先补齐输入:
- 使用
modelscope download --model <org>/<model> --local_dir ./models/<name> --exclude '*.safetensors'下载非权重文件。 - 在下载目录中读取
config.json与modeling_*.py,作为后续分析输入。
- 使用
硬门禁:先解析实现来源
在进行任何结构分析前必须完成。Agent 应按以下步骤手动解析,无需脚本:
-
读取
config.json:- 获取
model_type - 获取
auto_map(如有)
- 获取
-
尝试从 transformers 解析实现:
- 检查
transformers库是否支持该model_type。 - 检查路径:
transformers/models/<model_type>/modeling_<model_type>.py是否存在。 - 如果存在,记录为
transformers实现。
- 检查
-
若未解析到,尝试模型目录内实现:
- 检查
auto_map指向的文件是否存在于模型目录。 - 检查模型目录内是否有
modeling_*.py文件。 - 如果存在,记录为
model-local实现。
- 检查
-
若两种路径均不可用:
- 停止分析。
- 要求用户提供可读的模型实现代码。
最小工作流
- 解析实现来源(完成上述硬门禁)。
- 判断模型类型、结构差异与连接关系:
- 类型:纯 LLM / 多模态理解模型 / 多模态生成模型
- 对比常见 Qwen2 类 LLM,记录特殊结构设计(如 MoE、非标准 attention、SSM/混合块、额外头部或并行分支)
- 检查特殊结构连接关系(接入位置、前后依赖、串联/并联/残差连接、是否影响主干遍历)
- 识别结构特征:
- decoder 层类、attention/MLP 模块命名、forward 签名
- 确定影响适配的特征:
- 层遍历路径与顺序
- 是否存在内存约束导致需要逐层量化(可选高阶特性)
- MoE 融合专家权重风险
- 量化模型反量化脚本风险
- MTP 结构实现可得性与权重处理风险
- 产出结构化分析结果(参考下方模板)。
- 给出后续动作:
- 若判定为原生量化模型,优先进入
msmodelslim-model-dequant - 进入
model-adapt-core - 或阻塞并说明需用户提供的内容
- 若判定为原生量化模型,优先进入
模型类型、结构差异与连接关系判定(相对常见 Qwen2)
纯 LLM:仅文本 token 输入,主干为 decoder-only 语言模型。多模态理解模型:含视觉/音频等编码器,但生成路径以文本主干为核心,允许仅分析并适配文本部分。多模态生成模型:核心目标是图像/视频/语音生成,当前流程不支持,应直接阻塞并说明原因。- 结构差异只需记录“是否存在 + 影响方向”,不要求深入实现细节。
- 连接关系至少记录:特殊结构位于主干的哪个阶段、与哪些模块相连、连接方式(串联/并联/残差)及对遍历/forward 对齐的影响。
MoE 布局判定
MoE 非融合:专家按模块/列表展开(常见为每个 expert 各自持有gate/up/down线性层)。MoE 融合:多个 expert 的权重被打包为张量参数,不再是一组独立线性层。- 若看到
gate/up/down中任一或多项以[..., num_experts, ...]或[num_experts, ...]形式存储,应按“融合”处理。 - 对三维专家权重(如 gate/up/down 分别融合成 3D 参数)统一归类为
MoE 融合,并在报告中标注“可能需要 unpack”。
必需输出:分析报告
Agent 应直接生成分析报告(Markdown 格式),内容必须包含以下要素。请参考下方模板:
# 分析报告
## 模型标识
- 模型路径/仓库:{model_path}
- `model_type`:{model_type}
- `architectures`:{architectures}
## 实现来源解析
- 结果:`transformers` | `model-local` | `unsupported`
- 依据:
- 解析到的文件路径:{path}
- 相关配置字段(`model_type`、`auto_map`):{details}
## 模型特征与规格
- Hidden size:{hidden_size}
- 层数:{num_layers}
- Attention heads / KV heads:{num_heads} / {num_kv_heads}
- 是否仅分析 VLM 文本部分:是/否
## 模型类型、结构差异与连接关系
- 模型类型:纯 LLM | 多模态理解模型 | 多模态生成模型
- 相对常见 Qwen2 的特殊结构:{special_structures}
- 特殊结构连接关系:{special_structure_connections}
- 对适配流程的影响:{structure_impact}
## 逐层量化建议(可选高阶特性)
- 是否建议逐层量化:是/否
- 触发原因(如 CPU 内存无法全量加载权重):{reason}
- 约束(内存/运行环境):{constraints}
- 说明:逐层量化不是基础适配必需项,建议在基础适配与四步验证完成后再进入 `msmodelslim-layer-wise-quantization`
## MoE 评估
- 是否含 MoE:是/否
- 布局类型:无 MoE | MoE 非融合 | MoE 融合
- 疑似融合的键/模块:{keys}
- 专家权重形态:独立线性层 | 打包张量(含 3D 专家权重)
- 是否需要 unpack:是/否
## 适配影响要点
- Decoder 遍历路径:{traversal_path}
- Attention 模块命名:{attn_module}
- MLP 模块命名:{mlp_module}
- `visit/forward` 严格对齐点:{alignment_points}
## 量化与 MTP 风险评估
- 模型是否已量化:是/否
- 量化判定依据:{quant_evidence}
- 是否已提供反量化脚本:是/否
- 反量化脚本状态说明:{dequant_status}
- 是否存在 MTP 结构:是/否
- MTP 实现代码可获取性:可获取/不可获取
- MTP 风险说明:{mtp_risk}
## 风险与后续动作
- 风险等级:低 | 中 | 高
- 阻塞项:{blockers}
- 建议下一步:
- 进入 `model-adapt-core`
- 或要求用户提供实现代码
风险识别与用户沟通要求(必须执行)
- 若识别为“原生量化模型”(模型权重本身已量化),必须先调用
msmodelslim-model-dequantskill 再继续后续适配流程。 - 若识别为“模型本身已量化”,必须将“缺少反量化脚本”标记为阻塞项,并明确要求用户主动提供反量化脚本后再继续适配。
- 若识别到存在 MTP 结构但无法获取其实现代码,必须明确告知:
- Agent 可能无法完整实现 MTP 结构适配;
- 如需继续,用户需要自行复制 MTP 相关权重(按用户侧已有实现进行映射)。
- 上述两类风险至少有一项命中时,
风险等级不得低于“中”。
通过/失败标准
- 通过:实现来源为
transformers或model-local,模型类型为纯 LLM 或多模态理解模型,且报告完整;若命中量化/MTP 风险,已在报告中给出明确用户动作要求。 - 失败:来源未解析、为不支持的实现类型、判定为多模态生成模型,或命中“量化模型但无反量化脚本”阻塞条件。