Agent Skills: Onboard GB200 1-Node GitHub MR Tests

Onboard 1-node GitHub MR functional tests for GB200 from existing mr-scoped

UncategorizedID: autohandai/community-skills/nvidia-megatron-core-onboard-gb200-1node-tests

Install this agent skill to your local

pnpm dlx add-skill https://github.com/autohandai/community-skills/tree/HEAD/nvidia-megatron-core-onboard-gb200-1node-tests

Skill Files

Browse the full folder contents for nvidia-megatron-core-onboard-gb200-1node-tests.

Download Skill

Loading file tree…

nvidia-megatron-core-onboard-gb200-1node-tests/SKILL.md

Skill Metadata

Name
nvidia-megatron-core-onboard-gb200-1node-tests
Description
Onboard 1-node GitHub MR functional tests for GB200 from existing mr-scoped

Onboard GB200 1-Node GitHub MR Tests

Create 1-node (mr-github) variants of existing 2-node (mr-scoped) GB200 functional tests. Each GB200 node has 4 GPUs. A 2-node test uses 8 GPUs total; the 1-node variant uses 4.


Background

GB200 functional tests live in tests/test_utils/recipes/gb200/:

| Recipe file | Notes | |-------------|-------| | gpt.yaml | GPT dense tests, nodes: 2, gpus: 4 (8 total) | | moe.yaml | MoE tests, nodes: 2, gpus: 4 (8 total) | | moe-1node.yaml | Existing 1-node MoE tests, nodes: 1, gpus: 4 (4 total) | | gpt-1node.yaml | 1-node GPT tests (create if not present) |

Model configs live at: tests/functional_tests/test_cases/{model}/{test_case}/model_config.yaml

1-node test cases use the _1node suffix: tests/functional_tests/test_cases/{model}/{test_case}_1node/model_config.yaml


Workflow

Step 1 — Find candidate tests

Scan the products: block in gpt.yaml and moe.yaml for entries with scope: [mr, ...] or scope: [mr-slim, ...]. These are the 2-node tests that need 1-node mr-github counterparts.

Ignore tests already covered in *-1node.yaml files, and ignore nightly, weekly, mr-broken scopes.

Step 2 — Read each model config

For each candidate, read its model_config.yaml and extract the key parallelism arguments:

--tensor-model-parallel-size   (TP)
--pipeline-model-parallel-size (PP)
--expert-model-parallel-size   (EP)
--expert-tensor-parallel-size  (ETP)
--context-parallel-size        (CP)
--global-batch-size
--micro-batch-size

Step 3 — Classify: trivial copy vs. needs adaptation

The world size formula is: world_size = TP × PP × DP where DP ≥ EP.

Going from 8 GPUs → 4 GPUs:

| Condition | Action | |-----------|--------| | TP × PP ≤ 4 | Trivial copy. Config unchanged; DP is halved automatically. | | TP × PP = 8 (e.g. tp4 pp2) | Reduce PP. Set PP = PP / 2 (e.g. pp2→1). Verify TP × PP_new ≤ 4. | | EP > 4 (e.g. ep8 with tp1 pp1) | Reduce EP. Set EP = 4. Experts stay at num-experts (each EP rank holds more experts). | | EP > 4 and TP × PP > 4 | Reduce both PP and EP as above. | | ETP test (ep × etp ≤ TP × DP) | Check EP × ETP ≤ TP × DP_new after PP reduction. Usually satisfied when pp→1. |

Do not change GBS — let gradient accumulation absorb the reduced DP.

Step 4 — Create _1node model config directories

# Trivial copy
mkdir -p tests/functional_tests/test_cases/{model}/{test_case}_1node
cp tests/functional_tests/test_cases/{model}/{test_case}/model_config.yaml \
   tests/functional_tests/test_cases/{model}/{test_case}_1node/model_config.yaml

# Then apply any parallelism changes (EP or PP) with Edit tool

Step 5 — Create or update recipe files

For GPT tests — create tests/test_utils/recipes/gb200/gpt-1node.yaml (if absent) by cloning gpt.yaml's spec block with nodes: 1. Use this template for the spec:

type: basic
format_version: 1
maintainers: [mcore]
loggers: [stdout]
spec:
  name: "{test_case}_{environment}_{platforms}"
  model: gpt          # or moe
  build: mcore-pyt-{environment}
  nodes: 1
  gpus: 4
  n_repeat: 5
  platforms: dgx_gb200
  script_setup: |    # copy verbatim from gpt.yaml / moe.yaml
    ...
  script: |-         # copy verbatim from gpt.yaml / moe.yaml
    ...

For MoE tests — append entries to the existing moe-1node.yaml.

Step 6 — Add products entries

Scope convention:

  • 1–2 most representative tests per recipe: scope: [mr-github, mr-github-slim]
  • All other tests: scope: [mr-github]
products:
  - test_case: [<test_case>_1node]
    products:
      - environment: [dev]
        scope: [mr-github, mr-github-slim]   # or [mr-github]
        platforms: [dgx_gb200]

Quick parallelism reference

| Original (8 GPUs) | 1-node config (4 GPUs) | Notes | |-------------------|----------------------|-------| | tp1 pp1 ep1 → dp8 | tp1 pp1 ep1 → dp4 | trivial | | tp2 pp1 ep1 → dp4 | tp2 pp1 ep1 → dp2 | trivial | | tp1 pp2 ep1 → dp4 | tp1 pp2 ep1 → dp2 | trivial | | tp4 pp1 ep1 → dp2 | tp4 pp1 ep1 → dp1 | trivial | | tp1 pp4 ep1 → dp2 | tp1 pp4 ep1 → dp1 | trivial | | tp1 pp1 ep8 → dp8 | tp1 pp1 ep4 → dp4 | ep 8→4 | | tp4 pp2 ep2 etp2 → dp1 | tp4 pp1 ep2 etp2 → dp1 | pp 2→1 |


Checklist

  • [ ] Identified all mr-scoped tests in gpt.yaml and moe.yaml not yet in *-1node.yaml
  • [ ] Read model config for each candidate
  • [ ] Classified trivial vs. adaptation needed
  • [ ] Created _1node/model_config.yaml for each test
  • [ ] Applied EP or PP reductions where needed
  • [ ] Created/updated recipe YAML with nodes: 1, gpus: 4
  • [ ] Assigned mr-github scope (+ mr-github-slim for 1–2 representative tests per recipe)
  • [ ] Verified no mr-github-slim overload (slim suite should stay small)