From 73129417d4af9a6f1f2e3fe9551519ff15069b70 Mon Sep 17 00:00:00 2001 From: JinYan Su <751080330@qq.com> Date: Wed, 14 Oct 2026 06:55:55 +0000 Subject: [PATCH] docs: the kernel registry reads as open source, its blob store public Co-Authored-By: Claude Opus 5.5 Signed-off-by: JinYan Su <751080330@qq.com> --- docs/qwen38-bringup-prompt.md | 2 +- docs/registry.md | 18 +++++------------- docs/roadmap.md | 2 +- 3 files changed, 7 insertions(+), 15 deletions(-) diff --git a/docs/qwen38-bringup-prompt.md b/docs/qwen38-bringup-prompt.md index 07cc3094..53dc950f 100644 --- a/docs/qwen38-bringup-prompt.md +++ b/docs/qwen38-bringup-prompt.md @@ -7,7 +7,7 @@ Rust 在 `kernel-lab` 容器里构建,home 挂在 `/work`;binary 宿主机 ## 这件事为什么重要 -kern 卖的是 model-agnostic runtime,但到今天只跑过 Qwen3-4B。这次的目标不只是 +kern 是 model-agnostic runtime,但到今天只跑过 Qwen3-4B。这次的目标不只是 "跑通",而是拿到一份可公开的证据:**一个 agent 从零把一个结构完全不同的新模型 带上 kern,花了多久、改了什么、没改什么。** 整个 session trace 会开源。所以: diff --git a/docs/registry.md b/docs/registry.md index f65ba5d8..1ea018a7 100644 --- a/docs/registry.md +++ b/docs/registry.md @@ -17,11 +17,11 @@ vendored 的 CUTLASS 核、自己的手写核),每挖一个都要花一次 A | 事项 | 决定 | |---|---| -| 字节放哪 | HF private 仓库 `Pegainfer/kern-kernels`,`blobs/` 平铺、无扩展名,与本地缓存 `~/.cache/kern/blobs/` 同构 | +| 字节放哪 | HF 公开仓库 `Pegainfer/kern-kernels`,`blobs/` 平铺、无扩展名,与本地缓存 `~/.cache/kern/blobs/` 同构 | | 事实记哪 | 独立 private Git 仓库的 `index/.toml`(`KERN_INDEX_DIR` 指向该目录),一族一文件,由导入工具生成、CI 检查、人 review | | ABI 在哪 | `tools/kernels/abi/.py`,一族一个 Python 模块,输入 index 里的 variant 与形状、输出 manifest op 的 `impl`(今天的 `trtllm_fmha_abi.py` 就是这个形状) | | runtime 改什么 | `source` 除 `hf:` 外接受裸 `https://` URL(`hf:` 退化为 URL 模板的语法糖);modules 全是 registry ref 时不再要求 `--kernels` 目录 | -| 换主机怎么办 | 改 `source` 标签、重生成 manifest;sha 不变,index 不变。on-prem 交付 = 拷 `blobs/` 目录,不需要任何 registry | +| 换主机怎么办 | 改 `source` 标签、重生成 manifest;sha 不变,index 不变。离线部署 = 拷 `blobs/` 目录,不需要任何 registry | | 不做什么 | 不做查询服务;TOML 里不做模板语言(ABI 留在 Python);不按模型建索引;runtime 不知道 index 的存在 | ## 2. Blob store @@ -49,12 +49,6 @@ runtime 校验的是第三个,前两个换了都不影响运行。同一个 bl 有了 index 之后翻目录的场景消失,而平铺 sha 换来三件事:镜像是 `rsync`、 本地缓存目录就是完整的离线分发单元、永远没有重命名与冲突。 -**为什么 HF、为什么 private。** runtime 已经会读 `HF_TOKEN` 拉 `hf:`,零改动; -第三方 cubin(Apache-2.0)与我们自己的 ABI、报告混放在一个仓库里最省事, -所以整仓 private。网络不是考虑项(海外机器)。等有第一个外部客户,按客户的 -交付形态把 `blobs/` 镜像到自己域名下的对象存储或客户的 OCI 仓库,只改 -`source` 标签。 - **许可证。** 再分发 Apache-2.0 的 cubin 要带 NOTICE:每个 family 的 index 记 `license` 与 `license_blob`(LICENSE 文本的 sha),仓库 README 列全部来源。 `Pegainfer/kern-qwen38-sm103` 里的 `licenses/LICENSE.trtllm-gen.txt` 就是第一份。 @@ -163,12 +157,10 @@ launch = abi.trtllm_bmm.op(v, n=6144, k=3584, ...) # v.module 给 {"cubin": "h - 模型仓库(`Pegainfer/kern-qwen38-sm103` 一类)以后只放 manifest 与模型自己的 东西,cubin 一律指向 `kern-kernels`;现有仓库不动,新 manifest 按新写法生成。 -## 5. 商业上意味着什么 +## 5. 约定 -index 是资产,blob 不是:第三方 cubin 谁都能从 wheel 里拿,我们卖的是"这个 -形状用哪个变体、ABI 怎么摆、测过多少"。index 进 git 意味着它有 review 和历史; -TOML 已移到独立 private Git 仓库,格式不变;公开仓库保留索引工具与 ABI 代码。blob store -换主机是标签改写,离线交付是一个目录。继续遵守:不把事实写进 blob 的文件名,不让 runtime 依赖 HF 的任何特性。 +index 进 git,有 review 和历史;TOML 在独立的 Git 仓库(见第 3 节),公开仓库保留索引工具与 ABI 代码。 +blob store 换主机是标签改写,离线部署是一个目录。不把事实写进 blob 的文件名,不让 runtime 依赖 HF 的任何特性。 ## 6. 门禁 diff --git a/docs/roadmap.md b/docs/roadmap.md index cc038e0e..9bcd743c 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -56,7 +56,7 @@ kern 在内部 RSI 里是 kernel agent 的反馈环境(`kern test` 裁判、`k | 级 | 内容 | 门禁 | |---|---|---| | R1 ✅ | runtime:module `source` 接受裸 `https://` URL,`hf:` 是它的 URL 模板语法糖;modules 全是 registry ref 时 `Runtime::load` 不要求 kernels 目录;缓存目录(`KERN_CACHE_DIR`)即离线分发单元 | kern-manifest verify 测试覆盖 `https://` 与畸形 URL;预填缓存、断网、无 `--kernels` 下 `kern run examples/qwen3-4b.json` 与有网时逐字同。**2026-09-19 tray14 过**:modules 全改成 `https://blobs.invalid/blobs/`(无法解析的 host)+ 预填 `KERN_CACHE_DIR`,无 `--kernels`,32 token 与本地 cubin 跑逐字同、0 次 fetch(`~/bench_results/2026-09-19-registry/`) | -| R2 ✅ | blob store `Pegainfer/kern-kernels`(private,`blobs/` 平铺)+ `$KERN_INDEX_DIR/.toml` + `tools/kernels/abi/.py` + `check.py`(CI);三个预编译核(trtllm fmha ctx、DSL mla decode、flash_kda)与手写核迁入,`handwritten.hw()` / `prebuilt()` 收编为 index 查询,`tools/kernels-bin/` 与生成器里的 nvcc 路径删除 | 重生成的 `examples/k3-*.json` 除 module `source` 外逐字节相同;4 层 TP4 prefill c8/c40/c7 与 EP4 c8/c40+free16 全 exact(同 P 行口径);`check.py --online` 全部命中。**2026-09-19 tray14 过**:10 个 example 重生成 0 行非 source 差异;43 族 49 变体 53 blob 上传,`check.py` 离线/在线 0 问题;k3_golden 用空 `--cubins` 目录跑 TP4 c8/c40/c7、EP4 c8/c40+free16、decode span8/plain 七项,exact 数与 09-18 逐项相同(span8 的 1 wrong 是同一个近平局);`~/bench_results/2026-09-19-registry/` | +| R2 ✅ | blob store `Pegainfer/kern-kernels`(`blobs/` 平铺)+ `$KERN_INDEX_DIR/.toml` + `tools/kernels/abi/.py` + `check.py`(CI);三个预编译核(trtllm fmha ctx、DSL mla decode、flash_kda)与手写核迁入,`handwritten.hw()` / `prebuilt()` 收编为 index 查询,`tools/kernels-bin/` 与生成器里的 nvcc 路径删除 | 重生成的 `examples/k3-*.json` 除 module `source` 外逐字节相同;4 层 TP4 prefill c8/c40/c7 与 EP4 c8/c40+free16 全 exact(同 P 行口径);`check.py --online` 全部命中。**2026-09-19 tray14 过**:10 个 example 重生成 0 行非 source 差异;43 族 49 变体 53 blob 上传,`check.py` 离线/在线 0 问题;k3_golden 用空 `--cubins` 目录跑 TP4 c8/c40/c7、EP4 c8/c40+free16、decode span8/plain 七项,exact 数与 09-18 逐项相同(span8 的 1 wrong 是同一个近平局);`~/bench_results/2026-09-19-registry/` | | R3 ✅ | 第一个新族 `trtllm_bmm_mxe4m3_mxe2m1_mxe4m3`(flashinfer-cubin 0.6.18 的 trtllm-gen batched GEMM,`siTuGlu` 变体即 K3 的激活):整族导入、ABI 从 bundle 的 `KernelParams.h` + `flashinferMetaInfo.h` 写、vLLM 容器里 `trtllm_fp4_block_scale_moe` 探针 capture 验证;K3 prefill 的 MoE 换成 allgather(fp8 latent) → CTA 表 → FC1 → FC2 → finalize → reduce-scatter,MegaMoE 留给 decode 形态;`[[pick]]` 由 `kern bench` 对 16k/4 行的 K3 形状扫 tile 变体写入 | 4 层 TP4 prefill 门禁不变;93 层 12.9k 判定点对;16k over 0 < 780 ms(MegaMoE 231 ms 里 GEMM 之外的 86 ms 是靶,新增两次集合通信预算 ~40 ms)。**2026-09-19 tray03 过**:两族 215 变体导入、ABI 移植对 capture 逐字段 0 差异、probe 门禁 `out` 逐位同;`kern bench` 扫 18 对 tile 变体(`k3-prefill-16k-ep4`)写入 pick(tile 128:FC1 0.85 / FC2 0.40 ms 每层,捕获的 tile 64 是 1.23 / 0.58);4 层 TP4 c40 1/1、c7 6/6,c8 4/5(step 15 是 4 ulp 近平局,逐层对比 MegaMoE 形态:同专家集合的行差 ~5% 即两条路各自的 fp8 中间量化);93 层 12.9k 单块 2/2、c8 16/17(之前 13/17);**16k over 0 = 749.5 ms**(之前 780;MoE 本体 231 → ~156,reduce-scatter 多出的 54 ms 是等最慢 rank 的专家负载);`~/bench_results/2026-09-19-registry/` | ## 流水线线(PP)