Repository navigation
Feature/c1 850m f16 jit - #47
Closed
EthanPeng-2048 wants to merge 16 commits into
Closed
EthanPeng-2048 wants to merge 16 commits into
EthanPeng-2048 wants to merge 16 commits into
Conversation
…无引用,rc0 迁移残留)+ 8 个引擎功能头(expr_dsl/expr_fold/expr_registry/ternary_pack/int8_pack/kernel_cache/kernelgen_api/nn_api)改由 engine/engine/include 解析(include 路径兜底,消费侧头仍在主仓);doc 链接修正
…dule 命令镜像组装(调用方 flags/配置 flags/Threads 属性/NN_GPU_ENGINE 生成期求值/5 条 -I),治 module config mismatch(docs/internal/35 P0)
…NN_USE_MODULES 宏传播,src/ 8 处双轨改无条件 import(tokenizer_consistency 经 tokenizer_test 文本 include 覆盖,无需单独接线)(docs/internal/35 P1)
…rors/core_assert 经其提供宏;src/ 68 个宏使用文件显式 #include <nn_error_macros.hpp>(7 处 core_errors 直接包含改为岛头,assert_test 同);submodule 指针 10e2755 锁定(docs/internal/35 P2 验收门 C:ctest 81/81,error_macro/assert 三测绿)
- D5 运行期:新增 cli/cli_jit_warmup.hpp(model_warmup 封装,CPU 跳过、失败 NN_EXIT);text_train/mnist_train/mnist_infer/text_infer 四入口接线 + 各自 --no-warmup 逃生阀(text_train 走 TrainConfig::jit_warmup) - D5 构建期:新增 nn_warmup 目标(MLP/CNN/Transformer/GPT/RAPT 五架构代表性 shape 过 GPU forward → kernels.nnk 落 --out/可执行目录,随发布分发) - 实测:mnist 冷 1331ms→热 148ms、text_train 冷 1665ms→热 535ms;strict+屏蔽 kernelgen 下预生成缓存命中(warmup 10ms、训练完成)= D6 端到端实证 - D4 主仓侧:删 src/expr_fuse_shapes.hpp(expr_fuse_test 已随 .so 化迁至 engine,无引用死文件);CMake/层头/测试中承诺 AOT 收集的注释改为 JIT 现实口径 - 回归锁:fused_gpu_test 增 cast_into 奇数元素覆盖(f16 缓冲 4B 对齐根因)与 matmul 形状矩阵(尾链/转置/f16 变体);fused_gpu_test 直连后端形态改工厂消费方形态(NN_HAS_VULKAN 遗留守卫) - 台账:新增 docs/internal/36-compromise-ledger.md(C1-C5 妥协式设计,门 G 前必须清零)并登记 internal/README 索引;submodule 指针 → 818a63a - 验收门 D:ctest 81/81;expr_gpu/ce_fusion/kernel_cache/jit_demo 全绿
- D7 落地:export using namespace nn; 命名空间级 re-export 被 clang 接受且消费方可见——nn.core 逐符号清单删除(60 行 using → 1 行),新域模块全部薄形态(GMF + export import core + 命名空间导出) - 新增 9 域:nn.expr / nn.engine / nn.layer / nn.loss / nn.opt / nn.model / nn.train / nn.domain / nn.cli(DEPS 全部 core,无域间环) - CMake:NN_MOD_*_HEADERS 头包含图闭包(expr22/engine37/layer22/loss10/opt12/model31/train48/domain27/cli74)+ 9 个 nn_add_module 注册;nn.core 补 core_observer_ptr - 修复头自包含缺陷:cli_engine_factory.hpp 默认实参用 std::cerr 却仅 <iosfwd>(nn.hpp include 顺序掩盖,GMF 首包即暴露)→ 改 <iostream> - 门 E:13/13 BMI 构建成功;BMI↔消费方命令 diff 仅模块差异;既有 8 消费方零改动;ctest 81/81
…g 规避(C6)+ PCH 机制删除(D9) - D8 单点接线:nn_add_executable 自动挂全部域模块(-fmodule-file 链),删 8 处显式 nn_use_modules - src/ 79 TU 全量 import 化:门 F 归零(angle/quoted/相对形式 include 全 0,79/79 含 -fmodule-file);import 一律置尾、using 随后(GMF×系统头双包含规避);examples 2 处库外样例按设计保留文本 include - 13 域模块导出定型:GMF includes + export import 依赖链 + export namespace nn 镜像嵌套全限定 using(D7 证伪命名空间级导出后的唯一可行形态) - 链接修复:text_train_config 三函数 inline(消费方无文本包含,需由 BMI 发射定义) - ccache×模块根因修复:模块消费方目标禁编译 launcher——ccache 4.13 手册明言不支持 C++20 modules,pcm 内容不进 key,BMI 变更后吐旧 .o(text_train 的 parse_text_train_args undefined 即此);正确性由 ninja 依赖保证 - clang 24 上游 bug 规避:tokenizer_consistency 的 old markers 改 string_view 打破与库构造同形——「多模块 import × 同 TU 两个 identical static local 构造」组合 -O0/-O3 均产出错值(纯代码与 gcc 全过、写法经 cppreference 确认无 UB);触发矩阵与最小复现 = 36 号台账 C6,待上游修复后撤除特意差异 - D9:PCH 候选清零 → 整体删除 nn_pch 机制/cmake/nn_pch_stub.cpp/NN_ENABLE_PCH(含 presets 与候选登记剔除逻辑);ccache sloppiness 注释改写(pch_defines 转无害冗余) - 宏岛头次序修复随 submodule 指针 19bc1e0:core_errors 必须先于 core_assert(fatal_at 引用 fail_abort,PCH 移除后暴露的潜伏缺陷) - doc_audit:scan_exprs/fused_generate 历史引用与 git --depth 入白名单(带来历);35 号只读实施文档头部豁免;36 号头部合规化;AGENTS + internal/README 登记 35/36 - 验收(docs/internal/35 门 F):ctest 81/81 + doc_audit 全绿 + 全量构建 0 错
- OBJECT_DEPENDS 正确性修复:nn_use_modules 把 BMI 挂进消费方源文件编译边 (add_dependencies 是 order-only + clang -MD 不记 pcm → 改公共头只重编 BMI、 消费方 .o 陈旧;修复后改公共头 = 82 TU + 13 BMI + 全链接正确重编) - 门禁固化:configure 期 nn-gate 检查 src/ 残留 #include <neuralnet.cpp/…> (合法例外仅 nn_error_macros.hpp 宏岛头与 STL),正反验证通过 - 性能对照(P5 后口径):改 consumer 源 ≈79s / 改公共头 ≈35min / 冷构建 ≈15min, 归档 research §6.3 与 history - 文档同步:AGENTS(§2 选项/提速、§3 模块行、§7 三处按 P3/D4 修正、索引)、 development/01 §8/§8.1、development/02 §1.3/§17 宏岛头、usage/05 删 PCH 行、 history P5/P6/clang-bug 三条、36 号 C6 行更新(复测 + LLVM issue #239625) - doc_audit 全绿;ctest 81/81(全量重建后)
- 36 号台账:C3(NN_IRC_TRACE 正式化 + 删 [ir-c][run])与 C5(kernelgen 诊断 转正)标记 ✅;C1 新增「C1-调查」行(2026-11-06 复现与排除进展:GPU full-f16 图路径 step 1 更新即 NaN 稳定复现;已排除直求值差异/plan cache/cast.comp; 现场 = 152 全 F16 节点图拆单输出 kernel 走边界 cast,K1/K2/K3 输入出现 NaN 且 v 读到数学上不可能的负值 ⇒ 指向占位缓冲跨 kernel 依赖链的绑定/写回一致 性;C2/C4 依赖 C1 同组卡住) - submodule 指针锁定 8231582(C3/C5 消灭)
- 补充 36 号台账 C1-调查行:K3 录制时 m_[i]/v_[i] 的 precision() 报告 F32、 dispatch 时 d.ins/d.out 全 F32,但 record_graph_node_ 确认 K1 占位 P=0(F16)—— 占位张量精度状态与缓冲不一致,怀疑跨 DSO(抽象层 NVI 主程序实例化 vs 引擎 .so) 的张量精度视图分裂;下一步建议打印 K3 录制时 m_[i] 的 virtual_tag 对比 K1 占位 - 本轮所有 C1 临时调试改动已还原(工作树干净,f16_precision_test ALL PASSED)
40HX(Windows + clang 23 + MSVC STL + GPU + 模块)首次全量构建实测:
- CMakeLists:WIN32 全局 _CRT_SECURE_NO_WARNINGS(MSVC CRT 的 getenv 弃用
在 -Werror 下编译失败,nn_warmup/引擎头均中招)
- nn_add_module BMI 镜像补 CRT 宏(-D_DLL -D_MT -Xclang
--dependent-lib=msvcrt,WIN32+Clang):pcm 编译时 MSVC STL 写
MT_StaticRelease linker options、import 传播进消费方 obj 与本地 MD 冲突
(lld-link RuntimeLibrary mismatch)——最隐蔽的一处
- 测试文件显式 include <span>/<optional>(MSVC STL 不传递包含,模块消费方
报 missing '#include'):adam_quant/bitnet_struct/optimizer_state/
write_epoch/rl_pipeline;batch_source 的 optional<size_t>==int 改
== std::optional<size_t>{3}(MSVC STL 无 optional 与 int 直接比较)
- submodule 指针随 engine 修复更新(f9bf542,见 engine 提交)
40HX(CMP 40HX,Turing TU102,shaderFloat16 ✓)上 graph_ok 恒 true 的 同代码 f16_precision_test ALL PASSED(CPU+GPU,无 NaN)→ C1 根因 = 850M (Maxwell 无 shaderFloat16)f16 回退/边界 cast 写回路径设备特有,非跨设备 代码 bug。消灭路径:850M 上重跑 C4 的「静态签名 JIT(#s)vs 边界 cast」 单变量 A/B(#s 仅需 16bit 存储,若在 850M 绿则 C1/C2/C4 一组可彻底消灭)。
…+ submodule f9bf542)
- K1/K2 由 compute+move 改为 compute_into(m_/v_[i]):into 是「要求落盘」 的显式声明,配合引擎侧融合器 dst_id 保护,持久状态不再被单输出融合 内联吞掉(此前 v_[i] 读未初始化池残留 → sqrt(负) → step3 起 NaN) - graph_ok 门控删除(原 optimizer=f16 跳录制绕行):根因已修,full-f16 全精度常态走图;NN_NO_GRAPH 旁路一并删除(C1/C2 同组消灭,全仓清零) - 验收:850M 锁定 f16_precision_test ALL PASSED(full-f16 常态走图首验) + ctest --preset dev 81/81 + NN_IRC_TRACE=1 [ir-c][fuse-decline] 生效 - engine 指针随引擎侧修复更新(f9bf542..5e7595c,见 engine 提交)
- pitfalls 新增灾难级 §2.6(融合内联图外持有的持久输出 → 读未初始化内存, 含四层对拍定位手段与「他机不复现=池残留环境依赖」辨析)与根因模式 I (优化变换的视界小于数据的实际持有面)+ 防坑清单「录制段持久状态必须 compute_into」条目 + 严重度总览计数更新 - 36 号台账:C1/C1-调查/C2/C4 改 ✅——根因定案推翻先前「设备差异」收窄 (四层对拍 + 分段融合形态对照实录);消灭顺序段改进度记录(表内仅剩 C6) - C6 补 2026-11-07 实测:clang 23.1.6 同型亦复现(互换症状实录);最小化 推翻「含 cli/8 域」旧记载——单模块 import nn.tokenizer + 218 行即复现, 材料打包仓库外供外部 AI 审查(已确认 clang 侧问题,等 issue #239625 回复)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.