move runs_on + rdma into runner_configs.yml (#25264)
This commit is contained in:
@@ -1,14 +1,24 @@
|
||||
"""Emit a runner_config's setup details (install / artifact_version /
|
||||
install_timeout) in $GITHUB_OUTPUT format. Reads scripts/ci/runner_configs.yml.
|
||||
Called by .github/workflows/_pr-test-stage.yml.
|
||||
"""Emit runner_config setup for GitHub Actions $GITHUB_OUTPUT.
|
||||
|
||||
runner_configs.py <runner_config>
|
||||
Per-field `key=value` lines (install / artifact_version /
|
||||
install_timeout / rdma_devices). `runs_on` is intentionally omitted —
|
||||
it carries the `$b200_runner` sentinel and is resolved via --map.
|
||||
Called per stage by _pr-test-stage.yml.
|
||||
|
||||
runner_configs.py --map <b200_runner_label>
|
||||
`runs_on_map={json}` — flat dict {runner_config: runs_on}, with
|
||||
`$b200_runner` substituted. Called once by _pr-test-check-changes.yml.
|
||||
"""
|
||||
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
|
||||
import yaml
|
||||
|
||||
_YAML_PATH = os.path.join(os.path.dirname(__file__), "runner_configs.yml")
|
||||
_B200_SENTINEL = "$b200_runner"
|
||||
|
||||
|
||||
def load() -> dict:
|
||||
@@ -16,12 +26,35 @@ def load() -> dict:
|
||||
return yaml.safe_load(f)["runner_configs"]
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) != 2:
|
||||
sys.exit("usage: runner_configs.py <runner_config>")
|
||||
rc = sys.argv[1]
|
||||
config = load().get(rc)
|
||||
if config is None:
|
||||
def _emit_single(rc: str) -> None:
|
||||
# runs_on goes through --map (resolves $b200_runner). Suppress it here so a
|
||||
# consumer can't accidentally read the raw sentinel value.
|
||||
cfg = load().get(rc)
|
||||
if cfg is None:
|
||||
sys.exit(f"unknown runner_config: {rc!r}")
|
||||
for key, value in config.items():
|
||||
for key, value in cfg.items():
|
||||
if key == "runs_on":
|
||||
continue
|
||||
print(f"{key}={value}")
|
||||
|
||||
|
||||
def _emit_map(b200_runner: str) -> None:
|
||||
runs_on = {
|
||||
name: (b200_runner if cfg.get("runs_on") == _B200_SENTINEL else cfg["runs_on"])
|
||||
for name, cfg in load().items()
|
||||
}
|
||||
print(f"runs_on_map={json.dumps(runs_on, separators=(',', ':'))}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
args = sys.argv[1:]
|
||||
if len(args) == 1:
|
||||
_emit_single(args[0])
|
||||
elif len(args) == 2 and args[0] == "--map":
|
||||
_emit_map(args[1])
|
||||
else:
|
||||
sys.exit(
|
||||
"usage:\n"
|
||||
" runner_configs.py <runner_config>\n"
|
||||
" runner_configs.py --map <b200_runner_label>"
|
||||
)
|
||||
|
||||
@@ -3,9 +3,16 @@
|
||||
# scripts/ci/runner_configs.py (CLI wrapper), which is in turn called by
|
||||
# .github/workflows/_pr-test-stage.yml.
|
||||
#
|
||||
# Each runner_config carries install script, actions/download-artifact major
|
||||
# version, and install-step wall-clock cap (minutes, enforced via
|
||||
# `timeout-minutes:` on the install step in _pr-test-stage.yml).
|
||||
# Each runner_config carries:
|
||||
# - install: install script path
|
||||
# - artifact_version: actions/download-artifact major version
|
||||
# - install_timeout: install-step wall-clock cap (minutes), enforced via
|
||||
# `timeout-minutes:` on the install step in _pr-test-stage.yml
|
||||
# - runs_on: GHA runner label for the stage's `runs-on:`. The literal
|
||||
# `$b200_runner` is substituted at workflow-load time with the dynamic
|
||||
# b200 runner tag from check-changes (see runner_configs.py --map).
|
||||
# - rdma_devices (optional): exported as SGLANG_CI_RDMA_ALL_DEVICES env
|
||||
# to the stage job; absent means unset.
|
||||
|
||||
_anchors:
|
||||
default_install: &default scripts/ci/cuda/ci_install_dependency.sh
|
||||
@@ -13,14 +20,14 @@ _anchors:
|
||||
dsv4_install: &dsv4 scripts/ci/cuda/ci_install_dsv4_dep.sh
|
||||
|
||||
runner_configs:
|
||||
1-gpu-small: { install: *default, artifact_version: v4, install_timeout: "20" }
|
||||
1-gpu-large: { install: *default, artifact_version: v4, install_timeout: "20" }
|
||||
2-gpu-large: { install: *default, artifact_version: v4, install_timeout: "20" }
|
||||
4-gpu-b200: { install: *default, artifact_version: v6, install_timeout: "20" }
|
||||
4-gpu-h100: { install: *default, artifact_version: v4, install_timeout: "20" }
|
||||
8-gpu-h200: { install: *default, artifact_version: v4, install_timeout: "20" }
|
||||
8-gpu-h20: { install: *deepep, artifact_version: v4, install_timeout: "20" }
|
||||
deepep-4-gpu-h100: { install: *deepep, artifact_version: v4, install_timeout: "20" }
|
||||
deepep-8-gpu-h200: { install: *deepep, artifact_version: v4, install_timeout: "20" }
|
||||
dsv4-4-gpu-b200: { install: *dsv4, artifact_version: v6, install_timeout: "30" }
|
||||
dsv4-8-gpu-h200: { install: *dsv4, artifact_version: v4, install_timeout: "30" }
|
||||
1-gpu-small: { install: *default, artifact_version: v4, install_timeout: "20", runs_on: 1-gpu-5090 }
|
||||
1-gpu-large: { install: *default, artifact_version: v4, install_timeout: "20", runs_on: 1-gpu-h100 }
|
||||
2-gpu-large: { install: *default, artifact_version: v4, install_timeout: "20", runs_on: 2-gpu-h100 }
|
||||
4-gpu-b200: { install: *default, artifact_version: v6, install_timeout: "20", runs_on: $b200_runner }
|
||||
4-gpu-h100: { install: *default, artifact_version: v4, install_timeout: "20", runs_on: 4-gpu-h100 }
|
||||
8-gpu-h200: { install: *default, artifact_version: v4, install_timeout: "20", runs_on: 8-gpu-h200 }
|
||||
8-gpu-h20: { install: *deepep, artifact_version: v4, install_timeout: "20", runs_on: 8-gpu-h20, rdma_devices: "mlx5_1,mlx5_2,mlx5_3,mlx5_4" }
|
||||
deepep-4-gpu-h100: { install: *deepep, artifact_version: v4, install_timeout: "20", runs_on: 4-gpu-h100 }
|
||||
deepep-8-gpu-h200: { install: *deepep, artifact_version: v4, install_timeout: "20", runs_on: 8-gpu-h200-deepep }
|
||||
dsv4-4-gpu-b200: { install: *dsv4, artifact_version: v6, install_timeout: "30", runs_on: $b200_runner }
|
||||
dsv4-8-gpu-h200: { install: *dsv4, artifact_version: v4, install_timeout: "30", runs_on: 8-gpu-h200 }
|
||||
|
||||
Reference in New Issue
Block a user