disagg.sh 3.08 KB
Newer Older
1
#!/bin/bash
2
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3
4
5
6
7
8
9
10
11
12
13
# SPDX-License-Identifier: Apache-2.0

# Setup cleanup trap
cleanup() {
    echo "Cleaning up background processes..."
    kill $DYNAMO_PID $PREFILL_PID 2>/dev/null || true
    wait $DYNAMO_PID $PREFILL_PID 2>/dev/null || true
    echo "Cleanup complete."
}
trap cleanup EXIT INT TERM

14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# Parse command line arguments
ENABLE_OTEL=false
while [[ $# -gt 0 ]]; do
    case $1 in
        --enable-otel)
            ENABLE_OTEL=true
            shift
            ;;
        -h|--help)
            echo "Usage: $0 [OPTIONS]"
            echo "Options:"
            echo "  --enable-otel        Enable OpenTelemetry tracing"
            echo "  -h, --help           Show this help message"
            echo ""
            echo "Note: System metrics are enabled by default on ports 8081 (prefill), 8082 (decode)"
            exit 0
            ;;
        *)
            echo "Unknown option: $1"
            echo "Use --help for usage information"
            exit 1
            ;;
    esac
done

# Enable tracing if requested
40
TRACE_ARGS=()
41
42
43
44
if [ "$ENABLE_OTEL" = true ]; then
    export DYN_LOGGING_JSONL=true
    export OTEL_EXPORT_ENABLED=1
    export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=${OTEL_EXPORTER_OTLP_TRACES_ENDPOINT:-http://localhost:4317}
45
    TRACE_ARGS+=(--enable-trace --otlp-traces-endpoint localhost:4317)
46
fi
47
48

# run ingress
49
# dynamo.frontend accepts either --http-port flag or DYN_HTTP_PORT env var (defaults to 8000)
50
OTEL_SERVICE_NAME=dynamo-frontend \
51
python3 -m dynamo.frontend &
52
53
DYNAMO_PID=$!

54
55
#AssertionError: Prefill round robin balance is required when dp size > 1. Please make sure that the prefill instance is launched with `--load-balance-method round_robin` and `--prefill-round-robin-balance` is set for decode server.

56
# run prefill worker
57
58
59
# Use DYN_SYSTEM_PORT1/2 instead of *_PREFILL/*_DECODE env names so test
# harnesses can set one simple pair for disaggregated deployments.
OTEL_SERVICE_NAME=dynamo-worker-prefill DYN_SYSTEM_PORT=${DYN_SYSTEM_PORT1:-8081} \
60
python3 -m dynamo.sglang \
61
62
  --model-path silence09/DeepSeek-R1-Small-2layers \
  --served-model-name silence09/DeepSeek-R1-Small-2layers \
63
  --page-size 16 \
64
65
  --tp 2 --dp-size 2 --enable-dp-attention \
  --load-balance-method round_robin \
66
67
  --trust-remote-code \
  --disaggregation-mode prefill \
68
69
  --disaggregation-bootstrap-port 12345 \
  --host 0.0.0.0 \
70
  --port 40000 \
71
  --disaggregation-transfer-backend nixl \
72
73
  --enable-metrics \
  "${TRACE_ARGS[@]}" &
74
75
76
PREFILL_PID=$!

# run decode worker
77
OTEL_SERVICE_NAME=dynamo-worker-decode DYN_SYSTEM_PORT=${DYN_SYSTEM_PORT2:-8082} \
78
79
80
CUDA_VISIBLE_DEVICES=2,3 python3 -m dynamo.sglang \
  --model-path silence09/DeepSeek-R1-Small-2layers \
  --served-model-name silence09/DeepSeek-R1-Small-2layers \
81
  --page-size 16 \
82
83
  --prefill-round-robin-balance \
  --tp 2 --dp-size 2 --enable-dp-attention \
84
85
  --trust-remote-code \
  --disaggregation-mode decode \
86
87
  --disaggregation-bootstrap-port 12345 \
  --host 0.0.0.0 \
88
  --disaggregation-transfer-backend nixl \
89
90
  --enable-metrics \
  "${TRACE_ARGS[@]}"