Optimized le.Tensor_out returns b <= a for reverse-argument broadcasts
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 35/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Ambito
- machine-learning
Direzione di ricerca
Start with kernels/optimized/cpu/op_le.cpp and the reverse-argument handling described in the issue; then inspect the related tests in kernels/test/op_le_test.cpp. Add regression coverage that exercises the optimized paths with matching input and output dtypes. Done means those paths produce the expected a <= b results for the listed broadcast shapes.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Describe the bug
With the optimized CPU kernels, le.Tensor_out returns b <= a instead of a <= b when the left operand is the one being broadcast and both inputs and the output share a dtype (for example two Bool masks, or a non-Bool output).
Repro (C++ kernel test)
TensorFactory<ScalarType::Bool> tf;
Tensor a = tf.make({4}, {false, true, false, true});
Tensor b = tf.make({2, 4}, {false, false, true, true, true, true, false, false});
Tensor out = tf.zeros({2, 4});
torch::executor::aten::le_outf(context_, a, b, out);
| Result | |
|---|---|
Expected (a <= b, also what the portable kernel returns) |
{1, 0, 1, 1, 1, 1, 1, 0} |
| Optimized kernel | {1, 1, 0, 1, 0, 1, 1, 1} (that is b <= a) |
The same happens for Float and Int inputs with a Float/Int output, on all three reverse-argument broadcast paths: (4,) vs (2, 4), (2, 1) vs (2, 3), and (2, 1, 2) vs (2, 3, 2). Float inputs with a Bool output are not affected, because select_optimized_path returns kNone when the output dtype differs and the portable comparison is used.
Cause
select_optimized_path returns kBroadcast2dBy1dReverseArguments, kBroadcastLastDimReverseArguments or kBroadcastNdByNdReverseArguments when the left operand is the broadcast one, and handle_broadcast_elementwise then calls the lambda with the operands swapped. op_div.cpp and op_add_sub_impl.h account for this by swapping their lambda on those paths, but op_le.cpp always passes x.le(y):
https://github.com/pytorch/executorch/blob/aed328df53/kernels/optimized/cpu/op_le.cpp#L57-L63
The existing BroadcastLastDimReverseTest, BroadcastNdByNdReverseTest and similar tests in kernels/test/op_le_test.cpp use a Bool output with Int inputs, so they take the portable path and never exercise the optimized broadcast code.
I have a fix with regression tests and will open a PR.
Versions
main at aed328df53, built from source with CMake (EXECUTORCH_BUILD_TESTS=ON, EXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON), Ubuntu, x86_64, GCC 15.2.0.
- Lingua principale
- Python
- Stelle
- 5.1k
- Fork
- 1.2k
- Merge medio
- 1g 22h
- PR unite (30g)
- 675
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di pytorch/executorch
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
pytorch/executorch#24434 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
pytorch/executorch#24410 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement triaged
Difficoltà 2/5 Mezza giornata Idoneità per principianti 68/100
pytorch/executorch#21640 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
pytorch/executorch#24502 ·
I maintainer di solito rispondono entro 1 giorno
-
`install_executorch.sh` fails in a fresh uv virtual environment: `No module named pip`Forse già presa @mshr-h l’ha presa 3 giorni fa. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 45/100
pytorch/executorch#24417 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di pytorch/executorch
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
huggingface/deep-rl-class#723 ·
-
[tool] bug: Qwen3 XML tool parser raises on `...` argument values (Ellipsis is not JSON serializable)Forse già presa @super-yuki l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 87/100
verl-project/verl#8559 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
TencentCloud/octop-harness#228 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
google/osv-scalibr#2585 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
NousResearch/hermes-agent#149323 ·
I maintainer di solito rispondono entro 1 giorno