5.5 KiB
5.5 KiB
TurboOCR — 自定义构建
此目录从源码构建 TurboOCR,覆盖上游预构建镜像未提供的两个目标:
| 变体 | Dockerfile | Profile | 基础镜像 |
|---|---|---|---|
| CUDA 12.x | Dockerfile.cuda12 |
gpu |
nvcr.io/nvidia/tensorrt:24.12-py3(TRT 10.8 / CUDA 12.7) |
| 纯 CPU | Dockerfile.cpu |
cpu |
ubuntu:24.04(ONNX Runtime) |
上游预构建镜像针对 CUDA 13.x(Blackwell / CC 12.0)。如果你的 GPU 属于 CUDA 12.x 范围(Turing 到 Ada Lovelace,CC 7.5–8.9),或者没有 GPU,请使用本目录。
快速开始
-
复制示例环境文件:
cp .env.example .env -
按需构建并启动对应变体:
CUDA 12.x(GPU — Turing 到 Ada Lovelace):
docker compose --profile gpu up -d --build纯 CPU(无需 GPU):
docker compose --profile cpu up -d --build -
访问 API:http://localhost:8000。
说明: 首次构建需要从源码编译 Drogon 和 TurboOCR,耗时约 10–30 分钟,具体取决于 CPU 核心数。后续构建会复用 Docker 层缓存,速度很快。
首次启动说明
GPU 变体
容器首次启动时,TensorRT 会将 4 个 ONNX 模型编译为引擎文件。在 RTX 3070 Laptop 上的实测耗时:
| 引擎 | 耗时 |
|---|---|
| det | 约 5 分钟 |
| rec | 约 30 分钟 |
| cls | 约 4 分钟 |
| layout | 约 28 分钟 |
| 合计 | 约 67–90 分钟 |
高端桌面 GPU 约 15 分钟完成。编译期间容器显示 unhealthy 属于正常现象——所有引擎构建完成后服务启动,状态切换为 healthy。后续重启会复用缓存引擎,几乎瞬间完成。
提示: 设置
TURBOOCR_DISABLE_LAYOUT=1可跳过版面检测引擎的编译(笔记本 GPU 约节省 28 分钟)。仅在不需要?layout=1PDF 端点时使用此选项。
CPU 变体
无 TRT 编译过程。ONNX Runtime 在启动时直接加载模型,通常在 60 秒内变为 healthy。
默认端口
| 端口 | 协议 | 说明 |
|---|---|---|
| 8000 | HTTP | OCR REST API + 健康检查/指标 |
| 50051 | gRPC | OCR gRPC API |
主要环境变量
| 变量名 | 说明 | 默认值 |
|---|---|---|
TURBOOCR_VERSION |
构建所用的 Git 标签 | v2.1.1 |
TURBOOCR_HTTP_PORT_OVERRIDE |
HTTP API 主机端口 | 8000 |
TURBOOCR_GRPC_PORT_OVERRIDE |
gRPC API 主机端口 | 50051 |
TURBOOCR_LANG |
语言包:latin、chinese、greek、eslav、arabic、korean、thai |
""(latin) |
TURBOOCR_SERVER |
当使用 chinese 时,设为 1 启用 84 MB 服务端识别模型 |
"" |
TURBOOCR_PIPELINE_POOL_SIZE |
并发 GPU 流水线数(每条约 1.4 GB 显存),留空则自动 | "" |
TURBOOCR_DISABLE_LAYOUT |
禁用版面检测模型(节省约 300–500 MB 显存) | 0 |
TURBOOCR_PDF_MODE |
PDF 解析模式:ocr / geometric / auto / auto_verified |
ocr |
TURBOOCR_CPU_LIMIT |
CPU 核心限制(两个变体通用) | 8.0 |
TURBOOCR_MEMORY_LIMIT |
内存限制——GPU 变体 12G,CPU 变体 4G |
变体默认值 |
TURBOOCR_GPU_COUNT |
预留的 NVIDIA GPU 数量(仅 GPU 变体) | 1 |
TURBOOCR_SHM_SIZE |
fastpdf2png 共享内存——GPU 变体 2g,CPU 变体 512m |
变体默认值 |
TZ |
容器时区 | UTC |
存储
turboocr_build_cache——命名卷,挂载于/home/ocr/.cache/turbo-ocr。用于存储 TRT 引擎文件(GPU 变体)或模型缓存目录(CPU 变体)。必须使用命名卷——绑定挂载空主机目录会遮蔽镜像内置语言包,导致服务无法加载模型。
支持的 GPU 架构(CUDA 12.x 变体)
| 算力版本 | 架构 | GPU 型号 |
|---|---|---|
| 7.5 | Turing | GTX 16xx、RTX 20xx |
| 8.0 | Ampere | A100、RTX 30xx(服务器) |
| 8.6 | Ampere | RTX 30xx(桌面/笔记本) |
| 8.9 | Ada Lovelace | RTX 40xx |
Blackwell(CC 12.0,RTX 50xx)需要 CUDA 13.x——请改用 src/turboocr 中的上游预构建镜像。
说明
- 两个 Dockerfile 均在镜像内通过
git clone从源码构建 TurboOCR,构建时需要可访问互联网。 - CUDA 12.x Dockerfile 将
CMAKE_CUDA_ARCHITECTURES设置为75;80;86;89,去除了 CUDA 12.x 不支持的 CC 12.0。 - TensorRT 10.8 在
24.12-py3基础镜像中位于/usr/local/tensorrt,与 CMake 默认值一致,无需额外的-DTENSORRT_DIR参数。 - CPU 变体使用 ONNX Runtime 1.22.0,生成同时支持 HTTP 和 gRPC 接口的
paddle_cpu_server二进制文件。
访问端点
- HTTP API:http://localhost:8000
- gRPC API:
localhost:50051 - 健康检查:http://localhost:8000/health
- 就绪检查:http://localhost:8000/health/ready
- Prometheus 指标:http://localhost:8000/metrics
安全说明
- API 默认无身份认证。生产环境请在前面套一层反向代理(nginx、Caddy 等)。
- PDF 默认模式为
ocr,只信任像素数据,可安全处理不可信来源的 PDF 上传。 - 如果你的服务接收不可信来源的 PDF,不要将
TURBOOCR_PDF_MODE全局设为geometric或auto。