Enable backend test suite + x86 CI#19951
Conversation
Summary: The Vulkan serializer that the WebGPU backend reuses stores every non-empty constant in the PTE's named-data map with `offset == UINT64_MAX` and a `named_key`, rather than inline in the VK00 blob. `WebGPUGraph::build` previously handled only inline constants, so a delegated op's constant weights were never uploaded and the op produced all zeros. `build` now also fetches named-data constants via `NamedDataMap::get_data`, mirroring the path `VulkanBackend` already uses. `aten.add` was unaffected since it has no constant tensors; the first consumer is the `rms_norm` op in the child diff. Differential Revision: D107288998
Summary: Adds the `et_vk.rms_norm.default` operator to the WebGPU backend: a WGSL compute shader using a cooperative tree reduction, one workgroup per row. The shader mirrors the Vulkan implementation (`backends/vulkan/runtime/graph/ops/impl/RmsNorm.cpp`, `backends/vulkan/runtime/graph/ops/glsl/rms_norm_buffer.glsl`); indexing assumes contiguous fp32 inputs. The handler fails loud (throws, mirroring Vulkan's `VK_CHECK_COND`) on invalid shape/dtype/dispatch-limit conditions, and defaults `eps` to the float32 machine epsilon. The weight constant is uploaded via the named-data path added in the parent diff. Differential Revision: D106887028
Summary: Wires the WebGPU backend into the standard ExecuTorch backend test suite and adds an x86 Linux CI job, mirroring the Vulkan delegate: `backends/test/suite/flows/webgpu.py` plus a `WebGPUTester`, run by `oss/.github/workflows/test-backend-webgpu.yml` on SwiftShader (a software Vulkan adapter, via `wgpu-native`, minimal dependencies, no GPU). Two fixes were needed for SwiftShader's downlevel limits: request the adapter's full `requiredLimits` at device creation (software adapters default storage-buffer limits to 0), and lower the `add` op `workgroup_size` from 256 to 64 (256 exceeded SwiftShader's 128-invocation cap; the Vulkan delegate uses 64). The editable CMake build also marks the `vulkan_schema` subdirectory `EXCLUDE_FROM_ALL` so the WebGPU `ALL` build does not pull in targets that need glslc. Differential Revision: D107288999
🔗 Helpful Links🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/19951
Note: Links to docs will display an error until the docs builds have been completed. ❌ 1 Cancelled Job, 2 Unclassified FailuresAs of commit eac1473 with merge base 3b3f621 ( UNCLASSIFIED FAILURES - DrCI could not classify the following jobs because the workflow did not run on the merge base. The failures may be pre-existing on trunk or introduced by this PR:
CANCELLED JOB - The following job was cancelled. Please retry:
This comment was automatically generated by Dr. CI and updates every 15 minutes. |
|
@JulianCloudNTH has exported this pull request. If you are a Meta employee, you can view the originating Diff in D107288999. |
This PR needs a
|
Summary:
Wires the WebGPU backend into the standard ExecuTorch backend test suite and adds an x86 Linux CI job, mirroring the Vulkan delegate:
backends/test/suite/flows/webgpu.pyplus aWebGPUTester, run byoss/.github/workflows/test-backend-webgpu.ymlon SwiftShader (a software Vulkan adapter, viawgpu-native, minimal dependencies, no GPU).Two fixes were needed for SwiftShader's downlevel limits: request the adapter's full
requiredLimitsat device creation (software adapters default storage-buffer limits to 0), and lower theaddopworkgroup_sizefrom 256 to 64 (256 exceeded SwiftShader's 128-invocation cap; the Vulkan delegate uses 64). The editable CMake build also marks thevulkan_schemasubdirectoryEXCLUDE_FROM_ALLso the WebGPUALLbuild does not pull in targets that need glslc.Differential Revision: D107288999