From 64703e0d2c054862e3eccbd9b11cfc307f9e9ede Mon Sep 17 00:00:00 2001 From: wanglin <2281216234@qq.com> Date: Sat, 3 Oct 2026 19:21:57 +0800 Subject: [PATCH] =?UTF-8?q?enginex-bi100-compat:=20=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E6=8B=A6=E6=88=AA=20vllm=20=E4=BA=8C=E8=BF=9B=E5=88=B6?= =?UTF-8?q?=EF=BC=88=E5=AF=B9=E9=BD=90=20zhengzhongwei/vLLM-Iluvatar=5Fbi-?= =?UTF-8?q?100-opt=20=E6=A8=A1=E5=BC=8F=EF=BC=89=EF=BC=8C=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E5=91=BD=E4=BB=A4=E6=97=A0=E9=9C=80=E6=94=B9=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1c3c4b6..99ddd88 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,9 +2,10 @@ # # 天数智芯 天垓100(Iluvatar_bi-100)· 文本生成 · vLLM「兼容增强」引擎。 # -# 不动模型、不动卡,只把「引擎镜像层」的结构性不兼容在启动前修掉。 -# 结构与社区已上线引擎 EngineX-Sunrise/enginex-S2-vllm-fix-tokenizer 完全同型 -# (Dockerfile + entrypoint.sh + 修补脚本 + README),该模式已在曦望 S2 生产验证。 +# 不动模型、不动卡,只把「引擎镜像层」的结构性不兼容在容器启动前修掉。 +# 做法照搬社区已上线引擎 zhengzhongwei/vLLM-Iluvatar_bi-100-opt: +# **把镜像内的 vllm 二进制换成本仓的 wrapper**,平台原样下发 +# `vllm serve /model --port 80 ...` 就会流经 wrapper,无需平台改任何命令。 # # 修什么(全部有日志实证,见 README.md): # R3 extra_special_tokens 是 list -> transformers 崩(社区已上线修复,已合并) @@ -13,33 +14,35 @@ # R4 architectures 是镜像未注册类名 -> KeyError / MODEL_NOT_SUPPORTED # R7 镜像缺 ixformer.contrib.vllm.layers -> ModuleNotFoundError(MoE) # -# 为什么选 bi-100:本人 37 个验证失败里,bi-100 单卡 10 例为全平台最集中; -# 且该卡社区通过率约 51%(15 张卡最低),修好收益最大。 -# -# 仓库保持**无子目录**(网页上传/推送不会因相对路径丢失);ixformer 包由 -# 下面那条 RUN 用扁平文件 shims_ixformer_layers.py 组装出来。 +# 基线镜像与 zhengzhongwei/vLLM-Iluvatar_bi-100-opt 一致(平台 bi-100 vllm 框架在用的那个), +# 保证替换 vllm 二进制的路径与行为可预期。 -FROM git.modelhub.org.cn:9443/enginex-iluvatar/bi100-3.2.3-x86-ubuntu20.04-py3.10-poc-llm-infer:v1.2.3 +FROM harbor-contest.4pd.io/luopingyi/bi100/vllm:0.6.3 LABEL org.opencontainers.image.title="enginex-bi100-compat" \ - org.opencontainers.image.description="Iluvatar bi-100 vLLM text-generation engine with preflight compatibility patches (R2/R3/R3b/R4/R7)" \ + org.opencontainers.image.description="Iluvatar bi-100 vLLM engine with preflight compatibility patches (R2/R3/R3b/R4/R7)" \ com.modelhubxc.engine.target-card="Iluvatar_bi-100" \ com.modelhubxc.engine.framework="vllm" \ com.modelhubxc.engine.task-type="text-generation" \ - com.modelhubxc.engine.baseline="EngineX-Iluvatar/enginex-vllm-bi100-qwen36" \ - com.modelhubxc.engine.pattern="EngineX-Sunrise/enginex-S2-vllm-fix-tokenizer" + com.modelhubxc.engine.pattern="zhengzhongwei/vLLM-Iluvatar_bi-100-opt" # 修补脚本 + R7 纯 PyTorch shim(都是小文本文件,无权重) COPY preflight.py /opt/ -COPY entrypoint.sh /opt/ COPY detect_tokenizer.py /opt/ +COPY vllm_wrapper.sh /opt/ COPY shims_ixformer_layers.py /opt/shims_src/ # 组装 ixformer.contrib.vllm.layers 包(R7 兜底,只有真缺模块时才会被 import) -RUN set -eux && mkdir -p /opt/shims/ixformer/contrib/vllm/layers && for d in /opt/shims/ixformer /opt/shims/ixformer/contrib /opt/shims/ixformer/contrib/vllm /opt/shims/ixformer/contrib/vllm/layers; do printf '# ModelHub XC compat shim package\n' > "$d/__init__.py"; done && cp /opt/shims_src/shims_ixformer_layers.py /opt/shims/ixformer/contrib/vllm/layers/__init__.py && rm -rf /opt/shims_src && chmod +x /opt/entrypoint.sh /opt/preflight.py && python3 -c "import ast,io;[ast.parse(io.open(f,encoding='utf-8').read()) for f in ['/opt/preflight.py','/opt/detect_tokenizer.py','/opt/shims/ixformer/contrib/vllm/layers/__init__.py']]" && bash -n /opt/entrypoint.sh && echo "[enginex-bi100-compat] preflight syntax OK" +RUN set -eux && mkdir -p /opt/shims/ixformer/contrib/vllm/layers && for d in /opt/shims/ixformer /opt/shims/ixformer/contrib /opt/shims/ixformer/contrib/vllm /opt/shims/ixformer/contrib/vllm/layers; do printf '# ModelHub XC compat shim package\n' > "$d/__init__.py"; done && cp /opt/shims_src/shims_ixformer_layers.py /opt/shims/ixformer/contrib/vllm/layers/__init__.py && rm -rf /opt/shims_src && chmod +x /opt/vllm_wrapper.sh /opt/preflight.py && python3 -c "import ast,io;[ast.parse(io.open(f,encoding='utf-8').read()) for f in ['/opt/preflight.py','/opt/detect_tokenizer.py','/opt/shims/ixformer/contrib/vllm/layers/__init__.py']]" && bash -n /opt/vllm_wrapper.sh && echo "[enginex-bi100-compat] preflight syntax OK" -# R7:让 shims 全局可 import(平台若覆盖 entrypoint 也仍然生效) +# R7:让 shims 全局可 import ENV PYTHONPATH=/opt/shims:${PYTHONPATH} ENV MODEL_DIR=/model -ENTRYPOINT ["/opt/entrypoint.sh"] +# 关键一步:把 vllm 二进制换成 wrapper(真身改名 vllm_real), +# 平台下发的 `vllm serve ...` 因此流经本引擎的启动前修补。 +RUN set -eux && VLLM_BIN="$(command -v vllm || echo /usr/local/corex/lib64/python3/dist-packages/bin/vllm)" && \ + if [ ! -f "$VLLM_BIN" ]; then echo "vllm binary not found at $VLLM_BIN"; exit 1; fi && \ + mv "$VLLM_BIN" "${VLLM_BIN}_real" && \ + ln -s /opt/vllm_wrapper.sh "$VLLM_BIN" && \ + echo "[enginex-bi100-compat] vllm -> wrapper installed"