Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
190 commits
Select commit Hold shift + click to select a range
684d4bd
Skip impure ops in constant_prop_pass (#22418)
john-rocky Sep 2, 2026
c65ad53
Add oncall to all executorch build files missing one (#20496)
Ben0mega Sep 2, 2026
457a2a8
Enhance workflow to label external PRs (#22381)
nil-is-all Sep 2, 2026
a6b115b
Fix MLX C++20 errors (#22424)
metascroy Sep 2, 2026
4747ab7
Run attention on MLX wherever the fused kernel can compute it (#22419)
shoumikhin Sep 2, 2026
d5e4ae9
Give causal attention the mask PyTorch asks for (#22443)
shoumikhin Sep 2, 2026
e39bda8
Add metrics to runner (#22283)
metascroy Sep 2, 2026
2abf9a6
Fix nondeterministic mypy CI dependencies and lint error exposed (#22…
JakeStevens Sep 2, 2026
902fcf5
Fix SLEEF preprocessor macro name to match ATen vec headers
JakeStevens Sep 2, 2026
33ed3c5
Read the query length at build time where it is known (#22494)
shoumikhin Sep 2, 2026
5bcf795
Optimize Enn runner (#18735)
Jiseong-oh Sep 3, 2026
135a109
Bump MLX pin to v32.2 (#22495)
metascroy Sep 3, 2026
8f50849
Qualcomm AI Engine Direct - [doc] QNN ExecuTorch on Windows (#22502)
zhaoxul-qti Sep 3, 2026
ddaabb9
Add QAT support and pass hooks to QuantizationRecipe. (#21935)
MartinPavella Sep 3, 2026
7490bd4
Add pass to replace input dim order clones with permutations. (#21241)
MartinPavella Sep 3, 2026
c7bbe0b
Arm backend: Cast integer comparisons in FP profile (#22503)
Sebastian-Larsson Sep 3, 2026
1e3b7fb
Arm backend: Support rank-3 max_pool2d inputs (#22441)
YufengShi-dudu Sep 3, 2026
7e9ac9b
Arm backend: Clean up of TOSA dialect operators (#22515)
SaoirseARM Sep 3, 2026
2c1da32
[ET-VK][ops] Extend arange, clamp, and index.Tensor support
SS-JIA Sep 3, 2026
8ea353d
Arm backend: Fix ConvTranspose2d batch norm fusion (#22517)
YufengShi-dudu Sep 3, 2026
c8d5189
Arm backend: Add pre-decomposition partitioner pipeline (#22514)
YufengShi-dudu Sep 3, 2026
843f77e
Arm backend: Delegate reflection padding on U55
perheld Aug 17, 2026
d3e5f1b
[ET-VK][runtime] Replace resize update set with generation stamps
SS-JIA Sep 3, 2026
cb0db9e
[ET-VK][runtime] Check resize inputs before outputs
SS-JIA Sep 3, 2026
8d33e93
[ET-VK][runtime] Inline resize update checks
SS-JIA Sep 3, 2026
fe5d8d6
[ET-VK][runtime] Resolve invariant quantization shaders once
SS-JIA Sep 3, 2026
02ee1ca
Honor range-learned scales in the tied embedding quantization path (#…
telgamal-1 Sep 3, 2026
c65b23a
Lower Conv1d atomically through TOSA Conv2d (#22282)
mcremon-meta Sep 4, 2026
89e108c
Fix the Samsung MobileBert test setup so it can run (#22550)
shoumikhin Sep 4, 2026
5410b1a
Stop shipping unusable MKL search paths in the Linux wheel (#22541)
shoumikhin Sep 4, 2026
af6454e
Bump the PyTorch pin to 2.14 (#22501)
shoumikhin Sep 4, 2026
9036d84
Qualcomm AI Engine Direct - Fix a QNN crash on AMD (#22543)
qti-horodnic Sep 4, 2026
f5d3e54
Arm backend: Enable per-delegate profiling in perf_monitor (#22511)
emmakujala Sep 4, 2026
ecd46df
Add quantized stacked-halves RoPE operator (#22423)
ethansfng Sep 4, 2026
696a144
Arm backend: Reject unsupported comparisons in FP profile (#22558)
Sebastian-Larsson Sep 4, 2026
44111b7
Arm backend: Reject complex dtypes (#22555)
Erik-Lundell Sep 4, 2026
6ac72d7
Arm backend: Allow FP64 operators to decompose (#22551)
oscarandersson8218 Sep 4, 2026
9363f00
Arm backend: handle Python SymInt mod and div (#22557)
oscarandersson8218 Sep 4, 2026
e6d1319
Arm backend: Pass memory mode to Corstone
perheld Aug 19, 2026
090f5de
NXP backend: Building MCUXpresso example
jirioc Jul 22, 2026
df1402a
[ET-VK][q8ta] Avoid dynamic im2col vector stores
SS-JIA Sep 4, 2026
0c3f3a9
[ET-VK][q8ta] Route pointwise convolution through unsigned dot
SS-JIA Sep 4, 2026
de3f49d
[ET-VK][q8ta] Route im2col convolution through unsigned dot
SS-JIA Sep 4, 2026
0dd8f87
Cortex-M: add explicit layout convolution kernels (#22378)
rascani Sep 4, 2026
738f197
Arm backend: profile SmolLM2 Ethos-U KV cache on FVP (#22560)
xingguo01 Sep 4, 2026
372aa3b
Qualcomm: bounds-check the delegate (#22237)
psiddh Sep 4, 2026
6975be1
Run a recipe's edge-manager passes after partitioning (#22474)
rascani Sep 4, 2026
fcc3eb5
Cortex-M: add explicit layout pooling kernels (#22379)
rascani Sep 4, 2026
9ae78da
Cortex-M: add opt-in explicit-layout lowering (#22544)
rascani Sep 4, 2026
77fb78d
Add ExportRecipe support for Arm targets (#22368)
rascani Sep 4, 2026
758a896
Read a single tensor element as the type the caller asked for (#22567)
shoumikhin Sep 4, 2026
32722a3
Fine-tune MobileBert on smaller batches in its test (#22565)
shoumikhin Sep 4, 2026
b903c2a
Detect ATen when a target names it by its resolved label (#22553)
shoumikhin Sep 4, 2026
f624c34
Move the shared reusable workflows to linux_job_v3 (#22246)
huydhn Sep 4, 2026
bf88c64
Cortex-M: expose explicit-layout AOT (#22545)
rascani Sep 4, 2026
4fc2acc
Lower the CMake version floor so 3.26 through 3.28 can build again (#…
shoumikhin Sep 4, 2026
898795d
Fix Arm recipe BUCK dependency (#22574)
rascani Sep 4, 2026
c570b6c
Declare dynamic quantization transform dependency in test harness (#2…
rascani Sep 5, 2026
5cdcc02
Stop the backend suites logging captured output (#22581)
huydhn Sep 5, 2026
4ce2ec2
Use dynamic CPU count for -j in vendor/example scripts and docs (#21455)
ShamSaleem Sep 6, 2026
55a969e
Arm backend: fix round() decomposition to round-half-to-even (#21065)
vacu9708 Sep 7, 2026
067c74b
Arm backend: Fix bad init performance in VGF for multi segments (#22588)
wwwind Sep 7, 2026
cfc6ecd
Qualcomm AI Engine Direct - Enable QNN Windows ARM64 build in CI (#22…
zhaoxul-qti Sep 7, 2026
3574bf1
Arm backend: Relax Qwen3-VL 2B MXFP8 tolerance (#22590)
FabulousSuperDude Sep 7, 2026
9b3f660
Arm backend: Xfail duplicate VGF input on Darwin (#22591)
FabulousSuperDude Sep 7, 2026
b4c53c6
Move the NXP op alias table out of the test package (#22592)
shoumikhin Sep 7, 2026
33fad23
Arm backend: Preserve Q/DQ in rescale pass (#22559)
FabulousSuperDude Sep 7, 2026
f3f0c96
Qualcomm AI Engine Direct - test framework refactor (#22072)
haowhsu-quic Sep 8, 2026
c9eee94
Qualcomm AI Engine Direct - Enabling Support for Qualcomm Chipsets fo…
qti-horodnic Sep 8, 2026
f115e69
NXP backend: fixed bug in NeutronBackend.cpp (#22435)
novak-vaclav Sep 8, 2026
978e584
Use neutron kernel names in profiling table (#21614)
irtrukhina Sep 8, 2026
7dc8641
Report whether XNNPACK packed weights fell back to heap (#22413)
doggeral Sep 8, 2026
8dc72ce
NXP backend: switch to neutron compiler
jirioc Sep 1, 2026
162a6ac
Restore pull request cancellation on the untagged workflows (#22610)
huydhn Sep 8, 2026
f2dc5e3
Restore pull request cancellation in pull.yml (#22609)
huydhn Sep 8, 2026
faf73b9
Fix C++ standard selection for ExecuTorch tests (#22615)
rascani Sep 8, 2026
98bcd67
Add an executor for batched generation (#22534)
kiymetakdemir Sep 8, 2026
ee2cd8a
Cortex-M: preserve unsupported transpose ranks (#22571)
rascani Sep 8, 2026
aca0ace
Add SmolLM2 360M export support (#22459)
JakeStevens Sep 8, 2026
a519efa
Move pull.yml to linux_job_v3 (#22247)
huydhn Sep 8, 2026
dacc1d0
Add text stream (#22263)
metascroy Sep 8, 2026
595e8c1
Let Buck tests inherit the platform C++ standard (#22621)
rascani Sep 8, 2026
e2d5b65
Make MLX XCFramework patches upstream-friendly (#22537)
metascroy Sep 8, 2026
7828708
merge pybind test into e2e
Gasoonjia Sep 8, 2026
622b260
Cache cleanup (#22525)
metascroy Sep 9, 2026
1473d0e
Revert "Move pull.yml to linux_job_v3" (#22247) (#22626)
rascani Sep 9, 2026
0a4ec57
Extend permute removal through singleton and sink views (#22549)
mcremon-meta Sep 9, 2026
fd985d5
XNNPACK: Preserve FP16 SiLU through XNNPACK partitioning (#22604)
mansnils Sep 9, 2026
63289c1
NXP backend: Add recipes for Neutron backend lowering. (#21516)
MartinPavella Sep 9, 2026
1851e2d
Arm backend: Add INT test for grid_sampler. (#22602)
wwwind Sep 9, 2026
1e6b6b8
Arm backend: Delegate constant index select on U55
perheld Aug 17, 2026
aa3d4f3
Stop shipping files nothing can reach in the wheel (#22584)
shoumikhin Sep 9, 2026
56a461f
Arm backend: Improve handling of inputting mutable buffers to ref mod…
tom-arm Sep 9, 2026
78c85d7
NXP backend: Register Neutron backend recipes. (#22635)
MartinPavella Sep 9, 2026
5dc1c72
Arm backend: Add automatic SDPA safe-softmax guard removal (#22637)
YufengShi-dudu Sep 9, 2026
5c4d2c4
Arm backend: Simplify MobileSAM first-run workflow (#22640)
usamahz Sep 9, 2026
01cc075
Arm backend: Show real pass names in Arm crash reports (#22211)
Sebastian-Larsson Sep 9, 2026
cba82c3
Arm backend: Add dynamic shape support to ArmQuantize (#22643)
Michiel-Olieslagers Sep 9, 2026
2ecc182
[ET-VK] Name the int32 eq shader what the dispatcher asks for
msluszniak Sep 3, 2026
eb71484
[ET-VK] Test that binary op shader names match the dispatcher
msluszniak Sep 4, 2026
5f7ad34
Scope -Wno-missing-prototypes to non-GCC compilers (#22347)
yctwo Sep 9, 2026
9007da4
[ET-VK][testing] Reduce host tensor retention
SS-JIA Sep 9, 2026
dc8c578
[ET-VK][testing] Reuse allocations in chained benchmarks
SS-JIA Sep 9, 2026
e1e551b
Arm backend: Relax DeepSeek VGF BF16 abs tolerance (#22644)
FabulousSuperDude Sep 9, 2026
3dad019
Arm backend: Add tests for Stable Diffusion 3.5 Large model (#22606)
FabulousSuperDude Sep 9, 2026
d9b3e45
CMake support for quantized MoE optimized build (#22547)
digantdesai Sep 9, 2026
5c5c9ee
Stop uploading Voxtral checkpoints and partial exports when CI export…
jathu Sep 9, 2026
afc7957
Vulkan: do not partition constant_pad_nd with a symbolic pad
msluszniak Sep 3, 2026
f1adb8b
[ET-VK] Run weight-only int8 linear on the kernel that still exists
msluszniak Sep 2, 2026
74f553e
Cortex-M: preserve calibration input layout (#22572)
rascani Sep 9, 2026
1e937f2
[ET-VK] Fix out-of-range broadcast size calculation for 0-dim tensors
msluszniak Aug 30, 2026
90c5a67
Vulkan: handle a single tensor output arriving as a list
msluszniak Aug 29, 2026
f3dd4b4
[ET-VK] Keep unused placeholders in the delegate's input list
msluszniak Sep 9, 2026
a489948
[ET-VK] Clamp the tanh argument in the gelu shader
msluszniak Aug 30, 2026
43afe51
Vulkan: do not partition batch norm on a non-4d input
msluszniak Sep 3, 2026
6a03b0b
[ET-VK] Classify the conv2d method by weight shape in conv2d_local_wg…
msluszniak Sep 9, 2026
e9025a9
Vulkan: size texture-vs-buffer choice by the bound, not the trace hint
msluszniak Sep 1, 2026
db3390d
Pin mypy CI Transformers to the examples version (#22654)
rascani Sep 9, 2026
b3b8c9a
Add a batched-sequence KV cache to the eager reference (#22646)
kiymetakdemir Sep 9, 2026
75c2b30
Vulkan: add the missing int32 -> uint8 view_convert variant
msluszniak Aug 30, 2026
eadb4c3
[cuda backend] support multi-SM AOTI PTEs (#22198)
Gasoonjia Sep 9, 2026
04f9002
[ET-VK] Fix squeeze_copy of the outermost dim under dynamic shapes
msluszniak Sep 1, 2026
5b77187
Add batch runner example and refactor single sequence runner to use t…
metascroy Sep 9, 2026
ad2de69
Optimize CPU SDPA for ring attention (#22358)
JacobSzwejbka Sep 9, 2026
e61d3d3
Publish the CUDA trains PyTorch still offers, skip the ones it drops …
shoumikhin Sep 9, 2026
25f155c
Fix renamed compiler test source in `BUCK`
rascani Sep 9, 2026
a33ac10
Revert "Optimize CPU SDPA for ring attention" (#22660)
rascani Sep 9, 2026
3413fdf
XNNPACK: Lift constant mul scalars for partitioning (#20515)
mansnils Sep 10, 2026
897fc8e
Move split/concat chain folding to OSS (#22628)
ethansfng Sep 10, 2026
18c0803
Samsung AI LiteCore - buildsystem: separate backend and example build…
Jiseong-oh Sep 10, 2026
d1d5f40
Samsung Exynos AI LiteCore - Samsung Backend in test suite of ExecuTo…
Jiseong-oh Sep 10, 2026
d0da5f8
Add support to PropagateSlice for custom unary/binary ops
DrJessop Sep 10, 2026
d3a225e
[Reland] Move pull.yml to linux_job_v3 (#22632)
huydhn Sep 10, 2026
095bf6b
NXP backend: Add QAT support to Neutron lowering recipes. (#22642)
MartinPavella Sep 10, 2026
176fd9d
Qualcomm AI Engine Direct - [LLM QAT] Embedding + LM head W4 PCQ supp…
DannyYuyang-quic Sep 10, 2026
a457114
Arm backend: Align static KV-cache tests to extensions/llm (#22641)
tom-arm Sep 10, 2026
dee51bb
Arm backend: Add IO copy tracking to perf_monitor (#22672)
emmakujala Sep 10, 2026
79b149f
Arm backend: Added real-world dataset for NSS. (#22650)
Michiel-Olieslagers Sep 10, 2026
8895811
Arm backend: Rewrite static roll with slice and concatenate patterns …
YufengShi-dudu Sep 10, 2026
f4f5e89
Preserve node output dtype when lifting scalars to attrs in XNNPACK q…
shoemoney Sep 10, 2026
b257c71
Publish CUDA 13.4 nightly wheels (#22653)
shoumikhin Sep 10, 2026
588260d
Check dim order in the optimized mm and bmm as the portable ones do (…
SuryanshSS1011 Sep 10, 2026
101ec9e
Check dim order in the optimized layer_norm as the portable one does …
SuryanshSS1011 Sep 10, 2026
ff86d8c
Arm backend: Document Model Explorer performance overlays
perheld Sep 2, 2026
06bb77f
Arm backend: Delegate constant tensor index
perheld Aug 17, 2026
80230c9
Arm backend: Fix Vulkan data graph shader module feature negotiation …
wwwind Sep 10, 2026
84fd9ce
Add optimized Arm64 BF16 `_to_copy` (#22493)
JakeStevens Sep 10, 2026
9ad8f1f
Fix eager eval token ID fallbacks (#22633)
fatih-uzlmz Sep 10, 2026
31f3916
Remove dynamic allocation from Ethos-U backend (#22531)
peygar Sep 10, 2026
d9dae2d
Don't upload golden artifacts to GitHub Actions storage (#22656)
jathu Sep 10, 2026
5c36c2e
Lower branched A16W8 convs on U55 (#22566)
apullin Sep 10, 2026
3470baa
SDPA: skip the non-attendable key columns (#22112)
pssrawat Sep 10, 2026
6960f71
Move trunk.yml, periodic.yml and nightly.yml to linux_job_v3 (#22248)
huydhn Sep 10, 2026
652500f
Reject non-default dim order in the portable kernels that copy by blo…
SuryanshSS1011 Sep 10, 2026
719e851
Bound the dynamic-qdq traceback in XNNPACK ChannelsLastTaggedReshapeP…
Hyungkeun-Park Sep 10, 2026
4cfe494
NXP backend: Add support for Cortex-M backend benchmarking (#22228)
roman-janik-nxp Sep 10, 2026
49905c7
NXP backend: Add support for AdaptiveAvgPool1d, fix AdaptiveAvgPool1d…
roman-janik-nxp Sep 10, 2026
5efa925
Add options for logit slicing to HF export (#22655)
metascroy Sep 10, 2026
03f41d2
Vulkan backend: Add missing include of algorithm
xuyanwen2012 Sep 10, 2026
1d87fa9
[ET-VK] Serialize non-finite floats using flatc's spelling (#22307)
msluszniak Sep 10, 2026
2698ba3
[ET-VK][q8ta-conv] Optimize narrow q8ta convolution workgroups
SS-JIA Sep 10, 2026
d96e3f8
[ET-VK][q8ta-conv] Bound q8ta im2col scratch memory
SS-JIA Sep 10, 2026
388bd23
[ET-VK][q8ta-conv] Route profitable batched Mali q8ta convolutions to…
SS-JIA Sep 10, 2026
3faa2e4
[ET-VK] Scale reduction workers with the length of the reduction (#22…
msluszniak Sep 10, 2026
bbb9d07
[executorch][native] Add deserializer bridge (Program -> Method)
SS-JIA Sep 10, 2026
9df9094
[executorch][native] Add a safetensors index reader
SS-JIA Sep 10, 2026
359a424
[executorch][native] Add the OwnedBytes API
SS-JIA Sep 10, 2026
0b5c907
[executorch][native] Add the .ptn package reader
SS-JIA Sep 10, 2026
a081a3d
[executorch][native] Load .ptn constants on demand
SS-JIA Sep 10, 2026
f07b2be
[executorch][native] Add the EngineContext / EngineExecutable interface
SS-JIA Sep 10, 2026
87dab0b
[ET-VK] Wire the missing resize functions for embedding and index_sel…
msluszniak Sep 11, 2026
028f4c0
[ET-VK] Say that dynamic activation quantization is per tensor (#22432)
msluszniak Sep 11, 2026
214726a
Update main version to 1.6.0 (#22613)
JacobSzwejbka Sep 11, 2026
756cc9c
Support misaligned ranks for broadcasted binary ops in propagate slic…
DrJessop Sep 11, 2026
dab68f8
Declare the system frameworks the executorch SwiftPM product needs (#…
shoumikhin Sep 11, 2026
adb2ef5
Arm backend: Deduplicate constants emitted during TOSA lowering (#22638)
YufengShi-dudu Sep 11, 2026
3a30088
Arm backend: Support leading full slices in index.Tensor (#22680)
YufengShi-dudu Sep 11, 2026
8b7555e
NXP backend: handle tests of mlperf tiny keyword spotting (#22519)
novak-vaclav Sep 11, 2026
acd1a17
Arm backend: Support isinf and isnan with FP decomposition
Sebastian-Larsson Aug 24, 2026
a9d3407
Arm backend: Register isinf and isnan tests with Buck2
Sebastian-Larsson Sep 8, 2026
5ac62a4
Arm backend: Update SD3.5 T5 expectations for isinf delegation
Sebastian-Larsson Sep 10, 2026
dfeac51
Arm backend: Add static public API manifest for 1.5 (#22731)
Sebastian-Larsson Sep 11, 2026
473d150
Arm backend: Stop re-creating Ethos-U driver objects per inference on…
vacu9708 Sep 7, 2026
013de82
Arm backend: Properly handle platform init failures
vacu9708 Sep 10, 2026
6ab65d0
Arm backend: Silence successful VGF coverage output
perheld Sep 11, 2026
19ab682
Arm backend: Enable Vulkan BF16 shader support in the VGF backend whe…
wwwind Sep 11, 2026
f18ce14
Arm backend: Fix generate_vgf_op_support to work with custom ops. (#2…
wwwind Sep 11, 2026
cf1e8b7
Arm backend: Support boolean sums (#22345)
Sebastian-Larsson Sep 11, 2026
a3ae329
Add a portable _fft_r2c kernel (#22055)
msluszniak Sep 11, 2026
82c3a82
NXP backend: remove #22179 workaround for QAT channels-last segfault
JakeStevens Sep 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .ci/docker/ci_commit_pins/pytorch.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
release/2.13
release/2.14
4 changes: 3 additions & 1 deletion .ci/docker/common/install_docs_reqs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@ if [ -n "$BUILD_DOCS" ]; then

apt-get update
apt-get install -y --no-install-recommends yarn
yarn global add katex --prefix /usr/local
# katex 0.18.5 requires commander@15 / node >= 22.12; pin to the last
# release compatible with the node 16 installed above
yarn global add katex@0.18.4 --prefix /usr/local

sudo apt-get -y install doxygen

Expand Down
20 changes: 15 additions & 5 deletions .ci/docker/common/install_pytorch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -76,21 +76,31 @@ install_pytorch_and_domains() {
# the image compiler cannot satisfy. The venv inherits the image's
# site-packages, so PyTorch still builds against the same numpy.
#
# Keep the list in sync with pytorch/pyproject.toml [build-system].requires.
# Keep in sync with pytorch/pyproject.toml [build-system].requires.
local build_venv=/tmp/pytorch-build-venv
rm -rf "${build_venv}"
conda_run python -m venv --system-site-packages "${build_venv}"
# No pip cmake: scikit-build-core would prefer it over the image's, and it
# searches site-packages, where MKL and libomp are not.
conda_run "${build_venv}/bin/pip" install build "scikit-build-core>=1.0" \
"setuptools>=77.0.0,<82" "cmake>=3.27,<4" ninja "packaging>=24.2" \
"typing-extensions>=4.10.0" pyyaml six
conda_run "${build_venv}/bin/python" -m build --wheel --no-isolation
ninja "packaging>=24.2" "typing-extensions>=4.10.0" pyyaml six numpy
# These images have no module scanner, and nothing here uses modules.
conda_run env CMAKE_CXX_SCAN_FOR_MODULES=OFF \
"${build_venv}/bin/python" -m build --wheel --no-isolation
rm -rf "${build_venv}"
pip_install "$(echo dist/*.whl)"

# A build with no BLAS succeeds silently. Run from / to import the wheel.
(cd / && conda_run python -c "
import torch
assert torch._C.has_lapack, 'built without LAPACK'
torch.linalg.qr(torch.randn(4, 4))
")

# Grab the pinned audio and vision commits from PyTorch
TORCHAUDIO_VERSION=release/2.11
export TORCHAUDIO_VERSION
TORCHVISION_VERSION=release/0.28
TORCHVISION_VERSION=release/0.29
export TORCHVISION_VERSION

install_domains
Expand Down
63 changes: 42 additions & 21 deletions .ci/scripts/build-qnn-windows-msvc.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,35 @@
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.

param(
[switch]$SkipX86Windows,
[switch]$SkipArm64Windows
)

$ErrorActionPreference = "Stop"

conda create --yes --quiet -n et python=3.12
conda activate et
if ($SkipX86Windows -eq $SkipArm64Windows) {
Write-Error "Specify exactly one of -SkipArm64Windows (to build x86_64) or -SkipX86Windows (to build arm64)."
exit 1
}

# Install CI requirements
pip install -r .ci/docker/requirements-ci.txt
if ($SkipX86Windows) {
$ArchLabel = "arm64"
py -3.12 -m venv et
.\et\Scripts\Activate.ps1
# ARM64 prebuilt wheels are not available for some Python modules.
# To unblock the build process, only a minimal set of dependencies
# is installed via pip. `PyYAML`/`torch` for ExecuTorch's codegen,
# `requests` for download_qnn_sdk.py.
pip install pyyaml requests
pip install torch --index-url https://download.pytorch.org/whl/cpu
} else {
$ArchLabel = "x86_64"
conda create --yes --quiet -n et python=3.12
conda activate et
# Install CI requirements
pip install -r .ci/docker/requirements-ci.txt
}

# Provision the QNN SDK
if ($env:QNN_SDK_ROOT -and (Test-Path -Path $env:QNN_SDK_ROOT)) {
Expand Down Expand Up @@ -44,27 +66,26 @@ if (-not (Test-Path -Path (Join-Path $env:QNN_SDK_ROOT "include\QNN"))) {
exit 1
}

# Test x86_64 Windows host build
.\backends\qualcomm\scripts\build.ps1 -SkipArm64Windows -Release
if ($SkipArm64Windows) {
.\backends\qualcomm\scripts\build.ps1 -SkipArm64Windows -Release
} else {
.\backends\qualcomm\scripts\build.ps1 -SkipX86Windows -Release
}

$x86Artifacts = @(
"build-x86_64-windows\backends\qualcomm\Release\PyQnnManagerAdaptor*.pyd",
"build-x86_64-windows\backends\qualcomm\Release\qnn_executorch_backend.dll",
"build-x86_64-windows\examples\qualcomm\executor_runner\Release\qnn_executor_runner.exe"
$Artifacts = @(
"build-$ArchLabel-windows\backends\qualcomm\Release\qnn_executorch_backend.dll",
"build-$ArchLabel-windows\examples\qualcomm\executor_runner\Release\qnn_executor_runner.exe"
)
foreach ($artifact in $x86Artifacts) {
if ($SkipArm64Windows) {
# Only run PyQnnManagerAdaptor validation for x86_64 Windows artifacts,
# since AOT is not fully supported on native ARM64 Windows.
$Artifacts += "build-x86_64-windows\backends\qualcomm\Release\PyQnnManagerAdaptor*.pyd"
}
foreach ($artifact in $Artifacts) {
if (-not (Get-ChildItem -Path $artifact -ErrorAction SilentlyContinue)) {
Write-Error "ERROR: x86_64 artifact not found: $artifact"
Write-Error "ERROR: $ArchLabel artifact not found: $artifact"
exit 1
}
}

# The ARM64 MSVC toolchain is currently not installed in the Windows CI
# environment. Enabling this build configuration results in build failures
# due to the missing ARM64 platform definition.
# `.\backends\qualcomm\scripts\build.ps1 -SkipX86Windows -Release`
#
# Temporarily disable this build option until ARM64 MSVC support is available
# in CI. The configuration can be re-enabled in a future update.

Write-Host "PASSED: QNN backend Windows MSVC build completed"
Write-Host "PASSED: QNN backend Windows MSVC build ($ArchLabel) completed"
41 changes: 28 additions & 13 deletions .ci/scripts/export_model_artifact.sh
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,26 @@ if [ "$MODEL_NAME" = "muse_glimmer" ]; then
fi
fi

# Downloads and compiler caches go in scratch dirs outside OUTPUT_DIR because the CI job
# templates upload OUTPUT_DIR even when the job fails. A failed export also empties
# OUTPUT_DIR, but only if it started out empty, so a local run with output_dir=. cannot
# delete the checkout. Scratch goes under RUNNER_TEMP, which the runner wipes between
# jobs, with a fallback for containers where RUNNER_TEMP is not writable.
LOCAL_MODEL_DIR=$(mktemp -d "${RUNNER_TEMP:-/tmp}/model_XXXXXX" 2>/dev/null || mktemp -d)
SCRATCH_DIRS=("$LOCAL_MODEL_DIR")
OUTPUT_DIR_WAS_EMPTY=0
[ -n "$(ls -A -- "$OUTPUT_DIR" 2>/dev/null)" ] || OUTPUT_DIR_WAS_EMPTY=1
cleanup() {
local rc=$?
set +e
rm -rf "${SCRATCH_DIRS[@]}"
if [ "$rc" -ne 0 ] && [ "$OUTPUT_DIR_WAS_EMPTY" = 1 ] && [ -d "$OUTPUT_DIR" ]; then
echo "Export failed with exit code $rc; removing partial output from ${OUTPUT_DIR}"
(cd -- "$OUTPUT_DIR" && find . -mindepth 1 -delete)
fi
}
trap cleanup EXIT

echo "::group::Export $MODEL_NAME"

if [ -n "$EXTRA_PIP" ]; then
Expand Down Expand Up @@ -386,8 +406,7 @@ fi
if [ "$MODEL_NAME" = "voxtral_realtime" ]; then
pip install safetensors huggingface_hub

# Download model weights from HuggingFace (requires HF_TOKEN for gated model)
LOCAL_MODEL_DIR="${OUTPUT_DIR}/model_weights"
# Download model weights outside OUTPUT_DIR to avoid uploading on failure (requires HF_TOKEN for gated model)
python -c "from huggingface_hub import snapshot_download; snapshot_download('${HF_MODEL}', local_dir='${LOCAL_MODEL_DIR}')"

# Per-component quantization flags
Expand Down Expand Up @@ -437,7 +456,6 @@ if [ "$MODEL_NAME" = "voxtral_realtime" ]; then
fi
# Copy tokenizer from downloaded model weights
cp "$LOCAL_MODEL_DIR/tekken.json" "${OUTPUT_DIR}/tekken.json"
rm -rf "$LOCAL_MODEL_DIR"
ls -al "${OUTPUT_DIR}"
echo "::endgroup::"
exit 0
Expand All @@ -448,12 +466,11 @@ if [ "$MODEL_NAME" = "qwen3_5_moe" ]; then
pip install safetensors huggingface_hub
pip install -r examples/models/qwen3_5_moe/requirements.txt

# Download prequantized model outside OUTPUT_DIR to avoid uploading on failure
LOCAL_MODEL_DIR=$(mktemp -d)
INDUCTOR_CACHE=$(mktemp -d "${RUNNER_TEMP:-/tmp}/inductor_cache_XXXXXX")
INDUCTOR_TMPDIR=$(mktemp -d "${RUNNER_TEMP:-/tmp}/tmpdir_XXXXXX")
trap 'rm -rf "$LOCAL_MODEL_DIR" "$INDUCTOR_CACHE" "$INDUCTOR_TMPDIR"' EXIT
SCRATCH_DIRS+=("$INDUCTOR_CACHE" "$INDUCTOR_TMPDIR")

# Download prequantized model outside OUTPUT_DIR to avoid uploading on failure
python -c "from huggingface_hub import snapshot_download; snapshot_download('${HF_MODEL}', local_dir='${LOCAL_MODEL_DIR}')"

# Sanity check: run inference on the prequantized model
Expand Down Expand Up @@ -521,10 +538,9 @@ fi
if [ "$MODEL_NAME" = "muse_glimmer" ]; then
pip install safetensors huggingface_hub gguf

LOCAL_MODEL_DIR=$(mktemp -d)
INDUCTOR_CACHE=$(mktemp -d "${RUNNER_TEMP:-/tmp}/inductor_cache_XXXXXX")
INDUCTOR_TMPDIR=$(mktemp -d "${RUNNER_TEMP:-/tmp}/tmpdir_XXXXXX")
trap 'rm -rf "$LOCAL_MODEL_DIR" "$INDUCTOR_CACHE" "$INDUCTOR_TMPDIR"' EXIT
SCRATCH_DIRS+=("$INDUCTOR_CACHE" "$INDUCTOR_TMPDIR")

case "$QUANT_NAME" in
kquant-17gb)
Expand Down Expand Up @@ -588,14 +604,13 @@ fi
if [ "$MODEL_NAME" = "gemma4_31b" ]; then
pip install safetensors huggingface_hub gguf

# Download GGUF + tokenizer outside OUTPUT_DIR to avoid uploading on failure.
# The unsloth GGUF repo ships the .gguf but no tokenizer.json, so the tokenizer
# is fetched from the (non-GGUF) unsloth/gemma-4-31B-it repo.
LOCAL_MODEL_DIR=$(mktemp -d)
INDUCTOR_CACHE=$(mktemp -d "${RUNNER_TEMP:-/tmp}/inductor_cache_XXXXXX")
INDUCTOR_TMPDIR=$(mktemp -d "${RUNNER_TEMP:-/tmp}/tmpdir_XXXXXX")
trap 'rm -rf "$LOCAL_MODEL_DIR" "$INDUCTOR_CACHE" "$INDUCTOR_TMPDIR"' EXIT
SCRATCH_DIRS+=("$INDUCTOR_CACHE" "$INDUCTOR_TMPDIR")

# Download GGUF + tokenizer outside OUTPUT_DIR to avoid uploading on failure.
# The unsloth GGUF repo ships the .gguf but no tokenizer.json, so the tokenizer
# is fetched from the (non-GGUF) unsloth/gemma-4-31B-it repo.
GGUF_FILE="gemma-4-31B-it-Q4_K_M.gguf"
python -c "from huggingface_hub import hf_hub_download; hf_hub_download('unsloth/gemma-4-31B-it-GGUF', '${GGUF_FILE}', local_dir='${LOCAL_MODEL_DIR}')"
python -c "from huggingface_hub import hf_hub_download; hf_hub_download('unsloth/gemma-4-31B-it', 'tokenizer.json', local_dir='${LOCAL_MODEL_DIR}')"
Expand Down
26 changes: 13 additions & 13 deletions .ci/scripts/gather_test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,23 +17,23 @@
from examples.xnnpack import MODEL_NAME_TO_OPTIONS, QuantType

DEFAULT_RUNNERS = {
"linux": "linux.2xlarge",
"linux": "mt-l-x86iavx512-8-64",
"macos": "macos-m1-stable",
}
CUSTOM_RUNNERS = {
"linux": {
# This one runs OOM on smaller runner, the root cause is unclear (T163016365)
"w2l": "linux.4xlarge.memory",
"ic4": "linux.4xlarge.memory",
"resnet50": "linux.4xlarge.memory",
"llava": "linux.4xlarge.memory",
"llama3_2_vision_encoder": "linux.4xlarge.memory",
"llama3_2_text_decoder": "linux.4xlarge.memory",
"w2l": "mt-l-x86iavx512-16-128",
"ic4": "mt-l-x86iavx512-16-128",
"resnet50": "mt-l-x86iavx512-16-128",
"llava": "mt-l-x86iavx512-16-128",
"llama3_2_vision_encoder": "mt-l-x86iavx512-16-128",
"llama3_2_text_decoder": "mt-l-x86iavx512-16-128",
# This one causes timeout on smaller runner, the root cause is unclear (T161064121)
"dl3": "linux.4xlarge.memory",
"emformer_join": "linux.4xlarge.memory",
"emformer_predict": "linux.4xlarge.memory",
"phi_4_mini": "linux.4xlarge.memory",
"dl3": "mt-l-x86iavx512-16-128",
"emformer_join": "mt-l-x86iavx512-16-128",
"emformer_predict": "mt-l-x86iavx512-16-128",
"phi_4_mini": "mt-l-x86iavx512-16-128",
}
}

Expand Down Expand Up @@ -146,7 +146,7 @@ def export_models_for_ci() -> dict[str, dict]:
"build-tool": "buck2",
"model": "mv3",
"backend": backend,
"runner": "linux.2xlarge",
"runner": "mt-l-x86iavx512-8-64",
"timeout": DEFAULT_TIMEOUT,
}
models["include"].append(record)
Expand Down Expand Up @@ -175,7 +175,7 @@ def export_models_for_ci() -> dict[str, dict]:
"build-tool": "cmake",
"model": name,
"backend": backend,
"runner": DEFAULT_RUNNERS.get(target_os, "linux.2xlarge"),
"runner": DEFAULT_RUNNERS.get(target_os, "mt-l-x86iavx512-8-64"),
"timeout": DEFAULT_TIMEOUT,
}

Expand Down
26 changes: 26 additions & 0 deletions .ci/scripts/pytest-parallelism.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/bin/bash
# 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.

# Pin pytest-xdist's worker count, but only when the container is allowed less
# CPU than the machine it landed on. `auto` asks psutil for the machine's
# physical cores, which inside an OSDC pod is the whole node, so the workers
# exhaust the pod's memory. nproc honours the pod's cpuset, which is what
# pytorch relies on for OMP_NUM_THREADS on the same fleet.
#
# Left alone when unconstrained. `auto` already discounts hyperthreads there,
# while nproc counts them, so overriding it would double the workers and halve
# the memory each one gets.

if [[ -z "${PYTEST_XDIST_AUTO_NUM_WORKERS:-}" ]] && command -v nproc >/dev/null 2>&1; then
cpus_allowed="$(nproc)"
cpus_installed="$(nproc --all)"
echo "pytest-xdist: ${cpus_allowed} of ${cpus_installed} CPUs available"
if [[ "${cpus_allowed}" -lt "${cpus_installed}" ]]; then
export PYTEST_XDIST_AUTO_NUM_WORKERS="${cpus_allowed}"
echo "PYTEST_XDIST_AUTO_NUM_WORKERS=${PYTEST_XDIST_AUTO_NUM_WORKERS}"
fi
fi
1 change: 1 addition & 0 deletions .ci/scripts/setup-samsung-linux-deps.sh
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@ install_enn_backend() {
echo "NDK will be installed/used at: ${ANDROID_NDK_ROOT}"

bash backends/samsung/build.sh --build all
bash examples/samsung/build.sh

export EXECUTORCH_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
export PYTHONPATH="${PYTHONPATH:-}:${EXECUTORCH_ROOT}/.."
Expand Down
11 changes: 9 additions & 2 deletions .ci/scripts/test-cuda-build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,16 @@ import executorch
print('SUCCESS: ExecuTorch imported successfully')
"

python -m pip check

# Test CUDA availability and show details
python -c "
EXPECTED_CUDA_VERSION="$cuda_version" python -c "
try:
import os
import torch
assert torch.version.cuda == os.environ['EXPECTED_CUDA_VERSION'], (
torch.version.cuda, os.environ['EXPECTED_CUDA_VERSION']
)
print('INFO: PyTorch version:', torch.__version__)
print('INFO: CUDA available:', torch.cuda.is_available())

Expand All @@ -68,7 +74,8 @@ try:
x = torch.randn(10, 10).to(device)
y = torch.randn(10, 10).to(device)
z = torch.mm(x, y)
print('SUCCESS: CUDA tensor operation completed on device:', z.device)
torch.testing.assert_close(z.cpu(), x.cpu() @ y.cpu())
print('SUCCESS: CUDA tensor operation matched CPU on device:', z.device)
print('INFO: Result tensor shape:', z.shape)

print('SUCCESS: ExecuTorch CUDA integration verified')
Expand Down
2 changes: 1 addition & 1 deletion .ci/scripts/test-rocm-aoti.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

set -euo pipefail

ROCM_VERSION="${ROCM_VERSION:-7.1}"
ROCM_VERSION="${ROCM_VERSION:-7.2}"
ROCM_PATH="${ROCM_PATH:-/opt/rocm}"
PYTORCH_ROCM_INDEX="${PYTORCH_ROCM_INDEX:-https://download.pytorch.org/whl/test/rocm${ROCM_VERSION}}"
TORCHAO_ROCM_WHEEL_BASE="${TORCHAO_ROCM_WHEEL_BASE:-https://download.pytorch.org/whl/nightly/rocm${ROCM_VERSION}}"
Expand Down
2 changes: 1 addition & 1 deletion .ci/scripts/test-rocm-voxtral.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

set -euo pipefail

ROCM_VERSION="${ROCM_VERSION:-7.1}"
ROCM_VERSION="${ROCM_VERSION:-7.2}"
ROCM_PATH="${ROCM_PATH:-/opt/rocm}"
EXPECTED_ROCM_ARCH="${EXPECTED_ROCM_ARCH:-gfx950}"
EXPECTED_WARP_SIZE="${EXPECTED_WARP_SIZE:-64}"
Expand Down
13 changes: 9 additions & 4 deletions .ci/scripts/test_backend.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
# LICENSE file in the root directory of this source tree.
set -eux

# Cap pytest-xdist's `auto` workers to the container's CPU quota.
source .ci/scripts/pytest-parallelism.sh

SUITE=$1
FLOW=$2
ARTIFACT_DIR=$3
Expand Down Expand Up @@ -151,11 +154,13 @@ if [[ "$FLOW" == *nxp* ]]; then
export NXP_RUNNER_PATH="$(pwd)/examples/nxp/executor_runner/build/nxp_executor_runner"
fi

GOLDEN_DIR="${ARTIFACT_DIR}/golden-artifacts"
export GOLDEN_ARTIFACTS_DIR="${GOLDEN_DIR}"

EXIT_CODE=0
PYTEST_ARGS=(-c /dev/null -n auto)
# An Ethos-U failure captures a few hundred thousand lines of Vela operator
# listings, and the runner agent throws System.OutOfMemoryException processing
# a step that size, taking the whole job down before pytest can report. The
# reason for each failure is in its exception message and traceback, which are
# unaffected.
PYTEST_ARGS=(-c /dev/null -n auto --show-capture=no)
if [[ ${#PYTEST_RETRY_ARGS[@]} -gt 0 ]]; then
PYTEST_ARGS+=("${PYTEST_RETRY_ARGS[@]}")
fi
Expand Down
Loading
Loading