[BUG] The pass "eliminate_nop_cast" causes output mismatch
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 834
- Forks
- 109
- Avg merge
- 6h 55m
- Merged PRs (30d)
- 2
Description
[BUG] The pass "eliminate_nop_cast" causes output mismatch
Issue
Running the single pass eliminate_nop_cast with onnxoptimizer 0.4.2 changes numerical outputs.ORT graph optimizations are disabled during differential testing.
Environment
- Ubuntu20.04
- Python 3.10
- onnx==1.19.0
- onnxruntime==1.23.2
- onnxoptimizer==0.4.2 (latest)
Repro steps (run from this folder)
- Create a Python environment (Python 3.10) and install dependencies:
python3 -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -r requirements.txt
- Optimize a case with only
eliminate_nop_cast(writesmodel.opt.onnxnext tomodel.onnx):
python optimize_model.py --case ./case_04319_seed54453180python optimize_model.py --case ./case_06878_seed74717901
- Differential test for original and optimized models with same oracle inputs:
python diff_test.py --case ./case_04319_seed54453180python diff_test.py --case ./case_06878_seed74717901
Observed results
Mismatches appear in the two cases abouve.
Expected
eliminate_nop_cast should be semantics-preserving. Applying this pass alone should not change any output values.
Differential Test Output Details
- case_04319_seed54453180 — output[6] max_abs=3.174e-01 max_rel=1.693e-01; output[8] max_abs=4.484e+18 max_rel=4.484e+26; overall mismatch.
- case_06878_seed74717901 — output[4] max_abs=6.900e+01 max_rel=5.694e+01 (largest); output[1] max_abs=7.354e+00 max_rel=1.316e+00; overall mismatch.
Case: case_04319_seed54453180 (ORT graph optimizations disabled)
output[0]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(9, 1)
output[1]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(1, 53)
output[2]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(9, 53)
output[3]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(9, 53)
output[4]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(9, 53)
output[5]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(9, 53)
output[6]: max_abs=3.174e-01, max_rel=1.693e-01, shape=(9, 53)
output[7]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(53, 9)
output[8]: max_abs=4.484e+18, max_rel=4.484e+26, shape=(1, 1, 1)
output[9]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(9,)
output[10]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(9, 53)
output[11]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(9, 53)
output[12]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(9, 53)
output[13]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(9, 53)
output[14]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(9, 53)
Overall: max_abs=4.484e+18, max_rel=4.484e+26
Case: case_06878_seed74717901 (ORT graph optimizations disabled)
output[0]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(46, 47)
output[1]: max_abs=7.354e+00, max_rel=1.316e+00, shape=(47, 47)
output[2]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(47, 47)
output[3]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(47,)
output[4]: max_abs=6.900e+01, max_rel=5.694e+01, shape=(1, 47, 49)
output[5]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(1, 47, 1)
output[6]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(47,)
output[7]: max_abs=0.000e+00, max_rel=0.000e+00, shape=()
output[8]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(47, 47)
Overall: max_abs=6.900e+01, max_rel=5.694e+01
Attachments
requirements.txtoptimize_model.pydiff_test.py(runs original and optimized with same oracle inputs; ORT graph optimizations disabled)run_optimized_model.py(executes optimized model with oracle inputs)case_04319_seed54453180/(original and optimized model with oracle inputs)case_06878_seed74717901/(original and optimized model with oracle inputs)
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Run optimize_model.py and diff_test.py for case_04319_seed54453180 and case_06878_seed74717901 using the supplied requirements.txt, with ORT graph optimizations disabled. Inspect the eliminate_nop_cast pass entry point and compare the original and optimized outputs; done means both cases produce identical outputs when that pass is applied alone.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp, python
- Domain
- machine-learning, tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100