目录 / 文档-技术白皮书 / 12-EFT.WP.Methods.Repro v1.0
I. 范围与目标
- 本章定义环境锁定对象 EnvLock 的结构、生成与验证流程,覆盖 OS/内核、驱动/固件、编译器/运行时、数值库与并行后端、容器/虚拟化、硬件与调度策略等要素;规定环境漂移检测与回退策略。
- 目标包括:
- 建立可验证的环境摘要 EnvLock.digest,保证同一代码/数据/参数/时基映射 ts = alpha + beta * tau_mono 下的重放一致性。
- 定义并执行环境差异的度量与门限,使 E_ENV_DRIFT、E_NONDETERMINISM、E_TIMEBASE_SKEW 等异常可被及时识别与处置。
- 给出跨硬件与多后端的确定性运行策略(线程亲和、算子确定性、浮点模式与随机源屏蔽),与 Mx-3* 流程对接发布。
II. 术语与符号
- 环境锁定与指纹
- EnvLock:环境锁定对象,包含字段集合 env.{os,kernel,libc,compilers,runtimes,drivers,firmware,containers,hw,backend,options}。
- EnvLock.digest = hash( bytes(os) || bytes(kernel) || bytes(libc) || bytes(compilers) || bytes(runtimes) || bytes(drivers) || bytes(firmware) || bytes(containers) || bytes(hw) || bytes(backend) || bytes(options) )。
- fingerprint = hash( bytes(code) || bytes(params) || bytes(env) || bytes(inputs.meta) )(引自第4章)。
- 并行与数值模式
- backend ∈ { cpu , gpu , accel },blas_impl,lapack_impl,dnn_impl。
- 线程与亲和:threads,affinity,numa_map,omp_schedule,openmp_num_threads。
- 浮点与舍入:round_mode,ftz,daz,fma。
- 随机源:rng_family,seed。
- 硬件与驱动
hw-sku(CPU/GPU/加速卡/内存/存储/网卡的可复现标识集合),microcode,driver-set。 - 异常与门限
- E_ENV_DRIFT,E_NONDETERMINISM,E_TIMEBASE_SKEW,E_SEED_INVALID。
- 门限占位:tau_env_det,tau_var,tau_threading,tau_rep_migrate(与第3章、4章口径一致)。
III. 公设与最小方程
- P31-7 环境锁定公设
在相同 EnvLock.digest、fingerprint、seed 条件下,且时基对齐 ts = alpha + beta * tau_mono,重复运行所得输出分布一致,满足 delta_rep → 0 与 delta_psd → 0;违背时触发 E_NONDETERMINISM 或 E_TIMEBASE_SKEW。 - P31-8 调度与核内确定性公设
当 affinity 固定、禁用非确定性算子且浮点模式固定 { round_mode , ftz , daz , fma } 时,多线程结果与单线程结果差异受界 delta_rep <= tau_env_det。 - S32-9 环境相似度与漂移量
定义相似度 sim( EnvLock_a , EnvLock_b ) ∈ [0,1] 为加权匹配:
sim = ( ∑ w_i * match_i ) / ( ∑ w_i ),其中 match_i ∈ {0,1};漂移量 drift = 1 - sim。通过条件:drift = 0。 - S32-10 重跑方差约束
var_run = var( y^{(k)} ), k = 1..N 在固定 EnvLock 与 seed 下满足 var_run <= tau_var,否则记 E_NONDETERMINISM。 - S32-11 浮点可复现实验式边界
设归一误差 delta_rep = ( norm( y_new - y_ref ) / max( norm( y_ref ), eps_floor ) ),在固定 round_mode 与 fma 开关下,delta_rep 应不增于放宽模式:
( delta_rep | strict_fp ) <= ( delta_rep | relaxed_fp )。若反例出现,标记实现不一致需禁用相关优化。
IV. 数据与清单口径
- EnvLock 最小字段集合
- OS 与内核:os.name,os.version,kernel.version,libc.version。
- 编译器与运行时:cc.version,cxx.version,fortran.version,python.version 或等价运行时,关键构建旗标集合 build.flags(示例:-ffast-math,-fno-fast-math,-fmad)。
- 数值库与后端:blas_impl,lapack_impl,dnn_impl,fft_impl,各自 version 与 determinism_flag。
- 并行域:backend,threads,omp_schedule,affinity,numa_map,env.{OMP_NUM_THREADS,MKL_NUM_THREADS,BLAS_THREADS}。
- 浮点域:round_mode,ftz,daz,fma,denorm_policy。
- 硬件/驱动/固件:hw-sku,microcode,driver-set,firmware。
- 容器与虚拟化:container.id,container.digest,runtime.version,hypervisor。
- 随机源:rng_family,seed,seed_policy(固定/派生)。
- 时基关联:alpha,beta,r_tb(时基拟合残差)。
- 校验:EnvLock.digest,generated_at,generated_by。
- 入湖清单与发布必备
release.channel,changelog.ref,compat.base 与 compat.result,pass.rep,E_* 列表,notes。
V. 算法与实现绑定
- I30-1 freeze_environment(config:dict) -> EnvLock
- 采集系统与库版本、后端与线程、浮点与随机源、容器与驱动、硬件特征,填充 env.*。
- 生成 EnvLock.digest;返回 EnvLock 并落盘至不可变存储。
- 若缺字段,抛出 E_ENV_DRIFT 并阻断发布。
- I30-1a enforce_env(lock:EnvLock) -> dict
- 设置 threads、affinity、numa_map、round_mode、ftz、daz、fma、rng_family、seed。
- 选择确定性算子或禁用非确定性路径(如固定归约顺序与调度策略)。
- 执行探针计算 probe() 并记录哈希 h_probe = hash( bytes(probe_out) ) 作为烟囱测试。
- I30-1b detect_drift(lock_now:EnvLock, lock_ref:EnvLock) -> {drift:float, sim:float, report:any}
依据 S32-9 计算 sim 与 drift;若 drift > 0,输出差异矩阵并触发回退剧本。 - I30-6 align_timebase(trace:any, reference:any) -> {alpha:float, beta:float, fit:dict}
与第3章口径一致,用于时基对齐,避免将 E_TIMEBASE_SKEW 误判为 E_ENV_DRIFT。 - 相关异常
E_ENV_DRIFT,E_NONDETERMINISM,E_TIMEBASE_SKEW,E_SEED_INVALID,E_BACKEND_UNSUPPORTED。
VI. 计量流程与运行图
- Mx-30 环境勘测与标准化
- 调用 freeze_environment 生成 EnvLock;补齐最小字段并签名归档。
- 输出 EnvLock.digest 与探针 h_probe。
- Mx-31 强制执行与烟囱测试
- 调用 enforce_env 固定线程与浮点/随机模式。
- 运行 probe() 对比 h_probe;不一致则 E_ENV_DRIFT。
- Mx-32 重跑方差评估
固定 seed 重复 N 次,计算 var_run 与 delta_rep;确保 var_run <= tau_var。 - Mx-33 漂移监控与告警
周期性采样 EnvLock,计算 drift;若 drift > 0,触发 TS.alert.env_drift 与回退。 - Mx-34 发布与取证
生成发布包附 EnvLock、h_probe、var_run、delta_rep、delta_psd;进入 release.channel 并存档。
VII. 验证与测试矩阵
- 单机确定性
- 同机同锁定运行 N 次:var_run <= tau_var 且 delta_rep <= tau_env_det。
- 线程数切换:threads = 1 与 threads = k 的 delta_rep <= tau_threading。
- 跨后端一致性
- backend = cpu 与 backend = gpu 在 strict_fp 下:R_coef >= 1 - tau_env_det。
- 禁用非确定性算子后,delta_psd 不增。
- 浮点模式回归
切换 fma 与 round_mode 验证 ( delta_rep | strict_fp ) <= ( delta_rep | relaxed_fp )。 - 时基独立性
变更计时器或性能计数配置,仅影响 ts/tau_mono 映射,不应改变 probe() 与主输出。 - 驱动与固件升级
单独升级 driver-set 或 microcode:若 drift > 0,需重新评估 delta_rep 与 var_run,不通过则回退。
VIII. 交叉引用与依赖
- 《Core.Threads》:TS.* 指标、调度与限流、回退与补偿事务。
- 《Core.Sea》:时基对齐 ts = alpha + beta * tau_mono,到达时两口径报告 delta_form(若适用)。
- 《Core.Metrology》:谱估计 S_xx(f)、窗口 U_w、ENBW 与校核。
- 《Core.DataSpec》:EnvLock、fingerprint 的入湖字段与发布形制。
- 第3章与第4章:公设与指纹、血缘与版本策略的口径继承。
IX. 风险、限制与开放问题
- 风险
- 第三方远程服务或隐性缓存未纳入 EnvLock 将造成幽灵依赖。
- 集群调度器的资源超售与迁移导致 affinity 失效,引入非确定性。
- 限制
- 某些库的确定性模式存在显著性能退化,需在 release.channel 与 SLO 之间权衡。
- 不同硬件指令集(如向量宽度)带来的舍入差异无法完全消除,只能通过门限控制。
- 开放问题
- 面向流式长任务的在线 EnvLock 增量校验与细粒度漂移定位。
- 跨站点硬件差异的自动补偿与自适应门限设定。
X. 交付件与版本管理
- 产出件
- EnvLock JSON 模板与校验器。
- 探针集合 probe():线性代数、卷积、归约、随机样本回放的参考实现与 h_probe 基线。
- 回退剧本与 TS.alert.env_drift 告警规则。
- 版本管理
- EnvLock 字段变更遵循 MAJOR/MINOR/PATCH,与 schema.version 同步。
- 任一 MAJOR 变更需提供双跑比对与 compat(...) 证明,且在 canary 通道完成 Mx-30 → Mx-34 全链验证后再推广至 stable/LTS。
版权与许可(CC BY 4.0)
版权声明:除另有说明外,《能量丝理论》(含文本、图表、插图、符号与公式)的著作权由作者(“屠广林”先生)享有。
许可方式:本作品采用 Creative Commons 署名 4.0 国际许可协议(CC BY 4.0)进行许可;在注明作者与来源的前提下,允许为商业或非商业目的进行复制、转载、节选、改编与再分发。
署名格式(建议):作者:“屠广林”;作品:《能量丝理论》;来源:energyfilament.org;许可证:CC BY 4.0。
首次发布: 2025-11-11|当前版本:v5.1
协议链接:https://creativecommons.org/licenses/by/4.0/