-
Notifications
You must be signed in to change notification settings - Fork 104
Open
Description
Pass “eliminate_consecutive_idempotent_ops“ causes output mismatch
Issue
Running the single pass eliminate_consecutive_idempotent_ops with onnxoptimizer 0.4.2 changes numerical outputs. One real model regresses after this pass only, while the original model runs correctly with the same oracle inputs.
Environment
- Ubuntu 20.04
- Python 3.10
- onnx 1.19.0
- onnxruntime 1.19.2
- onnxoptimizer 0.4.2 (latest)
Repro steps (run from this folder)
- Download and unzip the attached archive, then
cdinto the extracted directory
eliminate_consecutive_idempotent_ops_repro.tar.gz
tar -xzvf eliminate_consecutive_idempotent_ops_repro.tar.gz
cd eliminate_consecutive_idempotent_ops_repro
- 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_consecutive_idempotent_ops:
python optimize_model.py --case ./case_06833_seed74361546
(Writesmodel.opt.onnxnext tomodel.onnxin the case directory.)
- Differential test original vs optimized outputs using stored oracle inputs:
python diff_test.py --case ./case_06833_seed74361546
Observed results
- case_06833_seed74361546: mismatch with orginal model after optimization
Expected
eliminate_consecutive_idempotent_ops should be semantics-preserving. Applying this pass alone should not change any output values. Please investigate why the optimized graph for the above case produces different outputs.
Differential Test Output Details
Case: case_06833_seed74361546
output[0]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(5, 1, 1, 1)
output[1]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(5, 1, 4)
output[2]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(5, 1, 1)
output[3]: max_abs=6.079e+00, max_rel=7.709e+01, shape=(5, 1, 57)
output[4]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(1, 5, 1)
output[5]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(1, 5, 1, 1)
output[6]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(1, 5, 1, 1)
output[7]: max_abs=7.297e-01, max_rel=7.129e+00, shape=(5, 1, 1)
output[8]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(5, 1, 63)
output[9]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(15, 1, 63)
output[10]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(5,)
output[11]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(5, 63)
output[12]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(5, 63)
output[13]: max_abs=0.000e+00, max_rel=0.000e+00, shape=(5, 63)
Overall: max_abs=6.079e+00, max_rel=7.709e+01
Attachments
README.md(this document)requirements.txt(dependency versions)optimize_model.py(runs onlyeliminate_consecutive_idempotent_opsand savesmodel.opt.onnx)diff_test.py(runs original vs optimized with oracle inputs and reports max_abs/max_rel)case_06833_seed74361546/(containsmodel.onnxwhich is original model,oracle.pklwhich is the input data for both original and optimized model)
Metadata
Metadata
Assignees
Labels
No labels