Files
rag/docs/MinerU模型部署指南.md
lacerate551 8268071fdc docs: 模型切换至 mimo-v2.5 + 文档全面更新
- config.py: INTENT_MODEL 从 deepseek-v4-flash 切换至 mimo-v2.5
- config.py: get_intent_client() 从百炼 API 切换至 mimo API
- RAG系统完整指南.md: v4.0→v4.1,新增图片检索子系统、P0安全网、
  救援管线、五层缓存架构文档;替换所有旧模型名和API地址
- RAG数据流程.md: 完全重写,匹配实际代码逻辑
- curl测试手册.md: 更新模型名和Reranker配置
- MinerU模型部署指南.md: VLM_MODEL 更新为 mimo-v2.5
- 开发与系统模块说明.md: API地址和模型名更新
- 测试指南.md: API地址和模型名更新
2026-06-21 23:11:46 +08:00

550 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MinerU 模型部署指南
> 解决服务器部署时的模型路径配置问题
---
## 一、当前配置分析
### 1.1 MinerU 模型路径机制
MinerU 通过以下方式确定模型路径:
```python
# 1. 读取环境变量 MINERU_MODEL_SOURCE
model_source = os.getenv('MINERU_MODEL_SOURCE', "huggingface")
# 2. 如果是 local 模式,读取配置文件
if model_source == 'local':
config = read_config() # 读取 ~/mineru.json
models_dir = config.get('models-dir')
# 3. 否则从 HuggingFace 自动下载到缓存目录
else:
# 默认下载到 ~/.cache/huggingface/hub/
pass
```
### 1.2 配置文件位置
MinerU 配置文件查找顺序:
1. **环境变量指定**`MINERU_TOOLS_CONFIG_JSON`
2. **默认位置**`~/mineru.json`(用户主目录)
**Windows**`C:\Users\<username>\mineru.json`
**Linux**`/root/mineru.json``/home/<user>/mineru.json`
### 1.3 MinerU 在线 API 模式
项目同时支持 MinerU 在线 API 解析,通过 `.env.production` 中的 `MINERU_API_TOKEN` 环境变量配置。当设置了该 Token 时,可直接调用 OpenDataLab 云端 API 进行文档解析,无需在本地部署模型。
### 1.4 当前项目使用方式
查看 `parsers/mineru_parser.py` 第 186-197 行:
```python
cmd = [
str(mineru_exe),
"-p", str(file_path),
"-o", str(output_dir),
"-m", "auto",
"-b", backend,
"-l", lang,
# ...
]
```
**关键发现**
- 代码中**没有硬编码路径**
- 使用命令行调用 `mineru` 可执行文件
- MinerU 自动读取配置文件或环境变量
- 所有配置均通过 `.env.production` 环境变量注入,不依赖 `config.py` 硬编码
---
## 二、问题场景
### 场景 1开发环境本机
```
模型位置C:\Users\qq318\.cache\huggingface\hub\
配置文件C:\Users\qq318\mineru.json可能不存在
模型来源:首次运行时自动从 HuggingFace 下载
```
### 场景 2生产环境服务器 Docker
```
问题:
1. Docker 容器内用户目录是 /root/
2. 模型没有打包到镜像中
3. 首次启动会尝试下载模型(可能失败或很慢)
```
---
## 三、解决方案
### 方案 A本地模型模式推荐
**适用场景**
- 服务器无法访问 HuggingFace
- 需要离线部署
- 希望加快启动速度
#### Step 1下载模型到项目目录
在**本机**执行:
```bash
# 激活虚拟环境
cd C:\Users\qq318\Desktop\rag-agent
venv\Scripts\activate
# 创建模型目录
mkdir models\mineru
# 下载所有模型
mineru-models-download -s huggingface -m all -d models\mineru
```
**说明**
- `-s huggingface`:从 HuggingFace 下载
- `-m all`下载所有模型pipeline + vlm
- `-d models\mineru`:指定下载目录
#### Step 2创建配置文件
在项目根目录创建 `mineru.json`
```json
{
"models-dir": {
"pipeline": "/app/models/mineru/pipeline",
"vlm": "/app/models/mineru/vlm"
},
"config_version": "1.3.1"
}
```
**注意**:路径使用 Docker 容器内的路径 `/app/`
#### Step 3生产环境 Dockerfile
当前项目使用 `deploy/Dockerfile.prod`(基于 Python 3.10-slimCPU-only PyTorch
```dockerfile
# Dockerfile.prod - 生产环境优化版
# ================================
# 特点CPU-only、精简依赖、最小化镜像
FROM python:3.10-slim
WORKDIR /app
# 使用阿里云镜像源
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources \
&& sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources
# 系统依赖(精简版)
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
poppler-utils \
libmagic1 \
curl \
&& rm -rf /var/lib/apt/lists/*
# ==================== PyTorchCPU 模式) ====================
# 先从阿里云安装 PyTorch 依赖(避免从 PyPI 下载超时)
RUN pip install --no-cache-dir networkx sympy mpmath typing-extensions \
-i https://mirrors.aliyun.com/pypi/simple/
# 再从 PyTorch 官方源下载 CPU-only 版本(约 200MB跳过依赖解析
RUN pip install --no-cache-dir --no-deps torch --index-url https://download.pytorch.org/whl/cpu
# 设置 PyTorch 使用 CPU 模式
ENV CUDA_VISIBLE_DEVICES=""
# ==================== Python 依赖 ====================
COPY requirements-prod.txt .
RUN pip install --no-cache-dir -r requirements-prod.txt \
-i https://mirrors.aliyun.com/pypi/simple/
# ==================== 应用代码 ====================
COPY . .
# ==================== MinerU 配置 ====================
# 生产环境使用本地模型
RUN mkdir -p /root && echo '{\n\
"models-dir": {\n\
"pipeline": "/app/models/mineru/pipeline",\n\
"vlm": "/app/models/mineru/vlm"\n\
},\n\
"config_version": "1.3.1"\n\
}' > /root/mineru.json
ENV MINERU_MODEL_SOURCE=local
ENV MINERU_TOOLS_CONFIG_JSON=/root/mineru.json
# ==================== 数据目录 ====================
RUN mkdir -p knowledge/vector_store documents models .data
# ==================== 环境变量 ====================
ENV APP_ENV=prod
ENV PYTHONUNBUFFERED=1
EXPOSE 5001
# 生产模式启动
CMD ["gunicorn", "-c", "deploy/gunicorn.conf.py", "deploy.wsgi:app"]
```
#### Step 4构建镜像
```bash
# 从项目根目录执行构建
docker-compose -f deploy/docker-compose.prod.yml up -d --build
# 或单独构建镜像
docker build -f deploy/Dockerfile.prod -t rag-service:latest .
# 查看镜像大小
docker images rag-service
```
**预期镜像大小**:约 5-8GB包含模型
---
### 方案 B挂载模型目录灵活
**适用场景**
- 多个容器共享模型
- 模型文件太大,不想打包到镜像
- 需要动态更新模型
#### Step 1在服务器上准备模型
```bash
# 在服务器上创建模型目录
mkdir -p /data/mineru-models
# 方式1从本机上传
scp -r models/mineru/* user@server:/data/mineru-models/
# 方式2在服务器上下载
ssh user@server
cd /data/mineru-models
pip install mineru[all]
mineru-models-download -s huggingface -m all -d /data/mineru-models
```
#### Step 2创建配置文件
在服务器上创建 `/data/mineru.json`
```json
{
"models-dir": {
"pipeline": "/models/pipeline",
"vlm": "/models/vlm"
},
"config_version": "1.3.1"
}
```
#### Step 3Docker Compose 配置
当前项目使用 `deploy/docker-compose.prod.yml`
```yaml
# docker-compose.prod.yml - 生产环境部署配置
version: '3.8'
services:
rag-service:
build:
context: ..
dockerfile: deploy/Dockerfile.prod
container_name: rag-service
env_file:
- .env.production
ports:
- "5001:5001"
volumes:
# 数据目录挂载(代码在镜像内,不挂载)
- ../knowledge/vector_store:/app/knowledge/vector_store
- ../documents:/app/documents
- ../models:/app/models
- ../.data:/app/.data
- ../data:/app/data
restart: unless-stopped
shm_size: '256m'
deploy:
resources:
limits:
memory: 4G
reservations:
memory: 2G
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:5001/health || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
```
**关键配置说明**
- `env_file: .env.production`:通过 `.env.production` 文件注入所有环境变量(包括 `MINERU_API_TOKEN``DASHSCOPE_API_KEY` 等),不使用 `config.py` 硬编码
- `../models:/app/models`将宿主机模型目录挂载到容器内Dockerfile.prod 中已配置 `MINERU_MODEL_SOURCE=local``MINERU_TOOLS_CONFIG_JSON=/root/mineru.json`
- 端口映射 `5001:5001`,容器名为 `rag-service`
#### Step 4启动服务
```bash
# 从项目根目录执行
docker-compose -f deploy/docker-compose.prod.yml up -d
```
---
### 方案 C自动下载模式不推荐
**适用场景**
- 服务器可以访问 HuggingFace
- 不介意首次启动慢
#### 配置
```dockerfile
# Dockerfile 不需要复制模型
# 首次启动时自动下载到 /root/.cache/huggingface/
# docker-compose.yml
services:
rag-service:
volumes:
# 持久化模型缓存
- mineru-cache:/root/.cache/huggingface
environment:
- MINERU_MODEL_SOURCE=huggingface # 或不设置
volumes:
mineru-cache:
```
**缺点**
- 首次启动需要下载 5-8GB 模型
- 依赖网络连接
- 可能因为网络问题失败
---
## 四、环境变量配置(.env.production
生产环境所有配置通过 `deploy/.env.production` 文件注入,不依赖 `config.py` 硬编码。
### 4.1 .env.production 示例
```bash
# .env.production - 生产环境配置
# 部署到服务器时复制到 deploy/.env.production
# 环境标识
APP_ENV=prod
# LLM API
DASHSCOPE_API_KEY=<your-api-key>
DASHSCOPE_BASE_URL=<your-base-url>
DASHSCOPE_MODEL=mimo-v2.5
RAG_CHAT_MODEL=mimo-v2.5
INTENT_MODEL=mimo-v2.5
VLM_MODEL=mimo-v2.5
# MinerU 在线 API可选设置后无需本地模型
MINERU_API_TOKEN=<your-mineru-api-token>
# 网络搜索(按需开启)
ENABLE_WEB_SEARCH=false
SERPER_API_KEY=<your-serper-key>
# Rerank ONNX 加速CPU 服务器建议关闭)
RERANK_USE_ONNX=false
```
### 4.2 MinerU 模型路径配置方式
| 方式 | 配置位置 | 说明 |
|------|----------|------|
| `MINERU_API_TOKEN` 环境变量 | `.env.production` | 使用 MinerU 云端 API无需本地模型 |
| `mineru.json` 配置文件 | `/root/mineru.json`(容器内) | 指定本地模型路径Dockerfile.prod 已自动生成 |
| `MINERU_MODEL_SOURCE` 环境变量 | Dockerfile.prod 中设置 | `local` 使用本地模型,`huggingface` 自动下载 |
---
## 五、验证部署
### 5.1 检查模型路径
进入容器检查:
```bash
# 进入容器
docker exec -it rag-service bash
# 检查配置文件
cat /root/mineru.json
# 检查模型目录
ls -lh /app/models/mineru/pipeline/
ls -lh /app/models/mineru/vlm/
# 测试 MinerU
python -c "from mineru.utils.config_reader import read_config; print(read_config())"
```
### 5.2 测试解析
```bash
# 在容器内测试
cd /app
python parsers/mineru_parser.py documents/test.pdf
```
### 5.3 查看日志
```bash
# 查看容器日志
docker logs -f rag-service
# 应该看到类似输出:
# [INFO] MinerU 配置: local 模式
# [INFO] 模型路径: /app/models/mineru/pipeline
```
---
## 六、模型文件清单
### Pipeline 模型(必需)
```
models/mineru/pipeline/
├── Layout/
│ ├── model.pt
│ └── config.json
├── MFD/
│ ├── yolov8_mfd.pt
│ └── config.json
├── MFR/
│ ├── unimernet_small.pt
│ └── config.json
├── OCR/
│ ├── det_db.pth
│ ├── rec_crnn.pth
│ └── config.json
└── TableRec/
├── table_rec.pt
└── config.json
```
**总大小**:约 3-4GB
### VLM 模型(可选,高精度模式)
```
models/mineru/vlm/
├── qwen2-vl/
│ ├── model.safetensors
│ ├── config.json
│ └── tokenizer/
└── ...
```
**总大小**:约 4-5GB
---
## 七、常见问题
### Q1: 镜像太大怎么办?
**A**: 使用方案 B挂载模型目录镜像只包含代码模型在宿主机。
### Q2: 如何更新模型?
**A**:
- 方案 A重新构建镜像
- 方案 B直接替换宿主机上的模型文件重启容器
### Q3: 模型下载失败怎么办?
**A**:
1. 使用国内镜像:`export HF_ENDPOINT=https://hf-mirror.com`
2. 手动下载后上传到服务器
3. 使用方案 A 在本机下载后打包
### Q4: 如何减少模型大小?
**A**:
- 只下载 pipeline 模型(不下载 vlm
- 使用 `mineru-models-download -m pipeline` 而不是 `-m all`
### Q5: 配置文件不生效?
**A**: 检查:
1. 环境变量 `MINERU_MODEL_SOURCE=local` 是否设置
2. 配置文件路径是否正确:`/root/mineru.json`
3. 配置文件格式是否正确JSON 语法)
4. 模型目录路径是否存在
### Q6: 如何使用 MinerU 在线 API 代替本地模型?
**A**: 在 `.env.production` 中设置 `MINERU_API_TOKEN=<your-token>`无需在本地部署模型。Token 可从 OpenDataLab 平台获取。
---
## 八、推荐方案总结
| 方案 | 优点 | 缺点 | 适用场景 |
|------|------|------|----------|
| **方案 A打包到镜像** | 部署简单、启动快 | 镜像大、更新麻烦 | 单机部署、离线环境 |
| **方案 B挂载目录** | 灵活、易更新、多容器共享 | 需要管理宿主机文件 | 多节点、生产环境 |
| **方案 C自动下载** | 镜像小 | 首次启动慢、依赖网络 | 测试环境 |
| **在线 API** | 无需本地模型、镜像最小 | 依赖网络、有调用限制 | 轻量部署、测试环境 |
**生产环境推荐**:方案 B挂载模型目录+ `.env.production` 环境变量注入
---
## 九、部署检查清单
部署前检查:
- [ ] 模型文件已下载到 `models/mineru/` 目录
- [ ] 创建了 `deploy/.env.production` 配置文件(含 `MINERU_API_TOKEN` 等环境变量)
- [ ] 确认使用 `deploy/Dockerfile.prod``deploy/docker-compose.prod.yml`
- [ ] 测试了本地解析功能
- [ ] 确认模型文件大小3-8GB
部署后检查:
- [ ] 容器启动成功:`docker ps | grep rag-service`
- [ ] 配置文件存在:`docker exec rag-service cat /root/mineru.json`
- [ ] 模型目录存在:`docker exec rag-service ls /app/models/mineru`
- [ ] 环境变量正确:`docker exec rag-service env | grep MINERU`
- [ ] 健康检查通过:`curl http://localhost:5001/health`
- [ ] 测试解析功能:上传一个 PDF 测试
- [ ] 查看日志无错误:`docker logs -f rag-service`
---
**文档版本**: v1.1
**最后更新**: 2026-06-04
**维护者**: RAG 服务开发组