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


29 days ago Assign Ethan_Zou as responsible person
15 days ago Added label: resolved
场景与影响
随机种子插件将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.pytests/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>264-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 侧复现验证。