缝合怪本地 LLM 折腾记:X99 + RTX 2080 Ti + Tesla P40
这台"缝合怪"是自己以前的老硬件东平西凑来的,记录一下踩过的坑和目前的状态,供有类似想法的朋友参考。
遇到的坑和痛点
1. X99 平台 + P40 的 BIOS 启动问题
X99 是个年代久远、脾气刁钻的平台。P40 作为纯计算卡,没有视频输出,但插上之后会被主板优先识别,导致系统启动时卡在 BIOS 画面,显示器一片黑。
最终解决方案是通过降低 P40 所在 PCIe 通道的启动优先级,强制 P40 晚于 2080 Ti 完成初始化,才彻底解决这个问题。过程中试了很多方法,这条路不太直观,网上资料也零散。
2. 温度与噪音
目前是冬天,情况还算可控。但可以预见夏天会是另一番煎熬。
P40 原装被动散热,没有风扇,长时间推理温度会飙升。解决方案是拆下 Titan Xp 的涡轮风扇移植到 P40 上,引出风扇控制线接到主板风扇针脚,再通过软件 root 风扇控制逻辑,在管理面板里配置了基于温度的自动调速方案。目前运行稳定,但整机噪音在高负载下依然可观。
3. Qwen 3.6 35B A3B MoE 的稳定性问题
Qwen 3.6 35B A3B 是 MoE 架构,active 参数只有约 3.6B,输出速度快(实测约 41 tok/s decode),在缝合怪上跑起来性价比不错。
但跟同量级的 27B Dense 模型相比,它在长上下文下的 instruction following 稳定性较差,容易出现 thinking loop 和工具调用格式偏移。只要外部有足够强的约束框架(harness)控制任务边界和输出格式,用来做本地 agentic coding 还是完全可用的。没有约束的情况下,复杂任务的可靠性会明显下降。
4. 128k 上下文不够用
128k 的上下文窗口在单 session 多轮代码修改的场景下远远不够。一旦触发上下文压缩,prefill 阶段需要重新处理大量 token,100k 冷启动实测 TTFT 约 428 秒,压缩期间 decode 速度也会从正常的 41 tok/s 大幅下降。这段等待体验非常差,是目前整个方案最大的短板。
下一步打算
缝合怪作为过渡方案已经验证了本地 LLM 的可行性,但多卡异构带来的复杂度和性能瓶颈越来越明显。
目前倾向于等 Apple M5 Ultra。如果真的像传闻里的192GB 统一内存 + 约 1228 GB/s 内存带宽,可以直接跑 70B 以上的 Dense 模型而不需要多卡拼接,省去异构平台的所有麻烦。相比继续在 PC 平台上堆显卡,M5 Ultra 的性价比和可维护性更有吸引力。
当然如果近期有合适的显卡升级机会也不排除,但长期方向应该是统一内存架构。
硬件:X99 + RTX 2080 Ti 11GB + Tesla P40 24GB | 推理框架:llama.cpp build 9528 | 主力模型:Qwen 3.6 35B A3B MoE Q5