Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
128 commits
Select commit Hold shift + click to select a range
b52e504
[ET-VK][conv2d] Use a 2x2x8 tile and tuned local sizes for pointwise …
SS-JIA Nov 2, 2026
b6f80e3
Qualcomm AI Engine Direct - Support QAT for concat observer (#23347)
shewu-quic Nov 3, 2026
18e0cc0
Qualcomm AI Engine Direct - Add composite lowering for aten.convoluti…
quic-xiyushi Nov 3, 2026
274a774
Arm backend: Add CONST and use tosa dialect op (#24287)
AdrianLundell Nov 3, 2026
0250ab2
Arm backend: Collect PMU counters in EthosUExecutionStats (#24432)
Erik-Lundell Nov 3, 2026
a489dca
Arm backend: Fix metadata provenance for DecomposeTopK (#24497)
wwwind Nov 3, 2026
a3528d9
Arm backend: Group adaptive average pooling output windows (#24498)
AdrianLundell Nov 3, 2026
6d903f4
Reinstall pip from PyPI in the native wheel pre-build script (#24461)
JakeStevens Nov 3, 2026
2799a79
Keep max_pool2d and avg_pool2d test inputs within the exported shape …
digantdesai Nov 3, 2026
e655cb8
Arm backend: Add FP8 to automatic list of generated ops, VGF. (#24496)
wwwind Nov 3, 2026
a057bb4
Separate ESP32 CI runs by commit (#24472)
rascani Nov 3, 2026
7da27ca
Run Espressif operator-library cases in optimized S3 CI (#24313)
rascani Nov 3, 2026
249237c
XNNPACK: read inputs with a non-default dim order in their memory lay…
msluszniak Nov 3, 2026
186ca41
Keep int64 precision in portable div trunc mode and fmod (#24170)
usmanmateen Nov 3, 2026
ee4b85b
Fix NXP MCUXpresso CIFAR link failure (#24510)
JacobSzwejbka Nov 3, 2026
24ad53e
Fix export of zero-stride constants and inputs, and of constants that…
shoumikhin Nov 3, 2026
3bc5222
Fix wrong dtypes and values in Core ML conversion (#24424)
shoumikhin Nov 3, 2026
a8f64b0
Enable Vulkan vision runners on Android (#24503) (#24503)
JakeStevens Nov 3, 2026
a1772a6
Move backend-neutral Cadence passes to backends/transforms (#24469)
mcremon-meta Nov 3, 2026
f1240a2
Python runtime: stop a backend's log from deadlocking 2 threads (#24393)
shoumikhin Nov 3, 2026
d55e079
Support Whisper positional indexing (#23903) (#23903)
JakeStevens Nov 3, 2026
c68298d
CUDA backend: lower rotary embeddings written with complex numbers (#…
shoumikhin Nov 3, 2026
bd0fcde
XNNPACK: fix wrong outputs when BatchNorm constants share a name, a b…
shoumikhin Nov 3, 2026
97e9fbb
Remove dead CUDA 11 select arm
r-barnes Nov 3, 2026
27de6db
Arm backend: Fix provenance for rSub.Scalar (#24500)
wwwind Nov 3, 2026
892e504
NXP backend: Enable MobileNetV3 model (#24307)
roman-janik-nxp Nov 3, 2026
33de505
Remove the unused iDMA ExecuTorch ops
mcremon-meta Nov 3, 2026
5badf54
CI: stop the torch-free bindings check from matching load addresses (…
shoumikhin Nov 3, 2026
6c3242e
Mark the 3-D convolution cases that fail inside a backend as expected…
shoumikhin Nov 3, 2026
df0cc0f
[ET-VK][benchmark] Rename migration shader targets to prototype_shaders
SS-JIA Nov 3, 2026
3411581
[ET-VK][benchmark] Model the q8csw weight-only fallback in references
SS-JIA Nov 3, 2026
5cc1f12
[ET-VK][benchmark] Print shader bindings as a string in JSON summaries
SS-JIA Nov 3, 2026
f9dcc9f
[ET-VK][benchmark] Add sustained replay for hardware counter capture
SS-JIA Nov 3, 2026
2bb5843
[ET-VK][ci] Run benchmark_v2 CI cases instead of etvk_bench in Skycastle
SS-JIA Nov 3, 2026
3dfe38d
[ET-VK][ci] Build benchmark_v2 with CMake and run it in GitHub CI
SS-JIA Nov 3, 2026
e1d5a50
[ET-VK][benchmark] Port remaining legacy coverage to benchmark_v2
SS-JIA Nov 3, 2026
07e8b1e
[ET-VK][benchmark] Remove the legacy operator benchmark
SS-JIA Nov 3, 2026
79feb10
exir and MLX: fix folded-output clones, shared constants, boolean mas…
shoumikhin Nov 3, 2026
b1701a4
Transpose lower-rank constants when removing permutes around them (#2…
pssrawat Nov 4, 2026
03b4623
Raise InternalError for non-CPU constant storage in the emitter (#24202)
AxelNoun Nov 4, 2026
237c463
Pin Hugging Face revisions in test_torchao_huggingface_checkpoints.sh…
digantdesai Nov 4, 2026
4dd3ef2
Arm backend: Write PMU metrics to etdump if available (#24507)
Erik-Lundell Nov 4, 2026
cf7b810
Transforms: Materialize symbolic reshape shapes (#22821)
oscarandersson8218 Nov 4, 2026
3d6a1f5
exir: Decompose normal_float_float (#22833)
oscarandersson8218 Nov 4, 2026
1c0fef0
XNNPACK: Skip the bf16 GEMM runtime tests in fbcode
digantdesai Nov 4, 2026
5343f20
Arm backend: Fix Buck targets for Ethos-U execution stats
digantdesai Nov 4, 2026
b65dde9
Move the int64 div mode tests to the portable op_div test
digantdesai Nov 4, 2026
df03641
Arm backend: fix wrong FP outputs when one Conv2d folds two BatchNorm…
shoumikhin Nov 4, 2026
a8051e2
NXP backend: refactor dataset_creators to enable better benchmarking …
novak-vaclav Nov 4, 2026
d59c080
Pin the Hugging Face downloads in the LoRA CI tests (#24590)
shoumikhin Nov 4, 2026
0061fd2
Arm backend: Add API to configure Ethos-U PMU-counters (#24612)
Erik-Lundell Nov 4, 2026
459d534
Arm backend: Delegate int64 only to the operators EXT-INT64 covers (2…
abm-77 Nov 4, 2026
6287519
transforms: propagate permute/views through binary ops (#24229)
AdrianLundell Nov 4, 2026
9cec4f6
Release packed XNNPACK convolution constants after preparation (#24551)
JakeStevens Nov 4, 2026
4654b57
Free XNNPACK convolution weight conversions after packing (#24552)
JakeStevens Nov 4, 2026
c7f7931
Support affine int8 weight specifications in Arm quantization (#24337)
AdithyaReddy9 Nov 4, 2026
3a784f8
Refuse ops coremltools cannot handle in the Core ML partitioner, and …
shoumikhin Nov 4, 2026
a80cc6d
Fix optimized sum.IntList_out 0-d crash and precision, and kernel tes…
shoumikhin Nov 4, 2026
44ef4d2
Prepack stored inputs of dtype conversions (#24435)
JakeStevens Nov 4, 2026
13be6a7
Python runtime: fix lost, out-of-order and slow log lines (#24602)
shoumikhin Nov 4, 2026
6c2d817
Arm setup: let CI jobs skip the FVPs they don't run (#24584)
rascani Nov 4, 2026
c4f5e66
Arm backend: Calibrate ranges before QAT in example (#24611)
oscarandersson8218 Nov 4, 2026
c2f7511
[CoreAI] Add a coreai_compute_unit backend option (#24375)
metascroy Nov 4, 2026
f077a9d
Arm backend: Fix semihosting CLI operand checks (#24508)
bdemirb Nov 4, 2026
42fd7f5
MLX: lower aten.gather and aten.index_put (#24598)
shoumikhin Nov 4, 2026
a0d6766
Move backend-neutral constant helpers to backends/transforms/utils
mcremon-meta Nov 4, 2026
5e8d11b
Add CortexMQuantizer.set_node_target (#24398)
pssrawat Nov 4, 2026
dadc829
Core ML: run ops on the CPU when Core ML cannot take or return their …
shoumikhin Nov 4, 2026
e2a2269
CUDA backend: one current stream on Windows, shim copies during anoth…
shoumikhin Nov 4, 2026
1db3a7a
Cache the Arm FVP and toolchain downloads in the CI images (#24585)
rascani Nov 4, 2026
352dc97
Core ML partitioner: read the stored deployment target, and skip iOS …
shoumikhin Nov 5, 2026
4afcdf6
Qualcomm AI Engine Direct - Decompose kept-whole ops that HTP leaves …
shoumikhin Nov 5, 2026
a9cbb59
Arm backend: Fix int64 partition test after mixed-dtype cat promotion…
abm-77 Nov 5, 2026
af8c355
MLX: document how index ops treat bad indices, fix --isolate cleanup …
shoumikhin Nov 5, 2026
ff06269
Skip URL lint for the login-gated NXP MCUXpresso SDK link (#24642)
digantdesai Nov 5, 2026
4a4a753
Validate ATen-mode Method inputs against the exported dim order (#24609)
JakeStevens Nov 5, 2026
83db5de
CUDA backend: return an error when an output has no buffer (#24640)
shoumikhin Nov 5, 2026
38ba5da
Keep the view after a linear when only its shape bounds match (#24626)
shoumikhin Nov 5, 2026
e8a6764
OpenVINO: keep copies of constants in the partition, and copy inputs …
shoumikhin Nov 5, 2026
b086d44
MLX: kill --isolate tests when the harness gets SIGTERM, SIGHUP or SI…
shoumikhin Nov 5, 2026
26b4f5d
Don't log an error when there are no CUDA backend symbols to promote …
edmundshieh Nov 5, 2026
27e6120
NXP backend: Pin the MCUXPresso repo version for the frequent build t…
jirioc Nov 4, 2026
baea4c0
Preserve logical element order when lowering view_copy (#24152)
zingo Nov 5, 2026
0b8cfc2
Docs: more C++ troubleshooting and a GPU input and output example for…
shoumikhin Nov 5, 2026
e25bd5a
[executorch][muse] Share the Muse Glimmer embeddings engine across ba…
pytorchbot Nov 5, 2026
69c7ce2
[executorch][cuda] Run CudaExecutor steps from prepared embeddings (#…
pytorchbot Nov 5, 2026
187fac4
[executorch][muse] Export vision with the CUDA batching contract (#24…
pytorchbot Nov 5, 2026
7dbdd80
[executorch][muse] Serve images on CUDA batching (#24655)
pytorchbot Nov 5, 2026
3412237
[executorch][muse] Accept images in CUDA DFlash batching (#24656)
pytorchbot Nov 5, 2026
818f25f
Arm backend: Materialize symbolic input dims (#24613)
oscarandersson8218 Nov 5, 2026
8f4bfc0
Arm backend: Manage uint8 output tensor on shader for IFNetTwoBlock
gggekov Nov 2, 2026
decddc6
Arm backend: Support dynamic transpose conv (#24648)
oscarandersson8218 Nov 5, 2026
850b102
Arm backend: Handle integer true division in symbolic analysis (#24421)
SaoirseARM Nov 5, 2026
724cef0
Arm backend: Fixed zero copy IO after testing on phone. (#24661)
wwwind Nov 5, 2026
64c0e4e
Arm backend: Fix provenance metadata for Unsqueeze (#24664)
wwwind Nov 5, 2026
d1f597e
Arm backend: Update tag for ML SDK emulation layer. (#24662)
wwwind Nov 5, 2026
14f12da
Arm backend: Fix MobileSAM setup and FVP measurements (#24118)
usamahz Nov 5, 2026
728e13f
Prepack stored inputs of clones and clamps (#24436)
JakeStevens Nov 5, 2026
18086e7
Give the Windows unit test jobs 180 minutes instead of 120 (#24666)
shoumikhin Nov 5, 2026
88aeb96
Fix addmm and mm lowering for scales, bias shapes and identity permut…
shoumikhin Nov 5, 2026
aeb0b1f
Arm backend: Quantize argmax input so float logits lower to TOSA ARGM…
pcwilk Nov 5, 2026
8d34671
Fix integer divisor handling in portable remainder (#24348)
JakeStevens Nov 5, 2026
cc9acaa
Emit Conv1d output layout copies after their squeeze (#24256)
pssrawat Nov 5, 2026
348821c
Fix OpenRouter request and streaming compatibility in LLM serving (#2…
mergennachin Nov 5, 2026
1f00a23
Bind cached assistant turns to history and recover idle session capac…
mergennachin Nov 5, 2026
5f0e945
Arm backend: Update IFNetTwoBlock lowering for explicit TOSA operands…
gggekov Nov 5, 2026
a3a1a8e
MLX: make the harness signal tests independent of the caller, and giv…
shoumikhin Nov 5, 2026
4bce1e1
Plan dynamic-shape buffers by the exact largest size when it is cheap…
shoumikhin Nov 5, 2026
78076ce
[executorch][test-suite] Feed the Linear tests inputs with the model'…
digantdesai Nov 3, 2026
f9edf88
[executorch][native] Split engine host factories out of the PTN runners
digantdesai Nov 3, 2026
b91949b
[executorch][native] Record op packages with bundled golden and preci…
digantdesai Nov 3, 2026
0e7dd31
[executorch][native] Pin eager kernels when generating op samples
digantdesai Nov 3, 2026
7b4699b
[executorch][native] Judge engine outputs against golden and precise …
digantdesai Nov 3, 2026
0acda57
[executorch][native] Run engines on bundled op samples with gtest
digantdesai Nov 3, 2026
cba25b1
[executorch][native-ggml] Reject weight-only quantized linears unless…
digantdesai Nov 3, 2026
7526cf8
[executorch][native] Judge activation-quantized engines against an in…
digantdesai Nov 3, 2026
29b275f
[executorch][native-ggml] Compute cuBLAS GEMMs in f32 in the CUDA sam…
digantdesai Nov 3, 2026
b548c68
[executorch][native] Suggest rounding to nearest when engines narrow …
digantdesai Nov 3, 2026
1ff8130
[executorch][native] Add FACTO-drawn linear cases to the op samples
digantdesai Nov 3, 2026
7202d58
[executorch][native] Add GGUF q4_k and q6_k packages to the op samples
digantdesai Nov 3, 2026
f35b111
[executorch][native] Decode quantized weights in float32 for precise …
digantdesai Nov 3, 2026
144eba8
[executorch][native] Cover negative, rounded and subnormal GGUF super…
digantdesai Nov 3, 2026
515fc2e
[executorch][vulkan] Accept 1-D activations in 8da4w linear
digantdesai Nov 3, 2026
2b2ec0e
[executorch][vulkan] Fix dq8ca q4gsw weight sums stride when N % 8 is…
digantdesai Nov 3, 2026
cfcee43
[executorch][native-vk] Note the int4 weight-only N % 4 and rank-4 li…
digantdesai Nov 3, 2026
69773cc
[executorch][vulkan] Round f16 image stores to nearest even
digantdesai Nov 3, 2026
3b3c9f4
[executorch][native] Run the ggml CPU act_quant sample test in CI
digantdesai Nov 3, 2026
f67eb1a
[executorch][native] Record dynamic-shape linears as chained bundled …
digantdesai Nov 3, 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
  •  
  •  
  •  
4 changes: 4 additions & 0 deletions .ci/docker/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,10 @@ fi
# Copy requirements-lintrunner.txt from root to here
cp ../../requirements-lintrunner.txt ./

# Copy the Arm setup scripts that pin the FVP and toolchain downloads
mkdir -p arm-setup
cp ../../backends/arm/scripts/{utils,fvp_utils,toolchain_utils}.sh arm-setup/

# OSDC runners have no docker daemon, so the build runs on the in-cluster
# BuildKit pool via a remote buildx builder. That builder has nowhere to load
# an image into, so the result has to go straight to the registry.
Expand Down
34 changes: 34 additions & 0 deletions .ci/docker/common/install_arm_downloads.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#!/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.

# Cache the developer.arm.com downloads of examples/arm/setup.sh, so CI jobs
# copy them from ARM_SETUP_DOWNLOAD_CACHE instead of fetching them each run.
# Jobs download whatever is missing, so a failed download only costs the cache.

set -exu

ARCH="$(uname -m)"
OS="$(uname -s)"
ARM_SETUP_CURL_PROGRESS_ARGS=(--no-progress-meter)
# Fill the cache rather than read from it
cache_dir="${ARM_SETUP_DOWNLOAD_CACHE}"
unset ARM_SETUP_DOWNLOAD_CACHE
source ./arm-setup/fvp_utils.sh
source ./arm-setup/toolchain_utils.sh

cache_download() {
local url=$1
local md5=$2
local output="${cache_dir}/$(basename "${url}")"
download_with_retry "cache" "${url}" "${output}" "${md5}" || rm -f "${output}"
}

mkdir -p "${cache_dir}"
cache_download "${corstone300_url}" "${corstone300_md5_checksum}"
cache_download "${corstone320_url}" "${corstone320_md5_checksum}"
gcc_select_toolchain
cache_download "${toolchain_url}" "${toolchain_md5_checksum}"
10 changes: 10 additions & 0 deletions .ci/docker/ubuntu/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,16 @@ COPY ./common/utils.sh utils.sh
RUN if [ -n "${ZEPHYR_SDK}" ]; then bash ./install_zephyr.sh; fi
RUN rm install_zephyr.sh zephyr_sdk_release_proxy.py utils.sh

# Cache the developer.arm.com downloads of examples/arm/setup.sh, which the
# Arm and Zephyr jobs run.
ENV ARM_SETUP_DOWNLOAD_CACHE=/opt/arm-download-cache
COPY ./common/install_arm_downloads.sh install_arm_downloads.sh
COPY ./arm-setup arm-setup
RUN if [ -n "${ARM_SDK}${ZEPHYR_SDK}" ]; then \
bash ./install_arm_downloads.sh || echo "Arm download cache not populated"; \
fi
RUN rm -r install_arm_downloads.sh arm-setup

ARG QNN_SDK

ARG MEDIATEK_SDK
Expand Down
22 changes: 15 additions & 7 deletions .ci/scripts/download_hf_hub.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,15 @@ export HF_HUB_DISABLE_XET=1
# Arguments:
# 1. model_id: The Hugging Face repository ID (e.g., "organization/model_name")
# 2. subdir: The optional subdirectory in the repo to look for files (pass "" if not used)
# 3. file_names: A space-separated list of filenames to be downloaded
# 3. revision: The commit hash to download
# 4. file_names: A space-separated list of filenames to be downloaded
# Returns:
# The directory containing the downloaded files
function download_hf_files() {
local model_id="$1"
local subdir="$2"
shift 2
local revision="$3"
shift 3
local file_names=("$@") # Capture all remaining arguments as an array

local download_dir
Expand All @@ -24,7 +26,8 @@ from huggingface_hub import hf_hub_download
# Download the first file and get its directory
path = hf_hub_download(
repo_id='${model_id}',
filename='${subdir:+${subdir}/}${file_names[0]}'
filename='${subdir:+${subdir}/}${file_names[0]}',
revision='${revision}'
)
import os
print(os.path.dirname(path))")
Expand All @@ -41,7 +44,8 @@ from huggingface_hub import hf_hub_download
# Download the file
hf_hub_download(
repo_id='${model_id}',
filename='${subdir:+${subdir}/}${file_name}'
filename='${subdir:+${subdir}/}${file_name}',
revision='${revision}'
)"

if [ $? -ne 0 ]; then
Expand All @@ -67,6 +71,10 @@ if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
SUBDIR="$2"
shift 2
;;
--revision)
REVISION="$2"
shift 2
;;
--files)
shift
FILES_TO_DOWNLOAD=()
Expand All @@ -83,13 +91,13 @@ if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
done

# Validate required arguments
if [ -z "$MODEL_ID" ] || [ ${#FILES_TO_DOWNLOAD[@]} -eq 0 ]; then
echo "Usage: $0 --model_id <model_id> --subdir <subdir> --files <file1> [<file2> ...]" >&2
if [ -z "$MODEL_ID" ] || [ -z "$REVISION" ] || [ ${#FILES_TO_DOWNLOAD[@]} -eq 0 ]; then
echo "Usage: $0 --model_id <model_id> --revision <commit> --subdir <subdir> --files <file1> [<file2> ...]" >&2
exit 1
fi

# Call the function
DOWNLOAD_DIR=$(download_hf_files "$MODEL_ID" "$SUBDIR" "${FILES_TO_DOWNLOAD[@]}")
DOWNLOAD_DIR=$(download_hf_files "$MODEL_ID" "$SUBDIR" "$REVISION" "${FILES_TO_DOWNLOAD[@]}")
if [ $? -eq 0 ]; then
echo "$DOWNLOAD_DIR"
else
Expand Down
35 changes: 15 additions & 20 deletions .ci/scripts/export_model_artifact.sh
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ Arguments:
- vr-streaming: Voxtral Realtime streaming mode
- vr-offline: Voxtral Realtime offline mode
- solo-text: Muse Glimmer solo text mode
- solo-text-batching: Muse Glimmer text on the CUDA batching runtime
- dflash-image-batching: Muse Glimmer DFlash text and image on the CUDA batching runtime
- dflash-image: Muse Glimmer DFlash vision mode

Examples:
Expand Down Expand Up @@ -105,7 +105,7 @@ if [ -n "$MODE" ]; then
exit 1
fi
;;
solo-text|solo-text-batching|dflash-image)
solo-text|dflash-image-batching|dflash-image)
if [ "$HF_MODEL" != "meta-models/Muse-Glimmer-30B-GGUF" ]; then
echo "Error: Mode '$MODE' can only be used with Muse Glimmer model"
echo "Provided model: $HF_MODEL"
Expand All @@ -114,7 +114,7 @@ if [ -n "$MODE" ]; then
;;
*)
echo "Error: Unsupported mode '$MODE'"
echo "Supported modes: vr-streaming, vr-offline, solo-text, solo-text-batching, dflash-image"
echo "Supported modes: vr-streaming, vr-offline, solo-text, dflash-image-batching, dflash-image"
exit 1
;;
esac
Expand Down Expand Up @@ -354,8 +354,8 @@ if [ "$MODEL_NAME" = "muse_glimmer" ]; then
echo "Error: Muse Glimmer requires quantization 'kquant-17gb' or 'kquant-dynamic'"
exit 1
fi
if [ "$MODE" != "solo-text" ] && [ "$MODE" != "solo-text-batching" ] && [ "$MODE" != "dflash-image" ]; then
echo "Error: Muse Glimmer requires mode 'solo-text', 'solo-text-batching' or 'dflash-image'"
if [ "$MODE" != "solo-text" ] && [ "$MODE" != "dflash-image-batching" ] && [ "$MODE" != "dflash-image" ]; then
echo "Error: Muse Glimmer requires mode 'solo-text', 'dflash-image-batching' or 'dflash-image'"
exit 1
fi
fi
Expand Down Expand Up @@ -707,23 +707,17 @@ if [ "$MODEL_NAME" = "muse_glimmer" ]; then
--backend cuda \
--output-dir "${OUTPUT_DIR}"
;;
solo-text-batching)
# The off-graph cache exports the batching methods CudaExecutor drives:
# Static forward_{N}, dynamic forward_others and the device samplers.
EXPORT_START_SECONDS=$SECONDS
TMPDIR="$INDUCTOR_TMPDIR" \
TORCHINDUCTOR_CACHE_DIR="$INDUCTOR_CACHE" \
python -m executorch.examples.models.muse_glimmer.export.export_solo \
--gguf "$TARGET_GGUF_PATH" \
--backend cuda \
--use-offgraph-kv-cache \
--output-dir "${OUTPUT_DIR}"
;;
dflash-image)
dflash-image|dflash-image-batching)
DRAFT_GGUF_FILE="dflash-Muse-Glimmer-30B-Q4_K_M.gguf"
MMPROJ_GGUF_FILE="mmproj-Muse-Glimmer-30B-Q4_K_M.gguf"
python -c "from huggingface_hub import hf_hub_download; hf_hub_download('${HF_MODEL}', '${DRAFT_GGUF_FILE}', local_dir='${LOCAL_MODEL_DIR}')"
python -c "from huggingface_hub import hf_hub_download; hf_hub_download('${HF_MODEL}', '${MMPROJ_GGUF_FILE}', local_dir='${LOCAL_MODEL_DIR}')"
# The off-graph cache exports the batching methods the CUDA DFlash
# executor drives, plus the vision encoder and forward_from_embeddings.
OFFGRAPH_FLAG=""
if [ "$MODE" = "dflash-image-batching" ]; then
OFFGRAPH_FLAG="--use-offgraph-kv-cache"
fi
EXPORT_START_SECONDS=$SECONDS
TMPDIR="$INDUCTOR_TMPDIR" \
TORCHINDUCTOR_CACHE_DIR="$INDUCTOR_CACHE" \
Expand All @@ -732,10 +726,11 @@ if [ "$MODEL_NAME" = "muse_glimmer" ]; then
--draft-gguf "${LOCAL_MODEL_DIR}/${DRAFT_GGUF_FILE}" \
--mmproj "${LOCAL_MODEL_DIR}/${MMPROJ_GGUF_FILE}" \
--backend cuda \
$OFFGRAPH_FLAG \
--output-dir "${OUTPUT_DIR}"
;;
*)
echo "Error: Muse Glimmer requires mode 'solo-text', 'solo-text-batching' or 'dflash-image'"
echo "Error: Muse Glimmer requires mode 'solo-text', 'dflash-image-batching' or 'dflash-image'"
exit 1
;;
esac
Expand All @@ -746,7 +741,7 @@ if [ "$MODEL_NAME" = "muse_glimmer" ]; then

test -f "${OUTPUT_DIR}/model.pte"
test -f "${OUTPUT_DIR}/aoti_cuda_blob.ptd"
if [ "$MODE" = "dflash-image" ]; then
if [ "$MODE" = "dflash-image" ] || [ "$MODE" = "dflash-image-batching" ]; then
test -f "${OUTPUT_DIR}/pos_embed.bin"
fi
ls -al "${OUTPUT_DIR}"
Expand Down
2 changes: 2 additions & 0 deletions .ci/scripts/muse_glimmer_batching_smoke.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ DECLARE_string(pte);
DECLARE_string(tokenizer);
DECLARE_string(data_path);
DECLARE_string(backend);
DECLARE_bool(dflash);
DECLARE_int32(max_sessions);
DECLARE_int32(max_session_tokens);
DECLARE_uint64(bos_id);
Expand Down Expand Up @@ -64,6 +65,7 @@ int main(int argc, char** argv) {
config.max_sessions = FLAGS_max_sessions;
config.max_session_tokens = FLAGS_max_session_tokens;
config.bos_id = FLAGS_bos_id;
config.use_dflash = FLAGS_dflash;
auto backend = llm::create_muse_glimmer_backend(config);
if (!backend.ok()) {
throw std::runtime_error(
Expand Down
5 changes: 3 additions & 2 deletions .ci/scripts/test-native.sh
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,9 @@ case "${component}" in
-DEXECUTORCH_BUILD_NATIVE_VISION_RUNNER=ON
-DGGML_NATIVE=OFF
)
targets+=(run_hf_llm_ggml native_ggml_engine_test native_llm_runner_utils_test run_classification_ggml_cpu)
test_regex='^native_(ggml_engine|llm_runner_utils)_test$'
# TODO: run the other sample tests once they pass.
targets+=(run_hf_llm_ggml native_ggml_engine_test native_llm_runner_utils_test run_classification_ggml_cpu native_output_check_test native_ggml_sample_test)
test_regex='^native_(ggml_engine|llm_runner_utils|output_check)_test$|^native_ggml_sample_test_act_quant$'
;;
vulkan)
cmake_args+=(
Expand Down
10 changes: 6 additions & 4 deletions .ci/scripts/test_backend.sh
Original file line number Diff line number Diff line change
Expand Up @@ -76,11 +76,13 @@ if [[ "$FLOW" == *arm* ]]; then
PYTEST_RETRY_ARGS=(--reruns 2 --reruns-delay 1)
fi

# Setup ARM deps.
# Setup ARM deps. Only the Ethos-U flows run on an FVP.
if [[ "$FLOW" == *vgf* ]]; then
.ci/scripts/setup-arm-baremetal-tools.sh --enable-mlsdk-deps --install-mlsdk-deps-with-pip
else
.ci/scripts/setup-arm-baremetal-tools.sh --disable-ethos-u-deps --enable-mlsdk-deps --install-mlsdk-deps-with-pip
elif [[ "$FLOW" == *ethos_u* ]]; then
.ci/scripts/setup-arm-baremetal-tools.sh
else
.ci/scripts/setup-arm-baremetal-tools.sh --disable-ethos-u-deps
fi
source examples/arm/arm-scratch/setup_path.sh

Expand All @@ -98,7 +100,7 @@ fi
if [[ "$FLOW" == *cortex_m* ]]; then
# Cortex-M runs on the Corstone-300 FVP, using the same Arm toolchain as the
# Ethos-U flows but its own semihosting runner.
.ci/scripts/setup-arm-baremetal-tools.sh
.ci/scripts/setup-arm-baremetal-tools.sh --fvp corstone300
source examples/arm/arm-scratch/setup_path.sh

backends/cortex_m/test/build_test_runner.sh
Expand Down
2 changes: 2 additions & 0 deletions .ci/scripts/test_cuda_runtime_windows.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ $tests = @(
"test_cuda_mutable_state",
"test_cuda_weight_cache",
"test_cuda_output_copy",
"test_cuda_backend_execute",
"test_cuda_sort_rand",
"test_cuda_current_stream",
"test_cuda_guard",
"test_cuda_stream_guard"
)
Expand Down
29 changes: 29 additions & 0 deletions .ci/scripts/test_espressif.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ build_dir=$(cd "${build_dir}" && pwd)
cd "${et_root}"

collect_artifacts() {
local file operator_dir artifact_dir
if [[ -n "${RUNNER_ARTIFACT_DIR:-}" ]]; then
mkdir -p "${RUNNER_ARTIFACT_DIR}/esp32s3"
for file in "${build_dir}"/*.log "${build_dir}"/*.bpte \
Expand All @@ -35,6 +36,18 @@ collect_artifacts() {
cp "${file}" "${RUNNER_ARTIFACT_DIR}/esp32s3/"
fi
done
for operator_dir in "${build_dir}"/operator-library-*; do
[[ -d "${operator_dir}" ]] || continue
artifact_dir="${RUNNER_ARTIFACT_DIR}/esp32s3/${operator_dir##*/}"
mkdir -p "${artifact_dir}"
for file in "${operator_dir}"/*.log "${operator_dir}"/*.bpte \
"${operator_dir}/sdkconfig" "${operator_dir}"/*.elf \
"${operator_dir}/merged-binary.bin"; do
if [[ -f "${file}" ]]; then
cp "${file}" "${artifact_dir}/"
fi
done
done
fi
}
trap collect_artifacts EXIT
Expand All @@ -54,6 +67,9 @@ python examples/espressif/export_espnn_test_programs.py \
# runs inline without pthreadpool, which needs POSIX calls ESP-IDF lacks.
espnn_ops=$(tr -d '\n' < "${build_dir}/espnn-tests/operators.txt" \
| tr ',' '\n' | grep -v '^quantized_decomposed::' | paste -sd, -)
if [[ "${espnn_kernels}" == optimized ]]; then
espnn_ops="${espnn_ops},aten::sin.out"
fi

cmake --preset esp-baremetal -G Ninja -B "${build_dir}/runtime" \
-DCMAKE_TOOLCHAIN_FILE="${IDF_PATH}/tools/cmake/toolchain-esp32s3.cmake" \
Expand Down Expand Up @@ -136,3 +152,16 @@ import json, sys
for entry in json.load(open(sys.argv[1])):
print(entry["name"], entry["atol"], entry["rtol"])
' "${build_dir}/espnn-tests/manifest.json")

if [[ "${espnn_kernels}" == optimized ]]; then
# Stop on failure so later cases cannot overwrite its firmware and logs.
ESPRESSIF_BUILD_DIR="${build_dir}" python -m pytest \
-x -v --tb=short backends/espressif/test/ops -k implementation \
2>&1 | tee "${build_dir}/operator-library-tests.log"
for sdkconfig in "${build_dir}"/operator-library-*/sdkconfig; do
if ! grep -qx 'CONFIG_NN_OPTIMIZED=y' "${sdkconfig}"; then
echo "Expected CONFIG_NN_OPTIMIZED=y in ${sdkconfig}" >&2
exit 1
fi
done
fi
Loading
Loading