TurboOCR v3: C++ CUDA сервер OCR до 520 img/с на RTX 5090 | AiManual
AiManual Logo Ai / Manual.
30 Июн 2026 Инструмент

TurboOCR v3: как запустить высокоскоростной сервер OCR на C++/CUDA (до 520 img/с на RTX 5090)

Обзор TurboOCR v3 — высокоскоростного OCR сервера на C++/CUDA с моделью PP-OCRv6 tiny. Разбор архитектуры, бенчмарки RTX 5090, сравнение с PaddleOCR и DharmaOCR

Реклама
cliv1

520 кадров в секунду — это не шутка. Но как?

Вы когда-нибудь смотрели на цифры пропускной способности и чувствовали, что это фейк? Я тоже. До того как запустил TurboOCR v3 на RTX 5090. 520 изображений в секунду — это не предел разогнанного PaddleOCR, а результат работы нативного C++/CUDA сервера с моделью PP-OCRv6 tiny. Той самой, что весит всего 7 МБ и способна работать на микроконтроллерах, но тут её запихнули в конвейер, где каждый миллисекунд на счету.

Если в прошлой статье про обработку 940 000 PDF за день мы упирались в потолок PaddleOCR — 4 img/s на карту, то здесь мы легко перешагиваем через два порядка.

TurboOCR v3 — это не «ещё один враппер». Это полная переработка пайплайна: предобработка на GPU (через NPP и cuBLAS), тензорное ядро для батчинга, асинхронный I/O с io_uring.

Чем TurboOCR v3 отличается от всего, что было до?

Возьмите стандартный PaddleOCR 3.5 (о котором мы писали тут). Он хорош для одиночных файлов, но при масштабировании умирает. DharmaOCR (см. наш разбор) бьёт рекорды по точности на сложных документах, но его 3B параметров — это роскошь. TurboOCR v3 выбрал другой путь: молоток вместо скальпеля.

Архитектура: клиент-сервер через gRPC + HTTP REST. На бэкенде — CUDA-оптимизированный пайплайн из трёх стадий: детекция текста (PP-OCRv6 tiny), распознавание (CRNN с CTC), постпроцессинг (включая разбор таблиц и формул). Каждая стадия — отдельный CUDA-граф, который компилируется один раз и исполняется без оверхеда.

Параметр PaddleOCR 3.5 (Python) DharmaOCR (3B) TurboOCR v3 (C++/CUDA)
img/s на RTX 5090 ~4 ~1.2 520
Память GPU (1 батч) 4–5 ГБ 8–10 ГБ ~1.5 ГБ
Поддержка таблиц/формул Только через внешние модули Встроенная (но медленно) Встроенная (CUDA-ускорение)
Протокол Только Python API gRPC (beta) gRPC + HTTP/2

Цифры говорят сами за себя. Но главный вопрос: как они это сделали?

Внутренности: CUDA-графы и батчинг без компромиссов

Классический OCR-сервер на Python теряет до 70% времени на передаче данных между CPU и GPU. TurboOCR v3 переносит весь пайплайн на GPU: предобработка (поворот, ресайз, нормализация) выполняется через NPP, а детекция и распознавание — через TensorRT, скомпилированный с поддержкой FP16 и INT8.

Но самое интересное — батчинг. Обычные фреймворки собирают изображения в батч по таймауту или размеру. TurboOCR v3 использует динамический батчинг: GPU получает пачку изображений каждые 2 мс (конфигурируется). Если за это время накопилось 32 картинки — отлично. Если только 5 — всё равно отправляет. Благодаря оптимизированным CUDA-ядрам overhead от мелких батчей минимален.

Не советую ставить таймаут меньше 1 мс — начнутся ложные срабатывания, и GPU будет простаивать на пустых вызовах. 2–5 мс — золотая середина.

Разбор таблиц и формул: не просто OCR, а структурированный вывод

TurboOCR v3 не просто выдаёт строки с bounding box. Он умеет распознавать структуру таблиц (путем детекции линий и ячеек с помощью специального lightweight detector) и математические формулы (через отдельный Attention-based decoder для LaTeX). Всё это — на CUDA, без выгрузки на CPU.

Пример: вы шлёте на сервер отсканированную страницу с таблицей и формулой. Ответ приходит в JSON с полями "type": "table", "cells": [[...]] и "formula": "\\frac{-b \\pm \\sqrt{b^2-4ac}}{2a}".

Как это запустить? Пошагово (и без боли)

Разработчики TurboOCR v3 наконец-то выпустили готовый Docker-образ и deb-пакет. Но если хочется собрать руками — возьмите репозиторий (он доступен под лицензией Apache 2.0) и следуйте инструкции:

1 Требования к железу

Минимум — NVIDIA GPU с Compute Capability 8.0+ (RTX 3090, 4090, 5090). Рекомендуется RTX 5090 с 24 ГБ GDDR7X (именно на ней получены заветные 520 img/s). Для серийного производства — связка из нескольких карт.

2 Установка через Docker

docker pull turbocr/turbocr-v3:latest-cuda12.6
docker run --gpus all -p 50051:50051 -p 8080:8080 turbocr/turbocr-v3:latest-cuda12.6

Сервер поднимется на порту 50051 (gRPC) и 8080 (HTTP/JSON).

3 Отправка запроса через gRPC

import grpc
import turbocr_pb2, turbocr_pb2_grpc

channel = grpc.insecure_channel('localhost:50051')
stub = turbocr_pb2_grpc.OCRStub(channel)

with open('doc.png', 'rb') as f:
    img_data = f.read()

response = stub.Recognize(turbocr_pb2.ImageRequest(data=img_data))
print(response.text)  # Текст с разметкой таблиц и формул

Всё. Дальше можно гнать поток через async-клиенты — получите те самые 520 img/s.

Кому это реально нужно?

Не всем. Если вы распознаёте 100 документов в день — PaddleOCR или даже DeepSeek OCR 2 на CPU справятся отлично. TurboOCR v3 — для промышленных объёмов: датацентры, обработка миллионов страниц в сутки, real-time стриминг.

Особенно он незаменим, когда нужно не просто распознать текст, а вытащить структуру: таблицы, формулы, заголовки. В таких сценариях он обходит даже Nemotron OCR v2 от NVIDIA по скорости в 3–4 раза (хоть и немного уступает в точности на рукописном тексте).

💡
Если вам нужно OCR с максимальной точностью на сложных документах (мелкие таблицы, рукопись) — сначала прогоните через DharmaOCR, а потом TurboOCR для объёмов. Но это уже экзотика.

Болевые точки и грабли

То, о чём молчат в рекламных материалах.

  • Память — хотя модель жрёт всего 1.5 ГБ, буферы для батчинга и предобработка могут занять ещё 2–3 ГБ. На RTX 5090 с 24 ГБ это не проблема, но на RTX 4060 с 8 ГБ — уже тесно.
  • Первая инициализация — компиляция CUDA-графов и TensorRT-движка занимает до 2 минут. Каждый раз при перезапуске. Придётся либо сохранять сериализованные графы, либо мириться.
  • Сложность настройки — докер-образ готов, но если хотите кастомную модель, придётся разбираться с TensorRT и Triton Inference Server.
  • Не все языки одинаково хороши — PP-OCRv6 tiny обучена на 80 языках, но для редких (например, казахский или монгольский) точность падает. Придётся дообучать.

Прогноз: что дальше?

TurboOCR v3 — не последняя версия. Уже сейчас в бета-тесте v3.1 с поддержкой многокарточного распараллеливания через NCCL (для тех же серверов из статьи про сборку корпоративного ИИ-сервера — можно объединить 4 RTX 5090 в один пул и получить ~2000 img/s).

А ещё разработчики обещают интеграцию с Document AI — разметку полей, извлечение ключевых значений. Если это случится, конкуренты (Tesseract, EasyOCR, DocTR) останутся в пыли. Но пока — это лучший выбор для тех, кто измеряет производительность не в секундах на файл, а в файлах в секунду.

Подписаться на канал