运行时依赖
安装命令
点击复制技能文档
目标模型验证 同 env-verify 的同层剥离方法,但使用真实的目标模型,可能需要多 GPU 张量并行。运行模型两次(无多芯片堆栈和有多芯片堆栈),并比较结果以隔离故障。 技能组件 model-verify/ ├── SKILL.md # 本文件 — 执行流程 ├── scripts/ │ └── diff_analysis.py # 比较运行 A 和运行 B,分类错误(JSON) └── references/ └── multichip-errors.md # 多芯片错误模式和差异真值表 从 env-verify 复用: env-verify/scripts/run_offline_inference.py — 第 A 阶段测试(参数化) env-verify/scripts/test_serve_mode.py — 第 B 阶段测试(参数化) env-verify/references/error-classification.md — 基于层的错误规则 前提 运行容器,软件栈已安装(来自 install-stack) env-verify 已完成(至少第 A 阶段通过) 用户必须提供模型路径 如果独立调用,询问容器名称、供应商和模型路径。 如果从 /flagrelease 调用,则这些作为上下文传递。 执行流程 步骤 1:获取用户模型信息 询问用户(如果未提供,则使用 AskUserQuestion): 模型路径(必需)— 容器内的本地路径或 ModelScope/HuggingFace ID --tensor-parallel-size(可选)— 默认为 GPU 数量 附加 vllm 参数(可选) 获取默认 TP 大小: docker exec python3 -c "导入 torch;打印(torch.cuda.device_count() 如果 torch.cuda.is_available() 否则 1)" 如果用户未提供模型路径 → 询问并等待。不要猜测。 步骤 2:下载模型(如果需要) 如果模型路径是远程 ID(不以 / 开头): docker exec python3 -c "从 modelscope 导入 snapshot_download;snapshot_download('',local_dir='/data/models/')" 如果是本地目录,验证 config.json 是否存在: docker exec 测试 -f /config.json 超时:600s 用于大型模型下载。 步骤 3:运行 A — 无多芯片堆栈 将测试脚本从 env-verify 复制到容器中(如果尚未存在): docker cp /scripts/run_offline_inference.py :/tmp/ docker cp /scripts/test_serve_mode.py :/tmp/ 第 A 阶段(离线): docker exec bash -c '导出 USE_FLAGGEMS=0;unset FLAGCX_PATH;超时 300 python3 /tmp/run_offline_inference.py \ --model \ --tp \ --trust-remote-code ' > /tmp/run_a_offline.json 第 B 阶段(服务): docker exec bash -c '导出 USE_FLAGGEMS=0;unset FLAGCX_PATH;超时 360 python3 /tmp/test_serve_mode.py \ --model \ --tp \ --trust-remote-code \ --health-timeout 300 ' > /tmp/run_a_serve.json 步骤 4:运行 B — 有完整多芯片堆栈 跳过逻辑:如果所有 FlagGems、FlagTree、FlagCX 安装失败 → 跳过运行 B。 报告:“运行 B 跳过:没有安装多芯片包。” 检查 install-stack 结果以决定。 第 A 阶段(离线): docker exec bash -c '导出 USE_FLAGGEMS=1;导出 FLAGCX_PATH=/tmp/FlagCX;导出 VLLM_PLUGINS=fl;超时 300 python3 /tmp/run_offline_inference.py \ --model \ --tp \ --trust-remote-code ' > /tmp/run_b_offline.json 第 B 阶段(服务): docker exec bash -c '导出 USE_FLAGGEMS=1;导出 FLAGCX_PATH=/tmp/FlagCX;导出 VLLM_PLUGINS=fl;超时 360 python3 /tmp/test_serve_mode.py \ --model \ --tp \ --trust-remote-code \ --health-timeout 300 ' > /tmp/run_b_serve.json 步骤 5:差异分析 复制并运行 scripts/diff_analysis.py 以比较两个运行: docker cp /scripts/diff_analysis.py :/tmp/ docker exec python3 /tmp/diff_analysis.py \ --run-a /tmp/run_a_offline.json \ --run-b /tmp/run_b_offline.json 阅读 references/multichip-errors.md 以解释差异并分类错误。 步骤 6:生成报告 { "状态": "通过 | 部分通过 | 失败", "阶段": "model-verify", "模型": "", "tensor_parallel_size": 8, "运行 A 无多芯片": { "标志": {"USE_FLAGGEMS": "0", "FLAGCX_PATH": "unset"}, "第 A 阶段离线": "通过 | 失败", "第 B 阶段服务": "通过 | 失败", "输出样本": "...”, "错误": [] }, "运行 B 有多芯片": { "标志": {"USE_FLAGGEMS": "1", "FLAGCX_PATH": "/tmp/FlagCX"}, "跳过": false, "第 A 阶段离线": "通过 | 失败", "第 B 阶段服务": "通过 | 失败", "输出样本": "...”, "错误": [] }, "差异分析": { "结论": "两个都通过 | 多芯片错误 | 相同错误 | 不同错误", "详细信息": "...”, "多芯片组件": "FlagGems | FlagTree | FlagCX | 插件 | null", "推荐堆栈": "完整 | 基础 | 无" } } recommended_stack — 告诉下游技能使用哪个堆栈: 完整 — 运行 B 通过(USE_FLAGGEMS=1,FLAGCX_PATH 设置) 基础 — 只有运行 A 通过(USE_FLAGGEMS=0,FLAGCX_PATH 未设置) 无 — 运行 A 也失败(模型无法服务)