diff --git a/.ci/docker/common/install_openssl.sh b/.ci/docker/common/install_openssl.sh index 4f1828f6b5e..ead80b5d22d 100755 --- a/.ci/docker/common/install_openssl.sh +++ b/.ci/docker/common/install_openssl.sh @@ -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 diff --git a/.ci/scripts/test_llava.sh b/.ci/scripts/test_llava.sh index d8cb9596ffc..ba4c711d672 100644 --- a/.ci/scripts/test_llava.sh +++ b/.ci/scripts/test_llava.sh @@ -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() { diff --git a/README.md b/README.md index cb8c4c5cc11..192e90c51a4 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@
diff --git a/backends/arm/scripts/toolchain_utils.sh b/backends/arm/scripts/toolchain_utils.sh index e85d63ae928..798ceeb1302 100644 --- a/backends/arm/scripts/toolchain_utils.sh +++ b/backends/arm/scripts/toolchain_utils.sh @@ -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" diff --git a/backends/qualcomm/scripts/download_qnn_sdk.py b/backends/qualcomm/scripts/download_qnn_sdk.py index 1ad67514a42..3856be1ece4 100644 --- a/backends/qualcomm/scripts/download_qnn_sdk.py +++ b/backends/qualcomm/scripts/download_qnn_sdk.py @@ -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", ) diff --git a/docs/source/kernel-library-custom-aten-kernel.md b/docs/source/kernel-library-custom-aten-kernel.md index 6c54384127d..e435a79bbf3 100644 --- a/docs/source/kernel-library-custom-aten-kernel.md +++ b/docs/source/kernel-library-custom-aten-kernel.md @@ -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 diff --git a/docs/source/success-stories.md b/docs/source/success-stories.md index 5f7d9ca0527..c8df132456e 100644 --- a/docs/source/success-stories.md +++ b/docs/source/success-stories.md @@ -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) ::: :::: diff --git a/examples/models/llama/runner/generation.py b/examples/models/llama/runner/generation.py index 2baa8f5cd14..e6c2ab13cf3 100644 --- a/examples/models/llama/runner/generation.py +++ b/examples/models/llama/runner/generation.py @@ -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." diff --git a/scripts/lint_urls.sh b/scripts/lint_urls.sh index ab37888d2b4..92b57171bc1 100755 --- a/scripts/lint_urls.sh +++ b/scripts/lint_urls.sh @@ -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=() @@ -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 diff --git a/setup.py b/setup.py index 8331deec8ad..e2c053f4d1f 100644 --- a/setup.py +++ b/setup.py @@ -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. # diff --git a/test/models/export_program.py b/test/models/export_program.py index c501dc8d45e..966233e2cea 100644 --- a/test/models/export_program.py +++ b/test/models/export_program.py @@ -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):