Skip to content

[AMD] Track Miles MI355X daily images and enabled tests #2256

Description

@XinyuJiangCMU

Scope

Track the Miles MI355X daily pipeline:

  1. Build dated MI35X images from the latest Miles main.
  2. Run the currently enabled ROCm 7.2 GPU tests on MI355X.

Live status

View Purpose
Miles pipeline dashboard Visual build → image → test history, refreshed hourly
ROCm 7.2 daily image Image build used by the daily tests
ROCm 7.2 daily tests Live queued/running/result status and logs

The dashboard reports suite-level status. GitHub Actions logs remain the source of truth for individual test results.

Daily pipeline

Step Schedule Output
ROCm 7.2 MI35X image 12:00 UTC rocm/sgl-dev:miles-rocm720-mi35x-YYYYMMDD
ROCm 7.2 MI355X tests 17:30 UTC 2-GPU, 4-GPU, and 8-GPU suites

The test workflow selects the newest ROCm 7.2 dated image available.

Currently enabled GPU tests

The daily workflow currently selects 14 test files:

Suite Enabled files Runner pool
stage-c-2-gpu-mi350 1 linux-mi35x-gpu-2
stage-c-4-gpu-mi350 6 linux-mi35x-gpu-8
stage-c-8-gpu-mi350 7 linux-mi35x-gpu-8
Total 14
tests/e2e/
├── ckpt/                                      [8 GPU]
│   └── test_qwen3_4B_ckpt.py
├── long/                                      [2 GPU]
│   └── test_qwen2.5_0.5B_gsm8k_async.py
├── lora/                                      [4 GPU]
│   └── test_lora_qwen2.5_0.5B.py
├── megatron/                                  [4 GPU]
│   ├── test_mimo_7B_mtp_only_grad.py
│   └── test_qwen3_30B_A3B/
│       ├── test_baseline.py
│       └── test_r3_baseline.py
├── precision/                                 [4 GPU]
│   ├── test_hf_attention_cp_relayout.py
│   └── test_qwen3_5_cp_correctness.py
├── sglang_config/                             [8 GPU]
│   ├── test_sglang_config.py
│   ├── test_sglang_config_mixed_offload.py
│   └── test_sglang_config_mixed_offload_ft.py
└── short/                                     [8 GPU]
    ├── test_qwen2.5_0.5B_gsm8k_async_short.py
    ├── test_qwen2.5_0.5B_gsm8k_short.py
    └── test_run_megatron.py

The workflow invokes all three suites with --match-all-labels.

Pending review

tests/e2e/                                      [4 GPU]
├── fsdp/test_qwen3_4B_fsdp_hybrid_shard_r2s2.py
├── megatron/
│   ├── model_scripts/
│   │   ├── test_deepseek_v4_flash_4layer_ci.py
│   │   ├── test_glm5_2_744b_a40b_5layer_ci.py
│   │   └── test_inkling_small_4layer_ci.py
│   ├── test_glm47_flash/test_amd_r3_mtp.py
│   ├── test_qwen3_30B_A3B/test_amd_moriep_fp8_bridge.py
│   ├── test_qwen3_4B_offload_disk_stream.py
│   └── test_qwen3_5_35B_A3B_mtp/test_amd_mtp1_spec_v2_r3.py
tests/
├── e2e/                                        [2 GPU]
│   ├── fsdp/test_qwen3_0.6B_megatron_fsdp_align.py
│   ├── long/test_qwen2.5_0.5B_gsm8k.py
│   ├── sglang/test_session_server_multi_role/test_qwen3.py
│   └── short/test_qwen3_0.6B_fsdp_colocated_2xGPU.py
├── fast-gpu/test_run_megatron_worker_main.py    [2 GPU]
├── e2e/                                        [4 GPU]
│   ├── fsdp/test_qwen3_0.6B_fsdp_distributed.py
│   ├── megatron/
│   │   ├── test_qwen3_4B_offload_disk.py
│   │   ├── test_qwen3_4B_offload_disk_stream.py
│   │   ├── test_qwen3_4B_ppo.py
│   │   └── test_qwen3_4B_variable_gbs.py
│   └── sglang/
│       ├── test_chat_input_ids_equivalence.py
│       └── test_session_server_multi_role/test_qwen35.py
├── fast-gpu/test_det_process_group.py           [4 GPU]
└── e2e/                                        [8 GPU]
    ├── megatron/
    │   ├── test_qwen3_30B_A3B/test_disagg_broadcast.py
    │   ├── test_qwen3_30B_A3B/test_fully_async.py
    │   ├── test_qwen3_4B_disk_delta.py
    │   └── test_qwen3_4b_fully_async_eval.py
    └── short/
        ├── test_dumper.py
        ├── test_qwen2.5_0.5B_compact_rollout.py
        ├── test_qwen2.5_0.5B_fully_async_eval.py
        └── test_qwen2.5_0.5B_opd_sglang.py

GPU tests to enable next

This backlog only tracks GPU paths that have a plausible MI355X implementation. CPU tests and tests tied to NVFP4/Blackwell-only recipes, CUDA-only INT4 or modelopt kernels, or H200-specific FA3 parity are excluded.

tests/
├── e2e/
│   ├── fsdp/
│   │   ├── r3/
│   │   │   ├── test_glm47_flash_r3.py
│   │   │   ├── test_qwen3_30b_a3b_r3.py
│   │   │   └── test_qwen3_5_35b_a3b_r3.py
│   │   ├── test_qwen3_4B_fsdp_hybrid_shard_r2s4.py
│   │   ├── test_qwen3_4B_fsdp_true_on_policy.py
│   │   └── test_qwen3_vl_4B_fsdp.py
│   ├── ft/
│   │   ├── test_trainer_ft_deterministic_dp2_cp2_pp2.py
│   │   ├── test_trainer_ft_deterministic_dp2_cp2_real_rollout.py
│   │   ├── test_trainer_ft_deterministic_dp2_cp2_tp2_ep2.py
│   │   ├── test_trainer_ft_deterministic_dp4_cp2.py
│   │   ├── test_trainer_ft_no_failure_dp2_cp2_pp2.py
│   │   ├── test_trainer_ft_no_failure_dp2_cp2_real_rollout.py
│   │   ├── test_trainer_ft_no_failure_dp2_cp2_tp2_ep2.py
│   │   ├── test_trainer_ft_no_failure_dp4_cp2.py
│   │   ├── test_trainer_ft_with_failure_dp2_cp2_pp2.py
│   │   ├── test_trainer_ft_with_failure_dp2_cp2_real_rollout_dense.py
│   │   └── test_trainer_ft_with_failure_dp2_cp2_tp2_ep2.py
│   ├── long/
│   │   └── test_qwen3_0.6B_verifiers.py
│   ├── megatron/
│   │   ├── model_scripts/
│   │   │   ├── test_deepseek_v32_5layer_fp8.py
│   │   │   ├── test_glm5_1_744b_a40b_6layer_lora_ci.py
│   │   │   ├── test_glm5_2_744b_a40b_5layer_lora_ci.py
│   │   │   ├── test_glm5_744b_a40b_4layer_ci.py
│   │   │   ├── test_glm5_744b_a40b_4layer_r3.py
│   │   │   ├── test_gpt_oss_20b_moe_lora_ci.py
│   │   │   ├── test_inkling_small_4layer_lora_ci.py
│   │   │   └── test_nemotron_3_ultra_4layer_ci.py
│   │   ├── test_glm47_flash/
│   │   │   └── test_r3_mtp.py
│   │   ├── test_qwen3_30B_A3B/
│   │   │   ├── test_deepep_fp8.py
│   │   │   └── test_dp_attention.py       # AITER hipIpcGetMemHandle invalid argument
│   │   ├── test_qwen3_5_35B_A3B_mtp/
│   │   │   └── test_mtp0_spec_v2.py
│   │   ├── test_qwen3_30B_A3B_p2p.py
│   │   └── test_qwen3_5_35b_a3b_lora_ci.py
│   └── sglang/
│       └── test_session_server_multi_role/
│           ├── test_deepseekv4.py
│           ├── test_glm47.py
│           └── test_nemotron3.py
└── fast-gpu/
    └── test_fsdp_hybrid_shard.py

GPU tests intentionally skipped

These already carry disabled= on their register_cuda_ci, so upstream does not run them on any hardware either.

tests/
├── e2e/
│   ├── ckpt/
│   │   └── test_glm47_flash_ckpt.py
│   ├── ft/
│   │   ├── test_trainer_ft_random_dp2_cp2_real_rollout.py
│   │   ├── test_trainer_ft_random_dp2_cp2_tp2_ep2.py
│   │   └── test_trainer_ft_realistic_gsm8k.py
│   ├── megatron/
│   │   ├── test_glm47_flash/
│   │   │   └── test_r3_mtp_deepep.py
│   │   ├── test_qwen3_30B_A3B/
│   │   │   └── test_r3_deepep_fp8.py
│   │   ├── test_quick_start_glm4_9B.py
│   │   └── test_qwen3_5_35B_A3B_cp.py
│   ├── precision/
│   │   └── test_qwen3_0.6B_parallel_check.py
│   └── sglang/
│       ├── test_session_server_multi_role/
│       │   └── test_minimax_m27.py
│       └── test_r3_router_equivalence.py
└── fast-gpu/
    ├── test_mxfp8_quantizer.py
    └── test_semaphore.py

These tests are outside the MI355X enablement backlog because their current test contract is cuda-specific. They can be reconsidered only after the test or kernel path is redesigned for ROCm.

tests/
├── fast-gpu/
│   ├── test_nvfp4_quantizer.py
│   └── test_quantizer_ci
└── e2e/
    ├── megatron/
    │   ├── model_scripts/
    │   │   ├── test_deepseek_v32_5layer_mxfp8.py
    │   │   └── test_kimi_k25_2layer_ci.py
    │   ├── test_glm5_2_744b_a40b_5layer_nvfp4.py
    │   ├── test_joyai_llm_flash_mxfp8.py
    │   └── test_qwen3_30B_A3B/
    │       └── test_int4_rollout.py
    └── sglang/
        ├── test_session_v1_v2_parity.py
        └── test_session_server_multi_role/
            └── test_inkling.py
  • NVFP4 and the B200 MXFP8 recipes require NVIDIA/Blackwell paths.
  • The Kimi K2.5 and Qwen3 INT4 tests use the CUDA-only fake INT4 quantization extension.
  • Session parity asserts an H200 device and FA3; the Inkling session test uses an NVFP4 checkpoint.

Last audited against Miles main on 2026-08-13.
Thanks to CI dashboard owners @michaelzhang-ai, @bingxche for making the Miles pipeline easy to track.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions