Skip to content

Commit 15e82b5

Browse files
authored
docs(model): list verification index items explicitly (#5029)
Signed-off-by: yaoyu-33 <yaoyu.094@gmail.com>
1 parent 40a49d8 commit 15e82b5

6 files changed

Lines changed: 52 additions & 39 deletions

File tree

examples/model_verification_cards/moonlight-16b-a3b/card.yaml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,18 @@ summary: >
99
and training.
1010
verification_index:
1111
model_level:
12-
verified: all
12+
verified:
13+
- hf_to_megatron_cpu
14+
- hf_to_megatron_gpu
15+
- megatron_to_hf_cpu
16+
- megatron_to_hf_gpu
17+
- manual_forward_pass
18+
- inference
1319
training:
1420
H100:
15-
verified: all
21+
verified: [pretrain, sft, sft_export_inference, sft_long_context, peft, checkpoint_resume]
1622
GB200:
17-
unverified: all
23+
unverified: [pretrain, sft, sft_export_inference, sft_long_context, peft, checkpoint_resume]
1824
model:
1925
hf_id: moonshotai/Moonlight-16B-A3B
2026
hf_revision: 476b36a473d4467f94469414bef6cee75c9c8172 # pragma: allowlist secret

examples/model_verification_cards/nemotron-3-nano-4b/card.yaml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,18 @@ summary: >
99
and training.
1010
verification_index:
1111
model_level:
12-
verified: all
12+
verified:
13+
- hf_to_megatron_cpu
14+
- hf_to_megatron_gpu
15+
- megatron_to_hf_cpu
16+
- megatron_to_hf_gpu
17+
- manual_forward_pass
18+
- inference
1319
training:
1420
H100:
15-
verified: all
21+
verified: [pretrain, sft, sft_export_inference, sft_long_context, peft, checkpoint_resume]
1622
GB200:
17-
unverified: all
23+
unverified: [pretrain, sft, sft_export_inference, sft_long_context, peft, checkpoint_resume]
1824
model:
1925
hf_id: nvidia/NVIDIA-Nemotron-3-Nano-4B-BF16
2026
hf_revision: dfaf35de3e30f1867dd8dbc38a7fc9fb52d3914f # pragma: allowlist secret

examples/model_verification_cards/qwen3-30b-a3b/card.yaml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,18 @@ summary: >
99
Qwen3-30B-A3B support verification covers conversion, inference, and training.
1010
verification_index:
1111
model_level:
12-
verified: all
12+
verified:
13+
- hf_to_megatron_cpu
14+
- hf_to_megatron_gpu
15+
- megatron_to_hf_cpu
16+
- megatron_to_hf_gpu
17+
- manual_forward_pass
18+
- inference
1319
training:
1420
H100:
15-
verified: all
21+
verified: [pretrain, sft, sft_export_inference, sft_long_context, peft, checkpoint_resume]
1622
GB200:
17-
unverified: all
23+
unverified: [pretrain, sft, sft_export_inference, sft_long_context, peft, checkpoint_resume]
1824
performance:
1925
H100: verified
2026
model:

examples/model_verification_cards/qwen3-8b/card.yaml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,18 @@ summary: >
1414
training.
1515
verification_index:
1616
model_level:
17-
verified: all
17+
verified:
18+
- hf_to_megatron_cpu
19+
- hf_to_megatron_gpu
20+
- megatron_to_hf_cpu
21+
- megatron_to_hf_gpu
22+
- manual_forward_pass
23+
- inference
1824
training:
1925
H100:
20-
verified: all
26+
verified: [pretrain, sft, sft_export_inference, sft_long_context, peft, checkpoint_resume]
2127
GB200:
22-
unverified: all
28+
unverified: [pretrain, sft, sft_export_inference, sft_long_context, peft, checkpoint_resume]
2329
model:
2430
hf_id: Qwen/Qwen3-8B
2531
hf_revision: b968826d9c46dd6066d109eabc6255188de91218 # pragma: allowlist secret

skills/create-model-verification-card/SKILL.md

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -141,23 +141,30 @@ Group item names under the same four status names used by the detailed items.
141141
For an explicitly indexed hardware target with no corresponding item leaf,
142142
summarize the missing verification as `unverified`; do not add empty item
143143
leaves or placeholder commands merely to populate the index. Omit empty status
144-
buckets, so a hardware target with no verified training is written only as
145-
`unverified: all`, never as `verified: []`. Use the scalar `all` when every
146-
item in that scope has the same status; otherwise list the exact item names.
144+
buckets and always list every item name explicitly, even when every item in the
145+
scope has the same status. Never use the scalar `all` in `verification_index`:
146+
an explicit inventory makes it clear which existing items were assessed when
147+
new items are added later.
147148

148149
For example, a card with partial H100 functional-training coverage and no
149150
GB200 functional-training verification uses:
150151

151152
```yaml
152153
verification_index:
153154
model_level:
154-
verified: all
155+
verified:
156+
- hf_to_megatron_cpu
157+
- hf_to_megatron_gpu
158+
- megatron_to_hf_cpu
159+
- megatron_to_hf_gpu
160+
- manual_forward_pass
161+
- inference
155162
training:
156163
H100:
157164
verified: [sft, sft_export_inference, sft_long_context, peft]
158165
unverified: [pretrain, checkpoint_resume]
159166
GB200:
160-
unverified: all
167+
unverified: [pretrain, sft, sft_export_inference, sft_long_context, peft, checkpoint_resume]
161168
```
162169

163170
When a canonical performance recipe exists, mirror only its concrete leaves:
@@ -594,8 +601,8 @@ an item verified merely to make validation pass.
594601
all four metrics for each verified training leaf; never record a private
595602
cluster name or retain the old `gpu_type` field.
596603
- Keep `verification_index` synchronized with `items`, omit empty status
597-
buckets, and use `unverified: all` for an indexed hardware target with no
598-
verified functional-training evidence.
604+
buckets, list every item name explicitly, and never use the scalar `all` in
605+
the index.
599606
- Audit the resolved convergence contract before each training run; align it
600607
with `qwen3_30b_a3b_convergence_v1` or record the exception and classify the
601608
result as support verification rather than cross-model convergence evidence.

skills/create-model-verification-card/scripts/validate_card.py

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -346,16 +346,15 @@ def _validate_index_status_buckets(
346346
scope_names = frozenset(scope)
347347
assignments: dict[str, str] = {}
348348
assignment_paths: dict[str, tuple[str, ...]] = {}
349-
all_statuses: list[str] = []
350349
for status, members in buckets.items():
351350
if status not in STATUSES:
352351
continue
353352
bucket_path = (*path, status)
354353
if members == "all":
355-
all_statuses.append(status)
354+
errors.append(f"{_pointer(*bucket_path)}: list every item name explicitly; scalar all is not allowed")
356355
continue
357356
if not isinstance(members, list) or not members:
358-
errors.append(f"{_pointer(*bucket_path)}: expected all or a non-empty item list")
357+
errors.append(f"{_pointer(*bucket_path)}: expected a non-empty item list")
359358
continue
360359
for index, item_name in enumerate(members):
361360
item_path = (*bucket_path, str(index))
@@ -368,23 +367,6 @@ def _validate_index_status_buckets(
368367
assignments[item_name] = status
369368
assignment_paths[item_name] = bucket_path
370369

371-
if all_statuses:
372-
if len(buckets) != 1 or len(all_statuses) != 1:
373-
errors.append(f"{_pointer(*path)}: all must be the only status bucket in its scope")
374-
else:
375-
status = all_statuses[0]
376-
assignments = dict.fromkeys(scope, status)
377-
assignment_paths = dict.fromkeys(scope, (*path, status))
378-
if len(expected_statuses) == len(scope) and any(
379-
expected_statuses[item_name] != status for item_name in scope
380-
):
381-
errors.append(
382-
f"{_pointer(*path, status)}: all is allowed only when every detailed item in the scope "
383-
f"has status {status}"
384-
)
385-
elif len(assignments) == len(scope) and len(set(assignments.values())) == 1:
386-
errors.append(f"{_pointer(*path)}: use scalar all when every item in the scope has the same status")
387-
388370
missing_items = [item_name for item_name in scope if item_name not in assignments]
389371
if missing_items:
390372
errors.append(f"{_pointer(*path)}: every scope item must appear exactly once; missing {missing_items}")

0 commit comments

Comments
 (0)