Download BUILD_INFO.md from executorch-community/ExecuTorch-WebGPU-Runtime: direct link, hf CLI and curl.
- Browser
- Download file 4.49 kB
-
https://huggingface.co/executorch-community/ExecuTorch-WebGPU-Runtime/resolve/main/BUILD_INFO.md
- Command line
-
hf download hf://executorch-community/ExecuTorch-WebGPU-Runtime/BUILD_INFO.md
-
curl -L -o BUILD_INFO.md https://huggingface.co/executorch-community/ExecuTorch-WebGPU-Runtime/resolve/main/BUILD_INFO.md
ExecuTorch Wasm + WebGPU runtime
executorch_wasm_lib.js and executorch_wasm_lib.wasm are the ExecuTorch Wasm
bindings (extension/wasm) with the WebGPU backend, linked into one web bundle.
The .js loader ships in this folder. The .wasm is hosted on Hugging Face
(executorch-community/ExecuTorch-WebGPU-Runtime, pinned in src/config/runtime.js),
downloaded and checked against the sha256 below like a model file.
Every demo in the playground shares this one runtime (src/runtime/executorch.js).
The JS file defines createExecuTorch(). After await et.initWebGPU(), a .pte
loads with et.Module.load(path) and loadMethod('forward'), and runs with an
async forward([tensors]).
Source
Built from the ExecuTorch source tree of 2026-10-16 (version.txt 1.6.0) with the two
changes that make WebGPU run in the Wasm build, both merged upstream:
- pytorch/executorch#23938: the
EXECUTORCH_BUILD_WASM_WEBGPUoption, which links the WebGPU backend intoextension/wasm, and theinitWebGPU()binding. - pytorch/executorch#23914:
WebGPUGraph::propagate_resizeresizes every operand before its consumer in one pass, so a multi-token LLM prefill works.
A build from ExecuTorch main that contains both, with the commands below, should give the
same files. The emdawnwebgpu override (EXECUTORCH_WEBGPU_EMDAWNWEBGPU_PORT) was only
needed because the build machine could not reach GitHub; without it, Emscripten downloads
the same emdawnwebgpu version itself.
Toolchain
- Emscripten 4.0.19, official release build
8b01e2ec3f33e6b94842096d7312ce4ef5f33f6c. - emdawnwebgpu v20251002.162335, the version Emscripten 4.0.19 pins. It was rebuilt
from Dawn source at
01940842b667a7812d0e4ca0ef4367fbec294241, using Dawn's own packaging recipe. - CMake 3.31, Ninja 1.13. The configure step needs a Python with
torch(fortorchgen).
Build
A small consumer project links the bindings into a distributable bundle, as
described under "Building for Web" in extension/wasm/README.md:
cmake_minimum_required(VERSION 3.29)
project(executorch_web)
add_subdirectory(${ET_SRC} executorch)
add_executable(executorch_wasm_lib)
target_link_libraries(executorch_wasm_lib PRIVATE executorch_wasm)
target_link_options(executorch_wasm_lib PRIVATE
-sMODULARIZE=1 -sEXPORT_NAME=createExecuTorch -sENVIRONMENT=web,worker
-sFORCE_FILESYSTEM=1 -sEXPORTED_RUNTIME_METHODS=FS -sINITIAL_MEMORY=64MB
-sEXPORT_EXCEPTION_HANDLING_HELPERS=1)
emcmake cmake -S <consumer project> -B build -G Ninja -DCMAKE_BUILD_TYPE=Release \
-DET_SRC=<executorch> \
-DEXECUTORCH_BUILD_WASM=ON -DEXECUTORCH_BUILD_WEBGPU=ON -DEXECUTORCH_BUILD_WASM_WEBGPU=ON \
-DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON -DEXECUTORCH_BUILD_EXTENSION_FLAT_TENSOR=ON \
-DEXECUTORCH_BUILD_EXTENSION_MODULE=ON -DEXECUTORCH_BUILD_EXTENSION_NAMED_DATA_MAP=ON \
-DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON \
-DEXECUTORCH_ENABLE_LOGGING=ON -DEXECUTORCH_LOG_LEVEL=Info \
-DEXECUTORCH_WEBGPU_EMDAWNWEBGPU_PORT=<emdawnwebgpu_pkg>/emdawnwebgpu.port.py \
"-DCMAKE_C_FLAGS=-ffile-prefix-map=<executorch>=executorch" \
"-DCMAKE_CXX_FLAGS=-ffile-prefix-map=<executorch>=executorch" \
-DPYTHON_EXECUTABLE=<python with torch>
cmake --build build --target executorch_wasm_lib
The WebGPU Wasm option itself adds -sASYNCIFY -sASYNCIFY_STACK_SIZE=65536 -sALLOW_MEMORY_GROWTH=1 -sMAXIMUM_MEMORY=4GB -fexceptions. The full portable
kernel library is linked (no selective build). Logging is at Info, so a failed
load or run prints the reason to the console. -ffile-prefix-map keeps
build-machine paths out of the binary.
Files
| File | Bytes | sha256 |
|---|---|---|
executorch_wasm_lib.js |
165,877 | 8a631b1537927f8f2ef184d9f1b343061f47df0a32ddb8f5190d74e80d40618e |
executorch_wasm_lib.wasm |
6,562,188 | 35a9087d0b6cd86c279e7111adfd54a58156bd993928b20f63348f1043652eb4 |
Checked with this build
Headless Chromium 141, WebGPU on SwiftShader (no shader-f16), with the
playground's models compared against ExecuTorch CPU references:
- Depth Anything V2 Small, MODNet, Real-ESRGAN, D-FINE S: max abs difference between 0 and 4.6e-3.
- SAM 2.1 Hiera Tiny: mask IoU 1.000 on a click, a second click, and a box prompt.
The playground's own end-to-end checks, through the real UI, cover Qwen3 0.6B,
Llama 3.2 1B, SAM 2.1, Depth Anything V2, D-FINE S and Whisper base. Real GPUs
and the shader-f16 kernel paths have not been tested with this build.