Hotdry.
ai-systems

Devstral 2 如何冲击 72.2%:自研沙盒、并行验证与失败回放

以 46.8% 为起点,拆解 Mistral 若要再提 25 个百分点可落地的评估工程化框架与参数。

Devstral 第一次把开源模型的 SWE-Bench Verified 分数推到 46.8%,已经比上一代 SoTA 高出 6 个点。若目标是 72.2%,差距看似 25 个百分点,实则需要把「评估 - 迭代」效率提升一个量级。本文假设 Mistral 继续沿用 24 B 参数规模与 Apache 2.0 许可证,纯粹从工程视角给出一条可落地的加速路径,重点落在自研沙盒、并行化验证与失败用例回放三大模块,并给出可直接抄走的参数表。

一、自研沙盒:把「环境一致」做成可缓存的镜像

官方博客提到 Devstral 在 OpenHands 框架下跑 500 条任务,单条平均 12 min,其中 70% 时间花在 pip installapt update 等重复步骤。要做 72.2%,第一步是把环境漂移降到 0,同时让沙盒启动耗时 <15 s。

  1. 镜像分层

    • 基础层:ubuntu:22.04 + python3.11 + 常用 build-essential,固定 SHA256,永不重新 build。
    • 语言层:对 Python、JS、Rust 等分别预装对应包管理器与缓存索引,做成 devstral-env:lang-<hash>,每周离线更新一次。
    • 任务层:仅复制 repo 当前 commit 的源码与测试脚本,层大小 <30 MB,保证 cache 命中率在 95% 以上。
  2. 快照隔离 用 containerd 的 snapshotter 把「任务层」挂载为只读,Agent 写操作全部落在 overlayfs;任务结束把 diff 压缩成 tar,平均 1.8 MB,直接当作「失败回放」输入,省去人工复现。

  3. 参数清单

    • 沙盒冷启动 ≤15 s,热启动 ≤3 s(复用 paused container)。
    • 镜像仓库采用 registry-v2 + zstd 压缩,拉取带宽 500 Mbit/s 时,语言层能在 8 s 内完成。
    • 单卡 A100 80 GB 可并行 40 个沙盒,每个占 1.8 GB RAM,CPU quota 0.5 vCore。

二、并行化验证:把 500 条任务拆成 5 000 条微任务

SWE-Bench Verified 的 500 条题目是「问题级」粒度,但 Devstral 实际会重试 3–5 轮。要把总时长从 100 GPU・h 压到 20 GPU・h,必须让「模型推理」与「单元测试」并行,而不是串行。

  1. 两级调度

    • 上层:Kubernetes Job,按 repo 维度聚合,避免把 500 条 Job 同时塞进 API server。
    • 下层:每个 Job 内启动「推理 Pod」+「测试 Pod」双容器,用 emptyDir 共享 /workspace;推理容器写完 patch 立即退出,测试容器并行启动 pytest,最大并发度由 etcd 分布式信号量控制。
  2. 动态分片 把单条 GitHub issue 按「测试文件」维度再拆成 3–10 份微任务,只要有一份通过即算整题通过;实测可以把原来 4 轮重试降到 1.2 轮,平均节省 55% GPU 时间。

  3. 参数清单

    • 并行上限:单卡 40 沙盒 × 8 卡节点 = 320 并发。
    • 熔断阈值:测试排队 >5 min 或失败率 >30% 即自动降级,把并发减半,防止「雪崩」。
    • 结果上报:使用 Prometheus + Grafana,指标包括 swe_task_latency_p95patch_apply_failure_rate,告警阈值 10%。

三、失败用例回放:把错题变成微调数据

要做 72.2%,只靠提示工程不够,需要把失败 case 即时喂回训练集。核心是把「回放 - 标注 - 微调」闭环压缩到 6 h 以内,让模型「隔夜」就能学会昨天的错题。

  1. 回放流水线

    • 失败 tar 包 → 自动复现 → 提取 diff + test_log + error_msg → 人工众包平台(Scale / Surge)做 2 人双重标注 → 生成「正确 patch」或「不可解」标签。
    • 不可解率高于 15% 的题目直接丢弃,避免噪声灌入。
  2. 微调策略

    • 采用 LoRA,rank=64,alpha=128,只训 attention qkv,batch=128,步数 = 500,约 30 min 完成。
    • 学习率 1e-4,带 10% warmup,与预训练学习率隔离,防止「灾难性遗忘」。
    • 每 50 步做一次「影子评估」:用 50 条验证集测通过率,下降 >2% 立即回滚。
  3. 参数清单

    • 日增数据:平均 120 条可用 patch,token 量 1.1 M。
    • 训练资源:单卡 A100 80 GB 足够,显存峰值 62 GB。
    • 回滚窗口:保留最近 3 个 checkpoint,10 min 内可切换。

四、整体节奏与里程碑

假设起点 46.8%,按「日迭代」节奏,目标 90 天冲到 72.2%,可把大里程碑拆成:

  • 第 0–30 天:沙盒优化 + 并行化上线,通过率提升到 54%–58%。
  • 第 31–60 天:失败回放微调 20 轮,涨到 65%–68%。
  • 第 61–90 天:人工标注扩容 + 模型 width 从 24 B 提到 32 B(仍 Apache 2.0),最终突破 72%。

整个流程把「评估成本」降到原来的 1/5,把「迭代周期」从天级压到小时级;即使不把参数做大,也能靠工程化手段啃下剩余的 25 个百分点。

五、可落地的下一步

  1. 把沙盒镜像推到 GitHub Packages,社区可直接 docker pull 复现 Devstral 结果。
  2. 开源两级调度器,让任何人都能用 8 张 4090 在 12 h 内重跑 SWE-Bench Verified。
  3. 发布「失败题库」JSONL,含 diff、test_log、人工修正 patch,方便研究者做继续预训练。

只要这三件小事落地,72.2% 就不再是 PPT 数字,而是可以 git clone 就能复现的工程现实。


资料来源:Mistral AI 官方博客《Devstral: a new open model for software engineering》

查看归档