Files

349 lines
12 KiB
YAML

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_a2:
description: 'The a2 running docker image of the test task.'
required: false
type: string
default: 'swr.cn-southwest-2.myhuaweicloud.com/base_image/dockerhub/lmsysorg/sglang:main-cann9.0.0-910b'
image_a3:
description: 'The a3 running docker image of the test task. Must be an image with sglang preinstalled (e.g. lmsysorg/sglang:*a3*).'
required: false
type: string
default: 'swr.cn-southwest-2.myhuaweicloud.com/base_image/dockerhub/lmsysorg/sglang:main-cann9.0.0-a3'
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_a2: ${{ steps.set-vars.outputs.image_a2 }}
image_a3: ${{ steps.set-vars.outputs.image_a3 }}
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_a2 }}" ]; then
echo "image_a2=swr.cn-southwest-2.myhuaweicloud.com/base_image/dockerhub/lmsysorg/sglang:main-cann9.0.0-910b" >> $GITHUB_OUTPUT
else
echo "image_a2=${{ inputs.image_a2 }}" >> $GITHUB_OUTPUT
fi
if [ -z "${{ inputs.image_a3 }}" ]; then
echo "image_a3=swr.cn-southwest-2.myhuaweicloud.com/base_image/dockerhub/lmsysorg/sglang:main-cann9.0.0-a3" >> $GITHUB_OUTPUT
else
echo "image_a3=${{ inputs.image_a3 }}" >> $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 }}
secrets: inherit
full-4-npu-a2:
name: full-4-npu-a2
if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }}
needs: [set-image-config]
uses: ./.github/workflows/_npu-single-node-test-stage.yml
with:
runner: linux-aarch64-a2-4
test_type: 'perf'
test_suite: full-4-npu-a2
is_nightly_pipeline_job: true
skip_pr_test_health_check: 'true'
image: ${{ needs.set-image-config.outputs.image_a2 }}
device_type_for_deps: '910b'
full-1-npu-a3:
name: full-1-npu-a3
if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }}
needs: [set-image-config]
uses: ./.github/workflows/_npu-pr-test-stage.yml
with:
self_name: full-1-npu-a3
runner_config: linux-aarch64-a3-2
image: ${{ needs.set-image-config.outputs.image_a3 }}
run_timeout_minutes: '240'
timeout_per_file: '3600'
ref: ${{ needs.set-image-config.outputs.ref }}
is_nightly_pipeline_job: true
skip_pr_test_health_check: 'true'
secrets: inherit
full-2-npu-a3:
name: full-2-npu-a3
if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }}
needs: [set-image-config]
uses: ./.github/workflows/_npu-pr-test-stage.yml
with:
self_name: full-2-npu-a3
runner_config: linux-aarch64-a3-2
image: ${{ needs.set-image-config.outputs.image_a3 }}
run_timeout_minutes: '240'
timeout_per_file: '3600'
ref: ${{ needs.set-image-config.outputs.ref }}
is_nightly_pipeline_job: true
skip_pr_test_health_check: 'true'
secrets: inherit
full-4-npu-a3:
name: full-4-npu-a3
if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }}
needs: [set-image-config]
uses: ./.github/workflows/_npu-pr-test-stage.yml
with:
self_name: full-4-npu-a3
runner_config: linux-aarch64-a3-4
image: ${{ needs.set-image-config.outputs.image_a3 }}
run_timeout_minutes: '240'
timeout_per_file: '3600'
ref: ${{ needs.set-image-config.outputs.ref }}
is_nightly_pipeline_job: true
skip_pr_test_health_check: 'true'
secrets: inherit
full-8-npu-a3:
name: full-8-npu-a3
if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }}
needs: [set-image-config]
uses: ./.github/workflows/_npu-pr-test-stage.yml
with:
self_name: full-8-npu-a3
runner_config: linux-aarch64-a3-8
image: ${{ needs.set-image-config.outputs.image_a3 }}
run_timeout_minutes: '240'
timeout_per_file: '3600'
ref: ${{ needs.set-image-config.outputs.ref }}
is_nightly_pipeline_job: true
skip_pr_test_health_check: 'true'
secrets: inherit
full-16-npu-a3:
name: full-16-npu-a3
if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }}
needs: [set-image-config]
uses: ./.github/workflows/_npu-pr-test-stage.yml
with:
self_name: full-16-npu-a3
runner_config: linux-aarch64-a3-16
image: ${{ needs.set-image-config.outputs.image_a3 }}
run_timeout_minutes: '240'
timeout_per_file: '3600'
ref: ${{ needs.set-image-config.outputs.ref }}
is_nightly_pipeline_job: true
skip_pr_test_health_check: 'true'
secrets: inherit
full-acc-2-npu-a3:
name: full-acc-2-npu-a3
if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }}
needs: [set-image-config]
uses: ./.github/workflows/_npu-single-node-test-stage.yml
with:
runner: linux-aarch64-a3-2-
test_type: 'accuracy'
test_suite: full-acc-2-npu-a3
image: ${{ needs.set-image-config.outputs.image_a3 }}
is_nightly_pipeline_job: true
install_sglang_deps: true
device_type_for_deps: 'a3'
skip_pr_test_health_check: 'true'
secrets: inherit
full-acc-4-npu-a3:
name: full-acc-4-npu-a3
if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }}
needs: [set-image-config]
uses: ./.github/workflows/_npu-single-node-test-stage.yml
with:
runner: linux-aarch64-a3-4-
test_type: 'accuracy'
test_suite: full-acc-4-npu-a3
image: ${{ needs.set-image-config.outputs.image_a3 }}
is_nightly_pipeline_job: true
install_sglang_deps: true
device_type_for_deps: 'a3'
skip_pr_test_health_check: 'true'
secrets: inherit
full-acc-16-npu-a3:
name: full-acc-16-npu-a3
if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }}
needs: [set-image-config]
uses: ./.github/workflows/_npu-single-node-test-stage.yml
with:
runner: linux-aarch64-a3-16-
test_type: 'accuracy'
test_suite: full-acc-16-npu-a3
image: ${{ needs.set-image-config.outputs.image_a3 }}
is_nightly_pipeline_job: true
install_sglang_deps: true
device_type_for_deps: 'a3'
skip_pr_test_health_check: 'true'
secrets: inherit
full-perf-2-npu-a3:
name: full-perf-2-npu-a3
if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }}
needs: [set-image-config]
uses: ./.github/workflows/_npu-pr-test-stage.yml
with:
self_name: full-perf-2-npu-a3
runner_config: linux-aarch64-a3-800t-2
image: ${{ needs.set-image-config.outputs.image_a3 }}
run_timeout_minutes: '240'
timeout_per_file: '3600'
ref: ${{ needs.set-image-config.outputs.ref }}
is_nightly_pipeline_job: true
skip_pr_test_health_check: 'true'
secrets: inherit
full-perf-4-npu-a3:
name: full-perf-4-npu-a3
if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }}
needs: [set-image-config]
uses: ./.github/workflows/_npu-pr-test-stage.yml
with:
self_name: full-perf-4-npu-a3
runner_config: linux-aarch64-a3-800t-4
image: ${{ needs.set-image-config.outputs.image_a3 }}
run_timeout_minutes: '240'
timeout_per_file: '3600'
ref: ${{ needs.set-image-config.outputs.ref }}
is_nightly_pipeline_job: true
skip_pr_test_health_check: 'true'
secrets: inherit
full-perf-8-npu-a3:
name: full-perf-8-npu-a3
if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }}
needs: [set-image-config]
uses: ./.github/workflows/_npu-pr-test-stage.yml
with:
self_name: full-perf-8-npu-a3
runner_config: linux-aarch64-a3-800t-8
image: ${{ needs.set-image-config.outputs.image_a3 }}
run_timeout_minutes: '240'
timeout_per_file: '3600'
ref: ${{ needs.set-image-config.outputs.ref }}
is_nightly_pipeline_job: true
skip_pr_test_health_check: 'true'
secrets: inherit
full-perf-16-npu-a3:
name: full-perf-16-npu-a3
if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }}
needs: [set-image-config]
uses: ./.github/workflows/_npu-pr-test-stage.yml
with:
self_name: full-perf-16-npu-a3
runner_config: linux-aarch64-a3-800t-16
image: ${{ needs.set-image-config.outputs.image_a3 }}
run_timeout_minutes: '240'
timeout_per_file: '3600'
ref: ${{ needs.set-image-config.outputs.ref }}
is_nightly_pipeline_job: true
skip_pr_test_health_check: 'true'
secrets: inherit
full-poc-multi-node-mix-tests:
name: multi-node-mix-poc
if: ${{ (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') }}
needs: [set-image-config]
strategy:
fail-fast: false
max-parallel: 1
matrix:
test_config:
# kimi_k2_6 performance tests
- name: kimi_k2_6_w4a8_16p_in64k_out1k_100ms_aime25
node_size: 2
test_case: test/registered/npu/accuracy/kimi_k2_6/test_npu_kimi_k2_6_w4a8_16p_in64k_out1k_100ms_aime25.py
test_type: 'accuracy'
uses: ./.github/workflows/nightly-test-npu-e2e-multi-node.yml
with:
runner: linux-amd64-cpu-4
test_type: ${{ matrix.test_config.test_type || 'perf' }}
test_config_name: ${{ matrix.test_config.name }}
node_size: ${{ matrix.test_config.node_size }}
test_case: ${{ matrix.test_config.test_case }}
image: ${{ needs.set-image-config.outputs.image_a3 }}
install_sglang_from_source: false
prefill_decode_deployment: 'mix'
transformers_version: ''
check-all-jobs:
if: github.repository == 'sgl-project/sglang' && always()
needs:
- nighly-test-npu
- full-4-npu-a2
- full-1-npu-a3
- full-2-npu-a3
- full-4-npu-a3
- full-8-npu-a3
- full-16-npu-a3
- full-acc-2-npu-a3
- full-acc-4-npu-a3
- full-acc-16-npu-a3
- full-perf-2-npu-a3
- full-perf-4-npu-a3
- full-perf-8-npu-a3
- full-perf-16-npu-a3
- full-poc-multi-node-mix-tests
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"