You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
yolo26 does not export on the portable backend #21621
yolo26 does not export successfully on the portable backend. The gathered test-models-linux (yolo26, portable) job has been red since the model was added and has never had a green run.
Failure signature:
Expected tensor to have default or channels last dim order, but got dim_order(0)=0 (1)=2 (2)=1 (3)=3
kernel_ops_util.cpp:384 -> op_convolution.cpp:377
KernelCall failed at instruction 0:0 in aten::convolution.out: 0x12
An AOT pass emits a 4D dim order of (0, 2, 1, 3), which the portable convolution kernel rejects.
Because the job never passed, it produces no signal and only adds a permanently red entry to every periodic run, so #21618 skips yolo26 in .ci/scripts/gather_test_models.py.
To close this issue: make yolo26 export cleanly on the portable backend, then remove the skip in model_should_run_on_target_os so the job is gathered again.
yolo26 was contributed as an OpenVINO / XNNPACK example in #18583, and those paths, along with RISC-V, are unaffected and still tested.
Hi @shoumikhin :), I tried to reproduce this on main @939015a3a1 (Ubuntu 24.04, CPU-only torch 2.14.0, using the same steps as test_model.sh). The original failure no longer reproduces, but there is a newer issue that would likely cause the job to fail again if we remove the skip.
ultralytics
released
result on main
8.4.14 (pinned in examples/models/yolo26/requirements.txt)
Feb 2026
exports and runs, outputs match eager within 1e-3
8.4.101 / 8.4.115 (latest while the job was failing)
Jul/Aug 2026
exports and runs
8.4.137
Aug 31
KernelCall failed at instruction 0:0 in aten::convolution.out: 0x12 (tensors_have_same_dim_order(in, out))
8.4.173 (latest)
Oct 4
export fails with PendingUnbackedSymbolNotFound
Original failure: I couldn't identify what fixed it. It doesn't seem to be #22745 (reverting it produces a byte-identical .pte), and exporting with exir/ from before #21618 also works. I can't access the old CI logs, so I couldn't investigate this further.
New failure (8.4.136+): ultralytics now converts the model to channels_last during predict() on x86 CPUs with oneDNN. This leaves YOLO26Model with channels-last weights and a contiguous example input, which the portable conv kernel rejects.
Converting the model back to contiguous format in the wrapper fixes the issue with both 8.4.14 and 8.4.137, and the outputs still match eager:
The underlying ExecuTorch issue (a channels-last-weight conv failing on portable) reproduces without ultralytics. I'll post the details on #11086 since I think that issue belongs there.
Would a PR with the wrapper change and removal of the skip work for you? The job would probably also need the requirements install from #20841. I haven't checked yet whether forcing contiguous affects the OpenVINO/XNNPACK paths that use the same wrapper.
Thanks a lot for digging into this, @HiroForYou. Your version table is really useful.
I went back to the old CI logs, and they answer your open question. The error quoted in this issue did not come from yolo26. It came from the ds_cnn job in the same periodic run, and #21619 fixed that one the same day. The yolo26 job never got that far. In every scheduled run on main whose log is still available and that reached the export, it stopped at No module named 'ultralytics', because test_model.sh never installed the model's requirements. So there was no ExecuTorch fix to find, which is why reverting #22745 and using the older exir/ both worked for you.
So the fix is the requirements install plus removing the skip, in #23449. With the pinned ultralytics==8.4.14, the model exports and runs on portable, which matches what you saw. The Samsung model test imports the same wrapper and hit the same missing package. #23452 installs it there. That test now gets past the import, but it then fails in the Samsung compiler, which needs a fix on the Samsung side.
Your wrapper change is still worth sending as its own PR. I opened #23453 to track it, with both failure modes from your table:
8.4.133 to 8.4.139 switch the model to channels last on x86 Linux and Windows. Your .to(memory_format=torch.contiguous_format) fixes that. Passing channels_last=False to predict() does not work while the pin is 8.4.14, which rejects that argument.
From 8.4.140, strict export fails with PendingUnbackedSymbolNotFound.
The OpenVINO and XNNPACK demo in export_and_validate.py does not use YOLO26Model, so your change does not affect it. The wrapper is used by the generic model registry, so it reaches the portable export, the Samsung and Arm AOT compiler scripts, and the Samsung model test.
Quick update: #23449 and #23452 are both merged. The yolo26 portable job now passes on main.
With #23452, the Samsung model test for yolo26 gets past the import, but then fails inside the Samsung compiler. #23481 tracks that, with the steps for the Samsung team.
Activity
Stop gathering yolo26 for the portable CI matrix (#21618)
HiroForYou commentedon Oct 5, 2026
Hi @shoumikhin :), I tried to reproduce this on main @939015a3a1 (Ubuntu 24.04, CPU-only torch 2.14.0, using the same steps as
test_model.sh). The original failure no longer reproduces, but there is a newer issue that would likely cause the job to fail again if we remove the skip.examples/models/yolo26/requirements.txt)KernelCall failed at instruction 0:0 in aten::convolution.out: 0x12(tensors_have_same_dim_order(in, out))PendingUnbackedSymbolNotFoundOriginal failure: I couldn't identify what fixed it. It doesn't seem to be #22745 (reverting it produces a byte-identical
.pte), and exporting withexir/from before #21618 also works. I can't access the old CI logs, so I couldn't investigate this further.New failure (8.4.136+): ultralytics now converts the model to
channels_lastduringpredict()on x86 CPUs with oneDNN. This leavesYOLO26Modelwith channels-last weights and a contiguous example input, which the portable conv kernel rejects.Converting the model back to contiguous format in the wrapper fixes the issue with both 8.4.14 and 8.4.137, and the outputs still match eager:
The underlying ExecuTorch issue (a channels-last-weight conv failing on portable) reproduces without ultralytics. I'll post the details on #11086 since I think that issue belongs there.
Would a PR with the wrapper change and removal of the skip work for you? The job would probably also need the requirements install from #20841. I haven't checked yet whether forcing contiguous affects the OpenVINO/XNNPACK paths that use the same wrapper.
shoumikhin commentedon Oct 6, 2026
Thanks a lot for digging into this, @HiroForYou. Your version table is really useful.
I went back to the old CI logs, and they answer your open question. The error quoted in this issue did not come from yolo26. It came from the
ds_cnnjob in the same periodic run, and #21619 fixed that one the same day. The yolo26 job never got that far. In every scheduled run on main whose log is still available and that reached the export, it stopped atNo module named 'ultralytics', becausetest_model.shnever installed the model's requirements. So there was no ExecuTorch fix to find, which is why reverting #22745 and using the olderexir/both worked for you.So the fix is the requirements install plus removing the skip, in #23449. With the pinned
ultralytics==8.4.14, the model exports and runs on portable, which matches what you saw. The Samsung model test imports the same wrapper and hit the same missing package. #23452 installs it there. That test now gets past the import, but it then fails in the Samsung compiler, which needs a fix on the Samsung side.Your wrapper change is still worth sending as its own PR. I opened #23453 to track it, with both failure modes from your table:
.to(memory_format=torch.contiguous_format)fixes that. Passingchannels_last=Falsetopredict()does not work while the pin is 8.4.14, which rejects that argument.PendingUnbackedSymbolNotFound.The OpenVINO and XNNPACK demo in
export_and_validate.pydoes not useYOLO26Model, so your change does not affect it. The wrapper is used by the generic model registry, so it reaches the portable export, the Samsung and Arm AOT compiler scripts, and the Samsung model test.Re-enable the yolo26 portable CI job by installing its requirements (#…
shoumikhin commentedon Oct 6, 2026
Quick update: #23449 and #23452 are both merged. The yolo26 portable job now passes on main.
With #23452, the Samsung model test for yolo26 gets past the import, but then fails inside the Samsung compiler. #23481 tracks that, with the steps for the Samsung team.