|
| 1 | +# Agent-readable model verification card. |
| 2 | +# status: unverified | verified | unsupported | not_applicable |
| 3 | + |
| 4 | +title: deepseek_v3 |
| 5 | +summary: > |
| 6 | + The canonical pretrain_performance.H100 1024-GPU BF16, |
| 7 | + pretrain_performance.GB200 256-GPU MXFP8, and pretrain_performance.GB300 |
| 8 | + 256-GPU MXFP8 recipes are verified. |
| 9 | + Timing and throughput metrics from future functional training items remain |
| 10 | + sanity checks rather than optimized performance results. Model-level |
| 11 | + conversion, forward correlation, inference, functional training, |
| 12 | + fine-tuning, and checkpoint-resume verification are deferred. |
| 13 | +verification_index: |
| 14 | + model_level: |
| 15 | + unverified: |
| 16 | + - hf_to_megatron_cpu |
| 17 | + - hf_to_megatron_gpu |
| 18 | + - megatron_to_hf_cpu |
| 19 | + - megatron_to_hf_gpu |
| 20 | + - manual_forward_pass |
| 21 | + - inference |
| 22 | + training: |
| 23 | + GB300: |
| 24 | + unverified: [pretrain, sft, sft_export_inference, sft_long_context, peft, checkpoint_resume] |
| 25 | + performance: |
| 26 | + H100: verified |
| 27 | + GB200: verified |
| 28 | + GB300: verified |
| 29 | +model: |
| 30 | + hf_id: deepseek-ai/DeepSeek-V3 |
| 31 | + hf_revision: e815299b0bcbac849fa540c768ef21845365c9eb # pragma: allowlist secret |
| 32 | + architecture: DeepseekV3ForCausalLM |
| 33 | + min_transformers_version: "5.8.0" |
| 34 | +verification_environment: |
| 35 | + base_container: nvcr.io/nvidia/nemo:26.08.rc5 |
| 36 | + bridge_commit: 79308d0d99fb8c09b3f1a22baa68a4ffa4f4ce1e # pragma: allowlist secret |
| 37 | + |
| 38 | +items: |
| 39 | + hf_to_megatron_cpu: |
| 40 | + status: unverified |
| 41 | + precision: bf16 |
| 42 | + command: null |
| 43 | + last_verified: null |
| 44 | + expected_result: > |
| 45 | + A CPU import of the pinned blockwise-FP8 Hugging Face checkpoint must |
| 46 | + dequantize every mapped weight correctly, persist a reloadable Megatron |
| 47 | + checkpoint, and pass a complete tensor audit. This workflow is deferred |
| 48 | + by this card. |
| 49 | +
|
| 50 | + hf_to_megatron_gpu: |
| 51 | + status: unverified |
| 52 | + precision: bf16 |
| 53 | + command: null |
| 54 | + last_verified: null |
| 55 | + expected_result: > |
| 56 | + A distributed GPU import of the pinned blockwise-FP8 Hugging Face |
| 57 | + checkpoint must complete every mapping, persist a reloadable Megatron |
| 58 | + checkpoint, and pass a complete tensor audit. This workflow is deferred |
| 59 | + by this card. |
| 60 | +
|
| 61 | + megatron_to_hf_cpu: |
| 62 | + status: unverified |
| 63 | + precision: bf16 |
| 64 | + command: null |
| 65 | + last_verified: null |
| 66 | + expected_result: > |
| 67 | + A CPU export from a verified Megatron checkpoint must preserve every |
| 68 | + mapped tensor and strictly reload as DeepseekV3ForCausalLM. This workflow |
| 69 | + is deferred by this card. |
| 70 | +
|
| 71 | + megatron_to_hf_gpu: |
| 72 | + status: unverified |
| 73 | + precision: bf16 |
| 74 | + command: null |
| 75 | + last_verified: null |
| 76 | + expected_result: > |
| 77 | + A distributed GPU export from a verified Megatron checkpoint must |
| 78 | + preserve every mapped tensor and strictly reload as |
| 79 | + DeepseekV3ForCausalLM. This workflow is deferred by this card. |
| 80 | +
|
| 81 | + manual_forward_pass: |
| 82 | + status: unverified |
| 83 | + precision: bf16 |
| 84 | + command: null |
| 85 | + last_verified: null |
| 86 | + expected_result: > |
| 87 | + A pinned first-token Hugging Face versus Megatron comparison must match |
| 88 | + the argmax token, reach cosine similarity of at least 0.99, and report |
| 89 | + maximum and mean absolute logit differences. This workflow is deferred |
| 90 | + by this card. |
| 91 | +
|
| 92 | + inference: |
| 93 | + status: unverified |
| 94 | + precision: bf16 |
| 95 | + command: null |
| 96 | + last_verified: null |
| 97 | + expected_result: > |
| 98 | + A synchronous deterministic Megatron generation from a verified |
| 99 | + checkpoint must finish with finite logits and a recorded literal greedy |
| 100 | + completion. This workflow is deferred by this card. |
| 101 | +
|
| 102 | + pretrain: |
| 103 | + GB300: |
| 104 | + status: unverified |
| 105 | + precision: bf16 |
| 106 | + enabled_features: {} |
| 107 | + command: null |
| 108 | + last_verified: null |
| 109 | + metrics: |
| 110 | + initial_loss: null |
| 111 | + final_loss: null |
| 112 | + last_10_steps_step_time_ms_avg: null |
| 113 | + last_10_steps_model_tflops_per_gpu_avg: null |
| 114 | + last_10_steps_tokens_per_second_per_gpu_avg: null |
| 115 | + expected_result: > |
| 116 | + A bounded public-data DeepSeek V3 pretraining run must complete with |
| 117 | + finite loss, zero skipped or NaN iterations, all five metrics, a saved |
| 118 | + post-setup configuration, and a reloadable final checkpoint. Functional |
| 119 | + training is deferred by this card. |
| 120 | +
|
| 121 | + sft: |
| 122 | + GB300: |
| 123 | + status: unverified |
| 124 | + precision: bf16 |
| 125 | + enabled_features: {} |
| 126 | + command: null |
| 127 | + last_verified: null |
| 128 | + metrics: |
| 129 | + initial_loss: null |
| 130 | + final_loss: null |
| 131 | + last_10_steps_step_time_ms_avg: null |
| 132 | + last_10_steps_model_tflops_per_gpu_avg: null |
| 133 | + last_10_steps_tokens_per_second_per_gpu_avg: null |
| 134 | + expected_result: > |
| 135 | + A pinned-data full-SFT run must finish with finite loss, zero skipped or |
| 136 | + NaN iterations, all five metrics, a saved post-setup configuration, and |
| 137 | + a reloadable final checkpoint. Fine-tuning is deferred by this card. |
| 138 | +
|
| 139 | + sft_export_inference: |
| 140 | + GB300: |
| 141 | + status: unverified |
| 142 | + precision: bf16 |
| 143 | + depends_on: sft |
| 144 | + commands: null |
| 145 | + last_verified: null |
| 146 | + expected_result: > |
| 147 | + A verified full-SFT checkpoint must export to Hugging Face, strictly |
| 148 | + reload, and produce a recorded deterministic checkpoint-backed |
| 149 | + completion. Training and post-SFT export verification are deferred by |
| 150 | + this card. |
| 151 | +
|
| 152 | + sft_long_context: |
| 153 | + GB300: |
| 154 | + status: unverified |
| 155 | + precision: bf16 |
| 156 | + enabled_features: {} |
| 157 | + command: null |
| 158 | + last_verified: null |
| 159 | + metrics: |
| 160 | + initial_loss: null |
| 161 | + final_loss: null |
| 162 | + last_10_steps_step_time_ms_avg: null |
| 163 | + last_10_steps_model_tflops_per_gpu_avg: null |
| 164 | + last_10_steps_tokens_per_second_per_gpu_avg: null |
| 165 | + expected_result: > |
| 166 | + A dedicated packed long-context SFT run must complete with context |
| 167 | + parallelism, finite loss, zero skipped or NaN iterations, all five |
| 168 | + metrics, and a reloadable checkpoint. This workflow is deferred by this |
| 169 | + card. |
| 170 | +
|
| 171 | + peft: |
| 172 | + GB300: |
| 173 | + status: unverified |
| 174 | + precision: bf16 |
| 175 | + enabled_features: {} |
| 176 | + command: null |
| 177 | + last_verified: null |
| 178 | + metrics: |
| 179 | + initial_loss: null |
| 180 | + final_loss: null |
| 181 | + last_10_steps_step_time_ms_avg: null |
| 182 | + last_10_steps_model_tflops_per_gpu_avg: null |
| 183 | + last_10_steps_tokens_per_second_per_gpu_avg: null |
| 184 | + expected_result: > |
| 185 | + A DeepSeek V3 PEFT recipe with an audited model-native attention adapter |
| 186 | + target set must complete with finite loss, zero skipped or NaN |
| 187 | + iterations, all five metrics, and a reloadable adapter checkpoint. This |
| 188 | + workflow is deferred by this card. |
| 189 | +
|
| 190 | + checkpoint_resume: |
| 191 | + GB300: |
| 192 | + status: unverified |
| 193 | + precision: bf16 |
| 194 | + depends_on: pretrain |
| 195 | + command: null |
| 196 | + last_verified: null |
| 197 | + metrics: |
| 198 | + initial_loss: null |
| 199 | + final_loss: null |
| 200 | + last_10_steps_step_time_ms_avg: null |
| 201 | + last_10_steps_model_tflops_per_gpu_avg: null |
| 202 | + last_10_steps_tokens_per_second_per_gpu_avg: null |
| 203 | + resume_comparison: |
| 204 | + reference_item: pretrain |
| 205 | + sentinel_steps: [51, 100] |
| 206 | + loss_relative_tolerance: 1.0e-2 |
| 207 | + loss_absolute_tolerance: 1.0e-6 |
| 208 | + sentinels_match: null |
| 209 | + expected_result: > |
| 210 | + A direct continuation must restore model, optimizer, scheduler, |
| 211 | + data-order, and RNG state, match declared sentinel losses, and save a |
| 212 | + reloadable checkpoint to a distinct output root. Resume verification is |
| 213 | + deferred by this card. |
| 214 | +
|
| 215 | + pretrain_performance: |
| 216 | + H100: |
| 217 | + status: verified |
| 218 | + precision: bf16 |
| 219 | + command: > |
| 220 | + ./scripts/training/train.sh --wait --nodes 128 --gpus-per-node 8 |
| 221 | + --recipe deepseek_v3_pretrain_1024gpu_h100_bf16_config |
| 222 | + --mode pretrain --max_steps 50 --seq_length 4096 |
| 223 | + logger.save_config_filepath=work/model-verification/deepseek-v3/h100-performance/ConfigContainer.yaml |
| 224 | + last_verified: 2026-08-15 |
| 225 | + metrics: |
| 226 | + initial_loss: 11.89496 |
| 227 | + final_loss: 6.815285 |
| 228 | + last_10_steps_step_time_ms_avg: 61756.130 |
| 229 | + last_10_steps_model_tflops_per_gpu_avg: 276.030 |
| 230 | + last_10_steps_tokens_per_second_per_gpu_avg: 1061.206 |
| 231 | + expected_result: > |
| 232 | + On exactly 1,024 H100 GPUs, the canonical 50-step mock-data BF16 recipe |
| 233 | + completed at TP2/PP8/VP4/CP1/EP64/ETP1 and GBS/MBS 16384/1. All 50 |
| 234 | + keyed rows had finite loss and throughput with zero skipped or NaN |
| 235 | + iterations, and the resolved configuration was saved. Steps 41-50 |
| 236 | + averaged 61,756.130 ms and 276.030 model TFLOP/s/GPU, passing gates of |
| 237 | + at most 62,000 ms and at least 275 TFLOP/s/GPU. Mock data and forced |
| 238 | + expert balancing make this benchmark-only evidence, not convergence |
| 239 | + evidence. |
| 240 | +
|
| 241 | + GB200: |
| 242 | + status: verified |
| 243 | + precision: fp8_mx |
| 244 | + command: > |
| 245 | + ./scripts/training/train.sh --wait --nodes 64 --gpus-per-node 4 |
| 246 | + --recipe deepseek_v3_pretrain_256gpu_gb200_fp8mx_config |
| 247 | + --mode pretrain --max_steps 50 --seq_length 4096 |
| 248 | + logger.save_config_filepath=work/model-verification/deepseek-v3/gb200-performance/ConfigContainer.yaml |
| 249 | + last_verified: 2026-08-14 |
| 250 | + metrics: |
| 251 | + initial_loss: 11.89246 |
| 252 | + final_loss: 6.311604 |
| 253 | + last_10_steps_step_time_ms_avg: 13841.180 |
| 254 | + last_10_steps_model_tflops_per_gpu_avg: 1231.040 |
| 255 | + last_10_steps_tokens_per_second_per_gpu_avg: 4734.856 |
| 256 | + expected_result: > |
| 257 | + On exactly 256 GB200 GPUs, the canonical 50-step mock-data MXFP8 recipe |
| 258 | + completed at TP1/PP4/VP4/CP1/EP64/ETP1 and GBS/MBS 4096/1. All 50 keyed |
| 259 | + rows had finite loss and throughput with zero skipped or NaN iterations, |
| 260 | + and the resolved configuration was saved. Steps 41-50 averaged |
| 261 | + 13,841.180 ms and 1,231.040 model TFLOP/s/GPU, passing gates of at most |
| 262 | + 14,000 ms and at least 1,200 TFLOP/s/GPU. Mock data, forced expert |
| 263 | + balancing, and reduced-precision optimizer moments make this |
| 264 | + benchmark-only evidence, not convergence evidence. |
| 265 | +
|
| 266 | + GB300: |
| 267 | + status: verified |
| 268 | + precision: fp8_mx |
| 269 | + command: > |
| 270 | + ./scripts/training/train.sh --wait --nodes 64 --gpus-per-node 4 |
| 271 | + --recipe deepseek_v3_pretrain_256gpu_gb300_fp8mx_config |
| 272 | + --mode pretrain --max_steps 50 --seq_length 4096 |
| 273 | + logger.save_config_filepath=work/model-verification/deepseek-v3/gb300-performance/ConfigContainer.yaml |
| 274 | + last_verified: 2026-08-14 |
| 275 | + metrics: |
| 276 | + initial_loss: 11.89526 |
| 277 | + final_loss: 6.236621 |
| 278 | + last_10_steps_step_time_ms_avg: 10667.300 |
| 279 | + last_10_steps_model_tflops_per_gpu_avg: 1597.310 |
| 280 | + last_10_steps_tokens_per_second_per_gpu_avg: 6143.635 |
| 281 | + expected_result: > |
| 282 | + On exactly 256 GB300 GPUs, the canonical 50-step mock-data MXFP8 recipe |
| 283 | + completed at TP1/PP2/VP8/CP1/EP32/ETP1 and GBS/MBS 4096/1. All 50 keyed |
| 284 | + rows had finite loss and throughput with zero skipped or NaN iterations, |
| 285 | + and the resolved configuration was saved. Steps 41-50 averaged |
| 286 | + 10,667.300 ms and 1,597.310 model TFLOP/s/GPU, passing gates of at most |
| 287 | + 11,000 ms and at least 1,550 TFLOP/s/GPU. Mock data, forced expert |
| 288 | + balancing, and reduced-precision optimizer moments make this |
| 289 | + benchmark-only evidence, not convergence evidence. |
0 commit comments