# 服务端守护进程脚本 本目录包含所有 OCR 工具的服务端守护进程脚本,用于启动和管理 HTTP API 服务。 ## 概述 这些守护进程脚本用于在服务器上启动和管理各种 OCR 服务的 HTTP API 端点。客户端工具(位于 `ocr_tools/*_tool/` 目录)可以通过这些 API 端点调用远程服务进行文档处理。 ## 脚本列表 | 脚本文件 | 服务类型 | 默认端口 | 服务 URL | |---------|---------|---------|---------| | `mineru_vllm_daemon.sh` | MinerU vLLM | 8121 | http://localhost:8121 | | `ppstructure_v3_daemon.sh` | PP-StructureV3 API | 8111 | http://localhost:8111/layout-parsing | | `paddle_vllm_daemon.sh` | PaddleOCR-VL vLLM | 8110 | http://localhost:8110 | | `dotsocr_vllm_daemon.sh` | DotsOCR vLLM | 8101 | http://localhost:8101 | ## 脚本与客户端工具映射 | 服务端脚本 | 客户端工具 | 服务类型 | 默认端口 | API 端点 | |-----------|----------|---------|---------|---------| | `mineru_vllm_daemon.sh` | `mineru_vl_tool/main.py` | MinerU vLLM | 8121 | http://localhost:8121 | | `ppstructure_v3_daemon.sh` | `ppstructure_tool/api_client.py` | PP-StructureV3 API | 8111 | http://localhost:8111/layout-parsing | | `paddle_vllm_daemon.sh` | `paddle_vl_tool/main.py` | PaddleOCR-VL vLLM | 8110 | http://localhost:8110 | | `dotsocr_vllm_daemon.sh` | `dots.ocr_vl_tool/main.py` | DotsOCR vLLM | 8101 | http://localhost:8101 | ## 快速开始 ### 基本使用 所有脚本都支持以下命令: ```bash # 启动服务 ./script_name.sh start # 停止服务 ./script_name.sh stop # 重启服务 ./script_name.sh restart # 查看服务状态 ./script_name.sh status # 查看日志(实时) ./script_name.sh logs # 查看配置 ./script_name.sh config # 测试 API(如果支持) ./script_name.sh test ``` ### 示例 ```bash # 启动 MinerU vLLM 服务 cd ocr_tools/daemons ./mineru_vllm_daemon.sh start # 查看服务状态 ./mineru_vllm_daemon.sh status # 查看日志 ./mineru_vllm_daemon.sh logs ``` ## 各脚本详细说明 ### 1. mineru_vllm_daemon.sh **服务类型**:MinerU vLLM 服务 **配置参数**: - `CONDA_ENV`: conda 环境名称(默认: `mineru2`) - `PORT`: 服务端口(默认: `8121`) - `HOST`: 服务主机(默认: `0.0.0.0`) - `MODEL_PATH`: 模型路径 - `MODEL_NAME`: 模型名称(默认: `MinerU2.5`) - `GPU_MEMORY_UTILIZATION`: GPU 内存利用率(默认: `0.3`) - `CUDA_VISIBLE_DEVICES`: 可见的 CUDA 设备(默认: `4`) **启动方法**: ```bash ./mineru_vllm_daemon.sh start ``` **服务 URL**: - API 端点: `http://localhost:8121` - API 文档: `http://localhost:8121/docs` **依赖环境**: - conda 环境: `mineru2` - 需要安装: `mineru-vllm-server` **客户端使用**: ```bash # 使用 mineru_vl_tool 调用服务 cd ../mineru_vl_tool python main.py --input document.pdf --output_dir ./output --server_url http://localhost:8121 ``` ### 2. ppstructure_v3_daemon.sh **服务类型**:PP-StructureV3 API 服务 **配置参数**: - `CONDA_ENV`: conda 环境名称(默认: `paddle`) - `PORT`: 服务端口(默认: `8111`) - `CUDA_VISIBLE_DEVICES`: 可见的 CUDA 设备(默认: `7`) - `SCRIPT_DIR`: PaddleX 脚本目录 - `PIPELINE_CONFIG`: Pipeline 配置文件路径 **启动方法**: ```bash ./ppstructure_v3_daemon.sh start ``` **服务 URL**: - API 端点: `http://localhost:8111/layout-parsing` - API 文档: `http://localhost:8111/docs` **依赖环境**: - conda 环境: `paddle` - 需要安装: `paddlex` - 需要脚本: `start_paddlex_with_adapter.py`(位于 `ocr_tools/paddle_common/` 目录) **配置说明**: - 脚本中的 `PADDLE_COMMON_DIR` 需要根据实际部署环境设置为 `ocr_platform/ocr_tools/paddle_common` 的绝对路径 - Pipeline 配置文件可以使用 `paddle_common/config/` 中的配置文件 **客户端使用**: ```bash # 使用 ppstructure_tool/api_client.py 调用服务 cd ../ppstructure_tool python api_client.py --input document.pdf --output_dir ./output --api_url http://localhost:8111/layout-parsing ``` ### 3. paddle_vllm_daemon.sh **服务类型**:PaddleOCR-VL vLLM 服务 **配置参数**: - `CONDA_ENV`: conda 环境名称(默认: `paddle`) - `PORT`: 服务端口(默认: `8110`) - `HOST`: 服务主机(默认: `0.0.0.0`) - `MODEL_NAME`: 模型名称(默认: `PaddleOCR-VL-0.9B`) - `BACKEND`: 后端类型(默认: `vllm`) - `GPU_MEMORY_UTILIZATION`: GPU 内存利用率(默认: `0.3`) - `CUDA_VISIBLE_DEVICES`: 可见的 CUDA 设备(默认: `3`) **启动方法**: ```bash ./paddle_vllm_daemon.sh start ``` **服务 URL**: - API 端点: `http://localhost:8110` - API 文档: `http://localhost:8110/docs` **依赖环境**: - conda 环境: `paddle` - 需要安装: `paddlex` 和 `genai-vllm-server` 插件 ```bash paddlex --install genai-vllm-server ``` **客户端使用**: ```bash # 使用 paddle_vl_tool 调用服务(通过配置文件指定 vLLM 服务器) cd ../paddle_vl_tool python main.py --input document.pdf --output_dir ./output \ --pipeline ../paddle_common/config/PaddleOCR-VL-Client.yaml ``` ### 4. dotsocr_vllm_daemon.sh **服务类型**:DotsOCR vLLM 服务 **配置参数**: - `CONDA_ENV`: conda 环境名称(默认: `dots.ocr`) - `PORT`: 服务端口(默认: `8101`) - `HOST`: 服务主机(默认: `0.0.0.0`) - `HF_MODEL_PATH`: HuggingFace 模型路径 - `MODEL_NAME`: 模型名称(默认: `DotsOCR`) - `GPU_MEMORY_UTILIZATION`: GPU 内存利用率(默认: `0.70`) - `CUDA_VISIBLE_DEVICES`: 可见的 CUDA 设备(默认: `1,2`) - `DATA_PARALLEL_SIZE`: 数据并行大小(默认: `2`) **启动方法**: ```bash ./dotsocr_vllm_daemon.sh start ``` **服务 URL**: - API 端点: `http://localhost:8101` - API 文档: `http://localhost:8101/docs` **依赖环境**: - conda 环境: `dots.ocr` - 需要安装: `vllm` - 需要模型: DotsOCR 模型文件 **客户端使用**: ```bash # 使用 dots.ocr_vl_tool 调用服务 cd ../dots.ocr_vl_tool python main.py --input document.pdf --output_dir ./output --ip localhost --port 8101 ``` ## 部署建议 ### 1. 环境准备 - 确保所有依赖的 conda 环境已正确安装 - 确保模型文件已下载并放置在正确位置 - 确保 GPU 驱动和 CUDA 已正确安装 ### 2. 配置调整 在部署前,请根据实际环境调整脚本中的配置参数: - **日志目录**:默认使用 `/home/ubuntu/zhch/logs`,可根据需要修改 - **conda 路径**:根据实际 conda 安装路径调整 - **模型路径**:确保模型路径正确 - **GPU 设备**:根据实际 GPU 配置调整 `CUDA_VISIBLE_DEVICES` - **端口号**:确保端口未被占用 ### 3. 权限设置 ```bash # 为所有脚本添加执行权限 chmod +x *.sh ``` ### 4. 使用 systemd 管理(推荐) 可以创建 systemd 服务文件来管理这些守护进程,实现自动启动和重启: ```ini [Unit] Description=MinerU vLLM Service After=network.target [Service] Type=forking User=ubuntu WorkingDirectory=/path/to/ocr_platform/ocr_tools/daemons ExecStart=/path/to/ocr_platform/ocr_tools/daemons/mineru_vllm_daemon.sh start ExecStop=/path/to/ocr_platform/ocr_tools/daemons/mineru_vllm_daemon.sh stop Restart=always [Install] WantedBy=multi-user.target ``` ### 5. 日志管理 所有服务的日志文件位于 `/home/ubuntu/zhch/logs/` 目录: - `mineru_vllm.log` - MinerU vLLM 服务日志 - `ppstructurev3.log` - PP-StructureV3 服务日志 - `paddleocr_vl_vllm.log` - PaddleOCR-VL vLLM 服务日志 - `vllm.log` - DotsOCR vLLM 服务日志 建议定期清理或轮转日志文件。 ## 故障排查 ### 问题:服务启动失败 **可能原因**: 1. conda 环境未正确激活 2. 依赖包未安装 3. 模型文件不存在 4. 端口已被占用 5. GPU 不可用或配置错误 **解决方法**: 1. 使用 `./script_name.sh config` 检查配置 2. 检查 conda 环境是否正确激活:`conda env list` 3. 检查依赖是否安装:`which python`, `which mineru-vllm-server` 等 4. 检查模型路径是否存在 5. 检查端口占用:`netstat -tuln | grep :PORT` 6. 检查 GPU 状态:`nvidia-smi` ### 问题:API 无响应 **可能原因**: 1. 服务未正常启动 2. 服务正在启动中(需要等待) 3. 网络连接问题 4. 防火墙阻止 **解决方法**: 1. 使用 `./script_name.sh status` 检查服务状态 2. 查看日志:`./script_name.sh logs` 3. 等待服务完全启动(通常需要几分钟) 4. 检查防火墙设置 ### 问题:GPU 内存不足 **可能原因**: 1. GPU 内存利用率设置过高 2. 多个服务同时运行占用 GPU 3. GPU 显存不足 **解决方法**: 1. 降低 `GPU_MEMORY_UTILIZATION` 参数 2. 使用不同的 GPU 运行不同服务(调整 `CUDA_VISIBLE_DEVICES`) 3. 关闭其他占用 GPU 的程序 ### 问题:模型注册失败(DotsOCR) **可能原因**: 1. vLLM 未正确安装 2. DotsOCR 模型路径不正确 3. PYTHONPATH 设置错误 **解决方法**: 1. 检查 vLLM 安装:`which vllm` 2. 检查模型路径:`ls -la $HF_MODEL_PATH` 3. 检查 PYTHONPATH:`echo $PYTHONPATH` ## 相关文档 - [MinerU vL Tool README](../mineru_vl_tool/README.md) - [PP-StructureV3 Tool README](../ppstructure_tool/README.md) - [PaddleOCR-VL Tool README](../paddle_vl_tool/README.md) - [DotsOCR vL Tool README](../dots.ocr_vl_tool/README.md) ## 注意事项 1. **路径配置**:脚本中的路径(如模型路径、日志路径)需要根据实际部署环境调整 2. **端口冲突**:确保不同服务使用不同的端口,避免冲突 3. **GPU 资源**:合理分配 GPU 资源,避免多个服务竞争同一 GPU 4. **日志管理**:定期清理日志文件,避免磁盘空间不足 5. **服务监控**:建议使用监控工具(如 systemd、supervisor)管理服务,确保服务稳定运行