Text Generation
Transformers
Safetensors
English
Russian
mistral
conversational
text-generation-inference

Модель иногда генерирует невалидный результат при асинхронных запросах и использовании структурированного вывода

#8
by rx303 - opened

Добрый день.

Использую vllm server с этой моделью. Отправляю 5 асинхронных запросов к модели через OpenAI API вызовом

jsonSchema = {
"properties": {
"answer": {
"title": "Answer",
"description": "Соответствие сценарию: true (соблюдено), false (нарушено)",
"type": "boolean"
},
"descriptions": {
"title": "Descriptions",
"description": "Обоснование оценки с цитатами и выводом",
"type": "string"
}
},
"required": [
"answer",
"descriptions"
],
"type": "object"
}

MODEL = "Vikhrmodels/Vikhr-Nemo-12B-Instruct-R-21-09-24"

и в цикле через ThreadPoolExecutor:

messages = [{'role': "system", 'content': PROMPT},
{'role': "user", 'content': dialog_text}]
completion_response = client.chat.completions.create(model=MODEL, messages=messages,
extra_body={'guided_json': jsonSchema})

В некоторых случаях модель начинает генерить невалидный json, и запрос падает в vllm после генерации при проверке грамматики (пример с бэкендом guidance, т.к. он дает чуть побольше полезной инфы):

Warning: Parser Error: token "。\n" doesn't satisfy the grammar; forced bytes: got '{'; applying 'ã'; stopping
Warning: Parser Error: token " przet" doesn't satisfy the grammar; forced bytes: got '{'; applying ' '; stopping
WARNING 05-21 06:24:03 [backend_guidance.py:90] LLMatcher error: Parser Error: token "。\n" doesn't satisfy the grammar; forced bytes: got '{'; applying 'ã'
WARNING 05-21 06:24:03 [backend_guidance.py:90] LLMatcher error: Parser Error: token " przet" doesn't satisfy the grammar; forced bytes: got '{'; applying ' '

Текст, который генерится моделью (обрезан по длине):
photo_5292117883494725076_w.jpg

На Vikhr-Llama3.1-8B-Instruct-R-21-09-24 такой проблемы нет. При отправлении запросов последовательно такой проблемы нет. Если убрать схему JSON и просто требовать вывод в таком формате в промпте, такой проблемы нет:
photo_5292117883494725089_y.jpg

Vikhr models org
edited 8 days ago

Привет, @rx303

Возможно проблема происходит из-за отсутствия парсера. Я не помню, нужно ли писать в VLLM свой парсер под structured output, как например для function calling тут.
Мб он подсасывает какой-то парсер по умолчанию для structured output, и он просто не матчится с форматом, который генерит эта моделька.

Скорее всего поэтому у вас и всё работает, когда вы явно указываете в промпте, мол выведи всё в JSON формате, без указания JSON схемы в аргументах.
P.S. В жадном поиске тоже не работает?

vllm использует движки xgrammar или guidance на выбор, чтобы сформировать грамматику по переданной json_schema, и затем использует ее через LogitsProcessor, чтобы маскировать ненужные токены. Т.е. это делается на каждом шаге генерации, и потом еще в самом конце, для всего сгенеренного результата, и, по идее, не должно получиться так, что при генерации накладывается маска по одним правилам, а потом проверяется по другим. Однако ж получается.

Ощущение, что проблема где-то в токенизаторе, и, возможно, из-за гонок. Проблема-то конкретно с этой моделью, и конкретно при асинхронных запросах.
В репо vllm пока молчат, но там и у автора issue такая же проблема: https://github.com/vllm-project/vllm/issues/18376 Так что я и туда, и сюда написал.

Sign up or log in to comment