Closed
[Bug-Report|缺陷反馈] 合法上界种子与用例哈希组合后溢出导致 CPU 测试失败 #11
tianjunAdd on  29 days agoClosed at  15 days ago
tianjun
29 days ago Create

场景与影响

随机种子插件将CLI的base与31bit nodehash相加,未经有界处理传给torch.manual_seed。真实Torch允许[-2^63,2^64-1],但base=2^64-1等合法上界值加正常nodehash后越界,autousefixture直接报RuntimeError,测试未运行。README承诺base与nodeID生成逐用例稳定随机数;该问题可用完整原插件和真实CPU pytest/Torch独立复现。

版本与位置

master 基线 af459ebfa36cf7f15532cc63385e8d4289704adb。

  • tests/pytest_random_plugin.py
  • tests/host/test_node_seed_overflow.py

复现与验证

最终同13实际CPU pytest CLI:精确基线3 failed、10 passed,最终13 passed、零skip。实际完整插件、真实Torch/Python random均使用原代码/库,无NPU runtime替身。普通/负seed与原可接受派生范围的随机序列保留,2upper与2lower原非法派生输入继续exit1;仅合法Torchbase产生的正向溢出新增64bit环绕。移除此单If后完整原生产AST一致。原配置Ruff/check-format最终exit0、diff --check0,新test完整复制tests/test_config.py MIT/ops-tilelangcontributors头。该仓原生无OAT hook,未执行远端CI/设备测试,不声称相应检查通过。

在仓库根目录,安装Python3+pytest+真实PyTorch即可复现,不需要CANN/NPU。只加载完整原随机种子插件到临时CPU测试目录:

python3 - <<'PY'
import os, shutil, subprocess, sys, tempfile
from pathlib import Path
source = Path('tests/pytest_random_plugin.py').resolve()
for base in (0, -1, 2**64-1, 2**64, -(2**63)-2**31):
    with tempfile.TemporaryDirectory() as directory:
        work = Path(directory)
        shutil.copyfile(source, work / 'actual_seed_plugin.py')
        (work / 'test_cpu_seed.py').write_text('def test_seed_value(seed):\n    print("actual seed:", seed)\n')
        run = subprocess.run([sys.executable, '-m', 'pytest', '-q', '-s', '-p', 'actual_seed_plugin',
                              '--confcutdir=.', '--seed='+str(base), 'test_cpu_seed.py'], cwd=work,
                             env=dict(os.environ, PYTEST_DISABLE_PLUGIN_AUTOLOAD='1', TORCH_DEVICE_BACKEND_AUTOLOAD='0'),
                             capture_output=True, text=True)
        print('base=', base, 'exit=', run.returncode, run.stdout, run.stderr)
PY

真实Torch单独接受seed=264-1。原插件加nodehash后超过上界、fixture报
RuntimeError: Overflow when unpacking long,CPU测试尚未执行;修复将这个合法base派生的溢出种子环绕64bit并成功。
base0/-1原序列保留;base>2
64-1和派生种子仍低于-2**63的原非法输入继续报错,不静默接受超范围base。

本修复分支拟新增回归,上游原版不存在:
python3 -m pytest -q --confcutdir=tests/host tests/host/test_node_seed_overflow.py。
同13真实CPU pytest CLI基线3 failed、10 passed→最终13 passed、零skip。
包含普通/负/双边有效边界、3合法upperbase派生溢出、2upper-invalid与2lower-invalid原错误控制,
以及base略小于lower但派生值合法的原成功输入;不引入新的base下界拒绝规则。
每个原合法输出都与独立Python Random及真实Torch CPU Generator序列核对。
以本 case 干净基线执行适用 pre-commit hooks 与 diff --check 通过。

预期与修复建议

只对base本身处于既有Torch可接受范围且派生值正向溢出的情况做mod2^64;不改变原合法正/负派生值,不为非法超上界base新增静默接受,也不收紧原低base组合后的接受范围。

本地无 NPU,未执行设备运行测试。上述问题通过静态检查或 Host 侧复现验证。

likedislike
tianjun
29 days ago Comments:

/assign @Ethan_Zou

likedislike
CANN-robotCANN-robotCollaborators
29 days ago Assign Ethan_Zou as responsible person
Ttianjun
29 days ago Associated pull request
WwangliweiCollaborators
15 days ago changed custom state from 进行中 to 已解决
WwangliweiCollaborators
15 days ago Close issue
CANN-robotCANN-robotCollaborators
15 days ago Added label: resolved