brandonmusic's picture
Correct r17 CUDA graph claim and mark eager launcher provisional
337ee55 verified
Raw History Blame Contribute Delete
5.17 kB
#!/usr/bin/env bash
# Provisional quality-only launcher: sealed r17 + exact G64 Q-only FP8 reader.
# This is not the full-CUDA-graph NVFP4 speed-qualified release profile.
set -Eeuo pipefail
ROOT="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
RUNTIME="$ROOT/runtime/r17-g64-q-only"
IMAGE="${IMAGE:-voipmonitor/vllm@sha256:c5e96c5bcc5a073f7ce6b56173d88538de3a416900cff97c88b4bf7967fe1dc0}"
NAME="${NAME:-glm52-r17-g64-q-only}"
MODEL_DIR="${MODEL_DIR:-$ROOT}"
CACHE_DIR="${CACHE_DIR:-$HOME/.cache/glm52-r17-g64-q-only}"
PORT="${PORT:-8000}"
GPU_MEMORY_UTILIZATION="${GPU_MEMORY_UTILIZATION:-0.97}"
MAX_MODEL_LEN="${MAX_MODEL_LEN:-262144}"
MAX_NUM_BATCHED_TOKENS="${MAX_NUM_BATCHED_TOKENS:-1280}"
MAX_NUM_SEQS="${MAX_NUM_SEQS:-4}"
GRAPH="${GRAPH:-16}"
MTP="${MTP:-3}"
EAGER="${EAGER:-1}"
KV_CACHE_MEMORY_BYTES="${KV_CACHE_MEMORY_BYTES:-4294967296}"
required=(
"$MODEL_DIR/config.json"
"$MODEL_DIR/model.safetensors.index.json"
"$RUNTIME/exl3_overlay.py"
"$RUNTIME/gate_linear.py"
"$RUNTIME/decode_math.py"
)
require_files() {
local path
for path in "${required[@]}"; do
[[ -f "$path" ]] || { printf 'required file missing: %s\n' "$path" >&2; exit 2; }
done
mkdir -p "$CACHE_DIR" "$CACHE_DIR/tmp"
}
start() {
require_files
docker image inspect "$IMAGE" >/dev/null 2>&1 || docker pull "$IMAGE"
docker rm -f "$NAME" >/dev/null 2>&1 || true
local extra_args=(--enable-bf16x3-router-gemm --kv-cache-memory-bytes "$KV_CACHE_MEMORY_BYTES")
[[ "$EAGER" == "1" ]] && extra_args+=(--enforce-eager)
docker run -d --name "$NAME" \
--entrypoint /usr/local/bin/serve-gilded-gnosis.sh \
--gpus all --runtime nvidia --network host --ipc host --privileged --init \
--shm-size 64g --ulimit memlock=-1:-1 --ulimit nofile=1048576:1048576 \
--ulimit stack=67108864 --restart unless-stopped \
-v "$MODEL_DIR:/model:ro" \
-v "$CACHE_DIR:/cache:rw" \
-v "$CACHE_DIR/tmp:/container-tmp:rw" \
-v "$RUNTIME/exl3_overlay.py:/usr/local/lib/python3.12/dist-packages/vllm/model_executor/layers/quantization/exl3.py:ro" \
-v "$RUNTIME/exl3_overlay.py:/opt/infernal-invocation/vllm/vllm/model_executor/layers/quantization/exl3.py:ro" \
-v "$RUNTIME/exl3_overlay.py:/opt/venv/lib/python3.12/site-packages/vllm/model_executor/layers/quantization/exl3.py:ro" \
-v "$RUNTIME/gate_linear.py:/usr/local/lib/python3.12/dist-packages/vllm/model_executor/layers/fused_moe/router/gate_linear.py:ro" \
-v "$RUNTIME/gate_linear.py:/opt/infernal-invocation/vllm/vllm/model_executor/layers/fused_moe/router/gate_linear.py:ro" \
-v "$RUNTIME/gate_linear.py:/opt/venv/lib/python3.12/site-packages/vllm/model_executor/layers/fused_moe/router/gate_linear.py:ro" \
-v "$RUNTIME/decode_math.py:/opt/infernal-invocation/b12x/b12x/attention/_shared/mla/decode_math.py:ro" \
-v "$RUNTIME/decode_math.py:/opt/venv/lib/python3.12/site-packages/b12x/attention/_shared/mla/decode_math.py:ro" \
-e MODEL_FAMILY=glm52-exl3 -e MODEL=/model \
-e SERVED_MODEL_NAME=GLM-5.2-EXL3-TR3v4-3.5bpw \
-e GPUS="${GPUS:-3,1,2,0}" -e PORT="$PORT" \
-e TP=4 -e DCP=4 -e DCP_KV_CACHE_INTERLEAVE_SIZE=64 -e MTP="$MTP" \
-e MAX_MODEL_LEN="$MAX_MODEL_LEN" -e MAX_BATCHED_TOKENS="$MAX_NUM_BATCHED_TOKENS" \
-e MAX_NUM_SEQS="$MAX_NUM_SEQS" -e GRAPH="$GRAPH" \
-e GPU_MEMORY_UTILIZATION="$GPU_MEMORY_UTILIZATION" \
-e QUANTIZATION=exl3 -e ONLINE_QUANT=none -e LOAD_FORMAT=safetensors \
-e KV_CACHE_DTYPE=fp8 -e MOE_MODE=a16 -e MOE_BACKEND=b12x \
-e MTP_MOE_BACKEND=triton -e MTP_DRAFT_SAMPLE_METHOD=greedy \
-e ASYNC_SCHEDULING=0 -e PCIE_CALIBRATION=off \
-e VLLM_DCP_Q_REPLICATE=0 -e VLLM_DCP_INDEXER_SHARDS=4 \
-e VLLM_DCP_QUERY_SPLIT=0 -e VLLM_DCP_GLOBAL_TOPK=1 \
-e VLLM_DCP_SHARD_DRAFT=1 -e VLLM_USE_FUSED_MOE_GROUPED_TOPK=1 \
-e VLLM_EXL3_R7_FUSED=1 -e VLLM_EXL3_R7_FUSED_LAYERS=48 \
-e VLLM_EXL3_PREFILL_CAPACITY=1024 -e VLLM_EXL3_TRELLIS_MIN_M=1 \
-e VLLM_ROUTER_WEIGHT_FP32=1 -e VLLM_EXL3_ROUTE_WEIGHT_FP32=0 \
-e VLLM_FP8_MLA_SCALE_BANK4=0 -e VLLM_FP8_MLA_SCALE_BANK16=0 \
-e VLLM_FP8_MLA_BF16_G64=0 -e B12X_FP8_MLA_BF16_QK=0 \
-e B12X_FP8_MLA_BF16_PV=0 -e B12X_FP8_MLA_ARBITRARY_Q_SCALE=1 \
-e B12X_FP8_MLA_ARBITRARY_Q_G64=1 -e KV_FP8_ROPE=0 \
-e B12X_CUTE_COMPILE_CACHE_DIR=/cache/b12x-cute/r17-g64-q-only \
"$IMAGE" "${extra_args[@]}" >/dev/null
printf 'started %s on http://127.0.0.1:%s\n' "$NAME" "$PORT"
printf 'PROVISIONAL quality-only profile; not the speed-qualified release default\n'
printf 'profile: r17, TP4/DCP4, MTP-%s, FP8 MLA KV, exact G64 Q, BF16 RoPE, eager=%s\n' "$MTP" "$EAGER"
printf 'follow startup: %s logs\n' "$0"
}
case "${1:-start}" in
start) start ;;
restart) docker rm -f "$NAME" >/dev/null 2>&1 || true; start ;;
stop) docker rm -f "$NAME" >/dev/null ;;
logs) docker logs -f --tail 150 "$NAME" ;;
status)
docker ps -a --filter "name=^/${NAME}$" --format 'table {{.Names}}\t{{.Status}}\t{{.Image}}'
curl -fsS "http://127.0.0.1:$PORT/v1/models" || true
printf '\n'
;;
pull) docker pull "$IMAGE" ;;
*) printf 'usage: %s [start|restart|stop|logs|status|pull]\n' "$0" >&2; exit 2 ;;
esac