From 77c213a584ae546e85a59556d0b6c2b205c6017d Mon Sep 17 00:00:00 2001 From: Julian Ng-Thow-Hing Date: Mon, 22 Jun 2026 13:40:35 -0700 Subject: [PATCH] Update [ghstack-poisoned] --- backends/webgpu/README.md | 9 ++++----- backends/webgpu/scripts/test_webgpu_native_ci.sh | 14 +++++++------- backends/webgpu/test/TARGETS | 2 +- backends/webgpu/test/op_tests/cases.py | 6 +++--- .../webgpu/test/ops/dispatch_order/__init__.py | 0 .../webgpu/test/ops/embedding_q4gsw/__init__.py | 5 ----- backends/webgpu/test/ops/prepack/__init__.py | 5 ----- .../webgpu/test/ops/quantized_linear/__init__.py | 5 ----- backends/webgpu/test/ops/rms_norm/__init__.py | 0 backends/webgpu/test/ops/rope/__init__.py | 5 ----- backends/webgpu/test/ops/sdpa/__init__.py | 5 ----- backends/webgpu/test/ops/{add => }/test_add.py | 0 .../{dispatch_order => }/test_dispatch_order.py | 2 +- .../test_embedding_q4gsw.py | 0 .../test/ops/{prepack => }/test_prepack.py | 0 .../test_quantized_linear.py | 0 .../test/ops/{rms_norm => }/test_rms_norm.py | 0 backends/webgpu/test/ops/{rope => }/test_rope.py | 0 backends/webgpu/test/ops/{sdpa => }/test_sdpa.py | 0 .../test/ops/{sdpa => }/test_update_cache.py | 0 backends/webgpu/test/test_build_webgpu.sh | 16 ++++++++-------- 21 files changed, 24 insertions(+), 50 deletions(-) delete mode 100644 backends/webgpu/test/ops/dispatch_order/__init__.py delete mode 100644 backends/webgpu/test/ops/embedding_q4gsw/__init__.py delete mode 100644 backends/webgpu/test/ops/prepack/__init__.py delete mode 100644 backends/webgpu/test/ops/quantized_linear/__init__.py delete mode 100644 backends/webgpu/test/ops/rms_norm/__init__.py delete mode 100644 backends/webgpu/test/ops/rope/__init__.py delete mode 100644 backends/webgpu/test/ops/sdpa/__init__.py rename backends/webgpu/test/ops/{add => }/test_add.py (100%) rename backends/webgpu/test/ops/{dispatch_order => }/test_dispatch_order.py (97%) rename backends/webgpu/test/ops/{embedding_q4gsw => }/test_embedding_q4gsw.py (100%) rename backends/webgpu/test/ops/{prepack => }/test_prepack.py (100%) rename backends/webgpu/test/ops/{quantized_linear => }/test_quantized_linear.py (100%) rename backends/webgpu/test/ops/{rms_norm => }/test_rms_norm.py (100%) rename backends/webgpu/test/ops/{rope => }/test_rope.py (100%) rename backends/webgpu/test/ops/{sdpa => }/test_sdpa.py (100%) rename backends/webgpu/test/ops/{sdpa => }/test_update_cache.py (100%) diff --git a/backends/webgpu/README.md b/backends/webgpu/README.md index 8c3928c5f49..a0711d862d5 100644 --- a/backends/webgpu/README.md +++ b/backends/webgpu/README.md @@ -140,11 +140,10 @@ backends/webgpu/ ├── test_webgpu_native.cpp # C++ native test runner ├── test_wgsl_codegen.py # Shader codegen check ├── native/ # C++ operator tests - └── ops/ # Python export tests - ├── add/ - │ └── test_add.py # add export tests - └── rms_norm/ - └── test_rms_norm.py # rms_norm export tests + └── ops/ # Python op test suites (flat: test_.py) + ├── test_add.py + ├── test_rms_norm.py + └── ... # one test_.py per op ``` ## Requirements diff --git a/backends/webgpu/scripts/test_webgpu_native_ci.sh b/backends/webgpu/scripts/test_webgpu_native_ci.sh index 84b5349ef2d..b2eb56a505e 100644 --- a/backends/webgpu/scripts/test_webgpu_native_ci.sh +++ b/backends/webgpu/scripts/test_webgpu_native_ci.sh @@ -65,36 +65,36 @@ PREPACK_TIED_MODEL="/tmp/webgpu_prepack_tied_const.pte" PREPACK_TIED_GOLDEN="/tmp/webgpu_prepack_tied_const_golden.bin" $PYTHON_EXECUTABLE -c " -from executorch.backends.webgpu.test.ops.quantized_linear.test_quantized_linear import export_all_quantized_linear_models +from executorch.backends.webgpu.test.ops.test_quantized_linear import export_all_quantized_linear_models export_all_quantized_linear_models('/tmp') " || echo "WARN: q4gsw export failed; required configs will FAIL in webgpu_native_test" $PYTHON_EXECUTABLE -c " -from executorch.backends.webgpu.test.ops.embedding_q4gsw.test_embedding_q4gsw import export_embedding_q4gsw_model +from executorch.backends.webgpu.test.ops.test_embedding_q4gsw import export_embedding_q4gsw_model export_embedding_q4gsw_model('${EMBEDDING_MODEL}', '${EMBEDDING_GOLDEN}', '${EMBEDDING_INDICES}') export_embedding_q4gsw_model('${EMBEDDING_LLAMA1B_MODEL}', '${EMBEDDING_LLAMA1B_GOLDEN}', '${EMBEDDING_LLAMA1B_INDICES}', 'llama1b') " || echo "WARN: embedding_q4gsw export failed; embedding configs will FAIL in webgpu_native_test" $PYTHON_EXECUTABLE -c " -from executorch.backends.webgpu.test.ops.rope.test_rope import export_rope_model +from executorch.backends.webgpu.test.ops.test_rope import export_rope_model export_rope_model('${ROPE_MODEL}', '${ROPE_XQ_GOLDEN}', '${ROPE_XK_GOLDEN}') export_rope_model('${ROPE_DECODE_MODEL}', '${ROPE_DECODE_XQ_GOLDEN}', '${ROPE_DECODE_XK_GOLDEN}', 'decode') " || echo "WARN: rope export failed; apply_rotary_emb configs will FAIL in webgpu_native_test" $PYTHON_EXECUTABLE -c " -from executorch.backends.webgpu.test.ops.prepack.test_prepack import export_prepack_model, export_prepack_two_const_model, export_prepack_tied_const_model +from executorch.backends.webgpu.test.ops.test_prepack import export_prepack_model, export_prepack_two_const_model, export_prepack_tied_const_model export_prepack_model('${PREPACK_MODEL}', '${PREPACK_GOLDEN}') export_prepack_two_const_model('${PREPACK2_MODEL}', '${PREPACK2_GOLDEN}') export_prepack_tied_const_model('${PREPACK_TIED_MODEL}', '${PREPACK_TIED_GOLDEN}') " || echo "WARN: prepack export failed; prepack configs will FAIL in webgpu_native_test" $PYTHON_EXECUTABLE -c " -from executorch.backends.webgpu.test.ops.dispatch_order.test_dispatch_order import export_dispatch_order_cases +from executorch.backends.webgpu.test.ops.test_dispatch_order import export_dispatch_order_cases export_dispatch_order_cases('${DISPATCH_ORDER_DIR}') " || { echo "WARN: dispatch_order export failed; skipping dispatch_order native test"; DISPATCH_ORDER_OK=0; } $PYTHON_EXECUTABLE -c " -from executorch.backends.webgpu.test.ops.sdpa.test_update_cache import ( +from executorch.backends.webgpu.test.ops.test_update_cache import ( export_update_cache_cases, export_update_cache_replay, export_update_cache_negative, @@ -107,7 +107,7 @@ export_update_cache_negative('${UPDATE_CACHE_DIR}') # Non-fatal: a failed sdpa export makes the required 4k/8k configs hard-fail in # webgpu_native_test below (precise per-config error), so don't exit/mask here. $PYTHON_EXECUTABLE -c " -from executorch.backends.webgpu.test.ops.sdpa.test_sdpa import ( +from executorch.backends.webgpu.test.ops.test_sdpa import ( export_all_sdpa_models, export_replay_sequences, export_dynamic_decode, diff --git a/backends/webgpu/test/TARGETS b/backends/webgpu/test/TARGETS index 9008f32cd2c..6bf76a525e9 100644 --- a/backends/webgpu/test/TARGETS +++ b/backends/webgpu/test/TARGETS @@ -7,7 +7,7 @@ oncall("executorch") python_unittest( name = "test_add", srcs = [ - "ops/add/test_add.py", + "ops/test_add.py", ], deps = [ "//caffe2:torch", diff --git a/backends/webgpu/test/op_tests/cases.py b/backends/webgpu/test/op_tests/cases.py index 6a8d0e2af59..b93b2e5227a 100644 --- a/backends/webgpu/test/op_tests/cases.py +++ b/backends/webgpu/test/op_tests/cases.py @@ -25,7 +25,7 @@ WebGPUTestSuite, XS, ) -from executorch.backends.webgpu.test.ops.add.test_add import ( +from executorch.backends.webgpu.test.ops.test_add import ( AddChainedModule, AddModule, AddSelfModule, @@ -43,7 +43,7 @@ CONFIGS as _PERMUTE_CONFIGS, PermuteModule, ) -from executorch.backends.webgpu.test.ops.rms_norm.test_rms_norm import ( +from executorch.backends.webgpu.test.ops.test_rms_norm import ( _CASES, _linspace_weight, _ramp, @@ -93,7 +93,7 @@ def _add_factory(variant: str = "regular") -> torch.nn.Module: @register_op_test("add") def _add_suite() -> WebGPUTestSuite: # Same-shape numeric coverage only: broadcast adds stay export-smoke in - # ops/add/test_add.py because the kernel can't broadcast. + # ops/test_add.py because the kernel can't broadcast. return WebGPUTestSuite( module_factory=_add_factory, cases=[ diff --git a/backends/webgpu/test/ops/dispatch_order/__init__.py b/backends/webgpu/test/ops/dispatch_order/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/backends/webgpu/test/ops/embedding_q4gsw/__init__.py b/backends/webgpu/test/ops/embedding_q4gsw/__init__.py deleted file mode 100644 index 2e41cd717f6..00000000000 --- a/backends/webgpu/test/ops/embedding_q4gsw/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright (c) Meta Platforms, Inc. and affiliates. -# All rights reserved. -# -# This source code is licensed under the BSD-style license found in the -# LICENSE file in the root directory of this source tree. diff --git a/backends/webgpu/test/ops/prepack/__init__.py b/backends/webgpu/test/ops/prepack/__init__.py deleted file mode 100644 index 2e41cd717f6..00000000000 --- a/backends/webgpu/test/ops/prepack/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright (c) Meta Platforms, Inc. and affiliates. -# All rights reserved. -# -# This source code is licensed under the BSD-style license found in the -# LICENSE file in the root directory of this source tree. diff --git a/backends/webgpu/test/ops/quantized_linear/__init__.py b/backends/webgpu/test/ops/quantized_linear/__init__.py deleted file mode 100644 index 2e41cd717f6..00000000000 --- a/backends/webgpu/test/ops/quantized_linear/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright (c) Meta Platforms, Inc. and affiliates. -# All rights reserved. -# -# This source code is licensed under the BSD-style license found in the -# LICENSE file in the root directory of this source tree. diff --git a/backends/webgpu/test/ops/rms_norm/__init__.py b/backends/webgpu/test/ops/rms_norm/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/backends/webgpu/test/ops/rope/__init__.py b/backends/webgpu/test/ops/rope/__init__.py deleted file mode 100644 index 2e41cd717f6..00000000000 --- a/backends/webgpu/test/ops/rope/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright (c) Meta Platforms, Inc. and affiliates. -# All rights reserved. -# -# This source code is licensed under the BSD-style license found in the -# LICENSE file in the root directory of this source tree. diff --git a/backends/webgpu/test/ops/sdpa/__init__.py b/backends/webgpu/test/ops/sdpa/__init__.py deleted file mode 100644 index 2e41cd717f6..00000000000 --- a/backends/webgpu/test/ops/sdpa/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright (c) Meta Platforms, Inc. and affiliates. -# All rights reserved. -# -# This source code is licensed under the BSD-style license found in the -# LICENSE file in the root directory of this source tree. diff --git a/backends/webgpu/test/ops/add/test_add.py b/backends/webgpu/test/ops/test_add.py similarity index 100% rename from backends/webgpu/test/ops/add/test_add.py rename to backends/webgpu/test/ops/test_add.py diff --git a/backends/webgpu/test/ops/dispatch_order/test_dispatch_order.py b/backends/webgpu/test/ops/test_dispatch_order.py similarity index 97% rename from backends/webgpu/test/ops/dispatch_order/test_dispatch_order.py rename to backends/webgpu/test/ops/test_dispatch_order.py index fbb13ff6426..08454ef0a31 100644 --- a/backends/webgpu/test/ops/dispatch_order/test_dispatch_order.py +++ b/backends/webgpu/test/ops/test_dispatch_order.py @@ -17,7 +17,7 @@ import torch from executorch.backends.vulkan.partitioner.vulkan_partitioner import VulkanPartitioner -from executorch.backends.webgpu.test.ops.rms_norm.test_rms_norm import RmsNormModule +from executorch.backends.webgpu.test.ops.test_rms_norm import RmsNormModule from executorch.backends.webgpu.test.tester import WEBGPU_SUPPORTED_OPS from executorch.exir import to_edge_transform_and_lower diff --git a/backends/webgpu/test/ops/embedding_q4gsw/test_embedding_q4gsw.py b/backends/webgpu/test/ops/test_embedding_q4gsw.py similarity index 100% rename from backends/webgpu/test/ops/embedding_q4gsw/test_embedding_q4gsw.py rename to backends/webgpu/test/ops/test_embedding_q4gsw.py diff --git a/backends/webgpu/test/ops/prepack/test_prepack.py b/backends/webgpu/test/ops/test_prepack.py similarity index 100% rename from backends/webgpu/test/ops/prepack/test_prepack.py rename to backends/webgpu/test/ops/test_prepack.py diff --git a/backends/webgpu/test/ops/quantized_linear/test_quantized_linear.py b/backends/webgpu/test/ops/test_quantized_linear.py similarity index 100% rename from backends/webgpu/test/ops/quantized_linear/test_quantized_linear.py rename to backends/webgpu/test/ops/test_quantized_linear.py diff --git a/backends/webgpu/test/ops/rms_norm/test_rms_norm.py b/backends/webgpu/test/ops/test_rms_norm.py similarity index 100% rename from backends/webgpu/test/ops/rms_norm/test_rms_norm.py rename to backends/webgpu/test/ops/test_rms_norm.py diff --git a/backends/webgpu/test/ops/rope/test_rope.py b/backends/webgpu/test/ops/test_rope.py similarity index 100% rename from backends/webgpu/test/ops/rope/test_rope.py rename to backends/webgpu/test/ops/test_rope.py diff --git a/backends/webgpu/test/ops/sdpa/test_sdpa.py b/backends/webgpu/test/ops/test_sdpa.py similarity index 100% rename from backends/webgpu/test/ops/sdpa/test_sdpa.py rename to backends/webgpu/test/ops/test_sdpa.py diff --git a/backends/webgpu/test/ops/sdpa/test_update_cache.py b/backends/webgpu/test/ops/test_update_cache.py similarity index 100% rename from backends/webgpu/test/ops/sdpa/test_update_cache.py rename to backends/webgpu/test/ops/test_update_cache.py diff --git a/backends/webgpu/test/test_build_webgpu.sh b/backends/webgpu/test/test_build_webgpu.sh index 5ea465e853b..2fd1dea1a52 100755 --- a/backends/webgpu/test/test_build_webgpu.sh +++ b/backends/webgpu/test/test_build_webgpu.sh @@ -25,8 +25,8 @@ $PYTHON_EXECUTABLE -m pytest "${SCRIPT_DIR}/test_wgsl_codegen.py" -v # ── Step 1: Python export tests ────────────────────────────────────────────── echo "=== Step 1: Run Python export tests ===" -$PYTHON_EXECUTABLE -m pytest "${SCRIPT_DIR}/ops/add/test_add.py" -v -$PYTHON_EXECUTABLE -m pytest "${SCRIPT_DIR}/ops/rms_norm/test_rms_norm.py" -v +$PYTHON_EXECUTABLE -m pytest "${SCRIPT_DIR}/ops/test_add.py" -v +$PYTHON_EXECUTABLE -m pytest "${SCRIPT_DIR}/ops/test_rms_norm.py" -v # ── Step 2: Export .pte model ───────────────────────────────────────────────── @@ -35,38 +35,38 @@ DISPATCH_ORDER_DIR="/tmp/dispatch_order" PTE_UPDATE_CACHE_MODEL="/tmp/webgpu_update_cache_test.pte" cd "${EXECUTORCH_ROOT}" $PYTHON_EXECUTABLE -c " -from executorch.backends.webgpu.test.ops.dispatch_order.test_dispatch_order import export_dispatch_order_cases +from executorch.backends.webgpu.test.ops.test_dispatch_order import export_dispatch_order_cases export_dispatch_order_cases('${DISPATCH_ORDER_DIR}') " echo "=== Export update_cache model ===" UPDATE_CACHE_OK=1 $PYTHON_EXECUTABLE -c " -from executorch.backends.webgpu.test.ops.sdpa.test_update_cache import export_update_cache_model +from executorch.backends.webgpu.test.ops.test_update_cache import export_update_cache_model export_update_cache_model('${PTE_UPDATE_CACHE_MODEL}') " || { echo "WARN: update_cache export failed; skipping update_cache native test"; UPDATE_CACHE_OK=0; } echo "=== Export SDPA sweep models (sdpa_.pte + .golden.bin to /tmp) ===" $PYTHON_EXECUTABLE -c " -from executorch.backends.webgpu.test.ops.sdpa.test_sdpa import export_all_sdpa_models +from executorch.backends.webgpu.test.ops.test_sdpa import export_all_sdpa_models export_all_sdpa_models('/tmp') " || echo "WARN: sdpa export failed; the native test self-skips configs whose .pte is absent" echo "=== Export SDPA replay sequences (sdpa__step_S_pos

.* to /tmp) ===" $PYTHON_EXECUTABLE -c " -from executorch.backends.webgpu.test.ops.sdpa.test_sdpa import export_replay_sequences +from executorch.backends.webgpu.test.ops.test_sdpa import export_replay_sequences export_replay_sequences('/tmp') " || echo "WARN: sdpa replay export failed; the native test self-skips absent sequences" echo "=== Export SDPA dynamic-input_pos decode (sdpa_dyn_.* to /tmp) ===" $PYTHON_EXECUTABLE -c " -from executorch.backends.webgpu.test.ops.sdpa.test_sdpa import export_dynamic_decode +from executorch.backends.webgpu.test.ops.test_sdpa import export_dynamic_decode export_dynamic_decode('/tmp') " || echo "WARN: sdpa dynamic export failed; the native test self-skips when absent" echo "=== Export SDPA in-graph-cache decode (sdpa_incache_.* to /tmp) ===" $PYTHON_EXECUTABLE -c " -from executorch.backends.webgpu.test.ops.sdpa.test_sdpa import export_incache_decode +from executorch.backends.webgpu.test.ops.test_sdpa import export_incache_decode export_incache_decode('/tmp') " || echo "WARN: sdpa in-graph-cache export failed; the native test self-skips when absent"