跳转至

0.10.0:lookup chunk 并行(opt-in)

c40 之后的 authoring(0.10.*)

YAML sources.*.lookup_chunk_size 已迁出 → Python LookupChunking(再写 fail-fast)。 本页保留 0.10.0 发布时的命名/对拍叙事;现行写法见 agentdev/skills/scalim-yaml-dsl/references/upgrades/2026-08-09-lookup-chunking-python-ssot.mdparallel-modes.md §3.6

适用读者
  • 关心 0.10.0LoadRef 大键集 + 分片等待重叠的使用方
  • 需要讲清「命名变更 / 何时加速 / 何时不变 / QPS 风险」的维护者
  • 想看前后对拍数字与图的同学

版本锚定:Scalim 0.10.0。
同一 LoadRef(keys) 被分片后,片间默认仍串行
0.10 新增 Python opt-in:在 parallel_mode="adaptive" 下允许片间并行,重叠 RTT 等待——当时无新 YAML 并行键;分片大小 alone 不是并行开关。

契约 0.10.0 行为
Authoring YAML 无新并行键;当时仍可用 YAML lookup_chunk_size 表示分片大小(c40 后已迁出
默认 关闭;未 opt-in ≡ 今日串行分片
parallel_mode=seq 永不分片并行(即使 opt-in)
合并 / 成功路径调用次数 ≡ 串行(first-wins by chunk_offset
峰值 RSS(分进程对拍) +10%
观测 loader_call.chunk_offset;完成序;回调可能在 worker 线程

架构 / 护栏:parallel-modes.md §3.6
版本亮点总览:0.10.0 重点特性

0.10.0 重点特性 · 版本总览(折叠)

单一事实来源为独立章节 0.10.0 重点特性,此处折叠预览。

姊妹能力:write-precompute-0.10 · rowwise-fusion-0.10

测量摘要日期:

数据:assets/data/lookup-chunk-parallel-0.10.json

1. 命名与公开面(相对 ≤0.9)

名称 变更 说明
parallelize_lookup_chunks 新增 DemandRunRuntimeOptions / PipelineOverrides / ExecutionRequestbool,默认 False
max_chunk_workers 新增 单步扇出可选帽;None = 只受 resolved adaptive workers W
lookup_chunk_size 不变 YAML / IR 仍只表示分片大小;不是并行开关
parallel_mode 不变 仍只有 seq / adaptive;不新增第三种 mode
LoaderCallEvent.chunk_offset 新增可选 分片路径填充;并行为完成序;订阅方须线程安全

启用示例(Python):

from scalim.dsl.yaml_dsl import DemandRunRuntimeOptions

options = DemandRunRuntimeOptions(
    parallel_mode="adaptive",
    parallelize_lookup_chunks=True,
    max_workers=8,          # 全局在途帽 W
    max_chunk_workers=None, # 可选:单步扇出再收紧
)
flowchart TD
  A[LoadRef keys + lookup_chunk_size] --> B{parallel_mode=adaptive<br/>且 parallelize_lookup_chunks?}
  B -->|否| S[串行分片 · 今日路径]
  B -->|是| P[独立 chunk 池扇出<br/>在途 ≤ W]
  P --> M[按 offset 升序 first-wins 合并]
  S --> M2[同序合并]
  M --> C[至多一次 load_ref_cache 写入]
  M2 --> C

2. 一图看懂:串行分片 vs opt-in 并行

flowchart LR
  subgraph serial["默认 / seq / 未 opt-in"]
    S1[chunk 0] --> S2[chunk 1] --> S3[chunk N]
  end

  subgraph parallel["adaptive + opt-in"]
    P1[chunk 0]
    P2[chunk 1]
    P3[chunk N]
  end

  serial -.->|同一合并语义 · 成功路径 calls 相等<br/>RSS 目标 ≤ +10%| parallel

读法:加速来自 RTT 重叠,不是少调 loader。片数 × RTT 主导时收益最大;外部 QPS 会被放大到约 W


3. 实际例子:前后对拍

合成 sleep-RTT shape(固定 time.sleep,无真实 DB);分进程分别跑串行 / 并行,避免同进程 ru_maxrss 高水位交叉污染。

3.1 加速比(D3)

3.3×–6.4×(Python 3.6.15 sleep 上限;真实库通常更低,取决于连接池与 QPS)。

3.2 墙钟:串行 vs 并行(D3)

3.3 峰值 RSS 增量(D3;虚线 = +10% 目标)

3.4 明细表

测量环境:Python 3.6.15,分进程 A/B。数据:assets/data/lookup-chunk-parallel-0.10.json

Shape keys / chunk / 片数 / RTT / W 串行 (s) 并行 (s) 加速 RSS Δ calls
小键集·高 RTT 600 / 100 / 6 / 50ms / 6 0.303 0.053 5.71× +2.0% 6 =
中等·200 片 20k / 100 / 200 / 5ms / 8 1.086 0.192 5.65× +10.3% 200 =
大键集·100k 100k / 500 / 200 / 5ms / 8 1.355 0.416 3.26× +11.5% 200 =
高扇出·800 片 40k / 50 / 800 / 5ms / 8 4.215 0.655 6.44× +11.1% 800 =

读法

  • 「更快」= 片间等待重叠,不是少算 / 少调用(成功路径 calls 相等)。
  • 大键集加速比略低:物化与合并占比上升,RTT 占比下降。
  • 全部 shape:values_sample 相等。大 shape 进程 RSS Δ 约 +10.3%–+11.5%(略高于目标 ≤10%;属 sleep-RTT 合成证据 / 解释器差异,不改变成功路径语义)。

复现:

# 开发环境
uv run python docs/doc/releases/repro/chunk-parallel/run_ab.py \
  --keys 20000 --chunk-size 100 --rtt-ms 5 --max-workers 8
# Python 3.6 运行时边界
PYTHONPATH=src .tmp/venvs/py36-scalim/bin/python docs/doc/releases/repro/chunk-parallel/run_ab.py \
  --keys 100000 --chunk-size 500 --rtt-ms 5 --max-workers 8 \
  --out .tmp/evidence/c30-chunk-parallel/ab_100k.json

4. 谁受益 / 谁不变

flowchart TD
  Start[你的 LoadRef] --> A{键集很大且已设 lookup_chunk_size?}
  A -->|否| Skip[先别开:没有片就没有重叠]
  A -->|是| B{loader 以 RTT/IO 为主?}
  B -->|否·CPU 重| Mild[收益通常有限]
  B -->|是| C{外部系统扛得住 ≈W 并发?}
  C -->|否| Cap[用 max_workers / max_chunk_workers 收紧或不开]
  C -->|是| Win[opt-in:常见数倍墙钟]
  Start --> D{需要严格主线程 loader_call?}
  D -->|是| Caution[单 ref 退化层时回调在 worker 线程]

失败路径注意:已在途 chunk MAY 仍跑完,错误路径 loader 调用次数可能 高于 串行;成功路径次数一致。半份 merged / 半份 cache 不会当成功返回。


5. GitHub Release 引用

## Highlights
- lookup chunk 并行(opt-in):adaptive + parallelize_lookup_chunks,
  同 LoadRef 多片重叠 RTT;无新 YAML;lookup_chunk_size ≠ 并行开关。
  详述与对拍:docs/doc/releases/lookup-chunk-parallel-0.10.md
- write-precompute:docs/doc/releases/write-precompute-0.10.md
- row-wise fusion:docs/doc/releases/rowwise-fusion-0.10.md

6. 相关链接

  • Spec:llmanspec/specs/execution-refloader-chunk-parallelism/
  • 归档 change:llmanspec/changes/archive/2026-08-02-c30-refloader-chunk-parallelism/
  • 复现脚本(已入库):docs/doc/releases/repro/chunk-parallel/run_ab.py;输出证据(可再生成,不入库):.tmp/evidence/c30-chunk-parallel/