This commit is contained in:
2026-06-11 18:10:02 +08:00
parent efeca5f2af
commit 4bbeb5673e
3 changed files with 94 additions and 54 deletions
+30 -22
View File
@@ -191,39 +191,39 @@ docker compose build
## 4. 运行容器
### 4.1 启动 WebUI / API 服务
### 4.1 启动 WebUI 服务(默认推荐)
当前 `docker-compose.yml` 默认会启动:
当前 `docker-compose.yml` 默认只启动一个 GPU 直连的 `gradio` WebUI 服务,避免单卡机器因为 `worker1` 或可选 Router 退出导致整组服务不可用:
| 服务 | 宿主机端口 | 容器内端口 | 用途 |
|------|------------|------------|------|
| `gradio` | `10002` | `7860` | WebUI 前端 |
| `router` | `8000` | `8000` | API 路由 |
| `worker0` | 未暴露 | `8001` | GPU Worker |
| `worker1` | 未暴露 | `8002` | GPU Worker |
| `gradio` | `10002` | `7860` | WebUI 前端 + 本地推理 |
```bash
docker compose up -d
# 查看容器是否都已启动
docker compose ps
docker compose ps -a
# WebUI 健康检查:应返回 HTML 或 HTTP 状态,而不是 Connection refused
curl -v http://localhost:10002/
# API router 端口
curl -v http://localhost:8000/
```
浏览器打开:`http://<宿主机IP>:10002`。
如果 `docker compose ps` 为空或显示 `Exited`,说明服务进程启动后退出,请先看日志:
```bash
docker compose logs --tail=200 gradio
```
> 注意:直接 `docker run mineru-rocm:7.2.1` 使用的是 Dockerfile 默认 `CMD ["bash"]`,只会进入/运行 shell,不会启动 WebUI/API,也就不会监听 `10002`。如需直接 `docker run` 暴露 WebUI,必须显式传入 `mineru-gradio` 命令并映射端口。
### 4.2 交互模式(调试 / 手动处理)
```bash
# docker compose(复用 worker0 的 GPU/卷配置,覆盖 command 进入 bash)
docker compose run --rm worker0 bash
# docker compose(复用 gradio 的 GPU/卷配置,覆盖 command 进入 bash)
docker compose run --rm gradio bash
# 或 docker run
docker run -it --rm \
@@ -251,7 +251,7 @@ mineru -p /data/input/example.pdf -o /data/output -b hybrid-auto-engine
### 4.3 CLI 模式(一键处理)
```bash
docker compose run --rm worker0 \
docker compose run --rm gradio \
mineru -p /data/input/example.pdf -o /data/output -b hybrid-auto-engine
```
@@ -260,16 +260,24 @@ docker compose run --rm worker0 \
command: mineru -p /data/input/example.pdf -o /data/output -b hybrid-auto-engine
```
### 4.4 WebUI / API 模式
### 4.4 可选:Router API 多 Worker 模式
无需修改 Compose,直接启动即可:
如果确实需要独立 API Router,可启用 `router-api` profile。默认只启用 `worker0`,避免单卡机器启动 `worker1` 失败:
```bash
docker compose up -d
docker compose --profile router-api up -d
curl -v http://localhost:8000/
```
- WebUI:`http://<宿主机IP>:10002`
- API Router:`http://<宿主机IP>:8000`
双卡时再启用 `dual-gpu` profile,并在 `.env` 中设置:
```env
ROUTER_API_URLS=http://mineru-worker0:8001,http://mineru-worker1:8002
```
```bash
docker compose --profile router-api --profile dual-gpu up -d
```
API 用法参考 [MinerU 官方文档](https://github.com/opendatalab/MinerU)。
@@ -278,7 +286,7 @@ API 用法参考 [MinerU 官方文档](https://github.com/opendatalab/MinerU)。
设置环境变量即可切换下载源:
```bash
docker compose run --rm -e MINERU_MODEL_SOURCE=modelscope worker0 \
docker compose run --rm -e MINERU_MODEL_SOURCE=modelscope gradio \
mineru -p /data/input/example.pdf -o /data/output -b hybrid-auto-engine
```
@@ -292,7 +300,7 @@ docker compose run --rm -e MINERU_MODEL_SOURCE=modelscope worker0 \
```bash
# 进入容器
docker compose run --rm worker0 bash
docker compose run --rm gradio bash
# 运行预热
python /opt/scripts/cache_warmer.py --device cuda --max_side 960 --step 32
@@ -310,7 +318,7 @@ python /opt/scripts/cache_warmer.py --device cuda --max_side 960 --step 32
## 6. 验证
```bash
docker compose run --rm worker0 python -c "
docker compose run --rm gradio python -c "
import torch
from vllm.platforms import current_platform
@@ -438,7 +446,7 @@ RUN rm -rf /opt/vllm_build /opt/vllm/.git /opt/aiter/.git /opt/flash-attention/.
### 升级 MinerU
```bash
docker compose run --rm worker0 pip install --upgrade 'mineru[core]'
docker compose run --rm gradio pip install --upgrade 'mineru[core]'
# 然后重新应用 RDNA 补丁(参考 Dockerfile 阶段 9)
```
+55 -32
View File
@@ -6,35 +6,6 @@
services:
# --- WebUI 前端 ---
gradio:
image: mineru-rocm:7.2.1
container_name: mineru-gradio
stdin_open: true
tty: true
ipc: host
ports:
- "10002:7860"
environment:
- GRADIO_SERVER_NAME=0.0.0.0
- MINERU_MODEL_SOURCE=${MINERU_MODEL_SOURCE:-huggingface}
- HF_HUB_CACHE=${HF_HUB_CACHE:-/opt/models/huggingface}
- MODELSCOPE_CACHE=${MODELSCOPE_CACHE:-/opt/models/modelscope}
volumes:
- ${INPUT_DIR:-./data/input}:/data/input:ro
- ${OUTPUT_DIR:-./data/output}:/data/output
- ${MODEL_DIR:-./data/models}:/opt/models
- ./scripts:/opt/scripts:ro
command:
[
"mineru-gradio",
"--server-name", "0.0.0.0",
"--server-port", "7860",
"--api-url", "http://mineru-router:8000",
]
depends_on:
- router
# --- 双卡 Worker(GPU 算力,无 profile,始终可用)---
worker0:
image: mineru-rocm:7.2.1
build:
context: .
@@ -43,10 +14,11 @@ services:
args:
ARCH: ${ARCH:-gfx1201}
GIT_PROXY: ${GIT_PROXY:-}
container_name: mineru-worker0
container_name: mineru-gradio
stdin_open: true
tty: true
ipc: host
restart: unless-stopped
devices:
- /dev/kfd
- /dev/dri
@@ -54,6 +26,53 @@ services:
- seccomp=unconfined
group_add:
- video
- render
ports:
- "10002:7860"
environment:
- GRADIO_SERVER_NAME=0.0.0.0
- HIP_VISIBLE_DEVICES=${HIP_VISIBLE_DEVICES:-0}
- MINERU_MODEL_SOURCE=${MINERU_MODEL_SOURCE:-huggingface}
- HF_HUB_CACHE=${HF_HUB_CACHE:-/opt/models/huggingface}
- MODELSCOPE_CACHE=${MODELSCOPE_CACHE:-/opt/models/modelscope}
volumes:
- ${INPUT_DIR:-./data/input}:/data/input:ro
- ${OUTPUT_DIR:-./data/output}:/data/output
- ${MODEL_DIR:-./data/models}:/opt/models
- ${MIOPEN_CACHE:-./data/miopen}:/root/.cache/miopen
- ./scripts:/opt/scripts:ro
command:
[
"mineru-gradio",
"--server-name", "0.0.0.0",
"--server-port", "7860",
]
healthcheck:
test: ["CMD-SHELL", "curl -fsS http://127.0.0.1:7860/ >/dev/null || exit 1"]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
# --- 可选:多 Worker API Router 模式(默认不启动)---
# 启用方式:docker compose --profile router-api up -d
# 单卡默认请使用上面的 gradio 服务;双卡时可在 .env 中设置 ROUTER_API_URLS。
worker0:
image: mineru-rocm:7.2.1
profiles: ["router-api"]
container_name: mineru-worker0
stdin_open: true
tty: true
ipc: host
restart: unless-stopped
devices:
- /dev/kfd
- /dev/dri
security_opt:
- seccomp=unconfined
group_add:
- video
- render
environment:
- HIP_VISIBLE_DEVICES=0
- MINERU_MODEL_SOURCE=${MINERU_MODEL_SOURCE:-huggingface}
@@ -69,10 +88,12 @@ services:
worker1:
image: mineru-rocm:7.2.1
profiles: ["dual-gpu"]
container_name: mineru-worker1
stdin_open: true
tty: true
ipc: host
restart: unless-stopped
devices:
- /dev/kfd
- /dev/dri
@@ -80,6 +101,7 @@ services:
- seccomp=unconfined
group_add:
- video
- render
environment:
- HIP_VISIBLE_DEVICES=1
- MINERU_MODEL_SOURCE=${MINERU_MODEL_SOURCE:-huggingface}
@@ -95,10 +117,12 @@ services:
router:
image: mineru-rocm:7.2.1
profiles: ["router-api"]
container_name: mineru-router
stdin_open: true
tty: true
ipc: host
restart: unless-stopped
ports:
- "8000:8000"
environment:
@@ -111,11 +135,10 @@ services:
[
"mineru-router",
"--api-urls",
"http://mineru-worker0:8001,http://mineru-worker1:8002",
"${ROUTER_API_URLS:-http://mineru-worker0:8001}",
"--host", "0.0.0.0",
"--port", "8000",
"--allow-public-http-client",
]
depends_on:
- worker0
- worker1
+9
View File
@@ -15,6 +15,15 @@ OUTPUT_DIR=./data/output
MODEL_DIR=./data/models
MIOPEN_CACHE=./data/miopen
# ---- 默认 WebUI 使用的 GPU ----
# 单卡保持 0;多卡时可指定 0/1/...,或留空让 ROCm 使用全部可见 GPU。
HIP_VISIBLE_DEVICES=0
# ---- 可选:router-api profile 使用的 Worker 地址 ----
# 单 worker: http://mineru-worker0:8001
# 双 worker: http://mineru-worker0:8001,http://mineru-worker1:8002
ROUTER_API_URLS=http://mineru-worker0:8001
# ---- 模型下载源 ----
# huggingface(默认,需科学上网)或 modelscope(国内可用)
MINERU_MODEL_SOURCE=huggingface