跳到主要内容

排障索引

先按现象定位,再回到对应实验页。不要一开始就重装环境。

公开资料怎么转成本页排障​

外部文档通常按工具或平台写排错:CUDA 文档看驱动,llama.cpp 文档看构建和模型参数,Jetson 文档看 JetPack、功耗和温度,benchmark/profiling 资料看指标和日志。本页把这些排错入口改写成课程自己的闭环:现象先归类,再回到 Qwen、GGUF、llama.cpp、Q8/Q5/Q4、profiling、local API 和最终报告。

Hugging Face Course 的 traceback 和 wrong model id 示例不是本课程的 Qwen 报错截图,但适合提醒学生:排障要先保留完整 traceback,并确认模型 ID、路径和文件名。课程正文用下面的图重画排障闭环。

外部资料中的排错入口本页改写成什么最终报告里的作用
Ubuntu / CUDA / PyTorch 文档先分清 driver 可见、CUDA toolkit 可见、框架可用三件事第 2 节环境限制
Qwen / llama.cpp 文档模型路径、GGUF 完整性、runtime commit 和启动参数要一起查第 3/4/5 节实验失败说明
Jetson / JetPack 文档Jetson 问题优先查 L4T、功耗模式、统一内存、温度和存储第 2 节环境、第 7 节温度/功耗风险
llama-bench / Nsight / MLPerf性能问题先保留条件和原始日志,再判断瓶颈第 5 节 profiling、第 7 节风险
llama.cpp server / API 文档API 问题要区分服务启动、HTTP 状态、JSON 响应和模型质量第 6 节 local API、第 7 节并发/超时风险

外部排障资料可直接吸收的记录法​

公开工具文档和课程里的排障示例有一个共同点:先保存“现场”,再解释原因。本课程把这个做法压成下面的最小证据包,任何失败都优先按这个包记录。

失败层最小证据包不要只写
环境层OS、driver/CUDA/JetPack、nvidia-smi 或 tegrastats、安装/构建日志“环境不行”
模型层模型名、文件路径、文件大小、SHA256、许可证、加载日志“模型加载失败”
runtime 层llama.cpp commit、构建参数、启动命令、stderr timing、-ngl、ctx-size“llama.cpp 报错”
性能层workload、prompt token、生成 token、重复次数、资源采样、llama-bench“速度慢”
API 层server 命令、request、response、HTTP 状态、elapsed、server log“API 不通”
质量层prompt ID、Q8/Q5/Q4 输出摘录、判断标准、是否可复现“回答不好”

官方排障文档里的命令很多,本课程只吸收能进入证据包的最小项:

官方资料常见检查本课程保留字段对应问题
driver / CUDA 检查nvidia-smi、driver、CUDA runtime、nvcc 是否存在GPU 可见但构建或运行失败
model download / file list文件名、大小、SHA256、许可证、模型卡模型路径或来源不明
runtime verbose logcommit、build flags、backend、offload、fallback同一命令不同机器结果不同
benchmark commandworkload、ctx、生成长度、重复次数、日志路径速度数字不可比较
device monitorVRAM/RAM、温度、功耗、采样时间OOM、热降频、短运行采样失真
API debugendpoint、request body、HTTP status、response、server stderrAPI 200 但质量差或服务超时

如果证据包不完整,报告里先写“无法判断原因”,不要急着把问题归因到量化、模型或硬件。

排障不是额外作业。它是部署报告的证据来源:解决了的问题写进实验结论,未解决的问题写进风险登记。

现象先看什么常见原因报告位置 / 第 7 节风险项回看章节
CUDA 找不到nvidia-smi、CMake 日志驱动可见但开发库缺失第 2 节环境限制;未解决再写内存/显存或 runtime 风险Ubuntu 环境
llama-cli 不存在build/bin构建失败或路径不对附录失败日志;影响实验完成时写 runtime 风险Qwen 基线推理
模型文件缺失或加载失败ls -lh ~/edge-ai-lab/models/qwen/*.gguf、-m 参数、文件大小、来源、SHA256未下载、路径错误、GGUF 下载不完整或版本不兼容第 3 节写“缺失/失败”;最终验收前必须补模型文件和成功 baselineQwen 基线推理
baseline 命令执行失败baseline 日志、stderr、模型输出OOM、fallback、unsupported、CUDA offload 参数不匹配第 3 节 baseline 失败;第 7 节按内存/显存或 runtime 风险登记Qwen 基线推理
baseline 命令一直停在 > 提示符是否用了 llama-cli --no-conversation,日志是否提示 please use llama-completion instead当前 llama.cpp 版本进入了交互模式第 3 节写 baseline 命令失败;改用 llama-completion -cnv -st 后重跑Qwen 基线推理
Jetson SSH 返回 Permission denied账号、SSH key、密码、是否能本机登录课程账号未配置、key 未下发、root 登录被禁用第 2 节写“Jetson 登录未通过”,不要伪造环境结果Jetson 环境
Jetson 只能通过网关访问教师给的是 ProxyJump 还是先登录网关再登录 Jetson本机 key 和网关上的 key 不同第 2 节写明访问方式,不公开内网地址Jetson 环境
Jetson 上 nvcc 找不到/usr/local/cuda*、find /usr/local -name nvccCUDA 已装但不在默认 PATH第 2 节写 CUDA 路径;构建前导出 PATHJetson 环境
Jetson CUDA 构建特别慢CMake 日志里的 CMAKE_CUDA_ARCHITECTURES默认编译了多套 CUDA 架构第 7 节写构建风险;Orin 先用 -DCMAKE_CUDA_ARCHITECTURES=87Jetson 环境
构建 llama-server 特别慢构建日志是否进入 npm install 或 vite build当前 llama.cpp server 目标会构建 Web UI 资产第 6 节写构建耗时;课堂演示前提前构建本地 API
首 token 很慢prompt eval、prompt 长度prefill 成本、冷启动、长上下文第 3/5 节指标;第 7 节写长上下文或并发/超时风险机器学习推理基础
tokens/s 很低eval time、GPU 是否参与CPU fallback、低比特 kernel 不匹配第 5 节加速实验;第 7 节写 runtime/GPU offload 风险推理加速实验
Q4 更小但不更快offload 日志、kernel 支持反量化开销或瓶颈不在权重读取第 4 节量化判断;第 7 节写性能或输出质量风险推理加速基础
量化后质量下降、重复或不满足固定 prompt固定 prompt、Q8/Q5/Q4 输出对比低比特误差、采样参数、模型不匹配第 4 节质量观察;第 7 节写输出质量风险Qwen 量化对比
显存或内存爆ctx-size、KV Cache、资源监控上下文过长、模型过大、系统进程占用第 7 节写内存/显存 + 长上下文风险大模型量化与 KV Cache
输出乱码或风格异常tokenizer、chat template模型不是 instruct 版或模板不一致第 7 节写输出质量风险Transformer 与 LLM 基础
nvidia-smi 可见 GPU 但 PyTorch CUDA 不可用torch.__version__、torch.version.cuda、driver CUDAPyTorch CUDA 构建版本高于驱动支持版本第 2 节写环境限制;换兼容环境或重装匹配 PyTorchQwen LoRA 微调
SFTTrainer 不接受 dataset_text_fieldTRL 版本、报错栈TRL API 变更,旧参数应放到 SFTConfig第 9 节附失败日志;更新脚本后重跑 smoke testQwen LoRA 微调
API 无响应server 日志、端口、host服务未启动、端口不一致、防火墙第 6 节服务失败;第 7 节写并发/超时或安全风险本地 API
API 返回非 200 或非 JSONapi-curl-meta.txt、api-curl-response.json、server 日志endpoint 路径、请求 JSON、模型未加载、服务端异常第 6 节写失败;附 HTTP 状态、响应 JSON/原始响应和 server 日志本地 API
API 返回 200 但答案明显错误固定 prompt、响应正文、server timing服务可用不代表模型质量合格,可能是模型太小、量化损失或 prompt 不适合第 6 节写服务成功;第 4/7 节写质量风险本地 API
API 成功但很慢或超时server 日志、请求耗时、模型加载冷启动、请求排队、上下文过长第 6 节服务记录;第 7 节写并发/超时风险本地 API
timing 解析结果全空stdout/stderr 是否分开保存、日志里是否有 eval timellama.cpp timing 可能写到 stderr;或版本字段不同第 5 节写解析限制;改用 `2>&1tee` 或解析 stderr 日志
nvidia-smi 显示 GPU 利用率 0%采样间隔、推理持续时间、显存/功耗变化运行太短,采样错过峰值第 5 节写监控限制;用更长生成或 llama-bench 重测Profiling
Agent policy JSON 合法但权限冲突allowed_tools、confirm_required、blocked_tools 是否重叠小模型只满足格式,没满足权限约束第 7 节写安全风险;先跑 policy validator,不执行工具VLM/Agent
Jetson 速度越跑越慢tegrastats、温度、功耗模式热降频、电源或散热不足第 7 节写温度/功耗风险;RAM 接近上限时补内存风险Jetson 环境
模型许可证未记录模型卡、教师说明、下载来源来源不清或离线包缺说明第 2 节写未记录;第 7 节写许可证风险Qwen 基线推理
服务端口暴露到公网host、端口、防火墙绑定 0.0.0.0 且无鉴权第 7 节写安全和日志风险本地 API
日志含敏感输入prompt、请求 JSON、server 日志未脱敏记录用户输入第 7 节写安全和日志风险,附录只放脱敏摘要本地 API
需要云端兜底但未验证fallback 触发条件、网络、错误处理只做了本地单机 smoke test第 7 节写端云 fallback 风险最终项目

排障顺序​

  1. 保存原始日志。
  2. 判断是环境、模型、runtime、参数还是服务层问题。
  3. 先判断它属于报告第 2/3/4/5/6 节的哪类实验结果,再判断是否需要进入第 7 节风险登记表。
  4. 只改变一个变量重试。
  5. 在报告中记录失败现象、证据日志、影响和下一步。

失败日志不是脏数据。端侧部署报告需要失败样例来说明边界。

参考资料​

本章吸收方式: