mirror of
https://github.com/deepseek-ai/DeepInfer.git
synced 2026-10-28 23:07:09 +08:00
- serve/: the minimal OpenAI-compatible server of deepseek-ai/DeepInfer#147, with a Neuron worker setup (basic mode env, per-rank NeuronCore, fixed KV pool via --num-kv-blocks, no MTP lookahead) and a /v1/completions endpoint (prompt text or token ids, no chat template): what vllm bench serve --backend openai drives, as vllm-neuron#71's run_bench.py does. - examples/neuron/bench_neuron.py: the same TTFT/TPOT matrix offline. - static MoE: one packed fp32 all-gather instead of three (each 64-rank collective is ~2 ms of fixed latency a layer); a capacity-grouped expert path for prefill chunks (DEEPINFER_NEURON_MOE_CAPACITY, dense rerun on overflow; not yet validated on device). - Sub-region timings at split() boundaries under DEEPINFER_NEURON_REGION_TIMING. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
42 lines
1.8 KiB
Bash
Executable File
42 lines
1.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# Start/stop serve/openai_server.py as one process group, so stopping it also reaps the
|
|
# engine's helper processes (otherwise they outlive the frontend and keep the GPUs).
|
|
#
|
|
# serve/server.sh start [openai_server.py args...]
|
|
# serve/server.sh stop
|
|
set -euo pipefail
|
|
ROOT=$(cd "$(dirname "$0")/.." && pwd)
|
|
PIDFILE="$ROOT/serve/server.pgid"
|
|
LOG="${LOG:-$ROOT/serve.log}"
|
|
|
|
case "${1:-}" in
|
|
start)
|
|
shift
|
|
[ -s "$PIDFILE" ] && kill -0 -- "-$(cat "$PIDFILE")" 2>/dev/null && { echo "already running (pgid $(cat "$PIDFILE"))" >&2; exit 1; }
|
|
[ -f "$ROOT/env.sh" ] && source "$ROOT/env.sh" # optional local environment (venv, DEEPINFER_* vars)
|
|
: "${DEEPINFER_HF_MODEL_DIR:?set DEEPINFER_HF_MODEL_DIR to the local checkpoint directory}"
|
|
export CUDA_VISIBLE_DEVICES="${CUDA_VISIBLE_DEVICES:-0,1,2,3}"
|
|
setsid python -u "$ROOT/serve/openai_server.py" --model "$DEEPINFER_HF_MODEL_DIR" \
|
|
--served-model-name deepseek-ai/DeepSeek-V4.1-Flash-1017 "$@" > "$LOG" 2>&1 < /dev/null &
|
|
echo $! > "$PIDFILE"
|
|
port=8888 prev=
|
|
for a in "$@"; do [[ "$prev" == --port ]] && port=$a; prev=$a; done
|
|
until curl -fs "localhost:$port/health" >/dev/null 2>&1; do
|
|
kill -0 "$(cat "$PIDFILE")" 2>/dev/null || { echo "server died; see $LOG" >&2; exit 1; }
|
|
sleep 3
|
|
done
|
|
echo "ready (pgid $(cat "$PIDFILE"), log $LOG)"
|
|
;;
|
|
stop)
|
|
[ -s "$PIDFILE" ] || { echo "not running"; exit 0; }
|
|
pgid=$(cat "$PIDFILE")
|
|
kill -TERM -- "-$pgid" 2>/dev/null || true
|
|
for _ in $(seq 30); do kill -0 -- "-$pgid" 2>/dev/null || break; sleep 1; done
|
|
kill -KILL -- "-$pgid" 2>/dev/null || true
|
|
rm -f "$PIDFILE"
|
|
echo "stopped"
|
|
;;
|
|
*)
|
|
echo "usage: $0 start|stop" >&2; exit 2 ;;
|
|
esac
|