45 lines
1.6 KiB
Bash
45 lines
1.6 KiB
Bash
|
|
#!/bin/bash
|
|||
|
|
# enginex-bi100-compat 入口:启动前修补 -> exec vllm serve
|
|||
|
|
#
|
|||
|
|
# 与社区已上线引擎 EngineX-Sunrise/enginex-S2-vllm-fix-tokenizer 同一模式
|
|||
|
|
# (detect -> fix -> `exec vllm serve "$MODEL_DIR" $EXTRA "$@"`),
|
|||
|
|
# 只是把「只修 tokenizer」升级成「修 tokenizer + chat_template + 架构 + 缺模块」。
|
|||
|
|
#
|
|||
|
|
# 平台会把 GPU 数、端口、max-model-len 等参数作为 "$@" 传进来,原样透传。
|
|||
|
|
set -u
|
|||
|
|
|
|||
|
|
MODEL_DIR=${MODEL_DIR:-${1:-/model}}
|
|||
|
|
# 若第一个参数不是目录,则认为是平台传入的 vllm 参数,MODEL_DIR 仍用默认 /model
|
|||
|
|
if [ $# -gt 0 ] && [ -d "$1" ]; then
|
|||
|
|
MODEL_DIR="$1"
|
|||
|
|
shift
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
FIX_LOG=/tmp/mhxc_preflight.json
|
|||
|
|
echo "[entrypoint] model dir: $MODEL_DIR"
|
|||
|
|
echo "[entrypoint] args: $*"
|
|||
|
|
|
|||
|
|
EXTRA=""
|
|||
|
|
if python3 /opt/preflight.py --model "$MODEL_DIR" --out "$FIX_LOG" >/tmp/mhxc_preflight.out 2>/tmp/mhxc_preflight.err; then
|
|||
|
|
# 从 JSON 里取 extra_args(用 python 解析,避免依赖 jq)
|
|||
|
|
EXTRA=$(python3 - "$FIX_LOG" <<'PY'
|
|||
|
|
import json, sys, shlex
|
|||
|
|
try:
|
|||
|
|
with open(sys.argv[1], encoding="utf-8") as f:
|
|||
|
|
d = json.load(f)
|
|||
|
|
print(" ".join(shlex.quote(a) for a in (d.get("extra_args") or [])))
|
|||
|
|
except Exception as e:
|
|||
|
|
print("")
|
|||
|
|
PY
|
|||
|
|
)
|
|||
|
|
echo "[entrypoint] preflight extra args: ${EXTRA:-(无)}"
|
|||
|
|
sed 's/^/[entrypoint] preflight: /' /tmp/mhxc_preflight.err 2>/dev/null || true
|
|||
|
|
else
|
|||
|
|
echo "[entrypoint] preflight 执行失败,按原命令继续(不阻断启动)"
|
|||
|
|
sed 's/^/[entrypoint] preflight: /' /tmp/mhxc_preflight.err 2>/dev/null || true
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo "[entrypoint] starting vllm..."
|
|||
|
|
# shellcheck disable=SC2086
|
|||
|
|
exec vllm serve "$MODEL_DIR" $EXTRA "$@"
|