Cmpnd 发布 dspy-wsp,把权重空间编程做成 DSPy 优化器
Cmpnd 发布开源原型优化器 dspy-wsp(MIT 许可,pip install dspy-wsp),让前沿 LLM 直接读取并编辑小模型权重,无需梯度、训练循环或微调数据。
MarkTechPost· Asif Razzaq·2026-11-15 00:45· 2 小时前AI 评分61
Cmpnd 发布 dspy-wsp:权重空间编程进入 DSPy
AI 导读
Cmpnd 发布开源原型优化器 dspy-wsp(MIT 许可,pip install dspy-wsp),让前沿 LLM 直接读取并编辑小模型的权重,无需梯度、训练循环或微调数据。
正文 · 原文
Cmpnd 发布了 dspy-wsp,这是一个原型优化器,将权重空间编程引入 DSPy。权重空间编程是一种技术,前沿 LLM 读取另一个模型的权重并直接编辑它们。无需梯度、无需训练循环,也无需微调数据集。dspy-wsp 将其打包为 WeightSpace,一个可插入任何 DSPy 程序和指标的优化器。在 Cmpnd 的测试中,约 5 到 10 美元的 GPT-6-Astra 调用改善了它们尝试的每一个决策模型。你可以通过我们的 GPULeaderboard.com chrome 扩展在此查看部署选项和规格。
TL;DR
- 是什么:一个 DSPy 优化器(
WeightSpace),由写入方 LLM 编辑学生模型的权重。MIT 许可,pip install dspy-wsp,需要 DSPy 3.5。 - 规模:在 0.6B 到 9B 参数的开源决策模型上测试。一次 25 轮运行编辑了单层或单个注意力头。
- 运行环境:所有实验在一台 Mac 上完成。2B 模型使用约 6 GB 内存。d1-omni-600M 需要 4 GB 或更多(Mac 或 GPU)。
- 性能:仅 WeightSpace 在 Typed Decisions 上提升 1.9 到 16.1 分。配合 ReAnchor,提升为 6.5 到 20.0 分。
- 最佳:d1-omni-600M 在 WeightSpace + ReAnchor 下从 50.9% 升至 69.1%(+18.3)。
- 最差:Clef-Flash(9B)仅靠 WeightSpace 只提升 +1.9。按原论文更严格的规则,d1-omni-600M 仅提升 +2.8。
- 结论:最佳之处:一种廉价、无梯度的编辑,以小型、可验证的补丁形式交付。最差之处:非常实验性、速度慢(每次运行 78 到 167 分钟),且在较大模型上效果最弱。
什么是权重空间编程?
权重空间编程(WSP)将神经网络的权重视为一个可读取和重写的程序。这一想法来自 MIT 的研究:Sparks of Weight-Space Programming。
前沿模型(研究团队使用的是 GPT-6-Astra)查看权重张量,推理每个部分计算什么,并修改它们以匹配用平实英语写成的目标。研究团队强调,WSP 命名了一种新兴能力,而非固定方法。他们的实验中禁止使用梯度,但该概念并不排除梯度。
它与微调或提示优化有何不同?
比较开发者通常使用的 3 种手段会有所帮助:
- 提示优化(DSPy 的 MIPROv2、GEPA)编辑文本:指令和示例。模型权重从不改变。
- 微调(DSPy 的 BootstrapFinetune,用于 BetterTogether 内部)通过梯度下降改变权重。它需要训练数据、训练循环,通常还需要 GPU。
- 权重空间编程通过推理改变权重。编辑方形成假设(“这些神经元对选项 B 打分过高”),编写代码来修补它们,并通过几次前向传播检查结果。
研究文章将 WSP 定位为继使用 LLM 优化文本产物之后的下一步。早期工作让 LLM 在提示词、harness 和训练代码上进行爬山式优化。权重则交给 Adam 或训练好的权重生成网络。WSP 主张 LLM 推理现在可以直接触及权重。
原始研究展示了什么?
MIT 团队进行了 9 项实验。其中几项引人注目:
- 读取权重:Astra 仅凭权重就为 4 个 PPO 策略网络正确识别了对应的游戏(Breakout、Pong、Pac-Man、Freeway)。
- 修复损坏的策略:一个 Kinetix 的汽车上坡道策略在全部 256 个回合中均失败。对其 3.5% 的权重做一次编辑后,它在全部 1,024 个测试回合中均成功。
- 从零开始编写:在 MinAtar Breakout 上,一次性写入的零初始化网络得分为 517.4。PPO 在 5 亿步后达到 25.3。
- 修复 LLM:Qwen3.5-0.8B 在数学问题上陷入循环。Astra 将问题追溯到 MLP 第 15 层和第 19 层,并修改了 131,072 个权重(占模型的 0.016%)。经过 50 次前向传播,MATH-500 从 7.9% 升至 48.1%,GSM8K 从 13.8% 升至 67.1%。
研究也显示了局限。在 Gemma 3 270M 上,编辑将 MATH-500 从 6.8% 提升到 7.0% 至 7.7% 之间。研究团队并未将其视为真正的提升。编辑可以移除障碍,但无法添加缺失的能力。
dspy-wsp 如何工作?
dspy-wsp 将该研究循环转变为标准的 DSPy 优化器。GitHub 仓库描述了 3 个角色:
- 学生:你的 DSPy 程序所运行的小模型。其权重加载到本地 Python 进程中。
- 写入者:一个前沿 LLM,推荐以最大推理努力使用
gpt-6-astra。 - 沙盒:写入者运行代码的内核。macOS 使用内置的
sandbox-exec;Linux 使用 bubblewrap。
写入者按轮次工作。每轮先有简短说明,然后是一个代码块。该代码块要么是:
- 一个Python 代码块,在沙盒内读取或编辑权重,或者
- 一个前向代码块,在练习示例上运行你的 DSPy 程序。
前向传播来自固定预算(测试中为 max_passes=25)。当预算耗尽时,写入者的最佳编辑成为补丁。然后一个隐藏的验证集在相同的示例和种子上比较原始权重和编辑后的权重。
写入者能看到什么数据?
仓库明确说明了数据分离:
trainset是写入者的练习集。holdout将一部分训练数据(示例中为 0.25)移入检查集。写入者可以在其上为编辑评分,但永远看不到示例。valset保持隐藏,并在最后运行一次。- 指标可以返回
dspy.Prediction(score=..., feedback=...)。反馈文本对写入者可见。
写入者实际改变了什么?
结果报告列出了每一次编辑。这些编辑小而精准:
| 模型 | 编辑的张量 | 范围 | 时间 | 写入者成本 |
|---|---|---|---|---|
| d1-omni-600M | head.scorer.1.weight(+ 偏置,scorer.3.weight) | 1,048,576 个条目中的 112,640 个,外加 220 个 | 78 分钟 | $7.63 |
| NanoJev (Qwen3-0.6B) | scalar.weight | 1,024 个条目 | 167 分钟 | $6.92 |
| d1-2B | layers.23.feed_forward.w2.weight | 全部 1570 万个条目,秩 9 变更 | 83 分钟 | $5.42 |
d1-2B 没有决策头,因此写入者编辑了其第 23 层的主干。在 d1-omni-600M 上,写入者重写了决策头评分器的一部分。
代码是什么样子?
仓库示例对支持工单进行分类。签名仅使用决策类型输出:
import dspy
from typing import Literal
from dspy_wsp import WeightSpace, load_decision_backend
class Triage(dspy.Signature):
"""Triage a support ticket."""
ticket: str = dspy.InputField()
urgent: bool = dspy.OutputField(desc="Does this ticket need a reply today?")
team: Literal["billing", "technical", "account"] = dspy.OutputField(desc="Which team should handle it?")
backend = load_decision_backend("d1") # d1-omni-600M
optimizer = WeightSpace(
metric=metric,
writer_lm=dspy.LM("openai/gpt-6-astra", model_type="responses", reasoning_effort="max"),
backend=backend,
max_passes=25,
holdout=0.25,
run_dir="runs/triage",
)
compiled = optimizer.compile(dspy.Predict(Triage), trainset=train, valset=test)
compiled(ticket="I was charged twice this month.") # runs on the edited weights在compile之后,程序调用编辑后的本地模型,而不是托管 API。compiled.wsp_patch.summary()展示了变化之处。
效果如何?Typed Decisions 基准测试结果
Cmpnd 在 Typed Decisions 上进行了测试,这是一个针对类型化概率决策的基准。模型读取 1 条非结构化状态,并同时回答 5 个类型化问题。每个答案都是一个概率分布。测试集包含 400 个案例和 2,000 个决策。
每个模型从 GPT-6-Astra 获得了 25 次前向传递。增益为配对结果,标准误差为 ±0.7 至 1.4 分。
| 模型 | 未优化 | ReAnchor | WeightSpace | WeightSpace + ReAnchor |
|---|---|---|---|---|
| d1-omni-600M | 50.9% | 60.2% (+9.3) | 66.9% (+16.1) | 69.1% (+18.3) |
| NanoJev (Qwen3-0.6B) | 39.2% | 50.7% (+11.6) | 52.4% (+13.3) | 56.4% (+17.3) |
| d1-2B | 60.6% | 70.1% (+9.5) | 74.0% (+13.4) | 77.9% (+17.3) |
| Clef-Flash (9B) | 68.8% | 70.3% (+1.5) | 70.7% (+1.9) | 75.3% (+6.5) |
来源:d1-omni-600M、d1-2B 和 Clef-Flash 的数据来自 Cmpnd 博客图表;NanoJev 的数据来自 结果 README。
ReAnchor 是 Cmpnd 早期的优化器。决策模型输出概率,阈值将这些概率转化为答案。ReAnchor 在不调用 LLM 的情况下重新拟合每个问题的阈值。WeightSpace 改变模型;ReAnchor 重新校准其输出。两者叠加效果良好。
三种模式尤为突出:
- 在展示的每个模型上,WeightSpace 都优于单独使用 ReAnchor。在 d1-omni-600M 上,它带来了 +16.1 的提升,而 ReAnchor 为 +9.3。
- 最大的模型增益最小。9B 的 Clef-Flash 单独使用 WeightSpace 仅获得 +1.9 的提升。
- 在 9B 上,组合效果最为重要。当两个优化器同时运行时,Clef-Flash 跃升至 +6.5。
写入模型有影响吗?
答案是肯定的。以gpt-6.1-sol作为写入模型时,单独使用 WeightSpace 在 d1-omni-600M 上带来 +5.8,在 NanoJev 上带来 +12.1,在 d1-2B 上带来 −0.6。Astra 在相同模型上分别产生了 +16.1、+13.3 和 +13.4。
dspy-wsp 是否违背了原论文的规则?
略有违背,Cmpnd 也承认这一点。默认情况下,写入模型可以在其内核中重新计算决策头。设置simulate_head=False会强制执行论文中更严格的规则。在该规则下,d1-omni-600M 仅获得 +2.8 ± 0.7 分的提升。加入 ReAnchor 后提升至 +9.3,并不优于单独使用 ReAnchor。
如何部署编辑后的模型?
每次运行都会向run_dir写入一个补丁。该补丁包含manifest.json和edit.npz,仅包含发生变化的条目。它还存储每个基础张量和编辑后张量的 sha256 哈希值。任何拥有公开基础模型的人都可以精确重建编辑后的权重。
- 决策模型:
compiled.wsp_patch.write_checkpoint(backend.weights_dir, "edited-d1/") - 文本 LLM:
dspy-wsp apply <base> <patch> <out>/,然后使用 vLLM 提供服务。 - 程序:
compiled.save("program.json")并使用allow_unsafe_lm_state=True重新加载。
编辑后的模型在本地运行。在 Apple 芯片上使用 MLX。在 Linux 上使用 PyTorch,如果存在 NVIDIA GPU 则在其上运行。
dspy-wsp 支持哪些模型?
| 后端 | 模型 | 别名 | 架构 |
|---|---|---|---|
D1Backend | Liquid AI d1-omni(文本路径) | "d1" | 带决策头的编码器 |
NanoJevBackend | NanoJev | "nanojev" | 带决策头的 Qwen3 骨干 |
D1LMBackend | 基于 LFM3 的 Liquid AI d1 | "d1-2b" | 在问题位置作答的 LM |
文本生成 LLM 通过VLLMBackend(NVIDIA)、HFBackend(CUDA、MPS 或 CPU)和MLXBackend(Apple 芯片)工作。由 Michael Isaac 贡献的GEPASearch选项为决策模型增加了群体搜索。
WeightSpace 与其他 DSPy 优化器相比如何?
| 指标 | WeightSpace (dspy-wsp) | ReAnchor | BootstrapFinetune | GEPA |
|---|---|---|---|---|
| 改变什么 | 模型权重 | 决策阈值、切分点、权重 | 模型权重 | 提示文本 |
| 如何改变 | 前沿 LLM 在沙盒中推理并编辑 | 对缓存概率进行网格搜索 | 在引导轨迹上进行梯度微调 | 反思式提示演化 |
| 梯度 | 否 | 否 | 是 | 否 |
| 优化期间的 LLM 调用 | 是(写入模型,25 次传递) | 无 | 用于引导的教师模型 | 是 |
| 典型成本 | 每次运行 $5.42 至 $7.63 | 接近零 | 未披露 | 未披露 |
| 输出 | 小型哈希补丁 | 校准程序 | 微调模型 | 优化提示词 |
| 来源 | dspy-wsp | Cmpnd | BetterTogether 论文 | GEPA 论文 |
核心要点
- 权重空间编程让前沿 LLM 直接编辑权重,无需梯度或训练数据。
- dspy-wsp 将其封装为 DSPy 优化器:
pip install dspy-wsp,MIT 许可证。 - 25 次 writer 处理耗时 78 至 167 分钟,成本为 5.42 至 7.63 美元。
- 借助 WeightSpace + ReAnchor,d1-omni-600M 从 50.9% 提升至 69.1%。
- 在 9B 规模上收益下降,且该软件包明确为实验性。
查看 Cmpnd 博客文章、GitHub 仓库、完整结果以及原始 Weight-Space Programming 研究。你可以通过我们的 GPULeaderboard.com Chrome 扩展在此查看部署选项和规格。
另外,欢迎在 Twitter 上关注我们,别忘了加入我们的 150k+ ML SubReddit 并订阅 我们的新闻通讯。等等!你在 Telegram 上吗?现在你也可以在 Telegram 上加入我们了。
需要与我们合作推广你的 GitHub 仓库、Hugging Face 页面、产品发布或网络研讨会等?联系我们
文章 Cmpnd 发布 dspy-wsp:权重空间编程进入 DSPy 首次出现在 MarkTechPost。
来源:MarkTechPost · marktechpost.com
来源:RadarAI · aihot.news