x
This commit is contained in:
+30
-22
@@ -191,39 +191,39 @@ docker compose build
|
|||||||
|
|
||||||
## 4. 运行容器
|
## 4. 运行容器
|
||||||
|
|
||||||
### 4.1 启动 WebUI / API 服务
|
### 4.1 启动 WebUI 服务(默认推荐)
|
||||||
|
|
||||||
当前 `docker-compose.yml` 默认会启动:
|
当前 `docker-compose.yml` 默认只启动一个 GPU 直连的 `gradio` WebUI 服务,避免单卡机器因为 `worker1` 或可选 Router 退出导致整组服务不可用:
|
||||||
|
|
||||||
| 服务 | 宿主机端口 | 容器内端口 | 用途 |
|
| 服务 | 宿主机端口 | 容器内端口 | 用途 |
|
||||||
|------|------------|------------|------|
|
|------|------------|------------|------|
|
||||||
| `gradio` | `10002` | `7860` | WebUI 前端 |
|
| `gradio` | `10002` | `7860` | WebUI 前端 + 本地推理 |
|
||||||
| `router` | `8000` | `8000` | API 路由 |
|
|
||||||
| `worker0` | 未暴露 | `8001` | GPU Worker |
|
|
||||||
| `worker1` | 未暴露 | `8002` | GPU Worker |
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose up -d
|
docker compose up -d
|
||||||
|
|
||||||
# 查看容器是否都已启动
|
# 查看容器是否都已启动
|
||||||
docker compose ps
|
docker compose ps -a
|
||||||
|
|
||||||
# WebUI 健康检查:应返回 HTML 或 HTTP 状态,而不是 Connection refused
|
# WebUI 健康检查:应返回 HTML 或 HTTP 状态,而不是 Connection refused
|
||||||
curl -v http://localhost:10002/
|
curl -v http://localhost:10002/
|
||||||
|
|
||||||
# API router 端口
|
|
||||||
curl -v http://localhost:8000/
|
|
||||||
```
|
```
|
||||||
|
|
||||||
浏览器打开:`http://<宿主机IP>:10002`。
|
浏览器打开:`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` 命令并映射端口。
|
> 注意:直接 `docker run mineru-rocm:7.2.1` 使用的是 Dockerfile 默认 `CMD ["bash"]`,只会进入/运行 shell,不会启动 WebUI/API,也就不会监听 `10002`。如需直接 `docker run` 暴露 WebUI,必须显式传入 `mineru-gradio` 命令并映射端口。
|
||||||
|
|
||||||
### 4.2 交互模式(调试 / 手动处理)
|
### 4.2 交互模式(调试 / 手动处理)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# docker compose(复用 worker0 的 GPU/卷配置,覆盖 command 进入 bash)
|
# docker compose(复用 gradio 的 GPU/卷配置,覆盖 command 进入 bash)
|
||||||
docker compose run --rm worker0 bash
|
docker compose run --rm gradio bash
|
||||||
|
|
||||||
# 或 docker run
|
# 或 docker run
|
||||||
docker run -it --rm \
|
docker run -it --rm \
|
||||||
@@ -251,7 +251,7 @@ mineru -p /data/input/example.pdf -o /data/output -b hybrid-auto-engine
|
|||||||
### 4.3 CLI 模式(一键处理)
|
### 4.3 CLI 模式(一键处理)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose run --rm worker0 \
|
docker compose run --rm gradio \
|
||||||
mineru -p /data/input/example.pdf -o /data/output -b hybrid-auto-engine
|
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
|
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
|
```bash
|
||||||
docker compose up -d
|
docker compose --profile router-api up -d
|
||||||
|
curl -v http://localhost:8000/
|
||||||
```
|
```
|
||||||
|
|
||||||
- WebUI:`http://<宿主机IP>:10002`
|
双卡时再启用 `dual-gpu` profile,并在 `.env` 中设置:
|
||||||
- API Router:`http://<宿主机IP>:8000`
|
|
||||||
|
```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)。
|
API 用法参考 [MinerU 官方文档](https://github.com/opendatalab/MinerU)。
|
||||||
|
|
||||||
@@ -278,7 +286,7 @@ API 用法参考 [MinerU 官方文档](https://github.com/opendatalab/MinerU)。
|
|||||||
设置环境变量即可切换下载源:
|
设置环境变量即可切换下载源:
|
||||||
|
|
||||||
```bash
|
```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
|
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
|
```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
|
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. 验证
|
## 6. 验证
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose run --rm worker0 python -c "
|
docker compose run --rm gradio python -c "
|
||||||
import torch
|
import torch
|
||||||
from vllm.platforms import current_platform
|
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
|
### 升级 MinerU
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose run --rm worker0 pip install --upgrade 'mineru[core]'
|
docker compose run --rm gradio pip install --upgrade 'mineru[core]'
|
||||||
# 然后重新应用 RDNA 补丁(参考 Dockerfile 阶段 9)
|
# 然后重新应用 RDNA 补丁(参考 Dockerfile 阶段 9)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
+55
-32
@@ -6,35 +6,6 @@
|
|||||||
services:
|
services:
|
||||||
# --- WebUI 前端 ---
|
# --- WebUI 前端 ---
|
||||||
gradio:
|
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
|
image: mineru-rocm:7.2.1
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
@@ -43,10 +14,11 @@ services:
|
|||||||
args:
|
args:
|
||||||
ARCH: ${ARCH:-gfx1201}
|
ARCH: ${ARCH:-gfx1201}
|
||||||
GIT_PROXY: ${GIT_PROXY:-}
|
GIT_PROXY: ${GIT_PROXY:-}
|
||||||
container_name: mineru-worker0
|
container_name: mineru-gradio
|
||||||
stdin_open: true
|
stdin_open: true
|
||||||
tty: true
|
tty: true
|
||||||
ipc: host
|
ipc: host
|
||||||
|
restart: unless-stopped
|
||||||
devices:
|
devices:
|
||||||
- /dev/kfd
|
- /dev/kfd
|
||||||
- /dev/dri
|
- /dev/dri
|
||||||
@@ -54,6 +26,53 @@ services:
|
|||||||
- seccomp=unconfined
|
- seccomp=unconfined
|
||||||
group_add:
|
group_add:
|
||||||
- video
|
- 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:
|
environment:
|
||||||
- HIP_VISIBLE_DEVICES=0
|
- HIP_VISIBLE_DEVICES=0
|
||||||
- MINERU_MODEL_SOURCE=${MINERU_MODEL_SOURCE:-huggingface}
|
- MINERU_MODEL_SOURCE=${MINERU_MODEL_SOURCE:-huggingface}
|
||||||
@@ -69,10 +88,12 @@ services:
|
|||||||
|
|
||||||
worker1:
|
worker1:
|
||||||
image: mineru-rocm:7.2.1
|
image: mineru-rocm:7.2.1
|
||||||
|
profiles: ["dual-gpu"]
|
||||||
container_name: mineru-worker1
|
container_name: mineru-worker1
|
||||||
stdin_open: true
|
stdin_open: true
|
||||||
tty: true
|
tty: true
|
||||||
ipc: host
|
ipc: host
|
||||||
|
restart: unless-stopped
|
||||||
devices:
|
devices:
|
||||||
- /dev/kfd
|
- /dev/kfd
|
||||||
- /dev/dri
|
- /dev/dri
|
||||||
@@ -80,6 +101,7 @@ services:
|
|||||||
- seccomp=unconfined
|
- seccomp=unconfined
|
||||||
group_add:
|
group_add:
|
||||||
- video
|
- video
|
||||||
|
- render
|
||||||
environment:
|
environment:
|
||||||
- HIP_VISIBLE_DEVICES=1
|
- HIP_VISIBLE_DEVICES=1
|
||||||
- MINERU_MODEL_SOURCE=${MINERU_MODEL_SOURCE:-huggingface}
|
- MINERU_MODEL_SOURCE=${MINERU_MODEL_SOURCE:-huggingface}
|
||||||
@@ -95,10 +117,12 @@ services:
|
|||||||
|
|
||||||
router:
|
router:
|
||||||
image: mineru-rocm:7.2.1
|
image: mineru-rocm:7.2.1
|
||||||
|
profiles: ["router-api"]
|
||||||
container_name: mineru-router
|
container_name: mineru-router
|
||||||
stdin_open: true
|
stdin_open: true
|
||||||
tty: true
|
tty: true
|
||||||
ipc: host
|
ipc: host
|
||||||
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
- "8000:8000"
|
- "8000:8000"
|
||||||
environment:
|
environment:
|
||||||
@@ -111,11 +135,10 @@ services:
|
|||||||
[
|
[
|
||||||
"mineru-router",
|
"mineru-router",
|
||||||
"--api-urls",
|
"--api-urls",
|
||||||
"http://mineru-worker0:8001,http://mineru-worker1:8002",
|
"${ROUTER_API_URLS:-http://mineru-worker0:8001}",
|
||||||
"--host", "0.0.0.0",
|
"--host", "0.0.0.0",
|
||||||
"--port", "8000",
|
"--port", "8000",
|
||||||
"--allow-public-http-client",
|
"--allow-public-http-client",
|
||||||
]
|
]
|
||||||
depends_on:
|
depends_on:
|
||||||
- worker0
|
- worker0
|
||||||
- worker1
|
|
||||||
|
|||||||
@@ -15,6 +15,15 @@ OUTPUT_DIR=./data/output
|
|||||||
MODEL_DIR=./data/models
|
MODEL_DIR=./data/models
|
||||||
MIOPEN_CACHE=./data/miopen
|
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(国内可用)
|
# huggingface(默认,需科学上网)或 modelscope(国内可用)
|
||||||
MINERU_MODEL_SOURCE=huggingface
|
MINERU_MODEL_SOURCE=huggingface
|
||||||
|
|||||||
Reference in New Issue
Block a user