[AMD]Stage MI355X nightly by node count (#33774)
Co-authored-by: Chen <bingxche@amd.com>
This commit is contained in:
co-authored by
Chen
parent
beabc5949b
commit
e675c7226a
@@ -1,8 +1,8 @@
|
|||||||
name: Nightly Test (AMD MI355X 2N 1P1D Disagg)
|
name: Nightly Test (AMD MI355X 2N 1P1D Disagg)
|
||||||
|
|
||||||
# A self-hosted runner on the amd-sglang login node salloc's two MI355X nodes
|
# Self-hosted runners on the amd-sglang login node salloc two or four MI355X
|
||||||
# and runs the Docker harness (prefill + decode over MORI, a standalone load
|
# nodes and run the Docker harness (prefill + decode over MORI, a standalone
|
||||||
# balancer, then an sglang.bench_serving concurrency sweep) via
|
# load balancer, then an sglang.bench_serving concurrency sweep) via
|
||||||
# scripts/ci/slurm/launch_mi355x.sh.
|
# scripts/ci/slurm/launch_mi355x.sh.
|
||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
@@ -35,7 +35,8 @@ jobs:
|
|||||||
if: github.repository == 'sgl-project/sglang'
|
if: github.repository == 'sgl-project/sglang'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
outputs:
|
outputs:
|
||||||
matrix: ${{ steps.generate.outputs.matrix }}
|
matrix-2n: ${{ steps.generate.outputs.matrix-2n }}
|
||||||
|
matrix-4n: ${{ steps.generate.outputs.matrix-4n }}
|
||||||
image: ${{ steps.image.outputs.image }}
|
image: ${{ steps.image.outputs.image }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
@@ -84,19 +85,42 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
MATRIX=$(python3 scripts/ci/slurm/generate_matrix.py \
|
MATRIX=$(python3 scripts/ci/slurm/generate_matrix.py \
|
||||||
scripts/ci/slurm/nightly-configs.yaml --runner mi355x "${FILTER_ARG[@]}")
|
scripts/ci/slurm/nightly-configs.yaml --runner mi355x "${FILTER_ARG[@]}")
|
||||||
echo "matrix=$MATRIX" >> $GITHUB_OUTPUT
|
MATRIX="$MATRIX" python3 - <<'PY'
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
|
||||||
nightly-mi355x-benchmark:
|
matrix = json.loads(os.environ["MATRIX"])
|
||||||
|
groups = {
|
||||||
|
"matrix-2n": [entry for entry in matrix if "-1p1d" in entry["name"]],
|
||||||
|
"matrix-4n": [
|
||||||
|
entry for entry in matrix if "-2p1d-ep16" in entry["name"]
|
||||||
|
],
|
||||||
|
}
|
||||||
|
matched = {entry["name"] for entries in groups.values() for entry in entries}
|
||||||
|
unmatched = [entry["name"] for entry in matrix if entry["name"] not in matched]
|
||||||
|
if unmatched:
|
||||||
|
raise SystemExit(
|
||||||
|
"Unrecognized MI355X topology for config(s): " + ", ".join(unmatched)
|
||||||
|
)
|
||||||
|
|
||||||
|
with open(os.environ["GITHUB_OUTPUT"], "a") as output:
|
||||||
|
for name, entries in groups.items():
|
||||||
|
value = {"include": [{"config": entry} for entry in entries]}
|
||||||
|
print(f"{name}={json.dumps(value, separators=(',', ':'))}", file=output)
|
||||||
|
PY
|
||||||
|
|
||||||
|
nightly-mi355x-2n:
|
||||||
needs: setup
|
needs: setup
|
||||||
if: |
|
if: |
|
||||||
always() && github.repository == 'sgl-project/sglang'
|
always() && github.repository == 'sgl-project/sglang'
|
||||||
&& needs.setup.result == 'success'
|
&& needs.setup.result == 'success'
|
||||||
|
&& needs.setup.outputs.matrix-2n != '{"include":[]}'
|
||||||
runs-on: linux-sglang-mi35x-di
|
runs-on: linux-sglang-mi35x-di
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
max-parallel: 2
|
||||||
config: ${{ fromJson(needs.setup.outputs.matrix) }}
|
matrix: ${{ fromJson(needs.setup.outputs.matrix-2n) }}
|
||||||
env:
|
env: &mi355x-env
|
||||||
FRAMEWORK: sglang
|
FRAMEWORK: sglang
|
||||||
HW: mi355x
|
HW: mi355x
|
||||||
MODEL: ${{ matrix.config.model }}
|
MODEL: ${{ matrix.config.model }}
|
||||||
@@ -115,7 +139,7 @@ jobs:
|
|||||||
# via refs/main. Per-model value comes from nightly-configs.yaml model_path.
|
# via refs/main. Per-model value comes from nightly-configs.yaml model_path.
|
||||||
MODEL_PATH: ${{ matrix.config.model_path }}
|
MODEL_PATH: ${{ matrix.config.model_path }}
|
||||||
|
|
||||||
steps:
|
steps: &mi355x-steps
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
@@ -139,7 +163,7 @@ jobs:
|
|||||||
scancel $STALE_JOBS
|
scancel $STALE_JOBS
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Launch MI355X 2N 1P1D benchmark
|
- name: Launch MI355X benchmark
|
||||||
timeout-minutes: 180
|
timeout-minutes: 180
|
||||||
env:
|
env:
|
||||||
# Manual dispatch input wins; otherwise use the latest image resolved
|
# Manual dispatch input wins; otherwise use the latest image resolved
|
||||||
@@ -226,8 +250,26 @@ jobs:
|
|||||||
rm -rf "$LOG_DIR"
|
rm -rf "$LOG_DIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
nightly-mi355x-4n:
|
||||||
|
needs:
|
||||||
|
- setup
|
||||||
|
- nightly-mi355x-2n
|
||||||
|
if: |
|
||||||
|
!cancelled() && github.repository == 'sgl-project/sglang'
|
||||||
|
&& needs.setup.result == 'success'
|
||||||
|
&& needs.setup.outputs.matrix-4n != '{"include":[]}'
|
||||||
|
runs-on: linux-sglang-mi35x-di
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
max-parallel: 1
|
||||||
|
matrix: ${{ fromJson(needs.setup.outputs.matrix-4n) }}
|
||||||
|
env: *mi355x-env
|
||||||
|
steps: *mi355x-steps
|
||||||
|
|
||||||
collect-results:
|
collect-results:
|
||||||
needs: nightly-mi355x-benchmark
|
needs:
|
||||||
|
- nightly-mi355x-2n
|
||||||
|
- nightly-mi355x-4n
|
||||||
if: github.repository == 'sgl-project/sglang' && always()
|
if: github.repository == 'sgl-project/sglang' && always()
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
Reference in New Issue
Block a user