← 研究 / AutoResearch Batch / 实验报告 · CIFAR-10 + CIFAR-100 v0.1 · 2026 · Batch API
实验报告 · 已完成

用 Batch API
自动优化机器学习算法

LLM 生成候选 · 异步批量提交 · 选优迭代 — BigModel GLM × Kaggle CIFAR-10 / CIFAR-100

方法LLM 生成候选 → 跑实验 → 选最优 → 迭代
LLM 通道智谱 GLM · Batch API(5 折 · 异步批量)
任务CIFAR-10 + CIFAR-100(100 类)
CIFAR-100.7579 → 0.8370(+7.9pp)
CIFAR-1000.4633 → 0.5132(+5.0pp)
原则公平 baseline · 诚实增益
0.8370
CIFAR-10 最优
VGG · +7.9pp
0.5132
CIFAR-100 最优
ResNet-18 · +5.0pp
10
候选实验数
4(C10)+ 6(C100)
5折
Batch API 成本
异步批量提交
§ 01 / 核心思想

让 LLM 当
自动 ML 研究员

给 LLM 一个训练脚本和当前最优指标,让它自主提出改进方案、生成完整代码;框架自动跑实验、选出最优、喂回下一轮。如此循环,模型在无人干预下持续进化。

LLM 调用走 Batch API:把一批候选请求异步打包提交、等待返回、收集结果,享 5 折成本与批量处理窗口,天然契合这种非实时的优化循环——一次提交 K 个方向,而非串行试错。

本报告最重要的不是"涨了多少分",而是方法论纪律:baseline 必须充分训练(否则增益虚高)、算力必须匹配模型(否则好方案被误判失败)、增益必须对照文献参考线(否则不知道身处何处)。下面两个数据集的实验,每一个数字都经得起这三条检验。

§ 02 / 架构

核心管线
9 个模块

# Population-based Batch 优化循环
for round in range(N):
    requests   = planner.build(best_code, K)   # K个候选请求
    batch_id   = provider.submit(requests)      # Batch API 异步提交
    responses  = provider.poll(batch_id)        # 等待批量返回
    candidates = sanitize(ast_validate(responses)) # 安全+环境适配
    results    = run_all(candidates)            # 跑实验
    best_code  = select_best(results)           # 选最优 → 下一轮
模块职责
batch_providerAnthropic / OpenAI / BigModel 三种 Batch API 抽象
patchAST 安全验证(拦 eval/os.system/shell=True)
runner子进程执行 + 超时 + 环境适配(num_workers、device→GPU)
plannerfocus hints 轮换,构建候选生成请求
state / adaptive原子持久化 + 自适应调度(学习历史 Batch 耗时)

训练脚本只需一行协议:print(f"ARB_METRIC: {acc:.4f}")

§ 03 / 实验一

CIFAR-10GPU
baseline 0.7579 → 0.8370

Kaggle 经典 10 类图像分类。公平 baseline:充分训练的 3 层 CNN,val_acc 0.7579(非 smoke-test)。通过 Batch API 生成 4 个候选,GPU 上跑。

简单 CNN ~75% 本实验 VGG 83.7% ResNet-18 ~93% SOTA ~99%
候选LLM 提出的改进val_accvs baseline
Baseline 3层CNN0.7579起点
c0BatchNorm0.7746+1.7pp
c1数据增强 RandomCrop+Flip0.7992+4.1pp
c2 ★VGG 风格加深0.8370+7.9pp
c3CosineAnnealingLR + 标签平滑0.7743+1.6pp
Baseline CNN
0.758
c0 BatchNorm
0.775
c1 数据增强
0.799
c2 VGG ★
0.837
c3 CosineLR
0.774

没有人告诉它"换 CNN 架构"。GLM 读到 baseline,自主判断加深网络能提取更丰富特征,写出 VGG 风格代码——架构级推理,不是超参搜索。

CIFAR-10 · Round 1 观察
§ 04 / 实验二

CIFAR-100云 GPU
baseline 0.4633 → 0.5132

100 类,比 CIFAR-10 难得多,真正需要 GPU。公平 baseline:充分训练的 4 层 CNN,在云端 Tesla T4 上实测 0.4633。通过 Batch API 生成一轮 6 个候选方向,T4 上跑。

简单 CNN ~46% 本实验 ResNet 51.3% ResNet-18 ~76% SOTA ~93%
候选LLM 提出的改进val_accvs baseline
Baseline 4层CNN0.4633起点
c0BatchNorm0.5079+4.5pp
c1数据增强0.4690+0.6pp
c2 ★ResNet-18(50 epochs)0.5132+5.0pp
c3CosineAnnealingLR0.4691+0.6pp
c4SGD+Nesterov(lr=0.1)0.3825−8.1pp
c5Dropout + 宽分类头0.4326−3.1pp
Baseline CNN
0.463
c0 BatchNorm
0.508
c2 ResNet-18 ★
0.513
c5 Dropout
0.433
c4 SGD lr=0.1
0.383
诚实标注 并非所有候选都更好:c4(SGD lr=0.1)反而 −8.1pp(学习率过激),c5(Dropout)−3.1pp。这正是 population 搜索的价值——一批并行试多个方向,让数据淘汰坏方案。本轮 winner ResNet-18 已明确,下一轮可在其基础上组合增强与调度,有望冲 0.6+。
§ 05 / 方法论

用 Batch API 做优化
设计要点

核心矛盾:Batch API 异步、有延迟、不定时;而优化实验序列依赖(下一轮依赖上一轮)。把"实时贪心搜索"改造成"离线批量进化"。

要点说明
批次要够宽每批 K 个候选(K=8~50)摊薄 Batch 固定延迟;宽而浅 > 窄而深
两阶段筛选先短 epoch 筛全部,再全量训练 Top-K,解耦"批次宽度"与"执行成本"
投机预提交用筛选阶段赢家提前提交下一轮 Batch,消除等待死时间
自适应调度记录历史 Batch 耗时,预测最优提交时机(夜间窗口对齐)
状态可续batch_job_id 立即落盘,扛 24h 中断与断点续跑
安全沙箱LLM 代码过夜无人值守,AST 校验 + 环境适配不可省
§ 06 / 成本剖析

钱到底
省在哪

必须诚实面对一个问题:Batch API 单独省的钱,是小头。一个优化任务的成本由两块构成——LLM 生成候选代码、GPU 训练实验。Batch API 只打折前者,而后者才是大头。

图 · 单轮成本结构(CIFAR-100 一轮 8 候选,真实量级)

LLM 调用(Batch 5折)
~¥1.5
GPU 训练
~¥20

GPU 训练成本 ≈ LLM 调用的 10 倍。Batch API 把 5 折打在占比最小的那块上,省下约 ¥1,仅占总成本 ~5%

只看「Batch vs 实时」这一层,省得有限——它打折的恰是占比最小的部分。这套方法真正的经济性来自下面三个杠杆,Batch API 是让它们成立的载体。

三个真正的省钱杠杆

杠杆省的是什么量级
① 两阶段筛选GPU 训练(大头)K=50 单轮 583→127min,−78%
② 错峰算力非高峰 / spot GPUspot T4 比按量便宜 60–70%
③ 替代人力工程师手工调参时间1–2 天 → 过夜自动

什么时候真划算

划算 ✅不划算 ❌
有持续优化需求(反复迭代)一次性 demo,为涨 2 点烧 GPU
模型/数据大,人工调参昂贵小模型本地几分钟能调完
配两阶段筛选 + spot 算力全量训练 + 按量峰值 GPU

Batch API 的角色不是「省钱」本身,而是让宽批次 + 错峰 + 离线迭代这套省钱组合成为可能的载体。把它当成"5 折降本"会失望;把它当成"非实时批量优化的高效底座"才对。

成本剖析 · 诚实结论
§ 07 / 教训

实验中的
工程要点

要点一 · 公平 baseline(最重要) baseline 必须充分训练到收敛。一个欠拟合的 baseline 会把 LLM 的功劳夸大数倍——表面"巨大增益",实则只是补上了本该有的训练。本报告两个数据集的 baseline 都是充分训练后的真实值,所有增益都对照文献参考线核验。
要点二 · 算力必须匹配模型 CIFAR-10 的 VGG 候选在算力不足时会训练超时、被误判为"失败"——而它恰恰是最优方案(0.8370)。算力不足会把最好的方案当成坏方案丢掉。runner 的环境适配自动把设备选择切到可用 GPU,正是为此。
要点三 · LLM 自主加 epochs 的真实成本 LLM 生成候选时会自主决定训练强度——为追求精度,它给 ResNet-18 自设了 50 个 epochs,导致这一个候选在 T4 上独自跑了 38 分钟,是最轻候选的 10 倍。"宽批次 × 重实验"的组合,让单轮耗时被最慢的候选拖垮。下面是 CIFAR-100 一轮 6 个候选的真实耗时:

图 A · 同一批候选的训练耗时(真实数据,T4)

c0 BatchNorm
224s
c5 Dropout
300s
c1 数据增强
334s
c3 CosineLR
590s
c4 SGD
1453s
c2 ResNet-18 ⚠
2274s

⚠ c2 = LLM 自设 50 epochs(38 分钟)。单轮总耗时 ≈ 6 个候选之和,被这一个重候选主导。候选越宽(K 越大),含一个重候选的概率越高,全量训练的代价就越失控。

图 B · 解法 · 两阶段筛选:先短 epoch 筛全部,再全量训 Top-2

批次宽度 K全量模式 单轮总时两阶段 单轮总时节省
K = 893 min71 min−24%
K = 20233 min87 min−63%
K = 50583 min127 min−78%
K=20 全量
233m
K=20 两阶段
87m

为什么两阶段是必需而非可选:全量模式下,总时间随 K 线性增长(每个候选都付全价训练);两阶段则把绝大多数候选挡在「2 epoch 快筛」阶段,只让 Top-2 幸存者付全量代价。K 越大,被筛掉的重候选越多,省得越多——K=50 时单轮从近 10 小时压到 2 小时。这让「宽批次」(Batch API 的核心优势)真正可行,而不被「重实验」拖死。

要点四 · 状态持久化 + 幂等续跑 Batch 任务可能跨越数小时,监控端随时可能中断。batch_job_id 与每个候选结果立即落盘,框架支持断点续跑(已完成候选自动跳过)。长任务在远端脱离会话运行,即使监控端断开,实验也不受影响。
§ 08 / 结论

验证结果

在两个 Kaggle 经典数据集上,LLM 都能通过 Batch API 自主提出有效的架构与训练改进:CIFAR-10 用 VGG 加深拿到 +7.9pp(0.7579→0.8370),CIFAR-100 用 ResNet-18 拿到 +5.0pp(0.4633→0.5132)。增益真实、可复现、对照文献参考线合理,无 baseline 注水。

验收项结果状态
LLM 自主架构改进CNN→VGG / CNN→ResNet达成
公平 baseline充分训练,非 smoke-test达成
真实增益(对照文献线)C10 +7.9pp / C100 +5.0pp达成
Batch API 闭环提交→轮询→执行→迭代达成
双数据集验证CIFAR-10 + CIFAR-100达成
· · ·

下一步: