| fix: data_range 值域分布 Co-authored-by: wangrui<wangrui124@huawei.com> # message auto-generated for no-merge-commit merge: !205 merge br_bugfix into master fix: data_range 值域分布 Created-by: wangrui_ Commit-by: wangrui Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [x] 否 [ ] 是 __1. AI Agent 平台: __2. AI 模型: __3. Prompt上下文 : ### PR功能描述 / 为什么需要这个合入**: 修复 issue #135:全值域数据生成(如 [[-3.3895313892515355e+38, 3.3895313892515355e+38]])当前使用 uniform 均匀分布,在极大区间下生成的几乎全是大数据(97% 落在 1e37~1e38 量级),经过计算极其容易溢出,不符合区间语义。 **根因**:浮点数可表示值中大值区间的"体积"远大于小值区间,线性 uniform 采样会让大值占绝对多数,小数几乎无法生成。 **修复方案**:对齐 ATK 的指数分布法(尾数 × 10^随机指数),使各量级概率均等: 1. 新增 _is_full_value_range(dtype, low, high):判定浮点类型且 low/high 覆盖到该 dtype 完整值域(相对容差 99%、跨零对称)。[-inf, inf] 与 [-3.389e+38, 3.389e+38](bf16 max) 均命中。 2. 新增 _gen_exponential_data(dtype, shape):复刻 ATK data_torch.py:41-58 —— 尾数 uniform(-1,1) × 10^randint(log10(tiny), log10(max)),各量级概率均等。 3. 在 _random 的 default 分支接入:仅 distribution=="uniform" 且命中全值域时走指数法;其余(小范围、normal、hifloat4、float64、torch 大张量路径)行为不变。 4. 边界值由既有 _mix_expect_data 自动混入 ±max/±0,补上 ATK 不碰边界的短板。 **生成效果对比**(fp16, shape=720, range=[-65504, 65504]): - 修改前 uniform:量级 e2~e4(仅3档),85% 的值 >1e4,小数 0 个 - 修改后 指数法:量级 e-5~e4 共 10 档均匀分布,小数 142 个,无 inf/nan ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes #135 ### 希望检视人员了解: - 改动仅影响"浮点全值域 + uniform 分布"这一支,小范围区间(如 [-1,1])、normal 分布、int 类型等行为不变 - 顺带修了 CI 门禁卡的两个既有 lint 违规(S307: eval→int、C410: 冗余 list() 调用),均为等价替换 ## 测试 - 新增 3 组回归测试(tests/utilities/test_data.py):全值域 fp32/fp16 覆盖多量级且无 inf、显式 bf16 max 触发指数法、小范围不误触发 - 全量回归:tests/utilities/ + tests/core_modules/manual_data/ + tests/core_modules/npu/test_custom_input_ori_sync.py 共 160 项通过 - ruff 零新增违规 ## 文档更新 无 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!205 | 11 天前 |