#!/bin/bash # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 # Setup cleanup trap cleanup() { echo "Cleaning up background processes..." kill $DYNAMO_PID 2>/dev/null || true wait $DYNAMO_PID 2>/dev/null || true echo "Cleanup complete." } trap cleanup EXIT INT TERM # Default values MODEL="Qwen/Qwen3-0.6B" ENABLE_OTEL=false # Parse command line arguments EXTRA_ARGS=() while [[ $# -gt 0 ]]; do case $1 in --model-path) MODEL="$2" shift 2 ;; --enable-otel) ENABLE_OTEL=true shift ;; -h|--help) echo "Usage: $0 [OPTIONS]" echo "Options:" echo " --model-path Specify model (default: $MODEL)" echo " --enable-otel Enable OpenTelemetry tracing" echo " -h, --help Show this help message" echo "" echo "Additional SGLang/Dynamo flags can be passed and will be forwarded" echo "Note: System metrics are enabled by default on port 8081 (worker)" exit 0 ;; *) EXTRA_ARGS+=("$1") shift ;; esac done # Enable tracing if requested 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} fi # run ingress # dynamo.frontend accepts either --http-port flag or DYN_HTTP_PORT env var (defaults to 8000) OTEL_SERVICE_NAME=dynamo-frontend \ python3 -m dynamo.frontend & DYNAMO_PID=$! # run worker with metrics enabled DYN_SYSTEM_PORT=${DYN_SYSTEM_PORT:-8081} \ python3 -m dynamo.sglang \ --model-path "$MODEL" \ --served-model-name "$MODEL" \ --page-size 16 \ --tp 1 \ --trust-remote-code \ --skip-tokenizer-init \ --enable-metrics \ "${EXTRA_ARGS[@]}"