Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
3105070
feat: add ATOM and Infera validation lanes
cquil11 Aug 11, 2026
226a875
docs: link ATOM validation pull request
cquil11 Aug 11, 2026
dd597d5
fix: use writable Enroot staging runtime
cquil11 Aug 11, 2026
98ac36d
fix: retry transient container imports
cquil11 Aug 11, 2026
c16663b
fix: install orchestration binaries on MI300X
cquil11 Aug 11, 2026
73d5e8e
fix: stage srt-slurm infrastructure binaries
cquil11 Aug 11, 2026
e27c76f
fix(srt): pin Infera worker-registry readiness
cquil11 Aug 11, 2026
5021e0e
fix(atom): validate upstream Infera KV event decoder
cquil11 Aug 11, 2026
4ef1368
Emit per-role average power on multinode disaggregated runs / 多节点分离式运…
edwingao28 Aug 11, 2026
f307b55
fix(mi300x): stage every eligible srt node
cquil11 Aug 11, 2026
e5066e6
fix(mi300x): cover the complete eligible node set
cquil11 Aug 11, 2026
f6b200f
fix(mi300x): recover incomplete runtime checkouts
cquil11 Aug 11, 2026
c62f6e3
Retune DSV4 B300 AgentX MTP sweep / 调优 DSV4 B300 AgentX MTP 扫描 (#2536)
ivanium Aug 11, 2026
bb97fd7
test(mi355x): add ATOM and Infera validation lanes
cquil11 Aug 11, 2026
85f55d6
fix(atom): keep Mooncake transfer paths reusable
cquil11 Aug 11, 2026
1a5b36f
fix(atom): validate Mooncake TCP transfer path
cquil11 Aug 11, 2026
6c5311a
fix(atom): verify installed framework versions
cquil11 Aug 11, 2026
d71afb3
docs(atom): record validated TCP transport
cquil11 Aug 11, 2026
98b9b50
Merge remote-tracking branch 'origin/main' into agent/atom-infera-val…
cquil11 Aug 11, 2026
2e2f375
fix(atom): pin tcp-only Mooncake source overlay
cquil11 Aug 11, 2026
bdc0e20
fix: pin fetchable stable ATOM overlay
cquil11 Aug 11, 2026
f9bdbe1
fix: pin Mooncake TCP transport guard
cquil11 Aug 11, 2026
eb814bb
fix(ci): restore e2e eval matrix output
cquil11 Aug 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/AGENT_OPERATIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ For multi-node configurations, `--all-evals` creates one eval job per engine top

Single-node fixed-sequence results may include `power_valid`, `avg_power_w`, `avg_total_gpu_power_w`, `total_gpu_energy_j`, and joules per query/input/output/total token. Invalid telemetry records `power_valid: 0` without energy metrics and fails only with `REQUIRE_POWER=1`.

Multinode disaggregated results add `prefill_gpu_energy_j`, `decode_gpu_energy_j`, `prefill_joules_per_input_token`, and `decode_joules_per_output_token`. Role energy covers the full formal benchmark window, not kernel-level phases.
Multinode disaggregated results add `prefill_gpu_energy_j`, `decode_gpu_energy_j`, `prefill_avg_power_w`, `decode_avg_power_w`, `prefill_joules_per_input_token`, and `decode_joules_per_output_token`. Role energy covers the full formal benchmark window, not kernel-level phases, and the role watts are that energy divided by the same window and by the role's GPU count.

For srt-slurm recipes, `telemetry: {provider: dcgm-power}` enables official energy collection. `runners/launch_gb200-nv.sh` and `runners/launch_gb300-nv.sh` are the source of truth for `POWER_SRT_SLURM_PIN`. CI derives `POWER_PRODUCER_SHA` from the launcher stamp. `utils/test_gb200_power_official_contract.py` and `utils/test_gb300_power_official_contract.py` enforce the recipe/launcher contract. Only `PRECISION=fp8` dcgm-power lanes are validated.

Expand Down
1 change: 1 addition & 0 deletions .github/workflows/e2e-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,7 @@ jobs:
MULTI_AGENTIC_EVAL=$(echo "$CONFIG_JSON" | python3 -c "import sys,json; d=json.load(sys.stdin); print(json.dumps([x for x in d if x.get('scenario-type') == 'agentic-coding' and 'prefill' in x and x.get('run-eval', False)]))" | score_matrix multi-agentic-eval)
SINGLE=$(echo "$CONFIG_JSON" | python3 -c "import sys,json; d=json.load(sys.stdin); print(json.dumps([x for x in d if 'prefill' not in x and x.get('scenario-type') != 'agentic-coding' and not x.get('eval-only', False)]))" | score_matrix single)
MULTI=$(echo "$CONFIG_JSON" | python3 -c "import sys,json; d=json.load(sys.stdin); print(json.dumps([x for x in d if 'prefill' in x and x.get('scenario-type') != 'agentic-coding' and not x.get('eval-only', False)]))" | score_matrix multi)
EVALS=$(echo "$CONFIG_JSON" | python3 -c "import sys,json; d=json.load(sys.stdin); print(json.dumps([x for x in d if 'prefill' not in x and x.get('scenario-type') != 'agentic-coding' and x.get('run-eval', False)]))" | score_matrix eval)
MULTI_EVAL=$(echo "$CONFIG_JSON" | python3 -c "import sys,json; d=json.load(sys.stdin); print(json.dumps([x for x in d if 'prefill' in x and x.get('scenario-type') != 'agentic-coding' and x.get('run-eval', False)]))" | score_matrix multi-eval)
{
echo "agentic-config=$AGENTIC"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# Small two-worker aggregate correctness lane for the srt-slurm ATOM backend
# and Infera's dynamic KV-aware router. This validates orchestration, not tuning.

name: "mi300x-atom-qwen3-0.6b-agg-2w-fixed-seq"

model:
path: "hf:Qwen/Qwen3-0.6B"
container: "infera-atom-v0.1.1"
precision: "fp16"

identity:
model:
repo: "Qwen/Qwen3-0.6B"
container:
image: "rocm/infera:atom-v0.1.1"
frameworks:
atom: "0.1.4.dev113+g5837907f3"
infera: "0.0.0"

slurm:
time_limit: "00:45:00"

resources:
gpu_type: "mi300x"
gpus_per_node: 8
agg_nodes: 1
agg_workers: 2
gpus_per_agg: 1

frontend:
type: infera
enable_multiple_frontends: false
env:
PYTHONPATH: "/atom-source:/infera-source"
args:
router-policy: kv-aware

backend:
type: atom
enable_kv_events: true
aggregated_environment:
HF_HOME: "/hf_hub_cache"
HF_HUB_CACHE: "/hf_hub_cache"
HUGGINGFACE_HUB_CACHE: "/hf_hub_cache"
PYTHONPATH: "/atom-source:/infera-source"
PYTHONUNBUFFERED: "1"
OMP_NUM_THREADS: "1"
atom_config:
aggregated:
kv_cache_dtype: fp8
gpu-memory-utilization: 0.50
max-model-len: 2048
max-num-seqs: 8
block-size: 16
enforce-eager: true

srun_options:
container-writable: ""
container-remap-root: ""
mem: "0"

health_check:
max_attempts: 240
interval_seconds: 5

benchmark:
type: custom
command: |
set -euo pipefail
result_root="/results/${SLURM_JOB_ID}"
mkdir -p "${result_root}/fixed-seq"
trap 'tar -C /logs -czf "'"${result_root}"'/runtime-logs.tar.gz" . 2>/dev/null || true' EXIT
for concurrency in 1 4; do
python3 /infmax-workspace/utils/bench_serving/benchmark_serving.py \
--backend openai \
--base-url "http://${SRT_FRONTEND_HOST}:${SRT_FRONTEND_PORT}" \
--endpoint /v1/completions \
--model Qwen/Qwen3-0.6B \
--tokenizer Qwen/Qwen3-0.6B \
--dataset-name random \
--random-input-len 128 \
--random-output-len 32 \
--random-prefix-len 96 \
--random-range-ratio 1.0 \
--random-num-workers 1 \
--num-warmups "${concurrency}" \
--num-prompts "$((concurrency * 4))" \
--max-concurrency "${concurrency}" \
--request-rate inf \
--ignore-eos \
--disable-tqdm \
--save-result \
--result-dir "${result_root}/fixed-seq" \
--result-filename "qwen3-0.6b-atom-agg-isl128-osl32-c${concurrency}.json";
done
env:
HF_HOME: /hf_hub_cache
HF_HUB_CACHE: /hf_hub_cache
HUGGINGFACE_HUB_CACHE: /hf_hub_cache
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# Small two-node ATOM P/D correctness lane. Infera discovers both workers,
# routes the completions API, and ATOM transfers KV through Mooncake.

name: "mi300x-atom-qwen3-0.6b-disagg-1p1d-fixed-seq"

model:
path: "hf:Qwen/Qwen3-0.6B"
container: "infera-atom-v0.1.1"
precision: "fp16"

identity:
model:
repo: "Qwen/Qwen3-0.6B"
container:
image: "rocm/infera:atom-v0.1.1"
frameworks:
atom: "0.1.4.dev113+g5837907f3"
infera: "0.0.0"

slurm:
time_limit: "00:45:00"

resources:
gpu_type: "mi300x"
gpus_per_node: 8
prefill_nodes: 1
decode_nodes: 1
prefill_workers: 1
decode_workers: 1
gpus_per_prefill: 1
gpus_per_decode: 1

frontend:
type: infera
enable_multiple_frontends: false
env:
PYTHONPATH: "/atom-source:/infera-source"
args:
router-policy: kv-aware

backend:
type: atom
connector: mooncake
# The stable atom-v0.1.1 image bundles Mooncake before ROCm DMA-BUF memory
# registration support. Use its supported TCP transport for this correctness
# lane; connection pooling is supplied by the srt-slurm ATOM adapter.
mooncake_protocol: tcp
enable_kv_events: true
prefill_environment: &worker_environment
HF_HOME: "/hf_hub_cache"
HF_HUB_CACHE: "/hf_hub_cache"
HUGGINGFACE_HUB_CACHE: "/hf_hub_cache"
PYTHONPATH: "/atom-source:/infera-source"
PYTHONUNBUFFERED: "1"
OMP_NUM_THREADS: "1"
decode_environment: *worker_environment
atom_config:
prefill: &worker_config
kv_cache_dtype: fp8
gpu-memory-utilization: 0.50
max-model-len: 2048
max-num-seqs: 8
block-size: 16
enforce-eager: true
no-enable_prefix_caching: true
decode: *worker_config

srun_options:
container-writable: ""
container-remap-root: ""
mem: "0"

health_check:
max_attempts: 240
interval_seconds: 5

benchmark:
type: custom
command: |
set -euo pipefail
result_root="/results/${SLURM_JOB_ID}"
mkdir -p "${result_root}/fixed-seq"
trap 'tar -C /logs -czf "'"${result_root}"'/runtime-logs.tar.gz" . 2>/dev/null || true' EXIT
for concurrency in 1 4; do
python3 /infmax-workspace/utils/bench_serving/benchmark_serving.py \
--backend openai \
--base-url "http://${SRT_FRONTEND_HOST}:${SRT_FRONTEND_PORT}" \
--endpoint /v1/completions \
--model Qwen/Qwen3-0.6B \
--tokenizer Qwen/Qwen3-0.6B \
--dataset-name random \
--random-input-len 128 \
--random-output-len 32 \
--random-prefix-len 96 \
--random-range-ratio 1.0 \
--random-num-workers 1 \
--num-warmups "${concurrency}" \
--num-prompts "$((concurrency * 4))" \
--max-concurrency "${concurrency}" \
--request-rate inf \
--ignore-eos \
--disable-tqdm \
--save-result \
--result-dir "${result_root}/fixed-seq" \
--result-filename "qwen3-0.6b-atom-disagg-isl128-osl32-c${concurrency}.json";
done
env:
HF_HOME: /hf_hub_cache
HF_HUB_CACHE: /hf_hub_cache
HUGGINGFACE_HUB_CACHE: /hf_hub_cache
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# Small two-worker aggregate correctness lane for ATOM and Infera on MI355X.
# It validates orchestration and KV-aware routing rather than performance.

name: "mi355x-atom-qwen3-0.6b-agg-2w-fixed-seq"

model:
path: "hf:Qwen/Qwen3-0.6B"
container: "infera-atom-v0.1.1"
precision: "fp16"

identity:
model:
repo: "Qwen/Qwen3-0.6B"
container:
image: "rocm/infera:atom-v0.1.1"
frameworks:
atom: "0.1.4.dev113+g5837907f3"
infera: "0.0.0"

slurm:
time_limit: "00:30:00"

resources:
gpu_type: "mi355x"
gpus_per_node: 8
agg_nodes: 1
agg_workers: 2
gpus_per_agg: 1

frontend:
type: infera
enable_multiple_frontends: false
env:
PYTHONPATH: "/atom-source:/infera-source"
args:
router-policy: kv-aware

backend:
type: atom
enable_kv_events: true
aggregated_environment:
HF_HOME: "/hf_hub_cache"
HF_HUB_CACHE: "/hf_hub_cache/hub"
HUGGINGFACE_HUB_CACHE: "/hf_hub_cache/hub"
PYTHONPATH: "/atom-source:/infera-source"
PYTHONUNBUFFERED: "1"
OMP_NUM_THREADS: "1"
atom_config:
aggregated:
kv_cache_dtype: fp8
gpu-memory-utilization: 0.50
max-model-len: 2048
max-num-seqs: 8
block-size: 16
enforce-eager: true

srun_options:
container-writable: ""
container-remap-root: ""
mem: "0"

health_check:
max_attempts: 180
interval_seconds: 5

benchmark:
type: custom
command: |
set -euo pipefail
result_root="/results/${SLURM_JOB_ID}"
mkdir -p "${result_root}/fixed-seq"
trap 'tar -C /logs -czf "'"${result_root}"'/runtime-logs.tar.gz" . 2>/dev/null || true' EXIT
for concurrency in 1 4; do
python3 /infmax-workspace/utils/bench_serving/benchmark_serving.py \
--backend openai \
--base-url "http://${SRT_FRONTEND_HOST}:${SRT_FRONTEND_PORT}" \
--endpoint /v1/completions \
--model Qwen/Qwen3-0.6B \
--tokenizer Qwen/Qwen3-0.6B \
--dataset-name random \
--random-input-len 128 \
--random-output-len 32 \
--random-prefix-len 96 \
--random-range-ratio 1.0 \
--random-num-workers 1 \
--num-warmups "${concurrency}" \
--num-prompts "$((concurrency * 4))" \
--max-concurrency "${concurrency}" \
--request-rate inf \
--ignore-eos \
--disable-tqdm \
--save-result \
--result-dir "${result_root}/fixed-seq" \
--result-filename "qwen3-0.6b-atom-mi355x-agg-isl128-osl32-c${concurrency}.json";
done
env:
HF_HOME: /hf_hub_cache
HF_HUB_CACHE: /hf_hub_cache/hub
HUGGINGFACE_HUB_CACHE: /hf_hub_cache/hub
Loading
Loading