diff --git a/vllm_wrapper.sh b/vllm_wrapper.sh new file mode 100644 index 0000000..2b3b6dd --- /dev/null +++ b/vllm_wrapper.sh @@ -0,0 +1,46 @@ +#!/bin/bash +# vllm_wrapper.sh —— 拦截 vllm 二进制,启动前做兼容修补后再交给真实 vllm +# +# 设计照搬社区已上线引擎 zhengzhongwei/vLLM-Iluvatar_bi-100-opt 的做法: +# 把镜像里的 `vllm` 换成本脚本(真身改名 vllm_real),平台下发的 +# `vllm serve /model --port 80 ...` 就会自然流经这里,**不需要平台改命令**。 +# +# 只在 `vllm serve <目录>` 这一种形态上做修补,其余子命令原样透传。 +set -u + +# 与 zhengzhongwei/vLLM-Iluvatar_bi-100-opt 一致的真身路径;Dockerfile 里 vllm -> *_real +REAL=/usr/local/corex/lib64/python3/dist-packages/bin/vllm_real +PREFLIGHT=/opt/preflight.py + +if [ "${1:-}" = "serve" ] && [ -n "${2:-}" ]; then + MODEL_DIR="$2" + shift 2 + + EXTRA="" + if [ -f "$PREFLIGHT" ]; then + # preflight 失败也绝不阻断:只打日志,按原命令跑 + if python3 "$PREFLIGHT" --model "$MODEL_DIR" --out /tmp/mhxc_preflight.json \ + >/tmp/mhxc_preflight.out 2>/tmp/mhxc_preflight.err; then + EXTRA=$(python3 - /tmp/mhxc_preflight.json <<'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: + print("") +PY +) + else + echo "[vllm_wrapper] preflight 非 0 退出,按原命令继续" + fi + sed 's/^/[vllm_wrapper] /' /tmp/mhxc_preflight.err 2>/dev/null || true + fi + + echo "[vllm_wrapper] model=$MODEL_DIR extra=${EXTRA:-(无)}" + echo "[vllm_wrapper] exec: vllm_real serve $MODEL_DIR $EXTRA $*" + # shellcheck disable=SC2086 + exec "$REAL" serve "$MODEL_DIR" $EXTRA "$@" +fi + +exec "$REAL" "$@"