本地跑 Ollama 或 llama.cpp 的人,大多把下载下来的几个 GB 的 GGUF 当成黑盒:能出字就行,里面长什么样不管。有人把这个盒子撬开了——看层、看注意力头、看词表、看聊天模板,然后追问一句:哪些部分是模型其实不需要的,删掉之后又会坏在哪。

打开网易新闻 查看精彩图片

工具叫 NeuronDump,一个 Rust 单二进制程序,MIT 协议,带命令行和本地网页界面。它直接读 GGUF 文件,没有针对任何具体模型写死逻辑。

能做的事分四块:

  • 检查:架构、层(包括 SSM 与注意力混合的模型)、注意力头、解码并分类后的词表、以决策树形式呈现的聊天模板,以及权重统计。
  • 图谱:把模型画成 3D(或 2D)图,可以从分区一路点开,直到单个注意力头、神经元桶和 MoE 专家。
  • 切割并看影响:选中任意部分,立刻看到省下多少体积、哪些连接会断开、llama.cpp 还能不能加载这个文件。
  • 扫描:逐层(或逐头)切一遍,按损伤程度排序,把最不重要的部分写成更小的 GGUF,外加一个 Ollama Modelfile。

网页界面里,模型以 3D 城市视图呈现,每个部件按"能不能删"上色:安全、有风险、或者直接搞坏模型。点任意一块,能看到它的体积、量化方式和重要性,可以展开到子节点,也可以加进待切割列表。

瘦身是两步走:先分析,再应用一份可审阅的方案。分析产出一个普通 JSON 文件,写盘之前可以自己看、自己改;--only 参数用来限定只切哪一类,比如只动词表。切割后的模型还能和原模型并排跑:开启 trace 特性编译后,NeuronDump 在内存里同时运行两个模型,对比下一个 token、KL 散度、生成文本、困惑度,以及逐层的 logit lens。

作者列了几个自己跑出来的结果。

DeepSeek-R1 8B 就是 Qwen3 8B,每个权重都略有改动。神经元在同样的位置,数量也一样,其中第 6 层有一个神经元把内部状态放大了约 33 倍。切掉这一层,两个模型都只输出噪音。

在 llama3.2:1b 上,切掉最后一层反而让模型在某条提示上更自信——尽管除前两层之外,没有任何一层在真实文本上对困惑度的伤害比它更大。

还有一个细节:DeepSeek 的聊天模板会输出一些不在其词表里的工具调用标记,于是每个标记都被拆成 11 个普通 token。

安装方式两种。Windows 和 Linux 的预编译二进制在 releases 页面,解压后直接跑 neurondump list;或者从源码构建,需要 Rust 1.88 以上,克隆仓库后用 cargo 安装。不带参数运行会让人在交互式命令行和网页界面之间选。

限制也写得明白:项目还早,主要在 Windows 上配合 Ollama 模型测过。推理仅用 CPU,没有 KV 缓存。模拟覆盖 llama、qwen2/3、gemma、phi3 和 bert 系列,MoE 和混合模型目前只做静态分析。把头或神经元置零能保持文件可加载,但不会让文件变小。已知缺口列在 TEST.md 里,遇到没测过的模型,作者希望收到反馈。