From e67b95d66b092fa36f666fc2a575e76f45464441 Mon Sep 17 00:00:00 2001 From: Cherry_ming <136634645@qq.com> Date: Wed, 1 Apr 2026 19:56:31 +0800 Subject: [PATCH] [NPU]Add a full test pipeline on NPU, resolve issues in the NPU test architecture (#20751) --- .github/workflows/full-test-npu.yml | 355 ++++++++++++++++++ .github/workflows/nightly-test-npu.yml | 160 ++++++-- .github/workflows/pr-test-npu.yml | 110 ++++-- .../workflows/release-docker-npu-nightly.yml | 2 +- python/pyproject_npu.toml | 2 + .../sglang/test/ascend/test_ascend_utils.py | 18 +- .../HiCache/test_npu_hicache_mha.py} | 4 + .../HiCache/test_npu_hicache_mla.py} | 4 + .../backends/test_npu_sampling_backend.py} | 4 + .../dllm/test_npu_llada2_mini.py} | 4 + .../test_npu_compile_graph_tp1_bf16.py} | 4 + .../test_npu_graph_tp1_bf16.py} | 4 + .../test_npu_graph_tp2_bf16.py} | 4 + .../test_npu_piecewise_graph_prefill.py} | 4 + .../expert_parallelism/test_npu_deepep.py} | 4 + .../quant/test_npu_autoround_dense.py} | 7 +- .../quant/test_npu_autoround_moe.py} | 9 +- .../quant/test_npu_gptq_moe.py} | 9 +- .../quant/test_npu_w4a4_quantization.py} | 4 + .../quant/test_npu_w8a8_quantization.py} | 4 + .../test_npu_mla_fia_w8a8int8.py} | 4 + .../runtime_opts/test_npu_mla_w8a8int8.py} | 4 + .../runtime_opts/test_npu_tp1_bf16.py} | 4 + .../runtime_opts/test_npu_tp2_bf16.py} | 4 + .../runtime_opts/test_npu_tp2_fia_bf16.py} | 4 + .../runtime_opts/test_npu_tp4_bf16.py} | 4 + .../test_npu_bge_large_en_v1_5.py | 2 +- .../ascend/llm_models/test_npu_afm_4_5b.py | 2 +- .../llm_models/test_npu_c4ai_command_r_v01.py | 2 +- .../ascend/llm_models/test_npu_exaone_3.py | 2 +- .../test_npu_granite_3_0_3b_a800m.py | 2 +- .../llm_models/test_npu_granite_3_1_8b.py | 2 +- .../ascend/llm_models/test_npu_grok_2.py | 2 +- .../ascend/llm_models/test_npu_ling_lite.py | 2 +- .../ascend/llm_models/test_npu_mimo_7b_rl.py | 2 +- .../llm_models/test_npu_persimmon_8b_chat.py | 2 +- .../ascend/llm_models/test_npu_smollm_1_7b.py | 2 +- .../llm_models/test_npu_stablelm_2_1_6b.py | 2 +- .../test_npu_gemma_2_27b_v0_2.py | 2 +- .../test_npu_internlm2_7b_reward.py | 4 +- .../test_npu_llama_3_1_8b_v0_2.py | 2 +- .../test_npu_qwen3_vl_4b_instruct.py | 2 +- test/run_suite.py | 5 + 43 files changed, 673 insertions(+), 106 deletions(-) create mode 100644 .github/workflows/full-test-npu.yml rename test/{srt/ascend/test_ascend_hicache_mha.py => registered/ascend/basic_function/HiCache/test_npu_hicache_mha.py} (91%) rename test/{srt/ascend/test_ascend_hicache_mla.py => registered/ascend/basic_function/HiCache/test_npu_hicache_mla.py} (91%) rename test/{srt/ascend/test_ascend_sampling_backend.py => registered/ascend/basic_function/backends/test_npu_sampling_backend.py} (92%) rename test/{srt/ascend/test_llada2_mini_ascend.py => registered/ascend/basic_function/dllm/test_npu_llada2_mini.py} (92%) rename test/{srt/ascend/test_ascend_compile_graph_tp1_bf16.py => registered/ascend/basic_function/optimization_debug/test_npu_compile_graph_tp1_bf16.py} (92%) rename test/{srt/ascend/test_ascend_graph_tp1_bf16.py => registered/ascend/basic_function/optimization_debug/test_npu_graph_tp1_bf16.py} (91%) rename test/{srt/ascend/test_ascend_graph_tp2_bf16.py => registered/ascend/basic_function/optimization_debug/test_npu_graph_tp2_bf16.py} (91%) rename test/{srt/ascend/test_ascend_piecewise_graph_prefill.py => registered/ascend/basic_function/optimization_debug/test_npu_piecewise_graph_prefill.py} (92%) rename test/{srt/ascend/test_ascend_deepep.py => registered/ascend/basic_function/parallel_strategy/expert_parallelism/test_npu_deepep.py} (93%) rename test/{srt/ascend/test_ascend_autoround_dense.py => registered/ascend/basic_function/quant/test_npu_autoround_dense.py} (86%) rename test/{srt/ascend/test_ascend_autoround_moe.py => registered/ascend/basic_function/quant/test_npu_autoround_moe.py} (85%) rename test/{srt/ascend/test_ascend_gptq_moe.py => registered/ascend/basic_function/quant/test_npu_gptq_moe.py} (86%) rename test/{srt/ascend/test_ascend_w4a4_quantization.py => registered/ascend/basic_function/quant/test_npu_w4a4_quantization.py} (93%) rename test/{srt/ascend/test_ascend_w8a8_quantization.py => registered/ascend/basic_function/quant/test_npu_w8a8_quantization.py} (93%) rename test/{srt/ascend/test_ascend_mla_fia_w8a8int8.py => registered/ascend/basic_function/runtime_opts/test_npu_mla_fia_w8a8int8.py} (92%) rename test/{srt/ascend/test_ascend_mla_w8a8int8.py => registered/ascend/basic_function/runtime_opts/test_npu_mla_w8a8int8.py} (91%) rename test/{srt/ascend/test_ascend_tp1_bf16.py => registered/ascend/basic_function/runtime_opts/test_npu_tp1_bf16.py} (91%) rename test/{srt/ascend/test_ascend_tp2_bf16.py => registered/ascend/basic_function/runtime_opts/test_npu_tp2_bf16.py} (91%) rename test/{srt/ascend/test_ascend_tp2_fia_bf16.py => registered/ascend/basic_function/runtime_opts/test_npu_tp2_fia_bf16.py} (92%) rename test/{srt/ascend/test_ascend_tp4_bf16.py => registered/ascend/basic_function/runtime_opts/test_npu_tp4_bf16.py} (91%) diff --git a/.github/workflows/full-test-npu.yml b/.github/workflows/full-test-npu.yml new file mode 100644 index 000000000..47355f2c2 --- /dev/null +++ b/.github/workflows/full-test-npu.yml @@ -0,0 +1,355 @@ +name: Full Test (NPU) + +on: +# pull_request: +# branches: +# - main +# paths: +# - ".github/workflows/full-test-npu.yml" + workflow_dispatch: + inputs: + ref: + description: 'Git ref (branch, tag, or SHA) to test. If not provided, uses the default branch.' + required: false + type: string + default: '' + job_filter: + description: 'Select which job to run (leave empty or "all" to run all jobs)' + required: false + type: string + default: 'all' + image_a3: + description: 'The a3 running docker image of the test task.' + required: false + type: string + default: 'swr.cn-southwest-2.myhuaweicloud.com/base_image/ascend-ci/cann:8.5.0-a3-ubuntu22.04-py3.11' + skip_install_flag: + description: 'Indicates whether to skip the installation of sglang, defaulting to false.' + required: false + type: string + default: 'false' + +concurrency: + group: full-test-npu-${{ inputs.ref || github.ref }} + cancel-in-progress: ${{ github.event_name != 'workflow_call' }} + +jobs: + set-image-config: + runs-on: ubuntu-latest + outputs: + ref: ${{ steps.set-vars.outputs.ref }} + job_filter: ${{ steps.set-vars.outputs.job_filter }} + image_a3: ${{ steps.set-vars.outputs.image_a3 }} + skip_install_flag: ${{ steps.set-vars.outputs.skip_install_flag }} + steps: + # When triggered by PR, no inputs parameters are used. The latest community code is tested by default. + - name: Set image config + id: set-vars + run: | + if [ -z "${{ inputs.ref }}" ]; then + echo "ref=" >> $GITHUB_OUTPUT + else + echo "ref=${{ inputs.ref }}" >> $GITHUB_OUTPUT + fi + + if [ -z "${{ inputs.job_filter }}" ]; then + echo "job_filter=all" >> $GITHUB_OUTPUT + else + echo "job_filter=${{ inputs.job_filter }}" >> $GITHUB_OUTPUT + fi + + if [ -z "${{ inputs.image_a3 }}" ]; then + echo "image_a3=swr.cn-southwest-2.myhuaweicloud.com/base_image/ascend-ci/cann:8.5.0-a3-ubuntu22.04-py3.11" >> $GITHUB_OUTPUT + else + echo "image_a3=${{ inputs.image_a3 }}" >> $GITHUB_OUTPUT + fi + + if [ -z "${{ inputs.skip_install_flag }}" ]; then + echo "skip_install_flag=false" >> $GITHUB_OUTPUT + else + echo "skip_install_flag=${{ inputs.skip_install_flag }}" >> $GITHUB_OUTPUT + fi + + nighly-test-npu: + needs: [set-image-config] + name: nightly-test-npu + if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }} + uses: ./.github/workflows/nightly-test-npu.yml + with: + ref: ${{ needs.set-image-config.outputs.ref }} + job_filter: ${{ needs.set-image-config.outputs.job_filter }} + image_a3: ${{ needs.set-image-config.outputs.image_a3 }} + skip_install_flag: ${{ needs.set-image-config.outputs.skip_install_flag }} + secrets: inherit + + full-1-npu-a3: + needs: [set-image-config] + if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }} + runs-on: linux-aarch64-a3-2 + container: + image: ${{ needs.set-image-config.outputs.image_a3 }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ needs.set-image-config.outputs.ref || github.ref }} + + - name: Install dependencies + env: + 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" + GITHUB_PROXY_URL: "https://gh-proxy.test.osinfra.cn/" + run: | + # speed up by using infra cache services + CACHING_URL="cache-service.nginx-pypi-cache.svc.cluster.local" + sed -Ei "s@(ports|archive).ubuntu.com@${CACHING_URL}:8081@g" /etc/apt/sources.list + pip config set global.index-url http://${CACHING_URL}/pypi/simple + pip config set global.trusted-host "${CACHING_URL}" + + if [ ${{ needs.set-image-config.outputs.skip_install_flag }} != "true" ];then + bash scripts/ci/npu/npu_ci_install_dependency.sh a3 + fi + + # copy required file from our daily cache + cp ~/.cache/modelscope/hub/datasets/otavia/ShareGPT_Vicuna_unfiltered/ShareGPT_V3_unfiltered_cleaned_split.json /tmp + # copy gsm8k dataset + cp ~/.cache/modelscope/hub/datasets/tmp/test.jsonl /tmp + + - name: Print Log Information + run: | + bash scripts/ci/npu/npu_log_print.sh + + - name: Run test + timeout-minutes: 240 + env: + 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 + run: | + pip install sglang_router + hf download lmms-lab/MMMU --repo-type dataset + pip install sentence_transformers torchaudio==2.8.0 + pip install protobuf==6.31.1 zss pre-commit wandb>=0.16.0 tenacity==8.3.0 loguru openpyxl latex2sympy2 zstandard transformers-stream-generator tqdm-multiprocess pycocoevalcap + pip install yt-dlp sentencepiece==0.1.99 nltk av ftfy sqlitedict==2.1.0 sacrebleu>=1.5.0 pytablewriter black==24.1.0 isort==5.13.2 peft>=0.2.0 accelerate>=0.29.1 + pip install jsonlines httpx==0.25.0 evaluate>=0.4.0 datasets==2.16.1 numexpr xgrammar==0.1.25 numpy==1.26.4 dotenv + git clone --branch v0.3.3 --depth 1 https://github.com/EvolvingLMMs-Lab/lmms-eval.git + cd ./lmms-eval + nohup pip install . > lmmslog.txt 2>&1 & + sleep 120 + export PYTHONPATH=$PYTHONPATH:$(pwd) + cd ../ + cd test + python3 run_suite.py --hw npu --suite full-1-npu-a3 --nightly --continue-on-error --timeout-per-file 3600 + + full-2-npu-a3: + needs: [set-image-config] + if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }} + runs-on: linux-aarch64-a3-2 + container: + image: ${{ needs.set-image-config.outputs.image_a3 }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ needs.set-image-config.outputs.ref || github.ref }} + + - name: Install dependencies + env: + 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" + GITHUB_PROXY_URL: "https://gh-proxy.test.osinfra.cn/" + run: | + # speed up by using infra cache services + CACHING_URL="cache-service.nginx-pypi-cache.svc.cluster.local" + sed -Ei "s@(ports|archive).ubuntu.com@${CACHING_URL}:8081@g" /etc/apt/sources.list + pip config set global.index-url http://${CACHING_URL}/pypi/simple + pip config set global.trusted-host "${CACHING_URL}" + + if [ ${{ needs.set-image-config.outputs.skip_install_flag }} != "true" ];then + bash scripts/ci/npu/npu_ci_install_dependency.sh a3 + fi + + # copy required file from our daily cache + cp ~/.cache/modelscope/hub/datasets/otavia/ShareGPT_Vicuna_unfiltered/ShareGPT_V3_unfiltered_cleaned_split.json /tmp + # copy gsm8k dataset + cp ~/.cache/modelscope/hub/datasets/tmp/test.jsonl /tmp + + - name: Print Log Information + run: | + bash scripts/ci/npu/npu_log_print.sh + + - name: Run test + timeout-minutes: 240 + env: + 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 + run: | + pip install sglang_router + hf download lmms-lab/MMMU --repo-type dataset + pip install sentence_transformers torchaudio==2.8.0 + pip install protobuf==6.31.1 zss pre-commit wandb>=0.16.0 tenacity==8.3.0 loguru openpyxl latex2sympy2 zstandard transformers-stream-generator tqdm-multiprocess pycocoevalcap + pip install yt-dlp sentencepiece==0.1.99 nltk av ftfy sqlitedict==2.1.0 sacrebleu>=1.5.0 pytablewriter black==24.1.0 isort==5.13.2 peft>=0.2.0 accelerate>=0.29.1 + pip install jsonlines httpx==0.25.0 evaluate>=0.4.0 datasets==2.16.1 numexpr xgrammar==0.1.25 numpy==1.26.4 dotenv + git clone --branch v0.3.3 --depth 1 https://github.com/EvolvingLMMs-Lab/lmms-eval.git + cd ./lmms-eval + nohup pip install . > lmmslog.txt 2>&1 & + sleep 120 + export PYTHONPATH=$PYTHONPATH:$(pwd) + cd ../ + cd test + python3 run_suite.py --hw npu --suite full-2-npu-a3 --nightly --continue-on-error --timeout-per-file 3600 + + full-4-npu-a3: + needs: [set-image-config] + if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }} + runs-on: linux-aarch64-a3-4 + container: + image: ${{ needs.set-image-config.outputs.image_a3 }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ needs.set-image-config.outputs.ref || github.ref }} + + - name: Install dependencies + env: + 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" + GITHUB_PROXY_URL: "https://gh-proxy.test.osinfra.cn/" + run: | + # speed up by using infra cache services + CACHING_URL="cache-service.nginx-pypi-cache.svc.cluster.local" + sed -Ei "s@(ports|archive).ubuntu.com@${CACHING_URL}:8081@g" /etc/apt/sources.list + pip config set global.index-url http://${CACHING_URL}/pypi/simple + pip config set global.trusted-host "${CACHING_URL}" + + if [ ${{ needs.set-image-config.outputs.skip_install_flag }} != "true" ];then + bash scripts/ci/npu/npu_ci_install_dependency.sh a3 + fi + + # copy required file from our daily cache + cp ~/.cache/modelscope/hub/datasets/otavia/ShareGPT_Vicuna_unfiltered/ShareGPT_V3_unfiltered_cleaned_split.json /tmp + # copy gsm8k dataset + cp ~/.cache/modelscope/hub/datasets/tmp/test.jsonl /tmp + + - name: Print Log Information + run: | + bash scripts/ci/npu/npu_log_print.sh + + - name: Run test + timeout-minutes: 240 + env: + 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 + run: | + pip install sglang_router + hf download lmms-lab/MMMU --repo-type dataset + pip install sentence_transformers torchaudio==2.8.0 + pip install protobuf==6.31.1 zss pre-commit wandb>=0.16.0 tenacity==8.3.0 loguru openpyxl latex2sympy2 zstandard transformers-stream-generator tqdm-multiprocess pycocoevalcap + pip install yt-dlp sentencepiece==0.1.99 nltk av ftfy sqlitedict==2.1.0 sacrebleu>=1.5.0 pytablewriter black==24.1.0 isort==5.13.2 peft>=0.2.0 accelerate>=0.29.1 + pip install jsonlines httpx==0.25.0 evaluate>=0.4.0 datasets==2.16.1 numexpr xgrammar==0.1.25 numpy==1.26.4 dotenv + git clone --branch v0.3.3 --depth 1 https://github.com/EvolvingLMMs-Lab/lmms-eval.git + cd ./lmms-eval + nohup pip install . > lmmslog.txt 2>&1 & + sleep 120 + export PYTHONPATH=$PYTHONPATH:$(pwd) + cd ../ + cd test + python3 run_suite.py --hw npu --suite full-4-npu-a3 --nightly --continue-on-error --timeout-per-file 3600 + + full-16-npu-a3: + needs: [set-image-config] + if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }} + runs-on: linux-aarch64-a3-16 + container: + image: ${{ needs.set-image-config.outputs.image_a3 }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ needs.set-image-config.outputs.ref || github.ref }} + + - name: Install dependencies + env: + 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" + GITHUB_PROXY_URL: "https://gh-proxy.test.osinfra.cn/" + run: | + # speed up by using infra cache services + CACHING_URL="cache-service.nginx-pypi-cache.svc.cluster.local" + sed -Ei "s@(ports|archive).ubuntu.com@${CACHING_URL}:8081@g" /etc/apt/sources.list + pip config set global.index-url http://${CACHING_URL}/pypi/simple + pip config set global.trusted-host "${CACHING_URL}" + + if [ ${{ needs.set-image-config.outputs.skip_install_flag }} != "true" ];then + bash scripts/ci/npu/npu_ci_install_dependency.sh a3 + fi + + # copy required file from our daily cache + cp ~/.cache/modelscope/hub/datasets/otavia/ShareGPT_Vicuna_unfiltered/ShareGPT_V3_unfiltered_cleaned_split.json /tmp + # copy gsm8k dataset + cp ~/.cache/modelscope/hub/datasets/tmp/test.jsonl /tmp + + - name: Print Log Information + run: | + bash scripts/ci/npu/npu_log_print.sh + + - name: Run test + timeout-minutes: 240 + env: + 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 + run: | + pip install sglang_router + hf download lmms-lab/MMMU --repo-type dataset + pip install sentence_transformers torchaudio==2.8.0 + pip install protobuf==6.31.1 zss pre-commit wandb>=0.16.0 tenacity==8.3.0 loguru openpyxl latex2sympy2 zstandard transformers-stream-generator tqdm-multiprocess pycocoevalcap + pip install yt-dlp sentencepiece==0.1.99 nltk av ftfy sqlitedict==2.1.0 sacrebleu>=1.5.0 pytablewriter black==24.1.0 isort==5.13.2 peft>=0.2.0 accelerate>=0.29.1 + pip install jsonlines httpx==0.25.0 evaluate>=0.4.0 datasets==2.16.1 numexpr xgrammar==0.1.25 numpy==1.26.4 dotenv + git clone --branch v0.3.3 --depth 1 https://github.com/EvolvingLMMs-Lab/lmms-eval.git + cd ./lmms-eval + nohup pip install . > lmmslog.txt 2>&1 & + sleep 120 + export PYTHONPATH=$PYTHONPATH:$(pwd) + cd ../ + cd test + python3 run_suite.py --hw npu --suite full-16-npu-a3 --nightly --continue-on-error --timeout-per-file 3600 + + check-all-jobs: + if: github.repository == 'sgl-project/sglang' && always() + needs: + - nighly-test-npu + - full-1-npu-a3 + - full-2-npu-a3 + - full-4-npu-a3 + - full-16-npu-a3 + runs-on: ubuntu-latest + container: + image: docker.m.daocloud.io/ubuntu:22.04 + steps: + - name: Check if any job failed + run: | + if [[ "${{ contains(needs.*.result, 'failure') }}" == "true" ]]; then + echo "One or more nightly test jobs failed" + exit 1 + fi + if [[ "${{ contains(needs.*.result, 'cancelled') }}" == "true" ]]; then + echo "One or more nightly test jobs were cancelled" + exit 1 + fi + echo "All nightly test jobs passed" diff --git a/.github/workflows/nightly-test-npu.yml b/.github/workflows/nightly-test-npu.yml index fa19ab1a4..7503d9a05 100644 --- a/.github/workflows/nightly-test-npu.yml +++ b/.github/workflows/nightly-test-npu.yml @@ -2,7 +2,7 @@ name: Nightly Test (NPU) on: schedule: - - cron: '0 17 * * *' # Execute at 1:00 a.m. Beijing Time every day + - cron: '0 18 * * *' # Execute at 2:00 a.m. Beijing Time every day pull_request: branches: - main @@ -21,13 +21,61 @@ on: required: false type: string default: 'all' + image_a3: + description: 'The a3 running docker image of the test task.' + required: false + type: string + default: 'swr.cn-southwest-2.myhuaweicloud.com/base_image/ascend-ci/cann:8.5.0-a3-ubuntu22.04-py3.11' + skip_install_flag: + description: 'Indicates whether to skip the installation of sglang, defaulting to false.' + required: false + type: string + default: 'false' + concurrency: group: nightly-test-npu-${{ inputs.ref || github.ref }} cancel-in-progress: ${{ github.event_name != 'workflow_call' }} jobs: + set-image-config: + runs-on: ubuntu-latest + outputs: + ref: ${{ steps.set-vars.outputs.ref }} + job_filter: ${{ steps.set-vars.outputs.job_filter }} + image_a3: ${{ steps.set-vars.outputs.image_a3 }} + skip_install_flag: ${{ steps.set-vars.outputs.skip_install_flag }} + steps: + # When triggered by PR, no inputs parameters are used. The latest community code is tested by default. + - name: Set image config + id: set-vars + run: | + if [ -z "${{ inputs.ref }}" ]; then + echo "ref=" >> $GITHUB_OUTPUT + else + echo "ref=${{ inputs.ref }}" >> $GITHUB_OUTPUT + fi + + if [ -z "${{ inputs.job_filter }}" ]; then + echo "job_filter=all" >> $GITHUB_OUTPUT + else + echo "job_filter=${{ inputs.job_filter }}" >> $GITHUB_OUTPUT + fi + + if [ -z "${{ inputs.image_a3 }}" ]; then + echo "image_a3=swr.cn-southwest-2.myhuaweicloud.com/base_image/ascend-ci/cann:8.5.0-a3-ubuntu22.04-py3.11" >> $GITHUB_OUTPUT + else + echo "image_a3=${{ inputs.image_a3 }}" >> $GITHUB_OUTPUT + fi + + if [ -z "${{ inputs.skip_install_flag }}" ]; then + echo "skip_install_flag=false" >> $GITHUB_OUTPUT + else + echo "skip_install_flag=${{ inputs.skip_install_flag }}" >> $GITHUB_OUTPUT + fi + nightly-1-npu-a3: + needs: [set-image-config] if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }} runs-on: linux-aarch64-a3-2 strategy: @@ -35,26 +83,33 @@ jobs: matrix: part: [0, 1] container: - image: swr.cn-southwest-2.myhuaweicloud.com/base_image/ascend-ci/cann:8.5.0-a3-ubuntu22.04-py3.11 + image: ${{ needs.set-image-config.outputs.image_a3 }} steps: - name: Checkout code uses: actions/checkout@v4 with: - ref: ${{ inputs.ref || github.ref }} + ref: ${{ needs.set-image-config.outputs.ref || github.ref }} - name: Install dependencies + env: + 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" + GITHUB_PROXY_URL: "https://gh-proxy.test.osinfra.cn/" run: | # speed up by using infra cache services CACHING_URL="cache-service.nginx-pypi-cache.svc.cluster.local" sed -Ei "s@(ports|archive).ubuntu.com@${CACHING_URL}:8081@g" /etc/apt/sources.list pip config set global.index-url http://${CACHING_URL}/pypi/simple - pip config set global.extra-index-url "https://pypi.tuna.tsinghua.edu.cn/simple" - pip config set global.trusted-host "${CACHING_URL} pypi.tuna.tsinghua.edu.cn" - bash scripts/ci/npu/npu_ci_install_dependency.sh a3 + pip config set global.trusted-host "${CACHING_URL}" + + if [ ${{ needs.set-image-config.outputs.skip_install_flag }} != "true" ];then + bash scripts/ci/npu/npu_ci_install_dependency.sh a3 + fi + # copy required file from our daily cache cp ~/.cache/modelscope/hub/datasets/otavia/ShareGPT_Vicuna_unfiltered/ShareGPT_V3_unfiltered_cleaned_split.json /tmp - # copy download through proxy - curl -o /tmp/test.jsonl -L https://raw.githubusercontent.com/openai/grade-school-math/master/grade_school_math/data/test.jsonl + # copy gsm8k dataset + cp ~/.cache/modelscope/hub/datasets/tmp/test.jsonl /tmp - name: Print Log Information run: | @@ -86,6 +141,7 @@ jobs: python3 run_suite.py --hw npu --suite nightly-1-npu-a3 --nightly --continue-on-error --timeout-per-file 3600 --auto-partition-id ${{ matrix.part }} --auto-partition-size 2 nightly-2-npu-a3: + needs: [set-image-config] if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }} runs-on: linux-aarch64-a3-2 strategy: @@ -93,26 +149,33 @@ jobs: matrix: part: [0] container: - image: swr.cn-southwest-2.myhuaweicloud.com/base_image/ascend-ci/cann:8.5.0-a3-ubuntu22.04-py3.11 + image: ${{ needs.set-image-config.outputs.image_a3 }} steps: - name: Checkout code uses: actions/checkout@v4 with: - ref: ${{ inputs.ref || github.ref }} + ref: ${{ needs.set-image-config.outputs.ref || github.ref }} - name: Install dependencies + env: + 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" + GITHUB_PROXY_URL: "https://gh-proxy.test.osinfra.cn/" run: | # speed up by using infra cache services CACHING_URL="cache-service.nginx-pypi-cache.svc.cluster.local" sed -Ei "s@(ports|archive).ubuntu.com@${CACHING_URL}:8081@g" /etc/apt/sources.list pip config set global.index-url http://${CACHING_URL}/pypi/simple - pip config set global.extra-index-url "https://pypi.tuna.tsinghua.edu.cn/simple" - pip config set global.trusted-host "${CACHING_URL} pypi.tuna.tsinghua.edu.cn" - bash scripts/ci/npu/npu_ci_install_dependency.sh a3 + pip config set global.trusted-host "${CACHING_URL}" + + if [ ${{ needs.set-image-config.outputs.skip_install_flag }} != "true" ];then + bash scripts/ci/npu/npu_ci_install_dependency.sh a3 + fi + # copy required file from our daily cache cp ~/.cache/modelscope/hub/datasets/otavia/ShareGPT_Vicuna_unfiltered/ShareGPT_V3_unfiltered_cleaned_split.json /tmp - # copy download through proxy - curl -o /tmp/test.jsonl -L https://raw.githubusercontent.com/openai/grade-school-math/master/grade_school_math/data/test.jsonl + # copy gsm8k dataset + cp ~/.cache/modelscope/hub/datasets/tmp/test.jsonl /tmp - name: Print Log Information run: | @@ -143,6 +206,7 @@ jobs: python3 run_suite.py --hw npu --suite nightly-2-npu-a3 --nightly --continue-on-error --timeout-per-file 3600 --auto-partition-id ${{ matrix.part }} --auto-partition-size 1 nightly-4-npu-a3: + needs: [set-image-config] if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }} runs-on: linux-aarch64-a3-4 strategy: @@ -150,25 +214,33 @@ jobs: matrix: part: [0] container: - image: swr.cn-southwest-2.myhuaweicloud.com/base_image/ascend-ci/cann:8.5.0-a3-ubuntu22.04-py3.11 + image: ${{ needs.set-image-config.outputs.image_a3 }} steps: - name: Checkout code uses: actions/checkout@v4 with: - ref: ${{ inputs.ref || github.ref }} + ref: ${{ needs.set-image-config.outputs.ref|| github.ref }} - name: Install dependencies + env: + 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" + GITHUB_PROXY_URL: "https://gh-proxy.test.osinfra.cn/" run: | # speed up by using infra cache services CACHING_URL="cache-service.nginx-pypi-cache.svc.cluster.local" sed -Ei "s@(ports|archive).ubuntu.com@${CACHING_URL}:8081@g" /etc/apt/sources.list - pip config set global.extra-index-url "https://pypi.tuna.tsinghua.edu.cn/simple" - pip config set global.trusted-host "${CACHING_URL} pypi.tuna.tsinghua.edu.cn" - bash scripts/ci/npu/npu_ci_install_dependency.sh a3 + pip config set global.index-url http://${CACHING_URL}/pypi/simple + pip config set global.trusted-host "${CACHING_URL}" + + if [ ${{ needs.set-image-config.outputs.skip_install_flag }} != "true" ];then + bash scripts/ci/npu/npu_ci_install_dependency.sh a3 + fi + # copy required file from our daily cache cp ~/.cache/modelscope/hub/datasets/otavia/ShareGPT_Vicuna_unfiltered/ShareGPT_V3_unfiltered_cleaned_split.json /tmp - # copy download through proxy - curl -o /tmp/test.jsonl -L https://raw.githubusercontent.com/openai/grade-school-math/master/grade_school_math/data/test.jsonl + # copy gsm8k dataset + cp ~/.cache/modelscope/hub/datasets/tmp/test.jsonl /tmp - name: Print Log Information run: | @@ -200,6 +272,7 @@ jobs: python3 run_suite.py --hw npu --suite nightly-4-npu-a3 --nightly --continue-on-error --timeout-per-file 3600 --auto-partition-id ${{ matrix.part }} --auto-partition-size 1 nightly-8-npu-a3: + needs: [set-image-config] if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }} runs-on: linux-aarch64-a3-8 strategy: @@ -207,26 +280,33 @@ jobs: matrix: part: [0] container: - image: swr.cn-southwest-2.myhuaweicloud.com/base_image/ascend-ci/cann:8.5.0-a3-ubuntu22.04-py3.11 + image: ${{ needs.set-image-config.outputs.image_a3 }} steps: - name: Checkout code uses: actions/checkout@v4 with: - ref: ${{ inputs.ref || github.ref }} + ref: ${{ needs.set-image-config.outputs.ref || github.ref }} - name: Install dependencies + env: + 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" + GITHUB_PROXY_URL: "https://gh-proxy.test.osinfra.cn/" run: | # speed up by using infra cache services CACHING_URL="cache-service.nginx-pypi-cache.svc.cluster.local" sed -Ei "s@(ports|archive).ubuntu.com@${CACHING_URL}:8081@g" /etc/apt/sources.list pip config set global.index-url http://${CACHING_URL}/pypi/simple - pip config set global.extra-index-url "https://pypi.tuna.tsinghua.edu.cn/simple" - pip config set global.trusted-host "${CACHING_URL} pypi.tuna.tsinghua.edu.cn" - bash scripts/ci/npu/npu_ci_install_dependency.sh a3 + pip config set global.trusted-host "${CACHING_URL}" + + if [ ${{ needs.set-image-config.outputs.skip_install_flag }} != "true" ];then + bash scripts/ci/npu/npu_ci_install_dependency.sh a3 + fi + # copy required file from our daily cache cp ~/.cache/modelscope/hub/datasets/otavia/ShareGPT_Vicuna_unfiltered/ShareGPT_V3_unfiltered_cleaned_split.json /tmp - # copy download through proxy - curl -o /tmp/test.jsonl -L https://gh-proxy.test.osinfra.cn/https://raw.githubusercontent.com/openai/grade-school-math/master/grade_school_math/data/test.jsonl + # copy gsm8k dataset + cp ~/.cache/modelscope/hub/datasets/tmp/test.jsonl /tmp - name: Print Log Information run: | @@ -258,6 +338,7 @@ jobs: python3 run_suite.py --hw npu --suite nightly-8-npu-a3 --nightly --continue-on-error --timeout-per-file 3600 --auto-partition-id ${{ matrix.part }} --auto-partition-size 1 nightly-16-npu-a3: + needs: [set-image-config] if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }} runs-on: linux-aarch64-a3-16 strategy: @@ -265,26 +346,33 @@ jobs: matrix: part: [0, 1] container: - image: swr.cn-southwest-2.myhuaweicloud.com/base_image/ascend-ci/cann:8.5.0-a3-ubuntu22.04-py3.11 + image: ${{ needs.set-image-config.outputs.image_a3 }} steps: - name: Checkout code uses: actions/checkout@v4 with: - ref: ${{ inputs.ref || github.ref }} + ref: ${{ needs.set-image-config.outputs.ref || github.ref }} - name: Install dependencies + env: + 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" + GITHUB_PROXY_URL: "https://gh-proxy.test.osinfra.cn/" run: | # speed up by using infra cache services CACHING_URL="cache-service.nginx-pypi-cache.svc.cluster.local" sed -Ei "s@(ports|archive).ubuntu.com@${CACHING_URL}:8081@g" /etc/apt/sources.list pip config set global.index-url http://${CACHING_URL}/pypi/simple - pip config set global.extra-index-url "https://pypi.tuna.tsinghua.edu.cn/simple" - pip config set global.trusted-host "${CACHING_URL} pypi.tuna.tsinghua.edu.cn" - bash scripts/ci/npu/npu_ci_install_dependency.sh a3 + pip config set global.trusted-host "${CACHING_URL}" + + if [ ${{ needs.set-image-config.outputs.skip_install_flag }} != "true" ];then + bash scripts/ci/npu/npu_ci_install_dependency.sh a3 + fi + # copy required file from our daily cache cp ~/.cache/modelscope/hub/datasets/otavia/ShareGPT_Vicuna_unfiltered/ShareGPT_V3_unfiltered_cleaned_split.json /tmp - # copy download through proxy - curl -o /tmp/test.jsonl -L https://gh-proxy.test.osinfra.cn/https://raw.githubusercontent.com/openai/grade-school-math/master/grade_school_math/data/test.jsonl + # copy gsm8k dataset + cp ~/.cache/modelscope/hub/datasets/tmp/test.jsonl /tmp - name: Print Log Information run: | diff --git a/.github/workflows/pr-test-npu.yml b/.github/workflows/pr-test-npu.yml index 0e79060c0..237f18a27 100644 --- a/.github/workflows/pr-test-npu.yml +++ b/.github/workflows/pr-test-npu.yml @@ -76,7 +76,7 @@ jobs: uses: ./.github/workflows/pr-gate.yml secrets: inherit - per-commit-1-npu-a2: + stage-b-test-1-npu-a2: needs: [check-changes, pr-gate] if: needs.check-changes.outputs.main_package == 'true' runs-on: linux-aarch64-a2-1 @@ -111,21 +111,8 @@ jobs: bash scripts/ci/npu/npu_ci_install_dependency.sh 910b # copy required file from our daily cache cp ~/.cache/modelscope/hub/datasets/otavia/ShareGPT_Vicuna_unfiltered/ShareGPT_V3_unfiltered_cleaned_split.json /tmp - # copy download through proxy - curl -o /tmp/test.jsonl -L https://raw.githubusercontent.com/openai/grade-school-math/master/grade_school_math/data/test.jsonl - - - name: Run registered test - timeout-minutes: 240 - env: - 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 - run: | - cd test - python3 run_suite.py --hw npu --suite per-commit-1-npu-a2 --continue-on-error --timeout-per-file 3600 --auto-partition-id ${{ matrix.part }} --auto-partition-size 2 + # copy gsm8k dataset + cp ~/.cache/modelscope/hub/datasets/tmp/test.jsonl /tmp - name: Run test timeout-minutes: 60 @@ -137,10 +124,10 @@ jobs: PYTORCH_NPU_ALLOC_CONF: "expandable_segments:True" STREAMS_PER_DEVICE: 32 run: | - cd test/srt - python3 run_suite.py --suite per-commit-1-npu-a2 --auto-partition-id ${{ matrix.part }} --auto-partition-size 2 + cd test + python3 run_suite.py --hw npu --suite stage-b-test-1-npu-a2 --auto-partition-id ${{ matrix.part }} --auto-partition-size 2 - per-commit-2-npu-a2: + stage-b-test-2-npu-a2: needs: [check-changes, pr-gate] if: needs.check-changes.outputs.main_package == 'true' runs-on: linux-aarch64-a2-2 @@ -175,8 +162,8 @@ jobs: bash scripts/ci/npu/npu_ci_install_dependency.sh 910b # copy required file from our daily cache cp ~/.cache/modelscope/hub/datasets/otavia/ShareGPT_Vicuna_unfiltered/ShareGPT_V3_unfiltered_cleaned_split.json /tmp - # copy download through proxy - curl -o /tmp/test.jsonl -L https://raw.githubusercontent.com/openai/grade-school-math/master/grade_school_math/data/test.jsonl + # copy gsm8k dataset + cp ~/.cache/modelscope/hub/datasets/tmp/test.jsonl /tmp - name: Run test timeout-minutes: 60 @@ -188,10 +175,10 @@ jobs: PYTORCH_NPU_ALLOC_CONF: "expandable_segments:True" STREAMS_PER_DEVICE: 32 run: | - cd test/srt - python3 run_suite.py --suite per-commit-2-npu-a2 --auto-partition-id ${{ matrix.part }} --auto-partition-size 2 + cd test + python3 run_suite.py --hw npu --suite stage-b-test-2-npu-a2 --auto-partition-id ${{ matrix.part }} --auto-partition-size 2 - per-commit-4-npu-a3: + stage-b-test-4-npu-a3: needs: [check-changes, pr-gate] if: needs.check-changes.outputs.main_package == 'true' runs-on: linux-aarch64-a3-4 @@ -222,8 +209,8 @@ jobs: bash scripts/ci/npu/npu_ci_install_dependency.sh a3 # copy required file from our daily cache cp ~/.cache/modelscope/hub/datasets/otavia/ShareGPT_Vicuna_unfiltered/ShareGPT_V3_unfiltered_cleaned_split.json /tmp - # copy download through proxy - curl -o /tmp/test.jsonl -L https://raw.githubusercontent.com/openai/grade-school-math/master/grade_school_math/data/test.jsonl + # copy gsm8k dataset + cp ~/.cache/modelscope/hub/datasets/tmp/test.jsonl /tmp - name: Run test timeout-minutes: 60 @@ -235,10 +222,11 @@ jobs: PYTORCH_NPU_ALLOC_CONF: "expandable_segments:True" STREAMS_PER_DEVICE: 32 run: | - cd test/srt - python3 run_suite.py --suite per-commit-4-npu-a3 --timeout-per-file 3600 + cd test + python3 run_suite.py --hw npu --suite stage-b-test-4-npu-a3 --timeout-per-file 3600 - per-commit-16-npu-a3: + + stage-b-test-16-npu-a3: needs: [check-changes, pr-gate] if: needs.check-changes.outputs.main_package == 'true' runs-on: linux-aarch64-a3-16 @@ -269,8 +257,8 @@ jobs: bash scripts/ci/npu/npu_ci_install_dependency.sh a3 # copy required file from our daily cache cp ~/.cache/modelscope/hub/datasets/otavia/ShareGPT_Vicuna_unfiltered/ShareGPT_V3_unfiltered_cleaned_split.json /tmp - # copy download through proxy - curl -o /tmp/test.jsonl -L https://gh-proxy.test.osinfra.cn/https://raw.githubusercontent.com/openai/grade-school-math/master/grade_school_math/data/test.jsonl + # copy gsm8k dataset + cp ~/.cache/modelscope/hub/datasets/tmp/test.jsonl /tmp - name: Run test timeout-minutes: 60 @@ -282,8 +270,8 @@ jobs: PYTORCH_NPU_ALLOC_CONF: "expandable_segments:True" STREAMS_PER_DEVICE: 32 run: | - cd test/srt - python3 run_suite.py --suite per-commit-16-npu-a3 --timeout-per-file 3600 + cd test + python3 run_suite.py --hw npu --suite stage-b-test-16-npu-a3 --timeout-per-file 3600 multimodal-gen-test-1-npu-a3: needs: [check-changes, pr-gate] @@ -314,8 +302,8 @@ jobs: bash scripts/ci/npu/npu_ci_install_dependency.sh a3 diffusion # copy required file from our daily cache cp ~/.cache/modelscope/hub/datasets/otavia/ShareGPT_Vicuna_unfiltered/ShareGPT_V3_unfiltered_cleaned_split.json /tmp - # copy download through proxy - curl -o /tmp/test.jsonl -L https://gh-proxy.test.osinfra.cn/https://raw.githubusercontent.com/openai/grade-school-math/master/grade_school_math/data/test.jsonl + # copy gsm8k dataset + cp ~/.cache/modelscope/hub/datasets/tmp/test.jsonl /tmp - name: Run test timeout-minutes: 60 @@ -360,8 +348,8 @@ jobs: bash scripts/ci/npu/npu_ci_install_dependency.sh a3 diffusion # copy required file from our daily cache cp ~/.cache/modelscope/hub/datasets/otavia/ShareGPT_Vicuna_unfiltered/ShareGPT_V3_unfiltered_cleaned_split.json /tmp - # copy download through proxy - curl -o /tmp/test.jsonl -L https://gh-proxy.test.osinfra.cn/https://raw.githubusercontent.com/openai/grade-school-math/master/grade_school_math/data/test.jsonl + # copy gsm8k dataset + cp ~/.cache/modelscope/hub/datasets/tmp/test.jsonl /tmp - name: Run test timeout-minutes: 60 @@ -380,7 +368,7 @@ jobs: multimodal-gen-test-8-npu-a3: needs: [check-changes, pr-gate] if: needs.check-changes.outputs.multimodal_gen == 'true' - runs-on: linux-aarch64-a3-16 + runs-on: linux-aarch64-a3-8 container: image: swr.cn-southwest-2.myhuaweicloud.com/base_image/ascend-ci/cann:8.5.0-a3-ubuntu22.04-py3.11 steps: @@ -406,8 +394,8 @@ jobs: bash scripts/ci/npu/npu_ci_install_dependency.sh a3 diffusion # copy required file from our daily cache cp ~/.cache/modelscope/hub/datasets/otavia/ShareGPT_Vicuna_unfiltered/ShareGPT_V3_unfiltered_cleaned_split.json /tmp - # copy download through proxy - curl -o /tmp/test.jsonl -L https://gh-proxy.test.osinfra.cn/https://raw.githubusercontent.com/openai/grade-school-math/master/grade_school_math/data/test.jsonl + # copy gsm8k dataset + cp ~/.cache/modelscope/hub/datasets/tmp/test.jsonl /tmp - name: Run test timeout-minutes: 60 @@ -421,3 +409,45 @@ jobs: run: | cd python python3 sglang/multimodal_gen/test/run_suite.py --suite 8-npu + + pr-test-finish: + needs: + [ + check-changes, + + stage-b-test-1-npu-a2, + stage-b-test-2-npu-a2, + stage-b-test-4-npu-a3, + stage-b-test-16-npu-a3, + + multimodal-gen-test-1-npu-a3, + multimodal-gen-test-2-npu-a3, + multimodal-gen-test-8-npu-a3, + ] + if: always() + runs-on: ubuntu-latest + steps: + - name: Check all dependent job statuses + run: | + # Convert the 'needs' context to a JSON string + json_needs='${{ toJson(needs) }}' + + # Get a list of all job names from the JSON keys + job_names=$(echo "$json_needs" | jq -r 'keys_unsorted[]') + + for job in $job_names; do + # For each job, extract its result + result=$(echo "$json_needs" | jq -r --arg j "$job" '.[$j].result') + + # Print the job name and its result + echo "$job: $result" + + # Check for failure or cancellation and exit if found + if [[ "$result" == "failure" || "$result" == "cancelled" ]]; then + echo "The above jobs failed." + exit 1 + fi + done + # If the loop completes, all jobs were successful + echo "All jobs completed successfully" + exit 0 diff --git a/.github/workflows/release-docker-npu-nightly.yml b/.github/workflows/release-docker-npu-nightly.yml index 1dc729cfd..8866ae2a2 100644 --- a/.github/workflows/release-docker-npu-nightly.yml +++ b/.github/workflows/release-docker-npu-nightly.yml @@ -8,7 +8,7 @@ on: - 'docker/npu.Dockerfile' workflow_dispatch: schedule: - - cron: "0 0 * * *" + - cron: "0 16 * * *" # Execute at 0:00 a.m. Beijing Time every day concurrency: group: ${{ github.workflow }}-${{ github.sha }} diff --git a/python/pyproject_npu.toml b/python/pyproject_npu.toml index ddb0844b2..c7f989467 100644 --- a/python/pyproject_npu.toml +++ b/python/pyproject_npu.toml @@ -26,6 +26,8 @@ dependencies = [ "einops", "fastapi", "gguf", + "hf_transfer", + "huggingface_hub", "interegular", "llguidance>=0.7.11,<0.8.0", "modelscope", diff --git a/python/sglang/test/ascend/test_ascend_utils.py b/python/sglang/test/ascend/test_ascend_utils.py index 43a078287..681299a30 100644 --- a/python/sglang/test/ascend/test_ascend_utils.py +++ b/python/sglang/test/ascend/test_ascend_utils.py @@ -117,9 +117,18 @@ QWEN3_1_7B_GPTQ_INT8_WEIGHTS_PATH = os.path.join( QWEN3_235B_A22B_W8A8_WEIGHTS_PATH = os.path.join( MODEL_WEIGHTS_DIR, "vllm-ascend/Qwen3-235B-A22B-W8A8" ) +QWEN3_30B_A3B_GPTQ_2507_INT4_WEIGHTS_PATH = os.path.join( + MODEL_WEIGHTS_DIR, "Qwen/Qwen3-30B-A3B-GPTQ-Int4" +) +QWEN3_30B_A3B_INSTRUCT_2507_INT4_AUTOROUND_WEIGHTS_PATH = os.path.join( + MODEL_WEIGHTS_DIR, "Intel/Qwen3-30B-A3B-Instruct-2507-int4-AutoRound" +) QWEN3_30B_A3B_INSTRUCT_2507_WEIGHTS_PATH = os.path.join( MODEL_WEIGHTS_DIR, "Qwen/Qwen3-30B-A3B-Instruct-2507" ) +QWEN3_8B_INT4_AUTOROUND_WEIGHTS_PATH = os.path.join( + MODEL_WEIGHTS_DIR, "Intel/Qwen3-8B-int4-AutoRound" +) QWEN3_8B_WEIGHTS_PATH = os.path.join(MODEL_WEIGHTS_DIR, "Qwen/Qwen3-8B") QWEN3_8B_EAGLE3_WEIGHTS_PATH = os.path.join(MODEL_WEIGHTS_DIR, "Qwen/Qwen3-8B_eagle3") QWEN3_32B_WEIGHTS_PATH = os.path.join(MODEL_WEIGHTS_DIR, "Qwen/Qwen3-32B") @@ -133,15 +142,6 @@ QWEN3_32B_EAGLE3_WEIGHTS_PATH = os.path.join(MODEL_WEIGHTS_DIR, "Qwen/Qwen3-32B- QWEN3_32B_W8A8_MINDIE_WEIGHTS_PATH = os.path.join( MODEL_WEIGHTS_DIR, "aleoyang/Qwen3-32B-w8a8-MindIE" ) -QWEN3_235B_A22B_W8A8_WEIGHTS_PATH = os.path.join( - MODEL_WEIGHTS_DIR, "vllm-ascend/Qwen3-235B-A22B-W8A8" -) -QWEN3_CODER_480B_A35B_INSTRUCT_W8A8_QUAROT_WEIGHTS_PATH = os.path.join( - MODEL_WEIGHTS_DIR, "Qwen3-Coder-480B-A35B-Instruct-w8a8-QuaRot" -) -QWEN3_NEXT_80B_A3B_INSTRUCT_WEIGHTS_PATH = os.path.join( - MODEL_WEIGHTS_DIR, "Qwen/Qwen3-Next-80B-A3B-Instruct" -) QWQ_32B_W8A8_WEIGHTS_PATH = os.path.join(MODEL_WEIGHTS_DIR, "vllm-ascend/QWQ-32B-W8A8") SMOLLM_1_7B_WEIGHTS_PATH = os.path.join(MODEL_WEIGHTS_DIR, "HuggingFaceTB/SmolLM-1.7B") STABLELM_2_1_6B_WEIGHTS_PATH = os.path.join( diff --git a/test/srt/ascend/test_ascend_hicache_mha.py b/test/registered/ascend/basic_function/HiCache/test_npu_hicache_mha.py similarity index 91% rename from test/srt/ascend/test_ascend_hicache_mha.py rename to test/registered/ascend/basic_function/HiCache/test_npu_hicache_mha.py index 521537e05..829a5fee4 100644 --- a/test/srt/ascend/test_ascend_hicache_mha.py +++ b/test/registered/ascend/basic_function/HiCache/test_npu_hicache_mha.py @@ -3,6 +3,7 @@ from types import SimpleNamespace from urllib.parse import urlparse from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_npu_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.test_utils import ( DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -11,6 +12,9 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_npu_ci(est_time=400, suite="stage-b-test-1-npu-a2", nightly=False) +register_npu_ci(est_time=400, suite="nightly-1-npu-a3", nightly=True) + TEST_MODEL_MATRIX = { "/root/.cache/modelscope/hub/models/Qwen/Qwen2.5-7B-Instruct": { "accuracy": 0.85, diff --git a/test/srt/ascend/test_ascend_hicache_mla.py b/test/registered/ascend/basic_function/HiCache/test_npu_hicache_mla.py similarity index 91% rename from test/srt/ascend/test_ascend_hicache_mla.py rename to test/registered/ascend/basic_function/HiCache/test_npu_hicache_mla.py index 4bb355d37..140d590dd 100644 --- a/test/srt/ascend/test_ascend_hicache_mla.py +++ b/test/registered/ascend/basic_function/HiCache/test_npu_hicache_mla.py @@ -3,6 +3,7 @@ from types import SimpleNamespace from urllib.parse import urlparse from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_npu_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.test_utils import ( DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -11,6 +12,9 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_npu_ci(est_time=400, suite="stage-b-test-4-npu-a3", nightly=False) +register_npu_ci(est_time=400, suite="nightly-4-npu-a3", nightly=True) + TEST_MODEL_MATRIX = { "/root/.cache/modelscope/hub/models/vllm-ascend/DeepSeek-V2-Lite-W8A8": { "accuracy": 0.34, diff --git a/test/srt/ascend/test_ascend_sampling_backend.py b/test/registered/ascend/basic_function/backends/test_npu_sampling_backend.py similarity index 92% rename from test/srt/ascend/test_ascend_sampling_backend.py rename to test/registered/ascend/basic_function/backends/test_npu_sampling_backend.py index f0eee21a3..7da4595f2 100644 --- a/test/srt/ascend/test_ascend_sampling_backend.py +++ b/test/registered/ascend/basic_function/backends/test_npu_sampling_backend.py @@ -4,6 +4,7 @@ from types import SimpleNamespace import requests from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_npu_ci from sglang.test.run_eval import run_eval from sglang.test.test_utils import ( DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -12,6 +13,9 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_npu_ci(est_time=400, suite="stage-b-test-1-npu-a2", nightly=False) +register_npu_ci(est_time=400, suite="nightly-1-npu-a3", nightly=True) + class TestAscendSamplingBackend(CustomTestCase): @classmethod diff --git a/test/srt/ascend/test_llada2_mini_ascend.py b/test/registered/ascend/basic_function/dllm/test_npu_llada2_mini.py similarity index 92% rename from test/srt/ascend/test_llada2_mini_ascend.py rename to test/registered/ascend/basic_function/dllm/test_npu_llada2_mini.py index a1fdafcc5..a3c3d137c 100644 --- a/test/srt/ascend/test_llada2_mini_ascend.py +++ b/test/registered/ascend/basic_function/dllm/test_npu_llada2_mini.py @@ -3,6 +3,7 @@ import unittest from types import SimpleNamespace from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_npu_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.send_one import BenchArgs, send_one_prompt from sglang.test.test_utils import ( @@ -14,6 +15,9 @@ from sglang.test.test_utils import ( write_github_step_summary, ) +register_npu_ci(est_time=400, suite="stage-b-test-4-npu-a3", nightly=False) +register_npu_ci(est_time=400, suite="nightly-1-npu-a3", nightly=True) + class TestLLaDA2Mini(CustomTestCase): @classmethod diff --git a/test/srt/ascend/test_ascend_compile_graph_tp1_bf16.py b/test/registered/ascend/basic_function/optimization_debug/test_npu_compile_graph_tp1_bf16.py similarity index 92% rename from test/srt/ascend/test_ascend_compile_graph_tp1_bf16.py rename to test/registered/ascend/basic_function/optimization_debug/test_npu_compile_graph_tp1_bf16.py index e3a51499b..2a94826d6 100644 --- a/test/srt/ascend/test_ascend_compile_graph_tp1_bf16.py +++ b/test/registered/ascend/basic_function/optimization_debug/test_npu_compile_graph_tp1_bf16.py @@ -4,6 +4,7 @@ from types import SimpleNamespace from urllib.parse import urlparse from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_npu_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.test_utils import ( DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -12,6 +13,9 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_npu_ci(est_time=400, suite="stage-b-test-1-npu-a2", nightly=False) +register_npu_ci(est_time=400, suite="nightly-1-npu-a3", nightly=True) + TEST_MODEL_MATRIX = { "/root/.cache/modelscope/hub/models/Qwen/Qwen2.5-7B-Instruct": { "accuracy": 0.84, diff --git a/test/srt/ascend/test_ascend_graph_tp1_bf16.py b/test/registered/ascend/basic_function/optimization_debug/test_npu_graph_tp1_bf16.py similarity index 91% rename from test/srt/ascend/test_ascend_graph_tp1_bf16.py rename to test/registered/ascend/basic_function/optimization_debug/test_npu_graph_tp1_bf16.py index 4f8d4b4aa..916e3965d 100644 --- a/test/srt/ascend/test_ascend_graph_tp1_bf16.py +++ b/test/registered/ascend/basic_function/optimization_debug/test_npu_graph_tp1_bf16.py @@ -3,6 +3,7 @@ from types import SimpleNamespace from urllib.parse import urlparse from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_npu_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.test_utils import ( DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -11,6 +12,9 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_npu_ci(est_time=400, suite="stage-b-test-1-npu-a2", nightly=False) +register_npu_ci(est_time=400, suite="nightly-1-npu-a3", nightly=True) + TEST_MODEL_MATRIX = { "/root/.cache/modelscope/hub/models/Qwen/Qwen2.5-7B-Instruct": { "accuracy": 0.85, diff --git a/test/srt/ascend/test_ascend_graph_tp2_bf16.py b/test/registered/ascend/basic_function/optimization_debug/test_npu_graph_tp2_bf16.py similarity index 91% rename from test/srt/ascend/test_ascend_graph_tp2_bf16.py rename to test/registered/ascend/basic_function/optimization_debug/test_npu_graph_tp2_bf16.py index d4bf902a2..37bb7fd22 100644 --- a/test/srt/ascend/test_ascend_graph_tp2_bf16.py +++ b/test/registered/ascend/basic_function/optimization_debug/test_npu_graph_tp2_bf16.py @@ -3,6 +3,7 @@ from types import SimpleNamespace from urllib.parse import urlparse from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_npu_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.test_utils import ( DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -11,6 +12,9 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_npu_ci(est_time=400, suite="stage-b-test-2-npu-a2", nightly=False) +register_npu_ci(est_time=400, suite="nightly-2-npu-a3", nightly=True) + TEST_MODEL_MATRIX = { "/root/.cache/modelscope/hub/models/Qwen/Qwen2.5-7B-Instruct": { "accuracy": 0.85, diff --git a/test/srt/ascend/test_ascend_piecewise_graph_prefill.py b/test/registered/ascend/basic_function/optimization_debug/test_npu_piecewise_graph_prefill.py similarity index 92% rename from test/srt/ascend/test_ascend_piecewise_graph_prefill.py rename to test/registered/ascend/basic_function/optimization_debug/test_npu_piecewise_graph_prefill.py index 939486582..6db3aeb87 100644 --- a/test/srt/ascend/test_ascend_piecewise_graph_prefill.py +++ b/test/registered/ascend/basic_function/optimization_debug/test_npu_piecewise_graph_prefill.py @@ -2,6 +2,7 @@ import unittest from urllib.parse import urlparse from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_npu_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.test_utils import ( DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -12,6 +13,9 @@ from sglang.test.test_utils import ( run_bench_one_batch, ) +register_npu_ci(est_time=400, suite="stage-b-test-1-npu-a2", nightly=False) +register_npu_ci(est_time=400, suite="nightly-1-npu-a3", nightly=True) + MODEL = "/root/.cache/modelscope/hub/models/Qwen/Qwen2.5-7B-Instruct" GSM8K_EXP_ACCURACY = 0.84 EXP_PREFILL_LATENCY = 0.045 diff --git a/test/srt/ascend/test_ascend_deepep.py b/test/registered/ascend/basic_function/parallel_strategy/expert_parallelism/test_npu_deepep.py similarity index 93% rename from test/srt/ascend/test_ascend_deepep.py rename to test/registered/ascend/basic_function/parallel_strategy/expert_parallelism/test_npu_deepep.py index 19330b862..209cdcf95 100644 --- a/test/srt/ascend/test_ascend_deepep.py +++ b/test/registered/ascend/basic_function/parallel_strategy/expert_parallelism/test_npu_deepep.py @@ -4,6 +4,7 @@ from types import SimpleNamespace from urllib.parse import urlparse from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_npu_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.test_utils import ( DEFAULT_URL_FOR_TEST, @@ -11,6 +12,9 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_npu_ci(est_time=400, suite="stage-b-test-16-npu-a3", nightly=False) +register_npu_ci(est_time=400, suite="nightly-16-npu-a3", nightly=True) + TEST_MODEL_MATRIX = { "/root/.cache/modelscope/hub/models/vllm-ascend/DeepSeek-R1-0528-W8A8": { "accuracy": 0.95, diff --git a/test/srt/ascend/test_ascend_autoround_dense.py b/test/registered/ascend/basic_function/quant/test_npu_autoround_dense.py similarity index 86% rename from test/srt/ascend/test_ascend_autoround_dense.py rename to test/registered/ascend/basic_function/quant/test_npu_autoround_dense.py index 475311b6c..87575681b 100644 --- a/test/srt/ascend/test_ascend_autoround_dense.py +++ b/test/registered/ascend/basic_function/quant/test_npu_autoround_dense.py @@ -4,6 +4,8 @@ from types import SimpleNamespace from urllib.parse import urlparse from sglang.srt.utils import kill_process_tree +from sglang.test.ascend.test_ascend_utils import QWEN3_8B_INT4_AUTOROUND_WEIGHTS_PATH +from sglang.test.ci.ci_register import register_npu_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.test_utils import ( DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -12,10 +14,13 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_npu_ci(est_time=400, suite="stage-b-test-1-npu-a2", nightly=False) +register_npu_ci(est_time=400, suite="nightly-1-npu-a3", nightly=True) + logger = logging.getLogger(__name__) TEST_MODEL_MATRIX = { - "/root/.cache/modelscope/hub/models/Intel/Qwen3-8B-int4-AutoRound": { + QWEN3_8B_INT4_AUTOROUND_WEIGHTS_PATH: { "accuracy": 0.85, }, } diff --git a/test/srt/ascend/test_ascend_autoround_moe.py b/test/registered/ascend/basic_function/quant/test_npu_autoround_moe.py similarity index 85% rename from test/srt/ascend/test_ascend_autoround_moe.py rename to test/registered/ascend/basic_function/quant/test_npu_autoround_moe.py index b0b8f6960..1864ec6ee 100644 --- a/test/srt/ascend/test_ascend_autoround_moe.py +++ b/test/registered/ascend/basic_function/quant/test_npu_autoround_moe.py @@ -4,6 +4,10 @@ from types import SimpleNamespace from urllib.parse import urlparse from sglang.srt.utils import kill_process_tree +from sglang.test.ascend.test_ascend_utils import ( + QWEN3_30B_A3B_INSTRUCT_2507_INT4_AUTOROUND_WEIGHTS_PATH, +) +from sglang.test.ci.ci_register import register_npu_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.test_utils import ( DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -12,10 +16,13 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_npu_ci(est_time=400, suite="stage-b-test-1-npu-a2", nightly=False) +register_npu_ci(est_time=400, suite="nightly-1-npu-a3", nightly=True) + logger = logging.getLogger(__name__) TEST_MODEL_MATRIX = { - "/root/.cache/modelscope/hub/models/Intel/Qwen3-30B-A3B-Instruct-2507-int4-AutoRound": { + QWEN3_30B_A3B_INSTRUCT_2507_INT4_AUTOROUND_WEIGHTS_PATH: { "accuracy": 0.85, }, } diff --git a/test/srt/ascend/test_ascend_gptq_moe.py b/test/registered/ascend/basic_function/quant/test_npu_gptq_moe.py similarity index 86% rename from test/srt/ascend/test_ascend_gptq_moe.py rename to test/registered/ascend/basic_function/quant/test_npu_gptq_moe.py index 22b954379..686f5daa1 100644 --- a/test/srt/ascend/test_ascend_gptq_moe.py +++ b/test/registered/ascend/basic_function/quant/test_npu_gptq_moe.py @@ -4,6 +4,10 @@ from types import SimpleNamespace from urllib.parse import urlparse from sglang.srt.utils import kill_process_tree +from sglang.test.ascend.test_ascend_utils import ( + QWEN3_30B_A3B_GPTQ_2507_INT4_WEIGHTS_PATH, +) +from sglang.test.ci.ci_register import register_npu_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.test_utils import ( DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -12,10 +16,13 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_npu_ci(est_time=400, suite="stage-b-test-1-npu-a2", nightly=False) +register_npu_ci(est_time=400, suite="nightly-1-npu-a3", nightly=True) + logger = logging.getLogger(__name__) TEST_MODEL_MATRIX = { - "/root/.cache/modelscope/hub/models/Qwen/Qwen3-30B-A3B-GPTQ-Int4": { + QWEN3_30B_A3B_GPTQ_2507_INT4_WEIGHTS_PATH: { "accuracy": 0.85, }, } diff --git a/test/srt/ascend/test_ascend_w4a4_quantization.py b/test/registered/ascend/basic_function/quant/test_npu_w4a4_quantization.py similarity index 93% rename from test/srt/ascend/test_ascend_w4a4_quantization.py rename to test/registered/ascend/basic_function/quant/test_npu_w4a4_quantization.py index 22d3f0615..e395ec4c8 100644 --- a/test/srt/ascend/test_ascend_w4a4_quantization.py +++ b/test/registered/ascend/basic_function/quant/test_npu_w4a4_quantization.py @@ -12,6 +12,7 @@ from urllib.parse import urlparse import requests from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_npu_ci from sglang.test.few_shot_gsm8k import run_eval from sglang.test.test_utils import ( DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -21,6 +22,9 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_npu_ci(est_time=400, suite="stage-b-test-4-npu-a3", nightly=False) +register_npu_ci(est_time=400, suite="nightly-4-npu-a3", nightly=True) + if "ASCEND_RT_VISIBLE_DEVICES" not in os.environ: os.environ["ASCEND_RT_VISIBLE_DEVICES"] = "0,1,2,3" DEFAULT_PORT_FOR_SRT_TEST_RUNNER = ( diff --git a/test/srt/ascend/test_ascend_w8a8_quantization.py b/test/registered/ascend/basic_function/quant/test_npu_w8a8_quantization.py similarity index 93% rename from test/srt/ascend/test_ascend_w8a8_quantization.py rename to test/registered/ascend/basic_function/quant/test_npu_w8a8_quantization.py index e0b354570..96bea7efb 100644 --- a/test/srt/ascend/test_ascend_w8a8_quantization.py +++ b/test/registered/ascend/basic_function/quant/test_npu_w8a8_quantization.py @@ -12,6 +12,7 @@ from urllib.parse import urlparse import requests from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_npu_ci from sglang.test.few_shot_gsm8k import run_eval from sglang.test.test_utils import ( DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -21,6 +22,9 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_npu_ci(est_time=400, suite="stage-b-test-1-npu-a2", nightly=False) +register_npu_ci(est_time=400, suite="nightly-1-npu-a3", nightly=True) + if "ASCEND_RT_VISIBLE_DEVICES" not in os.environ: os.environ["ASCEND_RT_VISIBLE_DEVICES"] = "0,1" DEFAULT_PORT_FOR_SRT_TEST_RUNNER = ( diff --git a/test/srt/ascend/test_ascend_mla_fia_w8a8int8.py b/test/registered/ascend/basic_function/runtime_opts/test_npu_mla_fia_w8a8int8.py similarity index 92% rename from test/srt/ascend/test_ascend_mla_fia_w8a8int8.py rename to test/registered/ascend/basic_function/runtime_opts/test_npu_mla_fia_w8a8int8.py index 4001df6f6..0b4902837 100644 --- a/test/srt/ascend/test_ascend_mla_fia_w8a8int8.py +++ b/test/registered/ascend/basic_function/runtime_opts/test_npu_mla_fia_w8a8int8.py @@ -4,6 +4,7 @@ from types import SimpleNamespace from urllib.parse import urlparse from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_npu_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.test_utils import ( DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -12,6 +13,9 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_npu_ci(est_time=400, suite="stage-b-test-2-npu-a2", nightly=False) +register_npu_ci(est_time=400, suite="nightly-2-npu-a3", nightly=True) + TEST_MODEL_MATRIX = { "/root/.cache/modelscope/hub/models/vllm-ascend/DeepSeek-V2-Lite-W8A8": { "accuracy": 0.34, diff --git a/test/srt/ascend/test_ascend_mla_w8a8int8.py b/test/registered/ascend/basic_function/runtime_opts/test_npu_mla_w8a8int8.py similarity index 91% rename from test/srt/ascend/test_ascend_mla_w8a8int8.py rename to test/registered/ascend/basic_function/runtime_opts/test_npu_mla_w8a8int8.py index 177af099a..c50bee071 100644 --- a/test/srt/ascend/test_ascend_mla_w8a8int8.py +++ b/test/registered/ascend/basic_function/runtime_opts/test_npu_mla_w8a8int8.py @@ -3,6 +3,7 @@ from types import SimpleNamespace from urllib.parse import urlparse from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_npu_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.test_utils import ( DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -11,6 +12,9 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_npu_ci(est_time=400, suite="stage-b-test-4-npu-a3", nightly=False) +register_npu_ci(est_time=400, suite="nightly-4-npu-a3", nightly=True) + TEST_MODEL_MATRIX = { "/root/.cache/modelscope/hub/models/vllm-ascend/DeepSeek-V2-Lite-W8A8": { "accuracy": 0.34, diff --git a/test/srt/ascend/test_ascend_tp1_bf16.py b/test/registered/ascend/basic_function/runtime_opts/test_npu_tp1_bf16.py similarity index 91% rename from test/srt/ascend/test_ascend_tp1_bf16.py rename to test/registered/ascend/basic_function/runtime_opts/test_npu_tp1_bf16.py index abc960953..b01510dc7 100644 --- a/test/srt/ascend/test_ascend_tp1_bf16.py +++ b/test/registered/ascend/basic_function/runtime_opts/test_npu_tp1_bf16.py @@ -3,6 +3,7 @@ from types import SimpleNamespace from urllib.parse import urlparse from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_npu_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.test_utils import ( DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -11,6 +12,9 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_npu_ci(est_time=400, suite="stage-b-test-1-npu-a2", nightly=False) +register_npu_ci(est_time=400, suite="nightly-1-npu-a3", nightly=True) + TEST_MODEL_MATRIX = { "/root/.cache/modelscope/hub/models/Qwen/Qwen2.5-7B-Instruct": { "accuracy": 0.84, diff --git a/test/srt/ascend/test_ascend_tp2_bf16.py b/test/registered/ascend/basic_function/runtime_opts/test_npu_tp2_bf16.py similarity index 91% rename from test/srt/ascend/test_ascend_tp2_bf16.py rename to test/registered/ascend/basic_function/runtime_opts/test_npu_tp2_bf16.py index e1f736e9b..8f85a16c0 100644 --- a/test/srt/ascend/test_ascend_tp2_bf16.py +++ b/test/registered/ascend/basic_function/runtime_opts/test_npu_tp2_bf16.py @@ -3,6 +3,7 @@ from types import SimpleNamespace from urllib.parse import urlparse from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_npu_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.test_utils import ( DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -11,6 +12,9 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_npu_ci(est_time=400, suite="stage-b-test-2-npu-a2", nightly=False) +register_npu_ci(est_time=400, suite="nightly-2-npu-a3", nightly=True) + TEST_MODEL_MATRIX = { "/root/.cache/modelscope/hub/models/Qwen/Qwen2.5-7B-Instruct": { "accuracy": 0.85, diff --git a/test/srt/ascend/test_ascend_tp2_fia_bf16.py b/test/registered/ascend/basic_function/runtime_opts/test_npu_tp2_fia_bf16.py similarity index 92% rename from test/srt/ascend/test_ascend_tp2_fia_bf16.py rename to test/registered/ascend/basic_function/runtime_opts/test_npu_tp2_fia_bf16.py index 5f82bb47f..54f3db7d7 100644 --- a/test/srt/ascend/test_ascend_tp2_fia_bf16.py +++ b/test/registered/ascend/basic_function/runtime_opts/test_npu_tp2_fia_bf16.py @@ -4,6 +4,7 @@ from types import SimpleNamespace from urllib.parse import urlparse from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_npu_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.test_utils import ( DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -12,6 +13,9 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_npu_ci(est_time=400, suite="stage-b-test-2-npu-a2", nightly=False) +register_npu_ci(est_time=400, suite="nightly-2-npu-a3", nightly=True) + TEST_MODEL_MATRIX = { "/root/.cache/modelscope/hub/models/Qwen/Qwen2.5-7B-Instruct": { "accuracy": 0.85, diff --git a/test/srt/ascend/test_ascend_tp4_bf16.py b/test/registered/ascend/basic_function/runtime_opts/test_npu_tp4_bf16.py similarity index 91% rename from test/srt/ascend/test_ascend_tp4_bf16.py rename to test/registered/ascend/basic_function/runtime_opts/test_npu_tp4_bf16.py index 79efa2445..85873ad7b 100644 --- a/test/srt/ascend/test_ascend_tp4_bf16.py +++ b/test/registered/ascend/basic_function/runtime_opts/test_npu_tp4_bf16.py @@ -3,6 +3,7 @@ from types import SimpleNamespace from urllib.parse import urlparse from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_npu_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.test_utils import ( DEFAULT_URL_FOR_TEST, @@ -10,6 +11,9 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_npu_ci(est_time=400, suite="stage-b-test-4-npu-a3", nightly=False) +register_npu_ci(est_time=400, suite="nightly-4-npu-a3", nightly=True) + TEST_MODEL_MATRIX = { "Qwen/Qwen3-30B-A3B-Instruct-2507": { "accuracy": 0.90, diff --git a/test/registered/ascend/embedding_models/test_npu_bge_large_en_v1_5.py b/test/registered/ascend/embedding_models/test_npu_bge_large_en_v1_5.py index 8e2869d70..5da11e7a4 100644 --- a/test/registered/ascend/embedding_models/test_npu_bge_large_en_v1_5.py +++ b/test/registered/ascend/embedding_models/test_npu_bge_large_en_v1_5.py @@ -11,7 +11,7 @@ from sglang.test.test_utils import CustomTestCase, get_similarities register_npu_ci( est_time=400, - suite="nightly-1-npu-a3", + suite="full-1-npu-a3", nightly=True, disabled="embeddings are not all close", ) diff --git a/test/registered/ascend/llm_models/test_npu_afm_4_5b.py b/test/registered/ascend/llm_models/test_npu_afm_4_5b.py index ce905093f..9f83350f9 100644 --- a/test/registered/ascend/llm_models/test_npu_afm_4_5b.py +++ b/test/registered/ascend/llm_models/test_npu_afm_4_5b.py @@ -5,7 +5,7 @@ from sglang.test.ascend.test_ascend_utils import AFM_4_5B_BASE_WEIGHTS_PATH from sglang.test.ci.ci_register import register_npu_ci from sglang.test.test_utils import CustomTestCase -register_npu_ci(est_time=400, suite="nightly-1-npu-a3", nightly=True) +register_npu_ci(est_time=400, suite="full-1-npu-a3", nightly=True) class TestAFM(GSM8KAscendMixin, CustomTestCase): diff --git a/test/registered/ascend/llm_models/test_npu_c4ai_command_r_v01.py b/test/registered/ascend/llm_models/test_npu_c4ai_command_r_v01.py index c4ee782b4..150572c4d 100644 --- a/test/registered/ascend/llm_models/test_npu_c4ai_command_r_v01.py +++ b/test/registered/ascend/llm_models/test_npu_c4ai_command_r_v01.py @@ -8,7 +8,7 @@ from sglang.test.ascend.test_ascend_utils import ( from sglang.test.ci.ci_register import register_npu_ci from sglang.test.test_utils import CustomTestCase -register_npu_ci(est_time=400, suite="nightly-2-npu-a3", nightly=False) +register_npu_ci(est_time=400, suite="full-2-npu-a3", nightly=False) class TestC4AI(GSM8KAscendMixin, CustomTestCase): diff --git a/test/registered/ascend/llm_models/test_npu_exaone_3.py b/test/registered/ascend/llm_models/test_npu_exaone_3.py index 23e72d4cd..ed676dd5b 100644 --- a/test/registered/ascend/llm_models/test_npu_exaone_3.py +++ b/test/registered/ascend/llm_models/test_npu_exaone_3.py @@ -5,7 +5,7 @@ from sglang.test.ascend.test_ascend_utils import EXAONE_3_5_7_8B_INSTRUCT_WEIGHT from sglang.test.ci.ci_register import register_npu_ci from sglang.test.test_utils import CustomTestCase -register_npu_ci(est_time=400, suite="nightly-1-npu-a3", nightly=False) +register_npu_ci(est_time=400, suite="full-1-npu-a3", nightly=False) class TestEXAONE(GSM8KAscendMixin, CustomTestCase): diff --git a/test/registered/ascend/llm_models/test_npu_granite_3_0_3b_a800m.py b/test/registered/ascend/llm_models/test_npu_granite_3_0_3b_a800m.py index 00d3b2a6c..9552e3ad9 100644 --- a/test/registered/ascend/llm_models/test_npu_granite_3_0_3b_a800m.py +++ b/test/registered/ascend/llm_models/test_npu_granite_3_0_3b_a800m.py @@ -7,7 +7,7 @@ from sglang.test.ascend.test_ascend_utils import ( from sglang.test.ci.ci_register import register_npu_ci from sglang.test.test_utils import CustomTestCase -register_npu_ci(est_time=400, suite="nightly-1-npu-a3", nightly=True) +register_npu_ci(est_time=400, suite="full-1-npu-a3", nightly=True) class TestGranite(GSM8KAscendMixin, CustomTestCase): diff --git a/test/registered/ascend/llm_models/test_npu_granite_3_1_8b.py b/test/registered/ascend/llm_models/test_npu_granite_3_1_8b.py index ac665572a..1ef751dd0 100644 --- a/test/registered/ascend/llm_models/test_npu_granite_3_1_8b.py +++ b/test/registered/ascend/llm_models/test_npu_granite_3_1_8b.py @@ -5,7 +5,7 @@ from sglang.test.ascend.test_ascend_utils import GRANITE_3_1_8B_INSTRUCT_WEIGHTS from sglang.test.ci.ci_register import register_npu_ci from sglang.test.test_utils import CustomTestCase -register_npu_ci(est_time=400, suite="nightly-1-npu-a3", nightly=True) +register_npu_ci(est_time=400, suite="full-1-npu-a3", nightly=True) class TestGranite(GSM8KAscendMixin, CustomTestCase): diff --git a/test/registered/ascend/llm_models/test_npu_grok_2.py b/test/registered/ascend/llm_models/test_npu_grok_2.py index 3eff4c194..0f75ecc6b 100644 --- a/test/registered/ascend/llm_models/test_npu_grok_2.py +++ b/test/registered/ascend/llm_models/test_npu_grok_2.py @@ -6,7 +6,7 @@ from sglang.test.test_utils import CustomTestCase register_npu_ci( est_time=400, - suite="nightly-16-npu-a3", + suite="full-16-npu-a3", nightly=False, disabled="https://github.com/Ascend/sglang/issues/25", ) diff --git a/test/registered/ascend/llm_models/test_npu_ling_lite.py b/test/registered/ascend/llm_models/test_npu_ling_lite.py index 0dc2a7809..2f24064e8 100644 --- a/test/registered/ascend/llm_models/test_npu_ling_lite.py +++ b/test/registered/ascend/llm_models/test_npu_ling_lite.py @@ -5,7 +5,7 @@ from sglang.test.ascend.test_ascend_utils import LING_LITE_WEIGHTS_PATH from sglang.test.ci.ci_register import register_npu_ci from sglang.test.test_utils import CustomTestCase -register_npu_ci(est_time=400, suite="nightly-2-npu-a3", nightly=True) +register_npu_ci(est_time=400, suite="full-2-npu-a3", nightly=True) class TestLingLite(GSM8KAscendMixin, CustomTestCase): diff --git a/test/registered/ascend/llm_models/test_npu_mimo_7b_rl.py b/test/registered/ascend/llm_models/test_npu_mimo_7b_rl.py index 2fe9f802b..e4d354b8b 100644 --- a/test/registered/ascend/llm_models/test_npu_mimo_7b_rl.py +++ b/test/registered/ascend/llm_models/test_npu_mimo_7b_rl.py @@ -5,7 +5,7 @@ from sglang.test.ascend.test_ascend_utils import MIMO_7B_RL_WEIGHTS_PATH from sglang.test.ci.ci_register import register_npu_ci from sglang.test.test_utils import CustomTestCase -register_npu_ci(est_time=400, suite="nightly-1-npu-a3", nightly=True) +register_npu_ci(est_time=400, suite="full-1-npu-a3", nightly=True) class TestMiMo7BRL(GSM8KAscendMixin, CustomTestCase): diff --git a/test/registered/ascend/llm_models/test_npu_persimmon_8b_chat.py b/test/registered/ascend/llm_models/test_npu_persimmon_8b_chat.py index 9958edc25..4a4a95782 100644 --- a/test/registered/ascend/llm_models/test_npu_persimmon_8b_chat.py +++ b/test/registered/ascend/llm_models/test_npu_persimmon_8b_chat.py @@ -8,7 +8,7 @@ from sglang.test.test_utils import CustomTestCase register_npu_ci( est_time=400, - suite="nightly-1-npu-a3", + suite="full-1-npu-a3", nightly=False, ) diff --git a/test/registered/ascend/llm_models/test_npu_smollm_1_7b.py b/test/registered/ascend/llm_models/test_npu_smollm_1_7b.py index cfe3722f7..dbe1bcc1c 100644 --- a/test/registered/ascend/llm_models/test_npu_smollm_1_7b.py +++ b/test/registered/ascend/llm_models/test_npu_smollm_1_7b.py @@ -5,7 +5,7 @@ from sglang.test.ascend.test_ascend_utils import SMOLLM_1_7B_WEIGHTS_PATH from sglang.test.ci.ci_register import register_npu_ci from sglang.test.test_utils import CustomTestCase -register_npu_ci(est_time=400, suite="nightly-1-npu-a3", nightly=True) +register_npu_ci(est_time=400, suite="full-1-npu-a3", nightly=True) class TestSmolLM(GSM8KAscendMixin, CustomTestCase): diff --git a/test/registered/ascend/llm_models/test_npu_stablelm_2_1_6b.py b/test/registered/ascend/llm_models/test_npu_stablelm_2_1_6b.py index 07c71b070..f61f3ac88 100644 --- a/test/registered/ascend/llm_models/test_npu_stablelm_2_1_6b.py +++ b/test/registered/ascend/llm_models/test_npu_stablelm_2_1_6b.py @@ -5,7 +5,7 @@ from sglang.test.ascend.test_ascend_utils import STABLELM_2_1_6B_WEIGHTS_PATH from sglang.test.ci.ci_register import register_npu_ci from sglang.test.test_utils import CustomTestCase -register_npu_ci(est_time=400, suite="nightly-1-npu-a3", nightly=True) +register_npu_ci(est_time=400, suite="full-1-npu-a3", nightly=True) class TestStablelm(GSM8KAscendMixin, CustomTestCase): diff --git a/test/registered/ascend/reward_models/test_npu_gemma_2_27b_v0_2.py b/test/registered/ascend/reward_models/test_npu_gemma_2_27b_v0_2.py index 16772b0ff..086a82342 100644 --- a/test/registered/ascend/reward_models/test_npu_gemma_2_27b_v0_2.py +++ b/test/registered/ascend/reward_models/test_npu_gemma_2_27b_v0_2.py @@ -10,7 +10,7 @@ from sglang.test.runners import HFRunner, SRTRunner from sglang.test.test_utils import CustomTestCase logger = logging.getLogger(__name__) -register_npu_ci(est_time=400, suite="nightly-1-npu-a3", nightly=True) +register_npu_ci(est_time=400, suite="full-1-npu-a3", nightly=True) MODELS = [ ( diff --git a/test/registered/ascend/reward_models/test_npu_internlm2_7b_reward.py b/test/registered/ascend/reward_models/test_npu_internlm2_7b_reward.py index 7386e4df9..a0877d30f 100644 --- a/test/registered/ascend/reward_models/test_npu_internlm2_7b_reward.py +++ b/test/registered/ascend/reward_models/test_npu_internlm2_7b_reward.py @@ -13,8 +13,8 @@ from sglang.test.test_utils import CustomTestCase register_npu_ci( est_time=400, - suite="nightly-4-npu-a3", - nightly=False, + suite="full-4-npu-a3", + nightly=True, ) PROMPT = ( diff --git a/test/registered/ascend/reward_models/test_npu_llama_3_1_8b_v0_2.py b/test/registered/ascend/reward_models/test_npu_llama_3_1_8b_v0_2.py index 2f23aaf59..c702e8d0b 100644 --- a/test/registered/ascend/reward_models/test_npu_llama_3_1_8b_v0_2.py +++ b/test/registered/ascend/reward_models/test_npu_llama_3_1_8b_v0_2.py @@ -10,7 +10,7 @@ from sglang.test.ci.ci_register import register_npu_ci from sglang.test.runners import HFRunner, SRTRunner from sglang.test.test_utils import CustomTestCase -register_npu_ci(est_time=400, suite="nightly-1-npu-a3", nightly=False) +register_npu_ci(est_time=400, suite="full-1-npu-a3", nightly=True) MODELS = [ (SKYWORK_REWARD_LLAMA_3_1_8B_V0_2_WEIGHTS_PATH, 1, 4e-2), diff --git a/test/registered/ascend/vlm_models/test_npu_qwen3_vl_4b_instruct.py b/test/registered/ascend/vlm_models/test_npu_qwen3_vl_4b_instruct.py index 802b99d93..33f5b447c 100644 --- a/test/registered/ascend/vlm_models/test_npu_qwen3_vl_4b_instruct.py +++ b/test/registered/ascend/vlm_models/test_npu_qwen3_vl_4b_instruct.py @@ -4,7 +4,7 @@ from sglang.test.ascend.test_ascend_utils import QWEN3_VL_4B_INSTRUCT_WEIGHTS_PA from sglang.test.ascend.vlm_utils import TestVLMModels from sglang.test.ci.ci_register import register_npu_ci -register_npu_ci(est_time=400, suite="nightly-4-npu-a3", nightly=True) +register_npu_ci(est_time=400, suite="full-4-npu-a3", nightly=True) class TestQwen3VL4B(TestVLMModels): diff --git a/test/run_suite.py b/test/run_suite.py index 3762cb0ad..1062f7d2f 100644 --- a/test/run_suite.py +++ b/test/run_suite.py @@ -105,6 +105,11 @@ NIGHTLY_SUITES = { "nightly-4-npu-a3", "nightly-8-npu-a3", "nightly-16-npu-a3", + "full-1-npu-a3", + "full-2-npu-a3", + "full-4-npu-a3", + "full-8-npu-a3", + "full-16-npu-a3", ], }