-
Notifications
You must be signed in to change notification settings - Fork 285
port MI355X DeepSeek V4 ATOM disagg to srt-slurm #2627
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
cquil11
wants to merge
9
commits into
agent/srt-slurm-amd-integration
Choose a base branch
from
agent/port-dsv4-mi355x-atom-srt-slurm
base: agent/srt-slurm-amd-integration
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
9 commits
Select commit
Hold shift + click to select a range
cb24aec
feat(amd): port DSV4 ATOM to srt-slurm
cquil11 d0e4f8e
fix(amd): align ATOM srt-slurm provenance
cquil11 79fa5a7
fix(amd): preserve upstream DSV4 ATOM recipe semantics
cquil11 1fb90fe
fix(atom): preserve workflow-derived context limit
cquil11 f4c1c90
Merge shared single-entrypoint cleanup into ATOM port
cquil11 4e64ebb
Merge latest main into the ATOM port
cquil11 dbd8db1
Merge remote-tracking branch 'origin/agent/srt-slurm-amd-integration'…
cquil11 b1fc780
fix(atom): use the official nightly with native token-limit support
cquil11 fe8e9f9
Merge the updated shared AMD integration
cquil11 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
136 changes: 136 additions & 0 deletions
136
benchmarks/multi_node/srt-slurm-recipes/atom/deepseek-v4/mi355x/disagg-1p1d-tp8-8k1k.yaml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,136 @@ | ||
| # DeepSeek-V4-Pro 1P1D ATOM P/D serving on MI355X. Native AToMesh | ||
| # routes prefill/decode traffic while ATOM transfers KV state through | ||
| # Mooncake's default RDMA transport. The custom benchmark preserves the | ||
| # legacy 8k/1k search and request-length distribution. | ||
|
|
||
| name: "mi355x-atom-dsv4-disagg-1p1d-tp8-8k1k" | ||
|
|
||
| model: | ||
| path: "hf:deepseek-ai/DeepSeek-V4-Pro" | ||
| container: "rocm/atom-dev:nightly_202609031453" | ||
| precision: "fp4" | ||
|
|
||
| identity: | ||
| model: | ||
| repo: "deepseek-ai/DeepSeek-V4-Pro" | ||
| container: | ||
| image: "rocm/atom-dev:nightly_202609031453" | ||
| frameworks: | ||
| atomesh: "f95ef3ec30a16876a676e0af96d60f8e0605c7c5" | ||
|
|
||
| slurm: | ||
| time_limit: "08:00:00" | ||
|
|
||
| resources: | ||
| gpu_type: "mi355x" | ||
| gpus_per_node: 8 | ||
| prefill_nodes: 1 | ||
| decode_nodes: 1 | ||
| prefill_workers: 1 | ||
| decode_workers: 1 | ||
| gpus_per_prefill: 8 | ||
| gpus_per_decode: 8 | ||
|
|
||
| frontend: | ||
| type: atomesh | ||
| enable_multiple_frontends: false | ||
| args: | ||
| policy: random | ||
| log-level: info | ||
| disable-health-check: true | ||
| disable-circuit-breaker: true | ||
| prometheus-port: 29100 | ||
|
|
||
| environment: &runtime_environment | ||
| HF_HOME: "/hf_hub_cache" | ||
| HF_HUB_CACHE: "/hf_hub_cache/hub" | ||
| HUGGINGFACE_HUB_CACHE: "/hf_hub_cache/hub" | ||
| # Use the official image's ROCm/Mooncake library paths (Python 3.12). | ||
| PYTHONUNBUFFERED: "1" | ||
| PYTHONDONTWRITEBYTECODE: "1" | ||
| SAFETENSORS_FAST_GPU: "1" | ||
| VLLM_LOG_LEVEL: "WARNING" | ||
| ATOM_LOG_LEVEL: "WARNING" | ||
| AITER_LOG_LEVEL: "WARNING" | ||
| LOG_LEVEL: "WARNING" | ||
| LOGLEVEL: "WARNING" | ||
|
|
||
| backend: | ||
| type: atom | ||
| connector: mooncake | ||
| prefill_environment: &worker_environment | ||
| ATOM_MOE_GU_ITLV: "1" | ||
| AITER_BF16_FP8_MOE_BOUND: "0" | ||
| decode_environment: *worker_environment | ||
| atom_config: | ||
| prefill: | ||
| # Upstream workflow MAX_MODEL_LEN = ISL + OSL + 256. | ||
| max-model-len: 9472 | ||
| kv_cache_dtype: fp8 | ||
| gpu-memory-utilization: 0.85 | ||
| max-num-seqs: 256 | ||
| block-size: 16 | ||
| no-enable_prefix_caching: true | ||
| trust-remote-code: true | ||
| decode: | ||
| max-model-len: 9472 | ||
| cudagraph-capture-sizes: "[1,2,4,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184,192,200,208,216,224,232,240,248,256]" | ||
| kv_cache_dtype: fp8 | ||
| gpu-memory-utilization: 0.85 | ||
| max-num-seqs: 128 | ||
| block-size: 16 | ||
| no-enable_prefix_caching: true | ||
| trust-remote-code: true | ||
|
|
||
| # The legacy exclusive allocation exposed the full 128-core, unlimited-memory | ||
| # node; do not inherit the shared small-model profile's 32-core / 128G limits. | ||
| sbatch_directives: | ||
| cpus-per-task: "128" | ||
| mem: "0" | ||
| exclusive: "" | ||
|
|
||
| srun_options: | ||
| container-writable: "" | ||
| container-remap-root: "" | ||
| mem: "0" | ||
|
|
||
| health_check: | ||
| max_attempts: 720 | ||
| interval_seconds: 5 | ||
|
|
||
| benchmark: | ||
| type: custom | ||
| command: | | ||
| set -euo pipefail | ||
| result_root="/results/${SLURM_JOB_ID}" | ||
| mkdir -p "${result_root}/fixed-seq" | ||
| archive_runtime_logs() { | ||
| tar -C /logs -czf "${result_root}/runtime-logs.tar.gz" . 2>/dev/null || true | ||
| } | ||
| trap archive_runtime_logs EXIT | ||
| for concurrency in ${CONC_LIST}; do | ||
| num_prompts=$((concurrency * 10)) | ||
| if (( num_prompts < 16 )); then num_prompts=16; fi | ||
| python3 /infmax-workspace/utils/bench_serving/benchmark_serving.py \ | ||
| --backend openai \ | ||
| --base-url "http://${SRT_FRONTEND_HOST}:${SRT_FRONTEND_PORT}" \ | ||
| --endpoint /v1/completions \ | ||
| --model deepseek-ai/DeepSeek-V4-Pro \ | ||
| --tokenizer deepseek-ai/DeepSeek-V4-Pro \ | ||
| --dataset-name random \ | ||
| --random-input-len 8192 \ | ||
| --random-output-len 1024 \ | ||
| --random-range-ratio "${RANDOM_RANGE_RATIO:-0.8}" \ | ||
| --num-warmups "$((concurrency * 2))" \ | ||
| --num-prompts "${num_prompts}" \ | ||
| --max-concurrency "${concurrency}" \ | ||
| --request-rate inf \ | ||
| --ignore-eos \ | ||
| --trust-remote-code \ | ||
| --percentile-metrics ttft,tpot,itl,e2el \ | ||
| --save-result \ | ||
| --result-dir "${result_root}/fixed-seq" \ | ||
| --result-filename "dsv4-atom-mi355x-disagg-1p1d-tp8-isl8192-osl1024-c${concurrency}.json" | ||
| done | ||
| env: | ||
| <<: *runtime_environment | ||
140 changes: 140 additions & 0 deletions
140
...hmarks/multi_node/srt-slurm-recipes/atom/deepseek-v4/mi355x/disagg-2p1d-dpa-tp8-8k1k.yaml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,140 @@ | ||
| # DeepSeek-V4-Pro 2P1D ATOM P/D serving on MI355X. Each logical endpoint | ||
| # occupies one TP8 node; the two prefill endpoints and decode endpoint use | ||
| # data-parallel attention/TBO as in the legacy production configuration. | ||
|
|
||
| name: "mi355x-atom-dsv4-disagg-2p1d-dpa-tp8-8k1k" | ||
|
|
||
| model: | ||
| path: "hf:deepseek-ai/DeepSeek-V4-Pro" | ||
| container: "rocm/atom-dev:nightly_202609031453" | ||
| precision: "fp4" | ||
|
|
||
| identity: | ||
| model: | ||
| repo: "deepseek-ai/DeepSeek-V4-Pro" | ||
| container: | ||
| image: "rocm/atom-dev:nightly_202609031453" | ||
| frameworks: | ||
| atomesh: "f95ef3ec30a16876a676e0af96d60f8e0605c7c5" | ||
|
|
||
| slurm: | ||
| time_limit: "08:00:00" | ||
|
|
||
| resources: | ||
| gpu_type: "mi355x" | ||
| gpus_per_node: 8 | ||
| prefill_nodes: 2 | ||
| decode_nodes: 1 | ||
| prefill_workers: 2 | ||
| decode_workers: 1 | ||
| gpus_per_prefill: 8 | ||
| gpus_per_decode: 8 | ||
|
|
||
| frontend: | ||
| type: atomesh | ||
| enable_multiple_frontends: false | ||
| args: | ||
| policy: random | ||
| log-level: info | ||
| disable-health-check: true | ||
| disable-circuit-breaker: true | ||
| prometheus-port: 29100 | ||
|
|
||
| environment: &runtime_environment | ||
| HF_HOME: "/hf_hub_cache" | ||
| HF_HUB_CACHE: "/hf_hub_cache/hub" | ||
| HUGGINGFACE_HUB_CACHE: "/hf_hub_cache/hub" | ||
| # Use the official image's ROCm/Mooncake library paths (Python 3.12). | ||
| PYTHONUNBUFFERED: "1" | ||
| PYTHONDONTWRITEBYTECODE: "1" | ||
| SAFETENSORS_FAST_GPU: "1" | ||
| VLLM_LOG_LEVEL: "WARNING" | ||
| ATOM_LOG_LEVEL: "WARNING" | ||
| AITER_LOG_LEVEL: "WARNING" | ||
| LOG_LEVEL: "WARNING" | ||
| LOGLEVEL: "WARNING" | ||
|
|
||
| backend: | ||
| type: atom | ||
| connector: mooncake | ||
| prefill_environment: &worker_environment | ||
| ATOM_MOE_GU_ITLV: "1" | ||
| AITER_BF16_FP8_MOE_BOUND: "0" | ||
| GPU_MAX_HW_QUEUES: "5" | ||
| ATOM_CPU_AFFINITY: "1" | ||
| decode_environment: *worker_environment | ||
| atom_config: | ||
| prefill: | ||
| # Upstream workflow MAX_MODEL_LEN = ISL + OSL + 256. | ||
| max-model-len: 9472 | ||
| kv_cache_dtype: fp8 | ||
| gpu-memory-utilization: 0.85 | ||
| max-num-seqs: 256 | ||
| block-size: 16 | ||
| no-enable_prefix_caching: true | ||
| enable-dp-attention: true | ||
| enable-tbo: true | ||
| trust-remote-code: true | ||
| decode: | ||
| max-model-len: 9472 | ||
| cudagraph-capture-sizes: "[1,2,4,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184,192,200,208,216,224,232,240,248,256]" | ||
| kv_cache_dtype: fp8 | ||
| gpu-memory-utilization: 0.85 | ||
| max-num-seqs: 2048 | ||
| block-size: 16 | ||
| no-enable_prefix_caching: true | ||
| enable-dp-attention: true | ||
| enable-tbo: true | ||
| trust-remote-code: true | ||
|
|
||
| # The legacy exclusive allocation exposed the full 128-core, unlimited-memory | ||
| # node; do not inherit the shared small-model profile's 32-core / 128G limits. | ||
| sbatch_directives: | ||
| cpus-per-task: "128" | ||
| mem: "0" | ||
| exclusive: "" | ||
|
|
||
| srun_options: | ||
| container-writable: "" | ||
| container-remap-root: "" | ||
| mem: "0" | ||
|
|
||
| health_check: | ||
| max_attempts: 720 | ||
| interval_seconds: 5 | ||
|
|
||
| benchmark: | ||
| type: custom | ||
| command: | | ||
| set -euo pipefail | ||
| result_root="/results/${SLURM_JOB_ID}" | ||
| mkdir -p "${result_root}/fixed-seq" | ||
| archive_runtime_logs() { | ||
| tar -C /logs -czf "${result_root}/runtime-logs.tar.gz" . 2>/dev/null || true | ||
| } | ||
| trap archive_runtime_logs EXIT | ||
| for concurrency in ${CONC_LIST}; do | ||
| num_prompts=$((concurrency * 10)) | ||
| python3 /infmax-workspace/utils/bench_serving/benchmark_serving.py \ | ||
| --backend openai \ | ||
| --base-url "http://${SRT_FRONTEND_HOST}:${SRT_FRONTEND_PORT}" \ | ||
| --endpoint /v1/completions \ | ||
| --model deepseek-ai/DeepSeek-V4-Pro \ | ||
| --tokenizer deepseek-ai/DeepSeek-V4-Pro \ | ||
| --dataset-name random \ | ||
| --random-input-len 8192 \ | ||
| --random-output-len 1024 \ | ||
| --random-range-ratio "${RANDOM_RANGE_RATIO:-0.8}" \ | ||
| --num-warmups "$((concurrency * 2))" \ | ||
| --num-prompts "${num_prompts}" \ | ||
| --max-concurrency "${concurrency}" \ | ||
| --request-rate inf \ | ||
| --ignore-eos \ | ||
| --trust-remote-code \ | ||
| --percentile-metrics ttft,tpot,itl,e2el \ | ||
| --save-result \ | ||
| --result-dir "${result_root}/fixed-seq" \ | ||
| --result-filename "dsv4-atom-mi355x-disagg-2p1d-dpa-tp8-isl8192-osl1024-c${concurrency}.json" | ||
| done | ||
| env: | ||
| <<: *runtime_environment |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.