Update README.md
一个能同时看懂沐曦(mx-smi)和通用 GPU(nvidia-smi/all-smi)运行状况的 Agent, 能聊天诊断,能终端看板,能交互式会话,还能为 Web 面板留好接口–只读、小巧,但骨架完整。 安全原则:目前版本只读、只分析、只建议,不执行任何会改变服务器状态的操作。
一个能同时看懂沐曦(mx-smi)和通用 GPU(nvidia-smi/all-smi)运行状况的 Agent, 能聊天诊断,能终端看板,能交互式会话,还能为 Web 面板留好接口–只读、小巧,但骨架完整。
安全原则:目前版本只读、只分析、只建议,不执行任何会改变服务器状态的操作。
mx-smi
cd cruxmvp pip install -e .
安装后 crux 命令全局可用。依赖全部为纯 Python 包,无系统级编译。 fastapi/uvicorn 仅 crux web 需要,缺失时自动降级为 stdlib HTTP 服务。
crux
fastapi
uvicorn
crux web
# 无 GPU 环境演示(仿真数据,验证流程) CRUX_COLLECT__MOCK=true CRUX_LLM__BACKEND=none crux status # 真实沐曦服务器(自动探测 mx-smi,无 LLM 走规则降级) crux status # 交互式终端会话(类似 Claude Code 的 REPL) crux session
crux status
crux chat "问题"
crux session
/set-key
crux dashboard
--once
crux web --port 8080
crux collect --debug
crux rules
crux tools
也可以用 python agent.py <命令> 代替 crux <命令>。
python agent.py <命令>
crux <命令>
启动后进入 REPL,支持以下命令:
/set-key <KEY>
/status
/tools
/rules
/reset
/help
/exit
$ crux chat "模型加载失败 /models/DeepSeek-FP8" [现象] 模型加载失败 [根因分析] 模型路径含 FP8 量化标识,沐曦 C500 不支持 FP8 [置信度] 高 [建议] 更换为 FP16/BF16/INT8 版本模型
方式一:交互式会话内设置
crux session crux01> /set-key your-agnes-api-key
方式二:环境变量预设
export CRUX_LLM__BACKEND=agnes export CRUX_LLM__AGNES__API_KEY=your-key crux session
方式三:配置文件
配置 config.local.yaml(不提交,覆盖 config.yaml):
config.local.yaml
llm: backend: agnes # ollama | openai | agnes | none agnes: base_url: https://apihub.agnes-ai.com/v1 api_key: your-key model: agnes-2.0-flash
无 LLM 也能用:backend=none 时,crux chat 自动走「规则降级」路径, 仍能识别 FP8 / MACA 污染 / 性能瓶颈并给出结构化诊断。这是「真实服务器可用」的关键保障。
backend=none
crux chat
mx-smi 输出格式随版本变化。部署后必须执行一次:
查看打印的 mx-smi 原始输出,确认字段是否正确解析。
mx-smi 原始输出
解析器已内置多策略容错:
_FIELD_ALIASES
Key : Value
mx-smi sgpu --show-memory
支持的 mx-smi 2.2.x KV 字段(真机验证):
vis_vram total/used(显存,KB 单位)
vis_vram total/used
GPU : N %(利用率)
GPU : N %
hotspot(sensor1) : N C(温度)
hotspot(sensor1) : N C
GPU#N MXC500(设备名从设备行提取)
GPU#N MXC500
**若 crux status 的 GPU 字段显示 -**:说明某字段标签未匹配。
-
打开 providers/mxsmi.py,把真实输出中的字段标签加入 _FIELD_ALIASES 对应列表。
providers/mxsmi.py
无需改动其它代码。单元测试:python tests/test_mxsmi_parser.py
python tests/test_mxsmi_parser.py
启动时按 config.yaml -> providers.prefer 顺序探测:
config.yaml -> providers.prefer
all-smi
nvidia-smi
同一台机器多 provider 同时可用时,以 mx-smi 为主,其它补充缺失字段。
无 GPU 环境行为:provider 可用但采集为空时(如容器内 sysfs 未挂载), 返回空列表并明确告警,不回退仿真数据。只有 collect.mock=true 时才返回仿真数据。
collect.mock=true
crux web --port 8080 # 默认绑定 127.0.0.1,如需对外暴露: crux web --host 0.0.0.0 --port 8080
端点:
GET /api/status
GET /api/metrics?device_id=0&metric=util_pct&minutes=60
GET /api/events?limit=20
GET /api/chat?q=训练为什么慢
GET /api/health
CLI / Dashboard / Session (agent.py / crux_cli.py / dashboard / web_api) │ Core Agent Engine (engine/: tool, tool_registry, workspace, agent_loop, context) │ Tool Layer (tools/: gpu_tools, system_tools, metax_tools + registry.py) │ Perception (providers/: base, detector, mxsmi, allsmi, nvidiasmi, mock, cmd) │ Persistence (collector/: collector + storage SQLite) Rules (rules/: engine + rules.yaml) Knowledge (core/rag.py + knowledge/*.md)
check_maca_env
check_model_quantization
config.yaml 是默认配置。三种覆盖方式(优先级递增):
config.yaml
CRUX_<段>__<键>
CRUX_LLM__BACKEND=none
CRUX_COLLECT__MOCK=true
ollama
llm.ollama.base_url
model
openai
llm.openai.base_url
api_key
agnes
llm.agnes.api_key
none
cruxmvp/ ├── agent.py # CLI 入口 ├── crux_cli.py # crux 全局命令入口 shim ├── pyproject.toml # 打包配置(pip install -e .) ├── config.yaml # 默认配置 ├── requirements.txt # 依赖清单 ├── _compat.py # 配置访问兼容层(破循环导入) ├── engine/ # 核心 Agent 引擎(tool/registry/workspace/loop/context) ├── tools/ # 只读工具集(gpu/system/metax + registry) ├── providers/ # 感知层(mxsmi/allsmi/nvidiasmi/detector/mock/cmd) ├── collector/ # 采集调度 + SQLite 存储 ├── workspaces/ # router/monitor/diagnose ├── rules/ # 规则引擎 + rules.yaml ├── dashboard/ # 终端面板 + Web API ├── core/ # config/llm/summarizer/rag/session ├── knowledge/ # 沐曦知识库 └── tests/ # 单元测试(mxsmi解析/Storage/Router)
/api/status
GPU服务器运维 Agent
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
Crux - GPU 服务器运维 Agent
一、快速开始
1. 环境要求
mx-smi已安装并在 PATH2. 安装
3. 第一次运行
二、CLI 命令
crux statuscrux chat "问题"crux session/set-key设置 API Key)crux dashboard--once渲染一次)crux web --port 8080crux collect --debugcrux rulescrux tools交互式会话(
crux session)启动后进入 REPL,支持以下命令:
/set-key <KEY>/status/tools/rules/reset/help/exit诊断示例
三、部署到真实沐曦 GPU 服务器
1. 配置 LLM(推荐,但不强制)
方式一:交互式会话内设置
方式二:环境变量预设
方式三:配置文件
配置
config.local.yaml(不提交,覆盖 config.yaml):2. 适配 mx-smi 输出格式
mx-smi 输出格式随版本变化。部署后必须执行一次:
查看打印的
mx-smi 原始输出,确认字段是否正确解析。解析器已内置多策略容错:
_FIELD_ALIASES)匹配Key : Value行mx-smi sgpu --show-memory获取真实显存配额支持的 mx-smi 2.2.x KV 字段(真机验证):
vis_vram total/used(显存,KB 单位)GPU : N %(利用率)hotspot(sensor1) : N C(温度)GPU#N MXC500(设备名从设备行提取)**若
crux status的 GPU 字段显示-**:说明某字段标签未匹配。打开
providers/mxsmi.py,把真实输出中的字段标签加入_FIELD_ALIASES对应列表。无需改动其它代码。单元测试:
python tests/test_mxsmi_parser.py3. 自动探测的 provider
启动时按
config.yaml -> providers.prefer顺序探测:mx-smi(沐曦官方,优先)all-smi(跨厂商通用)nvidia-smi(兼容路径)同一台机器多 provider 同时可用时,以
mx-smi为主,其它补充缺失字段。4. 启动 Web API
端点:
GET /api/status- GPU/MACA/事件快照GET /api/metrics?device_id=0&metric=util_pct&minutes=60GET /api/events?limit=20GET /api/chat?q=训练为什么慢GET /api/health四、架构
沐曦专属能力
check_maca_envcheck_model_quantization降级策略(保证真实服务器可用)
crux chat走规则降级路径,仍输出结构化诊断crux web降级为 stdlib HTTP 服务五、配置
config.yaml是默认配置。三种覆盖方式(优先级递增):config.yaml(默认)config.local.yaml(部署覆盖,建议加入 .gitignore)CRUX_<段>__<键>(如CRUX_LLM__BACKEND=none、CRUX_COLLECT__MOCK=true)LLM 后端
ollamallm.ollama.base_url/modelopenaillm.openai.base_url/api_key/modelagnesllm.agnes.api_key/modelnone六、目录结构
七、验证状态
crux status在沐曦机器正确显示 GPU/MACA 状态(真机验证:MXC500, SGPU 32GB 配额)crux status在 nvidia-smi 机器显示通用 GPU 状态crux chat识别 FP8 和 MACA 库污染crux chat结合利用率/CPU/IO 做性能分析crux dashboard实时刷新核心参数(含温度/状态标签)crux session交互式终端会话(支持/set-key设置 Agnes API Key)crux web返回/api/statusJSON