This commit is contained in:
2026-06-12 14:18:43 +08:00
parent 8852f1fa73
commit d569d5606b
3 changed files with 17 additions and 19 deletions
+1 -1
View File
@@ -20,6 +20,7 @@ ARG PIP_INDEX=https://mirrors.aliyun.com/pypi/simple
# -- 环境变量 --------------------------------------------------------------- # -- 环境变量 ---------------------------------------------------------------
ENV DEBIAN_FRONTEND=noninteractive \ ENV DEBIAN_FRONTEND=noninteractive \
PATH=/opt/rocm/bin:/opt/rocm/llvm/bin:${VENV}/bin:${PATH} \ PATH=/opt/rocm/bin:/opt/rocm/llvm/bin:${VENV}/bin:${PATH} \
PYTHONPATH=/opt/vllm:${PYTHONPATH} \
PYTORCH_ROCM_ARCH=${ARCH} \ PYTORCH_ROCM_ARCH=${ARCH} \
FLASH_ATTENTION_TRITON_AMD_ENABLE=TRUE \ FLASH_ATTENTION_TRITON_AMD_ENABLE=TRUE \
MINERU_MODEL_SOURCE=huggingface \ MINERU_MODEL_SOURCE=huggingface \
@@ -304,7 +305,6 @@ RUN set -ex && \
RUN set -ex && \ RUN set -ex && \
export http_proxy=${GIT_PROXY} https_proxy=${GIT_PROXY} && \ export http_proxy=${GIT_PROXY} https_proxy=${GIT_PROXY} && \
${VENV}/bin/pip install 'mineru[core]' click gradio && \ ${VENV}/bin/pip install 'mineru[core]' click gradio && \
cd /opt/vllm && ${VENV}/bin/pip install -e . --no-build-isolation --no-deps && \
${VENV}/bin/python -c "import torch; import vllm; import mineru; import click; import gradio; import mineru.cli.gradio_app; print('MinerU + Gradio CLI imports OK')" && \ ${VENV}/bin/python -c "import torch; import vllm; import mineru; import click; import gradio; import mineru.cli.gradio_app; print('MinerU + Gradio CLI imports OK')" && \
${VENV}/bin/mineru-gradio --help >/dev/null ${VENV}/bin/mineru-gradio --help >/dev/null
+4 -3
View File
@@ -428,16 +428,17 @@ PY'
当前入口脚本会在服务启动前执行同样的 vLLM 导入验证;如果验证失败,容器会直接退出并在 `docker compose logs gradio` 中显示真实 traceback,而不是等任务执行时才报泛化错误。 当前入口脚本会在服务启动前执行同样的 vLLM 导入验证;如果验证失败,容器会直接退出并在 `docker compose logs gradio` 中显示真实 traceback,而不是等任务执行时才报泛化错误。
如果日志明确显示 `ModuleNotFoundError: No module named 'vllm'`,说明 MinerU 依赖安装后 editable vLLM 没有注册到虚拟环境。当前 Dockerfile 已在安装 MinerU 后重新执行: 如果日志明确显示 `ModuleNotFoundError: No module named 'vllm'`,常见原因是 vLLM 分发元数据不可见,但 `/opt/vllm` 源码仍在。当前镜像已通过 `PYTHONPATH=/opt/vllm` 和入口脚本兜底保证可导入,避免 editable 安装触发 `pyproject.toml` 元数据校验失败。
```bash ```bash
cd /opt/vllm && /opt/mineru_venv/bin/pip install -e . --no-build-isolation --no-deps export PYTHONPATH=/opt/vllm:${PYTHONPATH}
/opt/mineru_venv/bin/python -c "import vllm; print(vllm.__version__)"
``` ```
入口脚本也会在启动时自动尝试这个修复。你也可以在旧容器里手动验证/修复一次: 入口脚本也会在启动时自动尝试这个修复。你也可以在旧容器里手动验证/修复一次:
```bash ```bash
docker compose exec gradio bash -lc 'cd /opt/vllm && /opt/mineru_venv/bin/pip install -e . --no-build-isolation --no-deps && /opt/mineru_venv/bin/python -c "import vllm; print(vllm.__version__)"' docker compose exec gradio bash -lc 'export PYTHONPATH=/opt/vllm:${PYTHONPATH}; /opt/mineru_venv/bin/python -c "import vllm; print(vllm.__version__)"'
docker compose restart gradio docker compose restart gradio
``` ```
+12 -15
View File
@@ -6,14 +6,11 @@
""" """
import os import os
import subprocess
import sys import sys
import traceback import traceback
VLLM_DIR = '/opt/vllm/vllm' VLLM_DIR = '/opt/vllm/vllm'
VLLM_SRC_DIR = '/opt/vllm' VLLM_SRC_DIR = '/opt/vllm'
VENV_PYTHON = '/opt/mineru_venv/bin/python'
VENV_PIP = '/opt/mineru_venv/bin/pip'
def patch6_init_platform_fallback(): def patch6_init_platform_fallback():
@@ -64,9 +61,9 @@ def patch7_rocm_break_import_cycle():
def ensure_vllm_installed(): def ensure_vllm_installed():
"""确保 vLLM Python 包在当前虚拟环境中可导入。 """确保 vLLM Python 包在当前虚拟环境中可导入。
某些 MinerU 依赖安装流程可能会卸载/覆盖 editable vLLM,导致任务运行时报 某些 MinerU 依赖安装流程后,site-packages 中可能缺少 vLLM 分发元数据,但
"Please install vllm"。如果 /opt/vllm 源码仍在,启动时用 --no-deps 重新注册, /opt/vllm 源码仍在。此时直接把 /opt/vllm 加入 PYTHONPATH/sys.path 再导入,
避免扰动已锁定的 ROCm PyTorch/Triton 依赖。 避免 editable 安装触发 pyproject 元数据校验失败。
""" """
try: try:
import vllm # noqa: F401 import vllm # noqa: F401
@@ -80,16 +77,16 @@ def ensure_vllm_installed():
'vllm is not installed and /opt/vllm source directory is missing' 'vllm is not installed and /opt/vllm source directory is missing'
) )
print('vllm package missing; reinstalling editable /opt/vllm with --no-deps...') print('vllm package missing; trying PYTHONPATH fallback with /opt/vllm...')
subprocess.check_call([ current = os.environ.get('PYTHONPATH', '')
VENV_PIP, paths = [p for p in current.split(':') if p]
'install', if VLLM_SRC_DIR not in paths:
'-e', VLLM_SRC_DIR, os.environ['PYTHONPATH'] = f"{VLLM_SRC_DIR}:{current}" if current else VLLM_SRC_DIR
'--no-build-isolation', if VLLM_SRC_DIR not in sys.path:
'--no-deps', sys.path.insert(0, VLLM_SRC_DIR)
])
import vllm # noqa: F401 import vllm # noqa: F401
print('vllm editable reinstall OK.') print('vllm import recovered via PYTHONPATH fallback.')
def main(): def main():