From 10a005e4ea7976590837313f406e2299df44b281 Mon Sep 17 00:00:00 2001 From: Goalina <15861868579@163.com> Date: Wed, 13 May 2026 14:58:07 +0800 Subject: [PATCH] [CI][NPU] use internal HTTP cache for Rust toolchain via RUSTUP_CACHE (#24801) --- .github/workflows/pr-test-npu.yml | 147 ++++++++++++++--------------- scripts/ci/utils/install_rustup.sh | 33 +++++-- 2 files changed, 94 insertions(+), 86 deletions(-) diff --git a/.github/workflows/pr-test-npu.yml b/.github/workflows/pr-test-npu.yml index 7bf719acd..0a1b29608 100644 --- a/.github/workflows/pr-test-npu.yml +++ b/.github/workflows/pr-test-npu.yml @@ -102,9 +102,8 @@ jobs: TORCH_CACHE_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local/whl/cpu" PYPI_CACHE_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local/pypi/simple" UV_INDEX_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local/pypi/simple" - GITHUB_PROXY_URL: "https://gh-proxy.test.osinfra.cn/" - RUSTUP_DIST_SERVER: "https://rsproxy.cn" - RUSTUP_UPDATE_ROOT: "https://rsproxy.cn/rustup" + GITHUB_PROXY_URL: "https://gh-proxy.test.osinfra.cn/" + RUSTUP_CACHE_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local:8082" run: | # speed up by using infra cache services CACHING_URL="cache-service.nginx-pypi-cache.svc.cluster.local" @@ -156,9 +155,8 @@ jobs: TORCH_CACHE_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local/whl/cpu" PYPI_CACHE_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local/pypi/simple" UV_INDEX_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local/pypi/simple" - GITHUB_PROXY_URL: "https://gh-proxy.test.osinfra.cn/" - RUSTUP_DIST_SERVER: "https://rsproxy.cn" - RUSTUP_UPDATE_ROOT: "https://rsproxy.cn/rustup" + GITHUB_PROXY_URL: "https://gh-proxy.test.osinfra.cn/" + RUSTUP_CACHE_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local:8082" run: | # speed up by using infra cache services CACHING_URL="cache-service.nginx-pypi-cache.svc.cluster.local" @@ -206,9 +204,8 @@ jobs: TORCH_CACHE_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local/whl/cpu" PYPI_CACHE_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local/pypi/simple" UV_INDEX_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local/pypi/simple" - GITHUB_PROXY_URL: "https://gh-proxy.test.osinfra.cn/" - RUSTUP_DIST_SERVER: "https://rsproxy.cn" - RUSTUP_UPDATE_ROOT: "https://rsproxy.cn/rustup" + GITHUB_PROXY_URL: "https://gh-proxy.test.osinfra.cn/" + RUSTUP_CACHE_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local:8082" run: | # speed up by using infra cache services CACHING_URL="cache-service.nginx-pypi-cache.svc.cluster.local" @@ -257,9 +254,8 @@ jobs: TORCH_CACHE_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local/whl/cpu" PYPI_CACHE_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local/pypi/simple" UV_INDEX_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local/pypi/simple" - GITHUB_PROXY_URL: "https://gh-proxy.test.osinfra.cn/" - RUSTUP_DIST_SERVER: "https://rsproxy.cn" - RUSTUP_UPDATE_ROOT: "https://rsproxy.cn/rustup" + GITHUB_PROXY_URL: "https://gh-proxy.test.osinfra.cn/" + RUSTUP_CACHE_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local:8082" run: | # speed up by using infra cache services CACHING_URL="cache-service.nginx-pypi-cache.svc.cluster.local" @@ -305,9 +301,8 @@ jobs: TORCH_CACHE_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local/whl/cpu" PYPI_CACHE_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local/pypi/simple" UV_INDEX_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local/pypi/simple" - GITHUB_PROXY_URL: "https://gh-proxy.test.osinfra.cn/" - RUSTUP_DIST_SERVER: "https://rsproxy.cn" - RUSTUP_UPDATE_ROOT: "https://rsproxy.cn/rustup" + GITHUB_PROXY_URL: "https://gh-proxy.test.osinfra.cn/" + RUSTUP_CACHE_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local:8082" run: | # speed up by using infra cache services CACHING_URL="cache-service.nginx-pypi-cache.svc.cluster.local" @@ -327,25 +322,25 @@ jobs: SGLANG_USE_MODELSCOPE: true SGLANG_IS_IN_CI: true HF_ENDPOINT: https://hf-mirror.com - TORCH_EXTENSIONS_DIR: /tmp/torch_extensions - PYTORCH_NPU_ALLOC_CONF: "expandable_segments:True" - STREAMS_PER_DEVICE: 32 - SGLANG_DIFFUSION_ARTIFACT_DIR: ${{ github.workspace }}/diffusion-failures - run: | - export PATH="/usr/local/Ascend/8.3.RC1/compiler/bishengir/bin:${PATH}" - cd python - python3 sglang/multimodal_gen/test/run_suite_npu.py --suite 1-npu - - - name: Upload diffusion failure artifacts - if: always() - uses: actions/upload-artifact@v4 - with: - name: diffusion-failures-npu-1-${{ github.run_attempt }} - path: diffusion-failures/ - if-no-files-found: ignore - retention-days: 7 - - multimodal-gen-test-2-npu-a3: + TORCH_EXTENSIONS_DIR: /tmp/torch_extensions + PYTORCH_NPU_ALLOC_CONF: "expandable_segments:True" + STREAMS_PER_DEVICE: 32 + SGLANG_DIFFUSION_ARTIFACT_DIR: ${{ github.workspace }}/diffusion-failures + run: | + export PATH="/usr/local/Ascend/8.3.RC1/compiler/bishengir/bin:${PATH}" + cd python + python3 sglang/multimodal_gen/test/run_suite_npu.py --suite 1-npu + + - name: Upload diffusion failure artifacts + if: always() + uses: actions/upload-artifact@v4 + with: + name: diffusion-failures-npu-1-${{ github.run_attempt }} + path: diffusion-failures/ + if-no-files-found: ignore + retention-days: 7 + + multimodal-gen-test-2-npu-a3: needs: [check-changes, pr-gate] if: needs.check-changes.outputs.multimodal_gen == 'true' runs-on: linux-aarch64-a3-16 @@ -364,9 +359,8 @@ jobs: TORCH_CACHE_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local/whl/cpu" PYPI_CACHE_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local/pypi/simple" UV_INDEX_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local/pypi/simple" - GITHUB_PROXY_URL: "https://gh-proxy.test.osinfra.cn/" - RUSTUP_DIST_SERVER: "https://rsproxy.cn" - RUSTUP_UPDATE_ROOT: "https://rsproxy.cn/rustup" + GITHUB_PROXY_URL: "https://gh-proxy.test.osinfra.cn/" + RUSTUP_CACHE_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local:8082" run: | # speed up by using infra cache services CACHING_URL="cache-service.nginx-pypi-cache.svc.cluster.local" @@ -386,25 +380,25 @@ jobs: SGLANG_USE_MODELSCOPE: true SGLANG_IS_IN_CI: true HF_ENDPOINT: https://hf-mirror.com - TORCH_EXTENSIONS_DIR: /tmp/torch_extensions - PYTORCH_NPU_ALLOC_CONF: "expandable_segments:True" - STREAMS_PER_DEVICE: 32 - SGLANG_DIFFUSION_ARTIFACT_DIR: ${{ github.workspace }}/diffusion-failures - run: | - export PATH="/usr/local/Ascend/8.3.RC1/compiler/bishengir/bin:${PATH}" - cd python - python3 sglang/multimodal_gen/test/run_suite_npu.py --suite 2-npu - - - name: Upload diffusion failure artifacts - if: always() - uses: actions/upload-artifact@v4 - with: - name: diffusion-failures-npu-2-${{ github.run_attempt }} - path: diffusion-failures/ - if-no-files-found: ignore - retention-days: 7 - - multimodal-gen-test-8-npu-a3: + TORCH_EXTENSIONS_DIR: /tmp/torch_extensions + PYTORCH_NPU_ALLOC_CONF: "expandable_segments:True" + STREAMS_PER_DEVICE: 32 + SGLANG_DIFFUSION_ARTIFACT_DIR: ${{ github.workspace }}/diffusion-failures + run: | + export PATH="/usr/local/Ascend/8.3.RC1/compiler/bishengir/bin:${PATH}" + cd python + python3 sglang/multimodal_gen/test/run_suite_npu.py --suite 2-npu + + - name: Upload diffusion failure artifacts + if: always() + uses: actions/upload-artifact@v4 + with: + name: diffusion-failures-npu-2-${{ github.run_attempt }} + path: diffusion-failures/ + if-no-files-found: ignore + retention-days: 7 + + multimodal-gen-test-8-npu-a3: needs: [check-changes, pr-gate] if: needs.check-changes.outputs.multimodal_gen == 'true' runs-on: linux-aarch64-a3-8 @@ -423,9 +417,8 @@ jobs: TORCH_CACHE_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local/whl/cpu" PYPI_CACHE_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local/pypi/simple" UV_INDEX_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local/pypi/simple" - GITHUB_PROXY_URL: "https://gh-proxy.test.osinfra.cn/" - RUSTUP_DIST_SERVER: "https://rsproxy.cn" - RUSTUP_UPDATE_ROOT: "https://rsproxy.cn/rustup" + GITHUB_PROXY_URL: "https://gh-proxy.test.osinfra.cn/" + RUSTUP_CACHE_URL: "http://cache-service.nginx-pypi-cache.svc.cluster.local:8082" run: | # speed up by using infra cache services CACHING_URL="cache-service.nginx-pypi-cache.svc.cluster.local" @@ -445,24 +438,24 @@ jobs: SGLANG_USE_MODELSCOPE: true SGLANG_IS_IN_CI: true HF_ENDPOINT: https://hf-mirror.com - TORCH_EXTENSIONS_DIR: /tmp/torch_extensions - PYTORCH_NPU_ALLOC_CONF: "expandable_segments:True" - STREAMS_PER_DEVICE: 32 - SGLANG_DIFFUSION_ARTIFACT_DIR: ${{ github.workspace }}/diffusion-failures - run: | - cd python - python3 sglang/multimodal_gen/test/run_suite_npu.py --suite 8-npu - - - name: Upload diffusion failure artifacts - if: always() - uses: actions/upload-artifact@v4 - with: - name: diffusion-failures-npu-8-${{ github.run_attempt }} - path: diffusion-failures/ - if-no-files-found: ignore - retention-days: 7 - - pr-test-npu-finish: + TORCH_EXTENSIONS_DIR: /tmp/torch_extensions + PYTORCH_NPU_ALLOC_CONF: "expandable_segments:True" + STREAMS_PER_DEVICE: 32 + SGLANG_DIFFUSION_ARTIFACT_DIR: ${{ github.workspace }}/diffusion-failures + run: | + cd python + python3 sglang/multimodal_gen/test/run_suite_npu.py --suite 8-npu + + - name: Upload diffusion failure artifacts + if: always() + uses: actions/upload-artifact@v4 + with: + name: diffusion-failures-npu-8-${{ github.run_attempt }} + path: diffusion-failures/ + if-no-files-found: ignore + retention-days: 7 + + pr-test-npu-finish: needs: [ check-changes, diff --git a/scripts/ci/utils/install_rustup.sh b/scripts/ci/utils/install_rustup.sh index 2b8d11f2c..71748c05a 100755 --- a/scripts/ci/utils/install_rustup.sh +++ b/scripts/ci/utils/install_rustup.sh @@ -4,8 +4,12 @@ # setuptools-rust. Minimum supported version is 1.85 (edition 2024). set -euxo pipefail -# Pick up cargo if rustup was installed in a previous CI step. +# Make cargo/rustc visible to the rest of this shell and to subsequent +# GitHub Actions steps in the same job. export PATH="${CARGO_HOME:-$HOME/.cargo}/bin:${PATH}" +if [ -n "${GITHUB_PATH:-}" ]; then + echo "${CARGO_HOME:-$HOME/.cargo}/bin" >> "${GITHUB_PATH}" +fi if command -v cargo >/dev/null 2>&1 && command -v rustc >/dev/null 2>&1; then echo "rust already installed: $(rustc --version), $(cargo --version)" @@ -27,14 +31,25 @@ if ! command -v curl >/dev/null 2>&1; then fi fi -curl --proto '=https' --tlsv1.2 --retry 3 --retry-delay 2 -sSf https://sh.rustup.rs \ - | sh -s -- -y --no-modify-path - -# Make cargo/rustc visible to the rest of this shell and to subsequent -# GitHub Actions steps in the same job. -export PATH="${CARGO_HOME:-$HOME/.cargo}/bin:${PATH}" -if [ -n "${GITHUB_PATH:-}" ]; then - echo "${CARGO_HOME:-$HOME/.cargo}/bin" >> "${GITHUB_PATH}" +if [ -n "${RUSTUP_CACHE_URL:-}" ]; then + # An in-cluster HTTP mirror is available (e.g. on NPU runners). + export RUSTUP_DIST_SERVER="${RUSTUP_CACHE_URL}/rustup" + export RUSTUP_UPDATE_ROOT="${RUSTUP_CACHE_URL}/rustup/rustup" + case "$(uname -m)" in + x86_64) RUSTUP_ARCH="x86_64-unknown-linux-gnu" ;; + aarch64) RUSTUP_ARCH="aarch64-unknown-linux-gnu" ;; + *) echo "ERROR: unsupported arch $(uname -m)"; exit 1 ;; + esac + RUSTUP_TMP="$(mktemp -d)" + trap 'rm -rf "${RUSTUP_TMP}"' EXIT + curl --retry 3 --retry-delay 2 -sSfL \ + "${RUSTUP_UPDATE_ROOT}/dist/${RUSTUP_ARCH}/rustup-init" \ + -o "${RUSTUP_TMP}/rustup-init" + chmod +x "${RUSTUP_TMP}/rustup-init" + "${RUSTUP_TMP}/rustup-init" -y --no-modify-path +else + curl --proto '=https' --tlsv1.2 --retry 3 --retry-delay 2 -sSf https://sh.rustup.rs \ + | sh -s -- -y --no-modify-path fi rustc --version