Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions .ci/docker/common/install_openssl.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.

# NB: This script is needed for sccache and is adopted from PyTorch core repo at
# https://github.com/pytorch/pytorch/blob/main/.ci/docker/common/install_openssl.sh
# NB: This script is needed for sccache and is adopted from PyTorch core repo.
# Core deleted its copy in pytorch/pytorch#179513, so this points at the last
# revision that still had it instead of at a branch.
# https://github.com/pytorch/pytorch/blob/9274b93eac9f026e9f51e282449b0300b8e05482/.ci/docker/common/install_openssl.sh
set -ex

OPENSSL=openssl-1.1.1k
Expand Down
2 changes: 1 addition & 1 deletion .ci/scripts/test_llava.sh
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ export_llava() {
# Download a new image
download_image() {
echo "Downloading image"
curl -o basketball.jpg https://upload.wikimedia.org/wikipedia/commons/7/73/Chicago_Bulls_and_New_Jersey_Nets%2C_March_28%2C_1991.jpg
curl -fL -o basketball.jpg https://upload.wikimedia.org/wikipedia/commons/3/3e/Chicago_Bulls_-_New_Jersey_Nets_match_on_March_28%2C_1991.jpg
}

run_and_verify() {
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<div align="center">
<a href="https://pypi.org/project/executorch/"><img src="https://img.shields.io/pypi/v/executorch?style=for-the-badge&color=blue" alt="PyPI - Version"></a>
<a href="https://github.com/pytorch/executorch/graphs/contributors"><img src="https://img.shields.io/github/contributors/pytorch/executorch?style=for-the-badge&color=blue" alt="GitHub - Contributors"></a>
<a href="https://github.com/pytorch/executorch/stargazers"><img src="https://img.shields.io/github/stars/pytorch/executorch?style=for-the-badge&color=blue" alt="GitHub - Stars"></a>
<a href="https://github.com/pytorch/executorch/stargazers"><!-- @lint-ignore GitHub serves 404 on /stargazers to non-browser clients --><img src="https://img.shields.io/github/stars/pytorch/executorch?style=for-the-badge&color=blue" alt="GitHub - Stars"></a>
<a href="https://discord.gg/Dh43CKSAdc"><img src="https://img.shields.io/badge/Discord-Join%20Us-blue?logo=discord&logoColor=white&style=for-the-badge" alt="Discord - Chat with Us"></a>
<a href="https://docs.pytorch.org/executorch/main/index.html"><img src="https://img.shields.io/badge/Documentation-blue?logo=googledocs&logoColor=white&style=for-the-badge" alt="Documentation"></a>
</div>
Expand Down
4 changes: 3 additions & 1 deletion backends/arm/scripts/toolchain_utils.sh
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,9 @@ function musl_select_toolchain() {
fi

if [[ "${ARCH}" == "x86_64" ]] ; then
toolchain_url="https://musl.cc/aarch64-linux-musl-cross.tgz"
# musl.cc serves this fine to developers but has never answered the link
# check from a GitHub hosted runner.
toolchain_url="https://musl.cc/aarch64-linux-musl-cross.tgz" # @lint-ignore
toolchain_dir="aarch64-linux-musl-cross"
toolchain_md5_checksum="a6bb806af217a91cf575e15163e8b12b"
toolchain_archive="${toolchain_dir}.tgz"
Expand Down
2 changes: 1 addition & 1 deletion backends/qualcomm/scripts/download_qnn_sdk.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ def _read_qnn_config() -> Dict[str, str]:
QNN_VERSION = _QNN_CONFIG.get("QNN_VERSION", "2.37.0.250724")
QNN_ZIP_URL = _QNN_CONFIG.get(
"QNN_ZIP_URL",
f"https://softwarecenter.qualcomm.com/api/download/software/sdks/"
f"https://softwarecenter.qualcomm.com/api/download/software/sdks/" # @lint-ignore only half of a URL, the rest is on the next line
f"Qualcomm_AI_Runtime_Community/All/{QNN_VERSION}/v{QNN_VERSION}.zip",
)

Expand Down
2 changes: 1 addition & 1 deletion docs/source/kernel-library-custom-aten-kernel.md
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ Unlike the YAML entry API, the C++ API only uses C++ macros `EXECUTORCH_LIBRARY`

Please refer to [Custom Ops Best Practices](#custom-ops-api-best-practices) on which API to use.

Similar to [`TORCH_LIBRARY`](https://pytorch.org/cppdocs/library.html#library_8h_1a0bd5fb09d25dfb58e750d712fc5afb84) in PyTorch, `EXECUTORCH_LIBRARY` takes the operator name and the C++ function name and register them into ExecuTorch runtime.
Similar to [`TORCH_LIBRARY`](https://docs.pytorch.org/cppdocs/api/library/index.html) in PyTorch, `EXECUTORCH_LIBRARY` takes the operator name and the C++ function name and register them into ExecuTorch runtime.

#### Prepare custom kernel implementation

Expand Down
2 changes: 1 addition & 1 deletion docs/source/success-stories.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ PrivateMind delivers a fully private AI assistant using ExecuTorch's .pte format

NimbleEdge successfully integrated ExecuTorch with its open-source DeliteAI platform to enable agentic workflows orchestrated in Python on mobile devices. The extensible ExecuTorch ecosystem allowed implementation of on-device optimization techniques leveraging contextual sparsity. ExecuTorch significantly accelerated the release of "NimbleEdge AI" for iOS, enabling models like Qwen 2.5 with tool calling support and achieving up to 30% higher transactions per second.

[Visit →](https://nimbleedge.com) • [Blog →](https://www.nimbleedge.com/blog/meet-nimbleedge-ai-the-first-truly-private-on-device-assistant) • [iOS App →](https://apps.apple.com/in/app/nimbleedge-ai/id6746237456)
[Visit →](https://nimbleedge.com) • [Blog →](https://www.nimbleedge.com/blog/meet-nimbleedge-ai-the-first-truly-private-on-device-assistant)
:::

::::
Expand Down
2 changes: 1 addition & 1 deletion examples/models/llama/runner/generation.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ def __init__(
self.use_kv_cache = use_kv_cache
self.tokenizer = get_tokenizer(tokenizer_path, tokenizer_config_path)
self.device = device
# For some models like qwen, mismatch is acceptable: https://github.com/QwenLM/Qwen2.5/issues/466#issuecomment-2146759706
# For some models like qwen, mismatch is acceptable: https://github.com/QwenLM/Qwen3/issues/466#issuecomment-2146759706
if vocab_size != self.tokenizer.n_words:
print(
"Warning - given vocab_size in params is unequal to tokenizer vocab size."
Expand Down
33 changes: 12 additions & 21 deletions scripts/lint_urls.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ trap 'kill 0' SIGINT
status=0
green='\e[1;32m'; red='\e[1;31m'; cyan='\e[1;36m'; yellow='\e[1;33m'; reset='\e[0m'
user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
egress_probe_url="https://api.github.com"
max_jobs=10
pids=()

Expand All @@ -26,28 +27,18 @@ while IFS=: read -r filepath url; do
sleep 1
code=$(curl -k -gsLm30 --retry 3 --retry-delay 3 --retry-connrefused -o /dev/null -w "%{http_code}" -r 0-0 -A "$user_agent" "$url") || code=000
fi
if [ "$code" -lt 200 ] || [ "$code" -ge 400 ]; then
sleep 1
request_id=$(curl -sS -G -H 'Accept: application/json' \
--data-urlencode "host=$url" \
--data-urlencode "max_nodes=1" \
--data-urlencode "node=us3.node.check-host.net" \
https://check-host.net/check-http \
| jq -r .request_id) || request_id=""
if [ -n "$request_id" ]; then
sleep 5
for _ in {1..5}; do
new_code=$(curl -sS -H 'Accept: application/json' \
"https://check-host.net/check-result/$request_id" \
| jq -r -e '.[][0][3]') || new_code=000
[[ "$new_code" =~ ^[0-9]+$ ]] || new_code=000
if [ "$new_code" -ge 200 ] && [ "$new_code" -lt 400 ]; then
code=$new_code
break
fi
sleep 5
done
if [[ "$code" == "000" ]]; then
# No HTTP response at all. Usually a dead host, but a runner with no egress
# gets 000 for everything, and failing 2000 live links helps nobody. One
# probe of a host the runner already depends on tells the two apart.
probe=$(curl -k -gsLm10 -o /dev/null -w "%{http_code}" "$egress_probe_url") || probe=000
if [[ "$probe" == "000" ]]; then
printf "${yellow}WARN %s${reset} ${cyan}%s${reset} %s\n" "$code" "$url" "$filepath"
exit 0
fi
# Egress works, so the host is either dead or slow. Give it one more try
# with a longer timeout before failing it.
code=$(curl -k -gsLm60 -o /dev/null -w "%{http_code}" -A "$user_agent" "$url") || code=000
fi
# Treat Cloudflare JS-challenge and rate-limit as success.
if [[ "$code" == "403" || "$code" == "429" || "$code" == "503" ]]; then
Expand Down
7 changes: 4 additions & 3 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.

# Part of this code is from pybind11 cmake_example:
# https://github.com/pybind/cmake_example/blob/master/setup.py so attach the
# license below.
# Part of this code is from pybind11 cmake_example, so attach the license below.
# That project has since dropped setup.py, so this points at the last revision
# that still had it instead of at a branch.
# https://github.com/pybind/cmake_example/blob/7a94877f581a14de4de1a096fb053a55fc2a66bf/setup.py

# Copyright (c) 2016 The Pybind Development Team, All rights reserved.
#
Expand Down
2 changes: 1 addition & 1 deletion test/models/export_program.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ def __init__(self):
def forward(self, x):
# Weird index that happens to generate a None in torch.index.Tensor_out
# which is desirable for deserialization testing. A modified form of
# an example index from https://pytorch.org/cppdocs/notes/tensor_indexing.html.
# an example index from the PyTorch C++ tensor indexing notes.
return x[1::2, torch.tensor([1, 2])]

def get_random_inputs(self):
Expand Down
Loading