Всем привет!
Начнем этот год с бенчмарков on-premise VL и Cloud моделей и их производительности в анализе неструктурированных документов и извлечении данных из них через подход Structured output.
У нас сегодня открытые данные (таможенные декларации и неструктурированные документы): паспорта качества, СЭС-сертификаты, сертификаты пожарной безопасности. Все эти документы объединяет то, что они общедоступные и неструктурированные.
Соревнуются четыре модели:
Qwen/Qwen2-VL-7B-Instruct и
Qwen/Qwen2-VL-72B-Instruct (вторая запущена в динамической квантизации на
8FP. А так же claude-3.5-sonnet и gpt-4o
Куда смотрим для понимания точности на метрику DocVQAtest
Qwen2-VL-7B: 94.5% (в сравнении с gpt-4o-mini)
Qwen2-VL-72B: 96.5% (в сравнении с моделями ниже)
GPT-4o: 92.8%
Claude-3.5 Sonnet: 95.2%
Итак, на вход у нас задача извлекать 5 типов данных:
1) Производитель
2) Номер документа
3) Даты
4) Организация, которая выдала
5) Описание
Примерный промпт, который мне понравился:
Analyze the document image and extract the following fields with special attention to mixed character sets:
1. MANUFACTURER (ПРОИЗВОДИТЕЛЬ):
- Extract complete legal name
- Include organization type (ООО, АО etc.)
- Preserve original formatting
2. DOCUMENT NUMBER (НОМЕР ДОКУМЕНТА):
- Extract complete number maintaining original format
- Pay special attention to:
* Cyrillic characters (А-Я, а-я)
* Latin characters (A-Z, a-z)
* Numbers (0-9)
* Special characters (-, .)
- Preserve exact case of letters
3. DATES (ДАТЫ):
- Issue date (дата регистрации)
- Expiry date (действительна по)
- Format: DD.MM.YYYY
- Validate date format
4. ISSUING ORGANIZATION (ОРГАНИЗАЦИЯ):
- Extract complete legal name
- Include location if specified
- Maintain original spelling
5. DESCRIPTION (ОПИСАНИЕ):
- Extract document type and purpose
- Include scope of application
- Preserve key regulatory references
Structured Output схема (специально максимально скрыл данные в некоторых полях, считаю это уже интеллектуальной собственностью):
{
"type": "object",
"properties": {
"manufacturer": {
"type": "string",
"description": "..."
},
"document_number": {
"type": "string",
"description": "..."
},
"issue_date": {
"type": "string",
"description": "..."
},
"expiry_date": {
"type": "string",
"description": "..."
},
"issuing_organization": {
"type": "string",
"description": "..."
},
"description": {
"type": "string",
"description": "..."
}
},
"required": [
"manufacturer",
"document_number",
"issue_date",
"expiry_date",
"issuing_organization",
"description"
]
}
Так как мы запускаемся на VLLM, то у нас на сегодня есть три бэкенда для Structured Output. Но я использую xgrammar.
Конфиг железа:
1) 7b модель запущена на 4090
gpu_executor.py:80] Maximum concurrency for 20000 tokens per request: 3.82x
2) 72b модель в динамической FP8 влезает в одну H100, так что тут не густо по потокам, но хватает для анализа
gpu_executor.py:80] Maximum concurrency for 6000 tokens per request: 2.38x
А что по времени с on-premise
4 сек у 7b и 10 сек у 72b на одну страничку!
В картинку вынес сравнительную таблицу по стоимости(учитывая аренду сервера на месяц), скорости своим комментариям, и емкости взял за пример, что в сутки надо анализировать 20к документов.
Какие выводы можем сделать?
Если у вас огромные потоки данных для анализа в сутки от 10-20к в день, и вам очень важна секьюрность, то on-premise решения уже догоняют Cloud решения по многим характеристикам. Да начинаем с cloud (так как надо SO то пока что только openai)
Главное - грамотно подойти к настройке сервиса и железу (что мы и делаем для наших клиентов), именно разрабатываем выгодную стратегию использования LLM решений в контуре компаний клиентов!